From 08b3909c40a192778719c6262bbee4745682948d Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Fri, 31 May 2024 19:15:47 +0800
Subject: [PATCH] 测试和修改了一些功能bug
---
Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c | 93 +++++++++++++++++++++++++++-------------------
1 files changed, 54 insertions(+), 39 deletions(-)
diff --git a/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c b/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c
index 5e45e42..751602e 100644
--- a/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c
+++ b/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c
@@ -40,21 +40,21 @@
/************���ͺ����ݽ���*************************/
//modbusЭ��03��ȡ��Ӧ����ͳһ���
-ErrorStatus modbus03AnswerCheck(uint8_t * buf_p,uint8_t slaveAddress)
+ErrorStatus modbus03AnswerCheck(uint8_t * buf_p,uint8_t slaveAddress,uint8_t *Byte_Num)
{
uint16_t crc;
- uint8_t dataNum;
+// uint8_t dataNum;
//��Ҫ���CRC�����Ǵӻ���ַ������ļ��
if((slaveAddress!=buf_p[0])||(buf_p[1]!=0x03))
return FAIL;
- dataNum = buf_p[2];
- if(dataNum>250)
+ *Byte_Num = buf_p[2];
+ if(*Byte_Num>250)
return FAIL;
- crc = buf_p[3 + dataNum +1 ];
- crc = (crc<<8) +buf_p[3 + dataNum ];
- if(crc != usMBCRC16(0xFFFF,buf_p,3 + dataNum))
+ crc = buf_p[3 + *Byte_Num +1 ];
+ crc = (crc<<8) +buf_p[3 + *Byte_Num ];
+ if(crc != usMBCRC16(0xFFFF,buf_p,3 + *Byte_Num))
return FAIL;
return PASS;
@@ -66,38 +66,52 @@
uint32_t u32temp_zs;
uint16_t u16temp_xs;
uint8_t status[12];
+ uint8_t Byte_Num = 0;
- if(modbus03AnswerCheck(buf_p,slaveAddress) == FAIL)
+ if(modbus03AnswerCheck(buf_p,slaveAddress,&Byte_Num) == FAIL)
return FAIL;
- buf_p+=3;
- arrayA_2_arrayB(buf_p, (uint8_t *)&flow_meter_data_g.time_BCD.year, 6, LITTLE_ENDIAN) ;
-
- arrayA_2_arrayB(buf_p + 6 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 10 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
- flow_meter_data_g.cumulate_s.forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
- arrayA_2_arrayB(buf_p + 12 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 16 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
- flow_meter_data_g.cumulate_s.forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
+ if(Byte_Num >= 34){
+ buf_p+=3;
+ arrayA_2_arrayB(buf_p, (uint8_t *)&flow_meter_data_g.time_BCD.year, 6, LITTLE_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 6 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 10 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
+ flow_meter_data_g.cumulate_s.forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
+ arrayA_2_arrayB(buf_p + 12 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 16 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
+ flow_meter_data_g.cumulate_s.forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
+
+ arrayA_2_arrayB(buf_p + 18 , (uint8_t *)&flow_meter_data_g.instant_wc, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 22 , (uint8_t *)&flow_meter_data_g.instant_sc, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 26 , (uint8_t *)&flow_meter_data_g.temperature, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 30, (uint8_t *)&flow_meter_data_g.pressure, 4, BIG_ENDIAN) ;
+ }else
+ {
+ return FAIL;
+ }
- arrayA_2_arrayB(buf_p + 18 , (uint8_t *)&flow_meter_data_g.instant_wc, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 22 , (uint8_t *)&flow_meter_data_g.instant_sc, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 26 , (uint8_t *)&flow_meter_data_g.temperature, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 30, (uint8_t *)&flow_meter_data_g.pressure, 4, BIG_ENDIAN) ;
-
- arrayA_2_arrayB(buf_p + 34 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 38 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
- flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
-
- arrayA_2_arrayB(buf_p + 40 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 44 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
- flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
-
- arrayA_2_arrayB(buf_p + 70 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_wc, 8, BIG_ENDIAN) ;
- arrayA_2_arrayB(buf_p + 78 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_sc, 8, BIG_ENDIAN) ;
-
- /*****״̬�֡������ֽ�������������Э��ӳ�䵽˼���Ķ����******/
- arrayA_2_arrayB(buf_p + 86 , status, 8, LITTLE_ENDIAN) ;
+ if(Byte_Num >= 98){
+ arrayA_2_arrayB(buf_p + 34 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 38 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
+ flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
+
+ arrayA_2_arrayB(buf_p + 40 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 44 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ;
+ flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs);
+
+ arrayA_2_arrayB(buf_p + 70 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_wc, 8, BIG_ENDIAN) ;
+ arrayA_2_arrayB(buf_p + 78 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_sc, 8, BIG_ENDIAN) ;
+
+ /*****״̬�֡������ֽ�������������Э��ӳ�䵽˼���Ķ����******/
+ arrayA_2_arrayB(buf_p + 86 , status, 12, LITTLE_ENDIAN) ;
+
+
+ }else{
+ flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = 0;
+ flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = 0;
+ flow_meter_data_g.cumulate_s.cal_cumulate_wc = 0;
+ flow_meter_data_g.cumulate_s.cal_cumulate_sc = 0;
+ }
@@ -124,12 +138,13 @@
uint32_t u32temp_zs;
// uint16_t u16temp_xs;
// uint8_t status[12];
+ uint8_t Byte_Num = 0;
- if(modbus03AnswerCheck(buf_p,slaveAddress) == FAIL)
+ if(modbus03AnswerCheck(buf_p,slaveAddress,&Byte_Num) == FAIL)
return FAIL;
buf_p+=3;
- if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP1)
+ if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP1)&&(Byte_Num >=8))
{
(*(uint8_t *)(&u32temp_zs))=buf_p[1];
(*((uint8_t *)(&u32temp_zs) + 1))=buf_p[0];
@@ -142,7 +157,7 @@
(*((uint8_t *)(&u32temp_zs) + 3))=buf_p[6];
flow_meter_data_g.cumulate_s.forward_cumulate_sc = u32temp_zs;
- }else if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP2)
+ }else if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP2)&&(Byte_Num >=8))
{
(*(uint8_t *)(&flow_meter_data_g.pressure))=buf_p[1];
(*((uint8_t *)(&flow_meter_data_g.pressure) + 1))=buf_p[0];
@@ -154,7 +169,7 @@
(*((uint8_t *)(&flow_meter_data_g.temperature) + 2))=buf_p[7];
(*((uint8_t *)(&flow_meter_data_g.temperature) + 3))=buf_p[6];
- }else if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP3)
+ }else if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP3)&&(Byte_Num >=8))
{
(*(uint8_t *)(&flow_meter_data_g.instant_wc))=buf_p[1];
(*((uint8_t *)(&flow_meter_data_g.instant_wc) + 1))=buf_p[0];
--
Gitblit v1.9.3