我只是短暂地开始使用 C# 工作,我目前正在使用 RS-485 与其他一些设备进行通信,但我似乎无法真正让其他设备做出响应。我想知道是否有任何方法可以使用串行通信写入特定设备,因为它都是通过 COM 端口 4 连接的。我已经知道 serial.Write(); 但据我所知,它没有让您选择要发送到的地址。有没有人可能知道这个问题的答案?
最好的问候 CVR
感谢您的回复。他们帮了很多忙:)
我只是短暂地开始使用 C# 工作,我目前正在使用 RS-485 与其他一些设备进行通信,但我似乎无法真正让其他设备做出响应。我想知道是否有任何方法可以使用串行通信写入特定设备,因为它都是通过 COM 端口 4 连接的。我已经知道 serial.Write(); 但据我所知,它没有让您选择要发送到的地址。有没有人可能知道这个问题的答案?
最好的问候 CVR
感谢您的回复。他们帮了很多忙:)
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
您可以创建 SerialPort 类的实例。
在那里您可以定义波特率、端口名等。
在调用 Open() 方法后,您可以从端口读取或写入数据。
var port = new SerialPort();
port.PortName = "COM4";
port.Open();