Modbus rtu slave rs485 mega Не принимает пакеты
- Войдите на сайт для отправки комментариев
Добрый день!
У меня возникла необходимость сделать из моей arduino mega модбасовского слейва. Да так, чтобы компьютер мог считывать регистры по rs485 интерфейсу. Для этого использовал qModBus. Залил в нее следующуюю программу:
/** * Modbus slave example 3: * The purpose of this example is to link a data array * from the Arduino to an external device through RS485. * * Recommended Modbus Master: QModbus * http://qmodbus.sourceforge.net/ */ #include <ModbusRtu.h> // assign the Arduino pin that must be connected to RE-DE RS485 transceiver #define TXEN 4 // data array for modbus network sharing uint16_t au16data[16] = { 3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, 1 }; /** * Modbus object declaration * u8id : node id = 0 for master, = 1..247 for slave * u8serno : serial port (use 0 for Serial) * u8txenpin : 0 for RS-232 and USB-FTDI * or any pin number > 1 for RS-485 */ Modbus slave(1,2,TXEN); // this is slave @1 and RS-485 void setup() { slave.begin( 9600 ); // baud-rate at 19200 } void loop() { slave.poll( au16data, 16 ); }
Для подключения по 485 использую uport 1150 (usb/485) - при этом вроде все настроил - выставил в диспетчере устройств 485 интерфейс, порт 2 (9600).
По 485 2W подключал
Далее подключаю его к 485/TTL
На схеме управляющий бит 10, я использую 4.
A и B - витая пара.
Так вот, если конвертер не подключать к управляющему биту, в moxa uport все время горит rx, если подключить, он гаснет. Пробую с помощью qmodbus отправить пакет (например прочитать регистры), tx моргнет и все, не видет slave. Вообще ни в какую. Через usb норм отправляет и считывает (если пересоздать slave). Вроде все указал в проге, и порт, и бит, хз что еще надо. Может проблема в конвертере или uport? Или может rx и tx что-нибудь перепутал? Можно ли как-нибудь их прослушать?
Также Modbus slave(1,2,TXEN); менял на Modbus slave(1,0,TXEN) - не помогло
Судя по приведённой схеме должно работать slave(1,1,TXEN); И концы Rx-DO Tx-RO соединять.
В qmodbus вызывать первый slave.
Судя по приведённой схеме должно работать slave(1,1,TXEN); И концы Rx-DO Tx-RO соединять.
В qmodbus вызывать первый slave.
То есть поменять местами провода к rx и tx? - Не получилось. Но если воткнуть в rx0 и tx0 таким порядком, то при отправки пакета с компьютера на ардуино замигает tx лампочка. Хотя должна ж rx по идее. Все равно не получается, не отправляет ничего на компьютер
Да, согласен Tx-DI , Rx-DO. Из описания меги:Последовательная шина: 0 (RX) и 1 (TX); Последовательная шина 1: 19 (RX) и 18 (TX); Последовательная шина 2: 17 (RX) и 16 (TX);
Ноги 18-19 это первый порт. Казалось бы должно работать. slave(1,2,TXEN); это второй порт - ноги 16,17. У меня Modbus slave(1,0,TXEN); работает на ногах 0,1.
Поменял на 0 последовательную шину, все также не хочет работать. Возможно в конвертере дело?
Попробуйте вообще без конвертора. Через COM порт. Через USB кабель. Если работает - то может и конвертор.
Через usb все работает. Куплю наверное новый конвектор, кажется в нем tx херово работает
Эти конвертеры - сплошной глюк. Во первых очень вольный подход к наличию-отсутствию терминатора, во вторых не защищенные входы-выходы, просто выгорают при переплюсовке. И самое неприятное, китайцы собирают их из левых мах485. Я столкнулся с партией, именно с партией таких железок, которые тупо не работали, пока я у них этот самый мах485 не заменил на свежекупленные в магазине.