|
|
|
#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_5ms;
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
if(s_uart4_tcp_rec.ok)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
G.tcpLastRecvStamp = s_nos_tick.t_1s;
|
|
|
|
if(s->pAckPkg->oper == MODBUS_OPER_WRITE_M)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(++s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME)
|
|
|
|
{
|
|
|
|
//断开连接
|
|
|
|
g_at_send_status.conn_ok = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
|
|
|
|