Modbus: различия между версиями

1597 байт добавлено ,  3 года назад
Нет описания правки
Строка 77: Строка 77:
Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (для хранения настроек). В настоящее время во многих устройствах, в частности в устройствах Wiren Board, эти регистры не разделяются. Команды на чтение регистра хранения N и регистра ввода N обратятся к одному и тому же значению в адресном пространстве устройства.
Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (для хранения настроек). В настоящее время во многих устройствах, в частности в устройствах Wiren Board, эти регистры не разделяются. Команды на чтение регистра хранения N и регистра ввода N обратятся к одному и тому же значению в адресном пространстве устройства.


===Адреса и номера регистров=== <!--T:21-->
=== Адреса регистров ===
Регистры в стандарте Modbus адресуются с помощью 16-битных адресов. Адресация начинается с нуля. Адрес регистра, таким образом, может принимать значения от 0 до 65535.


<!--T:22-->
Адресные пространства регистров, также называемые таблицами иди блоками, могут быть различны для всех четырёх типов регистров. Это значит, что значения регистров с одинаковым адресом, но разным типом, в общем случае разные.
В стандарте Modbus для каждого из четырех типов регистров используются разные таблицы с номерами 0,1,3,4. Таким образом, регистр определенного типа с определенным номером (иначе его называют физическим адресом) имеет свой адрес в соответствующей таблице.  
 
Например, при чтении регистра флагов (coil) номер 42, регистра дискретного входа (Discrete), регистров ввода и хранения (Input и Holding) с теми же адресами, можно получить четыре разных значения.
 
==== Нестандартная адресация ====
В документации на некоторые, особенно старые, устройства адреса элементов (регистров) указываются в формате, не соответсвующем стандарту. В этом формате тип элемента кодируется первой цифрой адреса, а адресация начинается не с нуля.  
 
Например, регистр хранения с адресом 0 может записываться как 40001 или 400001, а Coil с адресом 0 как 000001.
 
В таблица перевода адресов в стандартный формат показаны диапазоны для двух разных нестандартных типов указания адресов и соответствующие им типы данных и диапазоны стандартных адресов.


<!--T:23-->
{|class="wikitable" align="center"
{|class="wikitable" align="center"
! Таблица || Номер таблицы || Начальный логический адрес || Номер регистра (физический адрес) || Диапазон логических адресов
! Тип данных || Стандартные адреса || Стандартные адреса (hex) || Нестандартные адреса (5 цифр) || Нестандартные адреса (6 цифр)
|-
|-
! Регистры флагов (Coils)
! Флагов (Coils)
| 0 || 000001 || 0 || 000001 — 065535
| 0-65535 || 0x0000 - 0xFFFF || 00001 - 09999 || 000001 - 065536
|-
|-
! Дискретные входы (Discrete Inputs)
! Дискретных входов (Discrete)
| 1 || 100001 || 0 || 100001 — 165535
| 0-65535 || 0x0000 - 0xFFFF || 10001 - 19999 || 100001 - 165536
|-
! Регистры входов (Input Registers)
| 0-65535 || 0x0000 - 0xFFFF || 30001 - 39999 || 300001 - 365536
|-
|-
! Регистры хранения (Holding Registers)
! Регистры хранения (Holding Registers)
| 3 || 300001 || 0 || 300001 — 365535
| 0-65535 || 0x0000 - 0xFFFF || 40001 - 49999 || 400001 - 465536
|-
! Регистры ввода (Input Registers)
| 4 || 400001 || 0 || 400001 — 465535
|}
|}


<!--T:24-->
Признаки использования нестандартной адресации:
Это вносит некоторую путаницу в понимание, по какому же адресу обратиться к регистру с нужным номером. Более того, понятия "адрес" и "регистр" могут применяться производителем произвольно. Чаще всего указываются номера регистров, как, например для устройств Wiren Board. В некоторых устройствах применяются более короткие логические адреса (.0001 — .9999), и для адреса используется 5, а не 6 цифр.
* Адреса записываются в десятичном формате
 
* Во всех адресах пять или шесть цифр
<!--T:25-->
* Адреса с не-дискретными данными (показния датчиков и т.п.) начинаются на 30 или 40
Иногда в описаниях устройства указываются только логические адреса. Например, coil-регистр 0 имеет адрес 000001, регистр ввода 4 — 400005 и т.д.


Часто рядом с нестандартными адресами указываются и адреса соответствующие стандарту, обычно в шестнадцатеричном формате.
Стоит отметить, что физически в пакете данных передаются адреса в стандартном формате, независимо от способа представления их в документации.


==== Пример описания регистров в документации ====
<!--T:26-->
<!--T:26-->
В готовых шаблонах устройств контроллера Wiren Board 5 есть шаблон для однофазного счетчика электроэнергии SDM220 (/usr/share/wb-mqtt-serial/templates/config-sdm220.json). В документации от производителя "Eastron SDM
В готовых шаблонах устройств контроллера Wiren Board 5 есть шаблон для однофазного счетчика электроэнергии SDM220 (/usr/share/wb-mqtt-serial/templates/config-sdm220.json). В документации от производителя "Eastron SDM