【问题标题】:Is .NET SerialPort reliable at 115200 bps?.NET SerialPort 在 115200 bps 时是否可靠?
【发布时间】:2014-03-21 17:43:23
【问题描述】:

我需要通过 RS232 以 115200 bps 连接设备。距离很短(不到一米)。没有硬件或软件握手。交换的消息也很短:10 - 50 个字节。消息交换的频率 - 每秒最多 10 次。

我曾经使用相应的 Win API 在 C/C++ 的这种环境中可靠地处理通信。但是,这一次我想在 .NET/C# 中进行。

前段时间,我看到一篇关于 .NET 串行端口的文章。据我回忆,作者不推荐使用SerialPort 类。相反,他从托管代码中选择了非托管 Win API。我不确定这篇文章是否提到了 .NET 1.1。

有人知道使用SerialPort 管理是否安全吗?

【问题讨论】:

  • 你不能试试吗?我想该协议必须包含某种校验和/方法来验证消息。让它继续运行并检查您收到了多少丢弃的消息。
  • 我无法想象开发平台的选择会影响可靠性。鉴于 .Net 可靠地为其他形式的 IO 提供高出 1000 倍的带宽,我敢肯定,任何可靠性问题都是由其他因素引起的。只需连接到SerialPort.BaseStream 并像阅读任何其他流一样阅读它。这是一条人迹罕至的道路,不太可能出错。
  • SerialPort 是一个巨大的痛苦(尤其是使用 USB/串行适配器),但我认为速度不是问题之一。
  • 是的,我确实在设备上尝试过,并注意到使用非托管 C/C++ 代码的失败率(例如,由于 NAK 重试或设备没有回复)远低于类似托管的使用 SerialPort 的代码。我可能会在托管代码和设备之间放置一个嗅探器,以查看消息是否按预期发送到设备并从设备接收。不过,我想知道是否有人遇到过 .net 的特定限制。
  • .NET SerialPort 类是操作系统 API 的一个非常薄的包装器。您还在非托管程序中使用的那个。它当然不会添加任何数据损坏模式。只是出现问题时您不能也不应该忽略的例外情况。这肯定会发生,尤其是使用 USB 仿真器时,许多程序员更喜欢射击 Messenger。

标签: c# .net serial-port


【解决方案1】:

SerialPort 工作正常。可以说它本可以实现得更好,但每秒 10 条消息,每条 50 字节,每条 115k 对现代 PC 来说是微不足道的工作量(为了比较,请记住 PC 能够从 10G 以太网链路接收数据)。在引擎盖下,操作系统/驱动程序缓冲数据,因此无论您是从 C++ 还是 C# 读取该缓冲区都不会产生太大(如果有的话)差异。

SerialPort 不适用于 USB 串行端口......但那是因为 USB 出了名的不可靠。插入 PCI 串行卡或通过以太网连接到终端服务器,SerialPort 工作正常。使用 C++ 程序中的 USB 到 RS232 转换器并返回故障。得出你自己的结论...

我们运行的系统有 18 个以不同速度运行的串行端口(几个以 115k 和 10hz,数百字节的数据包),并且从未遇到过 SerialPort 的任何问题(仅使用 USB-to-RS232 转换器!)

试一试...原型应该不会花很长时间...

【讨论】:

    【解决方案2】:

    值得注意的是,这里的重点不是代码或计算机是否可以在 115kbps 下工作,而是您的电缆、串行硬件、外部设备和环境是否可以在这些速度下工作.

    如果您处于电气安静的位置,并且在短期内使用良好的屏蔽电缆,那么您可能没问题。如果您在产生大量电气噪声且电缆劣质的大功率工业机器附近工作,那么您肯定不会好起来的。在高速 RS-232 通信的电噪声工业环境中,我肯定遇到过问题。在这些情况下,必须使用高质量电缆并降低传输速率,直到通信变得稳定且无错误。如果这是一个问题,没有什么可做的,只能自己测试一下。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多