| | |
| | | #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; |
| | | |
| | |
| | | //ÓÉÓÚ±¾Éí¹¤×÷ÖÜÆÚÊÇ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; |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | { |
| | | uint8_t delay_time_s; |
| | | |
| | | //IO¿Ú³õʼ»¯ |
| | | //?IO¿Ú³õʼ»¯ |
| | | |
| | | //´ò¿ª¹©µç |
| | | //?´ò¿ª¹©µç |
| | | |
| | | //´ò¿ª¶¨Ê±Æ÷Öжϣ¬²»Í¬É豸¹©µçÑÓʱ²»µÈ£¬Òª²»Òª¿¼Âǹ©µçºó¿ÉÒÔÁ¢Âí¶ÁÈ¡µÄÇé¿ö£¿ |
| | | delay_time_s = rs485GetDelayTime(SIZHUMODBUSV2_0); |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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, |
| | | |
| | |
| | | |
| | | |
| | | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | | |
| | | |
| | | } |