[Настройка] Контроллеры отопления SmartWebX - ModBusTCP

Описание настройки чего либо

Модераторы: immortal, newz20

Ответить
Erik
Сообщения: 23
Зарегистрирован: Чт янв 03, 2019 7:42 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

[Настройка] Контроллеры отопления SmartWebX - ModBusTCP

Сообщение Erik » Ср янв 30, 2019 9:56 am

Взаимодействие с контроллером SmartWeb по протоколу ModBus из сервера умного дома «MajorDoMo».

С контроллерами SmartWeb можно познакомиться здесь - http://smartweb.teplomonitor.ru/#!/ru#%2Fru
Между собой они общаются по CAN-шине, с внешним миром - по протоколу ModBus-TCP

Настройка MJD. Необходимо:

1. Создать классы объектов для «Программ» контроллера SWX, со свойствами, соответствующими параметрам этих программ.
2. Создать «объекты SWX» - описания программ SWX в сервере MJD.
3. Установить дополнение ModBus-TCP
4. Создать «устройства ModBus» - Операции чтения или записи регистров ModBus на контроллере SWX, с привязкой этих операций (устройств) к свойствам созданных ранее «объектов SWX» в сервере MJD. После чего взаимодействие MJD с SWX начинает функционировать.
5. Создать методы для операций со свойствами «объектов SWX» - операции, позволяющие что-нибудь делать с получаемыми или отправляемыми данными на SWX.
6. Создать элементы отображения для свойств «объектов SWX» в интерфейсе MJD для визуализации достигнутого результата.
Приступим по порядку.

1. Создаем классы объектов для «Программ» контроллера SWX, со свойствами, соответствующими параметрам этих программ.
В MJD имеются встроенные классы объектов, которыми можно было бы и воспользоваться, но у них все равно нет нужного набора свойств, и эти классы могут однажды обновиться (при скачивании планового обновления), и всегда есть вероятность, что нововведения, добавленные обновлением не примут во внимание наличие и потребности сделанных вами добавлений. Поэтому рекомендую создать свои классы и объекты, которые никто кроме вас обновлять никогда не возьмется.

Происходит это действо в меню «объекты» панели управления MJD.
Изображение

При создании классов и свойств руководствуемся правилом, что наименования даем латиницей, и описания и коментарии можно делать кириллицей по-русски.
Меню добавления класса очень простое
Изображение

Сначала создаем свой «родительский класс», я назвал его «SSmartWeb». Для него поле «Родительский класс» оставляем пустым ( -no- )
Остальные классы создаем внутри нашего родительского класса, указывая в сроке «Родительский класс» ««SSmartWeb».
Я создал классы для программ:
- Котел
- Каскад
- Прямой контур
- Смесительный контур
- Улица
- Комната
- Термостат.

Вот так выглядит результат
Изображение


Остальные программы я не заводил, т.к. их не использую, но вы можете добавить их легко по собственной потребности.

Далее, приступаем к свойствам классов. Это наборы параметров, которые будут у каждого объекта, соответствующего созданному вами классу.

Перечень доступных свойств для каждой программы доступен по ссылке http://адрес.вашего.смартвеб/~sm/modbussw.html

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

Если напротив созданного вами класса нажать иконку «свойства»,
Изображение
А далее кнопку «Добавить новое свойство», попадаем в меню добавления свойства.
Изображение

Наименование рекомендуется писать латиницей.
Описание – на любом понятном языке. Желательно не делать его излишне длинным, т.к. при дальнейшей работе в различных меню выбора наименования присутствуют вместе с описанием, и лаконичное, понятное но короткое и укладывающееся в одну строку описание облегчит восприятие и сократит возможные ошибки в настройках взаимосвязей.
«запускать метод при изменении» - очень важное свойство, в последствии нужно добавить методы, описывающие операции в данными при изменении значения поля. Например, температура в SWX хранится числом в дестых градуса 10 раз большем, чем температура в градусах (если температура 22, то в контроллере написано 220). Чтобы визуализировать температуру в градусах, и видеть 22, можно запустить метод, делящий значение поля на 10, и сохраняющий результат в другое поле. Соответственно, у меня созданы поля для отображения значений. Где это требуется.

