From ee3c90168f81ce19529904d80f9c9de4fed23bb8 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Tue, 30 Apr 2024 16:30:45 +0800
Subject: [PATCH] 继续完善

---
 Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c |   80 +++++++++++++++++++++++++++++----------
 1 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
index 06361b7..bf500c4 100644
--- a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
+++ b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
@@ -2,6 +2,12 @@
 #include "rs485_data_analysis_pro.h"
 #include "tim.h"
 
+/****�������˼·******************
+*RS485������Ʒ�Ϊ�ϵ硢���Ͷ�ȡָ��ȴ��������ݲ���������״̬�����裻����ʵ�ֵȴ���ʱ�жϺͶ���ض���
+*���modbus��ַ�ֵıȽϿ�������һ���Զ�ȡ���������RS485_MODBUS_STEP_STATUS_T��ȡ�������������һ��STEP�������ͺŵĵ�һ�����趼��STEP1��
+*���ɹ���ȡһ��ָ��֮���жϵ�ǰSTEP�Ƿ���ڵ������һ��STEP�������ʾȫ����ȡ��ɣ��������Ҫ����������һ��STEP�Ķ�ȡָ�
+*
+**********************************/
 
 //__IO RS485_COM_STATUS_T	rs485_com_status_g = RS485_COM_IDLE;
 
@@ -25,13 +31,15 @@
 	//���ڱ�����������1��һ�Σ�������ʱ�IJ�����1000ms�� ������ֵ��0-1000ms֮�䣬ʵ����ʱ��Ϊ1�����ң� ��ֵ��1000-2000ms֮�䣬ʵ����ʱ��Ϊ2������
 	switch (device_code){
 		
-				case SIZHUMODBUS1:		return 1;
-				case SIZHUMODBUS2:	return 1;
-				case SIZHUMODBUS3:	return 1;
-        case SIZHUMODBUSV2_0:		return 1;
-        case TIANXINCUSTOM:		return 1;
-				case TIANXINMODBUS:	return 1;
-				//��Ҫ����......
+				case SIZHUMODBUS1:	rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;	return 1;
+				case SIZHUMODBUS2:	rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;	return 1;
+				case SIZHUMODBUS3:	rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;return 1;
+        case SIZHUMODBUSV2_0:		rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;return 1;
+        case TIANXINCUSTOM:		rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;return 1;
+				case TIANXINMODBUS:	rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP1;return 1;
+		
+				case EKMODBUS:	rs485_com_ctrl_pata_g.modbus_last_status = MODBUS_STEP3;return 1;
+				//?��Ҫ����......
         default:return 100;
     }
 	
@@ -43,13 +51,22 @@
 
 	switch (device_code){
 		
-				case SIZHUMODBUS1:		sendModbusReadFrame(slaveAddress,501,50);break;
+				case SIZHUMODBUS1:	break;
 				case SIZHUMODBUS2:	break;
 				case SIZHUMODBUS3:	break;
-        case SIZHUMODBUSV2_0:		break;
+        case SIZHUMODBUSV2_0:		sendModbusReadFrame(slaveAddress,501,49);break;
         case TIANXINCUSTOM:		break;
 				case TIANXINMODBUS:	break;
-				//��Ҫ����......
+		
+				case EKMODBUS:	
+						if(rs485_com_ctrl_pata_g.modbus_step_status ==MODBUS_STEP1)
+							sendModbusReadFrame(slaveAddress,100,4);
+						else if(rs485_com_ctrl_pata_g.modbus_step_status ==MODBUS_STEP2)
+							sendModbusReadFrame(slaveAddress,306,4);
+						else if(rs485_com_ctrl_pata_g.modbus_step_status ==MODBUS_STEP3)
+							sendModbusReadFrame(slaveAddress,326,4);
+				break;
+				//?��Ҫ����......
         default:break;
     }
 	
