Опция для чтения ModBus RTU slave устройств.
Отправка готовых данных сразу в системы и сервисы
На конструкторе ESP8266 noOS управление через GET запрос на данный момент только на запись !!!
Конвертер требуется, если подключаемое устройство имеет интерфейс RS-485. В качестве конвертера может использоваться микросхема MAX485 или аналог. В Китае существуют в продаже готовые платы с этой микросхемой.
У ESP8266 подключение на UART gpio 1 и 3, RTS соответствует выводу 15 (доступна настройка в шестеренке).
Если вывод RTS не используется(если конвертер с автоопределением), то пишем в шестеренке номер 255.
Скорость с 11.08.24 настраивается в веб модуля. Ранее скорость была фиксирована на 9600.
В веб модуля требуется указать параметры для каждого ModBus устройства:
1 Включив опцию выбрав тип регистров: Read Input Registers(0x04) или Read Holding Registers(0x03)
2. Адрес устройства на шине ModBus
3. Стартовый адрес регистра
4. Количество регистров для считывания(каждый регистр - это 2 байта или 16 бит), если нужные регистры данных идут подряд. В противном случае придется читать как несколько устройств
5. Шаблон который задает формат ответа:
rX - задается количество регистров для переменной(внутри регистра старший байт первый, порядок регистров - первый регистр младший), например r2 (переменная из 2 регистров). Доступны варианты с другим порядком байт - e2 и g2 .
sX - пропуск регистров.
dX - указывает количество знаков, дополнительный необязательный параметр, если переменная имеет дробный вид, например d2 (2 знака после запятой): значение регистра 1234 дает число 12.34
mX - указывает, что число требуется умножить на 1- 10, 2-100 , 3-1000 и т.д.
i - указывает, что число имеет знак (например температура)
f - float переменная, подпараметры fa и fb в зависимости от порядка байт в устройстве. Дополнительно можно указать количество знаков после запятой, по умолчанию 2.
tX - указание типа значения, ток, напряжение, температура или прочее. Где Х - тип датчика, список кодов смотрим тут.
По мере тестирования опции с разным железом будут добавлены и другие варианты данных.
Шаблон переменных указывается через запятую, допустимо опускать число "1" в написании шаблона.
Примеры работы с шаблонами находятся внизу статьи.
Это дополнительная надстройка, включается в шестеренке установкой количества читаемых устройств в поле "Количество дискретных модулей". Опция доступна только на RTOS прошивках. Доступные регистры:
Discrete Inputs — однобитовый тип, доступен только для чтения (например чтение "сухих" контактов).
Coils — однобитовый тип, доступен для чтения и записи (например управление реле).
Чтение и управление входами назначается на карту GPIO модуля с номера 180(пока не меняется).
В веб настройках требуется указать адрес устройства и начальный регистр.
На данный момент чтение состояния возможно только в опциях , настраиваемых через селекторы(текстовые поля ввода номера) , а так же Intepreter. Отправка данных состояний на сервера пока не реализована.
Управление через GET запрос
Запись RAW данных http://[IP]/modbus&write=данные в hex строкой, crc считается автоматически, его передавать не требуется! В ответ на запрос должен прийти ответ в hex формате (у noOS нет ответа).
Запись регистра http://[IP]/modbus?addr=X?reg=Y&data=Z Где X- адрес устройства, Y - номер регистра. Z - значение.(не протестировано)
Запись метрики http://[IP]/modbus&dev=X&num=Y&data=Z Где X- номер устройства, Y - номер метрики. Z - значение, может быть дробное число. Поддерживается запись только у типа регистров Holding Registers. Поддерживается на данный момент только тип шаблона r.(Не протестировано)
Топик login/hostname/mbraw - запись raw данных hex строкой, crc считается автоматически, его передавать не требуется!
Топик login/hostname/mbregX/Y - запись регистра. Где X- адрес устройства, Y - номер регистра
Если тип регистра настроенных данных Holding Registers , то в его топик можно записать новое значение. Поддерживается на данный момент только тип шаблона r.
Слать данные hex строкой можно через функцию mbwrite(ххххх), crc считается автоматически, его передавать не требуется!
Для чтения Power Monitor PZEM-014, PZEM-016 и PZEM-004 требуется указать адрес устройства, по умолчанию 1.
PZEM-004 подключается напрямую к UART без преобразователя RS485
Начальный регистр(Start register) - 0
Количество регистров - 9
Шаблон ответа(mask) - r1d1,r2d3,r2d1,r2d3,r1d1,rd2, выдает по порядку: напряжение (1 регистр, 1 знак после запятой), ток (2 регистра, 3 знака после запятой), текущую мощность (2 регистра, 1 знак после запятой), потребленную энергию (2 регистра), частоту сети (1 регистр, 1 знак после запятой), фактор мощности (1 регистр, 2 знака после запятой).
Шаблон ответа с указанием типов метрик (поддержка с 27.04.2023) - r1d1t9,r2d3t10,r2d1t11,r2d3t12,r1d1t24,rd2
Тип регистров - Read Input Registers(0x04)
Поменять адрес устройства можно командой http://IP/modbus&write=010600020005, где 01 - адрес текущий, 05 - адрес новый.
Сброс счетчика киловатчасов http://IP/modbus&write=0142 , где 01 - адрес устройства.
PZEM-017 -Монитор постоянного тока !! Разновидность PZEM-0хх , требуется включение 2 stop bits в шестеренке опции.
Шаблон ответа(mask) -r1d2,r1d2,r2d1,r2
Тип регистров - Read Input Registers(0x04)
Адрес по умолчанию 1
Начальный регистр 0
Количество регистров 6
Для чтения Power Monitor Eastron SDM требуется указать адрес устройства, по умолчанию 1. А в настройках устройства требуется указать скорость 9600 !!!
Чтобы прочитать текущие показания напряжения, тока и активной мощности, надо настроить устройство 1 в настройках modbus.
Тип регистров - Read Input Registers(0x04)
Начальный регистр (Start register) - 0
Количество регистров (len)- 14
Шаблон ответа(mask) : fb,s4,fb,s4,fb (для 630 скорее всего fb,fb,fb,fb,fb,fb,fb,fb,fb)
Устройство имеет и другие параметры, они выводятся аналогично как отдельное устройство