forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-06 64cf4a779ef5c16c79bbbee27370169dc8d69499
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ÃëÒ»´Î£¬ËùÒÔÑÓʱµÄ²½½øÊÇ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;
   
   
}