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_read_data.c | 156 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 123 insertions(+), 33 deletions(-)
diff --git a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
index a83c0a0..06361b7 100644
--- a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
+++ b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
@@ -1,49 +1,144 @@
#include "rs485_read_data.h"
#include "rs485_data_analysis_pro.h"
-__IO RS485_COM_STATUS_T rs485_com_status_g = RS485_COM_IDLE;
+#include "tim.h"
+//__IO RS485_COM_STATUS_T rs485_com_status_g = RS485_COM_IDLE;
-//�����豸���봦�������ع�����ʱʱ��ms
-uint16_t rs485GetDelayTime(uint16_t device_code)
+//__IO FlagStatus rs485_pwr_delay_status_g = RESET; //����ʱ�䵽���־
+
+//static uint8_t rs485_pwr_delay_time_out_cnt =0;
+
+__IO RS485_COM_CTRL_PARA_T rs485_com_ctrl_pata_g={
+ .status = RS485_COM_IDLE, \
+ .reread_num_cnt =0, \
+};
+
+RS485_COM_UART_PARA_T rs485_com_uart_data_g ={
+ .recv_flag = RESET, \
+};
+
+//�����豸���봦�������ع�����ʱʱ��������
+uint8_t rs485GetDelayTime(uint16_t device_code)
{
+
//���ڱ�����������1��һ�Σ�������ʱ�IJ�����1000ms�� ������ֵ��0-1000ms֮�䣬ʵ����ʱ��Ϊ1�����ң� ��ֵ��1000-2000ms֮�䣬ʵ����ʱ��Ϊ2������
switch (device_code){
- case SIZHUMODBUS1: return 900;
- case SIZHUMODBUS2: return 900;
- case SIZHUMODBUS3: return 900;
- case SIZHUMODBUSV2_0: return 900;
- case TIANXINCUSTOM: return 900;
- case TIANXINMODBUS: return 900;
+ 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;
//��Ҫ����......
default:return 100;
}
}
-
-
-
-RS485_COM_STATUS_T rs485ComPwrOnHandle(void)
+//�����豸���뷢�Ͷ�ȡ֡
+void rs485SendReadData(uint16_t device_code,uint8_t slaveAddress)
{
- uint16_t delay_time;
- //IO�ڳ�ʼ��
-
-
- //����
-
- //��ʱ���жϣ���ͬ�豸������ʱ���ȣ�Ҫ��Ҫ���ǹ������������ȡ�������
- delay_time = rs485GetDelayTime(SIZHUMODBUSV2_0);
-
+
+ switch (device_code){
+
+ case SIZHUMODBUS1: sendModbusReadFrame(slaveAddress,501,50);break;
+ case SIZHUMODBUS2: break;
+ case SIZHUMODBUS3: break;
+ case SIZHUMODBUSV2_0: break;
+ case TIANXINCUSTOM: break;
+ case TIANXINMODBUS: break;
+ //��Ҫ����......
+ default:break;
+ }
}
+RS485_COM_STATUS_T rs485ComPwrOnHandle(void)
+{
+ uint8_t delay_time_s;
+
+ //IO�ڳ�ʼ��
+
+ //����
+
+ //��ʱ���жϣ���ͬ�豸������ʱ���ȣ�Ҫ��Ҫ���ǹ������������ȡ�������
+ delay_time_s = rs485GetDelayTime(SIZHUMODBUSV2_0);
+ rs485_com_ctrl_pata_g.pwr_delay_status = RESET;
+ rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt = 0;
+
+
+ //����״̬��λ
+ rs485_com_ctrl_pata_g.reread_num_cnt = RS485_REREAD_NUM;
+ 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;
+
+ return RS485_COM_SEND;
+
+}
+
+
+RS485_COM_STATUS_T rs485ComSendHandle(void)
+{
+ //��ʱ��--�� �����ʱ1�룬��--�͵���0�ˣ� ���ж�==0�Ϳ��Զ�ȡ���ݡ���Ϊ�ϵ絽�������ݰ�״̬��ִ�У�����Ͳ���һ��ѭ�����ڵ�ʱ�䣨����1�룩
+ if(rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt)
+ {
+ rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt--;
+ }
+
+
+ if(rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt == 0) //��ʱ��0�Ϳ��Է��Ͷ�ȡָ��
+ {
+ rs485SendReadData(SIZHUMODBUSV2_0,1); //�˴����Ҫ��
+ return RS485_COM_WAIT_ANSWER;
+ }
+
+
+}
+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;
+ }
+
+
+ if(read_ok==PASS)
+ {
+ return RS485_COM_IDLE;
+ }
+
+ if((--rs485_com_ctrl_pata_g.reread_wait_time_cnt)==0)
+ {
+ if((--rs485_com_ctrl_pata_g.reread_num_cnt)==0)
+ {
+ //��ʱ���ض��������꣬���س�ʱ����
+
+ //�رյ�Դ���رմ��ڣ�RS485ͨѶʧ��+1,
+
+ return RS485_COM_IDLE;
+ }else
+ {
+ //��ʱ�����ظ��������У��������·��Ͷ�ȡ����
+ return RS485_COM_SEND;
+ }
+
+ }
+ return RS485_COM_WAIT_ANSWER;
+
+}
@@ -52,27 +147,22 @@
if(1)//�ж�485�ɼ���ʶ
- {
-
- if(rs485_com_status_g == RS485_COM_IDLE)
+ {
+ if(rs485_com_ctrl_pata_g.status == RS485_COM_IDLE)
{
- rs485_com_status_g = RS485_COM_PWR_ON;
+ rs485_com_ctrl_pata_g.status = RS485_COM_PWR_ON;
}
-
-
-
+
}
- switch (rs485_com_status_g){
+ 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_TIMEOUT: break;
- case RS485_COM_OFF: break;
-
+
default:;
}
--
Gitblit v1.9.3