平车主控板(运维板)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

97 lines
2.5 KiB

#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
{
P55 = 0;
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);
L0_uart4_sendArray((U8*)&s->loopPkg, s->pkglen);
L0_uart0_sendArray((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);
L3_gm35_rcv_data((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(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();
}