首页 文章

C#COM端口通信 - USB到串行适配器的错误

提问于
浏览
2

这是场景 - 我有一个从COM端口读取的C#应用程序 . 大多数情况下,我使用带有串行适配器的设备和带有串行端口的计算机 . 但是,具有串行端口的机器越来越难以获得,因此我开始使用具有USB /串行连接的机器 .

在某些情况下,我所拥有的C#代码可以正常使用“真正的”串行连接,但无法通过USB /串行连接 . 数据的第一部分进入碎片(可能是前1或2个字符)而没有别的 .

我正在使用类似comport.ReadExisting()的东西来从端口获取数据 . 这是问题的一部分吗?是否有其他方法可以保证所有数据都可以在一个字符串中读取?

最后,我想补充一点,我已经在设备管理器中使用了一些USB /串行设置,并且在使用良好的“超级终端”时数据会很好 . . . 所以它必须是代码中的东西 .

2 回答

  • 2

    使用USB串行转换器,您必须设置接收超时,因为数据可以长时间位于USB设备中,Windows不知道它 . 真正的串行端口将数据保存在16550 FIFO中,Windows驱动程序可以在其中看到它 .

  • 1

    大多数情况下,您希望使用SerialPort.DataReceived事件(http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx) .

    这需要您手动组合数据块,因为您可以接收部分字符串,但是一旦检测到单个“记录”的边界,就可以激活处理该记录,同时让IO接收更多事件 .

    这允许一些异步IO不会阻塞您的线程,因此通常可以更有效地处理数据 . 如果它对您的具体情况有帮助我不知道,但它在过去处理数据读取问题,低速,线程池和锁定时帮助了我 .

相关问题