labwindowsCVI教程.docx

上传人:b****5 文档编号:27752631 上传时间:2023-07-04 格式:DOCX 页数:64 大小:1.11MB
下载 相关 举报
labwindowsCVI教程.docx_第1页
第1页 / 共64页
labwindowsCVI教程.docx_第2页
第2页 / 共64页
labwindowsCVI教程.docx_第3页
第3页 / 共64页
labwindowsCVI教程.docx_第4页
第4页 / 共64页
labwindowsCVI教程.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

labwindowsCVI教程.docx

《labwindowsCVI教程.docx》由会员分享,可在线阅读,更多相关《labwindowsCVI教程.docx(64页珍藏版)》请在冰豆网上搜索。

labwindowsCVI教程.docx

labwindowsCVI教程

 

labwindows-CVI-教程

 

LabWindows/CVI基础教程

 

 

序言

LabWindows/CVI是NationalInstruments公司推出的一套面向测控领域的软件开发平台。

它以ANSIC为核心,将功能强大,使用灵活的C语言平台与数据采集,分析和表达的测控专业工具有机地接和起来。

它的集成化开发平台,交互式编程方法,丰富的控件和库函数大大增强了C语言的功能,为熟悉C语言的开发人员建立检测系统,自动测量环境,数据采集系统,过程监控系统等提供了一个理想的软件开发环境。

本教程面向的是那些从未使用过LabWindows/CVI的读者,但是假设读者以有了C语言的基础并且熟悉Windows2000/9x/NT操作系统。

在每一章节的学习中,作者都是通过一个具体的实例让读者迅速的掌握本章的知识点;而不是长篇大论,述及边枝细叶,反而使读者望而却步,只见树木,不见森林。

想信通过对本教程的学习,读者可迅速掌握LabWindows/CVI编程思想及步骤,为读者日后进一步学习打下基础。

本书约定:

“File>>PageSetup>>Options”

File这一种黑色斜体字是指多级菜单名,按扭名,窗口名或者是关键性词汇。

“>>”

是指打开一个多级菜单或对话框。

如:

File>>PageSetup>>Options是指你首先打开File菜单,然后选择PageSetup项,最后从弹出的对话框中选择Options项。

“说明:

通过这种方式你可以修改Panel顶端所显示的名字。

该种字体所写的文字是值得读者注意并记忆的内容。

“”

该椭圆形框所框住的内容是读者需修改的地方。

 

第一部分CVI快速入门

本部分通过编制一个简单的LabWindows/CVI程序,使读者对CVI编程环境,思想及步骤有一初步的认识。

第一章初步认识CVI程序设计

——从一个例子开始

我们的第一个示例将很简单,我们所要做的是创建一个如下的图形用户界面(UserInterface)。

当我们按下Acquire按扭,计算机会自动产生一个正弦波形并画在图形显示区中;当按下Clear按扭后则清除正弦波形;当按下Quit按扭后退出该程序。

现在我们就开使创建该程序。

首先按下面步骤起动CVI:

开始>>程序>>NationalInstrumentCVI>>CVIIDE

或者直接从桌面起动CVI的快捷方式,双击桌面

NationalInstrumentCVI图标

当LabWindows/CVI打开后你就会见到如下所示的一个空的项目(Project)窗:

第一步:

创建用户界面

创建控件元素:

从Project窗中选择:

File>>New>>UserInterface(*.uir)…创建一个用户接口文件(*.uir),CVI会自动弹出如下所示的窗口:

在该窗中UntitledPanel的灰色区域中单击鼠标右键,变会弹出一个快捷菜单如下所示:

从该菜单中选择:

CommandButton>>SquareCommandButton

点击左键后便会创建一个方形的按扭。

由于本程序总共需要三个按扭,所以按照上面的步骤再创建两个方形按扭。

从该菜单中选择:

Graph>>Graph,创建一个用于图形显示的Graph。

现在我们已经建好了用户界面所需的控件元素,请使用鼠标把它们拖到如下图所示的位置。

修改用户界面中各控件元素的属性:

1.修改Panel的属性:

在UntitledPanel中双击一下,便会弹出Panel的一个EditPanel窗,如下图所示:

 

a.

将PanelTitle项中的UntitledPanel改为DemoPanel.

说明:

通过这种方式你可以修改Panel顶端所显示的名字。

b.将Auto-CenterVertically(whenloaded)项

