diff --git a/keilp/cc_as_stc02_gsm_main.uvproj b/keilp/cc_as_stc02_gsm_main.uvproj index 0faaf8a..1b79a78 100644 --- a/keilp/cc_as_stc02_gsm_main.uvproj +++ b/keilp/cc_as_stc02_gsm_main.uvproj @@ -411,11 +411,6 @@ 1 ..\source\app\app_task_tcp_control.c - - app_task_gm35.c - 1 - ..\source\app\app_task_gm35.c - app_task_wdt.c 1 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 ef194f5..b8b2adf 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.sip_xm b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm index 3bb8341..607aaa9 100644 Binary files a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm and b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm differ diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsb b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsb index bb93458..e40fe8b 100644 Binary files a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsb and b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsb differ diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsd b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsd index c34416d..fcf63f2 100644 Binary files a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsd and b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xsd differ diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.siwork b/si4/soft_gsm_main.si4project/soft_gsm_main.siwork index b71bf04..e66c771 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 23fab30..518b101 100644 --- a/source/app/app_common.c +++ b/source/app/app_common.c @@ -9,26 +9,26 @@ struct printer_maintenance_global G; U8 ccmodbus_len = 0; -#define KEY_RFID_MAP_SIZE 26 +#define KEY_RFID_MAP_SIZE 30 U32 code key_rfid_map[KEY_RFID_MAP_SIZE] = { /// key, rfid //0x01,1, ///S1 ///key_map[0] key_map[1] //0x02,11, ///S2 ///key_map[n] key_map[n+1] 0x02,0x02000020, ///呼叫 S2 - 0x12,0x02000001, ///分诊 S12 + 0x12,0x02000001, ///分诊 S12 0x03,0x03010301, ///一线 S3 医生1 0x03,0x03010302, ///一线 S3 医生2 - 0x16,0x02000059, ///采血 S13 + 0x16,0x02000059, ///采血 S13 0x04,0x02000025, ///心电 S4 - 0x17,0x02000003, ///CT S14 + 0x17,0x02000003, ///CT S14 0x08,0x03020301, ///二线 S5 医生1 0x08,0x03020302, ///二线 S5 医生2 - 0x18,0x01000008, ///谈话 S15 + 0x18,0x01000008, ///谈话 S15 0x09,0x01000009, ///签字 S6 - 0x1D,0x02000060, ///团注 S16 + 0x1D,0x02000060, ///团注 S16 0x0A,0x02000005, ///介入 S7 - 0x1F,0x0100000C, ///置鞘(穿刺) S17 + 0x1F,0x0100000C, ///置鞘(穿刺) S17 0x0B,0x02000023, ///病房 S8 //0x1d,9, ///S16 //0x1f,10, ///S17 @@ -190,6 +190,7 @@ void L3_protocol_handler_uart0_fun(TS_PH3_ccmodbus *ccmodbus) } } +#if 0 void L3_protocol_handler_uart4_fun(U8 *pPara) { #if 0 @@ -296,6 +297,7 @@ void L3_protocol_handler_uart4_fun(U8 *pPara) } #endif } +#endif void L2_do_board_reset(void) { diff --git a/source/app/app_drv.c b/source/app/app_drv.c index 8cf8e2e..42bed40 100644 --- a/source/app/app_drv.c +++ b/source/app/app_drv.c @@ -29,10 +29,7 @@ TS_drv_ ts_drv[TS_DRV_MAX]= 0x99,NULL, //a9 gprs 0x00,NULL, }; -#endif - -#if 0 - + void L3_task_a9_rcv_handle(TS_Handle_PH3 *p) { if (1 == p->ok) @@ -69,90 +66,103 @@ void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p) #endif } } -#endif -void L3_UARTcom4_exp_protocol(TS_Handle_PH3 *p) +//FF FE 05 00 00 28 FC CC 从FF开始校验 +int L3_checkCrc16(TS_PH3_ccmodbus *ccmodbus) { - if (1 == p->ok ) //收到消息 + U8 crc[2]; + crc16(crc,&ccmodbus->filter1,ccmodbus->num + 3 - 2); + if(crc[0] == ccmodbus->buf[ccmodbus->num-2-2] && crc[1] == ccmodbus->buf[ccmodbus->num-2-1]) { - if(L3_checkCrc16(&p->ts_ccmodbus)) //CRC校验 - { - if(p->ts_ccmodbus.slaver == G.p.wisdom_car_no ) //平车ID - { - switch(p->ts_ccmodbus.oper) //操作码0x10 - case MODBUS_OPER_WRITE_M: - - - L3_protocol_handler_uart4_fun(&p->ts_ccmodbus); - } - } - g_at_send_status.gprs_last_recv_stmp = s_nos_tick.t_1s; - L3_protocol_handler_uart4_fun(p->buf+1); - p->ok = 0; - + return 1; } + return 0; } //FF FE 05 00 00 28 FC CC 从FF开始校验 -int L3_checkCrc16(TS_PH3_ccmodbus *ccmodbus) +int L3_checkCrc16_4g(TS_PH3_ccmodbus *ccmodbus) { U8 crc[2]; - crc16(crc,&ccmodbus->filter1,ccmodbus->num + 3 - 2); + crc16(crc,&ccmodbus->slaver,ccmodbus->num - 2); if(crc[0] == ccmodbus->buf[ccmodbus->num-2-2] && crc[1] == ccmodbus->buf[ccmodbus->num-2-1]) { return 1; } return 0; } +#endif void L3_UARTcom0_exp_protocol(TS_Handle_PH3 *p) { if (1 == p->ok) + { + L3_protocol_handler_uart0_fun(&p->ts_ccmodbus); + p->ok = 0; + } +} + + +void L3_UARTcom4_exp_protocol(TS_Handle_PH3 *p) +{ + if (1 == p->ok ) //收到消息 { - if(L3_checkCrc16(&p->ts_ccmodbus)) - { - switch(p->ts_ccmodbus.slaver) + if(p->ts_ccmodbus.slaver == G.p.wisdom_car_no ) + {//平车作为slaver,服务器作为master发送的ccmodbus消息 + U16 reg = (U16)p->ts_ccmodbus.buf[0] << 8 | p->ts_ccmodbus.buf[1]; + if(p->ts_ccmodbus.oper == MODBUS_OPER_WRITE_M) { - #if 0 - case SLAVER_RFID: - L0_uart0_uc('r'); - L0_uart0_uchex(p->ts_ccmodbus.buf[0]); - if(p->ts_ccmodbus.buf[0] != G._rfid) //rfid发生改变 + if(reg == 0x0012) //RFID的寄存器,先写死,后面再改 { - G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; + G.rfid[0] = p->ts_ccmodbus.buf[5]; + G.rfid[1] = p->ts_ccmodbus.buf[6]; + G.rfid[2] = p->ts_ccmodbus.buf[7]; + G.rfid[3] = p->ts_ccmodbus.buf[8]; + G.rfid[4] = p->ts_ccmodbus.buf[9]; + G.rfid[5] = p->ts_ccmodbus.buf[10]; + G.rfidval = (U32)G.rfid[2] << 24 | (U32)G.rfid[3]<<16 | (U32)G.rfid[4]<<8 | (U32)G.rfid[5]; + G.rfidHospitalNo = (U16)G.rfid[0] << 8 | (U32)G.rfid[1]<<0; } - break; - #endif - case SLAVER_COM0: - L3_protocol_handler_uart0_fun(&p->ts_ccmodbus); - break; + //TODO 先不回复,之后再改 + //L0_uart4_sendArray(); } } + else if(p->ts_ccmodbus.slaver == SLAVER_TCP_SERVER_ID) + {//平车作为master,服务器作为slaver回复的ack消息 + if(p->ts_ccmodbus.oper == MODBUS_OPER_AUTH) + {//0x90 + G.authed = 1; + } + else + {//0x03,0x06,0x10 + U16 reg = (U16)p->ts_ccmodbus.buf[0] << 8 | p->ts_ccmodbus.buf[1]; + if(reg == 0x0003) + {//流程开始包 + G.flowStarted = 1; + } + } + } p->ok = 0; } } - void L3_UARTcom3_exp_protocol(TS_Handle_PH3 *p) { if (1 == p->ok) { - if(L3_checkCrc16(&p->ts_ccmodbus)) - { - L0_uart0_uc('r'); - L0_uart0_uchex(p->ts_ccmodbus.buf[5]); - - //G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; - G.rfid[0] = p->ts_ccmodbus.buf[0]; - G.rfid[1] = p->ts_ccmodbus.buf[1]; - G.rfid[2] = p->ts_ccmodbus.buf[2]; - G.rfid[3] = p->ts_ccmodbus.buf[3]; - G.rfid[4] = p->ts_ccmodbus.buf[4]; - G.rfid[5] = p->ts_ccmodbus.buf[5]; - G.rfidval = (U32)G.rfid[2] << 24 | (U32)G.rfid[3]<<16 | (U32)G.rfid[4]<<8 | (U32)G.rfid[5]; - G.rfidHospitalNo = (U32)G.rfid[0] << 8 | (U32)G.rfid[1]<<0; - } + L0_uart0_uc('r'); + L0_uart0_uchex(p->ts_ccmodbus.buf[5]); + + //G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; + G.rfid[0] = p->ts_ccmodbus.buf[0]; + G.rfid[1] = p->ts_ccmodbus.buf[1]; + G.rfid[2] = p->ts_ccmodbus.buf[2]; + G.rfid[3] = p->ts_ccmodbus.buf[3]; + G.rfid[4] = p->ts_ccmodbus.buf[4]; + G.rfid[5] = p->ts_ccmodbus.buf[5]; + G.rfidval = (U32)G.rfid[2] << 24 | (U32)G.rfid[3]<<16 | (U32)G.rfid[4]<<8 | (U32)G.rfid[5]; + G.rfidHospitalNo = (U32)G.rfid[0] << 8 | (U32)G.rfid[1]<<0; + p->ok = 0; } } diff --git a/source/app/app_drv.h b/source/app/app_drv.h index b3c0afe..1176005 100644 --- a/source/app/app_drv.h +++ b/source/app/app_drv.h @@ -29,8 +29,8 @@ extern TS_drv_ ts_drv[TS_DRV_MAX]; //extern void L3_UARTcom2_exp_protocol(TS_Handle_PH1A *p); extern void L3_UARTcom0_exp_protocol(TS_Handle_PH3 *p); extern void L3_UARTcom3_exp_protocol(TS_Handle_PH3 *p); -extern void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p); -extern void L3_task_a9_rcv_handle(TS_Handle_PH3 *p); +extern void L3_UARTcom4_exp_protocol(TS_Handle_PH3 *p); +//extern void L3_task_a9_rcv_handle(TS_Handle_PH3 *p); #endif // #ifndef _bsp_drv_H diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index e23134d..5c2d5b7 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -45,44 +45,14 @@ void L3_task_tcp_handle(TS_tcp *s) } 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); + //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); - } + 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) diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c index 6825915..a6252af 100644 --- a/source/app/app_task_tcp_control.c +++ b/source/app/app_task_tcp_control.c @@ -24,38 +24,31 @@ void L3_task_tcp_control_handle(TS_tcp_control *s) 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; - } + //TODO 连接状态改变,重新认证 + //G.authed = 0; L2_task_go(D_task_tcp_control_02); TTSS_Task_step(D_task_tcp_control_02) - if(/*g_at_send_status.conn_ok*/1) - { - //3s一次发送数据包 - if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3) - { - if(!G.authed) - { - //发送认证包 - G.ccmd_slaver_info[0].mask = 1; - } - else if(!G.flowStarted) - { - //发送流程开始包 - G.ccmd_slaver_info[2].mask = 1; - } - else - { - G.ccmd_slaver_info[3].mask = 1; - } - ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s; + //3s一次发送数据包 + if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3) + { + if(!G.authed) + { + //发送认证包 + G.ccmd_slaver_info[0].mask = 1; + } + else if(!G.flowStarted) + { + //发送流程开始包 + G.ccmd_slaver_info[2].mask = 1; + } + else + { + 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_01); - TTSS_Task_end(); } diff --git a/source/app/main.c b/source/app/main.c index c81b5ca..a6a0f75 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -76,26 +76,10 @@ void L0_main_init(void) ///step: 7>>>>>>>>>寄存器默认初始化>>>>>>>>>>>>> L2_register_init(); //L3_flash_write_page0(); -#if 0 -///step: 5>>>>>>>>>看门狗>>>>>>>>>>>>> - //L0_wdt_init(); - L2_gm35_init(); - - -///step: 6>>>>>>>>>Flash>>>>>>>>>>>>> - L3_flash_init(); - L3_flash_read_param(); - -///step : 7>>>>>>>>>任务相关>>>>>>>>> - L3_task_report_init(); //与上位机通信 - L3_task_relay_init(); //继电器 - L3_task_gm35_core_init(); - L3_task_wdt_init(); //看门狗任务初始化 -#endif L3_task_wdt_init(); - L2_gm35_init(); - L3_task_gm35_core_init(); + //L2_gm35_init(); + //L3_task_gm35_core_init(); L3_task_485_init(); //485轮询任务初始化 L3_task_485_control_init(); L3_task_tcp_init(); //485轮询任务初始化 @@ -131,17 +115,10 @@ void main(void) if(1 == s_nos_tick.t1s_heatbeart) { s_nos_tick.t1s_heatbeart = 0; - //L0_uart0_uc('.'); - //L0_uart0_sendArray("abcdefg", 7); if(s_nos_tick.t_1s == 4){ G.pi_weight = G.total_weight; L0_uart0_uc('#'); } - //if(s_nos_tick.t_1s >= 10) - //{ - //G.jing_weight = (s_nos_tick.t_1s - 10)% 100* 10; - //G.rfid = s_nos_tick.t_1s - 10 % 13 + 1; - //} } //看门狗 @@ -152,25 +129,19 @@ void main(void) //master->slaver发送逻辑控制 L3_task_485_control_handle(&ts_485_control); -#if 1 - - //串口0,3 RFID接收 - L3_task_rfid_handle(&ts_rfid); - L3_UARTcom0_exp_protocol(&s_uart0_rec); - L3_UARTcom3_exp_protocol(&s_uart3_rec); - - //gm35维持连接 - //L3_task_gm35_core_handle(); - - //解析串口4协议(gsm模块收到的at响应消息+服务器发送消息) - L3_UARTcom4_exp_protocol(&s_uart4_at_rec); //tcp发送 L3_task_tcp_handle(&ts_tcp); //tcp master->slaver发送逻辑控制 L3_task_tcp_control_handle(&ts_tcp_control); -#endif + + //串口0,3 RFID接收 + L3_task_rfid_handle(&ts_rfid); + L3_UARTcom3_exp_protocol(&s_uart3_rec); + + //服务端(4G)协议处理 + L3_UARTcom4_exp_protocol(&s_uart4_tcp_rec); } }//end main diff --git a/source/bsp/bsp_config.c b/source/bsp/bsp_config.c index 0b39d1f..607c928 100644 --- a/source/bsp/bsp_config.c +++ b/source/bsp/bsp_config.c @@ -196,7 +196,6 @@ void L0_cpu_init(void) TS_Handle_PH3 s_uart0_rec; TS_Handle_PH4 s_uart2_rec; TS_Handle_PH3 s_uart3_rec; -TS_Handle_0d0a s_uart4_at_rec; TS_Handle_PH3 s_uart4_tcp_rec; void (*Lp0_uart0_fun)(unsigned char sbufreg); @@ -204,55 +203,43 @@ void (*Lp0_uart2_fun)(unsigned char sbufreg); void (*Lp0_uart3_fun)(unsigned char sbufreg); void (*Lp0_uart4_fun)(unsigned char sbufreg); -//uart2 -void L1_s2b_PH4_2(unsigned char sbufreg) -{ - s_uart2_rec.reg = sbufreg; - L1_s2b_PH4(&s_uart2_rec); -} //uart0 -void L1_s2b_PH3_0(unsigned char sbufreg) +void L1_uart0_exec(unsigned char sbufreg) { s_uart0_rec.reg = sbufreg; L1_s2b_PH3(&s_uart0_rec); } +//uart2 +void L1_uart2_exec(unsigned char sbufreg) +{ + s_uart2_rec.reg = sbufreg; + L1_s2b_PH4(&s_uart2_rec); +} + //uart3 -void L1_s2b_PH3_3(unsigned char sbufreg) +void L1_uart3_exec(unsigned char sbufreg) { s_uart3_rec.reg = sbufreg; L1_s2b_PH3(&s_uart3_rec); } -//GM35协议 -void L1_s2b_gm35(unsigned char sbufreg) +//uart4 +void L1_uart4_exec(unsigned char sbufreg) { s_uart4_tcp_rec.reg = sbufreg; L1_s2b_PH3(&s_uart4_tcp_rec); -#if 0 - if(0 == s_uart4_tcp_rec.head) - { - s_uart4_at_rec.reg = sbufreg; - L1_s2b_0d0a(&s_uart4_at_rec); - } - else - { - s_uart4_at_rec.head = 0; - } -#endif } void L1_uart_tpc_config(void) { -#if 1 //uart0 protocol setting... s_uart0_rec.head = 0; s_uart0_rec.ok = 0; s_uart0_rec.head_0 = D_CMD_Filter1_ff; s_uart0_rec.head_1 = D_CMD_Filter2_fe; - s_uart0_rec.sp = (U8*)&(s_uart0_rec.ts_ccmodbus); -#endif + s_uart0_rec.crcOffset = 0; //从filter0开始计算crc //uart2 protocol setting... s_uart2_rec.head = 0; @@ -264,24 +251,18 @@ void L1_uart_tpc_config(void) s_uart3_rec.ok = 0; s_uart3_rec.head_0 = D_CMD_Filter1_ff; s_uart3_rec.head_1 = D_CMD_Filter2_fe; - s_uart3_rec.sp = (U8*)&(s_uart3_rec.ts_ccmodbus); + s_uart3_rec.crcOffset = 0; //从filter0开始计算crc //uart4 - s_uart4_at_rec.head = 0; - s_uart4_at_rec.ok = 0; - s_uart4_at_rec.num = 0; - s_uart4_at_rec.setflag = FLAG_NONE; - - //a9 +CIPRCV s_uart4_tcp_rec.head = 0; s_uart4_tcp_rec.ok = 0; s_uart4_tcp_rec.head_0 = D_CMD_Filter1_ff; s_uart4_tcp_rec.head_1 = D_CMD_Filter2_fe; - s_uart4_tcp_rec.sp = (U8*)&(s_uart4_tcp_rec.ts_ccmodbus); + s_uart4_tcp_rec.crcOffset = 3; //从slaver开始计算crc - Lp0_uart0_fun = L1_s2b_PH3_0; - Lp0_uart2_fun = L1_s2b_PH4_2; - Lp0_uart3_fun = L1_s2b_PH3_3; - Lp0_uart4_fun = L1_s2b_gm35; + Lp0_uart0_fun = L1_uart0_exec; + Lp0_uart2_fun = L1_uart2_exec; + Lp0_uart3_fun = L1_uart3_exec; + Lp0_uart4_fun = L1_uart4_exec; } diff --git a/source/tpc/tpc_ccmodbus.c b/source/tpc/tpc_ccmodbus.c index 37e62b5..4b40fc1 100644 --- a/source/tpc/tpc_ccmodbus.c +++ b/source/tpc/tpc_ccmodbus.c @@ -145,39 +145,36 @@ void L1_s2b_PH3(TS_Handle_PH3 *p)// reentrant { p->head = 1; p->max = D_s_PH3_ccmodbus_max - 1; - p->sp = (unsigned char *)&(p->ts_ccmodbus); + p->sp = p->buf; p->sp[0] = p->head_0; p->sp[1] = p->head_1; p->num = 1; - //p->ok = 1; } }else { p->num ++; p->sp[p->num] = p->cashe[0]; - if(p->num == 2)//数量 第3个数据 + if(p->num == 2)//第3个数据 { p->max = p->reg + 2;// if(p->max >= D_s_PH3_ccmodbus_max) { - p->max = D_s_PH3_ccmodbus_max - 1; - p->sp[p->num] = p->max - 2; + p->head = 0;//error len. restart. + return; } } if(p->num >= p->max) { - //crc16(p->crc,&p->ts_ccmodbus.slaver,p->ts_ccmodbus.num - 2); - //if(p->crc[0] == p->sp[p->num-1] && p->crc[1] == p->sp[p->num]) - if(1) + crc16(p->crc,p->sp + p->crcOffset,p->num - 1 - p->crcOffset); //p->num + 1 - 2 - p->crcOffset + if(p->crc[0] == p->sp[p->num-1] && p->crc[1] == p->sp[p->num]) { if (p->ok != 1) { - //byte_copy_uc((U8*)&p->ts_ccmodbus,(U8*)&p->__ts_ccmodbus,p->max + 1); - p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文 + byte_copy_uc((U8*)&p->ts_ccmodbus,(U8*)p->sp,p->num + 1); + p->ok = 1; } } - p->num = 0; //放在if (p->ok != 1) 外 - p->head = 0; //放在if (p->ok != 1) 外 + p->num = p->head = 0; } } } diff --git a/source/tpc/tpc_ccmodbus.h b/source/tpc/tpc_ccmodbus.h index 96f745b..32317b8 100644 --- a/source/tpc/tpc_ccmodbus.h +++ b/source/tpc/tpc_ccmodbus.h @@ -85,13 +85,15 @@ typedef struct vU8 cashe[2]; vU8 reg; vU8 max; //接收到的数目的最大值 + vU8 crcOffset; vU8 head_0; vU8 head_1; vU8 head; //接收标志头标志 vU8 ok; //接收协议ok标志 vU8 num; - vU8 *sp; - TS_PH3_ccmodbus ts_ccmodbus; + vU8 *sp; + vU8 buf[D_s_PH3_ccmodbus_max]; + TS_PH3_ccmodbus ts_ccmodbus; vU8 crc[2]; }TS_Handle_PH3;