Windows 7 串行端口缓冲区在Windows 7 x64和x32下的行为是否有所不同

Windows 7 串行端口缓冲区在Windows 7 x64和x32下的行为是否有所不同,windows-7,serial-port,windows-7-x64,usbserial,ftdi,Windows 7,Serial Port,Windows 7 X64,Usbserial,Ftdi,切换到Windows 7 x64后,连接到串行端口的重量指示器设备开始表现出与Windows 7 x32不同的行为 读操作或读缓冲区行为的计时似乎没有什么不同 我正在监视串行端口COM2上的输出,并得到不同的结果: 在x64下显示: 0029484 00 11<CR><LF>z0011807 00 11<CR><LF> 0029489 00 11<CR><LF> 0029486

切换到Windows 7 x64后,连接到串行端口的重量指示器设备开始表现出与Windows 7 x32不同的行为

读操作或读缓冲区行为的计时似乎没有什么不同

我正在监视串行端口COM2上的输出,并得到不同的结果:

在x64下显示:

 0029484       00 11<CR><LF>z0011807       00 11<CR><LF>
 0029489       00 11<CR><LF> 0029486       00 11<CR>
<LF> 0029485       00 11<CR><LF> 0029485      
 00 11<CR><LF> 0029486       00 11<CR><LF> 002948
5       00 11<CR><LF> 0029487       00 11<CR><LF>
 0029487       00 11<CR><LF> 0029488       00 11<CR><LF>
 0029486       00 11<CR><LF> 0029486       00 11<CR><LF>
 0029485       00 11<CR><LF> 0029486       00 11<CR><LF>
 0029910       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029913       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029911       20 11<CR><LF>z0012057       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029909       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029909       20 11<CR><LF>
0029484 00 11z0011807 00 11
0029489       00 11 0029486       00 11
0029485       00 11 0029485      
00 11 0029486       00 11 002948
5       00 11 0029487       00 11
0029487       00 11 0029488       00 11
0029486       00 11 0029486       00 11
0029485       00 11 0029486       00 11
在x32下显示:

 0029484       00 11<CR><LF>z0011807       00 11<CR><LF>
 0029489       00 11<CR><LF> 0029486       00 11<CR>
<LF> 0029485       00 11<CR><LF> 0029485      
 00 11<CR><LF> 0029486       00 11<CR><LF> 002948
5       00 11<CR><LF> 0029487       00 11<CR><LF>
 0029487       00 11<CR><LF> 0029488       00 11<CR><LF>
 0029486       00 11<CR><LF> 0029486       00 11<CR><LF>
 0029485       00 11<CR><LF> 0029486       00 11<CR><LF>
 0029910       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029913       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029911       20 11<CR><LF>z0012057       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029912       20 11<CR><LF> 0029911       20 11<CR><LF>
 0029909       20 11<CR><LF> 0029910       20 11<CR><LF>
 0029910       20 11<CR><LF> 0029909       20 11<CR><LF>
0029910 20 11 0029911 20 11
0029912       20 11 0029913       20 11
0029910       20 11 0029910       20 11
0029910       20 11 0029911       20 11
0029911 20 11z0012057 20 11
0029912       20 11 0029910       20 11
0029912       20 11 0029910       20 11
0029912       20 11 0029911       20 11
0029909       20 11 0029910       20 11
0029910       20 11 0029909       20 11
在Windows x64上,使用这种特殊的权重指示器设备,传入数据块的大小往往更不规则

我知道,这可以在应用程序级别轻松解决,等待完整数据到达读取缓冲区,然后正确处理它,但该串行端口数据目前正在由第三方应用程序处理,我无法修改

我正在使用FTDI USB串行转换器:

Windows中是否有一些系统设置可以解决此问题? 另外,我们有非常类似的问题,另一个重量指示器直接连接到主板上的COM端口。
谢谢您的建议。

这是完全正常的,您在每次通话中获得的数据量对时间非常敏感。程序运行得越快,每次ReadFile()调用得到的字节就越少。获取1或2是正常的,串行端口速度较慢


设备通常会发送额外的字节,以帮助程序确定何时获得完整响应。此比例也可以,只需继续收集字节/字符,直到获得\r\n。不要被调试工具添加的额外换行符所抛弃。例如,如果您使用.NET SerialPort类,那么只需使用其ReadLine()方法即可解决它。

我终于在Win x64下解决了这两个设备的问题,这要感谢FTDI USB驱动程序,该驱动程序具有
延迟计时器
设置

似乎将延迟计时器设置为较低的值(我将其设置为4)可以解决问题。 建议设置为4和以下

在标准Windows驱动程序中更改普通COM端口的设置无效

对于不能正确处理缓冲区的应用程序,这是一种变通方法