LabWindowsCVI库函数的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabWindows/CVI库函数的使用
一、实验目的
1、进一步熟悉CVI的集成开发环境
2、进一步学习仪器面板中控键的使用
3、学习CVI库函数使用方法
4、学习用CVI库函数进行频谱分析的步骤
二、实验内容
1、编写一个波形显示程序,要求根据输入的幅值和周期数显示正弦波;根据输入的幅值和占空比显示方波。
2、制作一个简单仪器面板:要求有两个图形控件,用来显示图形;四个数字控件,分别用来输入正弦波幅值、周期以及方波的幅值、占空比;五个命令控件,分别用来启动程序产生正弦波、产生方波,清楚屏幕上显示的图像和退出程序。
3、利用CVI的代码生成工具生成你制作的一起面板的程序框架。
4、在用户程序中添加相应程序,运行后观察程序执行的结果。
三、程序源代码
#include <analysis.h>
#include <cvirte.h>
#include <userint.h>
#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 CVICALLBACK
QINGPINGCallback (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=&phase;
switch (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, V AL_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 库函数设置,存入的是已存储的面板文件这一对象。
Control ID 对应面板文件上的各个控件,由PANEL_xxx 表示,PANEL 为面板名,xxx 为控件对应的常量名称。
2.简述DeleteGraphPlot 函数的调用和设置过程;
答:选择Library→User Interface→Controls/Graphs/Strip Charts →Graphs and Strip Charts→Graph Plotting and Deleting→Delete Graph Plot,调用DeleteGraphPlot 函数。
设置DeleteGraphPlot 函数:Panel Handle 栏输入panelHandle,Control ID 栏输入PANEL_GRAPH,Plot Handle 栏输入默认值-1。
3.简述GetCtrlVal 函数的调用和设置过程;
答:选择Library →User Interface →Controls/Graphs/Strip Charts →General Functions→Get Control Value,调用GetCtrlVal 函数。
设置GetCtrlVal 函数:Panel Handle 栏输入panelHandle,Control ID 栏输入PANEL_NUM 或者PANEL_AMP 即对应的数字控件的常量名称,Value 栏输入对应赋值的指针的调用& 或&num。
4.简述SquareWave 函数的调用和设置过程;
答:选择Library→Advanced Analysis Library→Signal Generation →Square Wave,调用SquareWave 函数。
设置SquareWave 函数:Number of Elements 栏输入需要显示的点数,这里取1000,Amplitude 栏输入幅值的值即变量amp,Frequency 栏输入频率值在这里为1.0/1000*num,Phase 栏输入相移量&phase,Duty Cycle 栏输入占空比,这里取50%即50.0,Square Wave 中填入需要赋值的数组变量名,这里取为a。