ГидроТерм - автоматика систем отопления 
Автоматика
Контроллеры
Приводы
Модели
Конструктор
Интерфейс E8
Микроавтоматика
Каталог
Примеры схем
ГидроЛОГО!
Подбор коллекторов
Видео
Инструкции PDF
Контакты
Форум

SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
Взаимодействие с контроллером SmartWeb по протоколу ModBus из сервера умного дома «MajorDoMo».

Сервер умного дома «MajorDoMo» - бесплатное и открытое программное обеспечение, поддерживающее значительный список оборудования и протоколов взаимодействия, в том числе протокола ModBus-TCP, по которому возможно взаимодействие с контроллерами SmartWebX. Сайт MajorDoMo - [mjdm.ru]

Описывать установку сервера и его первичную настройку не буду, это хорошо сделано на форуме MajorDoMo. Начнем сразу с настройки взаимодействия MJD – SWX.

Для этого необходимо

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 имеются встроенные классы объектов, которыми можно было бы и воспользоваться, но у них все равно нет нужного набора свойств, и эти классы могут однажды обновиться (при скачивании планового обновления), и всегда есть вероятность, что нововведения, добавленные обновлением не примут во внимание наличие и потребности сделанных вами добавлений. Поэтому рекомендую создать свои классы и объекты, которые никто кроме вас обновлять никогда не возьмется.
Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
Происходит это действо в меню «объекты» панели управления MJD.


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


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

Вот так выглядит результат
Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
Остальные программы я не заводил, т.к. их не использую, но вы можете добавить их легко по собственной потребности.

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

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

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

Если напротив созданного вами класса нажать иконку «свойства»,

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



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

Вот использованные мной свойства по классам
Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
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	Отображаемая требуемая Т

Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
К указанным свойствам нужно добавить методы.

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

- увеличить значение на 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
Вложения:
открыть | скачать - SWTermostat.txt (42 KB)
Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
Следующий шаг – добавление модуля ModBus, и настройка взаимодействия созданных в MJD объектов с контроллером SWX.

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



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


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

Пример для записи значения в SWX
Re: SmatrWebX - MobBusTCP - MajorDoMo
29 January 2019 16:04
Название – уникальное латиницей.
Хост и порт – 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» напротив нее надпись должна быть зеленой Если ее нет, или она другог цвера – запустите или перезапустите цикл модбас соответствующей кнопкой в этой табличке.

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

1. Интерфейс для телефона

2. Интерфейс для планшета или ПК.


Из замеченных мной недостатков, модбас в мажордом работает немного не так, как указывают в рекомендациях производители SWX, а именно, он открывает и закрывает TCP соединение на каждую операцию.
Из-за этого периодически возникают ошибки, и иногда останавливается цикл модбас, что приводит к относительной неактуальности информации, отображаемой на экране. Надеюсь, что у разработчиков модуля найдется время для его корректировки.
А пока есть необходимость присматривать за системой, заглядывая в X-Ray на статус цикла модбас.
Но это не помешает вашим родным и близким пользоваться удобными интерфейсами на своих смартфонах для управления отоплением (и не только, если вы подключите MJD к другим системам) в вашем доме.

Всего хорошего. Эрик Утяшев.
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме