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

C#COM端口通信-USB到串行适配器错误,c#,usb,serial-port,C#,Usb,Serial Port,下面是一个场景——我有一个从COM端口读取数据的C#应用程序。大多数情况下,我使用带有串行适配器的设备和带有串行端口的机器。然而,具有串行端口的机器越来越难以获得,因此我开始使用具有USB/串行连接的机器 在某些情况下,我拥有的C#代码在“真正的”串行连接下可以正常工作,但在USB/串行连接时会失败。数据以片段的形式出现,数据的第一部分出现(可能是前1或2个字符),而没有其他内容 我正在使用comport.ReadExisting()之类的基本工具从端口提取数据。这是问题的一部分吗?是否有其他方

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

在某些情况下,我拥有的C#代码在“真正的”串行连接下可以正常工作,但在USB/串行连接时会失败。数据以片段的形式出现,数据的第一部分出现(可能是前1或2个字符),而没有其他内容

我正在使用comport.ReadExisting()之类的基本工具从端口提取数据。这是问题的一部分吗?是否有其他方法可以保证所有数据都在单个字符串中读取


最后,我想补充一点,我已经在设备管理器中使用了一些USB/串行设置,当使用好的ole超级终端时,数据会很好地显示出来。因此,它必须是代码中的某些内容。

大多数情况下,您都希望使用SerialPort.DataReceived事件()

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


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

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

Im假设您指的是comport.ReadTimeout,它已经设置为20000(即20秒)???我找不到任何其他接近的超时this@Jim:在Win32 API中,有直到第一个字符的超时、字符之间的超时和总超时。不确定.NET SerialPort类是否提供了所有这些。我没有使用它很长时间,直到它变得非常痛苦,我围绕Win32串行端口API制作了自己的包装器(用C++/CLI)。字符之间的超时听起来像是正确的,因为我得到了一些数据,但不是全部数据。但是我在使用.NET库上投入了太多的精力,因为它在大多数硬件配置中都能正常工作-问题在于USB/串行连接。我已经在使用这个事件了,我正在使用comport.ReadExisting,它应该会清除缓冲区,但是,我只得到了数据的一小部分。你认为接收到的数据有协议吗。这可以是一个以换行符结尾的字符串,也可以是一些固定数量的数据。查看代码会有所帮助。