張海波 畢敬騰 李廷軍
(海軍航空大學航空基礎學院 煙臺 264001)
數據采集(DAQ)是使用計算機測量電壓、電流、溫度、壓力或聲音等電子、物理現象的過程。典型的DAQ 系統由傳感器、DAQ 測量硬件和帶有可編程軟件的計算機組成。與傳統的測量系統相比,基于PC 的DAQ 系統利用行業標準計算機的處理、生產、顯示和連通能力,提供靈活且開發快速的測量解決方案[1~4]。當前基于NI LabVIEW 的DAQ 系統在科研教育領域得到了廣泛的應用。使用Lab-VIEW 開發的數據采集系統,具有可視化編程,結構清晰,開發速度快,運行穩定,支持硬件廣泛的特點[5~7]。
對于簡單的數據采集工作利用LabVIEW 提供的DAQ 硬件示例即可滿足要求。但是該示例僅給出基本的實現方式,并沒有與狀態機及事件處理等程序結構相結合,因而無法滿足實際的開發需求。
在LabVIEW 自帶示例項目中的數據采集結構有生產者消費者模型和狀態機模型。但生產者消費者模型沒有考慮DAQ 系統在不同狀態間轉換的問題。LabVIEW 現有狀態機模型沒有實現有效的采集過程控制和數據處理的分離,如果連續長時間采集大量數據容易造成用戶界面的鎖定和無響應。由于LabVIEW 圖形化編程的特點,導致兩種結構在遇到需要添加大量虛擬控件的時候,如果未合理的設計程序結構,隨著程序規模的不斷擴大,會造成擴展不方便,使得后續程序設計過程復雜繁瑣,增加后續開發的難度[8~11]。
針對以上問題,本文設計一種結合了狀態機、隊列和事件驅動結構的DAQ 數據采集系統,并合理設計了多個結構之間的相對位置,實現后續程序的拓展。
LabVIEW 程序天然是并行執行,因此多個循環之間是并行執行的。要實現控制程序的運行順序,一種思路是采用平鋪式順序執行結構,但是該結構在小規模、簡單的采集中較為合適,隨著程序規模的擴大拖動改變程序框將會給程序的設計帶來巨大的挑戰。另一種思路則是采用數據流控制的方法,即通過VI 之間數據交換的先后順序進行數據控制[12~13]。
本文提出的結構采用第二種思路。經過長期實踐第二種思路可以有效避免隨著程序規模的擴大造成的不斷改變多個框圖大小的問題。
總體上,程序可分為三個部分如圖1所示。

圖1 程序總體結構圖
第一部分是整個程序運行環境設定部分,此處不涉及采集設備的初始化。這一部分的主要作用是設定軟件運行時所需要的中間變量、控件初始狀態、數據文件及數據庫等外部程序環境。這一部分是整個采集系統的起點,因此在運行的時候應是第一個運行,且僅運行一次。
第二部分為數據采集狀態控制結構。其作用是實現整個采集系統的數據采集的開始結束,并針對采集過程中的系統及控制消息進行處理。
第三部分為數據采集執行結構。其主要功能是完成數據的采集、寫入及顯示。
總體上三個部分是相互獨立的。程序運行環境部分僅執行一次完成環境設定,與后面的兩個結構之間的數據交換采用局部變量進行。數據采集狀態控制結構和數據采集執行結構為循環結構。兩個結構之間通過隊列進行數據的交換。下面重點對數據采集控制結構和執行結構進行詳細討論。
根據采集系統的特點,本設計結構將整個小懶蟲過程分為初始化、退出、事件處理、開始采集及結束采集。
初始化狀態完成DAQ、串口等數據采集設備端口的初始化。如圖2所示。

圖2 初始化狀態
退出是在所有采集結束之后完成,因而在退出之前應判斷完成數據采集的DAQ 是否已正確關閉,所采集到的數據是否已正確寫入磁盤數據文件中。
在本文提出的數據采集程序結構中,將事件處理與狀態機相結合。如圖3所示。

圖3 事件處理基本結構
圖3 所示的四個事件中,其中超時是事件結構創建時系統默認的。開始采集事件對應狀態機中的開始采集狀態,停止采集對應狀態機中的停止采集狀態,退出對應狀態機中的退出狀態。此處的三個事件僅是響應界面UI 中開始采集、停止采集和退出三個按鈕的消息,具體的處理過程通過狀態的轉變進入到相應的狀態中進行處理。如果開發者有其他的事件在程序運行過程中進行響應,只需要在事件結構中添加相應事件即可。以上結構可方便的實現功能擴展,二不用更改程序結構。
原有的例程僅是提供演示,并不適合應用于實際的工程項目中。本文結合DAQ 設備采集基本結構進行改進,實現了采集程序結構給出的DAQ 設備數據采集控制與采集過程相分離的結構。
在DAQ 的初始化開始于DAQ 通道創建,在本文的程序結構將其放置于初始化狀態中,如圖4所示。

圖4 DAQ初始化
創建成功則進行DAQ 采樣時鐘及配置記錄相關子VI 的處理,為后續的采集數據準備好硬件。如果發生錯誤,則在主界面中的進行提示。如圖5所示。

圖5 主界面狀態提示
以上工作完成之后如果無錯誤則進入事件處理狀態等待下一步任務,當點擊開始采集按鈕之后,事件處理程序將當前的狀態改變到開始采集狀態,通過DAQmx 任務開始子VI 使程序開始采集。如圖6所示。
此時采集的過程還未開始,DAQmx 開始任務VI 給出的信息通過隊列方式發送給數據采集執行結構,如圖7所示。

圖6 采集開始狀態

圖7 隊列信息交設計
通過LabVIEW 中隊列的方式實現多個循環結構的數據交換和同步。
DAQ設備實際的采集執行結構,如圖8所示。

圖8 數據采集執行結構
該循環結構只有當開始采集的隊列消息到來之后才執行采集的循環過程。
采集過程的停止通過局部變量進行控制,控制結果傳遞停止采集的消息使得圖8 中的停止采集變量為真,從而該循環停止,之后執行DAQ 停止任務VI 實現任務的停止。此時數據采集狀態控制結構仍然執行,如果要繼續進行采集,只需點擊開始采集即可恢復采集過程。
由以上各分系統的設計可以得出,本文提出的DAQ 數據采集結構,實現了DAQ 設備設置初始化和采集的分離,同時結構布局針對LavVIEW 的特點進行了優化,可方便對循環結構進行拖拽擴展,有效避免了程序設計后期由于空間不夠而對程序進行大幅改動的問題。
前面分析了本文DAQ 數據采集程序總體框架及結構,下面通過簡單的數據采集過程驗證采集功能。采集設備使用NI myDAQ,如圖9所示。

圖9 NI myDAQ設備
采集程序前面板如圖10所示。

圖10 前面板界面
圖10 所示的界面中,波形圖用于顯示當前采集的信號,DQAmx 物理通道控件用于選擇物理DAQ 設備,開始采集和結束采集用于控制采集的過程,退出則是指結束整個程序。
從程序運行結果看,該系統設計完成了DAQ系統的功能,并可在運行過程中隨時中斷繼續采集過程。
結合相應的硬件設備,LabVIEW 具備強大的采集功能。本文利用狀態機、事件結構、循環結構,設計了一種改進的DAQ 設備采集程序架構。該設計具備良好的擴展性,實現了數據采集控制與處理的有效分離,可用于實時數據的采集、分析和存儲,滿足不同采集任務的需求。