馬凡華,齊政亮,趙建彪,何義團(tuán),韓曉東
(清華大學(xué)汽車安全與節(jié)能國家重點(diǎn)實(shí)驗(yàn)室,北京,100084)
隨著汽車保有量的不斷增加,空氣質(zhì)量問題越來越引起人們的重視,同時(shí)排放法規(guī)日益嚴(yán)格,這些都要求汽車發(fā)動(dòng)機(jī)在運(yùn)行過程中具有良好的排放性能。因此,在發(fā)動(dòng)機(jī)標(biāo)定過程中,實(shí)時(shí)獲得不同轉(zhuǎn)速、負(fù)荷下的各項(xiàng)排放數(shù)據(jù),將有助于發(fā)動(dòng)機(jī)排放性能的優(yōu)化。
LabVIEW是一種工業(yè)標(biāo)準(zhǔn)圖形化編程工具,具有數(shù)據(jù)采集與分析、信號(hào)發(fā)生與處理、輸入輸出控制等功能[1]。在LabVIEW中開發(fā)的程序被稱為VI(虛擬儀器),包含前面板、程序框圖以及圖標(biāo)三部分。其中,前面板是圖形化用戶界面,該界面上有交互式的輸入和輸出兩類控件,用于數(shù)據(jù)輸入和觀察量輸出的設(shè)置;程序框圖是實(shí)現(xiàn)VI邏輯功能的圖形化源代碼;圖標(biāo)/連線端口用于將程序定義為子程序,以利于在其他程序中調(diào)用[2]。
本文以LabVIEW作為編程工具,設(shè)計(jì)開發(fā)燃?xì)獍l(fā)動(dòng)機(jī)排放數(shù)據(jù)采集系統(tǒng)。
試驗(yàn)用燃?xì)獍l(fā)動(dòng)機(jī)為東風(fēng)汽車有限公司生產(chǎn)的EQD210N-20單點(diǎn)電控天然氣噴射發(fā)動(dòng)機(jī)。
電控系統(tǒng)采用實(shí)驗(yàn)室自己設(shè)計(jì)的ECU,具有傳感器信號(hào)處理、工況判斷、運(yùn)算處理、執(zhí)行器控制信號(hào)輸出等功能,完全滿足發(fā)動(dòng)機(jī)運(yùn)行需求。
排放測(cè)量采用的是HORIBA公司生產(chǎn)的排氣分析儀 MEXA-7100FX, 可以測(cè)量 CO、CO2、THC、CH4、NOx等。其測(cè)量精度較高,可選擇量程范圍廣,響應(yīng)快速穩(wěn)定[3]。
數(shù)據(jù)采集采用NI公司的USB-6009多功能數(shù)據(jù)采集卡。其有8路模擬輸入通道(14位分辨率,48 KS/s),2路模擬輸出通道 (12位分辨率,150 KS/s),12條數(shù)字I/O線,32位分辨率計(jì)數(shù)器??刹杉欧艃x輸出的模擬信號(hào),通過USB口傳輸?shù)缴衔粰C(jī),供LabVIEW程序進(jìn)行處理。試驗(yàn)硬件系統(tǒng)構(gòu)成如圖1。
在LabVIEW程序設(shè)計(jì)中,常用的程序設(shè)計(jì)模式有: 狀態(tài)機(jī) (State Machine)、主/從結(jié)構(gòu)(Master/Slave)、生產(chǎn)者/消費(fèi)者結(jié)構(gòu)(Producer/Consumer)、隊(duì)列消息結(jié)構(gòu) (Queued Message Handler)、啟動(dòng)界面(Launcher)等[2]。 本文將以 Anthony Lukindo 改進(jìn)的隊(duì)列狀態(tài)機(jī)[4]為架構(gòu),進(jìn)行系統(tǒng)軟件的開發(fā)設(shè)計(jì)。
狀態(tài)機(jī)是LabVIEW程序設(shè)計(jì)中最常使用的設(shè)計(jì)模式之一,可以清晰地實(shí)現(xiàn)任何狀態(tài)圖之間的轉(zhuǎn)移,常用在“決策”算法中,例如監(jiān)測(cè)、控制和診斷等。狀態(tài)機(jī)包含三要素:狀態(tài)、事件和動(dòng)作。
狀態(tài)機(jī)程序框圖,主要有一個(gè)主循環(huán)和一個(gè)Case結(jié)構(gòu)組成,并利用移位寄存器來實(shí)現(xiàn)狀態(tài)間的轉(zhuǎn)移[2]。其中,主循環(huán)為While循環(huán),用于維持狀態(tài)機(jī)的運(yùn)行,主循環(huán)里面包含一個(gè)條件結(jié)構(gòu),用于對(duì)各個(gè)不同狀態(tài)進(jìn)行判斷,實(shí)現(xiàn)狀態(tài)間的轉(zhuǎn)移[5]。
生產(chǎn)者/消費(fèi)者結(jié)構(gòu)主要用于數(shù)據(jù)的處理,循環(huán)之間通過隊(duì)列來傳遞數(shù)據(jù)。
數(shù)據(jù)采集系統(tǒng),一般包括數(shù)據(jù)采集、數(shù)據(jù)分析和結(jié)果顯示三個(gè)步驟。若通過數(shù)據(jù)流直接將這三個(gè)步驟連接起來,即每進(jìn)行一次采集數(shù)據(jù)都要經(jīng)過數(shù)據(jù)分析及顯示后才能開啟第二輪采集,則數(shù)據(jù)分析引起的時(shí)間延遲有可能增大數(shù)據(jù)采集的周期,更有甚者造成數(shù)據(jù)的丟失或重復(fù)利用等問題。采用生產(chǎn)者/消費(fèi)者結(jié)構(gòu)的數(shù)據(jù)采集系統(tǒng),通過并行的方式實(shí)現(xiàn)多個(gè)循環(huán)。其中一個(gè)循環(huán)不斷地采集數(shù)據(jù)(生產(chǎn)者),另一個(gè)循環(huán)不斷地處理數(shù)據(jù)(消費(fèi)者),這兩個(gè)循環(huán)通過消息隊(duì)列進(jìn)行通信,彼此之間不產(chǎn)生干涉,從而可以很好地解決這些問題[5]。
隊(duì)列狀態(tài)機(jī)是把所有要執(zhí)行的狀態(tài)存在隊(duì)列中,并將狀態(tài)名與狀態(tài)機(jī)的每個(gè)狀態(tài)進(jìn)行一一對(duì)應(yīng),以達(dá)到控制狀態(tài)轉(zhuǎn)換順序的目的。當(dāng)某一狀態(tài)執(zhí)行完成,其狀態(tài)名稱將會(huì)從隊(duì)列中刪除,同時(shí)依據(jù)運(yùn)行時(shí)狀態(tài)的動(dòng)作或觸發(fā)的事件,新的狀態(tài)名將會(huì)被添加到隊(duì)列中[6]。本文采用Anthony Lukindo改進(jìn)的隊(duì)列狀態(tài)機(jī)[4],其結(jié)構(gòu)示意圖如圖2所示。
從圖中可以看出,該隊(duì)列狀態(tài)機(jī)由事件結(jié)構(gòu)2、狀態(tài)結(jié)構(gòu)3和并行運(yùn)行的子程序4.1-4.3組成,并通過隊(duì)列引用1相互連接。具體的實(shí)現(xiàn)步驟:1.1獲得子程序4.1-4.3的狀態(tài)引用;1.2為通過 “元素出隊(duì)列”VI獲取隊(duì)列中的第一個(gè)元素,并將該元素從隊(duì)列中刪除;1.3為通過 “按名稱解除捆綁”VI獲得狀態(tài)名和數(shù)據(jù);1.4為將獲得的狀態(tài)名與 “EXIT”的比較,相同時(shí)則停止循環(huán);1.5為隊(duì)列管理子VI;2.1為前面板動(dòng)作產(chǎn)生的指令,將所需跳轉(zhuǎn)至的狀態(tài)名稱添加到隊(duì)列中;3.4為條件case結(jié)構(gòu);3.5為程序代碼;3.6 為下一個(gè)狀態(tài)序列[6]。
軟件部分具有數(shù)據(jù)采集、實(shí)時(shí)顯示、數(shù)據(jù)保存等功能,并采用模塊化的編程思想,利于程序的拓展。
為了能夠測(cè)量不同轉(zhuǎn)速和負(fù)荷下的發(fā)動(dòng)機(jī)排放數(shù)據(jù),需要分別設(shè)計(jì)轉(zhuǎn)速、進(jìn)氣歧管絕對(duì)壓力、排放數(shù)據(jù)三部分的測(cè)量方案。
3.1.1 轉(zhuǎn)速測(cè)量
為了能夠測(cè)量發(fā)動(dòng)機(jī)的轉(zhuǎn)速,一般都在曲軸上安裝一個(gè)齒盤和一個(gè)曲軸轉(zhuǎn)角傳感器。本實(shí)驗(yàn)使用的天然氣發(fā)動(dòng)機(jī)采用的是22個(gè)7°的齒,齒與齒之間的間隔有21個(gè)為8°,剩下一個(gè)為38°。
本文采用可變磁阻式曲軸轉(zhuǎn)角傳感器,主要參數(shù)輸出電壓幅值/轉(zhuǎn)速為400 mV/60r/min。經(jīng)過實(shí)驗(yàn)室自己設(shè)計(jì)ECU的信號(hào)處理,可將轉(zhuǎn)速信號(hào)處理為0~5V的方波。用USB6009測(cè)量時(shí),使用其32位計(jì)數(shù)器功能,下降沿觸發(fā),就可對(duì)方波個(gè)數(shù)進(jìn)行計(jì)算。通過計(jì)算單位時(shí)間內(nèi)收到的方波個(gè)數(shù)就可以計(jì)算出發(fā)動(dòng)機(jī)當(dāng)前轉(zhuǎn)速。測(cè)量方案如圖3所示。
采用LabVIEW進(jìn)行編程,轉(zhuǎn)速采集程序如圖4所示,因共有22個(gè)齒,故采用移位寄存器的方法實(shí)現(xiàn)第1齒和第22齒的時(shí)間記錄,每當(dāng)前后齒數(shù)相差等于22時(shí),進(jìn)入轉(zhuǎn)速計(jì)算結(jié)構(gòu)中,容易得到轉(zhuǎn)速n=(r/min)
3.1.2 進(jìn)氣歧管絕對(duì)壓力測(cè)量
采用進(jìn)氣歧管絕對(duì)壓力傳感器來測(cè)量進(jìn)氣歧管的壓力,ECU根據(jù)此信號(hào)判斷進(jìn)入發(fā)動(dòng)機(jī)的空氣量和發(fā)動(dòng)機(jī)的負(fù)荷,本實(shí)驗(yàn)采用的傳感器可測(cè)量的壓力范圍為20~200 kPa,壓力傳感器的輸出范圍在0~5 V范圍內(nèi),經(jīng)濾波后可以直接被USB6009的AD轉(zhuǎn)換口接收,從而計(jì)算出發(fā)動(dòng)機(jī)負(fù)荷狀態(tài)。
3.1.3 排放數(shù)據(jù)測(cè)量
MEXA-7100FX排氣分析儀在對(duì)發(fā)動(dòng)機(jī)尾氣分析過程中,會(huì)輸出相應(yīng)的電壓信號(hào) (0~5 V),使用USB6009進(jìn)行AD采集,即可完成對(duì)排放數(shù)據(jù)的采集。
由于轉(zhuǎn)速、進(jìn)氣歧管絕對(duì)壓力、排放均能由USB-6009完成采集,因此將其封裝成子VI,采用基于隊(duì)列狀態(tài)機(jī)進(jìn)行編程。如圖5所示,主程序接受數(shù)據(jù)采集子VI傳遞來的數(shù)據(jù),并實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)顯示、數(shù)據(jù)保存功能,而數(shù)據(jù)(轉(zhuǎn)速、壓力、排放)采集封裝在子VI中。
在數(shù)據(jù)采集子VI中,如圖6,將DAQ采集到的數(shù)據(jù)和狀態(tài)一起捆綁成簇,當(dāng)保存按鈕為假時(shí),只以隊(duì)列的形式將數(shù)據(jù)和“Get the Data”狀態(tài)傳送至主程序,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)顯示;當(dāng)保存按鈕為真時(shí),采用順序結(jié)構(gòu),依次將 “Get the Datas”和 “Save the Datas”狀態(tài)傳送至主程序,從而實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)顯示和保存功能。前面板如圖7。
由于實(shí)驗(yàn)中需要實(shí)時(shí)保存轉(zhuǎn)速、進(jìn)氣歧管壓力、排放(HC、CO、NOx)等數(shù)據(jù),通道多,數(shù)據(jù)量較大,為方便數(shù)據(jù)保存和管理,采用TDMS(Technical Data Management Streaming)文件格式保存數(shù)據(jù)。TDMS文件,采用二進(jìn)制數(shù)據(jù)格式,具有占用磁盤空間小以及支持?jǐn)?shù)據(jù)流高速寫盤的特點(diǎn),是NI公司近年來重點(diǎn)開發(fā)的測(cè)試測(cè)量數(shù)據(jù)存儲(chǔ)格式[7]。其有三層結(jié)構(gòu):文件、組和通道,每個(gè)文件下可以設(shè)置多個(gè)組,每個(gè)組可以設(shè)置多個(gè)通道。在文件、組和通道上,都可以定義相應(yīng)屬性以及添加若干附加信息,利于數(shù)據(jù)查詢和管理[6]。
在本系統(tǒng)數(shù)據(jù)存儲(chǔ)中,每次只有一個(gè)文件,以采集的次數(shù)為組名,以轉(zhuǎn)速、壓力以及HC、CO、NOx分別為通道名;數(shù)據(jù)讀取時(shí),以組名依次讀取每個(gè)通道的數(shù)據(jù)。
在數(shù)據(jù)處理過程中,采用基于動(dòng)態(tài)鏈接庫DLL的TDMS文件的Matlab處理方法。為了更好地推廣TDMS文件,NI公司提供可供Matlab調(diào)用并處理TDMS文件的DLL動(dòng)態(tài)鏈接庫。首先通過Matlab中l(wèi)oadlibrary函數(shù)載入動(dòng)態(tài)鏈接庫nilibddc.dll和頭文件 nilibddc_m.h[8],接著通過 uigetfile 函數(shù)選取需要讀入Matlab的TDMS文件,然后通過calllib函數(shù)調(diào)用DDC_GetDataValues函數(shù)可以得到TDMS文件中的原始采集數(shù)據(jù),并可將其讀入到Matlab環(huán)境中,最后就可以運(yùn)用Matlab強(qiáng)大的數(shù)據(jù)分析功能進(jìn)行相關(guān)數(shù)據(jù)分析[7]。TDMS文件導(dǎo)入Matlab的NOx排放分析圖,如圖8所示。
本文以LabVIEW隊(duì)列狀態(tài)機(jī)為主體結(jié)構(gòu),設(shè)計(jì)開發(fā)了發(fā)動(dòng)機(jī)排放數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)能夠?qū)崟r(shí)采集發(fā)動(dòng)機(jī)轉(zhuǎn)速、負(fù)荷及排放數(shù)據(jù),并具有數(shù)據(jù)顯示、保存的功能,響應(yīng)速度快,且可以避免采集數(shù)據(jù)的丟失,為發(fā)動(dòng)機(jī)標(biāo)定提供完整的數(shù)據(jù)。在后續(xù)數(shù)據(jù)處理過程中,采用基于DLL文件的Matlab讀取TDMS文件的方法,不僅發(fā)揮了TDMS文件的優(yōu)勢(shì),而且便于利用Matlab進(jìn)行數(shù)據(jù)處理。
[1]杜娟,邱曉暉,趙陽等.基于LabVIEW的數(shù)據(jù)采集與信號(hào)處理系統(tǒng)的設(shè)計(jì)[J].南京師范大學(xué)學(xué)報(bào),2010,10(3):7-10.
[2]陳錫輝,張銀鴻.LabVIEW8.20程序設(shè)計(jì)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[3]陳仁哲.燃?xì)獍l(fā)動(dòng)機(jī)電控系統(tǒng)的軟硬件開發(fā)[D].北京:清華大學(xué),2011.
[4]Anthony Lukindo.LabVIEW Queued State Machine Architeture[J],2007.
[5]果實(shí),薛磊,朱朝旭.基于LabVIEW隊(duì)列狀態(tài)機(jī)的鐵路信號(hào)電纜故障檢測(cè)系統(tǒng) [J].電腦知識(shí)與技術(shù),2011(29):7228-7229.
[6]葉楓樺,周新聰,白秀琴等.基于LabVIEW隊(duì)列狀態(tài)機(jī)的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì) [J]. 現(xiàn)代電子技術(shù),2010,4(315):204-207.
[7]陳宏希.TDMS文件及其 Matlab讀取方法[J].蘭州石化職業(yè)技術(shù)學(xué)院學(xué)報(bào),2010,10(4):28-30.
[8]Reading TDM/TDMS Files with The MathWorks[J],2010.