葛婉寧 姜明順 張法業 張 雷 隋青美
(山東大學控制科學與工程學院,濟南 250061)
基于VC++的數據采集系統設計與實現
葛婉寧 姜明順 張法業 張 雷 隋青美
(山東大學控制科學與工程學院,濟南 250061)
基于VS2010平臺利用VC++開發了一套適用于RS232、USB、TCP/IP協議通信接口的數據采集系統。該系統實現了監控計算機與嵌入式儀表設備的通信,滿足了不同種類傳感器的數據采集和處理。并通過實驗驗證了系統軟件的穩定性。
數據采集系統 VC++ 軟件設計
隨著計算機技術、數字通信技術、測控技術和智能儀器儀表的快速發展,數據采集處理技術已被廣泛應用于通信、軍事、航空航天及工業等領域,它是計算機與外部物理世界連接的橋梁。數據采集(DAQ)又稱數據獲取,是指從傳感器和其他待測設備等模擬和數字被測單元中自動采集非電量或者電量信號,然后通過PC接口總線送至上位機中進行分析、處理、顯示和存儲[1]。數據采集系統可實現對生產現場的各種環境參量和設備運行狀態的采集、監測和存儲,保證安全生產。而目前智能傳感器或智能儀表等外圍設備與計算機主機系統之間進行信息交換的主要接口包括TCP/IP以太網口、USB接口、RS232接口[2],因此設計一種可通用的應用程序軟件具有一定的實用價值。
針對以上3種不同的通信接口類型,開發了一套上位機軟件系統,該軟件系統采用基于TCP/IP協議的Socket通信、RS232串口通信和USB通信技術,多線程并行工作模式、消息映射機制和SQL Server 2008數據庫,集數據采集、數據分析、數據處理及數據存儲等功能于一體,能及時、準確地監測各類傳感器數據的變化。
1.1 總體方案
數據采集系統結構框圖如圖1所示,由圖可以看出,數據采集系統由3部分構成,即傳感器、數據采集終端和上位機軟件。數據采集終端通過不同種類的傳感器(傳感器A、B、C)完成對被測對象各種參量的獲取,然后通過數據傳輸通道(TCP/IP協議的Socket通信、RS232串口通信和USB通信接口)將采集的數據傳輸給上位機,從而完成對數據的分析、處理、顯示及存儲等一系列功能。

圖1 數據采集系統結構框圖
1.2軟件設計
數據采集系統軟件平臺工作流程可簡化為數據通信、數據分析、數據處理、實時顯示、數據存儲和歷史查詢。圖2為整個系統的軟件流程。

圖2 系統軟件流程
整個工作流程中,數據通信、實時顯示和數據存儲之間需要并行工作,所以將它們放在不同的輔助線程中,而不同線程間的數據傳遞依賴于MFC的消息映射機制,該機制的具體實現方法是:定義一個消息與對應的消息處理函數,當有消息需要處理時,能依照靜態表快速找出并調用對應的消息處理函數[3]。
1.2.1數據通信的實現
數據通信是該軟件系統的核心部分,其余各模塊功能的實現都要以此為基礎。該部分的數據傳輸通道包括TCP/IP協議的Socket通信、RS232串口通信技術和USB通用串行總線技術,為了使不同的數據傳輸手段之間協調工作,采用多線程技術。
針對基于TCP/IP協議的Socket通信的數據傳輸通道,設計了Server端和Client端程序,通信流程如圖3所示。將套接字設計為監聽模式(Listen),根據綁定的地址和端口,準備接受Client端的連接請求,當請求到來后進入主程序,Server端根據不同的頻率設置向Client端發送數據,Client端實現接收、處理、顯示和存儲的功能,最后Client端發出關閉請求,實現了一次完整的網絡通信[4]。

圖3 TCP/IP通信流程
針對基于RS232接口的數據傳輸通道,開啟多線程,每個線程中都需要實現串口通信,基于面向對象的設計思想,設計了CSerialCtrl類,該類主要完成串口資源的申請和釋放,指定輸入、輸出緩沖區的大小,填寫設備控制塊DBC,對已打開的串口進行參數配置(端口設置、波特率設置、校驗位設置、數據位設置),ReadComm()、WriteComm()對串口進行讀寫操作,完成數據的接收和發送。圖4為該過程的流程。

