2014-05-16 80 views
2

我目前正致力于在VB6上编写一个小脚本来替换在UNIX计算机上运行的脚本。该脚本所做的是等待UPS系统关闭交换机,然后由COM端口接收交换机,然后驱动程序关闭UNIX计算机。我想为Windows PC做这件事,但它给我带来一些麻烦。VB6 - 通过RS232线/ COM端口读取一个位

根据我的示意图,我搭建了一个连接器,用于桥接引脚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

我不确定如何将RD&TD结果缩短为有效字符,或者完全没有。使开关切换RS-323控制线中的一个似乎更有意义。通常至少使用某种形式的RS-232信号缓冲器,而不是简单地使电线短路以进行接触。 – Bob77

+1

我会尝试写入端口,并短暂超时。然后我会监控接收到的数据事件处理程序是否被触发,这意味着交换机已关闭 –

回答

1

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

那将造成一种环回。
这只有在您的程序发送测试消息时才有用。
如果没有收到,则交换机仍处于打开状态。当交换机关闭时,程序将开始接收它发送的消息。

关于我在做什么的错误?

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

+0

非常感谢!它像一个魅力一样工作! – Panagiotis

0

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

OnComm事件

生成OnComm事件每当的CommEvent属性的值发生变化,这表明无论是通信事件或发生了错误。

语法

Private Sub object_OnComm() 

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

部分描述 对象对象表达式在应用到列表中的一个对象。

备注

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