| | |
| | | #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; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | |
| | | 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:; |
| | | } |