与Auto-CenterHorizontally(whenloaded)项前的矩形框选中。

说明:

当选中后,程序运行时,面板会自动居中。

修改后的EditPanel应如下图所示:

 

点击OK按扭,完成对Panel属性的修改。

2.修改Graph的属性:

在UntitledControl的蓝色区域中双击一下,便会弹出Graph的一个EditGraph窗,如下图所示:

a.

将Label项中的UntitledControl改为ShowWave.

说明:

通过这种方法可以修改Graph的标签名。

点击OK按扭,完成对Graph属性的修改。

3.修改Command按扭的属性:

(1)Acquire按扭:

双击左上方的OK按扭,便会弹出Command的一个EditCommand窗,如下图所示:

 

a.

将ConstantName项改为ACQUIRE

说明:

ConstantName是程序中用来标识该控件元素的常量,在后面的编程中会用到。

b.将CallbackFunction项改为AcquireCallback

说明:

CallbackFunction(回调函数)是程序中用来响应界面中的Windows消息,

也就是说:

当该按扭被点击之后,程序会调用AcquireCallback函数来作为

对按扭被按下这一消息的响应。

c.将Label项改为Acquire

说明:

通过这种方法可以修改按扭名字,Acquire中A字母前有下画线,是指可

以通过Alt+A即可达到按下该按扭的效果(即热键)。

修改后的EditCommandButton窗应如下图所示:

点击OK按扭,完成对CommandButton属性的修改。

(2)Clear按扭:

与以上步骤相同,双击左下方的OK按扭,弹出Command的一个EditCommand窗。

a.将其ConstantName改为CLEAR

b.将CallbackFunction项改为ClearCallback

c.将Label项改为Clear

修改后的EditCommandButton窗应如下图所示:

点击OK按扭,完成CommandButton属性的修改。

(3)Quit按扭:

与以上步骤相同,双击右方的OK按扭,弹出Command的一个EditCommand窗。

a.将其ConstantName改为QUIT

b.将CallbackFunction项改为QuitCallback

c.将Label项改为Quit

修改后的EditCommandButton窗应如下图所示:

 

点击OK按扭,完成CommandButton属性的修改。

当完成以上工作后,Panel应该如下图所示:

选择:

File>>Save保存UIR文件,命名为FirstSample.uir。

到目前为止我们已经完成了用户界面(userinterface)的设计,当程序运行时所显示的界面就是我们刚才上图看到的那样。

下面我们要做的就是真正的程序编制工作,其实CVI可以自动生成许多的代码以及缺省消息的处理函数,你只需添加一些你自己所需的一些代码。

第二步:

完成程序的编制

产生程序代码:

现在请你让图形用户界面窗口为当前响应状态,如下图所示:

从用户图形界面窗口中选择:

Code>>Generate>>AllCode…

然后会显示出如下的界面:

请用你的鼠标点击SelectQuituserInterfaceCallback中的QuitCallk项,确保其前面出现一个小钩。

说明:

1。

当你想让你的程序的主函数为WinMain而不是Main时你可以选择

GenerateWinMian()insteadofMain()项前的矩形框。

2.Selectpanelstoloadanddisplayatstartup项是指你选择那一个Panel作为最初

装入并显示的Panel,当你创建多个Panel时你就需要选择一个Panel作为最初显

示的面板。

由于本程序只有一个Panel所以该Panel就被缺省的作为最初显示

的面板而不再需要你去选择。

3.SelectQuituserInterfaceCallback项是指你选择那一个函数作为退出程序的终

止函数。

本程序是让QuitCallback作为退出函数的。

点击OK按扭,便会弹出如下图所示的源代码(Code)窗:

其窗中的程序代码如下所示:

#include

#include

#include"FirstSample.h"

staticintpanelHandle;

intmain(intargc,char*argv[])

{

if(InitCVIRTE(0,argv,0)==0)

return-1;/*outofmemory*/

if((panelHandle=LoadPanel(0,"FirstSample.uir",PANEL))<0)

return-1;

DisplayPanel(panelHandle);

RunUserInterface();

DiscardPanel(panelHandle);

return0;

}

intCVICALLBACKAcquireCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

break;

}

return0;

}

intCVICALLBACKClearCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

break;

}

return0;

}

intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

QuitUserInterface(0);

break;

}

return0;

}

 

该程序代码共有4个函数:

