当前位置:文档之家› CVI的脉冲爆震发动机数据采集系统设计

CVI的脉冲爆震发动机数据采集系统设计

2008年第12期
仪表技术
·17·
基于LabWindows/CVI的脉冲爆震发动机 数据采集系统设计
赵 华,何立明,曾 昊,杜宏亮 (空军工程大学工程学院,陕西西安710038)
摘要:针对原理性脉冲爆震发动机(PDE)试验模型多通道实时数据高速采集的要求,应用LabWindows/CVI 7.1提供的多线程
制。图3给出的是PDE多线程应用程序流程。
载入面板 (创建主线程)

竺窆
创建并启动次线程

冲 爆 震 发 动
'|压力传感器H信号调理与放大卜 叫推力传感器H信号调理与放大卜 .1温度传感器H信号调理与放大卜

行! LJ\ 设 r—/ 计: LJ\
厂—/

数 据 采 集 卡
/LA 工
、—_1/ 控 机
消息驱动机制,当管道中有数据时可以直接读出,通过 一定的处理进行显示。该线程的编写方法同数据采集 线程的编写几乎一样,变化的只是线程传递函数。获 取数据后,需要进行分析可靠的线程退出,应先调用函数Cmt—
getThreadPoolFunctionAttribute(int poolHandle,int
intCVICALLBACKDataAcqThreadFunction(void·function Dada)// 线程传递函数的代码
其中:函数CmtReleaseThreadPoolFunetionAdv()中
poolHandle为线程堆句柄,可以取值为DEFAuLT— THREAD—POOL—HANDLE;ChartPanelMain为创建线
static int CVICALLBACKDataAeqThreadFunetion(void·hmctionDa- ta)://数据采集线程声明
2008年第12期
仪表技术
·19·
CmtGettllreadPoolFunetionAttribute(poolHandle.如notioned。A1-rR一’rP —FUNCTION—THREAD—ID,&threadlD)1//线程的调用
Return 0;
} }
在PDE测试软件的执行中,用户界面的接口线程 优先级最高,可以根据需要选择唤醒数据采集线程、实 时数据显示线程和数据分析线程。上述各线程协调工
作,并发多任务高效率机制,并最大限度地利用系统资 源,使程序运行更加有效。如图4所示的是PDE实验 测试系统面板。图5给出的是该实验数据采集系统实
2.2多线程软件设计 在LabWindows/CVI多线程程序中,主线程(main
thread)主要用来创建、显示并运行用户界面,次线程 (secondary thread)用来执行其他对时间要求很高的操 作。CVI提供了两种在次线程中运行代码的机制,分 别是线程池(Thread P001)机制和异步时钟(Asyn- chronous Timer),其中线程池是比较常用的机制,适用 于需要不连续地执行或在循环中执行的任务,而异步 时钟适合用于固定时间间隔内执行的任务。针对 PDE工作的实时性要求,该数采系统采用线程池机




言 蛋


—z一


试 验
·—◆|点火频率控制器卜_———呻
模 块
IDAQ软件包

工作面板消 息循环 (主线程)
实时 数据 采集
线程
实时 数据 显示
线程
数据 分析 处理
线程

