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