2 changed files with 110 additions and 1 deletions
@ -0,0 +1,109 @@ |
|||||
|
#include "app_task_tcp.h" |
||||
|
#include "../msp/uart0.h" |
||||
|
#include "../msp/uart4.h" |
||||
|
#include "../app/app_task_gm35.h" |
||||
|
#include "../app/app_common.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) //发送包
|
||||
|
//L0_uart0_sendArray((U8*)&s->loopPkg,s->pkglen);
|
||||
|
L3_gm35_send((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
|
||||
|
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->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->treg = (U16)(s->pAckPkg->buf[0]) << 8 | (U16)(s->pAckPkg->buf[1]); |
||||
|
if(s->treg == G.ccmd_slaver_info[0].reg) |
||||
|
{ |
||||
|
G.authed = 1; |
||||
|
} |
||||
|
else if(s->treg == G.ccmd_slaver_info[2].reg) |
||||
|
{ |
||||
|
G.flowStarted = 1; |
||||
|
} |
||||
|
} |
||||
|
#endif |
||||
|
} |
||||
|
} |
||||
|
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) //切换下一个
|
||||
|
if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX) |
||||
|
{ |
||||
|
s->slaverIndex = 0; |
||||
|
} |
||||
|
L2_task_go(D_task_tcp_constructor_modbus_pkg); |
||||
|
|
||||
|
TTSS_Task_end(); |
||||
|
} |
||||
|
|
||||
|
|
Loading…
Reference in new issue