摘 要:隨著串行通信的使用越來越普遍,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.