🔌 Сможете правильно определить адрес регистра?
Представьте, что вы настраиваете обмен между ПЛК ОВЕН и частотным преобразователем по Modbus TCP.
В документации частотника указано:
Register: 40017
Type: Holding Register
Data: Motor Frequency
Format: UINT16
В программе используется нулевая адресация регистров.
Необходимо прочитать значение частоты двигателя.
━━━━━━━━━━━━━━━━━━
❓ Какой адрес нужно указать в запросе Modbus?
А)
40017Б)
17В)
16Г)
40016Не спешите! Вспомните, чем отличается обозначение регистра от адреса внутри Modbus-запроса.
👇 Нажмите на скрытый текст, чтобы проверить ответ.
✅ Правильный ответ — В) 16.
Разберёмся почему.
В традиционной нотации Modbus:
40001 — первый Holding Register
40002 — второй Holding Register
40003 — третий Holding Register
Соответственно:
40017 — семнадцатый Holding Register.
Но при нулевой адресации первый регистр имеет адрес 0.
Поэтому:
40001 → адрес 0
40002 → адрес 1
40003 → адрес 2
...
40017 → адрес 16
В запросе используется:
Function Code: 03
Starting Address: 16
Quantity: 1
FC03 означает чтение Holding Registers.
Цифра 4 из обозначения 40017 не является частью передаваемого адреса. Область данных определяется функциональным кодом.
Важно: такой расчёт верен, если документация использует традиционную нотацию 4xxxx, а программа ожидает нулевой адрес. Некоторые устройства и программы отображают адреса иначе.
━━━━━━━━━━━━━━━━━━
💡 Главное правило
Если документация использует традиционные обозначения Holding Registers:
40001 → 0
40002 → 1
40010 → 9
40017 → 16
Но всегда проверяйте систему адресации конкретного устройства и программы!
Ошибка на единицу — одна из распространённых причин неправильного чтения данных по Modbus.
━━━━━━━━━━━━━━━━━━
💬 Получилось ответить правильно?
Напишите в комментариях, какой вариант выбрали: А, Б, В или Г.
📤 Отправьте задачу коллеге, который работает с Modbus!
🔁 Репостните интерактив в профильный чат — пусть больше инженеров проверят свои знания.
📚 Больше материалов по CODESYS и ПЛК:
https://t.me/codesys4
#Modbus #ModbusTCP #CODESYS #ОВЕН #ПЛК #АСУТП