LabWindowsCVI库函数的使用
- 格式:doc
- 大小:37.50 KB
- 文档页数:10
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 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=&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。