Modbus rtu slave rs485 mega Не принимает пакеты

antonaleks
Offline
Зарегистрирован: 28.02.2018

Добрый день!

У меня возникла необходимость сделать из моей 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).

Распиновка UPort 1110 1130 1150

По 485 2W подключал

Далее подключаю его к 485/TTL123.jpg

На схеме управляющий бит 10, я использую 4.

A и B - витая пара.

Так вот, если конвертер не подключать к управляющему биту, в moxa uport все время горит rx, если подключить, он гаснет. Пробую с помощью qmodbus отправить пакет (например прочитать регистры), tx моргнет  и все, не видет slave. Вообще ни в какую. Через usb норм отправляет и считывает (если пересоздать slave). Вроде все указал в проге, и порт, и бит, хз что еще надо. Может проблема в конвертере или uport? Или может rx и tx что-нибудь перепутал? Можно ли как-нибудь их прослушать?

antonaleks
Offline
Зарегистрирован: 28.02.2018

Также Modbus slave(1,2,TXEN); менял на Modbus slave(1,0,TXEN) - не помогло

nik182
Offline
Зарегистрирован: 04.05.2015

Судя по приведённой схеме должно работать slave(1,1,TXEN); И концы Rx-DO Tx-RO соединять.

 В qmodbus вызывать первый slave.

antonaleks
Offline
Зарегистрирован: 28.02.2018

nik182 пишет:

Судя по приведённой схеме должно работать slave(1,1,TXEN); И концы Rx-DO Tx-RO соединять.

 В qmodbus вызывать первый slave.

То есть поменять местами провода к rx и tx? - Не получилось. Но если воткнуть в rx0 и tx0 таким порядком, то при отправки пакета с компьютера на ардуино замигает tx лампочка. Хотя должна ж rx по идее. Все равно не получается, не отправляет ничего на компьютер

nik182
Offline
Зарегистрирован: 04.05.2015

Да, согласен  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.  

antonaleks
Offline
Зарегистрирован: 28.02.2018

Поменял на 0 последовательную шину, все также не хочет работать. Возможно в конвертере дело?

nik182
Offline
Зарегистрирован: 04.05.2015

Попробуйте вообще без конвертора. Через COM порт. Через USB кабель. Если работает - то может и конвертор. 

antonaleks
Offline
Зарегистрирован: 28.02.2018

Через usb все работает. Куплю наверное новый конвектор, кажется в нем tx херово работает

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Эти конвертеры - сплошной глюк. Во первых очень вольный подход к наличию-отсутствию терминатора, во вторых не защищенные входы-выходы, просто выгорают при переплюсовке. И самое неприятное, китайцы собирают их из левых мах485. Я столкнулся с партией, именно с партией таких железок, которые тупо не работали, пока я у них этот самый мах485 не заменил на свежекупленные в магазине.