В предыдущей статье я рассказывал о том, как организовать взаимодействие контроллера Wiren Board 6 (WB6) с отопительным котлом при помощи универсального шлюза OpenTherm-Modbus.
Сейчас рассмотрим реализацию погодозависимого управления отоплением в доме на контроллере WB6. При погодозависимом управлении в отопительной системе дома поддерживается температура теплоносителя, пропорциональная разнице комфортной температуры в доме и температуры на улице. Для определения требуемой в настоящий момент температуры теплоносителя, используются так называемые отопительные или эквитермические кривые, представленные в табличной форме, либо в виде аппроксимирующей функции. Об этих кривых много написано на просторах сети.
Чем лучше утеплен дом, тем меньше его теплопотери и тем более пологой будет для этого дома отопительная кривая. Отопительные кривые рассчитаны для температуры в помещении 20°C. Если в помещении требуется иная температура, то кривая сдвигается вверх или вниз на определенную величину. Чем ниже температура теплоносителя, запрашиваемая от котла, тем меньше расход топлива. Значит, если при потеплении на улице котел будет подавать в отопительную систему менее горячий теплоноситель, то при сохранении комфорта в доме мы получим экономию топлива.
Котлы с интерфейсом управления OpenTherm, как правило, имеют возможность изменять мощность горелки в пределах от 20% до 100%. И это их свойство очень полезно для реализации погодозависимого управления. Вместо работы в режиме тактирования (вкл/выкл) котел плавно понижает мощность горелки для уменьшения температуры теплоносителя. При этом мы наблюдаем выдаваемую горелкой мощность в процентах в канале Modulation шлюза. Еще одним плюсом работы котла в режиме модуляции горелки является увеличение ресурса самого котла.
Исходные данные
В доме установлен газовый котел и в помещениях установлены радиаторы отопления. Применена коллекторная разводка радиаторов, встроенный в котел циркуляционный насос обеспечивает циркуляцию теплоносителя в системе.
Снаружи дома в правильном месте (на северной стороне) установлен датчик температуры воздуха. Данные с датчика наружной температуры должны быть доступны в WB6. Вплоть до того, что это могут быть данные с виртуального устройства или данные от внешней погодной станции. Для оперативного управления отоплением воспользуемся пультом управления ПУ-3, с которым нас познакомил в своей статье Александр Попов (@Popov_Alexander).
Реализация
После подключения универсального шлюза в предыдущей статье в интерфейсе WB6 имеется информация о состоянии котла. На WB6 создаем виртуальное устройство Thermo_Regulator. Для этого в WEB-интерфейсе WB6 заходим в меню Scripts и создаем новый скрипт Thermo_Reg.js
Жмем «Сохранить» вверху окна редактирования. В закладке Devices увидим новое устройство. С помощью этого устройства мы можем управлять работой отопления.
В поле OutsideTemp отображается температура на улице с внешнего датчика. Ползунком RoomTempSetpoint устанавливаем желаемую температуру в помещениях дома. Ползунком K устанавливаем коэффициент отопительной кривой. Этот коэффициент зависит от характеристик дома, в основном, от теплопроводности стен. Он подбирается опытным путем один раз и в дальнейшем его менять нет необходимости. Выключатель enabled позволяет выбрать автоматический (on) или ручной (off) режим задания целевой температуры теплоносителя для котла. В автоматическом режиме вычисленное значение целевой температуры отображается положением ползунка Setpoint. В ручном режиме можно самостоятельно задать для котла требуемое значение целевой температуры теплоносителя, передвинув ползунок.
Расчет температуры теплоносителя, в зависимости от температуры на улице, можно реализовать на WB6 средствами правил wb-rules, но я выбрал альтернативный вариант – средствами node-red на этом же WB6 создал flow «Погодозависимый регулятор». Это стало возможным благодаря наличию в репозитории специализированной ноды node-red-contrib-wirenboard автора Andrej_Popov.
С помощью этих нод из WB6 считываются значения коэффициента температурной кривой K, величина желаемой температуры в помещении, текущая уставка целевой температуры котла, температура на улице и состояние виртуального переключателя управления «Авто/Ручное» и все эти данные записываются в соответствующие переменные flow. Каждые 300 секунд, то есть раз в 5 минут, функция «Вычисление температуры подачи по кривой» производит вычисление целевой температуры для котла по формуле, найденной в статье. Если переключатель стоит в положении «Автоматическое управление» ( enabled = 1), то вычисленное значение температуры записывается в канал Setpoint виртуального устройства thermo_reg. Если переключатель в положении «Ручное управление» ( enabled = 0), то в канале Setpoint остается значение, заданное ползунком вручную. Текущее значение температуры теплоносителя в котле индицируется на настенном пульте ПУ-3 на месте дополнительной температуры. Значение уставки желаемой температуры в помещении отправляется с ПУ-3 в канал RoomTempSetpoint виртуального устройства thermo_reg.
Данный пример еще далек от совершенства, хотя и выполняет основные функции. Его следует рассматривать, как Application Notes – пример применения или отправную точку для тех, кто хочет оценить возможность тех или иных технических решений. Здесь можно добавить автоматическое понижение температуры в помещениях при отсутствии в доме людей, и восстановление комфортной температуры заблаговременно перед приездом обитателей дома. Можно менять температуру в помещении в зависимости от времени суток. Возможность такая есть. Её надо только реализовать в Вашем проекте по Вашим потребностям. Но это еще не все возможности, которые можно получить от связки WB6 и универсального шлюза OpenTherm-Modbus. И об этом – в следующий раз.
Во фрагменте кода №89 flow «Погодозависимый регулятор» у функции "Вычисление температуры подачи по кривой", нужно исправить (Setpoint & gt; 80) на (Setpoint > 80)
Вычисление температуры подачи по кривой" (строка 9) именно так и написано:
if (Setpoint > 80) {
Setpoint = 80
}
Если вычисленное значение целевой температуры превышает +80 градусов, то ограничить целевую температуру значением +80 градусов.
Константин, я не про арифметическую ошибку в коде, там все верно. При копировании фрагмента кода №89 и сразу импортировать его во flow, у меня в функции появляется ошибка т.к. знак
> в сравнении if кода на сайте заменился на
& gt; Точно так же произошла замена и во фрагменте кода №91.
При проверке я тоже скопировал фрагмент с сайта, импортировал его во flow в оболочке node-red на своем тестовом компьютере и получил
if (Setpoint > 80) {
Setpoint = 80
}
Странно...
Вот что я вижу со своего компьютера в репозитории на сайте sprut.ai:
https://sprut.ai/static/media/cache/00/49/25/5/4115107/60629/1000x_image.jpg?1592214980" alt="1000x_image.jpg?1592214980" />Браузер FireFox
Тем не менее, спасибо Вам за внимательное прочтение статьи.
Желаю Вам успеха в достижении поставленных целей!
Значит это у меня google chrome так замену делает. Если кто столкнется, комментарии в помощь.
За все Ваши статьи, спасибо!
У меня при импорте тоже пришло gt.
Спасибо
https://github.com/kvbr156/Weather-dependent-regulator/tree/main
Пользуйтесь, но имейте в виду, что это примеры применения, а не законченный продукт.