Подключение ПК к 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 побочные проблемы:

  1. Где мост DE булавки? (CTS,DTR,RTD если поддерживается)
  2. Каково ваше управление потоком? (связанный № 1)
  3. Вы подключили какой-либо резистор к A, B штырь?<+5V>----[560R]-----(A)----[120R]-----(B)------[560R]------<-5V> Так жестока line end
  4. Вы фильтровали 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,

Я надеюсь, что полезно.

Другие вопросы по тегам