1.main()函数,是程序的入口,它的功能是初始化程序,装载用户界面面板,并显示。

2.AcquireCallback()函数,当Acquire按扭被点击之后,该函数就是响应该消息的函数。

3.ClearCallback()函数,当Clear按扭被点击之后,该函数就是响应该消息的函数。

4.QuitCallback()函数,当Quit按扭被点击之后,该函数就是响应该消息的函数。

main()与QuitCallback()函数中的代码是计算机自动生成的,而计算机只生成AcquireCallback()与ClearCallback()函数的框架,其内部的用来响应并处理消息的代码是需要你自己添加上去的。

添加程序代码:

1.添加AcquireCallback()函数的程序代码:

AcquireCallback()函数完成以下功能:

从高级分析库(AdvancedAnanysis…)中产生一个正弦波,放在Wave数组中。

现在请将鼠标放在AcquireCallback()函数Event_Commit:

下面的空白行上,如下图所示:

说明:

你鼠标所放位置,就是函数插入的位置。

LabWindows/CVI程序中所需的库函数都

是你使用函数面板,填写参数然后插入到函数所需要的位置。

请选择:

Library>>AdvancedAnalysis…

在弹出的对话框中选择:

SignalGeneration>>SinePattern

便会弹出如下图所示的一个函数面板:

请在NumberofElements项中填上512;把NumberofCycles项改为3;SinePattern项中填上用来装正弦信号的数组Wave,由于Wave是一个数组变量,故我门需要声明该变量:

选择Code>>DeclareVariable会弹出一个如下图所示的对话框:

请在NumberofElements项中填上512,并选择了最下面的矩形框,

然后点击OK按扭完成。

返回到函数面板后,选择Code>>InsertFunctionCall完成函数的插入,这时Code窗中的AcquireCallback()函数应如下所示:

intCVICALLBACKAcquireCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

doubleWave[512];

switch(event)

{

caseEVENT_COMMIT:

SinePattern(512,1.0,0.0,3.0,Wave);

|

break;

}

return0;

}

我们已经的得到了正弦信号,现在需要将该信号画到Graph上去:

1).请将鼠标放在SinePattern()函数下面的空白行上,如上面所示那样。

2).请选择:

Library>>UserInterface

在弹出的对话框中选择:

Controls/Graph/StripChart>>GraphandStripChart>>GraphPlottingandDeleting>>PlotWaveform

把函数面板中的对应各项填写成如下所示:

PanelHandle:

panelHandele

ControlID:

PANEL_GRAPH

YArray:

Wave

NumberofPoints:

512

选择Code>>InsertFunctionCall完成函数的插入,这时Code窗中的AcquireCallback()函数应如下所示:

CVICALLBACKAcquireCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

doubleWave[512];

switch(event)

{

caseEVENT_COMMIT:

SinePattern(512,1.0,0.0,3.0,Wave);

PlotWaveform(panelHandle,PANEL_GRAPH,Wave,512,VAL_DOUBLE,1.0,

0.0,0.0,1.0,VAL_THIN_LINE,VAL_EMPTY_SQUARE,

VAL_SOLID,1,VAL_RED);

break;

}

return0;

到现在为止我们已经完成了AcquireCallback()函数的的程序代码。

3.添加ClearCallback()函数的程序代码:

ClearCallback()函数完成以下功能:

当Clear按扭按下后,计算机会清除Graph上所画的正弦图形。

现在请将鼠标放在ClearCallback()函数Event_Commit:

下面的空白行上,如下图所示:

请选择:

Library>>UserInterface

在弹出的对话框中选择:

Control/Graph/StripChart>>GraphandStripChart>>GraphPlottingandDeleting>>DeleteGraphPlot

把函数面板中的对应各项填写成如下所示:

PanelHandle:

panelHandele

ControlID:

PANEL_GRAPH

PlotHandle:

-1

选择Code>>InsertFunctionCall完成函数的插入,这时Code窗中的ClearCallback()函数应如下所示:

intCVICALLBACKClearCallback(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);

break;

}

return0;

}

到目前为止我们已经完成了程序的编制任务。

这一个看起来不算简单的程序,我们编起来并没有写多少源代码,这正是体现了LabWindows/CVI的强大功能所在。

第四步运行程序完成项目文件

现在请你让源代码(Code)窗为当前响应状态,选择:

Run>>DebugFirstSample_dbg.exe

