切换到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串口转换器:
Windows中是否有一些系统设置可以解决这个问题? 另外我们与另一个直接连接到主板上COM端口的重量指示器有非常相似的问题。 感谢您的任何建议。
答案 0 :(得分:2)
这是完全正常的,每次通话中获得的数据量都是时间敏感的。程序运行得越快,每次ReadFile()调用获得的字节越少。获得1或2是正常的,串行端口很慢。
设备通常会发送额外的字节来帮助程序在获得完整响应时找出答案。这个比例也可以,只需继续收集字节/字符,直到你得到\ r \ n。不要被调试工具添加的额外换行符抛弃。如果您使用.NET SerialPort类,那么您只需使用其ReadLine()方法即可修复它。
答案 1 :(得分:0)
我最终修复了Win x64下两个设备的问题,感谢FTDI USB驱动程序设置为Latency timer
。
似乎将Latency timer
设置为较低的值 - 我将其设置为4 - 解决了问题。
建议设置为4和波纹管。
更改标准Windows驱动程序中普通COM端口的设置无效。
对于不能正确处理缓冲区的应用程序,这是一种解决方法。