Вот использованные мной свойства по классам
SWBoiler Программа КотелПоказать
Название Описание
CN Циркуляционный насос
Name Заголовок программы
Stup1 Ступень 1
Temp Температура
TimeR Время работы
TMax Максимальная температура котла
TMaxD Отображаемая максимальная температура котла
TMin Минимальная температура котла
TMinD отображаемая минимальная температура котла
Ustavka Температура уставки
UstavkaD Отображение температуры уставки
SWCascade Программа КаскадПоказать
Название Описание
TempObr Температура обратки
TempObrD Отображение температуры обратки
TempPod Температура подачи
TempPodD Отображение температуры подачи
Ustavka Температура уставки
UstavkaD Отображение температуры уставки
SWDirectCircuit Программа прямой контурПоказать
Название Описание
NasosStatus Статус циркуляционного насоса
TDat Температура датчика потока
TDatD Отображаемая Температура датчика потока
TTreb Температура уставки
TTrebD Отображаемая Температура уставки
SWMixingCircuit Программа Смесительный контурПоказать
Название Описание
NasosStatus Цирк. насос
SmesitelProc Смес. Аналог % открытия
SmesitelProcD Отображаемый % открытия Смес. Аналог
TKoll Т коллектора
TKollD Отображаемая Т коллектора
TPMax Макс. Т под
TPMaxD Отображаемая Макс. Т под
TPMin Мин. Т под
TPMinD Отображаемая Мин. Т под
TPotoka T датчика потока
TPotokaD Отображаемая T датчика потока
TRas Расчетная T потока
TRasD Отображаемая Расчетная T потока
SWOutside Программа УлицаПоказать
Название Описание
THand Ручная установка уличной температуры
TUl Температура датчика улицы
TUlD Отображаемая Температура датчика улицы
SWRooms Программа КомнатаПоказать
Название Описание
KlapTP Клапан ТП
Rezim Режим отопления
TComf Уставка температуры комфортного режима
TComfD Отображение Уставки температуры комфортного режима
TDat Температура датчика комнаты
TDatD Отображение Температуры датчика комнаты
TEco Уставка температуры экономичного режима
TEcoD Отображение Уставки температуры экономичного режима
TOff Уставка температуры режима отсутствия
TOffD Отображение Уставки температуры режима отсутствия
TPDat Температура датчика пола
TPDatD Отображение Температуры датчика пола
TPMax Максимальная температура пола
TPMaxD Отображение Максимальной температура пола
TPMin Минимальная температура пола
TPMinD Отображение Минимальной температура пола
TPolComf Температура пола комфортного режима (хамам)
TPolComfD Отображаемая Т пола комфортного режима (хамам)
TPolEco Температура пола экономичного режима (хамам)
TPolEcoD Отображаемая Т пола экономичного режима (хамам)
TPolTR Требуемая Т пола (хамам)
TPolTRD Отображаемая требуемая Т пола (хамам)
TStenComf Т стены комфортного режима (хамам)
TStenComfD Отображаемая Т стены комфортного режима (хамам)
TStenEco Т стены экономичного режима (хамам)
TStenEcoD Отображаемая Т стены экономичного режима (хамам)
TStenTR Т стены требуемая (хамам)
TStenTRD Отображаемая требуемая Т стены (хамам)
TTreb Требуемая температура комнаты
TTrebD Отображение Требуемой температура комнаты
SWTermostat Программа ТермостатПоказать
Название Описание
StatTerm Состояние выхода термостата
Temp фактическая Т
TempD Отображаемая фактическая Т
TNagr Т нагревателя
TNagrD Отображаемая Т нагревателя
TTreb Требуемая Т
TTrebD Отображаемая требуемая Т

К указанным свойствам нужно добавить методы.

Я использовал следующие методы:

- увеличить значение на 1 (для операций в интерфейсе MJD, например увеличения требуемой температуры)
- уменьшить значение на 1
- разделить значение на 10 (для корректного отображения температуры, считанной из SWX)
- умножить значение на 10 (для записи температуры в SWX из поля MJD)
-разделить значение на 2,55 (для отображения процентных значений. SWX хранит их в виде числа в диапазоне от 0 до 255. 0 – это 0%, 255 – это 100%)
- установить значение равным ХХ. (для создания наборов уставок, у меня для резервного электрокотла)

Методы добавлял для класса, чтобы каждый созданный в этом классе объект унаследовал от класса и свойства и методы.

Методы создавал блочным способом. Он достаточно нагляден, интуитивно понятен, и не требует навыков программирования

Нажимает в перечне класов правее класса иконку методы, и жмем кнопку «добавить метод».
Изображение

Тут все просто, название латиницей, описание, выбираем способ изнготовления кода – «Blockly», жмем «Редактировать».
Открывается новое окошко, в котором слева структурированный выбор блоков-функций. Блоки могут стыковаться один за други, или вставляться в поле другого блока. Они имеют разную форму, ошибиться очень трудно.

Для арифметических действий собираем такой «пазл»
Изображение

Название переменной (она объявляется только для этого метода), название свойства, число – вводятся вручную.
Арифметическое действие выбирается из списка.

