Опция для чтения ModBus RTU slave устройств.
Отправка готовых данных сразу в системы и сервисы
На конструкторе ESP8266 управление через GET запрос на данный момент только на запись !!!
Конвертер требуется, если подключаемое устройство имеет интерфейс RS-485. В качестве конвертера может использоваться микросхема MAX485 или аналог. В Китае существуют в продаже готовые платы с этой микросхемой.
У ESP8266 подключение на UART gpio 1 и 3, RTS соответствует выводу 15 (доступна настройка в шестеренке).
Если вывод RTS не используется(если конвертер с автоопределением), то пишем в шестеренке номер 255.
На данный момент все подключаемые устройства должны быть настроены на скорость 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.
По мере тестирования опции с разным железом будут добавлены и другие варианты данных.
Шаблон переменных указывается через запятую, допустимо опускать число "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.
Для чтения Power Monitor PZEM-014, PZEM-016 и PZEM-004 требуется указать адрес устройства, по умолчанию 1.
PZEM-004 подключается напрямую к UART без преобразователя RS485
Начальный регистр(Start register) - 0
Количество регистров - 9
Шаблон ответа(mask) - r1d1,r2d3,r2d1,r2,r1d1,rd2, выдает по порядку: напряжение (1 регистр, 1 знак после запятой), ток (2 регистра, 3 знака после запятой), текущую мощность (2 регистра, 1 знак после запятой), потребленную энергию (2 регистра), частоту сети (1 регистр, 1 знак после запятой), фактор мощности (1 регистр, 2 знака после запятой).
Тип регистров - 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)
Устройство имеет и другие параметры, они выводятся аналогично как отдельное устройство