圖4 RS232通信流程
針對基于USB通用串行總線的數據傳輸通道,該通信接口與其他兩種通信接口不同,需要專門的設備驅動程序。在應用程序與人機接口設備(HID)開始通信之前,應該先識別該設備并讀取其報表信息[5,6]。在此利用Windows系統下的API函數獲取設備信息集、識別接口信息、獲取設備路徑名、獲得設備句柄。在成功獲取設備句柄后,就可以使用它與設備進行交換通信。當應用程序結束與設備的通信之后,必須釋放之前保留的資源數據。
1.2.2顯示模塊的實現
軟件設計可分為編碼設計和UI設計,顯示模塊是UI設計的一部分,它是人機交互的重要組成部分。該系統顯示界面的設計以功能實現為基礎,與硬件分布情況相對應,主要包括解調儀參數(頻率、增益及噪聲門限等)的配置、各類傳感器的模擬量數值和變化曲線、數據庫的連接、歷史曲線的查詢和報警查詢。
該模塊中,所有曲線的繪制,都采用TeeChart控件來完成,該控件使用方便,繪圖美觀,只需事先注冊,并設置好相應的參數,便可完成圖形的繪制[7]。繪圖數據的傳遞由消息映射機制,從數據采集線程傳遞給繪圖線程,存放于動態數組中,而動態數組直接映射到內存中,這樣使得對動態數組的訪問和修改速度與計算機的處理速度一致,保證了數據的實時性。
1.2.3數據存儲的實現
在高頻采樣模式下,會產生大量的數據需要存儲,為了保證系統的存儲效率和查詢速度,采用ADO數據庫訪問技術去訪問SQL Server 2008數據庫,該數據庫是表的集合,基于觸發器的設計,完成了不同傳感器向它對應表格中的存儲,實現了歷史曲線的查詢[8,9]。
在對數據庫操作的過程中,首先需要引用支持ADO的組件類型庫,并在程序初始化過程中初始化組件,然后通過實例化ADO的3個核心對象完成對數據庫的連接、插入及查詢等操作。
圖5為基于TCP/IP協議的溫度傳感器的測試結果,圖6為基于RS232通信的紅外CO2傳感器測試結果,圖7為基于USB通用串行通信接口的壓力傳感器的測試結果。

圖5 溫度傳感器顯示曲線

圖6 CO2傳感器顯示曲線
從顯示曲線可以看出,該系統可以在不同的通信傳輸方法下實時地采集各類傳感器的數據,并監測不同參數的模擬量數值和變化趨勢,滿足了不同接口類型和傳輸速率的需求。
經過實驗測試,基于VS2010平臺開發的數據采集系統上位機軟件實現了與不同接口間的數據通信,同時能夠保證采集數據的完整、安全與正確,界面友好,操作簡便,顯示直觀,具有良好的擴展性和兼容性,為功能的擴充和其他系統的集成奠定了良好的基礎。
[1] 祝常紅.數據采集與處理技術[M].北京:電子工業出版社,2008.
[2] 王琳,商周,王學偉.數據采集系統的發展與應用[J].電測與儀表,2004,41(8):4~8.
[3] 孫鑫.VC++深入詳解[M].北京:電子工業出版社,2006.
[4] 劉爽,史國友,張遠強.基于TCP/IP協議和多線程的通信軟件的設計與實現[J].計算機工程與設計,2010,31(7):1417~1420.
[5] 崔巖松,段大高,鄧中亮.USB接口的實時數據采集卡的設計與實現[J].電子技術,2004,(8):43~45.
[6] 夏益民,王光君.基于USB的高速數據采集系統[J].國外電子元器件,2003,(10):33~38.
[7] 吳勝勇,張勝,孫小飛. TeeChart圖形控件在通信檢測軟件中的使用[J].網絡與通信,2009,22(37):88~98.
[8] 王武生,韓艷,倪宏革.基于ADO的SQL Server數據庫訪問技術的研究[J].微機發展,2003,13(11):95~98.
[9] 鄒建.SQL Server 2000開發、管理與應用實例[M].北京:人民郵電出版社,2008.
DesignandImplementationofDataAcquisitionSystemBasedonVC++
GE Wan-ning, JIANG Ming-shun, ZHANG Fa-ye, ZHANG Lei, SUI Qing-mei
(SchoolofControlScienceandEngineering,ShandongUniversity,Jinan250061,China)
Basing on VS2010 platform, making use of VC++ to develop a data acquisition system suitable for RS232, USB and TCP/IP protocol communication interfaces was implemented to realize communication between the monitoring computer and the embedded instrument and to meet data acquisition and processing of different sensors. The experimental results verify stability of the system software.
data acquisition system, VC++, software design
TP274+.2
A
1000-3932(2016)11-1186-04
2016-09-20(修改稿)
國家自然科學基金項目(61174018,41472260,61505097);山東大學基本科研業務費項目(2014YQ009)