PC 通过转换器连接到 Arduino RS-485
PC to Arduino RS-485 connection via converters
我正在尝试在 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 端串行监视器中,我只看到“--”行。即使我试图在 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 IDEs 串行监视器中)我收到奇数符号而不是“3”符号。
=======
RS485 转换器使用双绞线 A 到 A 和 B 到 B。
RS485 转 TTL 转换器正确连接到 Arduino。 (两个arduino之间的通信工作正常)。
请帮忙。
RS485 示例:
使用 SN75176 IC。
RE (pin 2) connect to ground
(始终阅读)
仅限Arduino控制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
信号(针对噪音)
一个技巧:在arduino端使用SN75176
因为this IC a RS232(UART) to (RS485)
转换器。
编辑:Modbus 在串口上有 2 种类型(RTU
、ASCII
)。不关心 RS232/485 差异因为 different signal, same protocol
.
Example packet type:
ASCII : :010300200004+CRC+FE
(crc =数据包校验码, fe=结束定界符)
RTU:\x01\x03\x00\x20\x00\x04\x +CRC
在 rtu 上:每个字节需要 1.5 个字符 space 并且没有 start and end
定界符。
和Modbus node type
意思是master
和slave
。
希望对您有所帮助。
我正在尝试在 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 端串行监视器中,我只看到“--”行。即使我试图在 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 IDEs 串行监视器中)我收到奇数符号而不是“3”符号。
=======
RS485 转换器使用双绞线 A 到 A 和 B 到 B。 RS485 转 TTL 转换器正确连接到 Arduino。 (两个arduino之间的通信工作正常)。
请帮忙。
RS485 示例:
使用 SN75176 IC。
RE (pin 2) connect to ground
(始终阅读)
仅限Arduino控制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
信号(针对噪音)
一个技巧:在arduino端使用SN75176
因为this IC a RS232(UART) to (RS485)
转换器。
编辑:Modbus 在串口上有 2 种类型(RTU
、ASCII
)。不关心 RS232/485 差异因为 different signal, same protocol
.
Example packet type:
ASCII : :010300200004+CRC+FE
(crc =数据包校验码, fe=结束定界符)
RTU:\x01\x03\x00\x20\x00\x04\x +CRC
在 rtu 上:每个字节需要 1.5 个字符 space 并且没有 start and end
定界符。
和Modbus node type
意思是master
和slave
。
希望对您有所帮助。