#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