首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM端口退出工作

COM端口退出工作
EN

Stack Overflow用户
提问于 2011-11-15 08:26:37
回答 2查看 371关注 0票数 0

环境: WinXP;PowerBuilder 11.5 (尽管可能不相关,因为这部分几乎全部是WinAPI调用)

我的应用程序打开一个COM端口,以便使用重叠的方法调用进行编写。当应用程序打开时,端口也会打开。该应用程序使端口始终处于打开状态。

有时,连接的设备会停止接收数据,即使应用程序仍在发送数据。应用程序不会收到任何错误消息。停止和重启应用程序并不能解决这个问题。重新启动计算机不能解决此问题。但是,通过超级终端连接可以解决这个问题。

这种特殊的设备打印条形码标签。该应用程序将打印正常,然后突然,它不打印。关闭app;打开并连接超级终端;断开并关闭超级终端;打开app。它又能正常工作了.一段时间。(我在其他也通过COM端口通信的设备上也遇到过类似的问题,所以我知道这不是设备本身的问题。)

我能在网上找到的最接近的类似问题是http://www.eggheadcafe.com/microsoft/Windows-XP-Hardware/30829577/com1-not-behaving.aspx,它谈到了IRQ冲突,但没有提供任何解决方案。我只能猜测我的问题是相似的。

有没有人知道超级终端可能会做些什么来解决问题?

EN

回答 2

Stack Overflow用户

发布于 2011-11-30 00:14:24

我已经使用SetCommState显式地设置了握手方法,似乎已经解决了这个问题。PowerBuilder没有位操作数,所以我必须创建一个方法,将双字符数转换为“1”和“0”的字符数组。我创建了一个相应的方法,将字符数组重新转换为双字符数组。因此,我使用GetCommState获取当前状态,将标志转换为数组,遍历数组复制现有值,除了指定流控制(DTR控件和RTS控件--不确定是否需要这两个值)的值,我将其明确设置为“0”,然后将结果数组转换回双字符数组,并使用SetCommState应用它。

对于那些正在研究的人,请记住DTR控制和RTS控制都是两位。这些值的十进制值为:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-01-27 10:08:47

好吧,这已经很晚了,但我在许多设备上都遇到过类似的问题,主要是在有USB/COM端口驱动程序的USB设备上。

我发现的症状是COM端口偶尔会自动关闭。我已经将这个问题追溯到两个潜在的问题:

  1. USB/COM驱动程序可能存在导致端口关闭的错误。尝试更新进入计算机的USB线上的driver.
  2. Electrical噪音可能会导致端口关闭。如果您遇到此问题,您可能无法解决此问题以隔离电气环境以便噪音不会通过USB卡进入您不能,您可能必须修改您的应用程序以检测关闭的端口,然后执行驱动程序重置,这与拔出并重新插入USB线是相同的,然后稍作停顿以确保重置确实有效。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8130089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档