通过转换器将PC转换为Arduino RS-485连接

时间:2016-01-27 16:31:48

标签: arduino serial-port rs485

我试图在PC(Windows)和Arduino之间建立modbus RS-485连接。

在PC端,我使用USB-to-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: 当我从PC向Arduino发送字节时。什么都没发生。 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 ();  
  }

在Arduino IDE中打开串行监视器以显示接收的数据。 然后我打开Arduino IDE的新实例,选择合适的USB-to-RS485 COM端口并打开串口监视器发送一些数据。

所以在Arduino端串行监视器中我只看到&#34; - &#34;线。即使我试图在PC端串行监视器上发送东西。

另一个问题是:

反之亦然。当我从Arduino向PC发送一些字节时,我会收到一些奇数符号而不是发送字节。

这种情况下的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 ();  
  }

在PC端(在Arduino IDE串行监视器中)我接收奇数符号&#34; 3&#34;符号

=======

RS485转换器连接有扭曲的A到A和B到B. RS485到TTL转换器正确连接到Arduino。 (两个arduinos之间的通信工作正常)。

请帮忙。

1 个答案:

答案 0 :(得分:1)

RS485示例:

使用SN75176 IC。

enter image description here

RE (pin 2) connect to ground(总是阅读)

Arduino仅控制DE PIN for writing data

PC方问题:

  1. 桥接DE针脚的位置? (CTS,DTR,RTD如果支持)
  2. 你的流量控制是什么? (相关#1)
  3. 您是否已将任何电阻连接到AB引脚?<+5V>----[560R]-----(A)----[120R]-----(B)------[560R]------<-5V>所以意味着line end
  4. 您是否过滤了DE Pin 2信号(噪音)
  5. 技巧:在arduino端使用SN75176因为this IC a RS232(UART) to (RS485)转换器。

    编辑:Modbus在串行(RTUASCII)上获得了2种类型。不要关心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表示masterslave

    我希望有帮助。