gpt4 book ai didi

delphi - 串行通信 (RTS) 和 Windows 7

转载 作者:行者123 更新时间:2023-12-03 14:51:56 25 4
gpt4 key购买 nike

我正在 Windows 7 下的 Delphi 2010 XE RAD Studio 上开发 Delphi 应用程序。我的应用程序在串行端口上不间断地进行通信。我正在使用 AsyncPro for Delphi 2010。我开发的计算机上的串行通信和其他所有内容都运行良好,没有任何问题。但是,当我的应用程序的发布版本在另一个 Windows 7 系统上运行时,串行通信完全失败。我们探测串行通信本身以寻求答案,发现请求发送 (RTS) 线路在发送所有字节后并未立即断开,而在我的开发计算机上,RTS 线路正确断开。

即使我明确地将 RTS 线降至低或假状态,RTS 线也不会立即下降,而是在 15 毫秒后才下降。因此,我的发行版本上的串行通信失败。

我是否遗漏了有关 Windows 7 和串行通信问题的重要信息?

更新:我刚刚发现我的 Aysncpro 5.0 for Delphi XE 存在错误。真奇怪。当我的 Delphi XE IDE 打开或运行时,我的程序可以完美地通信。当我在程序运行时关闭或关闭 Delphi XE IDE 时,同一程序无法很好地通信或超时。

如果您知道为什么会发生这种情况,请插话。

任何帮助将不胜感激。

谢谢,

最佳答案

对我来说听起来像是计时器分辨率问题。我在尝试使用基于事件的计时器和 timeSetEvent() 写入 USB FTDI 驱动程序时遇到了同样的问题...当 Delphi 加载时,它将计时器分辨率更改为小于 20ms,这使得我的应用程序工作正常。当 IDE 未运行时,我无法在 20 毫秒 +/- 5 毫秒(我认为是默认的 Windows 分辨率)以下运行。

为了解决该问题,我在线程中调用 timeBeginPeriod(1) 来设置最小系统范围计时器分辨率。

我相信这会影响其他基于时间的事件的分辨率,因为当我使用 timeBeginPeriod() 时,我的应用程序中的其他(非多媒体计时器)等待事件的精度优于 +/-5ms >.

所以,我建议的是,在 AsyncPro 代码中的某个地方,它使用了一些基于时间的事件或回调...这将受到加载时 Delphi 对计时器分辨率的更改的影响。尝试在应用启动时调用 timeBeginPeriod(1) 并查看是否有变化。

哦,别忘了在应用关闭时调用 timeEndPeriod(1)

N@

关于delphi - 串行通信 (RTS) 和 Windows 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6139026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com