1、Lab windows结课作业模板Lab Windows结课作业学生姓名: 学号: 学 院: 专 业: 2012 年 月Lab Windows结课作业姓名: 学号: 专业: 综合实验: 示波器 1、实验目的 通过虚拟示波器的设计, 了解和学习利用LabWindows/ CVI进行虚拟仪器设计的方法、步骤和实现技术, 锻炼自己的创新思维,并借此展望虚拟仪器具有的广阔应用前景。2、实验内容 1.根据自己所学知识,结合自己的想法完成一个简单虚拟示波器的设计; 2.要求设计要有自己的特色和创新点,同时要密切的联系实际,实现尽可能多的功能;3、实验仪器 装有labwidows软件的计算机一台。4、实验原
2、理 基于Labwindows,通过对它增加控件,然后增加控件函数,用C语言进行编程,在每个控件的消息上增加关联函数,在触发消息时,调用函数,我们主要对这个函数进行编程。 要完成虚拟示波器的设计必须有外部的信号采集,内部信号的处理函数,要真正完成数据的采集,需要用到PCI板卡,还需要基于PCI协议开发数据卡驱动,数据采集函数,才能完成数据的采集。本次设计采用的是虚拟信号,也就是给示波器一个设定的信号,然后让它显示出来。五、实验步骤 步骤1:根据要实现的功能,设计用户界面; 步骤2:修改用户界面各控件的属性; 步骤3:生成代码框架,并在代码框架中添加相应代码及自定义函数; 步骤5:保存并运行程序,
3、查看运行结果;六、关键代码及注释 程序1:控件dispaly的回调函数 int CVICALLBACK displaycallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) int noise_type ,i,j; double mean,stdev,max,min; double data_noise100; char buf20 ; switch (event) case EVENT_COMMIT: GetCtrlVal (panelHandle,PAN
4、EL_WAVEFORM, &noise_type); switch(noise_type) case 0: for (i=0;i100;i+) data_noisei = rand()/32767.0 ; break; case 1: WhiteNoise (100, 1.0, 5, data_noise); break; case 2: GaussNoise (100, 1.0, 5, data_noise); break; StdDev (data_noise, 100, &mean, &stdev); MaxMin1D (data_noise, 100, &max, &i, &min,
5、&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; case EVENT_RIGHT_C
6、LICK: MessagePopup(help,press this button to display chart); break; return 0;程序2:增益的回调函数int CVICALLBACK DataFunc (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) double signal_scope,signal_frequency; int waveform; switch (control) case PANEL_SCOPEGAIN: if (even
7、t = EVENT_VAL_CHANGED) GetCtrlVal (panelHandle, PANEL_SCOPEGAIN, &channel_scope_gain); break; case PANEL_FREQGAIN: if (event = EVENT_VAL_CHANGED) GetCtrlVal (panelHandle, PANEL_FREQGAIN, &channel_frequency_gain); break; case PANEL_SCOPE: if (event = EVENT_COMMIT) GetCtrlVal (panelHandle, PANEL_SCOPE
8、, &signal_scope); if(channel_signal=0) Channel1.scope=signal_scope; else Channel2.scope=signal_scope; break; case PANEL_FREQUENCY: if (event = EVENT_COMMIT) GetCtrlVal (panelHandle, PANEL_FREQUENCY, &signal_frequency); if(channel_signal=0) Channel1.frequency=signal_frequency; else Channel2.frequency
9、=signal_frequency; break; case PANEL_WAVEFORM: if (event = EVENT_COMMIT) GetCtrlVal (panelHandle, PANEL_WAVEFORM, &waveform); if(channel_signal=0) Channel1.waveform=waveform; else Channel2.waveform=waveform; break; return 0;程序3:通道选择的回调函数int CVICALLBACK Channel (int panel, int control, int event, voi
10、d *callbackData, int eventData1, int eventData2) switch (event) case EVENT_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=
11、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); Se
12、tTraceAttribute (panelHandle, PANEL_CHART,2,ATTR_TRACE_COLOR, VAL_RED); break; return 0;程序4:定时器的回调函数int CVICALLBACK Timer (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) int i; switch (event) case EVENT_TIMER_TICK: GenerateData(); if( panelHandle=0) PlotStripC
13、hart ( 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_DOUB
14、LE); break; return 0;七、实验结果图1 开始时图像图2 调节幅度图3 调节频率图4 调节扫频图5 调节block图6 调节通道和输入信号图7 调节噪声图8 调节通道八、心得本次试验所学软件Labwidows/cvi和我正在学习的linux环境下的图形界面开发工具Qt designer有很多相似之处,虽然Labwidows/cvi的程序不能直接移植到Qt中运行,但是C和C+的相似相同之处给我提供了更加深刻的理解和广阔的思路,其事件和响应机制更是和Qt中信号与槽的概念的理解完全相同。这次试验,使我实现了运用labwidows/cvi设计虚拟仪器的方法、步骤和技术,使得自己的创新
15、思维的到了充分的扩展,为我下一步设计媒体播放器提供了新的思路和设计方案,为我进一步学习Qt打好了基础,做好了铺垫。感谢老师,感谢实验,感谢这门课给我带来了巨大了乐趣。参考文献1 张宗橙、张玲华.数字信号处理与应用M.南京:东南大学出版社.2006.2罗霄华、虚拟仪器技术的应用与发展J科技情报开发与经济.2001(3) 3 赵勇虚拟仪器软件平台和发展趋势J国外电子测量技术.2002(1)4 沈元隆、周井泉.信号与系统M.北京:人民邮电出版社.2003.5赵美泽关于虚拟教学仪器的设计与实现J莱阳农学院学报,2005,22(2)6杨乐平LabVIEW程序设计与应用M北京:电子工业出版社,20017王霄. 虚拟仪器设计及其在教学中的应用J .现代电子技术.2005,28(8); 8 张凤均. LabWindows/CVI 开发入门和进阶 M.北京: 北京航空航天大学出版社.2001.9 张毅、周绍磊、杨秀霞虚拟仪器技术分析与应用M.北京:机械工业出版社.200410张易知、肖啸、张喜斌、卫跃春虚拟仪器的设计与实现M西安电子科技大学出版社200211林永平、蔡坚勇.基于网络的虚拟示波器的设计J .福建师范大学学报: 自然科学版,2005,21(2).12崔红梅、麻硕士、裴喜春等. 基于LabWindows/CVI 平台的虚拟数字信号分析仪的研究与开发J.计量技术,2005(11).
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1