Подключение N4AIAO4 к Modbus

Контроллеры, драйверы, датчики, управляющие устройства.
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Подключение N4AIAO4 к Modbus

Сообщение Nikomas »

Хочу поделиться своим опытом подключения аналогового преобразователя N4AIAO4 к сети Modbus RTU через конвертер USB-RS485. Изрядно мне крови попила эта плата потому и делюсь своим опытом.
Изначально что может быть проще чем просто все подсоединить по такой схеме как в документах на плату:
1.JPG (1126 просмотров) <a class='original' href='./download/file.php?id=202905&sid=b17a504444caafa9be3371ab1c482f27&mode=view' target=_blank>Загрузить оригинал (55.97 КБ)</a>
"Свисток" USB-RS485 использую такой (ZK-U485):
2.JPG (1126 просмотров) <a class='original' href='./download/file.php?id=202906&sid=b17a504444caafa9be3371ab1c482f27&mode=view' target=_blank>Загрузить оригинал (73.02 КБ)</a>
В Win10 определился как USB-SERIAL CH340 (COM*). Драйвера скачал вот эти: driver_ch340_341_arduino.exe Раз свисток определился сам может драйвера и не нужны были, но решил перестраховаться и установить.

Далее все просто. От вешнего блока питания даём для N4AIAO4 12В, а RS-485 соединяем А-А, В-В. Тут все просто. Терминальный резистор не использую ибо провода короткие. Меньше 50см.

Modbus Poll настраиваем как указано в документации к плате, и после подключения видим, что довольно часто пробегает ошибка CHECKSUM ERROR. Какие я только настройки не менял, какой я только битрейд не ставил - все ровно. Ошибка появлялась совершенно рандомно и довольно часто. Светодиод на свистке тоже вел себя как-то странно. Светил в 50% от номинала и часто мигал. И тут в сети нахожу вот такую картинку:
3.png (1126 просмотров) <a class='original' href='./download/file.php?id=202907&sid=b17a504444caafa9be3371ab1c482f27&mode=view' target=_blank>Загрузить оригинал (17.72 КБ)</a>
Соединяю GND RS-485 на свистке и GND на плате N4AIAO4, и вуаля! Пакеты стали отправляться/получаться стабильно и без ошибок. Светодиод на свисте мигает ровно каждую отправку пакета и в полную яркость. Ошибка ушла. Напряжение севшей батарейки АА платка измерила правильно: 1,22В

Далее планирую подключить к аналоговому выходу сервоусилка и смотреть в LinuxCNC нагрузку на приводе в риалтайме.

По результатам буду отписываться здесь.
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4506
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение xenon-alien »

Nikomas писал(а): Соединяю GND RS-485 на свистке и GND на плате N4AIAO4, и вуаля!
А чего сразу не подключили?
GND - часто общий и необходимо подключать.
Относительно чего-то сигнал же должен меняться.
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение Nikomas »

xenon-alien писал(а): А чего сразу не подключили?
От недостатка опыта/знаний, в первую очередь.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение aftaev »

xenon-alien писал(а): GND - часто общий и необходимо подключать.
Относительно чего-то сигнал же должен меняться.
RS485 - токовая петля ;)
В нормальных устройствах достаточно АВ сигнала, без GND.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Cvazist
Мастер
Сообщения: 1080
Зарегистрирован: 16 окт 2017, 16:07
Репутация: 85
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение Cvazist »

aftaev писал(а): 16 апр 2022, 20:45 RS485 - токовая петля ;)
В нормальных устройствах достаточно АВ сигнала, без GND.
Передача в двух проводном режиме - дуплекс, по моему. Один провод GND, другой сигнал. Master шлёт запрос, Slave отвечает. Если полюсовка Master - Slave не соблюдена, то сеть не работает. Если Master "молчит" в сети тишина, устройства Slave ждут запроса от Master. :hottabych:
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение aftaev »

Cvazist писал(а): Передача в двух проводном режиме - дуплекс, по моему. Один провод GND, другой сигнал
Да уж, тяжелый случай :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Cvazist
Мастер
Сообщения: 1080
Зарегистрирован: 16 окт 2017, 16:07
Репутация: 85
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение Cvazist »

