基于LabVIEW的燃气发动机排放数据采集系统设计

2012-09-10 03:18马凡华齐政亮赵建彪何义团韩晓东
汽车科技 2012年6期
关键词:状态机队列状态

马凡华,齐政亮,赵建彪,何义团,韩晓东

(清华大学汽车安全与节能国家重点实验室,北京,100084)

随着汽车保有量的不断增加,空气质量问题越来越引起人们的重视,同时排放法规日益严格,这些都要求汽车发动机在运行过程中具有良好的排放性能。因此,在发动机标定过程中,实时获得不同转速、负荷下的各项排放数据,将有助于发动机排放性能的优化。

LabVIEW是一种工业标准图形化编程工具,具有数据采集与分析、信号发生与处理、输入输出控制等功能[1]。在LabVIEW中开发的程序被称为VI(虚拟仪器),包含前面板、程序框图以及图标三部分。其中,前面板是图形化用户界面,该界面上有交互式的输入和输出两类控件,用于数据输入和观察量输出的设置;程序框图是实现VI逻辑功能的图形化源代码;图标/连线端口用于将程序定义为子程序,以利于在其他程序中调用[2]。

本文以LabVIEW作为编程工具,设计开发燃气发动机排放数据采集系统。

1 试验硬件系统

试验用燃气发动机为东风汽车有限公司生产的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。

2 程序设计模式

在LabVIEW程序设计中,常用的程序设计模式有: 状态机 (State Machine)、主/从结构(Master/Slave)、生产者/消费者结构(Producer/Consumer)、队列消息结构 (Queued Message Handler)、启动界面(Launcher)等[2]。 本文将以 Anthony Lukindo 改进的队列状态机[4]为架构,进行系统软件的开发设计。

2.1 状态机

状态机是LabVIEW程序设计中最常使用的设计模式之一,可以清晰地实现任何状态图之间的转移,常用在“决策”算法中,例如监测、控制和诊断等。状态机包含三要素:状态、事件和动作。

状态机程序框图,主要有一个主循环和一个Case结构组成,并利用移位寄存器来实现状态间的转移[2]。其中,主循环为While循环,用于维持状态机的运行,主循环里面包含一个条件结构,用于对各个不同状态进行判断,实现状态间的转移[5]。

2.2 生产者/消费者结构

生产者/消费者结构主要用于数据的处理,循环之间通过队列来传递数据。

数据采集系统,一般包括数据采集、数据分析和结果显示三个步骤。若通过数据流直接将这三个步骤连接起来,即每进行一次采集数据都要经过数据分析及显示后才能开启第二轮采集,则数据分析引起的时间延迟有可能增大数据采集的周期,更有甚者造成数据的丢失或重复利用等问题。采用生产者/消费者结构的数据采集系统,通过并行的方式实现多个循环。其中一个循环不断地采集数据(生产者),另一个循环不断地处理数据(消费者),这两个循环通过消息队列进行通信,彼此之间不产生干涉,从而可以很好地解决这些问题[5]。

2.3 队列状态机

队列状态机是把所有要执行的状态存在队列中,并将状态名与状态机的每个状态进行一一对应,以达到控制状态转换顺序的目的。当某一状态执行完成,其状态名称将会从队列中删除,同时依据运行时状态的动作或触发的事件,新的状态名将会被添加到队列中[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 软件设计

软件部分具有数据采集、实时显示、数据保存等功能,并采用模块化的编程思想,利于程序的拓展。

3.1 数据采集

为了能够测量不同转速和负荷下的发动机排放数据,需要分别设计转速、进气歧管绝对压力、排放数据三部分的测量方案。

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采集,即可完成对排放数据的采集。

3.2 程序功能实现

由于转速、进气歧管绝对压力、排放均能由USB-6009完成采集,因此将其封装成子VI,采用基于队列状态机进行编程。如图5所示,主程序接受数据采集子VI传递来的数据,并实现数据实时显示、数据保存功能,而数据(转速、压力、排放)采集封装在子VI中。

在数据采集子VI中,如图6,将DAQ采集到的数据和状态一起捆绑成簇,当保存按钮为假时,只以队列的形式将数据和“Get the Data”状态传送至主程序,实现数据的实时显示;当保存按钮为真时,采用顺序结构,依次将 “Get the Datas”和 “Save the Datas”状态传送至主程序,从而实现数据的实时显示和保存功能。前面板如图7。

3.3 数据的保存

由于实验中需要实时保存转速、进气歧管压力、排放(HC、CO、NOx)等数据,通道多,数据量较大,为方便数据保存和管理,采用TDMS(Technical Data Management Streaming)文件格式保存数据。TDMS文件,采用二进制数据格式,具有占用磁盘空间小以及支持数据流高速写盘的特点,是NI公司近年来重点开发的测试测量数据存储格式[7]。其有三层结构:文件、组和通道,每个文件下可以设置多个组,每个组可以设置多个通道。在文件、组和通道上,都可以定义相应属性以及添加若干附加信息,利于数据查询和管理[6]。

在本系统数据存储中,每次只有一个文件,以采集的次数为组名,以转速、压力以及HC、CO、NOx分别为通道名;数据读取时,以组名依次读取每个通道的数据。

3.4 数据处理

在数据处理过程中,采用基于动态链接库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所示。

4 结语

本文以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.

猜你喜欢
状态机队列状态
基于Verilog 的有限状态机编程方式及研究
FPGA状态机综合可靠性探究 ①
队列队形体育教案
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于有限状态机的交会对接飞行任务规划方法
状态联想
在队列里
生命的另一种状态
坚持是成功前的状态