WBE2-I-OPENTHERM и зональное отопление

Добрый день, подскажите пожалуйста алгоритм для зонального управления, как в этом случае управлять шлюзом?

Например, есть несколько датчиков, при изменении Temperature с любого из них срабатывает правило и дальше выставляем среднее (или другую функцию) из них в регистр Room Temperature? Такую логику закладывал производитель?

Или опрашиваем все датчики раз минуту и делаем расчет, а дальше пишем в Room Temperature…

Добрый день.
Шлюз управляет котлом. То есть реализовать можно вообще произвольный алгоритм выставления как непосредственной температуры подачи так и “комнатной”, для использования PID самого котла.

Да вопрос-то в другом, вопрос в алгоритме, какой производитель заложил и как правильно реализовать зональность.

Ответ: по-разному, выглядит странно. Вы своим ответом не привнесли ничего нового, ответ ради ответа.

Суть зональности в том, что каждая зона на основе своего датчика температуры управляет своим актуатором - это такая автономная отопительная единица.
А вот в зависимости от того как у Вас реализована котловая обвязка при включении второго, третьего, четвертого…актуаторов зон нужно добавлять температуру на подаче котла. Соответственно, при выключении актуаторов нужно температуру на подаче убавлять.
Если рассмотреть примитивный случай, то в коде это будет как-то так:

loop = GetNumberLoop();
switch(loop) {
 case 0: temp = 40;
      	      break;
 case 1: temp = 42;
      	      break;
 case 2: temp = 44;
      	      break;
 case 3: temp = 46;
      	      break;
 case 4: temp = 48;
      	      break;
}

Если используется погодозависимая автоматика (эквитермальное регулирование или ПИД), то перед увеличением температуры на подаче котла необходимо рассчитывать ее целевое значение.

Да, детали важны. Предположим, есть система первично-вторичных контуров, каждый контур загружается своим насосом и далее коллектор распределяет теплоноситель по зонам. Запорная арматура располагается на самом коллекторе, допустим, сервоприводы. Эти сервоприводы подчиняются зональным датчикам температуры. Вроде как типовая конфигурация.
Получается, что объектами управления являются:

  1. котел
  2. насос контура
  3. сервопривод на коллекторе (актуатор)

Вот исходя из этого, буду строить свои рассуждения. На сколько я понимаю, из кода я могу только выставлять Room Temperature у шлюза, далее он сам управляет котлом, рассчитывает необходимую установку и управляет модуляцией, а какую выставить - считаю сам, например, как предложил @Alex_Jet. А как быть в случае ПЗА, логика сохраняется? Управление котлом сводится к установке Room Temperature?

Возможно, кто-то из группы @Nevoton подскажет как правильно организовать управление?

И вопрос по ПЗА, номер кривой через шаблон выставить нельзя?

Картинка начинает потихонечку проясняться… в документации указано:

Пользователь в любой момент времени можно изменять температуру котловой воды (параметр 0203): либо косвенно – через параметр задания уставки комнатной температуры (параметр 0205), либо напрямую – через параметр задания уставки температуры котловой воды. При работе с регистром 0203, для регистра 0205 должно быть установлено значение 0, и наоборот.

описание регистра:

CB 0203 rw С uint16 Температура подачи котловой воды (ЦО) желаемая (целевая, от 0 до 80°C)

вычитывается все хорошо, данные верные:

~ modbus_client --debug -mrtu -b19200 -pnone -s1 /dev/ttyMOD1 -a11 -t3 -r203  
Opening /dev/ttyMOD1 at 19200 bauds (N, 8, 1)
[0B][03][00][CB][00][01][F5][5E]
Waiting for a confirmation...
<0B><03><02><00><23><61><9C>
SUCCESS: read 1 of elements:
        Data: 0x0023 

но при попытке записи получаю ошибку:

~ modbus_client --debug -mrtu -b19200 -pnone -s1 /dev/ttyMOD1 -a11 -t5 -r203 0
Data to write: 0x0
Opening /dev/ttyMOD1 at 19200 bauds (N, 8, 1)
[0B][05][00][CB][00][00][BC][9E]
Waiting for a confirmation...
<0B><85><01><A3><52>
ERROR Illegal function
ERROR occured!

подскажите пожалуйста, почему такая реакция системы?

устройство


ну а началось все из-за этого, котел не разгоняется выше этой уставки:

Документация и шаблон v1.4, а сам шлюз v1.6, может что-то уже неактуально?

Да, действительно, объектов управления как минимум 3. И конечно важны тонкости - как все устроено. Очень существенно влияет наличие/отсутствие гидрострелки.

У меня в системе есть (немного упрощенно):

  1. Котел газовый (в резерве - электрический)
  2. 2 насоса контуров ТП
  3. 7 актуаторов на коллекторах ТП

