идея заключается в использовании
метода
концепция примерно такая
Код:
DIFF := T_PV - T_SP;
WRT_NET := DIFF * OUT * (1 - OUT);
ERROR := (DIFF * DIFF) / 2.0;
IF ERROR > 0.0000021 THEN
WEIGHT := WEIGHT - LEARN_RATING * WRT_NET;
END_IF;
OUT := WEIGHT + FREQ / 100;
где
T_PV - текущая температура
T_SP - уставка по температуре
OUT - выход, в диапазоне от 0.0 до 1.0, на физический аналоговый выход с соответствующим умножением
ERROR - нужно сравнивать с подходящим коэффициентом, 0.0000021 выбрано под мою установку
LEARN_RATING - скорость реакции, выбирают обычно между 0.5 до 0.01
FREQ - базовая частота в процентах
вот такая вот идея, сильно упрощенная чтоб не взорвать мозг
ЗЫ в эмуляции, перед стартом выставить T_PV и T_SP одинаковыми значениями, убедиться что WEIGHT не растет не уменьшается, изменить T_PV на некоторое значения, на скрине я убавил на один градус, в реальности любое изменение будет обрабатываться, поэтому это надо учитывать либо округлением либо периодичность запуска этого кода. Увидев что выход увеличивается сделать температуру выше значения уставки и убедится что выходное значение начнет уменьшаться