refactor: improved turbo mode

This commit is contained in:
Yurii
2024-10-31 22:35:23 +03:00
parent 1dbc895cdb
commit 261a53207c
3 changed files with 18 additions and 13 deletions

View File

@@ -58,6 +58,6 @@ private:
// Расчет поправки (ошибки) термостата // Расчет поправки (ошибки) термостата
datatype getResultT() { datatype getResultT() {
return constrain((targetTemp - indoorTemp), -2, 2) * Kt; return constrain((targetTemp - indoorTemp), -3, 3) * Kt;
} }
}; };

View File

@@ -36,7 +36,7 @@ protected:
} }
if (settings.heating.turbo) { 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; settings.heating.turbo = false;
} else if (!settings.pid.enable && !settings.equitherm.enable) { } 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); Log.sinfoln(FPSTR(L_REGULATOR), F("New target: %.2f"), settings.heating.target);
/*if (settings.pid.enable) { /*if (settings.pid.enable) {
pidRegulator.integral = 0; pidRegulator.integral = 0.0f;
Log.sinfoln(FPSTR(L_REGULATOR_PID), F("Integral sum has been reset")); 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) { if (!vars.sensors.indoor.connected || settings.pid.enable) {
etRegulator.Kt = 0; etRegulator.Kt = 0.0f;
etRegulator.indoorTemp = 0; etRegulator.indoorTemp = 0.0f;
} else { } else {
etRegulator.Kt = settings.heating.turbo etRegulator.Kt = settings.heating.turbo ? 0.0f : settings.equitherm.t_factor;
? settings.equitherm.t_factor * settings.heating.turboFactor
: settings.equitherm.t_factor;
etRegulator.indoorTemp = indoorTemp; etRegulator.indoorTemp = indoorTemp;
} }
@@ -135,9 +133,7 @@ protected:
if (settings.pid.enable) { if (settings.pid.enable) {
//if (vars.parameters.heatingEnabled) { //if (vars.parameters.heatingEnabled) {
if (settings.heating.enable && vars.sensors.indoor.connected) { if (settings.heating.enable && vars.sensors.indoor.connected) {
pidRegulator.Kp = settings.heating.turbo pidRegulator.Kp = settings.heating.turbo ? 0.0f : settings.pid.p_factor;
? settings.pid.p_factor * settings.heating.turboFactor
: settings.pid.p_factor;
pidRegulator.Kd = settings.pid.d_factor; pidRegulator.Kd = settings.pid.d_factor;
pidRegulator.setLimits(settings.pid.minTemp, settings.pid.maxTemp); pidRegulator.setLimits(settings.pid.minTemp, settings.pid.maxTemp);
@@ -147,7 +143,7 @@ protected:
if (fabs(pidRegulator.Ki - settings.pid.i_factor) >= 0.0001f) { if (fabs(pidRegulator.Ki - settings.pid.i_factor) >= 0.0001f) {
pidRegulator.Ki = settings.pid.i_factor; pidRegulator.Ki = settings.pid.i_factor;
pidRegulator.integral = 0; pidRegulator.integral = 0.0f;
pidRegulator.getResultNow(); pidRegulator.getResultNow();
Log.sinfoln(FPSTR(L_REGULATOR_PID), F("Integral sum has been reset")); 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 // default temp, manual mode
if (!settings.equitherm.enable && !settings.pid.enable) { if (!settings.equitherm.enable && !settings.pid.enable) {
newTemp = settings.heating.target; newTemp = settings.heating.target;

View File

@@ -95,7 +95,7 @@ struct Settings {
bool turbo = false; bool turbo = false;
float target = DEFAULT_HEATING_TARGET_TEMP; float target = DEFAULT_HEATING_TARGET_TEMP;
float hysteresis = 0.5f; float hysteresis = 0.5f;
float turboFactor = 3.0f; float turboFactor = 7.5f;
byte minTemp = DEFAULT_HEATING_MIN_TEMP; byte minTemp = DEFAULT_HEATING_MIN_TEMP;
byte maxTemp = DEFAULT_HEATING_MAX_TEMP; byte maxTemp = DEFAULT_HEATING_MAX_TEMP;
} heating; } heating;