VB6 - 通过RS232线路/ COM端口读取一位

时间:2014-05-16 13:23:35

标签: vb6 serial-port

我目前正致力于在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上得到“无变量”和“”。使用Powershell我可以看到COM1端口正在工作。

关于我做错的任何想法?

2 个答案:

答案 0 :(得分:1)

  

连接引脚2和3(RXD和TXD)之间的开关

这会产生环回。
这仅在您的程序发送测试消息时才有用 如果没有收到任何信息,则开关仍然打开。当开关关闭时,程序将开始接收它发送的消息。

  

关于我做错的任何想法?

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

答案 1 :(得分:0)

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

OnComm活动

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

语法

Private Sub object_OnComm ()

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

部分描述 object一个anobject表达式,其值为“应用于”列表中的一个对象。

说明

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