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

本文关键字:适配器 错误 USB COM 通信 | 更新日期: 2023-09-27 18:03:22

我有一个从COM端口读取数据的c#应用程序。大多数时候,我使用带有串行适配器的设备和带有串行端口的机器。然而,带有串行端口的机器越来越难以获得,所以我已经开始使用带有USB/串行连接的机器。

在某些情况下,我所拥有的c#代码在"真正的"串行连接下工作得很好,但在USB/串行连接下失败。数据是碎片化的,数据的第一部分进来(比如可能是前1或2个字符),没有其他内容。

我使用了一些基本的东西,比如port. readeexisting()来从端口获取数据。这是问题的一部分吗?是否有其他方法可以保证在单个字符串中读取所有数据?

最后,我想补充的是,我已经在设备管理器中使用了一些USB/串行设置,并且当使用好的,ole的超级终端时,数据会很好。所以它必须在代码中出现

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

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

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

这需要你手动组合数据块,因为你可以接收字符串的一部分,但是一旦你检测到单个"记录"的边界,你可以在让IO接收更多事件的同时停止处理该记录。

这允许一些异步IO,不会阻塞你的线程,从而允许更有效地处理数据。我不知道它是否对您的具体情况有所帮助,但它在过去帮助我处理数据读取问题,低速,线程池和锁定。