723 lines
27 KiB
C
723 lines
27 KiB
C
/*****************************************************************************
|
||
* @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)
|
||
{
|
||
;
|
||
} |