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

我正在 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加载时,它会将计时器分辨率更改为小于20毫秒,这使我的应用程序正常工作.当IDE没有运行时,我无法在20ms / – 5ms(我相信认的Windows分辨率)下工作.

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

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

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

哦,不要忘记在你的应用程序关闭调用timeEndPeriod(1).

N – [

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...