便会弹出一个对话框,询问你是否在编译前为该文件命名并添加到工程文件中去。

点击yes按扭,把该文件命名为FirstSample.c。

然后计算机询问你是否把“analysis.h”包含到FirstSample.c中去(因为,我们的程序中用到了高级分析库),点击yes按扭,同意该选项。

运行后的程序正如我们预期要求的那样。

退出程序后,从源代码(Code)窗中选择:

Window>>Project

现在项目(Project)窗为当前响应状态,请选择:

Edit>>AddFilestoProject…>>AllFiles(*.*)

便会弹出如下图所示的对话框:

请你按住键,点击FirstSample.h,FirstSample.c,

FirstSample.uir。

然后点击Add按扭把这些文件方到SelectedFiles框中。

点击OK按扭,把以上文件添加到工程文件中去。

至此为止我们已经完成了第一个程序的编制工作,想必大家对

LabWindows/CVI编程已经有了一个初步的了解,头脑里已建起程序编制的基本框架。

 

通过本部分的学习,你是否已经掌握?

□LabWindows/CVI程序编制的基本步骤。

□简单的用户图形界面(*.uir)的创建。

□能使用函数面板完成函数的插入,构建源代码程序。

□项目工程文件的基本构成。

 

 

第二部分CVI环境下程序设计

通过编制第一章的FirstSample程序,读者已对LabWindows/CVI编程有一定了解。

本部分就是在第一部分的基础上进一步讲述LabWindows/CVI程序设计及其编程环境等细节问题。

这一章所讲内容请大家都务必动手实际操作一下,只有这样才能使你真正的掌握本章的内容。

看完本章后请大家结合第一章把FirstSample重新编制一遍,以巩固本章所讲的加速LabWindows/CVI编程的技巧。

 

 

第二章LabWindows/CVI程序剖析

通过例程FirstSample的编制,大家已对LabWindows/CVI编程有了初步的认识。

本章是作者从总体上来谈谈自己对LabWindows/CVI程序的理解与认识。

LabWindos/CVI编程的步骤基本如下:

制定程序设计的基本方案

第一步根据任务确定程序的基本框架如:

程序界面,程序中所需的函数等。

创建用户图形界面

第二步根据第一步制定的方案

创建用户图形界面及回

调函数名。

程序源代码的编制

第三步让计算机生成程序代码及回调函数

的基本框架。

添加函数代码,完成

源代码的编制工作。

工程项目的完成

第四步编译,调试程序。

把头文件,用户图

形界面文件,源代码文件添加到项目

文件中去,完成整个程序的编制

 

程序框架及文件间的相互关系如下图所示(以FirstSample.prj为例):

项目工程文件

(FirstSample.prj)

用户图形界面文件源代码文件头文件

(FirstSample.uir)(FirstSample.c)(FirstSample.h)

panelinclude“FirstSample.h”定义了程序中所需的常

事件消息量以及函数原形。

Acquire按扭AcquireCallback()

事件消息Wave[512]

Clear按扭ClearCallback()

事件消息

Quit按扭QuitCallback()

ShowWave

 

上图所画的构成一项目工程文件的各文件之间的关系是非常重要的。

如果你能理解上图所示的内容,那么你就基本理解了LabWindos/CVI程序的运作过程。

请读者仔细阅读以上内容并理解,这些都有助于读者从整体上去把握LabWindows/CVI程序设计的核心思想,有益于读者进一步学习LabWindows/CVI。

 

第三章LabWindows/CVI编程环境

LabWindows/CVI开发环境有以下三个最主要的窗(window)与函数面板(FunctionPanel):

·项目工程窗(ProjectWindow)

·用户接口编辑窗(UserInterfaceEditorwindow)

·源代码窗(Sourcewindow)

下面就会对以上三个窗及函数面板作详细的介绍。

第一节项目工程窗(ProjectWindow)

一个项目工程窗(ProjectWindow)如下图所示:

在项目工程窗中列出了组成该项目工程所有的文件,项目工程窗中的个菜单项功能如下:

File:

创建,保存或打开文件。

可以打开以下文件:

项目工程文

件(*.Prj)源代码文件(*.c),头文件(*.h)以及用户接口

文件(*.uir)。

Edit:

在项目工程中添加或移去文件。

Build:

使用LabWindows/CVI编译链接器。

Run:

运行一个项目工程。

Windows:

用来访问某个已经

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1