我只是简单地开始使用C#,我目前正在使用RS-485与其他设备进行通信,但我似乎无法让其他设备做出响应。 我想知道是否有任何方法使用串行通信写入特定设备,因为它通过COM端口4连接。 我已经知道serial.Write();但据我所知,它没有给你选择你想发送到哪个地址。 是否有人可能知道对这个问题的回答?
最诚挚的问候 CVR
感谢您的回复。他们帮助了很多:)
答案 0 :(得分:8)
Kristof是正确的,但要详细说明:
与RS232通信时,只需要两个端点,即PC和外部设备。您通过发送命令与设备通信,或者甚至可以发送它们。它可以是简单的ASCII文本或二进制/十六进制代码。它在两个设备之间进行通信的方式称为协议 - 您的应用程序必须实现此协议才能与设备“通话”。
RS485与RS232不同,因为您可以在连接到PC的同一串行端口上菊花链连接多个设备。根据您的设备,它将拥有自己的协议,它了解您需要学习和熟悉的协议。这应该与您连接的设备一起提供。
通常,协议将(至少)具有以下信息:
因此,您可能发送给该单元的示例命令看起来像(请注意这只是一个示例):
$01FF9A
其中:
01
是模块或设备的唯一地址
FF
是命令类型
9A
是数据
所以在这里,设备地址为01
的模块将读取命令并演绎“嘿,你正在和我说话”,然后处理命令信息。所有其他设备也将接收数据,但会意识到它不是为自己注定的。
通常RS485设备使用十六进制数据进行通信,因此您的应用程序需要向外部设备发送十六进制命令,并处理转换为任何相关响应等。您可能需要查看Serial.Write(byte[], int,int)
发送十六进制数据到设备。
有关.NET串行端口类的更详细说明,请参阅http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
答案 1 :(得分:1)
您可以创建SerialPort类的实例
在那里你可以定义波特率,端口名等。
调用Open()方法后,您可以从端口读取数据或从端口写入数据。
var port = new SerialPort();
port.PortName = "COM4";
port.Open();