From 261a53207c1a1217ea99682c106e1f146ecf28d2 Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 31 Oct 2024 22:35:23 +0300 Subject: [PATCH] refactor: improved turbo mode --- lib/Equitherm/Equitherm.h | 2 +- src/RegulatorTask.h | 27 ++++++++++++++++----------- src/Settings.h | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/Equitherm/Equitherm.h b/lib/Equitherm/Equitherm.h index eba4f07..287b4f2 100644 --- a/lib/Equitherm/Equitherm.h +++ b/lib/Equitherm/Equitherm.h @@ -58,6 +58,6 @@ private: // Расчет поправки (ошибки) термостата datatype getResultT() { - return constrain((targetTemp - indoorTemp), -2, 2) * Kt; + return constrain((targetTemp - indoorTemp), -3, 3) * Kt; } }; \ No newline at end of file diff --git a/src/RegulatorTask.h b/src/RegulatorTask.h index 605640a..c26a66b 100644 --- a/src/RegulatorTask.h +++ b/src/RegulatorTask.h @@ -36,7 +36,7 @@ protected: } if (settings.heating.turbo) { - if (!settings.heating.enable || vars.states.emergency) { + if (!settings.heating.enable || vars.states.emergency || !vars.sensors.indoor.connected) { settings.heating.turbo = false; } else if (!settings.pid.enable && !settings.equitherm.enable) { @@ -77,7 +77,7 @@ protected: Log.sinfoln(FPSTR(L_REGULATOR), F("New target: %.2f"), settings.heating.target); /*if (settings.pid.enable) { - pidRegulator.integral = 0; + pidRegulator.integral = 0.0f; Log.sinfoln(FPSTR(L_REGULATOR_PID), F("Integral sum has been reset")); }*/ } @@ -99,13 +99,11 @@ protected: } if (!vars.sensors.indoor.connected || settings.pid.enable) { - etRegulator.Kt = 0; - etRegulator.indoorTemp = 0; + etRegulator.Kt = 0.0f; + etRegulator.indoorTemp = 0.0f; } else { - etRegulator.Kt = settings.heating.turbo - ? settings.equitherm.t_factor * settings.heating.turboFactor - : settings.equitherm.t_factor; + etRegulator.Kt = settings.heating.turbo ? 0.0f : settings.equitherm.t_factor; etRegulator.indoorTemp = indoorTemp; } @@ -135,9 +133,7 @@ protected: if (settings.pid.enable) { //if (vars.parameters.heatingEnabled) { if (settings.heating.enable && vars.sensors.indoor.connected) { - pidRegulator.Kp = settings.heating.turbo - ? settings.pid.p_factor * settings.heating.turboFactor - : settings.pid.p_factor; + pidRegulator.Kp = settings.heating.turbo ? 0.0f : settings.pid.p_factor; pidRegulator.Kd = settings.pid.d_factor; pidRegulator.setLimits(settings.pid.minTemp, settings.pid.maxTemp); @@ -147,7 +143,7 @@ protected: if (fabs(pidRegulator.Ki - settings.pid.i_factor) >= 0.0001f) { pidRegulator.Ki = settings.pid.i_factor; - pidRegulator.integral = 0; + pidRegulator.integral = 0.0f; pidRegulator.getResultNow(); Log.sinfoln(FPSTR(L_REGULATOR_PID), F("Integral sum has been reset")); @@ -170,6 +166,15 @@ protected: } } + // Turbo mode + if (settings.heating.turbo && (settings.equitherm.enable || settings.pid.enable)) { + newTemp += constrain( + settings.heating.target - vars.temperatures.indoor, + -3.0f, + 3.0f + ) * settings.heating.turboFactor; + } + // default temp, manual mode if (!settings.equitherm.enable && !settings.pid.enable) { newTemp = settings.heating.target; diff --git a/src/Settings.h b/src/Settings.h index a520f4c..4d9a37f 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -95,7 +95,7 @@ struct Settings { bool turbo = false; float target = DEFAULT_HEATING_TARGET_TEMP; float hysteresis = 0.5f; - float turboFactor = 3.0f; + float turboFactor = 7.5f; byte minTemp = DEFAULT_HEATING_MIN_TEMP; byte maxTemp = DEFAULT_HEATING_MAX_TEMP; } heating;