|
|
@ -22,7 +22,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, |
|
|
|
m_temperature_sensor[i] = hardwaredconfig->temperature_sensor[i]; |
|
|
|
m_n_temperature_sensor++; |
|
|
|
} |
|
|
|
ZASSERT(m_temperature_sensor[m_hardwared_config.temp_fb_index] != nullptr); |
|
|
|
ZASSERT(m_temperature_sensor[m_cfg.temp_fb_index] != nullptr); |
|
|
|
|
|
|
|
m_fan_ctrl = hardwaredconfig->fan_ctrl; |
|
|
|
m_pelter_ctrl = hardwaredconfig->pelter_ctrl; |
|
|
@ -30,6 +30,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, |
|
|
|
|
|
|
|
m_pidmodule.initialize(&cfg->pid_cfg); |
|
|
|
m_thread.init("WaterCoolingTemperatureControlModule"); |
|
|
|
m_sensor_update_thread.init("WCTC-SensorUpdateThr"); |
|
|
|
m_cfg = *cfg; |
|
|
|
m_default_cfg = *cfg; |
|
|
|
m_target_temperature = 25; |
|
|
@ -39,6 +40,22 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, |
|
|
|
m_pelter_ctrl->stop(); |
|
|
|
m_pump_ctrl->stop(); |
|
|
|
module_clear_error(); |
|
|
|
|
|
|
|
m_sensor_update_thread.start([this]() { |
|
|
|
while (true) { |
|
|
|
m_sensor_update_thread.sleep(1000); |
|
|
|
if (module_status != 1) m_feedbak_temperature = read_pid_temperature_from_upper(); |
|
|
|
if (m_temperature_sensor[0]->isError()) m_temperature_sensor_cache[0] = getTemperatureSensorVal(0); |
|
|
|
if (m_temperature_sensor[1]->isError()) m_temperature_sensor_cache[1] = getTemperatureSensorVal(1); |
|
|
|
if (m_temperature_sensor[2]->isError()) m_temperature_sensor_cache[2] = getTemperatureSensorVal(2); |
|
|
|
if (m_temperature_sensor[3]->isError()) m_temperature_sensor_cache[3] = getTemperatureSensorVal(3); |
|
|
|
|
|
|
|
if (module_status != 1) { |
|
|
|
ZLOGI(TAG, "T0:%0.2f T1:%0.2f T2:%0.2f T3:%0.2f", m_temperature_sensor_cache[0], m_temperature_sensor_cache[1], m_temperature_sensor_cache[2], m_temperature_sensor_cache[3]); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
ZLOGI(TAG, "WaterCoolingTemperatureControlModule initialized..."); |
|
|
|
} |
|
|
|
|
|
|
@ -54,6 +71,7 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { |
|
|
|
cfg->pid_cfg.max_integral = 150; |
|
|
|
cfg->pid_cfg.min_integral = -150; |
|
|
|
cfg->pidcompute_periodms = 1000; |
|
|
|
cfg->temp_fb_index = 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_reset_reg() { |
|
|
@ -74,6 +92,7 @@ int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t regindex, i |
|
|
|
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_min_integral, m_cfg.pid_cfg.min_integral, 1); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_water_cooling_tmp_controler_pid_compute_interval, m_cfg.pidcompute_periodms); |
|
|
|
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_target, m_target_temperature, 0.1); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_water_cooling_tmp_controler_pid_feedbak_index, m_cfg.temp_fb_index); |
|
|
|
|
|
|
|
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_nowoutput); |
|
|
|
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_feedbackval); |
|
|
@ -104,14 +123,16 @@ int32_t WaterCoolingTemperatureControlModule::module_get_reg(int32_t regindex, i |
|
|
|
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_min_integral, m_cfg.pid_cfg.min_integral, 1); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_compute_interval, m_cfg.pidcompute_periodms); |
|
|
|
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_target, m_target_temperature, 0.1); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbak_index, m_cfg.temp_fb_index); |
|
|
|
|
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_nowoutput, m_output); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbackval, (read_pid_temperature_from_upper() * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbackval, (m_feedbak_temperature * 10 + 0.5)); |
|
|
|
|
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp0, (m_temperature_sensor_cache[0] * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp1, (m_temperature_sensor_cache[1] * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp2, (m_temperature_sensor_cache[2] * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp3, (m_temperature_sensor_cache[3] * 10 + 0.5)); |
|
|
|
|
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp0, (getTemperatureSensorVal(0) * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp1, (getTemperatureSensorVal(1) * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp2, (getTemperatureSensorVal(2) * 10 + 0.5)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp3, (getTemperatureSensorVal(3) * 10 + 0.5)); |
|
|
|
default: |
|
|
|
return err::kmodule_not_find_reg; |
|
|
|
break; |
|
|
@ -232,7 +253,7 @@ void WaterCoolingTemperatureControlModule::workloop() { |
|
|
|
#define BIT(x, n) ((x >> n) & 0x01)
|
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::checkdevice() { |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index]; |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index]; |
|
|
|
if (m_fan_ctrl->isError()) { |
|
|
|
ZLOGE(TAG, "fan_ctrl is error"); |
|
|
|
module_errorcode = err::kwater_cooling_fan_error; |
|
|
@ -260,17 +281,11 @@ int32_t WaterCoolingTemperatureControlModule::checkdevice() { |
|
|
|
/*******************************************************************************
|
|
|
|
* BASIC * |
|
|
|
*******************************************************************************/ |
|
|
|
float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() { |
|
|
|
if (module_status == 1) { |
|
|
|
return m_feedbak_temperature; |
|
|
|
} else { |
|
|
|
return read_pid_temperature(); |
|
|
|
} |
|
|
|
} |
|
|
|
float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() { return read_pid_temperature(); } |
|
|
|
|
|
|
|
float WaterCoolingTemperatureControlModule::read_pid_temperature() { |
|
|
|
zlock_guard lock(m_temperature_sensor_mutex); |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index]; |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index]; |
|
|
|
float val[3] = {0}; |
|
|
|
for (int32_t i = 0; i < 3; i++) { |
|
|
|
val[i] = sensor->getTemperature(); |
|
|
|