From a12102b90bda2f409babc8c241bfc66118a8cb70 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Thu, 25 Apr 2024 20:01:19 +0800
Subject: [PATCH] 继续完善485采集

---
 Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c |  127 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 121 insertions(+), 6 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 4933c9c..c9f1ba2 100644
--- a/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c
+++ b/Function/FLOW_METER_DATA_COLLECT/rs485_data_analysis_pro.c
@@ -1,4 +1,38 @@
 #include "rs485_data_analysis_pro.h"
+#include "rs485_read_data.h"
+#include "mbcrc.h"
+
+FLOW_METER_DATA_T	flow_meter_data_g;
+
+/************ͨ��modbus��ȡ֡*************************/
+void sendModbusReadFrame(uint8_t slaveAddress,uint16_t dataAddress,uint8_t regNum)
+{
+	uint16_t crc;
+	uint8_t sendFrame[8];
+	
+	sendFrame[0] = slaveAddress;         //�ӻ���ַ
+	sendFrame[1] = 0x03;                 //���ܺ�
+	sendFrame[2] = dataAddress>>8;       //���ݵ�ַ��8λ
+	sendFrame[3] = dataAddress&0x00FF;   //���ݵ�ַ��8λ
+	sendFrame[4] = regNum>>8;       //��ȡ���ݸ�����8λ
+	sendFrame[5] = regNum&0x00FF;   //��ȡ���ݸ�����8λ
+  crc = usMBCRC16(0xFFFF,sendFrame,6);
+  sendFrame[6] = crc&0x00FF;           //CRC16У���8λ
+  sendFrame[7] = crc>>8;               //CRC16У���8λ
+	
+	//���ڷ���
+//  RS485_Send_Data(sendFrame,8);
+	
+	
+	
+	
+	
+	//����DMA����
+	
+	
+}
+
+/************�Զ����ȡ֡*************************/
 
 
 
@@ -6,16 +40,97 @@
 
 
 
+/************���ͺ����ݽ���*************************/
+//modbusЭ��03��ȡ��Ӧ����ͳһ���
+ErrorStatus	modbus03AnswerCheck(uint8_t * buf_p,uint8_t slaveAddress)
+{
+	uint16_t	crc;
+	uint8_t	dataNum;
+	//��Ҫ���CRC�����Ǵӻ���ַ�͹�����ļ��
+	if((slaveAddress!=buf_p[0])||(buf_p[1]!=0x03))
+		return FAIL;
+
+	
+	dataNum = buf_p[2];
+	if(dataNum>250)
+			return FAIL;
+	crc = buf_p[3 + dataNum +1 ];
+	crc = (crc<<8) +buf_p[3 + dataNum ];
+	if(crc != usMBCRC16(0xFFFF,buf_p,3 + dataNum))
+		return FAIL;
+	
+	return PASS;
+}
+
+
+ErrorStatus	SIZHUMODBUSV2_0_dataAnalysis(uint8_t * buf_p,uint8_t slaveAddress)
+{
+	uint32_t SC_Accumulation_zs;
+	uint16_t SC_Accumulation_xs;
+	uint32_t WC_Accumulation_zs;
+	uint16_t  WC_Accumulation_xs;
+	uint32_t SC_Accumulation_zs_reverse;
+	uint16_t SC_Accumulation_xs_reverse;
+	uint32_t WC_Accumulation_zs_reverse;
+	uint16_t  WC_Accumulation_xs_reverse;
+	
+	double WC_Accumulation_reverse;
+	double SC_Accumulation_reverse;
+	
+	if(modbus03AnswerCheck(buf_p,slaveAddress) == FAIL)
+		return FAIL;
+	
+	
+	arrayA_2_arrayB(buf_p + 3 , (uint8_t *)&WC_Accumulation_zs, 4, BIG_ENDIAN) ;
+	arrayA_2_arrayB(buf_p + 7 , (uint8_t *)&WC_Accumulation_xs, 2, BIG_ENDIAN) ;	
+	arrayA_2_arrayB(buf_p + 14 , (uint8_t *)&WC_Accumulation_xs, 2, BIG_ENDIAN) ;	
+		
+	return PASS;
+	
+}
 
 
 
 
-
-
-
-
-
-
+/**********************�������ݷ���*******************************/
+ErrorStatus	rs485ComDataAnalysis(RS485_COM_UART_PARA_T * uart_para_p,uint16_t device_code,uint8_t slaveAddress)
+{
+	uint8_t *buf_p;
+	if(uart_para_p->recv_length < 6)  //ĿǰӦ��û������������������6�ֽڵ�
+		return FAIL;
+	
+	//ȥ0
+	for(uint16_t count_i=0;count_i< RS485_COM_REC_BUF_LENGTH;count_i ++)
+	{
+		if(uart_para_p->recv_buf[count_i] !=0)
+		{
+			buf_p = &uart_para_p->recv_buf[count_i];
+			break;
+		}else
+		{
+			if(count_i > (RS485_COM_REC_BUF_LENGTH >>2))
+			{
+				//buf���붼��0��ֱ�ӷ���FAIL����ֹ�������ݴ���Խ��
+				return FAIL;
+			}
+		}
+	}
+	
+	switch (device_code){
+		
+				case SIZHUMODBUS1:		return FAIL;
+				case SIZHUMODBUS2:	return FAIL;
+				case SIZHUMODBUS3:	return FAIL;
+        case SIZHUMODBUSV2_0:		return SIZHUMODBUSV2_0_dataAnalysis(buf_p,slaveAddress);
+        case TIANXINCUSTOM:		return FAIL;
+				case TIANXINMODBUS:	return FAIL;
+				//��Ҫ����......
+        default:return FAIL;
+    }
+	
+	
+	
+}
 
 
 

--
Gitblit v1.9.3