Читаем по Modbus

Автор leszkin, 27 августа 2015, 16:49:10

« назад - далее »

leszkin

Михаил, приветствую.
Подскажите по конкретному примеру пожалуйста.
Адрес нужного регистра по мануалу устройства - 4001. Функция InputRegisters.
ОРС-сервером читаю его без проблем, а контроллером не могу.
На скрине пример тэга, который успешно читается ОРС-сервером. Как прочитать эту же переменную контроллером?

з.ы. порт контроллера сконфигурирован верно.

leszkin

вот более подробная выдержка из мануала устройства.


Данные передаются байтами и словами (2 байта). Слова передаются старшим байтом вперед, т.е. если передается слово 0x1234, то 0x12 в PDU идет раньше 0x34.
Далее по тексту в поле контрольная сумма CRC16, которая служит для обнаружения ошибок при передаче битов данных. У контрольной суммы младшее слово приводится впереди, т.е. настоящая контрольная сумма перевернута (напри-мер: 0xBDCB для PC будет 0xCBBD).

А считать необходимо то, что в аттаче. Эксперементирую с адресами чтения в контроллере. Блок чтения отдает то ошибку 16, то 17...

mike

Добрый день!
Часом не к эл. счетчику подключаетесь?

leszkin

датчик перепада давления Прома-ИДМ.
Ошибку 17 поборол - после настройки порта не сохранил проект, и заново его открыв пытался передавать с контролем четности, а его в датчике нет.
А вот на какой адрес указывать в блоке чтения так и не догоняю... 34000?

MegaVolt

Цитата: leszkin от 28 августа 2015, 09:32:26
вот более подробная выдержка из мануала устройства.


Данные передаются байтами и словами (2 байта). Слова передаются старшим байтом вперед, т.е. если передается слово 0x1234, то 0x12 в PDU идет раньше 0x34.
Далее по тексту в поле контрольная сумма CRC16, которая служит для обнаружения ошибок при передаче битов данных. У контрольной суммы младшее слово приводится впереди, т.е. настоящая контрольная сумма перевернута (напри-мер: 0xBDCB для PC будет 0xCBBD).

А считать необходимо то, что в аттаче. Эксперементирую с адресами чтения в контроллере. Блок чтения отдает то ошибку 16, то 17...

16 это устройство не ответило, 17 ошибки CRC..... А и В правильно подключаете?

MegaVolt

А какой регистр необходимо прочитать ??? 4001 это десятичный или hex??

mike

Цитата: leszkin от 28 августа 2015, 10:13:19
А вот на какой адрес указывать в блоке чтения так и не догоняю... 34000?

не понял

leszkin

#7
по мануалу выходит, что меня интересуют регистры 4001 и 4002. указывая их в адресе чтения в zetFBD - получаю 16 ошибку. пробовал и десятичный и шестнадцатиричный адрес. но я уже что-то перестаю доверять данной инструкции  :D

основной вопрос: как сделать запрос указанный в скрине в старт-посте.


leszkin

должно получиться как то так.

MegaVolt

Запрос: 02 04 00 00 00 02 71 f8
Как я вижу по запросу компьютер спрашивает у устройства с адресом 2 по 04й функции с 0000 адреса 00 02 регистра
следовательно в блоке вам необходимо указать 0 адрес.. 2 регистра

MegaVolt

Дело в том что в некоторой документации в адресе первый байт является кодом функции, а адрес в этом случае нужно уменьшить на 1

leszkin

да в общем смуту внес мануал с адресом регистра 4001 (почему не 40001?). затем последовала моя оплошность с несохранением параметров порта контроллера, а дальше уже я просто вкосячил и зентеком опрашивал функцией чтения памяти, а не функцией чтения входов.
в общем 0 адрес, 2 регистра, читаем входы - всё ок. всем спасибо  ;D