|
|
@ -77,30 +77,29 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { |
|
|
|
switch (param_id) { |
|
|
|
MODULE_COMMON_PROCESS_REG_CB(); |
|
|
|
PROCESS_REG(kreg_pid_kp, REG_GET_FLOAT(m_cfg.pid_cfg.kp, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kp, 0.01)); |
|
|
|
PROCESS_REG(kreg_pid_ki, REG_GET_FLOAT(m_cfg.pid_cfg.ki, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.ki, 0.01)); |
|
|
|
PROCESS_REG(kreg_pid_kd, REG_GET_FLOAT(m_cfg.pid_cfg.kd, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kd, 0.01)); |
|
|
|
PROCESS_REG(kreg_pid_max_output, REG_GET_FLOAT(m_cfg.pid_cfg.max_output, 1), REG_SET_FLOAT(m_cfg.pid_cfg.max_output, 1)); |
|
|
|
PROCESS_REG(kreg_pid_min_output, REG_GET_FLOAT(m_cfg.pid_cfg.min_output, 1), REG_SET_FLOAT(m_cfg.pid_cfg.min_output, 1)); |
|
|
|
PROCESS_REG(kreg_pid_max_integral, REG_GET_FLOAT(m_cfg.pid_cfg.max_integral, 1), REG_SET_FLOAT(m_cfg.pid_cfg.max_integral, 1)); |
|
|
|
PROCESS_REG(kreg_pid_min_integral, REG_GET_FLOAT(m_cfg.pid_cfg.min_integral, 1), REG_SET_FLOAT(m_cfg.pid_cfg.min_integral, 1)); |
|
|
|
PROCESS_REG(kreg_compute_interval, REG_GET(m_cfg.pidcompute_periodms), REG_SET(m_cfg.pidcompute_periodms)); |
|
|
|
PROCESS_REG(kreg_pid_target, REG_GET_FLOAT(m_target_temperature, 0.1), REG_SET_FLOAT(m_target_temperature, 0.1)); |
|
|
|
|
|
|
|
// PROCESS_REG(kreg_module_private0, gettemperature_sensor_state(val), ACTION_NONE);
|
|
|
|
|
|
|
|
PROCESS_REG(kreg_pid_nowoutput, REG_GET(m_pidmodule.get_output()), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_pid_feedbackval, REG_GET(read_pid_temperature()), ACTION_NONE); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_sensor_temperature0, REG_GET(getTemperatureSensorVal(0) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature1, REG_GET(getTemperatureSensorVal(1) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature2, REG_GET(getTemperatureSensorVal(2) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature3, REG_GET(getTemperatureSensorVal(3) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_kp, REG_GET_FLOAT(m_cfg.pid_cfg.kp, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kp, 0.01)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_ki, REG_GET_FLOAT(m_cfg.pid_cfg.ki, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.ki, 0.01)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_kd, REG_GET_FLOAT(m_cfg.pid_cfg.kd, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kd, 0.01)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_max_output, REG_GET_FLOAT(m_cfg.pid_cfg.max_output, 1), REG_SET_FLOAT(m_cfg.pid_cfg.max_output, 1)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_min_output, REG_GET_FLOAT(m_cfg.pid_cfg.min_output, 1), REG_SET_FLOAT(m_cfg.pid_cfg.min_output, 1)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_max_integral, REG_GET_FLOAT(m_cfg.pid_cfg.max_integral, 1), REG_SET_FLOAT(m_cfg.pid_cfg.max_integral, 1)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_min_integral, REG_GET_FLOAT(m_cfg.pid_cfg.min_integral, 1), REG_SET_FLOAT(m_cfg.pid_cfg.min_integral, 1)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_compute_interval, REG_GET(m_cfg.pidcompute_periodms), REG_SET(m_cfg.pidcompute_periodms)); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_target, REG_GET_FLOAT(m_target_temperature, 0.1), REG_SET_FLOAT(m_target_temperature, 0.1)); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_nowoutput, REG_GET(m_pidmodule.get_output()), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_pid_feedbackval, REG_GET(read_pid_temperature()), ACTION_NONE); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_temp0, REG_GET(getTemperatureSensorVal(0) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_temp1, REG_GET(getTemperatureSensorVal(1) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_temp2, REG_GET(getTemperatureSensorVal(2) * 100), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_water_cooling_tmp_controler_temp3, REG_GET(getTemperatureSensorVal(3) * 100), ACTION_NONE); |
|
|
|
|
|
|
|
default: |
|
|
|
return err::kmodule_not_find_reg; |
|
|
|
break; |
|
|
|
} |
|
|
|
if (!read) module_active_cfg(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
@ -108,14 +107,12 @@ int32_t WaterCoolingTemperatureControlModule::module_get_status(int32_t* status) |
|
|
|
*status = getworkstate(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::gettemperature_sensor_state(int32_t& state) { |
|
|
|
for (int32_t i = 0; i < m_n_temperature_sensor; i++) { |
|
|
|
state |= m_temperature_sensor[i]->isOnline() << i; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_active_cfg() { |
|
|
|
// m_pidmodule
|
|
|
|
m_pidmodule.update_kp(m_cfg.pid_cfg.kp); |
|
|
@ -127,19 +124,19 @@ int32_t WaterCoolingTemperatureControlModule::module_active_cfg() { |
|
|
|
m_pidmodule.update_min_integral(m_cfg.pid_cfg.min_integral); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_start() { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_start_hearting(int32_t targetTemperature) { |
|
|
|
m_thread.stop(); |
|
|
|
module_clear_error(); |
|
|
|
ZLOGI(TAG, "module_start"); |
|
|
|
m_thread.start([this]() { workloop(); }); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_stop() { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_stop_hearting() { |
|
|
|
m_thread.stop(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
void WaterCoolingTemperatureControlModule::workloop() { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_stop() { return temp_controler_stop_hearting(); } |
|
|
|
void WaterCoolingTemperatureControlModule::workloop() { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
* 启动水泵 |
|
|
@ -152,6 +149,8 @@ void WaterCoolingTemperatureControlModule::workloop() { |
|
|
|
* } |
|
|
|
*/ |
|
|
|
|
|
|
|
module_active_cfg(); |
|
|
|
|
|
|
|
pump_start(m_cfg.pumplevel); |
|
|
|
fan_start(m_cfg.fanlevel); |
|
|
|
int32_t i = 0; |
|
|
@ -193,6 +192,40 @@ void WaterCoolingTemperatureControlModule::workloop() { |
|
|
|
|
|
|
|
#define BIT(x, n) ((x >> n) & 0x01)
|
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::getworkstate() { |
|
|
|
if (creg.module_errorcode != 0) { |
|
|
|
return 2; |
|
|
|
} |
|
|
|
if (!m_thread.isworking()) { |
|
|
|
return 0; |
|
|
|
} else { |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::geterrorbitflag0() { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
*/ |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index]; |
|
|
|
|
|
|
|
int32_t errorbitflag = 0; |
|
|
|
errorbitflag |= m_fan_ctrl->isError() << 0; |
|
|
|
errorbitflag |= m_pump_ctrl->isError() << 1; |
|
|
|
errorbitflag |= m_pelter_ctrl->isError() << 2; |
|
|
|
errorbitflag |= sensor->isError() << 3; |
|
|
|
|
|
|
|
// if (m_fanTable[1]) errorbitflag |= m_fanTable[1]->isError() << 1;
|
|
|
|
// if (m_fanTable[2]) errorbitflag |= m_fanTable[2]->isError() << 2;
|
|
|
|
// if (m_fanTable[3]) errorbitflag |= m_fanTable[3]->isError() << 3;
|
|
|
|
|
|
|
|
// if (m_pump) errorbitflag |= m_pump->isError() << 4;
|
|
|
|
|
|
|
|
// if (m_peltier_ctrl[0]) errorbitflag |= m_peltier_ctrl[0]->isFault() << 8;
|
|
|
|
// if (m_peltier_ctrl[1]) errorbitflag |= m_peltier_ctrl[1]->isFault() << 9;
|
|
|
|
return errorbitflag; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::checkdevice() { |
|
|
|
uint32_t module_errorbitflag0 = geterrorbitflag0(); |
|
|
|
if (module_errorbitflag0 != 0) { |
|
|
@ -202,8 +235,8 @@ int32_t WaterCoolingTemperatureControlModule::checkdevice() { |
|
|
|
BIT(module_errorbitflag0, 2), //
|
|
|
|
BIT(module_errorbitflag0, 3)); |
|
|
|
m_pelter_ctrl->dumpErrorInfo(); |
|
|
|
//TODO 设置错误码
|
|
|
|
// creg.module_errorcode = err::khwardware_error;
|
|
|
|
// TODO 设置错误码
|
|
|
|
// creg.module_errorcode = err::khwardware_error;
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
return 0; |
|
|
@ -238,7 +271,6 @@ float WaterCoolingTemperatureControlModule::read_pid_temperature() { |
|
|
|
|
|
|
|
void WaterCoolingTemperatureControlModule::pump_start(int32_t pump_speed) { |
|
|
|
ZLOGI(TAG, "pump_start %d", pump_speed); |
|
|
|
// m_pump->startModule(pump_speed);
|
|
|
|
m_pump_ctrl->setPumpSpeed(pump_speed); |
|
|
|
} |
|
|
|
void WaterCoolingTemperatureControlModule::pump_stop() { |
|
|
@ -249,67 +281,19 @@ void WaterCoolingTemperatureControlModule::pump_stop() { |
|
|
|
void WaterCoolingTemperatureControlModule::fan_start(int32_t pump_speed) { |
|
|
|
ZLOGI(TAG, "fan_start %d", pump_speed); |
|
|
|
m_fan_ctrl->setFanSpeed(pump_speed); |
|
|
|
// for (int32_t i = 0; i < m_fanNum; i++) {
|
|
|
|
// m_fanTable[i]->startModule(pump_speed);
|
|
|
|
// }
|
|
|
|
} |
|
|
|
void WaterCoolingTemperatureControlModule::fan_stop() { |
|
|
|
ZLOGI(TAG, "fan_stop"); |
|
|
|
m_fan_ctrl->stop(); |
|
|
|
// for (int32_t i = 0; i < m_fanNum; i++) {
|
|
|
|
// m_fanTable[i]->stopModule();
|
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
void WaterCoolingTemperatureControlModule::peltier_set_power_level(int32_t level) { |
|
|
|
// ZLOGI(TAG, "peltier_set_power_level %d", level);
|
|
|
|
ZLOGI(TAG, "peltier_set_power_level %d", level); |
|
|
|
m_pelter_ctrl->setSpeed(level); |
|
|
|
// for (int32_t i = 0; i < m_peltier_ctrl_num; i++) {
|
|
|
|
// m_peltier_ctrl[i]->move(level);
|
|
|
|
// m_peltier_ctrl[i]->enable(true);
|
|
|
|
// }
|
|
|
|
} |
|
|
|
void WaterCoolingTemperatureControlModule::peltier_stop() { |
|
|
|
ZLOGI(TAG, "peltier_stop"); |
|
|
|
m_pelter_ctrl->stop(); |
|
|
|
// for (int32_t i = 0; i < m_peltier_ctrl_num; i++) {
|
|
|
|
// m_peltier_ctrl[i]->move(0);
|
|
|
|
// m_peltier_ctrl[i]->enable(false);
|
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::getworkstate() { |
|
|
|
if (creg.module_errorcode != 0) { |
|
|
|
return 2; |
|
|
|
} |
|
|
|
if (!m_thread.isworking()) { |
|
|
|
return 0; |
|
|
|
} else { |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::geterrorbitflag0() { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
*/ |
|
|
|
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index]; |
|
|
|
|
|
|
|
int32_t errorbitflag = 0; |
|
|
|
errorbitflag |= m_fan_ctrl->isError() << 0; |
|
|
|
errorbitflag |= m_pump_ctrl->isError() << 1; |
|
|
|
errorbitflag |= m_pelter_ctrl->isError() << 2; |
|
|
|
errorbitflag |= sensor->isError() << 3; |
|
|
|
|
|
|
|
// if (m_fanTable[1]) errorbitflag |= m_fanTable[1]->isError() << 1;
|
|
|
|
// if (m_fanTable[2]) errorbitflag |= m_fanTable[2]->isError() << 2;
|
|
|
|
// if (m_fanTable[3]) errorbitflag |= m_fanTable[3]->isError() << 3;
|
|
|
|
|
|
|
|
// if (m_pump) errorbitflag |= m_pump->isError() << 4;
|
|
|
|
|
|
|
|
// if (m_peltier_ctrl[0]) errorbitflag |= m_peltier_ctrl[0]->isFault() << 8;
|
|
|
|
// if (m_peltier_ctrl[1]) errorbitflag |= m_peltier_ctrl[1]->isFault() << 9;
|
|
|
|
return errorbitflag; |
|
|
|
} |
|
|
|
|
|
|
|
float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t index) { |
|
|
@ -319,7 +303,7 @@ float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t inde |
|
|
|
} |
|
|
|
return m_temperature_sensor[index]->getTemperature(); |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::test_peltier_set_power_level(int32_t level) { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_set_peltier_power_level(int32_t level) { |
|
|
|
if (level == 0) { |
|
|
|
peltier_stop(); |
|
|
|
} else { |
|
|
@ -327,7 +311,7 @@ int32_t WaterCoolingTemperatureControlModule::test_peltier_set_power_level(int32 |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::test_pump_set_level(int32_t level) { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_set_pump_level(int32_t level) { |
|
|
|
if (level == 0) { |
|
|
|
pump_stop(); |
|
|
|
} else { |
|
|
@ -335,7 +319,7 @@ int32_t WaterCoolingTemperatureControlModule::test_pump_set_level(int32_t level) |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::test_fan_set_level(int32_t level) { |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_set_fan_level(int32_t level) { |
|
|
|
if (level == 0) { |
|
|
|
fan_stop(); |
|
|
|
} else { |
|
|
@ -343,3 +327,8 @@ int32_t WaterCoolingTemperatureControlModule::test_fan_set_level(int32_t level) |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::temp_controler_enable_log(int32_t enablelog) { |
|
|
|
ZLOGI(TAG, "temp_controler_enable_log %d", enablelog); |
|
|
|
m_enable_log = enablelog; |
|
|
|
return 0; |
|
|
|
} |