Чем отличаются MODBUS RTU Slave (All function) и OneBaseAddress?
Разница ровно в одном — с какого числа начинается нумерация адресов: у All function адресация идёт с нуля, а у All function OneBaseAddress с единицы, то есть со смещением на одну позицию.
Набор кодов функций, скорости, чётность и всё остальное у этих двух протоколов совпадает. Выбирать нужно тот, который соответствует документации ведомого устройства.
Как понять, какой брать. Производители описывают карту регистров двумя способами:
- «регистр 40001» или «регистр 1» — это нумерация с единицы, берите OneBaseAddress;
- «адрес 0x0000» или «регистр 0» — нумерация с нуля, берите All function.
Симптом ошибки характерный и легко узнаваемый: связь есть, ошибок обмена нет, но все значения смещены на одну позицию — вместо тока вы видите напряжение, вместо напряжения частоту. Если картина такая, протокол просто перепутан, и лечится это сменой протокола, а не переписыванием адресов во всех объектах.
Полезно проверить это до того, как в проекте появятся сотни адресов: на одном тестовом объекте разница видна сразу.
Прикреплённая документация
Георгий Жуков
Ведущий инженер