我目前正致力于在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端口正在工作。
关于我做错的任何想法?
答案 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事件的捕获。