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;