/***************************************************************************** * @copyright 2024-202, . POWER SUPPLY CO., LTD. * @file logic_tempCtrl.c * @brief xxxx * @author Gary * @date 2024/11/26 * @remark 初修订 *****************************************************************************/ #include "logic_tempCtrl.h" temp_judge_mod_e logicTempState[MAX_NUM_CABINT] = {0}; logic_pthread_t stTemp = {0}; logicTempEquip tempEquipCall[kTemperature_ctrl_end] = { Logic_Temp_Select_AC, Logic_Temp_Select_LC, Logic_Temp_Select_AC_Auto, Logic_Temp_Select_LC_Auto }; logicTempExe tempFunCall[kTemperature_ctrl_end][kTemp_Judge_end] = { // kTemperature_ctrl_Ac { kAC_Normal_Callback, kAC_OverTemp_Callback, kAC_OverLock_Callback, kAC_UnderTemp_Callback, kAC_UnderLock_Callback, kAC_Close_Callback }, // kTemperature_ctrl_Lc { kLC_Normal_Callback, kLC_OverTemp_Callback, kLC_OverLock_Callback, kLC_UnderTemp_Callback, kLC_UnderLock_Callback, kLC_Close_Callback }, // kTemperature_auto_Ac { kAC_Auto_Callback, }, // kTemperature_auto_Lc { kLC_Auto_Callback, } }; /***************************************************************************** * @brief 初始化温度控制参数 * @return None *****************************************************************************/ static void Logic_Temp_initParam(temp_ctrl_algorithm_t* sqlPara,temp_params_t *para) { for (u_int16_t i = 0; i < MAX_NUM_CABINT; i++) { logicTempState[i] = kTemp_Judge_Normal; } para->mod = sqlPara->mod; para->workTemp.coolTrigTemp = sqlPara->workCoolTrigTemp; para->workTemp.coolHys = sqlPara->workCoolHys; para->workTemp.heatTrigTemp = sqlPara->workHeatTrigTemp; para->workTemp.heatHys = sqlPara->workHeatHys; para->standByTemp.coolTrigTemp = sqlPara->standbyCoolTrigTemp; para->standByTemp.coolHys = sqlPara->standbyCoolHys; para->standByTemp.heatTrigTemp = sqlPara->standbyHeatTrigTemp; para->standByTemp.heatHys = sqlPara->standbyHeatHys; para->standByLimit.maxlimit = sqlPara->standbyMaxLimit; para->standByLimit.minlimit = sqlPara->standbyMinLimit; para->standByLimit.maxbacklimit = sqlPara->standbyMaxbackLimit; para->standByLimit.minbacklimit = sqlPara->standbyMinbackLimit; para->tempCmd_normal = sqlPara->tempCmdNormal; para->tempCmd_heat = sqlPara->tempCmdHeat; para->tempCmd_cold = sqlPara->tempCmdCold; para->tempCmdOpen = sqlPara->tempCmdOpen; para->tempCmdClose = sqlPara->tempCmdClose; } /***************************************************************************** * @brief 收集温度控制参数 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @return None *****************************************************************************/ void Logic_Temp_Collect(temp_params_t *para) { logic_getValue(e_Logic_nowBmsPower, para->pcsPower, Float32); logic_getValue(e_Logic_bsuMaxCellTemp, para->maxCellTemp, Float32); logic_getValue(e_Logic_bsuMinCellTemp, para->minCellTemp, Float32); // para->pcsPower[0] = 6; // printf("请输入最大单元温度: "); // scanf("%f", ¶->maxCellTemp[0]); // 输入最大单元温度 // printf("请输入最小单元温度: "); // scanf("%f", ¶->minCellTemp[0]); // 输入最小单元温度 // para->maxCellTemp[0] = 41; // para->minCellTemp[0] = 25; } /***************************************************************************** * @brief 初始化温控设备 * @return None *****************************************************************************/ static void Logic_Temp_initEquip(temp_params_t *para) { // 创建一个临时副本,防止修改影响原始数据 temp_params_t temppara = *para; // 进行浅拷贝,副本和原始数据不同 Logic_Temp_Collect(&temppara); // 使用副本进行操作 for (u_int16_t i = 0; i < gStDevTypeNum[kDev_Type_AirCond_LiquidCool]; i++) { switch (temppara.mod) { default: break; case kTemperature_ctrl_Ac: // 判断是否需要开机 // if (para->maxCellTemp[i] - temppara.workTemp.coolTrigTemp > EPSILON // || temppara.workTemp.heatTrigTemp - para->minCellTemp[i] < EPSILON) // { // setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temppara.tempCmdOpen); // } if (temppara.tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temppara.tempCmdOpen); } break; case kTemperature_ctrl_Lc: if (para->maxCellTemp[i] - temppara.standByLimit.maxlimit > EPSILON || temppara.standByLimit.minlimit - para->minCellTemp[i] < EPSILON) { kLC_Normal_Callback((void *)&temppara , (void *)&i); setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunTemp, TEMP_AC_TEMP); } break; case kTemperature_auto_Ac: setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temppara.tempCmdOpen); setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolTemp, temppara.workTemp.coolTrigTemp); setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatTemp, temppara.workTemp.heatTrigTemp); setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolDiff, temppara.workTemp.coolHys); // setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatDiff, temppara.workTemp.heatHys); break; case kTemperature_auto_Lc: break; } } } /***************************************************************************** * @brief 选择当前温控设备状态 * @param[in] para 指向温度参数结构体的指针,包含当前温度、功率等信息 * @param[in] No 参数编号,用于选择特定的温度控制对象 * @return 无返回值 * * @note 该函数通过温度参数来判断当前设备是否处于过温、欠温或正常工作状态, * 并根据不同的温度值和功率值进行状态切换。 *****************************************************************************/ void Logic_Temp_Select_LC(temp_params_t *para, u_int16_t No) { // 检查参数编号是否合法 if (No >= MAX_NUM_CABINT) { return; } temp_limit_t temp_limit; // 错误数据 if (fabs(para->maxCellTemp[No]) > 255.0f || fabs(para->minCellTemp[No]) > 255.0f) { logicTempState[No] = kTemp_Judge_Close; return; } // 没有电池温度,关机 if (para->maxCellTemp[No] < EPSILON && para->minCellTemp[No] < EPSILON) { logicTempState[No] = kTemp_Judge_Close; return; } // 根据当前功率判断使用待机温度或工作温度 if (abs(para->pcsPower[No]) < TEMP_WORKPOWER) { temp_limit = para->standByTemp; // 使用待机温度 } else { temp_limit = para->workTemp; // 使用工作温度 } // 判断是否需要触发制冷或制热 if (para->maxCellTemp[No] - temp_limit.coolTrigTemp > -EPSILON) { // 过温状态 logicTempState[No] = kTemp_Judge_OverTemp; return; } else if (temp_limit.heatTrigTemp - para->minCellTemp[No] > -EPSILON) { // 欠温状态 logicTempState[No] = kTemp_Judge_UnderTemp; return; } // 根据当前温度状态进行判断和状态转换 switch (logicTempState[No]) { // 过温判断 case kTemp_Judge_OverTemp: case kTemp_Judge_OverLock: if (temp_limit.coolTrigTemp - temp_limit.coolHys - para->maxCellTemp[No] > -EPSILON) { // 恢复正常状态 logicTempState[No] = kTemp_Judge_Normal; } else { // 保持过温锁定状态 logicTempState[No] = kTemp_Judge_OverLock; } break; // 欠温判断 case kTemp_Judge_UnderTemp: case kTemp_Judge_UnderLock: if (temp_limit.heatTrigTemp + temp_limit.heatHys - para->minCellTemp[No] < EPSILON) { // 恢复正常状态 logicTempState[No] = kTemp_Judge_Normal; } else { // 保持欠温锁定状态 logicTempState[No] = kTemp_Judge_UnderLock; } break; // 正常循环状态 case kTemp_Judge_Normal: if (abs(para->pcsPower[No]) < TEMP_WORKPOWER) { // 检查是否符合待机关闭条件 if (para->maxCellTemp[No] - (para->standByLimit.maxlimit - para->standByLimit.maxbacklimit) <= EPSILON && para->standByLimit.minlimit + para->standByLimit.minbacklimit - para->minCellTemp[No] <= EPSILON) { logicTempState[No] = kTemp_Judge_Close; // 进入关闭状态 } } break; // 关机状态 case kTemp_Judge_Close: if (abs(para->pcsPower[No]) < TEMP_WORKPOWER) { // 检查是否符合恢复正常条件 if (para->maxCellTemp[No] - para->standByLimit.maxlimit > -EPSILON || para->standByLimit.minlimit - para->minCellTemp[No] > -EPSILON) { logicTempState[No] = kTemp_Judge_Normal; // 恢复正常状态 } } break; // 其他状态,保持原有状态 default: break; } } /***************************************************************************** * @brief 选择当前温控设备状态 * @param[in] para 指向温度参数结构体的指针,包含当前温度、功率等信息 * @param[in] No 参数编号,用于选择特定的温度控制对象 * @return 无返回值 * * @note 该函数通过温度参数来判断当前设备是否处于过温、欠温或正常工作状态, * 并根据不同的温度值和功率值进行状态切换。 *****************************************************************************/ void Logic_Temp_Select_AC(temp_params_t *para, u_int16_t No) { // 检查参数编号是否合法 if (No >= MAX_NUM_CABINT) { return; } temp_limit_t temp_limit; temp_limit = para->workTemp; // 使用工作温度 // 错误数据 if (fabs(para->maxCellTemp[No]) > 255.0f || fabs(para->minCellTemp[No]) > 255.0f) { logicTempState[No] = kTemp_Judge_Close; return; } // 没有电池温度,关机 if (para->maxCellTemp[No] < EPSILON && para->minCellTemp[No] < EPSILON) { logicTempState[No] = kTemp_Judge_Close; return; } // 判断是否需要触发制冷或制热 if (para->maxCellTemp[No] - temp_limit.coolTrigTemp > EPSILON) { // 过温状态 logicTempState[No] = kTemp_Judge_OverTemp; return; } else if (temp_limit.heatTrigTemp - para->minCellTemp[No] > EPSILON) { // 欠温状态 logicTempState[No] = kTemp_Judge_UnderTemp; return; } // 根据当前温度状态进行判断和状态转换 switch (logicTempState[No]) { // 过温判断 case kTemp_Judge_OverTemp: case kTemp_Judge_OverLock: if (temp_limit.coolTrigTemp - temp_limit.coolHys - para->maxCellTemp[No] > EPSILON) { // 恢复正常状态 logicTempState[No] = kTemp_Judge_Normal; } else { // 保持过温锁定状态 logicTempState[No] = kTemp_Judge_OverLock; } break; // 欠温判断 case kTemp_Judge_UnderTemp: case kTemp_Judge_UnderLock: if (temp_limit.heatTrigTemp + temp_limit.heatHys - para->minCellTemp[No] < EPSILON) { // 恢复正常状态 logicTempState[No] = kTemp_Judge_Normal; } else { // 保持欠温锁定状态 logicTempState[No] = kTemp_Judge_UnderLock; } break; // 其他状态,保持原有状态 default: break; } } void Logic_Temp_Select_AC_Auto(temp_params_t *para, u_int16_t No) { ; } void Logic_Temp_Select_LC_Auto(temp_params_t *para, u_int16_t No) { ; } /***************************************************************************** * @brief 创建温度控制线程 * @param[in] 无 * @return 无 *****************************************************************************/ void *creatLogicTempThread(void *arg) { temp_params_t *temp_params_in = (temp_params_t *)arg; while (stTemp.exitTaskFlag == 0) { // 读取更新信号 // if(1 == readWebSign(kSign_ShMem, kSign_TempCtrl)) // { // writeWebSign(kSign_ShMem, kSign_TempCtrl, 0); // temp_ctrl_algorithm_t temp_infoFromDB; // int ret = kit_get_temp_ctrl_algorithm(&temp_infoFromDB); // if (ret != 0) // 判断是否成功 // { // KITLOG(LOG_KIT_EN, ERROR_EN, "读取温控配置失败"); // stTemp.exitTaskFlag = 1; // continue; // } // Logic_Temp_initParam(&temp_infoFromDB, temp_params_in); // } Logic_Temp_Collect(temp_params_in); for(u_int16_t i = 0;i < gStDevTypeNum[kDev_Type_AirCond_LiquidCool]; i++) { tempEquipCall[temp_params_in->mod](temp_params_in, i); tempFunCall[temp_params_in->mod][logicTempState[i]](temp_params_in, &i); } usleep(1000000); // 1s sleep } free(temp_params_in); // 线程结束后释放内存 pthread_exit(NULL); } /********************************************************************* * @brief 新建温控的初始化工作 * @param[in] 无 * @return 0:sucessful;1:fault *********************************************************************/ int creatLogicTempCtrlEntry() { if(0 == gStDevTypeNum[kDev_Type_AirCond_LiquidCool]) { return 1; } temp_ctrl_algorithm_t temp_infoFromDB; temp_params_t *tempPara = (temp_params_t *)malloc(sizeof(temp_params_t)); if (tempPara == NULL) // 检查内存分配是否成功 { KITLOG(LOG_KIT_EN, ERROR_EN, "内存分配失败"); return 1; } int ret = kit_get_temp_ctrl_algorithm(&temp_infoFromDB); if (ret != 0) // 判断是否成功 { free(tempPara); return 1; } Logic_Temp_initParam(&temp_infoFromDB, tempPara); Logic_Temp_initEquip(tempPara); if (pthread_create(&stTemp.tfd, NULL, creatLogicTempThread, (void *)tempPara) != 0) { KITPTF(LOG_LOGIC_EN, ERROR_EN, "temp线程创建失败"); KITLOG(LOG_LOGIC_EN, ERROR_EN, "temp线程创建失败"); free(tempPara); return 1; } KITPTF(LOG_LOGIC_EN, INFO_EN, "temp线程创建成功"); KITLOG(LOG_LOGIC_EN, INFO_EN, "temp线程创建成功"); return 0; } /***************************************************************************** * @brief 过温回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_OverTemp_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_cold != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_cold); } } /***************************************************************************** * @brief 过温自锁回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_OverLock_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_cold != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_cold); } } /***************************************************************************** * @brief 自循环回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_Normal_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_normal != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_normal); } } /***************************************************************************** * @brief 欠温回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_UnderTemp_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_heat != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_heat); } } /***************************************************************************** * @brief 欠温自锁回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_UnderLock_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_heat != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_heat); } } /***************************************************************************** * @brief 关机回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_Close_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdOpen == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_Switch, temp_params_in->tempCmdClose); } if (temp_params_in->tempCmd_normal != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_Lc_RunMode, temp_params_in->tempCmd_normal); } } /***************************************************************************** * @brief 过温回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_OverTemp_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_cold != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolTemp)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolTemp, TEMP_AC_TEMP); } } /***************************************************************************** * @brief 过温自锁回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_OverLock_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_cold != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolTemp)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetCoolTemp, TEMP_AC_TEMP); } } /***************************************************************************** * @brief 自循环回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_Normal_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdOpen == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdClose); } } /***************************************************************************** * @brief 欠温回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_UnderTemp_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_heat != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatTemp)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatTemp, temp_params_in->tempCmd_heat); } } /***************************************************************************** * @brief 欠温自锁回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_UnderLock_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdClose == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdOpen); } if (temp_params_in->tempCmd_heat != getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatTemp)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetHeatTemp, temp_params_in->tempCmd_heat); } } /***************************************************************************** * @brief 关机回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_Close_Callback(void *arg, void *no) { uint16_t i = *(uint16_t *)no; temp_params_t *temp_params_in = (temp_params_t *)arg; if (temp_params_in->tempCmdOpen == getRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff)) { setRtdbPointValue(Rtdb_ShMem, kDev_Type_AirCond_LiquidCool, i, kAcLiquidMac_SetOnOff, temp_params_in->tempCmdClose); } } /***************************************************************************** * @brief 空调自动模式回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kAC_Auto_Callback(void *arg, void *no) { ; } /***************************************************************************** * @brief 液冷自动模式回调 * @param[in] para 指向温度参数结构体的指针,用于存储收集到的参数 * @param[in] No 序号 * @return None *****************************************************************************/ void kLC_Auto_Callback(void *arg, void *no) { ; }