#include "rs485_read_data.h"
|
#include "rs485_data_analysis_pro.h"
|
#include "tim.h"
|
|
|
//__IO RS485_COM_STATUS_T rs485_com_status_g = RS485_COM_IDLE;
|
|
//__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 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)
|
{
|
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;
|
|
}
|
|
|
|
void rs485ReadDataPro(void)
|
{
|
|
|
if(1)//ÅжÏ485²É¼¯±êʶ
|
{
|
if(rs485_com_ctrl_pata_g.status == RS485_COM_IDLE)
|
{
|
rs485_com_ctrl_pata_g.status = RS485_COM_PWR_ON;
|
}
|
|
}
|
|
|
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;
|
|
default:;
|
}
|
|
|
|
}
|