您当前的位置:五五电子网电子知识plc技术PLC入门基于VB的远程通讯程序 正文
基于VB的远程通讯程序

基于VB的远程通讯程序

点击数:7636 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   PLC入门
cmdHangUp.Enabled = False
cmdDial.Enabled = True
If Err Then MsgBox Error$, 48
End Sub
Private Sub cmdExit—Click() '单击退出按钮触发的事件过程
Mscomm1.Portopen=False '关闭串口
End
End Sub
Private Sub cmdOrder—Click() '单击查询按钮触发的事件过程
Dim temp
Dim order() As Byte
order = StrConv(Chr(0) + "aa" + Chr(13), vbFromUnicode) '查询命令串
'strconv()函数的功能是将Unicode字符串转换为ASCII码字符串
temp = order
MSComm1.Output = temp
'通过与串口联接的调制解调器向远端电源控制器发送查询命令
ReceiveData '查询接收48字节的数据
End Sub

3.2 事件驱动通讯
  事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,当输入缓冲区中收到字符或是输出缓冲区空时,需要通知程序以便处理,在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。
  下文给出的用事件驱动方法设计的通讯程序与上面的查询通讯程序具有相同的窗口界面和功能。在实现过程中,要把查询通讯程序的查询接收子程序去掉,这是因为在事件驱动的通讯中,接收数据都是在OnComm事件过程里完成的。并且,在Form—load事件过程中将Rthreshold属性值设为1。在程序设计时,还要引入一个窗体级变量comstate,指示串口当前的状态。下面只给出OnComm 事件过程。
Private Sub MSComm1—OnComm()
Dim temp As Variant
Dim tempbyte() As Byte
Select Case MSComm1.CommEvent
'根据不同的CommEvent属性的值来确定引起OnComm事件的具体原因,然后进行不同的处理
Case 2 'MSCOMM—EV—RECEIVE=2
temp = MSComm1.Input '从缓冲区中读出接收到的数据
tempbyte= temp '将接收到的数据的类型转换为字节数组类型
Dim k As Integer
Static i As Integer
For k = LBound(tempbyte) To UBound(tempbyte)
If comstate=0 Then 'comstate=0, 串口处在拨号状态
If tempbyte(k)=13 Then
'判断是否收到调制解调器回送的结果码结束符回车符
comstate=1 '拨号成功
End If
Else 'comstate=1,串口处在接收数据状态
databuffer(i)=tempbyte(k)
i=i+1
If i=47 Then
i=0
End If
Next k
End Select
End Sub
  以上,我们讨论了用VB实现远程数据通讯的两种方法。需要注意的是,用查询方式进行通讯程序设计时,要对输入缓冲区中的数据及时处理,保证数据的正确接收。例如,在输出调制解调器拨号命令后,程序就立即查询调制解调器的回送结果码;而向电源控制器发出查询命令后,程序就立即查询接收上报的数据。如果在数据量大,功能比较复杂的通讯程序中,就应该采用事件驱动的通讯方法,保证通讯的可靠性。

上一页  [1] [2] 


本文关键字:程序  PLC入门plc技术 - PLC入门