利用VB编写串口通信程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第26卷第2期唐山师范学院学报2004年3月Vol. 26 No.2 Journal of Tangshan Teachers College Mar. 2004
利用VB编写串口通信程序
李小慧
(唐山师范学院计算机系,河北唐山 063000)
摘要:通过实例,介绍利用VB进行串行通信编程的方法,即如何通过Mscomm控件进行串口通信数据的读写。
关键词:串口通信;软件;属性;事件;端口
中图分类号:TN919.3 文献标识码:B 文章编号:1009-9115(2004)02-0084-03
自动化是人类一起努力的目标,期待以其他的方式来代替人类完成一些困难或者是周期性的工作。计算机自从诞生以来,经过不断的发展,功能不断提升,软硬件各方面均有长足的进步。Visual Basic(简称VB)是一种在窗口操作平台上的视觉开发工具,使得开发更方便快捷。
现代的世界是一个高度自动化的世界,各种设备都可以和计算机作连线,而最简单的自动化连线方式就是使用串行通信。VB提供了串行通信控件,让开发者可以方便快捷地开发串行通信程序。利用计算机进行串口通讯是自动化将来发展的一种方向。
1串行通信的实现
1.1实现方式
利用VB进行串口通信的开发,主要是使用一个控件:Mscomm控件。它的目的是为了让用户设计一个系统可以和串行端口进行沟通及传送数据,提供了下列两种方式来处理信息的流动:事件驱动:是处理连接端口通信的一种有效方法。当有事件发生时,程序会被告知。例如,在有一个字符到达或者一个变化发生时,程序都可以利用Mscomm控件来侦测并处理这些通信事件及通信错误。预先将程序写入控件的事件程序区块中,一旦事件发生即可自动执行该段程序。
程序通过检查CommEvent属性的值来循环查询事件和错误。例如,对于某些程序,并没有必要每接收一个字符时都产生事件,有时需要接收多个字符或数据包后再回应。固定地向设备查询状态的方式较好。
这两种方式都可达到数据读写的目的,使用时要看实际系统环境而定。
1.2控件属性
在利用Mscomm控件进行编程以前,首先要了解一下这个控件的主要属性:
CommPort:设置或返回通信连接端口代号。程序必须指定所要进行通信的端口号,系统才会使用它与外界进行通信。端口号的范围是1-16,一般的计算机只有一个或两个端口号,因此一般我们使用的端口号的范围就是1-2。
Settings:设置初始化参数。以字符串的形式设置或返回连线速度、校验码、数据位、停止位四个参数。连线速度又叫波特率,即每秒通信的以Bit为单位的数据量,一般使用9 600、4 800等波特率。
PortOpen:设置或返回通信连接端口的状态,即端口的“打开”和“关闭”两种状态。使用串口进行通信前要打开串口,使用完毕后要关闭串口。在VB中用逻辑值True代表打开,False代表关闭。
Input:从输入寄存器返回并删除字符。即从串口读取数据并清除寄存器中已被读取的数据。
Output:将欲传送的数据写入传输寄存器。即向串口写数据。
InputLen:指定由串行端口读入的字符串长度字节个数。
Rthreshold:设置或返回引发接收事件的字长数,即“最小接收字符数”。当接收寄存器达到所设置的
──────────
收稿日期:2002-12-22
作者简介:李小慧(1977-),女,河北唐山人,唐山师范学院计算机系助教。
- 84 -
李小慧:利用VB编写串口通信程序
字节数时,将会引发OnComm事件中的接收事件。默认值为0,即寄存器中有多少字符均不引发接收事件。
CommEvent:只要有通信错误或事件发生都会产生OnComm事件,CommEvent属性存有该错误或事件的数值码。CommEvent会返回这些数值码中的一个数值,来表示通信错误或事件。例如,ComEvReceive 数值,它的意义就是收到Rthreshold个字符或字节。该事件将持续产生直到用Input发生从接收寄存器中删除数据。
1.3程序实例
我们用一个简单读写的例子来说明如何进行串口通信。
建立一个EXE文件,在Form1中分别添加5个对象:Text1文本,用来输入要传输的信息;Command1按钮,用来发送数据,将Text1中的字符写入传输寄存器;Command2按钮,用来接收数据,即从串口的寄存器中读取数据并删除字符;List1列表框,依次显示从串口寄存器中读取的数据;Mscomm1控件,利用它的属性进行串口通讯。
程序如下:
Private Sub Command1_Click() ‘发送数据函数
Mscomm1.Output = Text1.Text ‘将Text1中的字符串写入传输寄存器
End Sub
Private Sub Command2_Click() ‘判断串口是否打开,如果没有打开,打开串口并初始化
If Mscomm1.PortOpen = False Then
Mscomm1.PortOpen = True
Mscomm1.Settings = "9600,n,8,1" '9600波特率,无校验,8位数据位,1位停止位
Mscomm1.InputLen = 1 ‘设定串口读入的字符串长度为1
Mscomm1.RThreshold = 1 ‘当接收寄存器达到1个字符时,引发接收事件
End If
End Sub
Private Sub Form_Load() ‘窗体装载函数
mPort = 1 '设定Com1用来进行串口通讯
- 85 -
第26卷第2期唐山师范学院学报2004年第2期
- 86 - If Mscomm1.PortOpen = False Then
Mscomm1.PortOpen=True
End If
Mscomm1.OutBufferCount = 0 '清空发送缓冲区Mscomm1.InBufferCount = 0 '清空接收缓冲区
End Sub
Private Sub Mscomm1_OnComm() ‘显示接收数据函数
Dim buffer As String ‘定义buffer为字符串
buffer = Mscomm1.Input ‘将接收寄存器中的字符赋值给buffer
List1.AddItem buffer ‘将buffer的值加入到列表框中显示出来
End Sub
程序编写完毕,就可以连接上其它进行串口通信的设备,进行调试。
2结论
利用VB中的Mscomm控件进行串口通信是一种方便和快捷的方式,主要利用该控件的Input方法从串口中读取数据,利用Output方法向串口写数据。在自动化过程中,从串口读写数据是最基础的工作,利用VB可以非常方便和快速地从串口中读取数据,而且VB界面比较友好,因此利用VB编写自动化控制程序是非常方便和有效的。
参考文献:
[1] 范逸之,陈立元.Visual Basic 与RS-232 串行通信控制最新版[M].北京:中国青年出版社,2000.
[2] 刘瑞新,汪远征.Visual Basic 程序设计教程[M].北京:机械工业出版社,2000.
[3] 龚建伟.Mscomm控件使用详解用[EB/OL].(龚建伟技术主页), 2001-07-26.
[4] 易兵.VB串口编程的几个问题[EB/OL].(龚建伟技术主页),2001-08-02.
Use VB to Program Serial Communication Program
LI Xiao-hui
(Department of Computer Science, Tangshan Teachers College, Hebei Tangshan 063000, China)
Abstract: Introduce the application of Mscomm Control and how to use its parameters. Introduce the method to use VB6 to program the serial communication program through examples, mainly in how to use Mscomm Control to read data form serial port or write data into serial port.
Key words: serial communication; software; property; event; port
责任编辑、校对:田敬军