Адресация в Modbus

Общие вопросы по оборудованию и программному обеспечению Компании ДЭП
MaxNN
Сообщения: 1
Зарегистрирован: 21 окт 2008, 09:05

Сообщение MaxNN » 21 окт 2008, 09:40

Добрый день!

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

pooh
Сообщения: 421
Зарегистрирован: 22 июл 2008, 11:50
Откуда: Дэп

Сообщение pooh » 21 окт 2008, 18:48

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

maxi21
Сообщения: 55
Зарегистрирован: 20 июл 2009, 21:21

Сообщение maxi21 » 17 апр 2015, 08:41

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

pooh
Сообщения: 421
Зарегистрирован: 22 июл 2008, 11:50
Откуда: Дэп

Сообщение pooh » 20 апр 2015, 08:39

Номера регистров можно задавать произвольно