Подключение ПК к Arduino RS-485 через конвертеры
Я пытаюсь установить соединение Modbus RS-485 между ПК (Windows) и Arduino.
На стороне ПК я использую конвертер USB-RS485, как этот http://ru.aliexpress.com/item/USB-to-485-RS485-converter-Adapter-Support-Windows-7-8-for-Arduino/1577970568.html
На стороне Arduino я использую TTL-to-RS-485, как этот http://ru.aliexpress.com/item/5pcs-lot-MAX485-Module-RS-485-TTL-to-RS485-Module-for-Arduino/32262338107.html
Проблема 1: Когда я посылаю байт с ПК на Arduino. Ничего не произошло. Ардуино ничего не получает. В этом случае я загружаю в Arduino этот код:
#include <SoftwareSerial.h>
#include "RS485_protocol.h"
SoftwareSerial rs485 (10, 11); // receive pin, transmit pin
const byte ENABLE_PIN = 3;
void setup()
{
Serial.begin(9600);
rs485.begin (28800);
pinMode (ENABLE_PIN, OUTPUT); // driver output enable
}
void loop()
{
byte buf [1];
byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf));
if (received)
{
Serial.println(buf[0]);
} else {
Serial.println("--");
}
} // end of loop
int fAvailable ()
{
return rs485.available ();
}
int fRead ()
{
return rs485.read ();
}
И откройте Serial Monitor в Arduino IDE, чтобы показать полученные данные. Затем я открываю новый экземпляр Arduino IDE, выбираю подходящий COM-порт USB-RS485 и открывает его Serial Monitor для отправки некоторых данных.
Так что на стороне Arduino Serial Monitor я вижу только строки "-". Даже когда я пытаюсь отправить что-то на ПК, Serial Monitor.
Другая проблема:
Наоборот. Когда я посылаю некоторый байт из Arduino на ПК, я получаю нечетные символы вместо отправленного байта.
Код Arduino в этом случае:
#include <SoftwareSerial.h>
#include "RS485_protocol.h"
SoftwareSerial rs485 (10, 11); // receive pin, transmit pin
const byte ENABLE_PIN = 3;
void setup()
{
rs485.begin (28800);
pinMode (ENABLE_PIN, OUTPUT); // driver output enable
}
void loop()
{
byte msg[1] = {3};
sendMsg(msg);
} // end of loop
void sendMsg(byte msg[])
{
delay (1); // give the master a moment to prepare to receive
digitalWrite (ENABLE_PIN, HIGH); // enable sending
sendMsg (fWrite, msg, 1);
digitalWrite (ENABLE_PIN, LOW); // disable sending
}
void fWrite (const byte what)
{
rs485.write (what);
}
int fAvailable ()
{
return rs485.available ();
}
На стороне ПК (в последовательном мониторе IDE Arduino) я получаю нечетные символы вместо символа "3".
=======
Преобразователи RS485, подключенные с витыми частями A к A и B к B. Преобразователь RS485 к TTL правильно подключен к Arduino. (Связь между двумя ардуино работает нормально).
Пожалуйста помоги.
1 ответ
Пример RS485:
Использование SN75176 IC.
RE (pin 2) connect to ground
(для постоянного чтения)
Только Arduino control DE PIN for writing data
Но PC
побочные проблемы:
- Где мост
DE
булавки? (CTS,DTR,RTD
если поддерживается) - Каково ваше управление потоком? (связанный № 1)
- Вы подключили какой-либо резистор к
A
,B
штырь?<+5V>----[560R]-----(A)----[120R]-----(B)------[560R]------<-5V>
Так жестокаline end
- Вы фильтровали
DE Pin 2
сигнал (для шума)
Трюки: использование SN75176
на стороне Arduino, потому что this IC a RS232(UART) to (RS485)
конвертер.
Изменить: Modbus получил 2 типа на серийный (RTU
, ASCII
). Не волнует различия RS232/485, потому что different signal, same protocol
,
Пример типа пакета:
ASCII: :010300200004+CRC+FE
(crc = код проверки пакета, fe= конечный разделитель)
RTU: \x01\x03\x00\x20\x00\x04\x +CRC
На rtu: на каждый байт нужно 1,5 символа и без start and end
разделитель.
А также Modbus node type
имея в виду master
а также slave
,
Я надеюсь, что полезно.