利用VB6.0中MSComm控件实现串口通信
2016-07-06安明浩石磊
安明浩 石磊
摘 要:使用VB6.0中的MSComm通信控件的属性和事件进行编程操作,实现上位机与仪器的RS232C串口通信。
关键词:MSComm控件;实现;串口通信
1 程序要求
现有检测仪器一台,使用RS232C串口与计算机进行通信。该仪器输出为RS-232C标准接口,波特率为300~9600,无奇偶校验,8个数据位,1个停止位。所有命令均发送8位16进制数值。仪器在按下“检测开始”按钮后,不需要计算机进行任何操作,会主动发送代表仪器当前状态及检测数值的8位16进制数,要求上位机通过RS232C串口与仪器进行通信,提示用户当前的仪器工作状态并将检测的结果数值显示在上位机上。
仪器RS232C通信协议。
例:
延时发送[机器码][命令号0x33][延时命令高0x00][延时命令低0x01][延时时间高8位][延时时间低8位][CRC校验低8位][CRC校验高8位]
机器码:0x11
编写VB6.0程序来访问串口,读取检测仪器上显示的状态及数据。
2 程序编写
(1)首先进行VB6.0通信控件的添加。在VB6.0的“工程”菜单下面选择“部件”子菜单,在控件栏中勾选“Microsoft comm control6.0”就可以在工具箱里面看到该件,将该控件添加到窗体上即可。
(2)在测试窗体上添加一通信控件命名为“MSComm1”,并在窗体的Load事件中设置串口并开启串口。
With MSComm1
.CommPort = 1
.Settings=”9600,N,8,1”
.InputMode= comInputModeBinary‘设置接受数据的类型是二进制类型数据
.InputLen=0 ‘讀取接收缓冲区中全部的内容
.InBufferCount=0 ‘清空接收缓冲区
.OutBufferCount=0 ‘清空发送缓冲区
.SThreshold=0 ‘一旦发送数据就触发OnComm()事件来检测是否返回数据
.RThreshold=1 ‘接收到1个字节数据就立即触发OnComm()事件
.CommPort=1 ‘使用第一个串口
.PortOpen=True ‘打开串口
End With
需要注意的是,要在使用完串口后将其释放,所以在窗体的Unload事件中将串口资源释放。
With MSComm1
.PortOpen = False
End With
(3)双击窗体上的MSComm1控件,进入控件的MSComm1_OnComm事件,并添加下列代码。
Private Sub MSComm1_OnComm() 定义接收16进制数值的数组
Dim Receiveing()As Byte,Received(20)As Byte
Dim Lenth As Integer,i As Integer‘定义中间变量
Static n As Long
If MSComm1.CommEvent = comEvReceive Then ‘仪器有应答
Receiveing = MSComm1.Input ‘读取报文
Lenth = UBound(Receiveing) ‘收到lenth个字符
For i = 0 To Lenth
Received(n + i)= Receiveing(i)‘将后续读到的报文叠加到数组中
Next i
n = n + Lenth + 1 ‘计算总长度
If n >= 8 Then ‘收到了全部的报文
RecievieData = 1 ‘接收报文长度正确标记位
XvgData = Received ‘存放接收的报文
End if
End if
End sub
上述添加的代码用于读取从仪器发来的二进制数值,并存储到XvgData 数组中,等待使用。
3 结束语
以上程序为说明VB6.0利用MSComm控件的通信过程,仅给出了通信部分的程序,其他部分,如CRC校验、状态如何显示、数值如何处理及存储部分因为不是要说明的主要部分所以未做进一步的说明。
利用VB6.0的MSComm控件可以快速开发出串口通信程序,从而大大提高编程的效率。
参考文献
[1]范逸之,陈立元.Visual Basic与RS-232串行通信控制[M].中国青年出版社,2002.
(作者单位:加野麦克斯仪器(沈阳)有限公司)