feat: added deadband for pid

This commit is contained in:
Yurii
2025-01-24 01:43:52 +03:00
parent afe710abd3
commit 8475833dce
9 changed files with 201 additions and 16 deletions

View File

@@ -347,7 +347,19 @@
"i": "I factor",
"d": "D factor",
"dt": "DT <small>in seconds</small>",
"noteMinMaxTemp": "<b>Important:</b> When using «Equitherm» and «PID» at the same time, the min and max temperatures limit the influence on the «Equitherm» result temperature.<br />Thus, if the min temperature is set to -15 and the max temperature is set to 15, then the final heat carrier setpoint will be from <code>equitherm_result - 15</code> to <code>equitherm_result + 15</code>."
"limits": {
"title": "Limits",
"note": "<b>Important:</b> When using «Equitherm» and «PID» at the same time, the min and max temperatures limit the influence on the «Equitherm» result temperature.<br />Thus, if the min temperature is set to -15 and the max temperature is set to 15, then the final heat carrier setpoint will be from <code>equitherm_result - 15</code> to <code>equitherm_result + 15</code>."
},
"deadband": {
"title": "Deadband",
"note": "Deadband is a range around the target temperature where PID regulation becomes less active. Within this range, the algorithm can reduce intensity or pause adjustments to avoid overreacting to small fluctuations.<br /><br />For instance, with a target temperature of 22°, a lower threshold of 1.0, and an upper threshold of 0.5, the deadband operates between 21° and 22.5°. If the I coefficient is 0.0005 and the I multiplier is 0.05, then within the deadband, the I coefficient becomes: <code>0.0005 * 0.05 = 0.000025</code>",
"p_multiplier": "Multiplier for P factor",
"i_multiplier": "Multiplier for I factor",
"d_multiplier": "Multiplier for D factor",
"thresholdHigh": "Threshold high",
"thresholdLow": "Threshold low"
}
},
"ot": {

View File

@@ -347,7 +347,19 @@
"i": "Fattore I",
"d": "Fattore D",
"dt": "DT <small>in secondi</small>",
"noteMinMaxTemp": "<b>Importante:</b> Quando usi «Equitherm» e «PID» allo stesso tempo, i limiti della temperatura min e max influenzano il risultato della temperatura «Equitherm».<br />Thus, se la temperatura minima è impostata a -15 e la massima a 15, il riscaldamento finale sarà impostato fra <code>equitherm_result - 15</code> a <code>equitherm_result + 15</code>."
"limits": {
"title": "Limiti",
"note": "<b>Importante:</b> Quando usi «Equitherm» e «PID» allo stesso tempo, i limiti della temperatura min e max influenzano il risultato della temperatura «Equitherm».<br />Thus, se la temperatura minima è impostata a -15 e la massima a 15, il riscaldamento finale sarà impostato fra <code>equitherm_result - 15</code> a <code>equitherm_result + 15</code>."
},
"deadband": {
"title": "Zona morta (Deadband)",
"note": "La zona morta è un intervallo intorno alla temperatura target in cui la regolazione PID diventa meno attiva. In questo intervallo, l'algoritmo può ridurre l'intensità o interrompere gli aggiustamenti per evitare di reagire eccessivamente a piccole fluttuazioni.<br /><br />Ad esempio, con una temperatura target di 22°, una soglia inferiore di 1.0 e una soglia superiore di 0.5, la zona morta opera tra 21° e 22.5°. Se il coefficiente I è 0.0005 e il moltiplicatore I è 0.05, allora nella zona morta, il coefficiente I diventa: <code>0.0005 * 0.05 = 0.000025</code>",
"p_multiplier": "Moltiplicatore P",
"i_multiplier": "Moltiplicatore I",
"d_multiplier": "Moltiplicatore D",
"thresholdHigh": "Soglia superiore",
"thresholdLow": "Soglia inferiore"
}
},
"ot": {

View File

@@ -347,7 +347,19 @@
"i": "Коэффициент I",
"d": "Коэффициент D",
"dt": "DT <small>(сек)</small>",
"noteMinMaxTemp": "<b>Важно:</b> При использовании «ПЗА» и «ПИД» одновременно, мин. и макс. температура ограничивает влияние на расчётную температуру «ПЗА».<br />Таким образом, если мин. температура задана как -15, а макс. как 15, то конечная температура теплоносителя будет от <code>equitherm_result - 15</code> до <code>equitherm_result + 15</code>."
"limits": {
"title": "Лимиты",
"note": "<b>Важно:</b> При использовании «ПЗА» и «ПИД» одновременно, мин. и макс. температура ограничивает влияние на расчётную температуру «ПЗА».<br />Таким образом, если мин. температура задана как -15, а макс. как 15, то конечная температура теплоносителя будет от <code>equitherm_result - 15</code> до <code>equitherm_result + 15</code>."
},
"deadband": {
"title": "Мертвая зона (Deadband)",
"note": "Deadband - это мёртвая зона вокруг целевой температуры, в которой PID-регулирование становится менее активным. В этом диапазоне алгоритм может снижать интенсивность или полностью прекращать корректировку температуры, чтобы избежать излишней чувствительности к небольшим колебаниям.<br /><br />Например, при целевой температуре 22°, нижнем пороге 1.0 и верхнем 0.5, deadband активен в диапазоне от 21° до 22.5°. Если коэфф. I=0.0005, а множитель I=0.05, то при включении мертвой зоны коэфф. I будет равен: <code>0.0005 * 0.05 = 0.000025</code>",
"p_multiplier": "Множитель для коэф. P",
"i_multiplier": "Множитель для коэф. I",
"d_multiplier": "Множитель для коэф. D",
"thresholdHigh": "Верхний порог",
"thresholdLow": "Нижний порог"
}
},
"ot": {

View File

@@ -313,19 +313,71 @@
<hr />
<div class="grid">
<label>
<span data-i18n>settings.temp.min</span>
<input type="number" inputmode="decimal" name="pid[minTemp]" min="0" max="0" step="1" required>
</label>
<details>
<summary><b data-i18n>settings.pid.limits.title</b></summary>
<label>
<span data-i18n>settings.temp.max</span>
<input type="number" inputmode="numeric" name="pid[maxTemp]" min="0" max="0" step="1" required>
</label>
</div>
<div>
<div class="grid">
<label>
<span data-i18n>settings.temp.min</span>
<input type="number" inputmode="decimal" name="pid[minTemp]" min="0" max="0" step="1" required>
</label>
<label>
<span data-i18n>settings.temp.max</span>
<input type="number" inputmode="numeric" name="pid[maxTemp]" min="0" max="0" step="1" required>
</label>
</div>
<small data-i18n>settings.pid.noteMinMaxTemp</small>
<small data-i18n>settings.pid.limits.note</small>
</div>
</details>
<hr />
<details>
<summary><b data-i18n>settings.pid.deadband.title</b></summary>
<div>
<fieldset>
<label>
<input type="checkbox" name="pid[deadband][enabled]" value="true">
<span data-i18n>settings.enable</span>
</label>
</fieldset>
<div class="grid">
<label>
<span data-i18n>settings.pid.deadband.p_multiplier</span>
<input type="number" inputmode="decimal" name="pid[deadband][p_multiplier]" min="0" max="5" step="0.001" required>
</label>
<label>
<span data-i18n>settings.pid.deadband.i_multiplier</span>
<input type="number" inputmode="decimal" name="pid[deadband][i_multiplier]" min="0" max="1" step="0.001" required>
</label>
<label>
<span data-i18n>settings.pid.deadband.d_multiplier</span>
<input type="number" inputmode="decimal" name="pid[deadband][d_multiplier]" min="0" max="1" step="0.001" required>
</label>
</div>
<div class="grid">
<label>
<span data-i18n>settings.pid.deadband.thresholdHigh</span>
<input type="number" inputmode="decimal" name="pid[deadband][thresholdHigh]" min="0" max="5" step="0.01" required>
</label>
<label>
<span data-i18n>settings.pid.deadband.thresholdLow</span>
<input type="number" inputmode="decimal" name="pid[deadband][thresholdLow]" min="0" max="5" step="0.01" required>
</label>
</div>
<small data-i18n>settings.pid.deadband.note</small>
</div>
</details>
<button type="submit" data-i18n>button.save</button>
</form>
@@ -823,6 +875,12 @@
"min": (data.system.unitSystem == 0 ? 0 : 33),
"max": (data.system.unitSystem == 0 ? 100 : 212)
});
setCheckboxValue("[name='pid[deadband][enabled]']", data.pid.deadband.enabled);
setInputValue("[name='pid[deadband][p_multiplier]']", data.pid.deadband.p_multiplier);
setInputValue("[name='pid[deadband][i_multiplier]']", data.pid.deadband.i_multiplier);
setInputValue("[name='pid[deadband][d_multiplier]']", data.pid.deadband.d_multiplier);
setInputValue("[name='pid[deadband][thresholdHigh]']", data.pid.deadband.thresholdHigh);
setInputValue("[name='pid[deadband][thresholdLow]']", data.pid.deadband.thresholdLow);
setBusy('#pid-settings-busy', '#pid-settings', false);
};