本程序经过我多次调试,欢迎交流。
我的版本是CVI8.0
起动CVI:
开始>>程序>>National Instrument CVI>>CVI IDE
或者直接从桌面起动CVI 的快捷方式,双击桌面
National Instrument CVI 图标
第一步:创建用户界面
创建控件元素:
从Project窗中选择:File>>New>>User Interface(*.uir)…创建一个用户接口文件(*.uir), 在该窗中Untitled Panel 的灰色区域中单击鼠标右键,变会弹出一个快捷菜单从该菜单中选择:Command Button>>Square Command Button
点击左键后便会创建一个方形的按扭。
由于本程序总共需要三个按扭,所以按照上面的步骤再创建两个方形按扭。从该菜单中选择:Graph>>Graph ,创建一个用于图形显示的Graph。
修改用户界面中各控件元素的属性:
1.修改Panel的属性:
在Untitled Panel中双击一下,便会弹出Panel的一个Edit Panel窗
a.将Panel Title项中的Untitled Panel 改为 Demo Panel.
说明:通过这种方式你可以修改Panel 顶端所显示的名字。
b.将Auto-Center Vertically(when loaded)项
与Auto-Center Horizontally(when loaded)项前的矩形框选中。
说明:当选中后,程序运行时,面板会自动居中。
点击OK按扭,完成对Panel属性的修改。
2.修改Graph的属性:
在Untitled Control的蓝色区域中双击一下,便会弹出Graph的一个Edit Graph窗
a.将Label项中的Untitled Control改为ShowWave.
说明:通过这种方法可以修改Graph的标签名。
点击OK按扭,完成对Graph属性的修改。
3.修改Command按扭的属性:
(1)Acquire 按扭:
双击左上方的OK按扭,便会弹出Command的一个Edit Command窗.
a. 将Constant Name项改为ACQUIRE
说明:Constant Name是程序中用来标识该控件元素的常量,在后面的编程中会用到。
b将Callback Function项改为AcquireCallback
说明:Callback Function(回调函数)是程序中用来响应界面中的Windows消息,
也就是说:当 该按扭被点击之后,程序会调用AcquireCallback函数来作为
对按扭被按下这一消息的响应。
c 将Label项改为 Acquire
说明:通过这种方法可以修改按扭名字,Acquire中A字母前有下画线,是指可
以通过 Alt + A即可达到按下该按扭的效果(即热键)。
点击OK按扭,完成对Command Button属性的修改。
(2)Clear 按扭:
与以上步骤相同,双击左下方的OK按扭,弹出Command的一个Edit Command窗。
a. 将其Constant Name改为CLEAR
b. 将Callback Function项改为ClearCallback
c. 将Label项改为 Clear
点击OK按扭,完成Command Button属性的修改。
(3)Quit 按扭:
与以上步骤相同,双击右方的OK按扭,弹出Command的一个Edit Command窗。
a. 将其Constant Name改为QUIT
b. 将Callback Function项改为QuitCallback
c. 将Label项改为 Quit
选择:File>>Save 保存UIR文件,命名为FirstSample.uir。
到目前为止我们已经完成了用户界面(user interface)的设计,当程序运行时所显示的界面就是我们刚才上图看到的那样。
下面我们要做的就是真正的程序编制工作,其实CVI可以自动生成许多的代码以及缺省消息的处理函数,你只需添加一些你自己所需的一些代码。
第二步:完成程序的编制
产生程序代码:
从用户图形界面窗口中选择:Code>>Generate>>All Code…
用你的鼠标点击Select QuituserInterface Callback 中的QuitCallk项,确保其前面出现一个小钩。
说明:1。当你想让你的程序的主函数为Win Main而不是Main时你可以选择
Generate WinMian( ) instead of Main( )项前的矩形框。
2.Select panels to load and display at startup 项是指你选择那一个Panel作为最初
装入并显示的Panel,当你创建多个Panel时你就需要选择一个Panel作为最初显
示的面板。由于本程序只有一个Panel所以该Panel就被缺省的作为最初显示
的面板而不再需要你去选择。
3.Select QuituserInterface Callback 项是指你选择那一个函数作为退出程序的终
止函数。本程序是让QuitCallback作为退出函数的。
点击OK按扭,便会弹出源代码(Code)窗:
其窗中的程序代码如下所示:
#include <cvirte.h>
#include <userint.h>
#include "FirstSample.h"
static int panelHandle;
int main (int argc, char *argv[ ] )
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "FirstSample.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK AcquireCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK ClearCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
该程序代码共有4个函数:
1. main( )函数,是程序的入口,它的功能是初始化程序,装载用户界面面板,并显示。
2. AcquireCallback( )函数,当Acquire按扭被点击之后,该函数就是响应该消息的函数。
3. ClearCallback( )函数,当Clear按扭被点击之后,该函数就是响应该消息的函数。
4. QuitCallback( )函数,当Quit按扭被点击之后,该函数就是响应该消息的函数。
main( )与QuitCallback( )函数中的代码是计算机自动生成的,而计算机只生成AcquireCallback( )与ClearCallback( )函数的框架,其内部的用来响应并处理消息的代码是需要你自己添加上去的。
添加程序代码:
1.添加AcquireCallback( )函数的程序代码:
AcquireCallback( )函数完成以下功能:从高级分析库(Advanced Ananysis…)中产生一个正弦波,放在Wave数组中。
现在请将鼠标放在AcquireCallback( )函数Event_Commit:
下面的空白行上:
说明:你鼠标所放位置,就是函数插入的位置。LabWindows/CVI程序中所需的库函数都
是你使用函数面板,填写参数然后插入到函数所需要的位置。
请选择:Library>>Advanced Analysis…
在弹出的对话框中选择:
Signal Generation>>Sine Pattern
请在Number of Elements项中填上512;把Number of Cycles 项改为3;Sine Pattern 项中填上用来装正弦信号的数组Wave,由于Wave是一个数组变量,故我门需要声明该变量:
选择Code>>Declare Variable会弹出一个对话框:
请在Number of Elements 项中填上512,并选择了最下面的矩形框,
然后点击OK按扭完成。
返回到函数面板后,选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的AcquireCallback( )函数应如下所示:
int CVICALLBACK AcquireCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double Wave[512];
switch (event)
{
case EVENT_COMMIT:
SinePattern (512, 1.0, 0.0, 3.0, Wave);
|
break;
}
return 0;
}
我们已经的得到了正弦信号,现在需要将该信号画到Graph上去:
1).请将鼠标放在SinePattern( )函数下面的空白行上,如上面所示那样。
2). 请选择:
Library>>User Interface
在弹出的对话框中选择:
Controls/Graph/Strip Chart>>Graph and Strip Chart>>Graph Plotting and Deleting>>Plot Waveform
把函数面板中的对应各项填写成如下所示:
PanelHandle: panelHandele
Control ID : PANEL_GRAPH
Y Array: Wave
Number of Points: 512
选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的AcquireCallback( )函数应如下所示:
CVICALLBACK AcquireCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double Wave[512];
switch (event)
{
case EVENT_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;
}
return 0;
到现在为止我们已经完成了AcquireCallback( )函数的的程序代码。
3.添加ClearCallback( )函数的程序代码:
ClearCallback( )函数完成以下功能:当Clear按扭按下后,计算机会清除Graph上所画的正弦图形。
现在请将鼠标放在ClearCallback( )函数Event_Commit:
下面的空白行上:
请选择:
Library>>User Interface
在弹出的对话框中选择:
Control/Graph/Strip Chart>>Graph and Strip Chart>>Graph Plotting and Deleting>>Delete Graph Plot
把函数面板中的对应各项填写成如下所示:
PanelHandle: panelHandele
Control ID : PANEL_GRAPH
PlotHandle: -1
选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的ClearCallback( )函数应如下所示:
int CVICALLBACK ClearCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
break;
}
return 0;
}
到目前为止我们已经完成了程序的编制任务。这一个看起来不算简单的程序,我们编起来并没有写多少源代码,这正是体现了LabWindows/CVI的强大功能所在。
第四步 运行程序完成项目文件
现在请你让源代码(Code)窗为当前响应状态,选择:
Run>>Debug FirstSample_dbg.exe
便会弹出一个对话框,询问你是否在编译前为该文件命名并添加到工程文件中去。点击yes按扭,把该文件命名为FirstSample.c。然后计算机询问你是否把 “analysis.h”包含到FirstSample.c中去(因为,我们的程序中用到了高级分析库),点击yes按扭,同意该选项。
运行后的程序正如我们预期要求的那样。退出程序后,从源代码(Code)窗中选择:
Window>>Project
现在项目 (Project)窗为当前响应状态,请选择:
Edit>>Add Files to Project…>>All Files(*.*)
请你按住<Ctrl>键,点击FirstSample.h ,FirstSample.c ,
FirstSample.uir。然后点击Add按扭把这些文件方到Selected Files框中。
点击OK按扭,把以上文件添加到工程文件中去。
至此为止我们已经完成了第一个程序的编制工作。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=821542