А разве по спецификации протокола разным функциям не соответствуют разные таблицы, если мне память не изменяет то существует 4 таблицы под все типы регистров и при запросе данных слэйв по типу команды определяет с какой таблицей работать?
Данные в модуле хранятся в 4 таблицах.
Две таблицы доступны только для чтения и две для чтения-записи.
В каждой таблице помещается 9999 значений.
Номер регистра Адрес регистра HEX Тип Название Тип
1-9999 0000 до 270E Чтение-запись Discrete Output Coils DO
10001-19999 0000 до 270E Чтение Discrete Input Contacts DI
30001-39999 0000 до 270E Чтение Analog Input Registers AI
40001-49999 0000 до 270E Чтение-запись Analog Output Holding Registers AO
В сообщении Modbus используется адрес регистра.
Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000.
Разница между этими двумя величинами есть смещение offset.
Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.
Или в ваших устройствах используется только одна таблица в которую все запихивается с целью экономии памяти без смещения и по этой пичине возникают коллизии одна из которых произошла у меня???





Ответить с цитированием