ems/ems_c/logic/logic_tempCtrl.c

723 lines
27 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
* @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)
{
;
}