105 lines
2.1 KiB
C
105 lines
2.1 KiB
C
#include "include.h"
|
|
#include "metertable.h"
|
|
#include "meterseltable.h"
|
|
#include "rtc_ext.h"
|
|
|
|
SemaphoreHandle_t xSemaphore_ctl;
|
|
extern void simul_plc_rx_addr(u8 *str1);
|
|
extern void controlkeyaddr(u8 *str1,u8 val);
|
|
|
|
static u8 state_flag = 0;
|
|
|
|
static u8 ctl_type = 0;
|
|
|
|
void ctl_task_1()
|
|
{
|
|
u16 num = metertable_getnum();
|
|
u16 i = 0;
|
|
for(i=0;i<num;i++)
|
|
{
|
|
u8 * addr = metertable_getadddr(i);
|
|
if(METER_CLOSE == state_flag)
|
|
{
|
|
controlkeyaddr(addr,0x00);
|
|
}
|
|
else
|
|
{
|
|
controlkeyaddr(addr,0xFF);
|
|
}
|
|
vTaskDelay(MBUS_SWITCH_TIMEOUT+40000);
|
|
|
|
st_rtc_ext * time = (st_rtc_ext *)GetCurrentTime();
|
|
printf("\r\n%02x-%02x-%02x %02x:%02x:%02x \r\n", time->year,time->month,time->day,time->hour,time->min,time->sec);
|
|
printf("阀门动作 总数=%d i=%d 完成\r\n",num,i+1);
|
|
}
|
|
}
|
|
|
|
void ctl_task_2()
|
|
{
|
|
u16 num = meterseltable_getnum();
|
|
u16 i = 0;
|
|
for(i=0;i<num;i++)
|
|
{
|
|
u8 * addr = meterseltable_getadddr(i);
|
|
if(1 == state_flag)
|
|
{
|
|
controlkeyaddr(addr,0x00);
|
|
}
|
|
else
|
|
{
|
|
controlkeyaddr(addr,0xFF);
|
|
}
|
|
vTaskDelay(MBUS_SWITCH_TIMEOUT+40000);
|
|
st_rtc_ext * time = (st_rtc_ext *)GetCurrentTime();
|
|
printf("\r\n%02x-%02x-%02x %02x:%02x:%02x \r\n", time->year,time->month,time->day,time->hour,time->min,time->sec);
|
|
printf("阀门动作 总数=%d i=%d 完成\r\n",num,i+1);
|
|
}
|
|
|
|
meterseltable_init();
|
|
}
|
|
|
|
void ctl_start(u8 flag)
|
|
{
|
|
|
|
ctl_type = 0;
|
|
state_flag = flag;
|
|
xSemaphoreGive(xSemaphore_ctl);
|
|
}
|
|
|
|
void ctl_sel_start(u8 flag)
|
|
{
|
|
|
|
ctl_type = 1;
|
|
state_flag = flag;
|
|
xSemaphoreGive(xSemaphore_ctl);
|
|
}
|
|
|
|
void ctl_task()
|
|
{
|
|
vSemaphoreCreateBinary(xSemaphore_ctl);
|
|
xSemaphoreTake(xSemaphore_ctl, 0);
|
|
for (;;)
|
|
{
|
|
xSemaphoreTake(xSemaphore_ctl, portMAX_DELAY);
|
|
|
|
|
|
vTaskDelay(10000); //先等待gprs回应
|
|
|
|
printf("先等待gprs回应\r\n");
|
|
|
|
|
|
//
|
|
if(0 == ctl_type)
|
|
{
|
|
ctl_task_1();
|
|
}
|
|
else
|
|
{
|
|
ctl_task_2();
|
|
}
|
|
xSemaphoreTake(xSemaphore_ctl, 0);
|
|
}
|
|
}
|
|
|
|
|