图2 PDE实验数据采集系统框图
由于PDE工作过程中点火器会对传感器产生尖 峰脉冲强干扰信号,所以通过采用光电耦合器可以有 效的隔离此噪声干扰,与此同时发动机高频工作时爆 震管壁温度很高,为减弱温度对压力传感器的影响,在 传感器安装座加装水冷装置对传感器进行冷却,以抑 制温度漂移,保证数据采集的准确性。
函数库,对PDE的数据采集系统进行了研究、设计与实现。应用结果表明,该系统实时性强,可靠性高,满足了PDE试验对实验数
据高速采集的功能和实时性要求。
关键词:脉冲爆震发动机;多线程技术;数据采集系统
中图分类号:TP39
文献标识码:B
文章编号:1006—2394(2008)12—0017一03
Design of Data Acquisition System of Pulse Detonation
PCL一818L是非NI公司生产的数据采集卡,故需 要用编程直接驱动的方法来实现采集卡的软件驱动, 针对本实验数据采集系统,编写的部分驱动程序代码 如下:
ErrMsg=(char·)malloc(100·sizeof(double));//分配地址 DRV—GetErrorMessage(ErrCode,ErrMsg); free(ErrMsg);//释放地址 void lnitBoard(void)//采集卡初始化 {state=GetWaitCursorSrate(); SetWaitCursor(1); EnCode=DRV—DevieeOpen(DNum一818L,&DHandle一818L);//打 开818L采集卡 if(ErrCode!=0) …错误处理 …}
Engine Based on LabWindows/CVI
ZHAO Hua,HE Li-ruing,ZENG Hao,DU Hong-liang
(The Engineering Institute,Air Force Engineering University,Xi’an 710038,China) Abstract:According to the demand of multi—channel high-speed real time data acquisition of the experiment model
万方数据
.18.
仪表技术
2008年第12期
高性能数据采集卡,它提供了16路单端或8路差分模 拟量输入,12位A/D转换器,可达到lOOkHz的采样 速率,并具有数字输入、输出以及时钟计数等通用测试 功能,主控机同样采用该公司的IPC一610H工控机, 通过ISA插槽使采集卡与计算机相连。设计的硬件和 接口驱动考虑了PDE的工作特点,能满足该实验数据 采集系统的要求。图2为PDE实验数据采集系统硬 件框图。
Key words:pulse detonation engine;muhithreading technology;data acquisition system
1 PDE(脉冲爆震发动机)试验系统简介 脉冲爆震发动机原理性模型试验系统如图1所
示。其中发动机为无阀式单管脉冲爆震发动机试验模 型,燃油喷射采用简单直射式喷嘴,燃油流量由超声波 流量计测量,其调节由电动比例调节阀控制。空气采 用两路气流切向进气方式,通过涡街流量计测量进气
of principle pulse detonation engine(PDE),the multi—thread programming function library provided by LabWindows/
CVI 7.1 is adopted to investigate.design and realize the data acquisition system of PDE.Application results show that it owns high real-time performance and reliability.It meets the high—speed data acquisition function and real time demand of PDE test.
程的函数名;threadCount为传递给线程函数的数据,这 里为线程数。
(3)实时数据显示、数据分析处理线程 为便于实时了解和掌握发动机工作状态以及进行 相应调节,对爆震管沿轴向不同位置处的爆震波压力、
管壁温度,供油、供气流量等采集的数据需要进行实时 显示。其实现方法同样采用了线程池技术,通过管道

其中:函数CmtNewThreadLocalVal()主要定义了 本地变量baozhenHandle,用来存放各线程的信息; CmtNewThreadPool()规定了该线程池允许的最多线程 数,这里设为5;poolHandle是该线程的句柄,在后续程 序中起指示和区分线程池的作用。
(2)数据采集线程 数据采集线程在响应采集界面指令后启动,并作 为后台线程负责现场数据的采集。创建采集线程的简 要函数代码如下:
2基于CVI的数据采集系统设计
2.1 系统硬件及接口驱动设计 除压力、温度、推力传感器、涡街流量计、超声波流
量计、信号调理放大器及自行设计适配器模块等基本 硬件外,系统还采用ADVANTECH公司的PCL一818L
收稿日期:2008一07 作者简介:赵华(198l一),男,硕士研究生,研究方向为脉冲爆震发动机基础研究。
signed int options)来完成线程的安全退出。其实现的 函数代码如下:
int CVICAI。I。BACK Quit(int panel。int control。int event。void}call— backData,int eventDatal,int eventData2)
{switch(event) {ca∞EVENT—COMMIT: CmtWaitForThreadPoolFunctionCompletlon(DEFAULT—THREAD— POOL—HANDLE,threadFunctionID,0); CmtReaseThreadPoolFunctionlD(DEFAULT—THREAD—POOL—HAN. DLE。threadFunctionlD); Clo№In8tnIment();
static int SetupApplication(void) {CmtNewThreadLocalVal(sizeof(int),(void·)0,NULL,NULL, &baozhenHandle); CmtNewThreadPool(MAX_THREADS。&poolHandle);
相关主题