C#Serial在一个端口上与多个设备通信

时间:2012-04-03 09:26:45

标签: c# serial-communication

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

最诚挚的问候 CVR

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

2 个答案:

答案 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();