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

时间:2014-11-28 08:11:20

标签: windows-7 serial-port windows-7-x64 usbserial ftdi

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

看起来读操作或读缓冲器行为的时间差别不大。

我正在使用SerialWatcher监视串行端口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>

在x32下,它显示:

 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>

使用此特定体重指示器设备,Windows x64上的传入数据块的大小往往更不规则。

我知道这可以很容易地在应用程序级别修复,等待完整的数据进入读取缓冲区然后正确处理,但此串行端口数据当前正由我无法修改的第三方应用程序处理。

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

settings

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

2 个答案:

答案 0 :(得分:2)

这是完全正常的,每次通话中获得的数据量都是时间敏感的。程序运行得越快,每次ReadFile()调用获得的字节越少。获得1或2是正常的,串行端口很慢。

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

答案 1 :(得分:0)

我最终修复了Win x64下两个设备的问题,感谢FTDI USB驱动程序设置为Latency timer

似乎将Latency timer设置为较低的值 - 我将其设置为4 - 解决了问题。 建议设置为4和波纹管。

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

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