Добрый день!
Я пишу программу для связи с контролером Decont-182 по протоколу Modbus. В таблице «Настройка данных» введено: «Тип команды» - Дискретные входы – функция №2; «Тип данных» - WORD; «Начальный регистр» - 10; «Базовый номер чтения» - 1; «Базовый номер записи» - 1;
«Количество» - 2.
Формирую запрос: код функции 2 , адрес 10, количество 2. В ответ на запрос возвращается ошибка с кодом - 02 ILLEGAL DATA ADDRESS - адрес данных указанный в запросе не доступен данному подчиненному. В чем может быть проблема?
Адресация в Modbus
Ошибка с таким кодом обычно означает, что запрос пришел не на тот регистр Modbus. Адресация в протоколе осуществляется следующим образом: начальный регистр -1. То есть, начальный регистр указывается 10-й, но читается/пишется с 9-го. Это следует учитывать. Предлагаю провести запрос не 2-х параметров, а одного, это позволит точно определить ошибку в значении регистра. Еще стоит проверить соответствие параметра "нумерация с 0" на контроллерах Modbus Slave и Modbus Master. Специально для удобства в компонент Modbus версии 6 добавлено свойство "нумерация с 0". Это позволяет избавиться от учета вычитания единицы из регистра, как это происходит в протоколе Modbus.