張海波 畢敬騰 李廷軍
(海軍航空大學(xué)航空基礎(chǔ)學(xué)院 煙臺 264001)
數(shù)據(jù)采集(DAQ)是使用計(jì)算機(jī)測量電壓、電流、溫度、壓力或聲音等電子、物理現(xiàn)象的過程。典型的DAQ 系統(tǒng)由傳感器、DAQ 測量硬件和帶有可編程軟件的計(jì)算機(jī)組成。與傳統(tǒng)的測量系統(tǒng)相比,基于PC 的DAQ 系統(tǒng)利用行業(yè)標(biāo)準(zhǔn)計(jì)算機(jī)的處理、生產(chǎn)、顯示和連通能力,提供靈活且開發(fā)快速的測量解決方案[1~4]。當(dāng)前基于NI LabVIEW 的DAQ 系統(tǒng)在科研教育領(lǐng)域得到了廣泛的應(yīng)用。使用Lab-VIEW 開發(fā)的數(shù)據(jù)采集系統(tǒng),具有可視化編程,結(jié)構(gòu)清晰,開發(fā)速度快,運(yùn)行穩(wěn)定,支持硬件廣泛的特點(diǎn)[5~7]。
對于簡單的數(shù)據(jù)采集工作利用LabVIEW 提供的DAQ 硬件示例即可滿足要求。但是該示例僅給出基本的實(shí)現(xiàn)方式,并沒有與狀態(tài)機(jī)及事件處理等程序結(jié)構(gòu)相結(jié)合,因而無法滿足實(shí)際的開發(fā)需求。
在LabVIEW 自帶示例項(xiàng)目中的數(shù)據(jù)采集結(jié)構(gòu)有生產(chǎn)者消費(fèi)者模型和狀態(tài)機(jī)模型。但生產(chǎn)者消費(fèi)者模型沒有考慮DAQ 系統(tǒng)在不同狀態(tài)間轉(zhuǎn)換的問題。LabVIEW 現(xiàn)有狀態(tài)機(jī)模型沒有實(shí)現(xiàn)有效的采集過程控制和數(shù)據(jù)處理的分離,如果連續(xù)長時間采集大量數(shù)據(jù)容易造成用戶界面的鎖定和無響應(yīng)。由于LabVIEW 圖形化編程的特點(diǎn),導(dǎo)致兩種結(jié)構(gòu)在遇到需要添加大量虛擬控件的時候,如果未合理的設(shè)計(jì)程序結(jié)構(gòu),隨著程序規(guī)模的不斷擴(kuò)大,會造成擴(kuò)展不方便,使得后續(xù)程序設(shè)計(jì)過程復(fù)雜繁瑣,增加后續(xù)開發(fā)的難度[8~11]。
針對以上問題,本文設(shè)計(jì)一種結(jié)合了狀態(tài)機(jī)、隊(duì)列和事件驅(qū)動結(jié)構(gòu)的DAQ 數(shù)據(jù)采集系統(tǒng),并合理設(shè)計(jì)了多個結(jié)構(gòu)之間的相對位置,實(shí)現(xiàn)后續(xù)程序的拓展。
LabVIEW 程序天然是并行執(zhí)行,因此多個循環(huán)之間是并行執(zhí)行的。要實(shí)現(xiàn)控制程序的運(yùn)行順序,一種思路是采用平鋪式順序執(zhí)行結(jié)構(gòu),但是該結(jié)構(gòu)在小規(guī)模、簡單的采集中較為合適,隨著程序規(guī)模的擴(kuò)大拖動改變程序框?qū)o程序的設(shè)計(jì)帶來巨大的挑戰(zhàn)。另一種思路則是采用數(shù)據(jù)流控制的方法,即通過VI 之間數(shù)據(jù)交換的先后順序進(jìn)行數(shù)據(jù)控制[12~13]。
本文提出的結(jié)構(gòu)采用第二種思路。經(jīng)過長期實(shí)踐第二種思路可以有效避免隨著程序規(guī)模的擴(kuò)大造成的不斷改變多個框圖大小的問題。
總體上,程序可分為三個部分如圖1所示。
圖1 程序總體結(jié)構(gòu)圖
第一部分是整個程序運(yùn)行環(huán)境設(shè)定部分,此處不涉及采集設(shè)備的初始化。這一部分的主要作用是設(shè)定軟件運(yùn)行時所需要的中間變量、控件初始狀態(tài)、數(shù)據(jù)文件及數(shù)據(jù)庫等外部程序環(huán)境。這一部分是整個采集系統(tǒng)的起點(diǎn),因此在運(yùn)行的時候應(yīng)是第一個運(yùn)行,且僅運(yùn)行一次。
第二部分為數(shù)據(jù)采集狀態(tài)控制結(jié)構(gòu)。其作用是實(shí)現(xiàn)整個采集系統(tǒng)的數(shù)據(jù)采集的開始結(jié)束,并針對采集過程中的系統(tǒng)及控制消息進(jìn)行處理。
第三部分為數(shù)據(jù)采集執(zhí)行結(jié)構(gòu)。其主要功能是完成數(shù)據(jù)的采集、寫入及顯示。
總體上三個部分是相互獨(dú)立的。程序運(yùn)行環(huán)境部分僅執(zhí)行一次完成環(huán)境設(shè)定,與后面的兩個結(jié)構(gòu)之間的數(shù)據(jù)交換采用局部變量進(jìn)行。數(shù)據(jù)采集狀態(tài)控制結(jié)構(gòu)和數(shù)據(jù)采集執(zhí)行結(jié)構(gòu)為循環(huán)結(jié)構(gòu)。兩個結(jié)構(gòu)之間通過隊(duì)列進(jìn)行數(shù)據(jù)的交換。下面重點(diǎn)對數(shù)據(jù)采集控制結(jié)構(gòu)和執(zhí)行結(jié)構(gòu)進(jìn)行詳細(xì)討論。
根據(jù)采集系統(tǒng)的特點(diǎn),本設(shè)計(jì)結(jié)構(gòu)將整個小懶蟲過程分為初始化、退出、事件處理、開始采集及結(jié)束采集。
初始化狀態(tài)完成DAQ、串口等數(shù)據(jù)采集設(shè)備端口的初始化。如圖2所示。
圖2 初始化狀態(tài)
退出是在所有采集結(jié)束之后完成,因而在退出之前應(yīng)判斷完成數(shù)據(jù)采集的DAQ 是否已正確關(guān)閉,所采集到的數(shù)據(jù)是否已正確寫入磁盤數(shù)據(jù)文件中。
在本文提出的數(shù)據(jù)采集程序結(jié)構(gòu)中,將事件處理與狀態(tài)機(jī)相結(jié)合。如圖3所示。
圖3 事件處理基本結(jié)構(gòu)
圖3 所示的四個事件中,其中超時是事件結(jié)構(gòu)創(chuàng)建時系統(tǒng)默認(rèn)的。開始采集事件對應(yīng)狀態(tài)機(jī)中的開始采集狀態(tài),停止采集對應(yīng)狀態(tài)機(jī)中的停止采集狀態(tài),退出對應(yīng)狀態(tài)機(jī)中的退出狀態(tài)。此處的三個事件僅是響應(yīng)界面UI 中開始采集、停止采集和退出三個按鈕的消息,具體的處理過程通過狀態(tài)的轉(zhuǎn)變進(jìn)入到相應(yīng)的狀態(tài)中進(jìn)行處理。如果開發(fā)者有其他的事件在程序運(yùn)行過程中進(jìn)行響應(yīng),只需要在事件結(jié)構(gòu)中添加相應(yīng)事件即可。以上結(jié)構(gòu)可方便的實(shí)現(xiàn)功能擴(kuò)展,二不用更改程序結(jié)構(gòu)。
原有的例程僅是提供演示,并不適合應(yīng)用于實(shí)際的工程項(xiàng)目中。本文結(jié)合DAQ 設(shè)備采集基本結(jié)構(gòu)進(jìn)行改進(jìn),實(shí)現(xiàn)了采集程序結(jié)構(gòu)給出的DAQ 設(shè)備數(shù)據(jù)采集控制與采集過程相分離的結(jié)構(gòu)。
在DAQ 的初始化開始于DAQ 通道創(chuàng)建,在本文的程序結(jié)構(gòu)將其放置于初始化狀態(tài)中,如圖4所示。
圖4 DAQ初始化
創(chuàng)建成功則進(jìn)行DAQ 采樣時鐘及配置記錄相關(guān)子VI 的處理,為后續(xù)的采集數(shù)據(jù)準(zhǔn)備好硬件。如果發(fā)生錯誤,則在主界面中的進(jìn)行提示。如圖5所示。
圖5 主界面狀態(tài)提示
以上工作完成之后如果無錯誤則進(jìn)入事件處理狀態(tài)等待下一步任務(wù),當(dāng)點(diǎn)擊開始采集按鈕之后,事件處理程序?qū)?dāng)前的狀態(tài)改變到開始采集狀態(tài),通過DAQmx 任務(wù)開始子VI 使程序開始采集。如圖6所示。
此時采集的過程還未開始,DAQmx 開始任務(wù)VI 給出的信息通過隊(duì)列方式發(fā)送給數(shù)據(jù)采集執(zhí)行結(jié)構(gòu),如圖7所示。
圖6 采集開始狀態(tài)
圖7 隊(duì)列信息交設(shè)計(jì)
通過LabVIEW 中隊(duì)列的方式實(shí)現(xiàn)多個循環(huán)結(jié)構(gòu)的數(shù)據(jù)交換和同步。
DAQ設(shè)備實(shí)際的采集執(zhí)行結(jié)構(gòu),如圖8所示。
圖8 數(shù)據(jù)采集執(zhí)行結(jié)構(gòu)
該循環(huán)結(jié)構(gòu)只有當(dāng)開始采集的隊(duì)列消息到來之后才執(zhí)行采集的循環(huán)過程。
采集過程的停止通過局部變量進(jìn)行控制,控制結(jié)果傳遞停止采集的消息使得圖8 中的停止采集變量為真,從而該循環(huán)停止,之后執(zhí)行DAQ 停止任務(wù)VI 實(shí)現(xiàn)任務(wù)的停止。此時數(shù)據(jù)采集狀態(tài)控制結(jié)構(gòu)仍然執(zhí)行,如果要繼續(xù)進(jìn)行采集,只需點(diǎn)擊開始采集即可恢復(fù)采集過程。
由以上各分系統(tǒng)的設(shè)計(jì)可以得出,本文提出的DAQ 數(shù)據(jù)采集結(jié)構(gòu),實(shí)現(xiàn)了DAQ 設(shè)備設(shè)置初始化和采集的分離,同時結(jié)構(gòu)布局針對LavVIEW 的特點(diǎn)進(jìn)行了優(yōu)化,可方便對循環(huán)結(jié)構(gòu)進(jìn)行拖拽擴(kuò)展,有效避免了程序設(shè)計(jì)后期由于空間不夠而對程序進(jìn)行大幅改動的問題。
前面分析了本文DAQ 數(shù)據(jù)采集程序總體框架及結(jié)構(gòu),下面通過簡單的數(shù)據(jù)采集過程驗(yàn)證采集功能。采集設(shè)備使用NI myDAQ,如圖9所示。
圖9 NI myDAQ設(shè)備
采集程序前面板如圖10所示。
圖10 前面板界面
圖10 所示的界面中,波形圖用于顯示當(dāng)前采集的信號,DQAmx 物理通道控件用于選擇物理DAQ 設(shè)備,開始采集和結(jié)束采集用于控制采集的過程,退出則是指結(jié)束整個程序。
從程序運(yùn)行結(jié)果看,該系統(tǒng)設(shè)計(jì)完成了DAQ系統(tǒng)的功能,并可在運(yùn)行過程中隨時中斷繼續(xù)采集過程。
結(jié)合相應(yīng)的硬件設(shè)備,LabVIEW 具備強(qiáng)大的采集功能。本文利用狀態(tài)機(jī)、事件結(jié)構(gòu)、循環(huán)結(jié)構(gòu),設(shè)計(jì)了一種改進(jìn)的DAQ 設(shè)備采集程序架構(gòu)。該設(shè)計(jì)具備良好的擴(kuò)展性,實(shí)現(xiàn)了數(shù)據(jù)采集控制與處理的有效分離,可用于實(shí)時數(shù)據(jù)的采集、分析和存儲,滿足不同采集任務(wù)的需求。