forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-04-25 a12102b90bda2f409babc8c241bfc66118a8cb70
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ÃëÒ»´Î£¬ËùÒÔÑÓʱµÄ²½½øÊÇ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;
    }
   
}
//¸ù¾ÝÉ豸´úÂë·¢ËͶÁȡ֡
void rs485SendReadData(uint16_t device_code,uint8_t slaveAddress)
{
   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)
{
   uint16_t delay_time;
   //IO¿Ú³õʼ»¯
   uint8_t delay_time_s;
   
   //IO¿Ú³õʼ»¯
   
   //´ò¿ª¹©µç
   
   //´ò¿ª¶¨Ê±Æ÷Öжϣ¬²»Í¬É豸¹©µçÑÓʱ²»µÈ£¬Òª²»Òª¿¼Âǹ©µçºó¿ÉÒÔÁ¢Âí¶ÁÈ¡µÄÇé¿ö£¿
   delay_time = rs485GetDelayTime(SIZHUMODBUSV2_0);
   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;
}
@@ -53,25 +148,20 @@
   
   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:;
    }