CVI的脉冲爆震发动机数据采集系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
intCVICALLBACKDataAcqThreadFunction(void·function Dada)// 线程传递函数的代码
其中:函数CmtReleaseThreadPoolFunetionAdv()中
poolHandle为线程堆句柄,可以取值为DEFAuLT— THREAD—POOL—HANDLE;ChartPanelMain为创建线
万方数据
.18.
ቤተ መጻሕፍቲ ባይዱ仪表技术
2008年第12期
高性能数据采集卡,它提供了16路单端或8路差分模 拟量输入,12位A/D转换器,可达到lOOkHz的采样 速率,并具有数字输入、输出以及时钟计数等通用测试 功能,主控机同样采用该公司的IPC一610H工控机, 通过ISA插槽使采集卡与计算机相连。设计的硬件和 接口驱动考虑了PDE的工作特点,能满足该实验数据 采集系统的要求。图2为PDE实验数据采集系统硬 件框图。
消息驱动机制,当管道中有数据时可以直接读出,通过 一定的处理进行显示。该线程的编写方法同数据采集 线程的编写几乎一样,变化的只是线程传递函数。获 取数据后,需要进行分析、统计,进行曲线拟合,其线程
的创建不再赘述。 (4)线程退出 为了进行可靠的线程退出,应先调用函数Cmt—
getThreadPoolFunctionAttribute(int poolHandle,int
万方数据
(、堡堂)
图3 PDE多线程应用程序流程
(1)线程池 线程池可以理解为一个容纳多个线程的抽象空 间,线程必须在线程池中创建和管理。线程池一般在 主程序或主要控件的回调函数中创建,从而为多线程 的建立占用资源、开辟空间,而此时线程池中尚不存在 任何线程。本数据采集系统分别使用CmtNewThread— Pool()和CmtNewThreadLocalVal()函数来创建线程池 和线程本地变量,部分程序源代码如下:
e
一
己
》
言 蛋
≥
机
—z一
配
一
试 验
·—◆|点火频率控制器卜_———呻
模 块
IDAQ软件包
台
工作面板消 息循环 (主线程)
实时 数据 采集
线程
实时 数据 显示
线程
数据 分析 处理
线程
Y
图2 PDE实验数据采集系统框图
由于PDE工作过程中点火器会对传感器产生尖 峰脉冲强干扰信号,所以通过采用光电耦合器可以有 效的隔离此噪声干扰,与此同时发动机高频工作时爆 震管壁温度很高,为减弱温度对压力传感器的影响,在 传感器安装座加装水冷装置对传感器进行冷却,以抑 制温度漂移,保证数据采集的准确性。
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) …错误处理 …}
static int CVICALLBACKDataAeqThreadFunetion(void·hmctionDa- ta)://数据采集线程声明
2008年第12期
仪表技术
·19·
CmtGettllreadPoolFunetionAttribute(poolHandle.如notioned。A1-rR一’rP —FUNCTION—THREAD—ID,&threadlD)1//线程的调用
调节阀 流量计高能点火器压力传感器温度传感器爆震管 图1 原理性脉冲爆震发动机试验系统框图
口处的气体流量,流量大小由电动调节阀控制。点火 器为航空发动机用火花塞,点火能量、起爆频率由自行 开发的起爆点火系统进行调节控制。在给定供油量、 供气量达到实验设计余气系数和点火频率时,发动机 将按一定工作状态进行工作。采集时,由涡街流量计 和超声波燃油流量计测得的实际空气、燃油流量经变 送器转换放大成电信号,压力传感器测得的压力信号 经电荷放大器由电荷信号变为电压信号,温度传感器 得到的电信号,经信号调理及放大后送到高速采集卡, 从而实现对测试信号的采集与存储,进而获得发动机 的实际工作状态。
Key words:pulse detonation engine;muhithreading technology;data acquisition system
1 PDE(脉冲爆震发动机)试验系统简介 脉冲爆震发动机原理性模型试验系统如图1所
示。其中发动机为无阀式单管脉冲爆震发动机试验模 型,燃油喷射采用简单直射式喷嘴,燃油流量由超声波 流量计测量,其调节由电动比例调节阀控制。空气采 用两路气流切向进气方式,通过涡街流量计测量进气
2008年第12期
仪表技术
·17·
基于LabWindows/CVI的脉冲爆震发动机 数据采集系统设计
赵 华,何立明,曾 昊,杜宏亮 (空军工程大学工程学院,陕西西安710038)
摘要:针对原理性脉冲爆震发动机(PDE)试验模型多通道实时数据高速采集的要求,应用LabWindows/CVI 7.1提供的多线程
函数库,对PDE的数据采集系统进行了研究、设计与实现。应用结果表明,该系统实时性强,可靠性高,满足了PDE试验对实验数
据高速采集的功能和实时性要求。
关键词:脉冲爆震发动机;多线程技术;数据采集系统
中图分类号:TP39
文献标识码:B
文章编号:1006—2394(2008)12—0017一03
Design of Data Acquisition System of Pulse Detonation
Return 0;
} }
在PDE测试软件的执行中,用户界面的接口线程 优先级最高,可以根据需要选择唤醒数据采集线程、实 时数据显示线程和数据分析线程。上述各线程协调工
作,并发多任务高效率机制,并最大限度地利用系统资 源,使程序运行更加有效。如图4所示的是PDE实验 测试系统面板。图5给出的是该实验数据采集系统实
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();
2.2多线程软件设计 在LabWindows/CVI多线程程序中,主线程(main
thread)主要用来创建、显示并运行用户界面,次线程 (secondary thread)用来执行其他对时间要求很高的操 作。CVI提供了两种在次线程中运行代码的机制,分 别是线程池(Thread P001)机制和异步时钟(Asyn- chronous Timer),其中线程池是比较常用的机制,适用 于需要不连续地执行或在循环中执行的任务,而异步 时钟适合用于固定时间间隔内执行的任务。针对 PDE工作的实时性要求,该数采系统采用线程池机
程的函数名;threadCount为传递给线程函数的数据,这 里为线程数。
(3)实时数据显示、数据分析处理线程 为便于实时了解和掌握发动机工作状态以及进行 相应调节,对爆震管沿轴向不同位置处的爆震波压力、
管壁温度,供油、供气流量等采集的数据需要进行实时 显示。其实现方法同样采用了线程池技术,通过管道
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.
CmtScheduleThreadPoolFunctionAdv(poolHandle,ChartPanelMain。 (void·)threadCount.THREAD—PRIORITY—NORMAL,NotifyThreadFunc- tionExeeState,(EVENT—TP—THREAD—FUNCTION—BEGIN。EVENT—TP— THREAD—FUNCTION—END)。0,CmtGetCurrentThreadlD.&fnlD);//确定 线程的优先级
制。图3给出的是PDE多线程应用程序流程。
载入面板 (创建主线程)
N
竺窆
创建并启动次线程
脉
冲 爆 震 发 动
'|压力传感器H信号调理与放大卜 叫推力传感器H信号调理与放大卜 .1温度传感器H信号调理与放大卜
自
行! LJ\ 设 r—/ 计: LJ\
厂—/
适
数 据 采 集 卡
/LA 工
、—_1/ 控 机
}
其中:函数CmtNewThreadLocalVal()主要定义了 本地变量baozhenHandle,用来存放各线程的信息; CmtNewThreadPool()规定了该线程池允许的最多线程 数,这里设为5;poolHandle是该线程的句柄,在后续程 序中起指示和区分线程池的作用。
(2)数据采集线程 数据采集线程在响应采集界面指令后启动,并作 为后台线程负责现场数据的采集。创建采集线程的简 要函数代码如下:
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
static int SetupApplication(void) {CmtNewThreadLocalVal(sizeof(int),(void·)0,NULL,NULL, &baozhenHandle); CmtNewThreadPool(MAX_THREADS。&poolHandle);
Return 0;
2基于CVI的数据采集系统设计
2.1 系统硬件及接口驱动设计 除压力、温度、推力传感器、涡街流量计、超声波流
量计、信号调理放大器及自行设计适配器模块等基本 硬件外,系统还采用ADVANTECH公司的PCL一818L
收稿日期:2008一07 作者简介:赵华(198l一),男,硕士研究生,研究方向为脉冲爆震发动机基础研究。
threadFunetionID,int attributelD,void木attributeValue) 来判定该线程数据处理是否完成,若函数返回值不为
4,则仍需调用等待函数CmtWaitForThreadPoolFunc- tionCompletion(int poolHandle,int threadFunctionlD,an-
其中:函数CmtReleaseThreadPoolFunetionAdv()中
poolHandle为线程堆句柄,可以取值为DEFAuLT— THREAD—POOL—HANDLE;ChartPanelMain为创建线
万方数据
.18.
ቤተ መጻሕፍቲ ባይዱ仪表技术
2008年第12期
高性能数据采集卡,它提供了16路单端或8路差分模 拟量输入,12位A/D转换器,可达到lOOkHz的采样 速率,并具有数字输入、输出以及时钟计数等通用测试 功能,主控机同样采用该公司的IPC一610H工控机, 通过ISA插槽使采集卡与计算机相连。设计的硬件和 接口驱动考虑了PDE的工作特点,能满足该实验数据 采集系统的要求。图2为PDE实验数据采集系统硬 件框图。
消息驱动机制,当管道中有数据时可以直接读出,通过 一定的处理进行显示。该线程的编写方法同数据采集 线程的编写几乎一样,变化的只是线程传递函数。获 取数据后,需要进行分析、统计,进行曲线拟合,其线程
的创建不再赘述。 (4)线程退出 为了进行可靠的线程退出,应先调用函数Cmt—
getThreadPoolFunctionAttribute(int poolHandle,int
万方数据
(、堡堂)
图3 PDE多线程应用程序流程
(1)线程池 线程池可以理解为一个容纳多个线程的抽象空 间,线程必须在线程池中创建和管理。线程池一般在 主程序或主要控件的回调函数中创建,从而为多线程 的建立占用资源、开辟空间,而此时线程池中尚不存在 任何线程。本数据采集系统分别使用CmtNewThread— Pool()和CmtNewThreadLocalVal()函数来创建线程池 和线程本地变量,部分程序源代码如下:
e
一
己
》
言 蛋
≥
机
—z一
配
一
试 验
·—◆|点火频率控制器卜_———呻
模 块
IDAQ软件包
台
工作面板消 息循环 (主线程)
实时 数据 采集
线程
实时 数据 显示
线程
数据 分析 处理
线程
Y
图2 PDE实验数据采集系统框图
由于PDE工作过程中点火器会对传感器产生尖 峰脉冲强干扰信号,所以通过采用光电耦合器可以有 效的隔离此噪声干扰,与此同时发动机高频工作时爆 震管壁温度很高,为减弱温度对压力传感器的影响,在 传感器安装座加装水冷装置对传感器进行冷却,以抑 制温度漂移,保证数据采集的准确性。
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) …错误处理 …}
static int CVICALLBACKDataAeqThreadFunetion(void·hmctionDa- ta)://数据采集线程声明
2008年第12期
仪表技术
·19·
CmtGettllreadPoolFunetionAttribute(poolHandle.如notioned。A1-rR一’rP —FUNCTION—THREAD—ID,&threadlD)1//线程的调用
调节阀 流量计高能点火器压力传感器温度传感器爆震管 图1 原理性脉冲爆震发动机试验系统框图
口处的气体流量,流量大小由电动调节阀控制。点火 器为航空发动机用火花塞,点火能量、起爆频率由自行 开发的起爆点火系统进行调节控制。在给定供油量、 供气量达到实验设计余气系数和点火频率时,发动机 将按一定工作状态进行工作。采集时,由涡街流量计 和超声波燃油流量计测得的实际空气、燃油流量经变 送器转换放大成电信号,压力传感器测得的压力信号 经电荷放大器由电荷信号变为电压信号,温度传感器 得到的电信号,经信号调理及放大后送到高速采集卡, 从而实现对测试信号的采集与存储,进而获得发动机 的实际工作状态。
Key words:pulse detonation engine;muhithreading technology;data acquisition system
1 PDE(脉冲爆震发动机)试验系统简介 脉冲爆震发动机原理性模型试验系统如图1所
示。其中发动机为无阀式单管脉冲爆震发动机试验模 型,燃油喷射采用简单直射式喷嘴,燃油流量由超声波 流量计测量,其调节由电动比例调节阀控制。空气采 用两路气流切向进气方式,通过涡街流量计测量进气
2008年第12期
仪表技术
·17·
基于LabWindows/CVI的脉冲爆震发动机 数据采集系统设计
赵 华,何立明,曾 昊,杜宏亮 (空军工程大学工程学院,陕西西安710038)
摘要:针对原理性脉冲爆震发动机(PDE)试验模型多通道实时数据高速采集的要求,应用LabWindows/CVI 7.1提供的多线程
函数库,对PDE的数据采集系统进行了研究、设计与实现。应用结果表明,该系统实时性强,可靠性高,满足了PDE试验对实验数
据高速采集的功能和实时性要求。
关键词:脉冲爆震发动机;多线程技术;数据采集系统
中图分类号:TP39
文献标识码:B
文章编号:1006—2394(2008)12—0017一03
Design of Data Acquisition System of Pulse Detonation
Return 0;
} }
在PDE测试软件的执行中,用户界面的接口线程 优先级最高,可以根据需要选择唤醒数据采集线程、实 时数据显示线程和数据分析线程。上述各线程协调工
作,并发多任务高效率机制,并最大限度地利用系统资 源,使程序运行更加有效。如图4所示的是PDE实验 测试系统面板。图5给出的是该实验数据采集系统实
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();
2.2多线程软件设计 在LabWindows/CVI多线程程序中,主线程(main
thread)主要用来创建、显示并运行用户界面,次线程 (secondary thread)用来执行其他对时间要求很高的操 作。CVI提供了两种在次线程中运行代码的机制,分 别是线程池(Thread P001)机制和异步时钟(Asyn- chronous Timer),其中线程池是比较常用的机制,适用 于需要不连续地执行或在循环中执行的任务,而异步 时钟适合用于固定时间间隔内执行的任务。针对 PDE工作的实时性要求,该数采系统采用线程池机
程的函数名;threadCount为传递给线程函数的数据,这 里为线程数。
(3)实时数据显示、数据分析处理线程 为便于实时了解和掌握发动机工作状态以及进行 相应调节,对爆震管沿轴向不同位置处的爆震波压力、
管壁温度,供油、供气流量等采集的数据需要进行实时 显示。其实现方法同样采用了线程池技术,通过管道
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.
CmtScheduleThreadPoolFunctionAdv(poolHandle,ChartPanelMain。 (void·)threadCount.THREAD—PRIORITY—NORMAL,NotifyThreadFunc- tionExeeState,(EVENT—TP—THREAD—FUNCTION—BEGIN。EVENT—TP— THREAD—FUNCTION—END)。0,CmtGetCurrentThreadlD.&fnlD);//确定 线程的优先级
制。图3给出的是PDE多线程应用程序流程。
载入面板 (创建主线程)
N
竺窆
创建并启动次线程
脉
冲 爆 震 发 动
'|压力传感器H信号调理与放大卜 叫推力传感器H信号调理与放大卜 .1温度传感器H信号调理与放大卜
自
行! LJ\ 设 r—/ 计: LJ\
厂—/
适
数 据 采 集 卡
/LA 工
、—_1/ 控 机
}
其中:函数CmtNewThreadLocalVal()主要定义了 本地变量baozhenHandle,用来存放各线程的信息; CmtNewThreadPool()规定了该线程池允许的最多线程 数,这里设为5;poolHandle是该线程的句柄,在后续程 序中起指示和区分线程池的作用。
(2)数据采集线程 数据采集线程在响应采集界面指令后启动,并作 为后台线程负责现场数据的采集。创建采集线程的简 要函数代码如下:
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
static int SetupApplication(void) {CmtNewThreadLocalVal(sizeof(int),(void·)0,NULL,NULL, &baozhenHandle); CmtNewThreadPool(MAX_THREADS。&poolHandle);
Return 0;
2基于CVI的数据采集系统设计
2.1 系统硬件及接口驱动设计 除压力、温度、推力传感器、涡街流量计、超声波流
量计、信号调理放大器及自行设计适配器模块等基本 硬件外,系统还采用ADVANTECH公司的PCL一818L
收稿日期:2008一07 作者简介:赵华(198l一),男,硕士研究生,研究方向为脉冲爆震发动机基础研究。
threadFunetionID,int attributelD,void木attributeValue) 来判定该线程数据处理是否完成,若函数返回值不为
4,则仍需调用等待函数CmtWaitForThreadPoolFunc- tionCompletion(int poolHandle,int threadFunctionlD,an-