Для действий типа «установить значение равным ХХ» Остается только нижний блок, где вместо переменной конкретное число.
Изображение

В этом примере устанавливается максимальная температура котла 85 градусов. Поскольку значение устанавливается в поле, из которого будет записан регистр в SWX, температура сразу указана в нужном формате – 850.

После создания методов, нужно не забыть прописать из в соответствующее поле нужным свойствам классов («запускать метод при изменении»).
Принцип, который использовал я, следующий.
Я сохранял «направление».
Если данные считываются, то поле, в которое попадает значение из SWX при изменении запускает метод, присваивающий значение полю, которое отображается в интерфейсе.

Если данные записываются на контроллер, то поле, которое отображается в интерфейсе, при изменении запускает метод, присваивающий значение полю, из которого происходит запись регистра SWX

После подготовки всех нужных классов, свойств и методов, необходимо в каждом классе SWX создать объекты по количеству программ, функционирующих на контроллере. Чтобы в MJD было такое же количество созданных объектов со свойствами, как в SWX программ с параметрами.

Весь результат работы можно экспортировать.
Если кому интересно, файлик с моими результатами здесь – SWTermostat.txt

Следующий шаг – добавление модуля ModBus, и настройка взаимодействия созданных в MJD объектов с контроллером SWX.

Модули устанавливаются панели управления, меню система – маркет дополнений.
Модуль ModBus находится в разделе «Оборудование».
Добавляется простым нажатием на кнопку «Добавить». После чего эта кнопка превращается в две – «обновить» и «удалить».
Изображение
Изображение

После добавление в меню панели управления «Устройства» появляется раздел ModBus.

Добавляем 2 вида записей. Которые отличаюся только типом операции.
Одни записи будут записывать значения в контроллер, другие – их считывать.

Пример для записи значения в SWX
Изображение

Название – уникальное латиницей.
Хост и порт – IP адрес и порт вашего SWX.
ID устройства – уникальный номер для SWX. Если их несколько – используйте разные.
Тип запроса – FC6 Write single register (запись одного регистра, подходит для записи поля, состоящего из 1 элемента)
Стартовый адрес – УМЕНЬШЕННЫЙ НА 4001 адрес ModBus нужного вам параметра SWX из списка по адресу http://адресSWX/~sm/modbussw.html. Например, если SWX указывает адрес 44174, в это поле нужно внести 4173.
Количество элементов – везде 1, кроме полей, которые в SWX помечены «>2»
Преобразование данных – None (для записи преобразование не требуется)
Проверять каждые (sec) – Здесь нужно поставить очень большое значение. Сопоставимое с годом (50 000 000 сек). Потому, что при изменении запись произойдет сразу, по факту изменения. А повторять перезапись периодически надобности нет.
Связанный объект – выбираем объект, соответствующий программе SWX, к которой относится данный параметр.
Связанное свойство – свойство объекта, соответствующее параметру.

При считывании разница только в следующих полях

Тип запроса – FC3 Read holding registers
Преобразование данных – DINT to integer
Проверять каждые (sec) – нужно поставить значение, раз в сколько секунд считывать данные. В зависимости от динамичности процесса от 1 секунды (например на подаче котла) до 60 секунд (например на датчике температуры комнаты)


После добавления записей проверить работу цикла ModBus в панели управления – система – X-Ray, раздел Services, строчка «cycle_modbus». В столбце «LIVE» напротив нее надпись должна быть зеленой Если ее нет, или она другого цвета – запустите или перезапустите цикл модбас соответствующей кнопкой в этой табличке.

Все. Далее визуализируем результат в интерфейсе, и пользуемся.

Из замеченных мной недостатков, модбас в мажордом работает немного не так, как указывают в рекомендациях производители SWX, а именно, он открывает и закрывает TCP соединение на каждую операцию.
Из-за этого периодически возникают ошибки, и иногда останавливается цикл модбас, что приводит к относительной неактуальности информации, отображаемой на экране. Надеюсь, что у разработчиков модуля найдется время для его корректировки.
А пока есть необходимость присматривать за системой, заглядывая в X-Ray на статус цикла модбас.
Но это не помешает вашим родным и близким пользоваться удобными интерфейсами на своих смартфонах для управления отоплением (и не только, если вы подключите MJD к другим системам) в вашем доме.
За это сообщение автора Erik поблагодарили (всего 4):
skysilver (Ср янв 30, 2019 10:25 am) • Igor.P (Ср янв 30, 2019 10:54 am) • newz20 (Пн фев 11, 2019 10:17 am) • directman66 (Пн фев 25, 2019 6:10 pm)
Рейтинг: 4.65%
Ответить