Страница 1 из 1

Добавлено: 21 окт 2008, 09:40
MaxNN
Добрый день!

Я пишу программу для связи с контролером Decont-182 по протоколу Modbus. В таблице «Настройка данных» введено: «Тип команды» - Дискретные входы – функция №2; «Тип данных» - WORD; «Начальный регистр» - 10; «Базовый номер чтения» - 1; «Базовый номер записи» - 1;
«Количество» - 2.
Формирую запрос: код функции 2 , адрес 10, количество 2. В ответ на запрос возвращается ошибка с кодом - 02 ILLEGAL DATA ADDRESS - адрес данных указанный в запросе не доступен данному подчиненному. В чем может быть проблема?

Добавлено: 21 окт 2008, 18:48
pooh
Ошибка с таким кодом обычно означает, что запрос пришел не на тот регистр Modbus. Адресация в протоколе осуществляется следующим образом: начальный регистр -1. То есть, начальный регистр указывается 10-й, но читается/пишется с 9-го. Это следует учитывать. Предлагаю провести запрос не 2-х параметров, а одного, это позволит точно определить ошибку в значении регистра. Еще стоит проверить соответствие параметра "нумерация с 0" на контроллерах Modbus Slave и Modbus Master. Специально для удобства в компонент Modbus версии 6 добавлено свойство "нумерация с 0". Это позволяет избавиться от учета вычитания единицы из регистра, как это происходит в протоколе Modbus.

Добавлено: 17 апр 2015, 08:41
maxi21
Здравствуйте! Из примера 5 не совсем понятно, как выбираются начальные регистры modbus - произвольно от 0 до 65535 или они задаются жестко. Например, для MODBUS Slave, для функции 2 обязательно ли задавать 10? Подскажите пожалуйста!

Добавлено: 20 апр 2015, 08:39
pooh
Номера регистров можно задавать произвольно