#include "MB_RTU_task.h" #include "All_define.h" #include "modbus.h" #include #include "key_operate.h" #include "protocol.h" static uint8_t Reset_CNT = 0; void eMBFuncReadHoldingRegister(UART_msg *ptrmsg) { UART_msg msg; u8 ii= 0; u8 i =0; u8 num = ptrmsg->data[5]; msg.len = 5 + num; msg.data[ii++] = ptrmsg->data[0]; msg.data[ii++] = 3; msg.data[ii++] = 2 * num; for(i = 0;i < num;i++) { switch(ptrmsg->data[3]) { case 1: { msg.data[ii++] = 0; uint8_t relay = 0; if((dis_page_param.face_plate_param.Air_condition_Relay & 0x01) != 0 \ ||(dis_page_param.face_plate_param.Air_condition_Relay & 0x02) == 0) { if(struct_realy.relay_ck == 1) { relay = 1; } else { relay = 0; } } else if((dis_page_param.face_plate_param.Air_condition_Relay & 0x03) != 0 ) { if(struct_realy.relay_hk == 1) { relay = 1; } else { relay = 0; } } msg.data[ii++] = (dis_page_param.face_plate_param.Air_condition_switch & 0x0f) +\ ( (relay <<4) & 0xf0 ) ; } break; case 2: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Air_condition_mode; break; case 3: { 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; } } msg.data[ii++] = hight; msg.data[ii++] = low; } break; case 4: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Air_set_temp; break; case 5: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>8); msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>0); break; case 6: { uint8_t relay = 0; if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x01) != 0 ) { if(struct_realy.relay_hk == 1) { relay = 1; } else { relay = 0; } } else if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x02) != 0 ) { if(struct_realy.relay_ck == 1) { relay = 1; } else { relay = 0; } } msg.data[ii++] = 0; msg.data[ii++] = (dis_page_param.face_plate_param.Floor_heating_switch & 0x0f) +\ ( (relay <<4) & 0xf0 ) ; } break; case 7: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Floor_heating_set_temp; break; case 8: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_relay_switch >>8); msg.data[ii++] = (u8) (dis_page_param.face_plate_param.Floor_relay_switch >>0); break; case 9: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Fresh_air_switch; break; case 11: { uint8_t speed = 0; if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0001) { 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; } } msg.data[ii++] = 0; msg.data[ii++] = (u8) ( ( (dis_page_param.face_plate_param.Fresh_air_speed >>0) &0x0f) + \ ((speed << 4) &0xf0 ) ); } break; case 12: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Compensates_temp; break; case 13: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>8); msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>0); break; case 14: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Real_time_Humi; break; case 16: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>8); msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>0); break; case 17: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>8); msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>0); break; case 18: msg.data[ii++] = 0; msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Fresh_air_Relay >>0); break; case 19: msg.data[ii++] = 0; msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Ltemp_Protection_valve >>0); break; case 20: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Lock_screen; break; case 21: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Full_Half_Lock; break; case 22: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Data_send; break; case 23: msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>8);; msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>0); break; case 25: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Sleep_time_addr; break; case 26: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Code_Version; break; case 100: msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 8) &0xff ); msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 0) &0xff ); break; case 101: msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 8) &0xff ); msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 0) &0xff ); break; case 102: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Open_device_mode; break; case 109: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Parm_SaveFlag; break; case 110: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.Panel_Shield; break; case 111: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.HTemp_Limit; break; case 112: msg.data[ii++] = 0; msg.data[ii++] = dis_page_param.face_plate_param.LTemp_Limit; break; case 0: msg.data[ii++] = 0; if(dis_page_param.face_plate_param.Reset_Flag == 1) { if(Reset_CNT > 0) { Reset_CNT--; } else { dis_page_param.face_plate_param.Reset_Flag = 0; } } msg.data[ii++] = dis_page_param.face_plate_param.Reset_Flag; break; default: msg.data[ii++] = 0; msg.data[ii++] = 0; break; } ptrmsg->data[3] += 1; } u16 CRCA; u8 CRCH; u8 CRCL; CRCA = GetCRC16(msg.data,ii); CRCH = CRCA>>8; CRCL = (u8)CRCA; msg.data[ii++] = CRCH; msg.data[ii++] = CRCL; msg.len = ii; memcpy(ptrmsg,&msg,sizeof(UART_msg)); } void PullOutOf_SleepPage(void) { if(dis_page_num.Dis_air_Conditioning == dis_air_Conditioning_sleep) { dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open; } if(dis_page_num.Dis_floor_heating == dis_floor_heating_sleep) { dis_page_num.Dis_floor_heating = dis_floor_heating_open; } if(dis_page_num.Dis_fresh_air == dis_fresh_air_sleep) { dis_page_num.Dis_fresh_air = dis_fresh_air_open; } dis_page_param.advanced_setting_time = 0; dis_page_param.sleep_times = 0; } void Control_Save(uint8_t * Data_need_write) { printf("Parm_Save %d\r\n",Parm_Save); if(Parm_Save) { (*Data_need_write)++; } } uint8_t AirCondition_Sheiled_Set(void) { if(AirCondition_Sheiled == 0) { return 1; } else { return 0; } } uint8_t FloorHeating_Sheiled_Set(void) { if(FloorHeating_Sheiled == 0) { return 1; } else { return 0; } } uint8_t AirFresh_Sheiled_Set(void) { if(AirFresh_Sheiled == 0) { return 1; } else { return 0; } } uint8_t eMBFuncWriteHoldingRegister_do(uint8_t *data_H,uint8_t *data_L, uint16_t addr,uint8_t *Data_need_write) { uint8_t error_code = 0; switch(addr) { case 1: if(AirCondition_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(*data_L == 0x01) { dis_page_param.face_plate_param.Air_condition_switch = 1; dis_page_num.display_page = dis_air_Conditioning; dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open; Control_Save(Data_need_write); } else if (*data_L == 0x00) { dis_page_param.face_plate_param.Air_condition_switch = 0; dis_page_num.display_page = dis_air_Conditioning; dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } break; case 2: if(AirCondition_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(dis_page_param.face_plate_param.Air_condition_switch == 1) { if(*data_L == 0 || *data_L == 1 || *data_L == 2 || *data_L == 3) { dis_page_num.display_page = dis_air_Conditioning; dis_page_param.face_plate_param.Air_condition_mode = *data_L ; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 3: if(AirCondition_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(dis_page_param.face_plate_param.Air_condition_switch == 1) { if(*data_L == 1 || *data_L == 2 || *data_L == 3) { dis_page_num.display_page = dis_air_Conditioning; dis_page_param.face_plate_param.Air_wind_speed = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0); Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else if(*data_H == 1) { if(dis_page_param.face_plate_param.Air_condition_switch == 1) { if(*data_L == 0) { dis_page_num.display_page = dis_air_Conditioning; dis_page_param.face_plate_param.Air_wind_speed = 0x0100; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 4: if(AirCondition_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(dis_page_param.face_plate_param.Air_condition_switch == 1) { if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit) { dis_page_num.display_page = dis_air_Conditioning; dis_page_param.face_plate_param.Air_set_temp = *data_L; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 5: { if(AirCondition_Sheiled_Set()) { return 0; } if(dis_page_param.face_plate_param.Air_condition_switch == 1) { if((dis_page_param.face_plate_param.Air_condition_Relay &0xff00) == 0x0200) { if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0001) { if(*data_H == 0x01) { if(*data_L == 0x01 || *data_L == 0x00) { dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0002) { if(*data_H == 0x02) { if(*data_L == 0x01 || *data_L == 0x00) { dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0003) { if(*data_H == 0x03) { if(*data_L == 0x00 || *data_L == 0x01 || *data_L == 0x02 || *data_L == 0x03) { dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } break; case 6: if(FloorHeating_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(*data_L == 0x01) { dis_page_param.face_plate_param.Floor_heating_switch = 1; dis_page_num.display_page = dis_floor_heating; dis_page_num.Dis_floor_heating = dis_floor_heating_open; Control_Save(Data_need_write); } else if (*data_L == 0x00) { dis_page_param.face_plate_param.Floor_heating_switch = 0; dis_page_num.display_page = dis_floor_heating; dis_page_num.Dis_floor_heating = dis_floor_heating_close; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } break; case 7: if(FloorHeating_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(dis_page_param.face_plate_param.Floor_heating_switch == 1) { if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit) { dis_page_num.display_page = dis_floor_heating; dis_page_param.face_plate_param.Floor_heating_set_temp = *data_L; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 8: { if(FloorHeating_Sheiled_Set()) { return 0; } if(dis_page_param.face_plate_param.Floor_heating_switch == 1) { if((dis_page_param.face_plate_param.Floor_heating_Relay &0xff00) == 0x0200) { if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0001) { if(*data_H == 0x01) { if(*data_L == 0x01 || *data_L == 0x00) { dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0002) { if(*data_H == 0x02) { if(*data_L == 0x01 || *data_L == 0x00) { dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } break; case 9: if(AirFresh_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(*data_L == 0x01) { dis_page_param.face_plate_param.Fresh_air_switch = 1; dis_page_num.display_page = dis_fresh_air; dis_page_num.Dis_fresh_air = dis_fresh_air_open; Control_Save(Data_need_write); } else if (*data_L == 0x00) { dis_page_param.face_plate_param.Fresh_air_switch = 0; dis_page_num.display_page = dis_fresh_air; dis_page_num.Dis_fresh_air = dis_fresh_air_close; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } break; case 11: if(AirFresh_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(dis_page_param.face_plate_param.Fresh_air_switch == 1) { if(*data_L == 0x01 || *data_L == 0x02 ||*data_L == 0x03) { dis_page_param.face_plate_param.Fresh_air_speed = *data_L; dis_page_num.display_page = dis_fresh_air; Control_Save(Data_need_write); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 12: if(*data_H == 0) { if((*data_L & 0xf0) == 0xf0) { if((*data_L & 0x0f) >= 0x07 && (*data_L & 0x0f) <=0x0F) { *Data_need_write = 1; dis_page_param.face_plate_param.Compensates_temp = *data_L; } else { error_code += 1; } } else if((*data_L & 0xf0) == 0x00) { if((*data_L & 0x0f) >= 0x00 && (*data_L & 0x0f) <=0x09) { *Data_need_write = 1; dis_page_param.face_plate_param.Compensates_temp = *data_L ; } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 16: { if(AirCondition_Sheiled_Set()) { return 0; } if(*data_H == 0) { if(*data_L == 0) { *Data_need_write = 1; dis_page_param.face_plate_param.Air_condition_Relay = 0x0000; dis_page_param.face_plate_param.Air_relay_switch = 0x0000; } else { error_code += 1; } } else if(*data_H == 0x01 || *data_H == 0x02) { if(*data_L == 0x01) { if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000) { *Data_need_write = 1; dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; dis_page_param.face_plate_param.Air_relay_switch &= 0xff00; dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8); } else { error_code += 1; } } else if(*data_L == 0x02 || *data_L == 0x03) { if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000 && dis_page_param.face_plate_param.Floor_heating_Relay == 0x0000) { *Data_need_write = 1; dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; dis_page_param.face_plate_param.Air_relay_switch &= 0xff00; dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } } break; case 17: if(FloorHeating_Sheiled_Set()) { return 0; } if(*data_H == 0x00) { if(*data_L == 0) { *Data_need_write = 1; dis_page_param.face_plate_param.Floor_heating_Relay = 0x0000; dis_page_param.face_plate_param.Floor_relay_switch = 0x0000; } else { error_code += 1; } } else if(*data_H == 0x02 || *data_H == 0x01) { if(*data_L == 0x01) { if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000 || dis_page_param.face_plate_param.Air_condition_Relay == 0x0101 || \ dis_page_param.face_plate_param.Air_condition_Relay == 0x0201) { *Data_need_write = 1; dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00; dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8); } else { error_code += 1; } } else if(*data_L == 0x02) { if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000) { *Data_need_write = 1; dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00; dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8); } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 18: if(AirFresh_Sheiled_Set()) { return 0; } if(*data_H == 0x00) { if(*data_L == 0x00) { *Data_need_write = 1; dis_page_param.face_plate_param.Fresh_air_Relay = 0x0000; } else if(*data_L == 0x01) { if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000) { *Data_need_write = 1; dis_page_param.face_plate_param.Fresh_air_Relay = 0x0001; } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 19: if(*data_H == 0x00) { if((*data_L <= 0X05) || (*data_L == 0X0F)) { *Data_need_write = 1; dis_page_param.face_plate_param.Ltemp_Protection_valve = *data_L; } else { error_code += 1; } } else { error_code += 1; } break; case 20: if(*data_H == 0x00) { if((*data_L == 0X00) || (*data_L == 0X01)) { *Data_need_write = 1; dis_page_param.face_plate_param.Lock_screen = *data_L; } else { error_code += 1; } } else { error_code += 1; } break; case 21: if(*data_H == 0x00) { if((*data_L == 0X00) || (*data_L == 0X01)) { *Data_need_write = 1; dis_page_param.face_plate_param.Full_Half_Lock = *data_L; } else { error_code += 1; } } else { error_code += 1; } break; case 22: if(*data_H == 0x00) { if((*data_L == 0X00) || (*data_L == 0X01)) { *Data_need_write = 1; dis_page_param.face_plate_param.Data_send = *data_L; } else { error_code += 1; } } else { error_code += 1; } break; case 23: if(*data_H == 0x00 || *data_H == 0x01) { if( (*data_L >= 0x01) && (*data_L <= 0x06)) { *Data_need_write = 1; dis_page_param.face_plate_param.Led_Brightness = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; } else { error_code += 1; } } else { error_code += 1; } break; case 25: if(*data_H == 0x00) { if(*data_L <= 0x05 || *data_L == 0x0f) { *Data_need_write = 1; dis_page_param.face_plate_param.Sleep_time_addr = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; } else { error_code += 1; } } else { error_code += 1; } break; case 100: { u16 baudrate_now = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0); const uint16_t baudrate[7] = {0x01e0,0x03c0,0x05a0,0x0780,0x0f00,0x15e0,0x0000}; uint8_t i = 0; for( i = 0; i < 7; i++) { if(baudrate_now == baudrate[i]) { break; } } if(i == 7) { error_code += 1; } else { if(baudrate_now != dis_page_param.face_plate_param.Device_BaudRate) { *Data_need_write = 1; dis_page_param.face_plate_param.Device_BaudRate = baudrate_now; xTaskNotify((TaskHandle_t )LEDTask_Handler, (uint32_t )Change_baud, (eNotifyAction )eSetBits); } } } break; case 101 : if(*data_H == 0x00) { if(*data_L == 0x00) { *Data_need_write = 1; dis_page_param.face_plate_param.TempHumi_UpdateMode = 0x0000; } else { error_code += 1; } } else if(*data_H == 0x01 ||*data_H == 0x02 || *data_H == 0x03 ) { if(*data_L >= 0x01 && *data_L <= 0x0C ) { *Data_need_write = 1; dis_page_param.face_plate_param.TempHumi_UpdateMode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; } else { error_code += 1; } } else { error_code += 1; } break; case 102: if(*data_H == 0x00) { if(*data_L == 0x00 || *data_L == 0x01) { *Data_need_write = 1; dis_page_param.face_plate_param.Open_device_mode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; } else { error_code += 1; } } else { error_code += 1; } break; case 109: if(*data_H == 0x00) { if(*data_L == 0x00 || *data_L == 0x01) { *Data_need_write = 1; dis_page_param.face_plate_param.Parm_SaveFlag = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; } else { error_code += 1; } } else { error_code += 1; } break; case 110: if(*data_H == 0x00) { if(*data_L <= 0x07 && (*data_L) != 0) { *Data_need_write = 1; dis_page_param.face_plate_param.Panel_Shield = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0; if(AirCondition_Sheiled == 0) { dis_page_param.face_plate_param.Air_condition_switch = 0; dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close; } if(FloorHeating_Sheiled == 0) { dis_page_param.face_plate_param.Floor_heating_switch = 0; dis_page_num.Dis_floor_heating = dis_floor_heating_close; } if(AirFresh_Sheiled == 0) { dis_page_param.face_plate_param.Fresh_air_switch = 0; dis_page_num.Dis_fresh_air = dis_fresh_air_close; } display_page_t *page; if(dis_page_num.display_page == dis_advanced_set || dis_page_num.display_page == dis_message_read) { page = &dis_page_param.Last_device_page_num; } else { page = &dis_page_num.display_page; } if((*page) == dis_air_Conditioning) { if(AirCondition_Sheiled == 0) { if(FloorHeating_Sheiled == 0) { (*page) = dis_fresh_air; } else { (*page) = dis_floor_heating; } } } if((*page) == dis_floor_heating) { if(FloorHeating_Sheiled == 0) { if(AirCondition_Sheiled == 0) { (*page) = dis_fresh_air; } else { (*page) = dis_air_Conditioning; } } } if((*page) == dis_fresh_air) { if(AirFresh_Sheiled == 0) { if(AirCondition_Sheiled == 0) { (*page) = dis_floor_heating; } else { (*page) = dis_air_Conditioning; } } } } else { error_code += 1; } } else { error_code += 1; } break; case 111: if(*data_H == 0x00) { if( (*data_L >= 10) && (*data_L <= 32) ) { if(*data_L > dis_page_param.face_plate_param.LTemp_Limit) { dis_page_param.face_plate_param.HTemp_Limit = *data_L; *Data_need_write = 1; } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 112: if(*data_H == 0x00) { if( (*data_L >= 10) && (*data_L <= 32) ) { if(*data_L < dis_page_param.face_plate_param.HTemp_Limit) { dis_page_param.face_plate_param.LTemp_Limit = *data_L; *Data_need_write = 1; } else { error_code += 1; } } else { error_code += 1; } } else { error_code += 1; } break; case 0: if(*data_H == 0x00) { if(*data_L == 0x01) { MemData_Reset(); dis_page_param.face_plate_param.Reset_Flag = 1; Reset_CNT = 3; } else if(*data_L == 0x00) { dis_page_param.face_plate_param.Reset_Flag = 0; Reset_CNT = 0; } else { error_code += 1; } } else { error_code += 1; } break; default: break; } if(error_code != 0) { return 0; } else { return 1; } } void eMBFuncWriteHoldingRegister(UART_msg *ptrmsg) { uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]); u8 Data_need_write = 0; if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[4],&ptrmsg->data[5],addr,&Data_need_write) == 0) { ptrmsg->data[1] |= 0x80; } 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; if(Data_need_write >= 1) { xTaskNotify((TaskHandle_t )LEDTask_Handler, (uint32_t )Need_Write, (eNotifyAction )eSetBits); } xTaskNotify((TaskHandle_t )LEDTask_Handler, (uint32_t )Wake_up, (eNotifyAction )eSetBits); } void eMBFuncWriteMultipleHoldingRegister(UART_msg *ptrmsg) { uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]); if(addr > 0xff) return; uint16_t num = (uint16_t)(ptrmsg->data[5]) + (uint16_t)(ptrmsg->data[4] << 8); if(num > 255 || 2 *num != ptrmsg->data[6] ) return ; u8 Data_need_write = 0; for(uint8_t i = 0;i < num;i++) { addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]) + i; if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[7 + 2*i],&ptrmsg->data[8 + 2*i],addr,&Data_need_write) == 0) { ptrmsg->data[1] |= 0x80; } } 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; if(Data_need_write >= 1) { xTaskNotify((TaskHandle_t)LEDTask_Handler, (uint32_t)Need_Write, (eNotifyAction)eSetBits); } xTaskNotify((TaskHandle_t)LEDTask_Handler, (uint32_t)Wake_up, (eNotifyAction)eSetBits); } void mb_rtu_task(void *pvParameters) { UART_msg ptrmsg; while(1) { //vTaskDelay(20); xQueueReceive(MB_RTU_Rx_Queue,&ptrmsg,portMAX_DELAY); //for(int i=0;i