|
|
@ -30,7 +30,7 @@ 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) |
|
|
|
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); |
|
|
@ -43,53 +43,60 @@ void L3_task_tcp_handle(TS_tcp *s) |
|
|
|
L2_task_go(D_task_tcp_switch_next_slaver); |
|
|
|
} |
|
|
|
|
|
|
|
TTSS_Task_step(D_task_tcp_send_modbus_pkg) |
|
|
|
TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包
|
|
|
|
L0_uart0_sendArray((U8*)&s->loopPkg,s->pkglen); |
|
|
|
L3_gm35_send((U8*)&s->loopPkg,s->pkglen); |
|
|
|
s->sendStamp = s_nos_tick.t_5ms; |
|
|
|
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) |
|
|
|
if(s_nos_tick.t_5ms - s->sendStamp >= 300) |
|
|
|
TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack
|
|
|
|
if(s_uart4_tcp_rec.ok) |
|
|
|
{ |
|
|
|
if(s_uart4_tcp_rec.ok) |
|
|
|
s_uart4_tcp_rec.ok = 0; |
|
|
|
g_at_send_status.tcp_last_recv_stmp = s_nos_tick.t_1s; |
|
|
|
|
|
|
|
s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart4_tcp_rec.sp); |
|
|
|
L0_uart0_sendArray((U8*)s->pAckPkg,s->pAckPkg->num + 3); |
|
|
|
if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) |
|
|
|
{ |
|
|
|
s_uart4_tcp_rec.ok = 0; |
|
|
|
s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart4_tcp_rec.sp); |
|
|
|
L0_uart0_sendArray((U8*)s->pAckPkg,s->pAckPkg->num + 3); |
|
|
|
if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) |
|
|
|
s->ackFlag = 1; |
|
|
|
switch(s->slaverIndex) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
G.authed = 1; |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
G.flowStarted = 1; |
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
#if 0 |
|
|
|
if(s->pAckPkg->oper == MODBUS_OPER_WRITE_M) |
|
|
|
{ |
|
|
|
s->ackFlag = 1; |
|
|
|
G.tcpLastRecvStamp = s_nos_tick.t_1s; |
|
|
|
if(s->pAckPkg->oper == MODBUS_OPER_WRITE_M) |
|
|
|
s->treg = (U16)(s->pAckPkg->buf[0]) << 8 | (U16)(s->pAckPkg->buf[1]); |
|
|
|
if(s->treg == G.ccmd_slaver_info[0].reg) |
|
|
|
{ |
|
|
|
U16 reg = (U16)(s->pAckPkg->buf[0]) << 8 | (U16)(s->pAckPkg->buf[1]); |
|
|
|
if(reg == G.ccmd_slaver_info[0].reg) |
|
|
|
{ |
|
|
|
G.authed = 1; |
|
|
|
} |
|
|
|
else if(reg == G.md_slaver_info[2].reg) |
|
|
|
{ |
|
|
|
G.flowStarted = 1; |
|
|
|
} |
|
|
|
G.authed = 1; |
|
|
|
} |
|
|
|
else if(s->treg == G.ccmd_slaver_info[2].reg) |
|
|
|
{ |
|
|
|
G.flowStarted = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
|
if(s->ackFlag || ++s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME) |
|
|
|
{ |
|
|
|
L2_task_go(D_task_tcp_switch_next_slaver); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
L2_task_go(D_task_tcp_send_modbus_pkg); |
|
|
|
} |
|
|
|
} |
|
|
|
if(s->ackFlag == 1 || s_nos_tick.t_1s - s->sendStamp >= 5) //收到ack或者超时
|
|
|
|
{ |
|
|
|
L2_task_go(D_task_tcp_switch_next_slaver); |
|
|
|
} |
|
|
|
|
|
|
|
TTSS_Task_step(D_task_tcp_switch_next_slaver) |
|
|
|
TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个
|
|
|
|
if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX) |
|
|
|
{ |
|
|
|
s->slaverIndex = 0; |
|
|
|