labwindowscvi3
- 格式:ppt
- 大小:204.50 KB
- 文档页数:9


《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车工业的快速发展,热车试验作为汽车研发和质量控制的重要环节,其测控系统的设计与开发显得尤为重要。
LabWindows/CVI作为一种功能强大的软件开发工具,被广泛应用于各种测控系统的设计与开发中。
本文将介绍基于LabWindows/CVI的便携式热车试验台测控系统的设计与开发,以提高热车试验的准确性和效率。
二、系统需求分析1. 性能需求:系统需要具备高精度、高稳定性的测量与控制功能,以满足热车试验的需求。
2. 便携性需求:系统应具备轻便、易携带的特点,方便现场使用。
3. 用户界面需求:系统应提供友好的用户界面,方便用户操作与使用。
4. 数据处理与存储需求:系统应具备数据处理、分析与存储功能,以便于后续的数据分析与应用。
三、系统设计1. 硬件设计:系统硬件包括传感器、执行器、控制器等部分。
传感器用于采集热车试验过程中的各种数据,执行器用于控制试验过程,控制器则负责数据的处理与传输。
2. 软件设计:软件设计采用LabWindows/CVI开发平台,实现数据的采集、处理、显示、存储与控制等功能。
软件设计应遵循模块化、结构化的设计思想,便于后续的维护与升级。
四、系统实现1. 数据采集与处理:通过传感器采集热车试验过程中的各种数据,如温度、压力、转速等。
数据经过处理后,可实时显示在用户界面上。
2. 控制算法实现:根据试验需求,实现相应的控制算法,如PID控制、模糊控制等,以实现对试验过程的精确控制。
3. 用户界面设计:设计友好的用户界面,包括数据显示、控制按钮、报警提示等功能,方便用户操作与使用。
4. 数据存储与处理:将采集的数据进行存储,并提供数据处理与分析功能,以便于后续的数据应用。
五、系统测试与优化1. 系统测试:对系统进行全面的测试,包括硬件测试、软件测试、联调测试等,以确保系统的稳定性与可靠性。
LabWindowsCVI库函数的使用LabWindows/CVI库函数的使用一、实验目的1、进一步熟悉CVI的集成开发环境2、进一步学习仪器面板中控键的使用3、学习CVI库函数使用方法4、学习用CVI库函数进行频谱分析的步骤二、实验内容1、编写一个波形显示程序,要求根据输入的幅值和周期数显示正弦波;根据输入的幅值和占空比显示方波。
2、制作一个简单仪器面板:要求有两个图形控件,用来显示图形;四个数字控件,分别用来输入正弦波幅值、周期以及方波的幅值、占空比;五个命令控件,分别用来启动程序产生正弦波、产生方波,清楚屏幕上显示的图像和退出程序。
3、利用CVI的代码生成工具生成你制作的一起面板的程序框架。
4、在用户程序中添加相应程序,运行后观察程序执行的结果。
三、程序源代码#include#include#include#include "guweiming.h"static int panelHandle;double a,b,c,d;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "guweiming", PANEL)) < 0) return -1;DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACKQINGPINGCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:DeleteGraphPlot (panelHandle, PANEL_GRAPH_2, -1, V AL_IMMEDIATE_DRAW);break;}return 0;}int CVICALLBACK FANGBOCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){ double wave[512] ;double phase=120,*p;p=&phaseswitch (event){case EVENT_COMMIT:SquareWave (512, c, 7.8125e-3, p, 50.0, wave);PlotWaveform (panelHandle, PANEL_GRAPH, wave, 512,V AL_DOUBLE, 1.0, 0.0, 0.0, d, V AL_THIN_LINE, VAL_EMPTY_SQUARE, V AL_SOLID, 1, V AL_RED);break;}return 0;}int CVICALLBACK QINGPING2Callback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, V AL_IMMEDIATE_DRAW);break;}return 0;}int CVICALLBACK TUICHUCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:QuitUserInterface (0);break;}return 0;}int CVICALLBACK FTCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_FT, &a);break;return 0;}int CVICALLBACK ZQCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_ZQ, &b);break;}return 0;}int CVICALLBACK FZCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_FZ, &c);break;}return 0;}int CVICALLBACK ZKBCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) {switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_ZKB, &d);break;}return 0;}int CVICALLBACK ZHENGXIANBOCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){ double Waves[512] ;switch (event){case EVENT_COMMIT:SinePattern (512, a, 0.0, b, Waves);PlotWaveform (panelHandle, PANEL_GRAPH_2, Waves, 512, V AL_DOUBLE, 1.0, 0.0, 0.0, 1.0, V AL_THIN_LINE, V AL_EMPTY_SQUARE, V AL_SOLID, 1, V AL_RED);break;}return 0;}四、思考题1.简述Panel Handle 和Control ID 参数的作用;答:Panel Handle 这一参数由LoadPanel 库函数设置,存入的是已存储的面板文件这一对象。
[NI技术] LabWindows™/CVI中的多线程技术多任务、多线程和多处理这些术语经常被交替地使用,但是它们在本质上是不同的概念。
多任务是指操作系统具有在任务间快速切换使得这些任务看起来是在同步执行的能力。
在一个抢占式多任务系统中,应用程序可以随时被暂停。
使用多线程技术,应用程序可以把它的任务分配到单独的线程中执行。
在多线程程序中,操作系统让一个线程的代码执行一段时间(被称为时间片)后,会切换到另外的线程继续运行。
暂停某个线程的运行而开始执行另一个线程的行为被称为线程切换。
通常情况下,操作系统进行线程切换的速度非常快,令用户觉得有多个线程在同时运行一样。
多处理指的是在一台计算机上使用多个处理器。
在对称式多处理(SMP)系统中,操作系统自动使用计算机上所有的处理器来执行所有准备运行的线程。
借助于多处理的能力,多线程应用程序可以同时执行多个线程,在更短的时间内完成更多的任务。
单线程应用程序移植到多核处理器上运行不会获得性能上的改进,这是因为它们只能在其中一个处理器上运行,而不能像多线程应用程序那样在所有的处理器上同时运行。
而且单线程应用程序需要承受操作系统在处理器间切换所需要的开销。
为了在多线程操作系统和/或多处理器计算机上获得最优异的性能,我们必须使用多线程技术来编写应用程序。
目录1. 进行多线程编程的原因2. 选择合适的操作系统3. LabWindows/CVI中的多线程技术简介4. 在LabWindows/CVI的辅助线程中运行代码5. 保护数据6. 避免死锁7. 监视和控制辅助线程8. 进程和线程优先级9. 消息处理10. 使用线程局部变量11. 在线程局部变量中存储动态分配的数据12. 在独立线程中运行的回调函数13. 为线程设定首选的处理器1. 进行多线程编程的原因在程序中使用多线程技术的原因主要有四个。
最常见的原因是多个任务进行分割,这些任务中的一个或多个是对时间要求严格的而且易被其他任务的运行所干涉。
基于LabWindows/CVI的傅里叶变换光谱测量的数据采集系统傅里叶变换光谱仪FTS(Fourier Transform Spectrometer)具有高通光能力,多通道探测、高分辨率、光谱范围宽等优点,是光谱分析强有力的工具,常用于宽光谱、复杂光谱或极弱光谱的测量[1]。
目前傅里叶变换的光谱测量范围主要集中于红外波段,但是利用光束折叠技术的方法,可以将傅里叶变换的光谱测量范围扩展到可见光波段。
与传统文本语言编程相比,LabWindows/CVI编程更适合FTS系统对干涉信号进行采集、加窗、快速傅里叶变换等信号处理方法的需求,进而提高了测量系统干涉图的数据采集、分析和处理能力[2]。
本文设计的基于LabWindows/CVI的傅里叶变换光谱测量数据采集系统,采用了光束折叠的方法,通过参考光对被测光在DSP数据采集系统中进行实时数据采集,并通过PCI转接卡,将结果传到计算机上进行显示处理,充分利用LabWindows/CVI软件的编程优势,进而实现了光谱分辨率的精确计算。
1 系统设计原理1.1 傅里叶变换原理傅里叶变换光谱技术(FTS)[3]的研究始于1880年迈克尔逊发明的干涉仪,它依靠动镜移动与固镜之间的不同波长光程差产生干涉图样。
利用光束折叠技术,将傅里叶变换光谱测量范围由红外扩展到可见光[4],这是测量光谱的有效方法。
测量原理是:采用两路干涉仪——参考光干涉仪和被测光干涉仪,并使之动镜处于同一运动电移台上,如图1所示,当电移台移动时,使用普通迈克尔逊干涉仪的被测光干涉仪产生的光程差为2x下,被测光干涉仪将光束折叠四次,得到的光程差为8x,光电传感单元接收的干涉条纹电流强度I为:当被测光同样为He-Ne激光时,得到的干涉图的交流成分为:It(x)=It0 cos(4?仔?滓0x)。
因而当光源同为一种单色光源时,得到的干涉图信号是余弦波,并且被测光干涉图的周期是参考光干涉图周期的4倍,即被测光干涉图信号在一个周期内可以包含8个参考光干涉图的过零点。