环境: WinXP;PowerBuilder 11.5 (尽管可能不相关,因为这部分几乎全部是WinAPI调用)
我的应用程序打开一个COM端口,以便使用重叠的方法调用进行编写。当应用程序打开时,端口也会打开。该应用程序使端口始终处于打开状态。
有时,连接的设备会停止接收数据,即使应用程序仍在发送数据。应用程序不会收到任何错误消息。停止和重启应用程序并不能解决这个问题。重新启动计算机不能解决此问题。但是,通过超级终端连接可以解决这个问题。
这种特殊的设备打印条形码标签。该应用程序将打印正常,然后突然,它不打印。关闭app;打开并连接超级终端;断开并关闭超级终端;打开app。它又能正常工作了.一段时间。(我在其他也通过COM端口通信的设备上也遇到过类似的问题,所以我知道这不是设备本身的问题。)
我能在网上找到的最接近的类似问题是http://www.eggheadcafe.com/microsoft/Windows-XP-Hardware/30829577/com1-not-behaving.aspx,它谈到了IRQ冲突,但没有提供任何解决方案。我只能猜测我的问题是相似的。
有没有人知道超级终端可能会做些什么来解决问题?
发布于 2011-11-30 00:14:24
我已经使用SetCommState显式地设置了握手方法,似乎已经解决了这个问题。PowerBuilder没有位操作数,所以我必须创建一个方法,将双字符数转换为“1”和“0”的字符数组。我创建了一个相应的方法,将字符数组重新转换为双字符数组。因此,我使用GetCommState获取当前状态,将标志转换为数组,遍历数组复制现有值,除了指定流控制(DTR控件和RTS控件--不确定是否需要这两个值)的值,我将其明确设置为“0”,然后将结果数组转换回双字符数组,并使用SetCommState应用它。
对于那些正在研究的人,请记住DTR控制和RTS控制都是两位。这些值的十进制值为:
CONSTANT ULong fDtrControl_Enable = 2^4
CONSTANT ULong fDtrControl_Handshake = 2^5
CONSTANT ULong fRtsControl_Enable = 2^12
CONSTANT ULong fRtsControl_Handshake = 2^13
CONSTANT ULong fRtsControl_Toggle = fRtsControl_Enable + fRtsControl_Handshake发布于 2015-01-27 10:08:47
好吧,这已经很晚了,但我在许多设备上都遇到过类似的问题,主要是在有USB/COM端口驱动程序的USB设备上。
我发现的症状是COM端口偶尔会自动关闭。我已经将这个问题追溯到两个潜在的问题:
https://stackoverflow.com/questions/8130089
复制相似问题