From cbb68311e11914ddb6b6bf75e103ae5e5099bbe0 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 21 Jul 2025 17:24:55 +0800 Subject: [PATCH] =?UTF-8?q?v1215|=20=E4=B8=BA=E6=B8=A9=E5=BA=A6=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E6=A8=A1=E5=9D=97=E6=B7=BB=E5=8A=A0=E6=B8=A9=E5=BA=A6?= =?UTF-8?q?=E5=81=8F=E7=A7=BB=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/components/api/zi_module.hpp | 9 +++++--- .../pid_module.hpp | 3 +-- .../water_cooling_temperature_control_module.cpp | 23 ++++++++++++++++++--- .../water_cooling_temperature_control_module.hpp | 7 +++++-- usrc/a8000_protocol/protocol/reg_index.cpp | 8 ++++++++ usrc/a8000_protocol/protocol/reg_index.hpp | 24 ++++++++++++++-------- usrc/version.c | 2 +- 7 files changed, 57 insertions(+), 19 deletions(-) diff --git a/sdk/components/api/zi_module.hpp b/sdk/components/api/zi_module.hpp index 65535de..a852a1a 100644 --- a/sdk/components/api/zi_module.hpp +++ b/sdk/components/api/zi_module.hpp @@ -4,7 +4,6 @@ #include #include "a8000_protocol\protocol.hpp" - #include "version.h" namespace iflytop { using namespace std; @@ -44,8 +43,12 @@ using namespace std; #define MODULE_CFG_CASE__GET_REG_FLOAT(reg, storage, precision) \ case reg: { \ - *val = (int32_t)(storage / precision); \ - ret = 0; \ + if (storage >= 0) { \ + *val = (int32_t)(storage / precision + 0.5); \ + } else { \ + *val = (int32_t)(storage / precision - 0.5); \ + } \ + ret = 0; \ break; \ } diff --git a/sdk/components/water_cooling_temperature_control_module/pid_module.hpp b/sdk/components/water_cooling_temperature_control_module/pid_module.hpp index add6a17..cf0abdd 100644 --- a/sdk/components/water_cooling_temperature_control_module/pid_module.hpp +++ b/sdk/components/water_cooling_temperature_control_module/pid_module.hpp @@ -45,8 +45,7 @@ class PidModule { config_t *get_cfg(); - - void set_integral_err(float v); + void set_integral_err(float v); private: float pid_calc_positional(float error); diff --git a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp index 914e529..6117946 100644 --- a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp +++ b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp @@ -96,12 +96,19 @@ int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t regindex, i MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_nowoutput); MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_feedbackval); + MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_integral_errorval); MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp0); MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp1); MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp2); MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp3); + MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp0_offset, m_temperature_sensor_offset[0], 0.1); + MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp1_offset, m_temperature_sensor_offset[1], 0.1); + MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp2_offset, m_temperature_sensor_offset[2], 0.1); + MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp3_offset, m_temperature_sensor_offset[3], 0.1); + MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_fanlevel_coefficient, m_fanlevel_coefficient, 0.1); + default: return err::kmodule_not_find_reg; break; @@ -127,12 +134,19 @@ int32_t WaterCoolingTemperatureControlModule::module_get_reg(int32_t regindex, i 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, (m_feedbak_temperature * 10 + 0.5)); + MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_integral_errorval, m_pidmodule.get_integral_err(), 1); 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_FLOAT(kreg_water_cooling_tmp_controler_temp0_offset, (m_temperature_sensor_offset[0]), 0.1); + MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp1_offset, (m_temperature_sensor_offset[1]), 0.1); + MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp2_offset, (m_temperature_sensor_offset[2]), 0.1); + MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp3_offset, (m_temperature_sensor_offset[3]), 0.1); + MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_fanlevel_coefficient, m_fanlevel_coefficient, 0.1); + default: return err::kmodule_not_find_reg; break; @@ -228,7 +242,7 @@ void WaterCoolingTemperatureControlModule::workloop() { peltier_set_power_level(out); i++; if (i % 10 == 0) { - int32_t fanspeed = prvabs(out) * 0.7; + int32_t fanspeed = prvabs(out) * m_fanlevel_coefficient; if (fanspeed > 100) fanspeed = 100; if (fanspeed < m_cfg.min_fanlevel) fanspeed = m_cfg.min_fanlevel; fan_start(fanspeed); @@ -286,6 +300,7 @@ float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() { float WaterCoolingTemperatureControlModule::read_pid_temperature() { zlock_guard lock(m_temperature_sensor_mutex); ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index]; + float offset = m_temperature_sensor_offset[m_cfg.temp_fb_index]; float val[3] = {0}; for (int32_t i = 0; i < 3; i++) { val[i] = sensor->getTemperature(); @@ -303,7 +318,7 @@ float WaterCoolingTemperatureControlModule::read_pid_temperature() { } float retval = val[1]; - return retval; + return (retval + offset); } void WaterCoolingTemperatureControlModule::pump_start(int32_t pump_speed) { @@ -338,7 +353,9 @@ float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t inde if (index < 0 || index >= m_n_temperature_sensor) { return 0; } - return m_temperature_sensor[index]->getTemperature(); + float temp = m_temperature_sensor[index]->getTemperature(); + float offset = m_temperature_sensor_offset[index]; + return temp + offset; } int32_t WaterCoolingTemperatureControlModule::temp_controler_set_peltier_power_level(int32_t level) { if (level == 0) { diff --git a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp index ce0f6c2..2325f45 100644 --- a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp +++ b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp @@ -74,8 +74,11 @@ class WaterCoolingTemperatureControlModule : public ZIModule { float m_target_temperature = 0; int32_t m_output = 0; - float m_feedbak_temperature = 0; - float m_temperature_sensor_cache[4] = {0}; + float m_feedbak_temperature = 0; + float m_temperature_sensor_cache[4] = {0}; + float m_temperature_sensor_offset[4] = {0}; + + float m_fanlevel_coefficient = 0.8f; // 风扇转速系数 zmutex m_temperature_sensor_mutex; diff --git a/usrc/a8000_protocol/protocol/reg_index.cpp b/usrc/a8000_protocol/protocol/reg_index.cpp index 64ae375..ef6a9b8 100644 --- a/usrc/a8000_protocol/protocol/reg_index.cpp +++ b/usrc/a8000_protocol/protocol/reg_index.cpp @@ -18,6 +18,7 @@ static reginfo_t table[] = { REG_ITERM(kreg_water_cooling_tmp_controler_pid_target), REG_ITERM(kreg_water_cooling_tmp_controler_pid_nowoutput), REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbackval), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_integral_errorval), REG_ITERM(kreg_water_cooling_tmp_controler_temp0), REG_ITERM(kreg_water_cooling_tmp_controler_temp1), REG_ITERM(kreg_water_cooling_tmp_controler_temp2), @@ -34,6 +35,13 @@ static reginfo_t table[] = { REG_ITERM(kreg_water_cooling_tmp_controler_pid_compute_interval), REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbak_index), + REG_ITERM(kreg_water_cooling_tmp_controler_temp0_offset), + REG_ITERM(kreg_water_cooling_tmp_controler_temp1_offset), + REG_ITERM(kreg_water_cooling_tmp_controler_temp2_offset), + REG_ITERM(kreg_water_cooling_tmp_controler_temp3_offset), + + REG_ITERM(kreg_water_cooling_tmp_controler_fanlevel_coefficient), + REG_ITERM(kreg_pipette_pos_nl), REG_ITERM(kreg_pipette_capactitance_val), REG_ITERM(kreg_pipette_tip_state), diff --git a/usrc/a8000_protocol/protocol/reg_index.hpp b/usrc/a8000_protocol/protocol/reg_index.hpp index b67e937..662d65b 100644 --- a/usrc/a8000_protocol/protocol/reg_index.hpp +++ b/usrc/a8000_protocol/protocol/reg_index.hpp @@ -22,13 +22,14 @@ typedef enum { /*********************************************************************************************************************** * 水冷温度控制器 * ***********************************************************************************************************************/ - kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值 - kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出 - kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出 - kreg_water_cooling_tmp_controler_temp0 = 3003, // 温度1 - kreg_water_cooling_tmp_controler_temp1 = 3004, // 温度2 - kreg_water_cooling_tmp_controler_temp2 = 3005, // 温度3 - kreg_water_cooling_tmp_controler_temp3 = 3006, // 温度4 + kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值 + kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出 + kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出 + kreg_water_cooling_tmp_controler_pid_integral_errorval = 3003, + kreg_water_cooling_tmp_controler_temp0 = 3010, // 温度0 + kreg_water_cooling_tmp_controler_temp1 = 3011, // 温度1 + kreg_water_cooling_tmp_controler_temp2 = 3012, // 温度2 + kreg_water_cooling_tmp_controler_temp3 = 3013, // 温度3 kreg_water_cooling_tmp_controler_pid_kp = 3050, // kp kreg_water_cooling_tmp_controler_pid_ki = 3051, // ki @@ -39,7 +40,14 @@ typedef enum { kreg_water_cooling_tmp_controler_pid_min_integral = 3056, // 最小积分 kreg_water_cooling_tmp_controler_pid_error_limit = 3057, // 误差限制 kreg_water_cooling_tmp_controler_pid_compute_interval = 3058, // 计算间隔 - kreg_water_cooling_tmp_controler_pid_feedbak_index = 3059, // 返回index + kreg_water_cooling_tmp_controler_pid_feedbak_index = 3059, // 当前使用哪个温度 + + kreg_water_cooling_tmp_controler_temp0_offset = 3060, // 温度0 偏移 + kreg_water_cooling_tmp_controler_temp1_offset = 3061, // 温度1 偏移 + kreg_water_cooling_tmp_controler_temp2_offset = 3062, // 温度2 偏移 + kreg_water_cooling_tmp_controler_temp3_offset = 3063, // 温度3 偏移 + + kreg_water_cooling_tmp_controler_fanlevel_coefficient = 3070, // 风扇转速系数0.1 /******************************************************************************* * 移液枪状态 * diff --git a/usrc/version.c b/usrc/version.c index 8183655..d77148e 100644 --- a/usrc/version.c +++ b/usrc/version.c @@ -1,5 +1,5 @@ #include "version.h" -int32_t APP_VERSION = 1214; +int32_t APP_VERSION = 1215; int32_t get_app_version() { return APP_VERSION; }