#include "relay_task.h" #include "All_define.h" void Speed_Hk_Ck_deal(void) { static speed_type_t last = {0}; if (dis_page_param.face_plate_param.Speed_Relay == 1) { if (struct_realy.speed_type.fs1 == 0 && struct_realy.speed_type.fs2 == 0 && struct_realy.speed_type.fs3 == 0) { memcpy(&struct_realy.speed_type, &last, sizeof(speed_type_t)); } } memcpy(&last, &struct_realy.speed_type, sizeof(speed_type_t)); } static void Air_condition_Relay_set(uint8_t *ck, uint8_t *hk, uint8_t *mutual, speed_type_t *speed_type, uint8_t control_type, uint8_t cmd) { if (control_type == 0) return; uint8_t Compare_value = 0; static uint16_t Last_Mode = 0; if (Last_Mode != dis_page_param.face_plate_param.Air_condition_mode) { *ck = 0; *hk = 0; if (mutual != NULL) { *mutual = 0; } speed_type->fs1 = 0; speed_type->fs2 = 0; speed_type->fs3 = 0; } Last_Mode = dis_page_param.face_plate_param.Air_condition_mode; Compare_value = SetTemp_RealTemp_Compare(dis_page_param.face_plate_param.Air_set_temp * 10); if (dis_page_param.face_plate_param.Air_condition_mode == 0x00) { if (control_type == 0x02) { if ((cmd & 0x02) != 0) { Compare_value = 1; } else { Compare_value = 4; } } if (Compare_value >= 1 && Compare_value <= 3) { *ck = 1; if (mutual != NULL) { *mutual = 0; } } else if (Compare_value >= 4 && Compare_value <= 6) { *ck = 0; if (mutual != NULL) { *mutual = 1; } } if (*ck == 1 || dis_page_param.face_plate_param.Speed_Relay == 1) { Wind_Speed_relay_Set(dis_page_param.face_plate_param.Air_wind_speed, speed_type, Compare_value); } else if (*ck == 0) { speed_type->fs1 = 0; speed_type->fs1 = 0; speed_type->fs1 = 0; } } else if (dis_page_param.face_plate_param.Air_condition_mode == 0x01) { if (control_type == 0x02) { if ((cmd & 0x20) != 0) { Compare_value = 4; } else { Compare_value = 1; } } if (Compare_value >= 4 && Compare_value <= 6) { *hk = 1; if (mutual != NULL) { *mutual = 0; } } else if (Compare_value >= 1 && Compare_value <= 3) { *hk = 0; if (mutual != NULL) { *mutual = 1; } } if (*hk == 1) { Wind_Speed_relay_Set(dis_page_param.face_plate_param.Air_wind_speed, speed_type, Compare_value); } else if (*hk == 0) { speed_type->fs1 = 0; speed_type->fs1 = 0; speed_type->fs1 = 0; } } else if (dis_page_param.face_plate_param.Air_condition_mode == 0x02) { if (control_type == 0x02) { if ((cmd & 0x20) != 0) { Compare_value = 1; } else { Compare_value = 4; } } Compare_value = SetTemp_RealTemp_Compare(23 * 10); if (Compare_value >= 1 && Compare_value <= 3) { *ck = 1; if (mutual != NULL) { *mutual = 0; } } else if (Compare_value >= 4 && Compare_value <= 6) { *ck = 0; if (mutual != NULL) { *mutual = 1; } } if (*ck == 1) { Wind_Speed_relay_Set(dis_page_param.face_plate_param.Air_wind_speed, speed_type, Compare_value); } else if (*ck == 0) { speed_type->fs1 = 0; speed_type->fs1 = 0; speed_type->fs1 = 0; } } else if (dis_page_param.face_plate_param.Air_condition_mode == 0x03) { Wind_Speed_relay_Set(dis_page_param.face_plate_param.Air_wind_speed, speed_type, Compare_value); } } static void Floor_heart_Relay_set(uint8_t *hk, uint8_t *mutual, uint8_t control_type, uint8_t cmd) { uint16_t Pro_value = dis_page_param.face_plate_param.Floor_Heating_Protecton_value * 10; uint16_t Set_Temp = dis_page_param.face_plate_param.Floor_heating_set_temp * 10; uint16_t Real_Temp = dis_page_param.face_plate_param.Real_time_Temp; if (control_type == 0x02) { if (cmd == 0x22) { Set_Temp = Real_Temp + Pro_value + 1; } else if (cmd == 0x11) { Real_Temp = Set_Temp + Pro_value + 1; } } if (Set_Temp > (Real_Temp + Pro_value)) { *hk = 1; if (mutual != NULL) { *mutual = 0; } } else if (Set_Temp + Pro_value < Real_Temp) { *hk = 0; if (mutual != NULL) { *mutual = 1; } } } static void Fresh_air_Relay_set(speed_type_t *speed_type) { Wind_Speed_relay_Set(dis_page_param.face_plate_param.Fresh_air_speed, speed_type, 0); } static void LTemp_Protection_relay_set(uint8_t *relay, uint8_t *mutual, uint16_t Temp) { static uint16_t Last_Temp = 0; if (Last_Temp != Temp) { *relay = 0; if (mutual != NULL) { *mutual = 1; } } Last_Temp = Temp; if (Temp == 0x0f) return; uint8_t Compare_value = 0; Compare_value = SetTemp_RealTemp_Compare(Temp * 10); if (Compare_value >= 4 && Compare_value <= 6) { *relay = 1; if (mutual != NULL) { *mutual = 0; } } else if (Compare_value >= 1 && Compare_value <= 3) { *relay = 0; if (mutual != NULL) { *mutual = 1; } } } #define IWDG_OPEN 1 void relay_task(void *pvParameters) { #if IWDG_OPEN fwdgt_write_enable(); fwdgt_prescaler_value_config(FWDGT_PSC_DIV32); fwdgt_reload_value_config(4000); fwdgt_counter_reload(); fwdgt_enable(); /* IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_32); IWDG_SetReload(4000); IWDG_ReloadCounter(); IWDG_Enable();*/ uint32_t IWDG_CNT = 0; #endif uint16_t Set_Temp_floor = 0, Set_Temp_fresh = 0; uint16_t Real_Temp_relay = 0; uint16_t compare_temp = 0; uint16_t auto_speed = 0; uint8_t last_Air_relay_mode = 0, last_Heart_relay_mode = 0, last_Fresh_relay_mode = 0; uint8_t Air_relay_control = 0, Heart_relay_control = 0; uint8_t Air_relay_mode = 0, Heart_relay_mode = 0, Fresh_relay_mode = 0; uint8_t Relay_cmd = 0; memset(&struct_realy, 0, sizeof(struct_realy_t)); while (1) { compare_temp = 0; auto_speed = 0; Set_Temp_floor = dis_page_param.face_plate_param.Floor_heating_set_temp * 10; Set_Temp_fresh = dis_page_param.face_plate_param.Fresh_set_temp * 10; Real_Temp_relay = dis_page_param.face_plate_param.Real_time_Temp; if (dis_page_param.face_plate_param.Fresh_air_switch == 1) { if (fuji_or_shuiji == 1) { switch (dis_page_param.face_plate_param.Fresh_condition_mode) { case 0: { if (Set_Temp_fresh < Real_Temp_relay) { compare_temp = Real_Temp_relay - Set_Temp_fresh; struct_realy.relay_ck = 1; } else struct_realy.relay_ck = 0; break; } case 1: { if (Real_Temp_relay < Set_Temp_fresh) { compare_temp = Set_Temp_fresh - Real_Temp_relay; struct_realy.relay_hk = 1; } else struct_realy.relay_hk = 0; break; } default: break; } if (compare_temp < 3) auto_speed = 1; else if (compare_temp < 5) auto_speed = 2; else auto_speed = 3; switch (auto_speed) { case 1: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 0; struct_realy.speed_type.fs3 = 0; break; } case 2: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 1; struct_realy.speed_type.fs3 = 0; break; } case 3: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 1; struct_realy.speed_type.fs3 = 1; break; } default: break; } } else { struct_realy.relay_ck = 0; struct_realy.relay_hk = 0; switch (dis_page_param.face_plate_param.Fresh_air_speed) { case 1: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 0; struct_realy.speed_type.fs3 = 0; break; } case 2: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 1; struct_realy.speed_type.fs3 = 0; break; } case 3: { struct_realy.speed_type.fs1 = 1; struct_realy.speed_type.fs2 = 1; struct_realy.speed_type.fs3 = 1; break; } default: break; } } } else { struct_realy.relay_ck = 0; struct_realy.relay_hk = 0; struct_realy.speed_type.fs1 = 0; struct_realy.speed_type.fs2 = 0; struct_realy.speed_type.fs3 = 0; } if (dis_page_param.face_plate_param.Floor_heating_switch == 1) { if (Real_Temp_relay < Set_Temp_floor) struct_realy.relay_dk = 1; else struct_realy.relay_dk = 0; } else { struct_realy.relay_dk = 0; } Relay_loop_set(struct_realy); #if IWDG_OPEN IWDG_CNT++; if (IWDG_CNT >= 200) { fwdgt_counter_reload(); IWDG_CNT = 0; } #endif vTaskDelay(10); } }