Lab windows结课作业模板.docx
《Lab windows结课作业模板.docx》由会员分享,可在线阅读,更多相关《Lab windows结课作业模板.docx(10页珍藏版)》请在冰豆网上搜索。
Labwindows结课作业模板
LabWindows
结课作业
学生姓名:
学号:
学院:
专业:
2012年月
LabWindows结课作业
姓名:
学号:
专业:
综合实验:
示波器
1、实验目的
通过虚拟示波器的设计,了解和学习利用LabWindows/CVI进行虚拟仪器设计的方法、步骤和实现技术,锻炼自己的创新思维,并借此展望虚拟仪器具有的广阔应用前景。
2、实验内容
1.根据自己所学知识,结合自己的想法完成一个简单虚拟示波器的设计;
2.要求设计要有自己的特色和创新点,同时要密切的联系实际,实现尽可能多的功能;
3、实验仪器
装有labwidows软件的计算机一台。
4、实验原理
基于Labwindows,通过对它增加控件,然后增加控件函数,用C语言进行编程,在每个控件的消息上增加关联函数,在触发消息时,调用函数,我们主要对这个函数进行编程。
要完成虚拟示波器的设计必须有外部的信号采集,内部信号的处理函数,要真正完成数据的采集,需要用到PCI板卡,还需要基于PCI协议开发数据卡驱动,数据采集函数,才能完成数据的采集。
本次设计采用的是虚拟信号,也就是给示波器一个设定的信号,然后让它显示出来。
五、实验步骤
步骤1:
根据要实现的功能,设计用户界面;
步骤2:
修改用户界面各控件的属性;
步骤3:
生成代码框架,并在代码框架中添加相应代码及自定义函数;
步骤5:
保存并运行程序,查看运行结果;
六、关键代码及注释
程序1:
控件dispaly的回调函数
intCVICALLBACKdisplaycallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
intnoise_type,i,j;
doublemean,stdev,max,min;
doubledata_noise[100];
charbuf[20];
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&noise_type);
switch(noise_type)
{
case0:
for(i=0;i<100;i++)
data_noise[i]=rand()/32767.0;
break;
case1:
WhiteNoise(100,1.0,5,data_noise);
break;
case2:
GaussNoise(100,1.0,5,data_noise);
break;
}
StdDev(data_noise,100,&mean,&stdev);
MaxMin1D(data_noise,100,&max,&i,&min,&j);
sprintf(buf,"%6.2f",mean);
SetCtrlVal(panelHandle,PANEL_MEAN,buf);
sprintf(buf,"%6.2f",stdev);
SetCtrlVal(panelHandle,PANEL_STDEV,buf);
sprintf(buf,"%6.2f",min);
SetCtrlVal(panelHandle,PANEL_MIN,buf);
sprintf(buf,"%6.2f",max);
SetCtrlVal(panelHandle,PANEL_MAX,buf);
break;
caseEVENT_RIGHT_CLICK:
MessagePopup("help","pressthisbuttontodisplaychart");
break;
}
return0;
}
程序2:
增益的回调函数
intCVICALLBACKDataFunc(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublesignal_scope,signal_frequency;
intwaveform;
switch(control)
{
casePANEL_SCOPEGAIN:
if(event==EVENT_VAL_CHANGED)
GetCtrlVal(panelHandle,PANEL_SCOPEGAIN,&channel_scope_gain);
break;
casePANEL_FREQGAIN:
if(event==EVENT_VAL_CHANGED)
GetCtrlVal(panelHandle,PANEL_FREQGAIN,&channel_frequency_gain);
break;
casePANEL_SCOPE:
if(event==EVENT_COMMIT)
{
GetCtrlVal(panelHandle,PANEL_SCOPE,&signal_scope);
if(channel_signal==0)
Channel1.scope=signal_scope;
else
Channel2.scope=signal_scope;
}
break;
casePANEL_FREQUENCY:
if(event==EVENT_COMMIT)
{
GetCtrlVal(panelHandle,PANEL_FREQUENCY,&signal_frequency);
if(channel_signal==0)
Channel1.frequency=signal_frequency;
else
Channel2.frequency=signal_frequency;
}
break;
casePANEL_WAVEFORM:
if(event==EVENT_COMMIT)
{
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&waveform);
if(channel_signal==0)
Channel1.waveform=waveform;
else
Channel2.waveform=waveform;
}
break;
}
return0;
}
程序3:
通道选择的回调函数
intCVICALLBACKChannel(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_CHANNEL,&channel);
if(channel==0)
{
SetCtrlAttribute(panelHandle,PANEL_CHART,ATTR_NUM_TRACES,1);
SetTraceAttribute(panelHandle,PANEL_CHART,1,ATTR_TRACE_COLOR,VAL_GREEN);
}
if(channel==1)
{
SetCtrlAttribute(panelHandle,PANEL_CHART,ATTR_NUM_TRACES,1);
SetTraceAttribute(panelHandle,PANEL_CHART,1,ATTR_TRACE_COLOR,VAL_RED);
}
if(channel==2)
{
SetCtrlAttribute(panelHandle,PANEL_CHART,ATTR_NUM_TRACES,2);
SetTraceAttribute(panelHandle,PANEL_CHART,1,ATTR_TRACE_COLOR,VAL_GREEN);
SetTraceAttribute(panelHandle,PANEL_CHART,2,ATTR_TRACE_COLOR,VAL_RED);
}
break;
}
return0;
}
程序4:
定时器的回调函数
intCVICALLBACKTimer(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
inti;
switch(event)
{
caseEVENT_TIMER_TICK:
GenerateData();
if(panelHandle==0)
PlotStripChart(panelHandle,PANEL_CHART,Channel1.data,Channel1.pointnum,0,0,VAL_DOUBLE);
if(panelHandle==1)
PlotStripChart(panelHandle,PANEL_CHART,Channel2.data,Channel2.pointnum,0,0,VAL_DOUBLE);
if(panelHandle==2)
PlotStripChart(panelHandle,PANEL_CHART,data,Channel1.pointnum*2,0,0,VAL_DOUBLE);
break;
}
return0;
}
七、实验结果
图1开始时图像
图2调节幅度
图3调节频率
图4调节扫频
图5调节block
图6调节通道和输入信号
图7调节噪声
图8调节通道
八、心得
本次试验所学软件Labwidows/cvi和我正在学习的linux环境下的图形界面开发工具Qtdesigner有很多相似之处,虽然Labwidows/cvi的程序不能直接移植到Qt中运行,但是C和C++的相似相同之处给我提供了更加深刻的理解和广阔的思路,其事件和响应机制更是和Qt中信号与槽的概念的理解完全相同。
这次试验,使我实现了运用labwidows/cvi设计虚拟仪器的方法、步骤和技术,使得自己的创新思维的到了充分的扩展,为我下一步设计媒体播放器提供了新的思路和设计方案,为我进一步学习Qt打好了基础,做好了铺垫。
感谢老师,感谢实验,感谢这门课给我带来了巨大了乐趣。
参考文献
[1]张宗橙、张玲华.数字信号处理与应用[M].南京:
东南大学出版社.2006.
[2]罗霄华、虚拟仪器技术的应用与发展[J].科技情报开发与经济.2001(3).
[3]赵勇.虚拟仪器软件平台和发展趋势[J].国外电子测量技术.2002
(1).
[4]沈元隆、周井泉.信号与系统[M].北京:
人民邮电出版社.2003.
[5]赵美泽.关于虚拟教学仪器的设计与实现[J].莱阳农学院学报,2005,22
(2).
[6]杨乐平.LabVIEW程序设计与应用[M].北京:
电子工业出版社,2001.
[7]王霄.虚拟仪器设计及其在教学中的应用[J].现代电子技术.2005,28(8);
[8]张凤均.LabWindows/CVI开发入门和进阶[M].北京:
北京航空航天大学出版社.2001.
[9]张毅、周绍磊、杨秀霞.虚拟仪器技术分析与应用[M].北京:
机械工业出版社.2004.
[10]张易知、肖啸、张喜斌、卫跃春.虚拟仪器的设计与实现[M].西安电子科技大学出版社.2002.
[11]林永平、蔡坚勇.基于网络的虚拟示波器的设计[J].福建师范大学学报:
自然科学版,2005,21
(2).
[12]崔红梅、麻硕士、裴喜春等.基于LabWindows/CVI平台的虚拟数字信号分析仪的研究与开发[J].计量技术,2005(11).