5

我只是短暂地开始使用 C# 工作,我目前正在使用 RS-485 与其他一些设备进行通信,但我似乎无法真正让其他设备做出响应。我想知道是否有任何方法可以使用串行通信写入特定设备,因为它都是通过 COM 端口 4 连接的。我已经知道 serial.Write(); 但据我所知,它没有让您选择要发送到的地址。有没有人可能知道这个问题的答案?

最好的问候 CVR

感谢您的回复。他们帮了很多忙:)

4

2 回答 2

9

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

于 2012-04-03T10:14:26.497 回答
1

您可以创建 SerialPort 类的实例。
在那里您可以定义波特率、端口名等。
在调用 Open() 方法后,您可以从端口读取或写入数据。

var port = new SerialPort();
port.PortName = "COM4";
port.Open();
于 2012-04-03T09:43:32.313 回答