@@ -60,9 +77,9 @@
 {
 	uint8_t delay_time_s;
 	
-	//IO�ڳ�ʼ��
+	//?IO�ڳ�ʼ��
 	
-	//�򿪹���
+	//?�򿪹���
 	
 	//�򿪶�ʱ���жϣ���ͬ�豸������ʱ���ȣ�Ҫ��Ҫ���ǹ������������ȡ�������
 	delay_time_s = rs485GetDelayTime(SIZHUMODBUSV2_0);
@@ -75,6 +92,8 @@
 	rs485_com_ctrl_pata_g.reread_wait_time_cnt = RS485_REREAD_WATI_TIME;
 	
 	rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt = delay_time_s;
+	
+	rs485_com_ctrl_pata_g.modbus_step_status = MODBUS_STEP1;
 	
 	return RS485_COM_SEND;
 		
@@ -92,7 +111,8 @@
 	
 	if(rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt == 0)  //��ʱ��0�Ϳ��Է��Ͷ�ȡָ��
 	{		
-		rs485SendReadData(SIZHUMODBUSV2_0,1); //�˴����Ҫ��
+		rs485SendReadData(SIZHUMODBUSV2_0,1); //?�˴����Ҫ��
+		rs485_com_ctrl_pata_g.reread_wait_time_cnt = RS485_REREAD_WATI_TIME; //���õȴ���Ӧʱ��
 		return RS485_COM_WAIT_ANSWER;
 	}
 	
@@ -104,26 +124,40 @@
 RS485_COM_STATUS_T	rs485ComWaitAnswerHandle(void)
 {
 	ErrorStatus	read_ok = FAIL;
-	//��鴮������
+	//?��鴮������
 	
 	
 	//��������,����ɹ���������read_ok = PASS
 	if(rs485_com_uart_data_g.recv_flag == SET)
 	{
 		rs485_com_uart_data_g.recv_flag =RESET;
+		
+		read_ok = rs485ComDataAnalysis(rs485_com_uart_data_g,SIZHUMODBUSV2_0,1,rs485_com_ctrl_pata_g ) ;//?�豸���롢�ӻ���ַ���Ҫ��
 	}
 	
 	
 	if(read_ok==PASS)
 	{
-		return RS485_COM_IDLE;
+		
+		if(rs485_com_ctrl_pata_g.modbus_step_status >= rs485_com_ctrl_pata_g.modbus_last_status)  
+		{
+			//?����ͨѶȫ���ɹ���������Ӧ�Ĵ���
+			//�رյ�Դ���رմ���
+			
+			return RS485_COM_IDLE;
+		}
+		else
+		{
+			rs485_com_ctrl_pata_g.modbus_step_status ++;
+			return RS485_COM_SEND;
+		}
 	}
 	
 	if((--rs485_com_ctrl_pata_g.reread_wait_time_cnt)==0)
 	{
 		if((--rs485_com_ctrl_pata_g.reread_num_cnt)==0)
 		{
-			//��ʱ���ض��������꣬���س�ʱ����
+			//?��ʱ���ض��������꣬����ͨѶ������ʧ�ܸ��գ�������Ӧ�Ĵ���
 			
 			//�رյ�Դ���رմ��ڣ�RS485ͨѶʧ��+1,
 			
@@ -142,15 +176,17 @@
 
 
 
-void rs485ReadDataPro(void)
+void rs485ReadDataPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p)
 {
 	
 	
-	if(1)//�ж�485�ɼ���ʶ
+	if((sys_fun_run_ctrl_p->rs485_ctrl_flag.start_flag ==SET)&&(sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag == RESET))//?�ж�485�ɼ���ʶ
 	{	
+		sys_fun_run_ctrl_p->rs485_ctrl_flag.start_flag = RESET;
 		if(rs485_com_ctrl_pata_g.status == RS485_COM_IDLE)
 		{
 			rs485_com_ctrl_pata_g.status = RS485_COM_PWR_ON;
+			sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag = SET;
 		}
 	
 	}
@@ -159,13 +195,15 @@
 	switch (rs485_com_ctrl_pata_g.status){
 		
 				case RS485_COM_IDLE:		break;
-				case RS485_COM_PWR_ON:	break;
-				case RS485_COM_SEND:	break;
-        case RS485_COM_WAIT_ANSWER:		break;
+				case RS485_COM_PWR_ON:	rs485_com_ctrl_pata_g.status = rs485ComPwrOnHandle();break;
+				case RS485_COM_SEND:	rs485_com_ctrl_pata_g.status = rs485ComSendHandle();break;
+        case RS485_COM_WAIT_ANSWER:		rs485_com_ctrl_pata_g.status = rs485ComWaitAnswerHandle();break;
 	
         default:;
     }
 	
+	if(rs485_com_ctrl_pata_g.status == RS485_COM_IDLE)
+		sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag = RESET;
 	
 	
 }
\ No newline at end of file

--
Gitblit v1.9.3