mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-11 02:34:29 +05:00
refactor: improved turbo mode
This commit is contained in:
@@ -58,6 +58,6 @@ private:
|
|||||||
|
|
||||||
// Расчет поправки (ошибки) термостата
|
// Расчет поправки (ошибки) термостата
|
||||||
datatype getResultT() {
|
datatype getResultT() {
|
||||||
return constrain((targetTemp - indoorTemp), -2, 2) * Kt;
|
return constrain((targetTemp - indoorTemp), -3, 3) * Kt;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user