PDA

Просмотр полной версии : Связь ПР200 с Adam-4000 по Modbus RTU



uzga
19.02.2020, 10:27
Добрый день!
Пытаюсь связать ПР200 с модулем дискретного вывода Adam-4056SO. Настроил последний на передачу данных по Modbus/RTU, прописал требуемую скорость обмена и сетевой адрес.
В реле ПР200 настроил первый порт на работу мастером - перемычки установил в требуемое положение. Программные настройки порта сделал - мастер, скорость и сетевой адрес модуля Adam прописал.
Перечень сетевых переменных прописал - интересуют каналы с DO4 и далее. Соответственно адреса регистров начинаются с 21.
Запускаю тестовую программу, устанавливающую сетевые переменные в зависимости от состояния дискретных входом ПР200 - не работает. Пробовал менять настройки порта в ПР200 - не помогает. Пробовал менять адреса регистров и битов в настройках сетевых переменных - не помогает.

Соответственно прошу помочь в решении проблемы - указать пути поиска, что я делаю не так. Весь форум Овена прошерстил - ответа не нашел.
Опыта в связке ПР200 с продукцией Advantech ранее не имел.
Попутно вопрос - нужно ли для связи ПР200 с Adam-4056SO включать на последнем опцию передачи контрольной суммы?

Заранее спасибо!

melky
19.02.2020, 10:36
Простите а как вы без CRC что-то собрались передавать в RTU ?

я бы подключился программой какой-нибудь и другим ПК (или на этом же) посмотрел бы какие запросы и ответы идут, потом посмотрел бы что отсылает ПР и чего он там ждет .... Иначе можно долго гадать на кофейной гуще. Не все же тут через одного с Adam работают...

uzga
19.02.2020, 10:54
Как я понял, при выборе в Adam протокола Modbus, контрольная сумма при обмене генерируется автоматически.

Ревака Юрий
19.02.2020, 11:14
Добрый день!
Пытаюсь связать ПР200 с модулем дискретного вывода Adam-4056SO. Настроил последний на передачу данных по Modbus/RTU, прописал требуемую скорость обмена и сетевой адрес.
В реле ПР200 настроил первый порт на работу мастером - перемычки установил в требуемое положение. Программные настройки порта сделал - мастер, скорость и сетевой адрес модуля Adam прописал.
Перечень сетевых переменных прописал - интересуют каналы с DO4 и далее. Соответственно адреса регистров начинаются с 21.
Запускаю тестовую программу, устанавливающую сетевые переменные в зависимости от состояния дискретных входом ПР200 - не работает. Пробовал менять настройки порта в ПР200 - не помогает. Пробовал менять адреса регистров и битов в настройках сетевых переменных - не помогает.

Соответственно прошу помочь в решении проблемы - указать пути поиска, что я делаю не так. Весь форум Овена прошерстил - ответа не нашел.
Опыта в связке ПР200 с продукцией Advantech ранее не имел.
Попутно вопрос - нужно ли для связи ПР200 с Adam-4056SO включать на последнем опцию передачи контрольной суммы?

Заранее спасибо!

Добрый день, скорость какая установлена, сделайте настройки опроса 1 сек, так же обратите внимание что для 5 команды необходимо пересчитать номера регистров, смотрите пример расчета в Help, покажите скрин таблицы регистров Modbus модуля Adam.

uzga
19.02.2020, 11:23
Скорость 38400 бод.

uzga
19.02.2020, 11:24
А можно про пересчёт адресов по-подробней?

uzga
19.02.2020, 11:39
Проверил выполнение Adam команды на включение одного бита через программу Termite. модуль исправно её отработал.
Сама команда: 02050014ff00 (включим выход DO4 (адрес регистра по мануалу - 21, со сдвигом будет - 20, в коде - 0014h), адрес модуля 02, команда 05, записываемое значение ff00h)

melky
19.02.2020, 11:50
А где CRC в вашей команде ?


Part of Data Package Description Value
02 Slave address 0x02 (2)
05 Function code 0x05 (5) - Write Single Coil
00 14 Output address 0x0015 (21)
FF 00 Output value On
CC 0D CRC 0xCC0D (52237)

да уж, с форматированием на форуме фигня полная...

uzga
19.02.2020, 12:27
Контрольная сумма добавляется к указанной команде при передаче в Termite автоматически, я её просто не указал.

melky
19.02.2020, 12:29
Ну так сядьте компьютером на линию и в режиме прослушки порта посмотрите, что отправляет ПР200... Сразу станет ясно, что куда и зачем. Будет понятно куда двигаться.

Ревака Юрий
19.02.2020, 12:43
А можно про пересчёт адресов по-подробней?

Если адрес 0x21 управляется 5 командой из ПР200, то в настройках попробуйте указать так 2 регистр бит 1

"В некоторых случаях требуется вычислить адрес регистра и номер бита подчиненного устройства. Для определения адреса регистра и номера бита из документации на опрашиваемый прибор берется расположение битовой переменной, например, бит 1400, далее следует:
1. Вычислить адрес регистра: 1400 ÷ 16 = 87.
2. Вычислить номер бита 1400 mod 16 = 8." Раздел Работа по протоколу Modbus.

uzga
19.02.2020, 13:12
Разобрался. Поставил снифер и с помощью него увидел, что вся проблема заключалась в странном, на мой взгляд, кодировании адреса нужного мне регистра Adam.
Формирование адреса регистра типа bool в OwenLogic работает так: старшие 12 бит адреса отводятся под то число, что указывается в форме настройки сетевых переменных как адрес регистра, а младшие 4 бита содержат число, вводимое в этой же форме как адрес бита.
В моём случае, когда я вводил адрес регистра - 20 и адрес бита - 4, ПР200 отправляло на Adam команду, содержащую адрес регистра 0144. Естественно такая команда не работала.
Правильной оказалась настройка сетевой переменной: адрес регистра - 1, адрес бита - 4. В результате адрес регистра принял значение 0014 и связь между ПР200 и Adam-4056SO заработала.
Спасибо всем за участие.

P.S. Разработчикам Owen Logic: не уверен, что такая логика настройки формы сетевых переменных правильная. Но это моё личное мнение. Удачи!

melky
19.02.2020, 13:15
uzga ну вот вам Юрий и написал. У вас есть 20 регистр для 4-го бита. 20/16 = 1 регистр и остаток номер бита 4 , а вы вписывали 20 регистр как раз то, что вы и увидели снифером...