From 5f6cf51a117148bec1dbe84a64f5f03ff131002f Mon Sep 17 00:00:00 2001 From: zhangsan Date: Tue, 12 Oct 2021 15:10:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E5=8D=8F=E8=AE=AE=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keilp/cc_as_stc02_gsm_main.uvproj | 5 - .../soft_gsm_main.sip_sym | Bin 507932 -> 507932 bytes .../soft_gsm_main.sip_xm | Bin 324 -> 316 bytes .../soft_gsm_main.sip_xsb | Bin 69632 -> 73728 bytes .../soft_gsm_main.sip_xsd | Bin 1008 -> 1048 bytes .../soft_gsm_main.siwork | Bin 57223 -> 45063 bytes source/app/app_common.c | 16 +-- source/app/app_drv.c | 118 ++++++++++-------- source/app/app_drv.h | 4 +- source/app/app_task_tcp.c | 34 +---- source/app/app_task_tcp_control.c | 45 +++---- source/app/main.c | 47 ++----- source/bsp/bsp_config.c | 55 +++----- source/tpc/tpc_ccmodbus.c | 21 ++-- source/tpc/tpc_ccmodbus.h | 6 +- 15 files changed, 136 insertions(+), 215 deletions(-) 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 ef194f5f3a218042b36f7605c9df6fee0f59ec41..b8b2adf88f86010f8a4d37997d0548252df43f2b 100644 GIT binary patch delta 50774 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�boc#J%v*nr6$Z~%2dDk|G;5}$>N>QuTTWSH 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 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 3bb8341f92b1348f6f534f8cdbc318959c12b6de..607aaa9b97d1c33075ca399a661a9a3cda3aef9d 100644 GIT binary patch delta 10 RcmX@Yw1;Ve#zq4XMgSF812X^s delta 16 XcmdnPbcAVw1}g^x0|VzqRdGfDBS8Z} 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 bb934580e59c3e89da48f3ee2c44dc30f5135011..e40fe8bc69be65485a2002e16e0674a05bd38f1d 100644 GIT binary patch delta 2617 zcmds&PiS049LL}9y|+8Nsm9q;d$4ALg04yNmDodL)!k%EjI=VrYMUOqFGveHR9~Bb z^icO{K~I&({wx6xI#>@Lhy7VXK-j&gh$ydW{~eSCV_HRFs|oEzaMn$_>nf-ibLha2 z`F-XM^PBn2cYZHaZdh}pMj2v?oWL!8n6i@AY8&ykdmGH9jSkoque9MO{^JHl*CFND zU}1$vtegto;i-zR9D*$khdiO}{1vNxzlGxL)VE!Hxr@(t@mJJ;@7sxTC$3SD|;Hxkh+&YWn%D%u1rGKfw42UV13e zK2~vWetd&@>VFSNa$G09H+$O0lzF*(5;}N9K5f!`>-9>*C}bo|+S`ML{65yjsAW!= z8SP0jKbGiXYRK9h<=7|xkOETA)ooHoa!xsjFbsI7!3CTM`p`F{w~0HG|6M( zrb?(Bj81V1PlY{YVe~JI{%?OXg(L>@qPM_4`oh^b3;d+h*3H=7p&cj&0@4Elyswk( zFXKjwr#lqYxx3`8s4MbFS!?YXbcR4}%5q7se@C2$Cdfb>{6%Smu$on#>mp zf5*+A03$z^3E~&EQ>hCV`J&16pUq4)*B}=4eVkc4)`H9wXHMM3EPIWMW}uguD!sTk zh~ak;Y{JY^75Ng!`jW=j^y;dD6i!^LqP)gQd@oJu_#p=SlQbUx@ld4^+gSfuAYb-* z(vKP7v zy)E}q$1$GS^VGxtmPy}~?2G^n-<&%SRmhoC-OAqq^SqocHrLkvZk`)-@qA>1mvAT3 iR%Y&f27~s&^!yhLK8N`@4I(+O(%>hFH#Nk!X!s3aXFLM{ delta 2337 zcmajhU2NM_6ae6R^XH@m>WB#;(UCjgVIW{m!wRcbNYbCRrR&@!0me_A^k=1GWiBy; zN=V6s1QHUG+XE`>0V0Z2-tcmP4GF2?5g{OmA+!g!^amJYW0@EdkK87uvCj*U9P2yh z_+H08zD~a6$rn6kRemx+d}Q;ZWpsV6TFxD^#bQaV{|V&Bksm`&At#X&$OoOy^$$A( z{i@Rk4+My-ango16d*yn_ahG?KZ-oyaL&;B9RWk@L*9qni`;|UjogJCw>zFOw3t00 z97TQv`C+H|GM(|v`*leBWnT5?Jy5-k$#ad%m>-=o2$-1yn4{{B&PIa7Q@z?=&b{V*%8>R6p=yUmr;HX%D+_0iy1cSAsQ`9ZB2wUlL$z$Df$)6#6r1qwSui_ zjAiFA1`x-z#&Iz$A)eY%;xvqhQ2mQ2{~*d6wY>Mg*+mR03!pyFkFyrh1rqFRl0cb~M4r^eJCP*f8t zYLrKZOE>Iz*S#@l?Tcus!J(7L=imO4hH@7Io0m`2rnKJhs?(8mhg0ESosL{=IDb45 zZvWlkNZX%wr^4-59ggs0BXgANw-(&Rbj20=pC^Z37>&8Pdc^VqYt?}rHs^IqezkVb z>b<3nP3hdy^UXZis<^rGiWoSbZdwesy1?A26wUW2|Mu=SU;T-aJCtI9xoWMy)kgK! zHz}BlGFXcYDvONEd#hsNk1R<{%sksA;)M_QeNn%!MXTV3{D4Vi9{xo0KtfhM193`%rjrHwzWv4 z)`=UWc@p_B@&xj@)49Z$GmscX&LF3e zHRKWGXON$E*q2B=B?55$(oxX=`0Mtqe=o^HYR})k#^PYi>J!&t=5mM^E~}KD=POsf pqrCKwc!^k7*;~}2KYx0PF4NPNiz?oQszljo=BFk4nM~8Ze*wuNyPE(2 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 c34416d6a9b9f2c19f0579ddac9c021cfdb6d3bd..fcf63f23eea8ba137292be93ff857cd3318752b1 100644 GIT binary patch literal 1048 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 UbmA(*3Nb(JVy$v_{QlzoU(H1B^Z)<= literal 57223 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 @@ -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;