aftaev писал(а): 16 апр 2022, 21:32 Да уж, тяжелый случай :)
Тяжёлый, не тяжёлый, в той промышленой системе с которой я работал на интерфейсе RS485 протяженностью 3км нужно было соблюдать полярность 2х проводной системы. Иначе устройства не видели друг друга, хоть по проводам , хоть по оптике. И комп через USB - RS485 так же только при правильной полярности подключался к сети RS485.
Т.е. по моему , по крестьянски, в системе где не надо соблюдать полярность - нет общего провода "земли". Где полярность подключения обязательна, один провод сигнал, второй общий "земля" и без разницы с гальванической развязкой он или нет.
Аватара пользователя
xenon-alien
Почётный участник
Почётный участник
Сообщения: 4506
Зарегистрирован: 01 янв 2013, 13:13
Репутация: 920
Настоящее имя: Daniel
Откуда: Закарпатская обл. Украина
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение xenon-alien »

aftaev писал(а): 16 апр 2022, 20:45
xenon-alien писал(а): GND - часто общий и необходимо подключать.
Относительно чего-то сигнал же должен меняться.
RS485 - токовая петля ;)
В нормальных устройствах достаточно АВ сигнала, без GND.
Мне с детства была интересна электроника, но к сожалению никто мне её не объяснял и я не мог понять как работает транзистор от одного провода (по схеме), а оказалось, что земля общая и тогда понятно, почему оно реагирует на сигнал с одной проводки.
По этому GND я всегда объединяю, где не критична гальваническая развязка. (даже драйвера по возможности подключаю с общим плюсом, или общим минусом, хотя по идее простая витая пара должна быть надежней, но не всегда получается добиться желаемого результата...)
Nikomas
Мастер
Сообщения: 721
Зарегистрирован: 07 янв 2012, 14:31
Репутация: 64
Откуда: Беларусь
Контактная информация:

Re: Подключение N4AIAO4 к Modbus

Сообщение Nikomas »

Продолжаем.
Сперва надо узнать как определяется наш "свисток" USB - RS485 конвертер. Пишем в терминале: Если не установлена эта утилита, то ставим ее с помощью команды:

Код: Выделить всё

sudo apt-get install usbutils
У моего конвертера ID был таким - 1a86:7523. Далее проверяем на какой tty прицепился наш конвертер командой:

Код: Выделить всё

sudo dmesg | grep tty
В моем случае - ttyUSB0.

В папке /etc/udev/rules.d/ создаем файл modbus.rules и под root дописываем 2 строки:

Код: Выделить всё

SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}==''7523", GROUP="users", MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}==''7523", SYMLINK+="RS485_ADAPTER"
Теперь наш "свисток" будет под именем - RS485_ADAPTER. После перезагрузки и ввода команды:

Код: Выделить всё

ls -l /dev/RS*
видим что наш конвертер /dev/RS485_ADAPTER присвоен ttyUSB0. Настроили.

Теперь HAL. В HAL файле подгружаем компонент MB2HAL и дописываем следующие строки:

Код: Выделить всё

loadusr -W mb2hal config=config_file.ini
И надо создать в папке конфигурации вот такой файл - config_file.ini с таким содержанием и моими комментариями.

Код: Выделить всё

[MB2HAL_INIT]

INIT_DEBUG=3

HAL_MODULE_NAME=mb2hal

SLOWDOWN=0.0

TOTAL_TRANSACTIONS=1

[TRANSACTION_00]
LINK_TYPE=serial //у нас SERIAL устройство
SERIAL_PORT=/dev/RS485_ADAPTER //имя устройства
SERIAL_BAUD=9600 //скорость устройства
SERIAL_BITS=8 //
SERIAL_PARITY=none  //четность
SERIAL_STOP=1 //стоповый бит
SERIAL_DELAY_MS=10

MB_SLAVE_ID=1 //номер slave устройства

MB_TX_CODE=fnct_03_read_holding_registers //эти данные можно найти в документации на [b]N4AIAO4[/b] или на скрине ниже
FIRST_ELEMENT=0 //номер первого элемента 
NELEMENTS=16 //количество элементов
MB_RESPONSE_TIMEOUT_MS=500
MB_BYTE_TIMEOUT_MS=500
HAL_TX_NAME=AI //имя наших пинов в HAL
MAX_UPDATE_RATE=0.0
DEBUG=1
2022-04-20_202859.jpg (1030 просмотров) <a class='original' href='./download/file.php?id=202960&sid=b17a504444caafa9be3371ab1c482f27&mode=view' target=_blank>Загрузить оригинал (58.28 КБ)</a>
И после всех манипуляций в HAL видим данные с нашей N4AIAO4. 123 - это 1,23В батарейка подключена к пинам 0-5V<->GND
12.png (1030 просмотров) <a class='original' href='./download/file.php?id=202961&sid=b17a504444caafa9be3371ab1c482f27&mode=view' target=_blank>Загрузить оригинал (25.68 КБ)</a>
Ответить

Вернуться в «Электроника»