用VB6.0实现设备串口通信及监控功能:vb6.0串口通信编程
摘要:在实际应用中,串口是计算机与外部串行设备之间常用的数据传输通道。本文介绍了串口通信的基本原理和函数,提出了在windows环境下实现串口通信的一般方法和步骤,并在VB6.0下编程实现。
关键词:串口通信;监控;VB6.0
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31487-01
VB6.0 Equipment with Serial Communication and Monitoring Capabilities
GU Huan-yu
(Shanghai Telecom Technology Development Ltd.,Shanghai 200065,China)
Abstract:In practical applications,the computer serial port and external serial devices commonly used data transmission channel.This paper introduces the basic principles of serial communication function and presented in windows environment serial communication under the general methods and steps, and Visual Basic 6.0 programming under.
Key words:Serial Communication;Monitor;VB6.0
1 引言
计算机串口是通过串行通讯方式进行通信,即一条信息的各位数据被逐位按顺序传送。串行通讯的特点是:数据位传送按位顺序进行,最少只需一根传输线即可完成,成本低、速度较慢,距离可以从几米到几千米。数据通讯量不是很大时,在工控领域广泛地使用串口通信对设备进行监控。
2 问题描述
为了完成对IP网关相应设备是否正常的监视,包括监视输入线路馈电是否正常,控制前端机完成对使用线路与备用线路之间的切换,随时查询控制状态和监视结果,设计计算机串口通信程序。
通讯指标:通信方式为波特率9600bps的主从半双工串行方式,数据包内字节间最大时隙1.5ms,前端机对主站下行指令的最大响应时间为10ms。
数据包格式为:
(3)校验字为长度字和数据字符段的模256算术和。
3 设计思路
系统主要实现以下功能,即对设备发送读指令,读取设备状态;对设备发送控制指令,控制设备动作。下面以N=0(设备号为0)为例,简单说明程序设计的思想。
(1)系统初始化,系统对N=0的设备发出写控制字命令,所有线路走A路。监测前端机返回状态。
(2)监测线路状态,向前端机发出读状态字命令,分析前端机返回状态,并通过可视界面即时显示。
(3)控制设备:如切换电路等,由系统向设备发出写控制字命令,控制设备动作,通过监测前端机返回状态,判断动作是否成功完成。
4 系统实现
随着Windows的广泛应用,越来越多的微机用户已习惯于Windows操作系统。现在有诸多应用软件都可以帮助我们比较方便实现以上功能,编程工作量相对较小,只需进行主要应用功能的编程和少量界面控制的编程。VB的通讯控件友好、功能强大,编程速度快,加上VB的易学、易用,快速开发等特点,数据通讯量不是很大时,在单片机通讯领域广泛地使用VB开发PC上层通讯软件。下面以VB6.0为例简要说明串口通信的实现。
在VB的控件工具箱中,提供了一个使用非常方便的串行通讯控件MSComm,它全面的提供了使用RS-232串行通讯上层开发的所有细则,它既可以使用查询方式又可以使用事件驱动方式来完成串行通讯。在窗体中加入MSComm控件, 取名为MSComm1, 加入Command命令按钮并取名为initialize. 写入以下代码实现系统初始化:
Private Sub initialize_Click()
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.InBufferSize = 40 "设置MSComm1接收缓冲区为40字节
MSComm1.CommPort = 1
"设定Com1
If MSComm1.PortOpen = False Then
MSComm1.Settings = "9600,n,8,1"
"9600波特率,无校验,8位数据位,1位停止位
MSComm1.PortOpen = True
"打开串口
End If
MSComm1.OutBufferCount = 0
"清空发送缓冲区
MSComm1.InBufferCount = 0
"清空接收缓冲区
outL(0) = "10"(十进制)
outL(1) = "18"
outL(2) = "208"
outL(3) = "0"
……
outL(19) = "0"
outL(20) = "226"
outL(21) = "13" (outL数组设为Byte 数据类型,存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。)
MSComm1.Output = outL
With MSComm1
.InputMode = comInputModeBinary "设置接收数据模式为二进制形式
"为了实现实时监测功能,接收数据的读取要尽可能的快速,则设置MSComm1的属性如下:
.RThreshold = 1"设置接收一个字节产生OnComm事件
.InputLen = 1 "设置Input 一次从接收缓冲读取字节数为1
.OutBufferCount = 0 "清除发送缓冲区
MaxW = -99 "最大值赋初值
MinW = 99 "最小值赋初值
w = 0 "数据个数计数器清零
If .PortOpen = False Then"判断通信口是否打开
.PortOpen = True "打开通信口
If Err Then"错误处理
MsgBox "串口通信无效"
Exit Sub
End If
End If
End With
End Sub
控件MSComm提供了一个事件OnComm,该事件可以截取串口的任何消息,转入事件处理程序。OnComm可以扑获通讯时发生的串口事件和错误信息,当有串口事件或错误发生时,VB会立刻触发一个OnComm事件,程序就会自动转入OnComm事件处理程序中。MSComm1_OnComm的事件处理程序只处理 comEvReceive事件,首先判断帧数据的开始字节,关闭OnComm接收事件,然后接收数据字节。具体源代码如下:
Dim ab(6) As Byte "字节数据类型数组,用来存储接收到的一组字节数据
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 Dim av As Variant "用来从接收缓冲区读取数据
Private Sub MSComm1_OnComm()
With MSComm1
Select Case .CommEvent"判断MSComm1通信事件
Case comEvReceive"收到Rthreshold个字节产生的接收事件
av = .Input"读取一个接收字节
ab(1) = av(0)"转换保存到字节数据类型数组
If ab(1) = 10 Then"判断是否为数据开始标志
RThreshold = 0"关闭OnComm事件接收
Do
Loop Until .InBufferCount >= 5
"循环等待MSComm1接收缓冲区>=5个字节
w = w + 1 "计数器累加计数
For i = 2 To 6
av = .Input "读取第二个数据字节(BCD码高位字节)
ab(i) = av(0)"转换保存到字节数据类型数组
Next i
Else
MsgBox "接收数据错误", vbOKOnly, "提示"
Exit Sub
End If
.InBufferCount = 0"清除接收缓冲区
.OutBufferCount = 0 "清除发送缓冲区
End With
End Sub
读状态,响应状态的程序设计也是相似的,但接收到响应状态字需要分析数据。
5 结论
本系统利用VB6.0下的ActiveX控件的串行通信功能,实现了在Windows环境下用单台PC机监控的任务,完成对IP网关相应设备是否正常的监视,监视输入线路馈电是否正常,控制前端机完成对使用线路与备用线路之间的切换,可随时查询控制状态和监视结果。且可结合数据库,纪录通话时间等,模拟交换机功能。整个控制系统灵活方便,具有很大的实用性。
参考文献:
[1]范逸之,陈立元.Visual Basic与RS-232串列通信控制(最新版).清华大学出版社,2002.
[2]Evangelos Petroutsos,Kevin Hough. Visual Basic 6高级开发指南.电子工业出版社,1999.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
