【发布时间】: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