串口通信在数据采集中有着广泛的应用,因为串口通信通信线路简单、灵活方便、数据可靠。作为快速开发,利用VB开发串口通信程序既可以使用MSComm控件也可以调用WindowsAPI函数实现。这里我们使用VB6.0提供的MSComm控件,因为MSComm控件的功能和API调用一样强,甚至更好且使用起来更加简单,能很方便地实现所需的串口通信功能。
1.MSComm控件简介
MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动方法,当串口通信产生错误时,MSComm控件会触发OnComm事件,程序员可以在OnComm事件处理函数中加入自己的处理代码。另外一种是查询法。查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。
2.MSComm控件的常用属性
MSComm控件有很多重要的属性,但首先必须熟悉几个关键属性。
CommPort 设置并返回通讯端口号
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口
Input 从接收缓冲区返回和删除字符
Output 向传输缓冲区写一个字符串
3.程序代码设计
利用MSComm控件编写串口通信程序是十分便利和简单的。下面我就事件驱动方式以VB6.0为平台编写了PC间串口通信程序的实例。代码如下:
'串口初始化
PrivateSubForm_Load()
MSComm1.CommPort=1 '设置通信端口号为COM1
MSComm1.Settings="9600,n,8,1" '设置串口参数
MSComm1.InputMode=0 '接收文本型数据
MSComm1.RThreshold=1'接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件
MSComm1.PortOpen=True '打开通信端口1
EndSub
'把字符通过串口发送出去
'启动定时器
PrivateSubCmdsend_Click()
IfTextsend.Text=""Then
pp=MsgBox("发送的数据不能为空!",16)
ExitSub
EndIf
MSComm1.Output=Trim(Textsend.Text)
EndSub
'MSComm的OnComm事件程序
'由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中
'只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive
'因此接收的子程序便会被执行
PrivateSubMSComm1_OnComm()
Dimbuf$
SelectCaseMSComm1.CommEvent
'通过取代每一个case表达式来处理每个事件与错误
CasecomEvCD'CD线的状态发生变化
CasecomEvCTS'CTS线的状态发生变化
CasecomEvDSR'DSR线的状态发生变化
CasecomEvReceive
buf=Trim(MSComm1.Input)'将缓冲区内的数据读入buf变量中
CasecomEvSend
EndSelect
TextReceive.Text=TextReceive.Text&buf
EndSub
'停止程序运行
PrivateSubCmdquit_Click()
UnloadMe
EndSub
'关闭通信端口,
PrivateSubForm_Unload(CancelAsInteger)
MSComm1.PortOpen=False
EndSub
4结束语
本文通过具体实例介绍了如何利用VB6.0中的MSComm控件来实现串口通信。这种串口通信的实现具有一定的普遍性,掌握了以上基本技术,就可以稍加改变来开发适合自己的专用通信软件。