ems/ems_c/logic/logic_tempCtrl.c

723 lines
27 KiB
C
Raw Normal View History

2025-05-13 17:49:49 +08:00
/*****************************************************************************
* @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", &para->maxCellTemp[0]); // 输入最大单元温度
// printf("请输入最小单元温度: ");
// scanf("%f", &para->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 0sucessful1fault
*********************************************************************/
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)
{
;
}