123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- #include "MB_RTU_deal_task.h"
- #include "MB_RTU_task.h"
- #include "All_define.h"
- #include "modbus.h"
- #include "protocol.h"
- static void Modbus_write_sendbuf_10(u8 addr, u8 size, u8 *buf, UART_msg *ptrmsg)
- {
- ptrmsg->data[0] = dis_page_param.face_plate_param.Device_Slave_addr;
- ptrmsg->data[1] = 0x10;
- ptrmsg->data[2] = 0;
- ptrmsg->data[3] = addr;
- ptrmsg->data[4] = 0;
- ptrmsg->data[5] = size;
- ptrmsg->data[6] = 2*size;
- ptrmsg->len = 7 + 2*size + 2;
- for(uint8_t i = 0; i < 2*size;i++)
- {
- ptrmsg->data[7+i] = *(buf + i);
- }
- u16 CRCA;
- u8 CRCH;
- u8 CRCL;
- CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
- CRCH = CRCA>>8;
- CRCL = (u8)CRCA;
- ptrmsg->data[ptrmsg->len-2] = CRCH;
- ptrmsg->data[ptrmsg->len-1] = CRCL;
- }
- static void Modbus_write_sendbuf_06(u8 addr, u8 *buf,UART_msg *ptrmsg)
- {
- ptrmsg->data[0] = dis_page_param.face_plate_param.Device_Slave_addr;
- ptrmsg->data[1] = 0x06;
- ptrmsg->data[2] = 0;
- ptrmsg->data[3] = addr;
- ptrmsg->data[4] = *buf;
- ptrmsg->data[5] = *(buf + 1);
- ptrmsg->len = 8;
- u16 CRCA;
- u8 CRCH;
- u8 CRCL;
- CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
- CRCH = CRCA>>8;
- CRCL = (u8)CRCA;
- // printf("111 0x%x 0x%x",CRCH,CRCL);
- ptrmsg->data[ptrmsg->len-2] = CRCH;
- ptrmsg->data[ptrmsg->len-1] = CRCL;
- }
- void Air_Open_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- if(dis_page_param.face_plate_param.Open_device_mode == 0x00)
- {
- uint8_t buf[8] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
- buf[2] = 0;
- buf[3] = dis_page_param.face_plate_param.Air_condition_mode;
- buf[4] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>8)&0xff);
- buf[5] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>0)&0xff);
- buf[6] = 0;
- buf[7] = (uint8_t)dis_page_param.face_plate_param.Air_set_temp;
- Modbus_write_sendbuf_10(0x01,0x04,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- else if(dis_page_param.face_plate_param.Open_device_mode == 0x01)
- {
- for(uint8_t i = 1; i < 5; i++)
- {
- uint8_t buf[2] = {0};
- switch(i)
- {
- case 1:
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
- break;
- case 2:
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Air_condition_mode;
- break;
- case 3:
- buf[0] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>8)&0xff);;
- buf[1] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>0)&0xff);
- break;
- case 4:
- buf[0] = 0;
- buf[1] = (uint8_t)dis_page_param.face_plate_param.Air_set_temp;
- break;
- default:
- break;
- }
- Modbus_write_sendbuf_06(i,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- }
- }
- void Air_Close_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
- Modbus_write_sendbuf_06(0x01,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Air_Mode_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = (uint8_t)((dis_page_param.face_plate_param.Air_condition_mode >>0) &0x0f);
- Modbus_write_sendbuf_06(0x02,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Air_speed_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- uint8_t speed = 0;
- uint8_t low = 0;
- uint8_t hight = 0;
- if(struct_realy.speed_type.fs1 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs2 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs3 == 1)
- {
- speed = 1;
- }
- else
- {
- speed = 0;
- }
- hight = (u8)(dis_page_param.face_plate_param.Air_wind_speed >>8);
- low = (u8) ( ( (dis_page_param.face_plate_param.Air_wind_speed >>0) &0x0f) + \
- ((speed << 4) &0xf0 ) );
- if( ( dis_page_param.face_plate_param.Air_wind_speed &0x0100 )!= 0)
- {
- if(speed == 0)
- {
- low = 0x00;
- }
- else if (speed == 1)
- {
- low = 0x10;
- }
- }
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = hight;
- buf[1] = low;
- Modbus_write_sendbuf_06(0x03,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Air_speed_data_Sendtemp(uint8_t hight,uint8_t low)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = hight;
- buf[1] = low;
- Modbus_write_sendbuf_06(0x03,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Air_set_temp_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Air_set_temp;
- Modbus_write_sendbuf_06(0x04,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Floor_heating_Open_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Floor_heating_switch;
- Modbus_write_sendbuf_06(0x06,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Floor_heating_set_temp_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Floor_heating_set_temp;
- Modbus_write_sendbuf_06(0x07,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Fresh_air_Open_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Fresh_air_switch;
- Modbus_write_sendbuf_06(0x09,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Fresh_air_speed_data_Send(void)
- {
- //printf("111\r\n");
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Fresh_air_speed;
- Modbus_write_sendbuf_06(0x0B,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Fresh_air_speed_data_Sendtemp(uint8_t hight,uint8_t low)
- {
- //printf("2222\r\n");
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = hight;
- buf[1] = low;
- Modbus_write_sendbuf_06(0x0B,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Real_Temp_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>8);
- buf[1] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>0);
- Modbus_write_sendbuf_06(0x0D,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void Real_humi_data_Send(void)
- {
- if(dis_page_param.face_plate_param.Data_send == 0x01)
- return ;
- UART_msg ptrmsg;
- uint8_t buf[2] = {0};
- buf[0] = 0;
- buf[1] = dis_page_param.face_plate_param.Real_time_Humi;
- Modbus_write_sendbuf_06(0x0E,buf,&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- }
- void mb_rtu_deal_task(void *pvParameters)
- {
- UART_msg ptrmsg;
- while(1)
- {
- if(MB_RTU_Tx_Queue != NULL)
- {
- if(xQueueReceive(MB_RTU_Tx_Queue,&ptrmsg,portMAX_DELAY))
- {
- // printf("wqw\r\n");
- while(eRcvState != STATE_RX_IDLE)
- {
- vTaskDelay(1);
- }
- for(u8 i = 0;i <ptrmsg.len;i++)
- {
- ucRTU_TBuf[i] = ptrmsg.data[i];
- }
- usRcv_TBufferPos = ptrmsg.len;
- eSndState = STATE_TX_XMIT;
- eMBRTUStart_Tx();
- //prvvUARTTxReadyISR();
- while(eSndState != STATE_TX_IDLE)
- {
- vTaskDelay(1);
- }
- eMBRTUStart_Rx();
- all_data_update();
- vTaskDelay(90);
- }
- }
- vTaskDelay(1);
- }
- }
|