Начну с того, что у меня НЕ WB, а используется только шлюз OpenTherm - ModBus. Пара слов о шлюзе - штука очень глючная, хотя я и добился от разработчиков более менее сносной ее работы с Baxi Luna Duo-Tec 1.24. Здесь на форуме по ней поднято много вопросов, которые разработчики не могут решить ссылаясь на нехватку памяти в микроконтроллере. Чего только стоит то, что каждый запрос контроллера шлюза к котлу скорее всего изнашивает память в котле… (на этот вопрос разработчики так и ничего не ответили).

Описание алгоритма работы системы:

  1. 7 актуаторов на коллекторах ТП и соответствующие им датчики температуры - это 7 независимых автономных отопительных единицы.
  2. Насос ТП включается только если включен хотя бы один актуатор на коллекторе, соответственно, выключается только когда все актуаторы отключены.
  3. Котел включается если включен хотя бы один насос контуров отопления, соответственно, выключается когда все насосы отключены.

Целевую температуру я отслеживаю на подаче гидрострелки, температура формируется на основе ПЗА (под свой дом сделал несколько кривых, по которым сервер рассчитывает целевую температуру). Соответственно, изменяя температуру на подаче котла я добиваюсь целевой температуры на подаче гидрострелки.

И да, в такой системе не вижу смысла работать с шлюзом по комнатной температуре - в этом режиме WB или другая система должны постоянно сообщать контроллеру шлюза комнатную температуру, однако если датчиков 14 то данные от какого из них ему сообщить?
Изменяю только температуру на подаче котла.

Было бы хорошо использовать ПЗА шлюза (намного больше автономности), однако разработчики отказались реализовать считывание уличной температуры с котла (при подключенном датчике к нему), используя ее для расчета температуры на подаче котла.

Вот что-то трех объектов я не нашел, а те что есть не работают =( Либо я делаю что-то неправильно. 0203 - только чтение, хотя в документации он rw, 0205 - запись идет успешно, но для системы в целом толку немного.

Первично-вторичные контура как бы намекают про гидравлический разделитель, aka гидрострелка, конечно она присутствует в системе.

Я пришел к такой же схеме, ввел абстракцию “запрос тепла”. Каждая зона имеет свои теплопотери, они мне известны, как только датчик фиксирует отклонение от заданной температуры - происходит “запрос тепла”, он суммируется по всем зонам и дальше я выставляю 0205. Значение подбирать придется, сейчас пока просто абстрактны единицы, буду подбирать и попробую увязать с ПЗА.

Хорошая идея, спасибо, это действительно лучше чем выставлять room temperature, как-то логичнее. Вот только запись в 0203 не происходит у меня =(

В шаблоне есть этот параметр, не знаю на сколько он отражает действительность, я пока внешний датчик не подцепил к котлу.
Я сравнил шаблон с сайта Невотон и тем что есть в контроллере (/usr/share/wb-mqtt-serial/templates/config-wbe2-i-opentherm-fw1.4.json) - разница некритичная, только именования.

Diff

Не понимаю о каких вы объектах. Opentherm шлюз - это по сути управлялка котлом и не более того. Все объекты вы должны создать сами с помощью тех или иных аппаратно-программных средств.
По регистру 0203 внимательно читайте инструкцию:

Пользователь в любой момент времени можно изменять температуру котловой воды (параметр
0203): либо косвенно – через параметр задания уставки комнатной температуры (параметр
0205), либо напрямую – через параметр задания уставки температуры котловой воды. При работе с
регистром 0203, для регистра 0205 должно быть установлено значение 0, и наоборот.

Не факт. Многие сантехники не устанавливают гидрострелку поскольку дорого и система работает не так как запланировано. Без гидрострелки T подачи котла = T подачи во все контуры, а с ней все не предсказуемо))

На сколько знаю - ПЗА работает так же как и в случае с “комнатная температура” - в регистр 0208 (Температура комнатная или уличная, в зависимости от значения параметра 0207) пишется значение датчика. А в остальном - ни с чем не разбирался, поскольку не имею ни одного компонента WB, а СУ - intraHouse.

Неточно выразился, имел в виду регистры управления. их всего два.

Документацию прочитал, вот мои действия, чяднт?

Сейчас ПЗА не используется, в настройках выставлен датчик как “внутренний” (0207 = 0).

Бесплатный совет: сразу планируйте запасной план, как управлять системой отопления, если контроллер WB или шлюз Opentherm выйдут из строя.

2 лайка

В регистр 0205 (уставка комнатной температуры) запишите 0.

Тупо методом перебора нашел ошибку в команде - (0x06) WriteSingle Register. Теперь осталось понять как выставлять этот регистр через топик MQTT.

1 лайк

В итоге все оказалось просто, все есть в шаблоне, просто надо было внимательно посмотреть. Выбирается необходимый режим и все… =)

Хорошая статья с примером расчета температуры котловой воды.

Записываете в holding регистр командой 0x05 вместо 0x06.

Да. Так я про это и писал сразу же:

Да-да, я выше уже все написал, и про свою ошибку в номере команды и про выбор режима отопления в настройках. И даже ссылки на алгоритм привел =)
Хорошо что вы реагируете, спасибо, но ваш первый ответ никак не наводит на раздел конфигурации, что я привел в итоге.

1 лайк