Инженерия Modbus

Как правильно читать карту регистров Modbus

У каждого устройства Modbus своя карта регистров — и у каждой карты свои подводные камни. Разберём четыре типа данных, коды функций чтения/записи и две ошибки, на которых спотыкаются даже опытные интеграторы.

Независимая техническая оценкаСборка щитов по IEC 61439Поддержка проектов по ЕС
A / B
120Ω
Holding vs Input
Чтение карты регистров в четыре шага

Чтение карты регистров в четыре шага

01

Определите тип данных

Проверьте, где лежит значение — в coil, дискретном входе, input или holding регистре: от этого зависят код функции и права доступа.

02

Подберите код функции

FC03/FC04 читают holding и input регистры, FC06/FC16 записывают один или несколько регистров. Неверный код вернёт исключение, а не данные.

03

Разберитесь со смещением адресации

Выясните, использует ли документация нумерацию Modicon (например, 40001) или реальный 0-based адрес протокола, передаваемый по шине — путаница здесь самая частая причина ошибок интеграции.

04

Проверьте порядок байт и слов

Для любого 32-битного значения, составленного из двух регистров, подтвердите порядок слов производителя на известном тестовом значении, прежде чем доверять результату.

На чём реально спотыкаются инженеры

На чём реально спотыкаются инженеры

40001 vs 0

Ловушка смещения адресации

Нумерация Modicon начинает регистры с 40001, но адрес, реально передаваемый по шине, отсчитывается от 0 — регистр 40001 соответствует адресу протокола 0. Ошибка здесь сдвигает каждое чтение на единицу.

Четыре типа данных, два уровня доступа

Coils и дискретные входы — однобитные значения, input и holding регистры — 16-битные слова. Записать можно только coils и holding регистры; input-данные и дискретные входы доступны только для чтения по определению.

Код функции определяет, что вы можете сделать

FC01/02 читают coils и дискретные входы, FC03/04 читают holding и input регистры, FC05/06 записывают одну coil или регистр, FC15/16 — несколько. Устройство отклонит код, не поддерживаемый для этого типа данных.

Ловушка 40001/30001

Историческая нумерация Modicon (40001, 30001…) не совпадает с 0-based адресом, реально передаваемым по шине. Всегда проверяйте, какую конвенцию использует конкретный datasheet, прежде чем настраивать опрос.

Порядок слов не стандартизирован

Когда два 16-битных регистра образуют 32-битное значение, производители расходятся в том, какой регистр содержит старшее слово. Неверное предположение даёт правдоподобные, но неверные числа.

Нет встроенной аутентификации

Ни Modbus RTU, ни классический Modbus TCP изначально не проектировались с учётом безопасности — любое устройство на шине или в сети может отправить корректную команду. Сегментация сети и понимающий протокол шлюз решают то, что не решает сам протокол.

Комплекты

Инженерная поддержка интеграции Modbus

Если карта регистров ведёт себя не так, как в документации, наши инженеры проверят это до пусконаладки, а не во время задержки на объекте.

  • Разбор карты регистров по документации производителя
  • Проверка кодов функций и конвенции адресации перед пусконаладкой
  • Оценка топологии сети RS-485 и терминирования
  • Проверка порядка слов/байт для многорегистровых значений
  • Сборка щитов и поддержка интеграции по IEC 61439
FAQ

Частые вопросы

В чём разница между holding и input регистром?

Оба — 16-битные слова, но holding регистр доступен для чтения и записи (код функции 03 для чтения, 06/16 для записи), а input регистр — только для чтения (код функции 04). Это определяет прошивка устройства, а не вы — смотрите в datasheet, в каком регистре находится нужное значение.

Почему показание Modbus ровно вдвое больше, вдвое меньше или совсем неверное?

Почти всегда это несовпадение порядка слов (endianness), когда 32-битное значение разбито на два 16-битных регистра. Производители по-разному решают, какое слово идёт первым — старшее или младшее; поменяйте порядок регистров местами и сверьтесь с известным эталонным значением.

Почему регистр 40001 в datasheet соответствует адресу 0 на шине?

Это идёт из истории протокола: классическая нумерация Modicon начинает holding регистры с 40001, но реальный адрес протокола, передаваемый по проводу, отсчитывается от 0. Регистр 40001 = адрес протокола 0, регистр 40002 = адрес 1 и так далее.

Каким кодом функции записывать значение в устройство Modbus?

FC06 записывает один holding регистр, FC05 — одну coil. FC16 записывает несколько holding регистров за одну транзакцию, FC15 — несколько coils. Записать в input регистр или дискретный вход невозможно — они доступны только для чтения по определению.

Есть ли у Modbus встроенная защита?

Нет. Ни Modbus RTU, ни классический Modbus TCP не предусматривают в спецификации аутентификацию или шифрование — любой узел на шине или в сети может отправить корректную команду. Безопасность нужно обеспечивать снаружи протокола: сегментацией сети, понимающим протокол шлюзом и ограничением доступа к сети автоматизации.

Нужен независимый взгляд на интеграцию Modbus?

Наши инженеры проверяют карты регистров, разводку и планы пусконаладки до того, как они станут задержкой на объекте. Свяжитесь с нами.

Связаться с инженерами
Связанные услуги

Связанные услуги

Загрузка ...
Наверх