首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于VB 6.0串口通信的气压测高系统数据采集实现

作者:王晓岚 来源:现代电子技术


  摘 要:随着串行通信的使用越来越普遍,Microsoft公司在Visual Basic中设计了MSComm控件,可以很好地完成串行通信的设计。介绍基于VB 6.0 ActiveX控件的MSComm通信控件,实现了PC机对气压测高系统数据采集的串行通信。结果表明,其能够达到同时对多台气压测高接收机进行数据采集,并为后期数据处理提供了原始数据。
  关键词:VB 6.0;串口通信;MSComm控件;气压测高
  中图分类号:TP311.1 文献标识码:A
  文章编号:1004-373X(2010)03-116-03
  
  Implementation of Barometric Altimeter System for Data Acquisition
  Based on VB 6.0 Serial Communication
  WANG Xiaolan
  (National Astronomical Observatory,Chinese Academy of Sciences,Beijing,100012,China)
  Abstract:With the increasingly common use of serial communication,MSComm Control is designed in Visual Basic by Microsoft Corporation,it is well completed the design of serial communication.How to achieve serial communication between PC and barometric altimeter system of data acquisition based on VB 6.0 ActiveX control MSComm communication control is introduced.The results show that the function of data acquisition with multiple barometric altimeter receivers can be reached at the same time,and the raw data is provided for post-data processing.
  Keywords:Visual Basic 6.0;serial communication;MSComm control;barometric altimeter
  
  串口通信在系统控制的范畴中一直占据着极其重要的地位,在规格上越来越完善,应用也越来越广泛,使用串行通信的方式可以达到系统控制的目的。以往,要实现计算机的串口通信需要做大量复杂的工作,如今,Visual Basic 6.0(VB 6.0)在开发可视化环境下的监控系统时有其独特的优势,VB 6.0提供了串行通信控件,可以轻松实现串口数据的交换[1]。本文介绍了基于VB 6.0的ActiveX控件——Microsoft Communication(MSComm)通信控件,实现了PC机对气压测高系统的串行通讯功能,完成了对多台气压测高设备进行数据采集[2]。
  
  1 气压测高测试系统的基本构成
  
  气压测高系统的基本构成如图1所示,由PC机、气压测高基准站以及气压测高接收机三部分组成。PC机通过RS 232接口以及USB-RS 232接口与一个气压测高基准站和多个气压测高接收机相连接。气压测高基准站和每个气压测高接收机通过选用不同的串口端口来区分,这样PC机就可以对基准站和每个接收机进行通信,实现对气压测高基准站以及接收机的数据采集。
  采集到的数据主要用于以下分析:
  (1) 分析不同地点的气压值、温度值以及大地高度值。
  (2) 比较同一地点不同气压测高接收机测量的气压值、温度值以及大地高度值。
  图1 气压测高系统基本构成方框图
  
  2 气压测高接收机的简介
  
  气压测高接收机采用主要器件为:瑞士Intersema公司生产的集成压阻式压力传感器和ADC接口的SMD混合集成模块——MS5534C[3],微控制器选用ATmega8L单片机。气压测高接收机的硬件示意图如图2所示。其工作流程为:气压测高基准站将气象资料(基准站的气压、温度和高度)发送给ATmega8L,同时,ATmega8L采集MS5534C测得的接收机所在位置的气压和温度,利用相关的公式,解算出当地的大地高度,并发送给PC机[4]。
  图2 气压测高接收机的硬件示意图
  
  3 VB 6.0中MSComm通信控件
  
  VB 6.0增加了面向对象程序设计功能,它不仅可以方便快捷地编制适用于数据处理、多媒体等方面的程序,并且提供了一个ActiveX控件——Microsoft Communication Control,Version 6.0,称为MSComm控件,可以方便地开发出使用计算机串口的计算机通信程序。MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。另一种为查询方式,在用户程序中设计定时或不定时查询MSComm控件的某些属性是否发生变化,从而确定相应处理[1]。
  利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。以下是MSComm控件的常用属性和方法:
  Commport:设置或返回串口号,类型short。
  Settings:以字符串的形式设置或返回串口通信参数。
  Portopen:设置或返回串口状态。
  InputMode:设置或返回接收数据的类型。
  Inputlen:设置或返回一次从接收缓冲区中读取字节数,类型short。
  Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。
  Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。
  Rthreshold:当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。
  Sthreshold:当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生OnComm事件。若Sthreshold属性设置为0,则不产生OnComm事件。
  CommEvent:串口事件,该属性设计时无效,运行时只读。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。
  4 利用VB 6.0实现数据采集的串行通信
  在VB 6.0编程环境下,新建工程并引用MSComm控件,在窗体中添加所需控件,构建一个合理的收发界面。 在窗体中还需要添加以下几个基本控件[4]:
  (1) MSComm控件,主要用于软件对串口的访问。由于需要实现多台气压测高接收机的测试,需要添加多个控件。
  
  (2) 定时器控件,用于使PC机定时向各气压测高接收机发送命令,使其定时回传实时数据。
  (3) 非周期命令发送按钮,用于非周期性指令的传送启动。
  (4) 数据保存按钮,用于将采集到数据保存为文本文件,便于数据后处理。
  (5) 用于数据接收数据和发送数据的文本框。
  首先,应对窗体中MSComm控件初始化设置:
  MSComm1.CommPort=com_num//用于选择通信端口
  MSComm1.OutBufferSize=1024//设置发送缓冲区为1 024 B
  MSComm1.InBufferSize=1024//设置接收缓冲区为1 024 B
  MSComm1.InputLen=0//读取接收缓冲区的所有字符
  MSComm1.InBufferCount=0//清除发送区的数据
  MSComm1.SThreshold=1//触发事件
  MSComm1.RThreshold=1//每一个字符到接收缓冲区都触发接收事件
  MSComm1.Settings=″9600,n,8,1″
   //设置通信参数:波特率9 600 b/s,无校验,8位数据,1位停止位
  MSComm1.PortOpen=True //打开通信端口
  其次,窗体中接收部分主程序如下:
  Private Sub MSComm1_OnComm()
   Select Case MSComm1.CommEvent
  Case comEvReceive
   If Option1.Value=True Then//文本方式接收
   MSComm1.InputMode=1//0:文本方式,1:二进制方式
   Else
   MSComm1.InputMode=0//0:文本方式,1:二进制方式
   End If
   If Option1.Value=True Then
   For n=0 To intInputLen-1 //循环接收
   Text1.Text=Trim(Text1.Text) & ″ ″ & IIf(Len(Hex¥(bytInput(n))) > 1,Hex¥(bytInput(n)),″0″ & Hex¥(bytInput(n)))
   Next n
   Else
   teststring=bytInput
   Text1.Text=Text1.Text + teststring //文本方式接收字节
   End If
   End Select
  End Sub
  每个气压测高接收机回传数据时即可以在PC机上引发各自的OnComm()事件,相互之间不存在数据干扰问题,数据采集后分别保存为文本文件,为后期数据处理提供原始数据。
  
  5 结 语
  
  本文介绍了VB 6.0的串行通信控件,分析了串口通信系统硬件构成和主要程序解决过程,有效提高了气压测高系统的测试效率,确保了数据采集的实时性和正确性。通过应用表明,数据采集准确,系统性能稳定,数据后处理方便。
  
  参考文献
  [1]范逸文,陈立元.Visual Basic与RS 232串行通信控制[M].北京:清华大学出版社,2002.
  [2]Steven Holzner.Visual Basic 6.0技术内幕[M].北京:机械工程出版社,1999.
  [3]王伟.新型气压计模块MS5534的原理及应用[J].电子元器件应用,2006,8(11):4-8.
  [4]喻维钢.用VB 6.0实现PC机对多台流量计远程数据采集与监控[J].仪器仪表标准化与计量,2002(6):5-8.
  [5]马潮,詹卫前,耿德根.ATmega8原理及应用手册[M].北京:清华大学出版社,2003.
  [6]高杰,张玉.基于VB的串口通信在虚拟现实系统中的应用[J].电子测试,2009(2):21-23.
  [7]James W Cooper.Visual Basic设计模式[M].赵会群,译.北京:清华大学出版社,2003.
  [8]张崇智.基于VB的串口实时数据采集[J].机电工程技术,2005,34(10):79-81.
  [9]王小茹,吴财军,苏振刚,等.Visual Basic 6.0实例解析[M].北京:北京大学出版社,2000.
  [10]潘天堂,陈熔.基于VB串口通信的空气分析分布式监控系统实现[J].工业控制计算机,2006,19(12):83-90.