我试图在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之间的通信工作正常)。
请帮忙。
答案 0 :(得分:1)
RS485示例:
使用SN75176 IC。
RE (pin 2) connect to ground
(总是阅读)
Arduino仅控制DE PIN for writing data
但PC
方问题:
DE
针脚的位置? (CTS,DTR,RTD
如果支持)A
,B
引脚?<+5V>----[560R]-----(A)----[120R]-----(B)------[560R]------<-5V>
所以意味着line end
DE Pin 2
信号(噪音)技巧:在arduino端使用SN75176
因为this IC a RS232(UART) to (RS485)
转换器。
编辑:Modbus在串行(RTU
,ASCII
)上获得了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
表示master
和slave
。
我希望有帮助。