【问题标题】:VB6 - Reading a single bit over an RS232 line/ COM portVB6 - 通过 RS232 线路/ COM 端口读取单个位
【发布时间】:2014-05-16 13:23:34
【问题描述】:

我目前正致力于在 VB6 上编写一个小脚本来替换在 UNIX 机器上运行的脚本。该脚本所做的是等待 UPS 系统关闭一个开关,然后由 COM 端口接收该开关,驱动程序关闭 UNIX 机器。我想为 Windows PC 这样做,但这给我带来了一些麻烦。

根据我的原理图,我构建了一个连接器,桥接引脚 7 和 8,并在引脚 2 和 3(RXD 和 TXD)之间连接一个开关。打开开关与 UPS 系统做的完全一样。

Private Sub shutdownPC()

Dim inStr As Variant

myCom.CommPort = 1
myCom.Settings = "9600,e,7,1"
myCom.RThreshold = 1
myCom.InputLen = 0
myCom.InputMode = comInputModeBinary
myCom.InBufferCount() = 0
myCom.PortOpen = True

'Shell ("shutdown.exe -s -t01")

If myCom.CommEvent = comEvReceive Then
    inStr = myCom.Input
End If

End Sub

到目前为止,这是我的代码。我已经包含了 MSComm 库并在我的表单中添加了一个 MSComm 对象。当我使用 comInputModeBinary 和 comInputModeText 时,我分别在 myCom.Input 上得到“No variables”和“”。使用 Powershell 我可以看到 COM1 端口正在工作。

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 我不确定短接 RD 和 TD 是如何产生有效字符的,或者根本就没有。让开关切换 RS-323 控制线之一似乎更有意义。通常至少会使用某种形式的 RS-232 信号缓冲器,而不是简单地将电线短接以进行接触。
  • 我会尝试写入端口,但超时时间很短。然后,我将监视接收到的数据事件处理程序是否被触发,这表示开关已关闭

标签: vb6 serial-port


【解决方案1】:

在引脚 2 和 3(RXD 和 TXD)之间连接一个开关

这将创建一个环回。
这仅在您的程序发送测试消息时才有用。
如果没有收到任何内容,则开关仍处于打开状态。当开关关闭时,程序将开始接收它发送的消息。

关于我做错了什么有什么想法吗?

您的程序不能被动等待。
它必须通过发送字节来轮询 UPS,然后检查是否接收到任何数据。

【讨论】:

    【解决方案2】:

    您必须循环或放入事件处理程序,因为您的代码将在外部世界发生任何事情之前执行。循环会浪费电池寿命并减慢计算机速度。帮助文件位于 C:\Windows\HELP\COMM98.CHM。

    OnComm 事件

    只要 CommEvent 属性的值发生变化,就会生成 OnComm 事件,表明发生了通信事件或错误。

    语法

    Private Sub object_OnComm ()
    

    OnComm 事件语法包含以下部分:

    零件说明 object 一个对象表达式,计算结果为“应用于”列表中的对象。

    备注

    CommEvent 属性包含生成 OnComm 事件的实际错误或事件的数字代码。请注意,将 RThreshold 或 SThreshold 属性设置为 0 会分别禁用 comEvReceive 和 comEvSend 事件的捕获。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多