#include "app_task_tcp.h" #include "../msp/uart0.h" #include "../msp/uart2.h" #include "../app/task_w600.h" #include "../app/app_config.h" #define MODBUS_SLAVER_DW20_REG_START 0x02 #define MODBUS_SLAVER_DW20_REG_NUM 0x02 #define MODBUS_SLAVER_RETRY_MAX_TIME 1 TS_tcp ts_tcp; void L3_task_tcp_init(void) { L1_task_init(&ts_tcp.task); L3_task_s_go(ts_tcp,D_task_init); ts_tcp.slaverIndex = 0; ts_tcp.pkglen = 0; ts_tcp.retryTimes = 0; ts_tcp.ackFlag = 0; } #define D_task_tcp_constructor_modbus_pkg 0x51 #define D_task_tcp_send_modbus_pkg 0x52 #define D_task_tcp_wait_modbus_ack 0x53 #define D_task_tcp_switch_next_slaver 0x54 void L3_task_tcp_handle(TS_tcp *s) { TTSS_Task_init() L2_task_go(D_task_tcp_constructor_modbus_pkg); TTSS_Task_step(D_task_tcp_constructor_modbus_pkg) //构造包 if(G.ccmd_slaver_info[s->slaverIndex].mask > 0) { s->pkglen = L3_pack_ccmodbus(&s->loopPkg,G.ccmd_slaver_info + s->slaverIndex); s->ackFlag = 0; s->retryTimes = 0; L2_task_go(D_task_tcp_send_modbus_pkg); } else { L2_task_go(D_task_tcp_switch_next_slaver); } TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包 L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen); s->sendStamp = s_nos_tick.t_1s; if(G.ccmd_slaver_info[s->slaverIndex].mask == 1) { G.ccmd_slaver_info[s->slaverIndex].mask = 0; } L2_task_go(D_task_tcp_wait_modbus_ack); TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack //L0_uart0_uc(s_uart2_tcp_rec.ok + '0'); if(s_uart2_tcp_rec.ok) { s_uart2_tcp_rec.ok = 0; s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s; s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp); L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num); if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) { s->ackFlag = 1; switch(s->slaverIndex) { case 0://如果oper == 90:成功,91 == 不成功 switch(G.ccmd_slaver_info[s->slaverIndex].oper) { case 0x90: //L0_uart0_sendstr("11111"); G.authed = 1; break; case 0x91: G.authed = 0; break; } #if 0 if(G.ccmd_slaver_info[s->slaverIndex].oper == 0x90) { L0_uart0_sendstr("111"); G.authed = 1; G.au_succ = 1; } else { L0_uart0_sendstr("222"); G.authed = 0; G.au_fail = 1; } #endif break; case 2: break; default: break; } } L2_task_go(D_task_tcp_switch_next_slaver); } else if(s_nos_tick.t_1s - s->sendStamp >= 5) //重发 { if(++s->retryTimes < 3) { L2_task_go(D_task_tcp_send_modbus_pkg); } else { L2_task_go(D_task_tcp_switch_next_slaver); } } //L0_uart0_uc(s->ackFlag); TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个 if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX) { s->slaverIndex = 0; } L2_task_go(D_task_tcp_constructor_modbus_pkg); TTSS_Task_end(); }