第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
vb软件开发
Private Sub Form_Load() ‘窗体装载函数
Mscomm1.CommPort = 1 '设定Com1用来进行串口通讯
- 85 -