Часто путают адресацию в Modbus. Адрес состоит из функции: 1, 2, 3, 4, 5, 6, 15, 16 и другие. Но другие у нас не используются. И номера регистра в диапазоне от 0 до 65535.
Возможно, для упрощения была придумана адресация к области памяти.
Что такое Modbus, хорошо описано в Википедии: https://ru.wikipedia.org/wiki/Modbus
У нас нет как таковой выделенной области памяти. У нас используются стандартные функции и регистры. Внутри микроконтроллера выполняются разные действия, но не обращения к конкретной области памяти, как указано в адресации.
Поддержка функций и команд в наших устройствах обеспечивается в полном соответствии с синтаксисом запроса и ответа определенным в документе «MODBUS Application Protocol Specification v1.1b». Полное описание протокола находится на официальном сайте: ModBus.org. В этой спецификации нет описания области памяти и чему она соответствует.
Одна и та же область памяти, но с разной функцией Read и Write может выполнять разное действие.
Например, HR92 запись 1 сохраняет ОЗУ во Флеш, а чтение возвращает количество циклов перезаписи. А область памяти одна 40093.
Выходы и входы находятся по разным функциям Coil и IR и DI. А регистры нумеруются одинаково с 1 по 8. В одном и том же номере регистра, но с разной функцией будут находиться разные данные.
Используемые функции (команды) обмена информацией:
код функции |
Диапазон адресов |
Область памяти |
Название |
01 |
0 - 65535 |
20001 - 29999 |
Read Coils |
02 |
0 - 65535 |
10001 - 19999 |
Read Discrete Inputs (DI) |
03 |
0 - 65535 |
40001 - 49999 |
Read Holding Registers (HR) |
04 |
0 - 65535 |
30001 - 39999 |
Read Input registers (IR) |
05 |
0 - 65535 |
20001 - 29999 |
Write Single Coil |
06 |
0 - 65535 |
40001 - 49999 |
Write Single Register (HR) |
15 |
0 - 65535 |
20001 - 29999 |
Write Multiple Coil |
16 |
0 - 65535 |
40001 - 49999 |
Write Multiple registers (HR) |
01 Read Coils, 05 Write Single Coil, 15 Write Multiple registers.
Регистры Coils хранят состояние выхода. Эти регистры доступны для чтения (01 Read Coils) и записи (05 Write Single Coil, 15 Write Multiple registers). Из этого регистра можно читать состояние выхода. Запись в этот регистр переключает выход.
Регистр |
Область памяти |
Диапазон данных |
Назначение DRM88ER |
Coil 0 |
20001 |
0…1 |
Флаги |
Coil 1 |
20002 |
0…1 |
Реле канал 1 |
Coil 2 |
20003 |
0…1 |
Реле канал 2 |
Coil 3 |
20004 |
0…1 |
Реле канал 3 |
Coil 4 |
20005 |
0…1 |
Реле канал 4 |
Coil 5 |
20006 |
0…1 |
Реле канал 5 |
Coil 6 |
20007 |
0…1 |
Реле канал 6 |
Coil 7 |
20008 |
0…1 |
Реле канал 7 |
Coil 8 |
20009 |
0…1 |
Реле канал 8 |
Coil 9 … 23 |
20010 |
0…1 |
Флаги |
Флаги – это переменные, доступные пользователю для работы сценариев. Тип переменной bool и имеют значение 0 или 1.
Флаги не переключают реле, но являются специально выделенной областью памяти, которую можно использовать для своих целей как внутри сценариев, так и снаружи, через Modbus.