diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym index 5e17e23..606fe54 100644 Binary files a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym and b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym differ diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.siwork b/si4/soft_gsm_main.si4project/soft_gsm_main.siwork index f5f944d..16ad282 100644 Binary files a/si4/soft_gsm_main.si4project/soft_gsm_main.siwork and b/si4/soft_gsm_main.si4project/soft_gsm_main.siwork differ diff --git a/source/app/app_common.c b/source/app/app_common.c index 6a8f6ed..a45957c 100644 --- a/source/app/app_common.c +++ b/source/app/app_common.c @@ -93,7 +93,7 @@ void Lu_register_init() G.ccmd_slaver_info[2].reg = 0x03; G.ccmd_slaver_info[2].regnum = 0x01; G.ccmd_slaver_info[2].bytes = G.ccmd_slaver_info[2].regnum * 2; - G.ccmd_slaver_info[2].buf = (U8*)&G.flowStarted; + G.ccmd_slaver_info[2].buf = (U8*)&G.flowStartVal; G.ccmd_slaver_info[2].mask = 0; G.ccmd_slaver_info[3].slaver = SLAVER_TCP_SERVER_ID; //服务? @@ -107,9 +107,9 @@ void Lu_register_init() G.modbusstmp = 0; G.authed = 0; G.flowStarted = 0; + G.flowStartVal = 1; G._keyled = G._rfid = 0; - G.tcpLastRecvStamp = 0; } void L3_protocol_handler_uart4_fun(U8 *pPara) diff --git a/source/app/app_common.h b/source/app/app_common.h index eb9d57e..8e480ed 100644 --- a/source/app/app_common.h +++ b/source/app/app_common.h @@ -202,12 +202,12 @@ typedef struct printer_maintenance_global vU32 modbusstmp; U16 authed; U16 flowStarted; + U16 flowStartVal; U8 ccid[21]; //保存ccid卡号空间 20+'\0' TS_BoardStatus boardstatus; U8 _keyled; U8 _rfid; - U32 tcpLastRecvStamp; }PMGlobal; diff --git a/source/app/app_task_gm35.c b/source/app/app_task_gm35.c index 91fc301..942a8db 100644 --- a/source/app/app_task_gm35.c +++ b/source/app/app_task_gm35.c @@ -372,6 +372,17 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) } TTSS_Task_step(TTSS_TASK_GM35_FLOW_CIPSTART_SUCCESS) + if(1 == g_at_send_status.conn_ok) + { + //连续20s没有收到数据,断线重连 + if(s_nos_tick.t_1s - g_at_send_status.tcp_last_recv_stmp >= 60) //20 + { + L0_uart0_uc('D'); + L0_uart4_sendstr(AT_INS_CLOSED); + g_at_send_status.conn_ok = 0; //等待收到close 自动关闭 + } + } + if(0 == g_at_send_status.conn_ok) { //L0_uart4_uc(0x1a); //关闭send diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index e84e4fb..5dd4efb 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -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; diff --git a/source/app/app_task_tcp.h b/source/app/app_task_tcp.h index 74e050d..4ced5f7 100644 --- a/source/app/app_task_tcp.h +++ b/source/app/app_task_tcp.h @@ -15,6 +15,7 @@ typedef struct U32 sendStamp; U8 retryTimes; U8 ackFlag; + U16 treg; }TS_tcp; #define U485_TIMEOUT 3 //3 x 100ms = 300ms diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c index c62030c..98481eb 100644 --- a/source/app/app_task_tcp_control.c +++ b/source/app/app_task_tcp_control.c @@ -17,23 +17,26 @@ void L3_task_tcp_control_init(void) #define D_task_tcp_control_01 0x51 #define D_task_tcp_control_02 0x52 + void L3_task_tcp_control_handle(TS_tcp_control *s) { - TTSS_Task_init(); + TTSS_Task_init(); L2_task_go(D_task_tcp_control_01); - + TTSS_Task_step(D_task_tcp_control_01) if(s->conn_ok_pool != g_at_send_status.conn_ok) { G.authed = 0; s->conn_ok_pool = g_at_send_status.conn_ok; } - - if(s->conn_ok_pool) + L2_task_go(D_task_tcp_control_02); + + TTSS_Task_step(D_task_tcp_control_02) + if(g_at_send_status.conn_ok) { //3s一次发送数据包 if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 2) - { + { if(!G.authed) { //发送认证包 @@ -48,21 +51,11 @@ void L3_task_tcp_control_handle(TS_tcp_control *s) { G.ccmd_slaver_info[3].mask = 1; } - } - ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s; - } - - L2_task_go(D_task_tcp_control_02); - - TTSS_Task_step(D_task_tcp_control_02) - if(g_at_send_status.conn_ok) - { - if(s_nos_tick.t_1s - G.tcpLastRecvStamp >= 20) - { - g_at_send_status.conn_ok = 0; + ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s; } } L2_task_go(D_task_tcp_control_01); + TTSS_Task_end(); }