labwindows使用基础教程.docx
《labwindows使用基础教程.docx》由会员分享,可在线阅读,更多相关《labwindows使用基础教程.docx(15页珍藏版)》请在冰豆网上搜索。
![labwindows使用基础教程.docx](https://file1.bdocx.com/fileroot1/2022-11/25/26cdd894-7aab-4ce2-97be-7a503c04c46b/26cdd894-7aab-4ce2-97be-7a503c04c46b1.gif)
labwindows使用基础教程
LabWindows/CVI基础教程1
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.
现在我们已经建好了用户界面所需的控件元素,请使用鼠标把它们拖到如下图所示的位置.
修改用户界面中各控件元素的属性:
修改Panel的属性:
在UntitledPanel中双击一下,便会弹出Panel的一个EditPanel窗,如下图所示:
将PanelTitle项中的UntitledPanel改为DemoPanel.
说明:
通过这种方式你可以修改Panel顶端所显示的名字.
将Auto-CenterVertically(whenloaded)项
与Auto-CenterHorizontally(whenloaded)项前的矩形框选中.
说明:
当选中后,程序运行时,面板会自动居中.
修改后的EditPanel应如下图所示:
点击OK按扭,完成对Panel属性的修改.
修改Graph的属性:
在UntitledControl的蓝色区域中双击一下,便会弹出Graph的一个EditGraph窗,如下图所示:
将Label项中的UntitledControl改为ShowWave.
说明:
通过这种方法可以修改Graph的标签名.
点击OK按扭,完成对Graph属性的修改.
3.修改Command按扭的属性:
(1)Acquire按扭:
双击左上方的OK按扭,便会弹出Command的一个EditCommand窗,如下图所示:
将ConstantName项改为ACQUIRE
说明:
ConstantName是程序中用来标识该控件元素的常量,在后面的编程中会用到.
将CallbackFunction项改为AcquireCallback
说明:
CallbackFunction(回调函数)是程序中用来响应界面中的Windows消息,
也就是说:
当该按扭被点击之后,程序会调用AcquireCallback函数来作为
对按扭被按下这一消息的响应.
将Label项改为Acquire
说明:
通过这种方法可以修改按扭名字,Acquire中A字母前有下画线,是指可
以通过Alt+A即可达到按下该按扭的效果(即热键).
修改后的EditCommandButton窗应如下图所示:
点击OK按扭,完成对CommandButton属性的修改.
(2)Clear按扭:
与以上步骤相同,双击左下方的OK按扭,弹出Command的一个EditCommand窗.
将其ConstantName改为CLEAR
将CallbackFunction项改为ClearCallback
将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))>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()函数下面的空白行上,如上面所示那样.
.请选择:
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()函数的的程序代码.
添加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:
用来访问某个已经打开的窗,例如:
用户接口编辑窗,
源代码窗….
Tools:
运行向导(wizard)或者你添加到Tools菜单中的一些
工具.
Options:
设置LabWindows/CVI的编程环境.
Help:
LabWindows/CVI在线帮助和WindowsSDK的函数帮
助.
工程项目文件显示了所列文件的状态,其各项的含义如下图所示:
文件名这个标志是指源代码最后修改该文件
文件是否是打开的的日期时间
S是指该文件已经修C是指运行该文件之O是指你可以让该文件I是指这是一个
改过了,请保存该文件前必须先经过编译编译而无需debugging仪器驱动程序
如果你想进一步了解项目工程窗(Projectwindow)细节请使用在线帮助.
请选择:
Help>>CVILibrary>>RelatedHelp…OnlineManualsForLabWindows/CVI
请查阅LabWindows/CVIUserManualChapter3Projectwindow.
第二节用户接口编辑窗(UserInterfaceEditwindow)
图形用户接口编辑窗是用来创建,编辑GUI(GraphUerInterface)的.一个用户接口至少要有一个面板(Panel)以和在面板上的各种控件元素(ControlElement).图形用户接口编辑窗为你提供了非常快捷的创建,编辑这些面板和控件元素的方法,可以让你在短时间里创建出符合你要求的图形界面.
一个图形用户接口编辑窗就如下图所示,下面我们就详细讲讲图形用户接口编辑窗各菜单项的功能:
File:
创建,保存或打开文件.
Edit:
可用来编辑面板或控件元素.
说明:
其实我们直接用鼠标双击我们想要编辑对象即可(就象编制中修改面板和四个按扭那样).
Creat:
可用来创建面板和各种控件元素.
说明:
其实我们只需在Panel上点击鼠标右键,便会弹出一个快捷菜单,选择
你所想创建的对象即可(就象编制FisrtSample时创建Graph和四个Button
那样).
View:
当创建多个面板后就可用该项来查看想要看的面板.
Arrange:
用来调节各个控件元素的位置与大小.
Code:
产生源代码,以和选择你所需的事件消息类型.
Run:
运行程序.
Library:
函数库.
说明:
我们将在后面详细的介绍LabWindows/CVI的函数库.
Tools:
一些你可使用的工具项.
Windows:
用来访问某个已经打开的窗,例如:
项目工程窗,用户
接口编辑窗,源代码窗….
Options:
设置用接口编辑窗的编辑环境.
Help:
LabWindows/CVI在线帮助和WindowsSDK的函数帮
助.
说明:
在用户接口编辑窗中有一快捷菜单是非常有用的,当你把鼠标指在某一控
件元素上点击右键后便弹出一快捷菜单,通过该菜单你可以生成回调函数
以和查看回调函数,而无须你再切换到源代码窗后再查看.这是一个大家
以后在编程中要常用到的技巧,请掌握.
图形用户接口编辑窗中还有四个模式选择按扭,现介绍如下:
当该按扭被按下后,你可以操作面板上的控件,同时在图形用户接口编辑窗的右上角上来观察面板上的事件消息.
在这种模式下你可以创建,编辑面板和控件元素以和修改它们的属性.
在这种模式下你可以直接修改控件元素的名字,标签等文字相关方面的东西.
在这种模式下你可以直接修改面板,控件元素的颜色.先把鼠标方在你所想