虚拟仪器设计与应用CVI复习资料.docx
- 文档编号:9448695
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:99.92KB
虚拟仪器设计与应用CVI复习资料.docx
《虚拟仪器设计与应用CVI复习资料.docx》由会员分享,可在线阅读,更多相关《虚拟仪器设计与应用CVI复习资料.docx(17页珍藏版)》请在冰豆网上搜索。
虚拟仪器设计与应用CVI复习资料
要求:
1、设置电源开关键,电源打开,LED灯亮,系统开始工作;否则,系统不工作。
若电源未开,直接点击“OK”键,系统弹出错误报警对话框。
2、当电源打开后,定时器开始工作,定时间隔为1s。
每隔一秒,电表的示数增加一度。
电表示数的范围是0-20。
当示数增加到20度后,定时器关闭,电表停止不动,直至再次按下“OK”键重新计数。
3、“QUIT”按钮用于在任意时刻退出整个面板的工作。
#include
#include
#include"sfeef.h"
staticintpanelHandle,t;
doubletimer;
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"sfeef.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKKaishi(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
if(t==0)
MessagePopup("错误","电源没开");
else
SetCtrlAttribute(panelHandle,PANEL_TIMER,ATTR_ENABLED,0);
break;
}
return0;
}
intCVICALLBACKTime(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_TIMER_TICK:
timer++;
SetCtrlVal(panelHandle,PANEL_NUMERICGAUGE,timer);
if(timer==20)
{timer=0;
SetCtrlAttribute(panelHandle,PANEL_TIMER,ATTR_ENABLED,0);
}
break;
}
return0;
}
intCVICALLBACKDianyuan(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_BINARYSWITCH,&t);
SetCtrlVal(panelHandle,PANEL_LED,t);
break;
}
return0;
}
设计一窗口闪烁程序,使其每0.5秒闪烁一次。
表3-1主要控件基本属性列表
控件类型
ConstantName
属性设置
面板
Panel
PANEL
命令按钮
CommandButton
QUITBUTTON
CallbackFunction
QuitCallback
Lable
__Quit
双态按钮
ToggleButton
TOGGLEBUTTON
CallbackFunction
FlashCB
InitialState
off
Lable
控制按钮
定时器控件
Timer
TIMER
CallbackFunction
FlashTimerCB
Interval(seconds)
0.5
Lable
Timer
#include
#include
#include"wyf.h"
#include
staticintpanelHandle;
inthwnd;
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"wyf.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
hwnd=GetCVIWindowHandle();
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKFlashCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{intp;
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_TOGGLEBUTTON,&p);
SetCtrlAttribute(panelHandle,PANEL_TIMER,ATTR_ENABLED,p);
break;
}
return0;
}
intCVICALLBACKFlashTimerCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_TIMER_TICK:
FlashWindow((HWND)hwnd,1);
break;
}
return0;
}
表2-1添加控件的基本属性列表
控件类型
ConstantName
属性设置
命令按钮
CommandButton
SAVE
CallbackFunction
SaveCB
Lable
__Save
LOAD
CallbackFunction
LoadCB
Lable
__Load
设计波形发生器,将产生的波形数据存储到文件中,并能够从文件中回读显示(要求用ANSIC库stdio.h中的文件打开和读写函数)。
#include
#include
#include
#include"wyf.h"
staticintpanelHandle;
doubledatapoints[100];
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"wyf.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKSaveCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{size_tnum;
FILE*fp;
switch(event)
{
caseEVENT_COMMIT:
fp=fopen("test.dat","wb");/*为输出打开一个二进制文件*/
num=fwrite(datapoints,sizeof(double),100,fp);/*写文件*/
fclose(fp);/*关闭文件*/
break;
}
return0;
}
intCVICALLBACKLoadCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
inti;
doubledata[100];
charfileName[MAX_PATHNAME_LEN];
switch(event)
{
caseEVENT_COMMIT:
i=FileSelectPopup("",".dat","","",VAL_LOAD_BUTTON,0,0,1,0,fileName);
if(i==1)
{
size_tnum;
FILE*fp;
fp=fopen(fileName,"rb");
num=fread(data,sizeof(double),100,fp);
fclose(fp);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);
PlotY(panelHandle,PANEL_GRAPH,data,100,VAL_DOUBLE,VAL_FAT_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);
}
break;
}
return0;
}
intCVICALLBACKxiao(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{inti;
inttrace_color,shape;
if(event==EVENT_COMMIT){
GetCtrlVal(panelHandle,PANEL_RINGSLIDE,&shape);
switch(shape){
case0:
for(i=0;i<100;i++)
datapoints[i]=50*sin((((2*3.1415926536)/100)*i))+50;
break;
case1:
for(i=0;i<33;i++)
datapoints[i]=33.0;
for(i=33;i<67;i++)
datapoints[i]=67.0;
for(i=67;i<100;i++)
datapoints[i]=33.0;
break;
case2:
for(i=0;i<25;i++){
datapoints[i]=i*4;
datapoints[i+25]=100-(i*4);
datapoints[i+50]=i*4;
datapoints[i+75]=100-(i*4);
}
break;
case3:
for(i=0;i<100;i++)
datapoints[i]=rand()/32767.0*100.0;
break;
}
GetCtrlVal(panelHandle,PANEL_COLORNUM,&trace_color);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);
PlotY(panelHandle,PANEL_GRAPH,datapoints,100,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,trace_color);
}
return0;
}
编写一个函数发生器,要求:
能够通过用户界面选择产生正弦波、三角波、锯齿波、方波等函数波形用曲线图控件绘制用户选择的波形
表4-1主要控件的基本属性列表
控件类型
ConstantName
属性设置
面板
Panel
PANEL
命令按钮
CommandButton
QUITBUTTON
CallbackFunction
QuitCallback
Lable
__Quit
曲线图控件
Graph
GRAPH1
Lable
波形显示
下拉列表控件
Ring
WAVEFORM
CallbackFunction
WaveFormChoose
Label
波形选择
Label/Value
Pairs
Label
无
Value
0
Label
正弦波
Value
1
Label
三角波
Value
2
Label
锯齿波
Value
3
Label
方波
Value
4
#include
#include
#include
#include"wyf.h"
staticintpanelHandle,type=100,index=50,delay=30,width=10;
staticintn=2000,tablesize=100,t;
doublep=0.0,waveTable[100],x[2000];
doubleamphase=1.0,f=0.001,amp=5.0,first=1.0,last=100.0;
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"wyf.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKboxingxuanze(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_BOXINGXUANZE,&t);
switch(t)
{
case0:
DeleteGraphPlot(panelHandle,PANEL_BOXINGXIANSHI,-1,VAL_IMMEDIATE_DRAW);
break;
case1:
SinePattern(type,amp,0.0,2,waveTable);
break;
case2:
Triangle(type,amp,waveTable);
break;
case3:
SawtoothWave(type,amp,0.02,&p,waveTable);
break;
case4:
Pulse(type,amp,delay,width,waveTable);
break;
}
{if(t)
DeleteGraphPlot(panelHandle,PANEL_BOXINGXIANSHI,-1,VAL_IMMEDIATE_DRAW);
PlotY(panelHandle,PANEL_BOXINGXIANSHI,waveTable,type,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);
}
break;}
return0;
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
在本实验中,我们制作两数值型控件,当一控件值改变时,点击命令控件,另一控件值也随之改变。
同时,设计另一命令控件,当点击它时即可退出用户接口界面。
控件类型
ConstantName
属性设置
面板Panel
PANEL
数值控件Numeric
NUMERICGAUGE
数值控件Numeric
NUMERICTANK
命令按钮
CommandButton
QUITBUTTON
CallbackFunction
QuitCallback
Lable
__Quit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟仪器 设计 应用 CVI 复习资料