【问题标题】:Does serial port buffer behave differently under Windows 7 x64 vs x32串行端口缓冲区在 Windows 7 x64 和 x32 下的行为是否不同
【发布时间】:2015-01-26 20:41:39
【问题描述】:

切换到 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 上,传入数据块的大小往往更加不规则。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      感谢具有Latency timer 设置的 FTDI USB 驱动程序,我终于在 Win x64 下解决了这两个设备的问题。

      似乎将Latency timer 设置为较低的值(我将其设置为4)可以解决问题。 推荐设置为 4 及以下。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        相关资源
        最近更新 更多