欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    [电子设计论文精品]基于Delphe7虚拟数字示波器设计.doc

    • 资源ID:4139458       资源大小:490KB        全文页数:25页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [电子设计论文精品]基于Delphe7虚拟数字示波器设计.doc

    职业技术学院 毕业设计课题名称: 示 波 器 学 号: 姓 名: 专业班级: 08软件(1)班 系 (院): 计算机科学系 指导老师: 2011年2月11日目 录摘 要3引 言4一、可信性分析与需求分析51.1 需求分析51.1.1 该软件需要实现的功能51.1.2 编译环境51.1.3 程序技术难点51.2 可行性分析61.2.1 程序设计及算法分析71.2.2 程序框架设计71.2.3开发语言与开发环境7二 、总体设计102.1 总体设计阶段任务及方法102.2总体设计阶段步骤及要求102.3总体设计文档10三 、编码113.1 程序图形化表示层界面设计113.2 程序管理控制层设计113.3 程序管理控制层功能详解133.3.1波形图函数133.3.2 正弦波143.3.3 方波153.3.4 三角波173.3.5 锯齿波18四 示波器最终效果204.1 程序主界面20五 总结21六 展望与发展22七 参考文献24摘 要随着计算机技术的发展,传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展,标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器,就是在通用的计算机平台上定义和设计仪器的测试功能,使用者操作这台计算机,就像是在使用一台专门设计的电子仪器。 示波器是常用的电子仪器之一,是以一个短暂扫迹的形式显示一个量的瞬时值的仪器,也是一种测量、观测、记录的仪器。可也直观表示二维、三维及多维变量之间的瞬态或者稳态函数关系、逻辑关系,以及实现对某些屋里量的变换或存储。示波器作为一种直观通用、精密的测量工具,广泛地应用于工农业生产,科研、军事、教育等各个领域中,进行对电量和许多飞电量的测试、分析。本程序就是通过图形化虚拟示波器,因为在数据的采集和处理过程现在本组的技术能力有限,所以就通过简单的数学知识和Delphi语言的相关知识来解决这个示波器程序。在程序中利用Delphi语言基础知识和不断的重画图形来实现模拟的示波器。关键字: 示波器、正弦波、三角波、方波、频率、周期、振幅 引 言虚拟示波器是采用基于计算机的虚拟技术,用以模拟通用示波器的面板操作和处理功能,也就是使用个人计算机及接口电路来采集现场或实验室信号,并通过图形用户界面来模仿示波器的操作界面,完成信息采集、调理、分析处理和显示输出等功能。示波器先后经历了电子管示波器、晶体管示波器和集成化示波器阶段。现在的示波器正朝着数字化、智能化飞速发展,示波器的种类、型号也是逐年跟新。根据其用途和特点,可划分为:通用示波器、多束示波器、取样示波器、记忆存储示波器、特种示波器等几种。该程序所设计的虚拟示波器,是在数据采集硬件的支持下,配备一定的软件,完成波形的存储、分析、显示等功能。一般测试仪器有信号采集、信号处理和结果显示三大部分组成,这三大部分均由硬件构成。虚拟示波器也是由这三大部分组成,但是,除了信号采集部分是有硬件实现之外,其它两部分都是由软件实现。所设计的虚拟示波器总体上包括数据采集、波形显示、参数测量、频谱分析、等几大模块组成,虚拟示波器的结构框架图如下:信号输入数据采样数据处理波形显示参数测量与控制频谱分析 这是示波器的基本处理过程,而本程序只实现了, 两步,前面的数据都是通过随机函数或设定一个值,然后通过后面的相关调节来改变数据,所以本程序只实现一个简单的模拟示波器。一、可信性分析与需求分析1.1 需求分析 需求分析所要作的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求。要围绕两个核心问题开展需求分析:(1)应该了解什么?(2)通过什么方式去了解?1.1.1 该软件需要实现的功能(1) 波形的展宽,压缩。(2) 幅度的放大与缩小。(3) 波形的平移。(4) 实现信号的测量功能。1.1.2 编译环境硬件平台:CPU:P41.8GHz;内存:256MB以上。(2) 编译工具:Delphi中文版(3) 运行环境:windowsXP1.1.3 程序技术难点1:无法实现对信号的采集,如:电量,电压、电流、频率、相位差、调幅度等2:在试验过程中无法反映相关真实的数据,只能一味的用函数模拟波形。3:程序中波的展宽与压缩,其间不能改变波的原来的参数,只能通过一种算法来实现。4:总体对于示波器的了解还是很少所以在程序中基本只属于模拟,已因为时间问题很多技术要点都没用把握和应用在程序中来。1.2 可行性分析可行性分析是要决定“做还是不做”,它是客观的、科学的。目前国内很多软件公司做系统集成项目,业内流传“没有做不了的系统集成项目”。这是个错误的理念,因为可行性分析表明做某件事的成功几率和是不是有真正的开发价值。不论是为客户做软件项目还是为自己做软件产品,都要进行需求分析。它可以减少不必要的损失和资金投入。该程序所设计的虚拟示波器,是在数据采集硬件的支持下,配备一定的软件,完成波形的存储、分析、显示等功能。一般测试仪器有信号采集、信号处理和结果显示三大部分组成,这三大部分均由硬件构成。虚拟示波器也是由这三大部分组成,但是,除了信号采集部分是有硬件实现之外,其它两部分都是由软件实现。所设计的虚拟示波器总体上包括数据采集、波形显示、参数测量、频谱分析、等几大模块组成,虚拟示波器的结构框架图如下:数据采样数据处理波形显示参数测量与控制频谱分析信号输入 这是示波器的基本处理过程,而本程序只实现了, 两步,前面的数据都是通过随机函数或设定一个值,然后通过后面的相关调节来改变数据,所以本程序只实现一个简单的模拟示波器。1.2.1 程序设计及算法分析本程序因为需求的知识面甚广,而现在只对示波器的相关进行了部分了解,又由于不能硬件支持。所以,示波器的真正功能就未实现,这个程序做的就是模拟示波器的应用的一小部分。1.2.2 程序框架设计在程序中通过分功能来设计程序,一层已图形表示类,中间层是方法层,再后一层是对象层。框架如图所示。1.2.3开发语言与开发环境本程序就是通过图形化虚拟示波器,因为在数据的采集和处理过程现在本组的技术能力有限,所以就通过简单的数学知识和Delphi语言的相关知识来解决这个示波器程序。在程序中利用Delphi语言基础知识和不断的重画图形来实现模拟的示波器。模拟示波器技术的实现是用Delphi语言来实现的,是微软公司推出的可视化编程工具MSDN之一,是目前世界上使用最广泛的程序开发工具。结构简单,编写程序对系统的资源占有极低,是程序编写者编写小型程序的第一选择!如果你是一个对编程一无所知,而又迫切希望掌握一种快捷实用的编程语言的初学者,那选择Delphi没错的。即使考虑到Delphi程序本身编译和运行效率较低的不足,但是它的快捷的开发速度,简单易学的语法,体贴便利的开发环境,它仍不失一款优秀的编程工具,是初学者的首选。Delphi语言的中心思想就是要便于程序员使用,无论是新手或者专家。Delphi语言使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。Delphi的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组建的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面Delphi程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。 窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。 Delphi语言的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。 Delphi语言的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。 Delphi语言使用引用计数的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,Delphi语言对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。 Delphi语言使得大量的外界控件有了自己的生存空间。大量的第三方控件针对Delphi语言提供。Delphi语言也提供了建立、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。二 、总体设计2.1 总体设计阶段任务及方法这一阶段的任务是设计出组成模拟示波器技术实现的所有程序结构(软件系统结构设计)。并采用面向数据流的设计方法将系统按功能划分模块、确定每个模块的功能、模块间的调用关系、模块间的接口以及评价模块结构质量。在设计数据结构时主要采用逐步细化的方法,根据需求分析阶段对系统数据的组成、操作约束和数据间的关系描述、确定数据结构特性。2.2总体设计阶段步骤及要求(1)系统模块设计系统的模块化形式在前面的内容中已经有了较详细的描述,根据以数据为核心的使用模式。(2)系统控制结构对系统的控制主要体现在对信息流的把握上,即对参与处理各种信息流模块进行分析、解耦和协调,从中找出相互之间的逻辑关系,以便采取不同的控制对策。2.3总体设计文档1、软件结构图(软件层次结构图)图3-1软件结构图三 、编码3.1 程序图形化表示层界面设计 3.2 程序管理控制层设计WaveFunction.pas包imgCenterX:integer;imgCenterY:integer;imgWidth:integer;imgHeight:integer;xstep:integer;ystep:integer;wavestep:integer;显示波形窗口的背景颜色WaveViewBKColor:Tcolor;显示波形窗口的网格颜色WaveViewWGColor:Tcolor;WaveArray :array0.20 of Twave;waveCount:integer;起着动态显示波形的信号waveSJStep:integer;获取下拉列表框的选择的序号function GetComBoxSelIndex(ComboBox:TComboBox):integer;画波形函数procedure DrowWave(Image: TImage); 画表格标尺procedure DrowBiaoge(Image: TImage); 画正弦波procedure DrowSinaWave(Image: TImage;wave:Twave);画三角波procedure DrowSANWave(Image: TImage;wave:Twave);画方波procedure DrowFangWave(Image: TImage;wave:Twave);画锯齿波procedure DrowJUCIWave(Image: TImage;wave:Twave);画背景procedure DrowBack(Image: TImage);底层与类对象层WaveSystem.pastype Twave= class自定义示波器类 电压 waveVotage:double; 频率 wavefrequency :double; 周期 wavecycle :double; 类型 wavetype:integer; 基准线值 wavejz:integer; 时基线值 wavesj:integer; 波线的颜色 wavecolor:TColor; XZengYi:integer; YZengYi:integer;const SINWAVE=1;(*正弦波*) SANWAVE=2; (*三角波*) FANGWAVE=3; (*方波*) JUCIWAVE=4; (*锯齿波*)3.3 程序管理控制层功能详解3.3.1波形图函数procedure DrowWave(Image: TImage);var i:integer;beginDrowBack(Image);DrowBiaoge(Image);i:=0;while i< waveCount dobegin case WaveArrayi.wavetype of 1:DrowSinaWave(Image,WaveArrayi); 2:DrowSANWave(Image,WaveArrayi); 3:DrowFangWave(Image,WaveArrayi); 4:DrowJUCIWave(Image,WaveArrayi); end; i:=i+1;end;end;3.3.2 正弦波procedure DrowSinaWave(Image: TImage;wave:Twave);var i:integer;var CentY:integer;var cycle:integer;var ZENGHU:integer;var SinData:double;var xPosion:integer;begin CentY:= imgCenterY + wave.wavejz; (*中心Y坐标*) cycle := trunc(wave.wavecycle +wave.XZengYi) ; (*周期*) ZENGHU := trunc( wave.YZengYi*wave.waveVotage ); (*振幅*) if wave.YZengYi=0 then begin wave.YZengYi:=1; end; if waveSJStep > imgWidth *2 then (*控制动画效果的步长*) begin if trunc(waveSJStep + wave.wavesj ) mod cycle )= 0 then begin waveSJStep :=0; end; end; i:=0; xPosion :=0 - waveSJStep - wave.wavesj; (*设置起始位置*) Image.Canvas.MoveTo(xPosion,CentY);/画笔移动到起始位置处 Image.Canvas.Pen.Color :=wave.wavecolor; /初始化画笔颜色 while xPosion <imgWidth do begin SinData :=ZENGHU*sin(i*3.1415926) / (cycle / 4)+CentY; SinData :=SinData ; Image.Canvas.LineTo(xPosion,trunc(SinData); xPosion:=xPosion+1; i :=i +1; end; waveSJStep:=waveSJStep+1;end;3.3.3 方波procedure DrowFangWave(Image: TImage;wave:Twave);var i:integer;var cycle:integer;var yPosion:integer;var CentY:integer;var ZENGHU:integer;var startY:integer;begin if wave.YZengYi=0 then begin wave.YZengYi:=1;end; (*让增益不能为0 防止数据出错*) if wave.XZengYi=0 then begin wave.XZengYi:=1;end; CentY:= imgCenterY + wave.wavejz; cycle := trunc(wave.wavecycle +wave.XZengYi) ; (*周期*) ZENGHU := trunc( wave.YZengYi*wave.waveVotage ); (*振幅*) if waveSJStep > imgWidth *2 then (*控制动画效果的步长*) begin if trunc(waveSJStep + wave.wavesj) mod cycle )= 0 then begin waveSJStep :=0; end; end; i:=0 - waveSJStep - wave.wavesj; (*设置起始位置*) yPosion:= CentY + ZENGHU; Image.Canvas.MoveTo(i,yPosion);/画笔移动到起始位置处 Image.Canvas.Pen.Color :=wave.wavecolor; /初始化画笔颜色 while i<imgWidth + cycle do (*通过循环的方式把后面的波形画出来*) begin ZENGHU:= ZENGHU*(-1); yPosion:= CentY + ZENGHU; Image.Canvas.LineTo(i,yPosion); i:=i+ cycle div 2; Image.Canvas.LineTo(i,yPosion); end; waveSJStep:=waveSJStep+1; -全局变量 步长加1-end;3.3.4 三角波procedure DrowSANWave(Image: TImage;wave:Twave);var i:integer;var cycle:integer;var yPosion:integer;var CentY:integer;var ZENGHU:integer;var startY:integer;begin if wave.YZengYi=0 then begin wave.YZengYi:=1;end; (*让增益不能为0 防止数据出错*) if wave.XZengYi=0 then begin wave.XZengYi:=1;end; CentY:= imgCenterY + wave.wavejz; cycle := trunc(wave.wavecycle +wave.XZengYi) ; (*周期*) ZENGHU := trunc( wave.YZengYi*wave.waveVotage ); (*振幅*) if waveSJStep > imgWidth *2 then (*控制动画效果的步长*) begin if trunc(waveSJStep + wave.wavesj) mod cycle )= trunc(cycle div 4) then begin waveSJStep :=0; end; end;. i:=0 - waveSJStep - wave.wavesj; (*设置起始位置*) Image.Canvas.MoveTo(i,CentY);/画笔移动到起始位置处 Image.Canvas.Pen.Color :=wave.wavecolor; /初始化画笔颜色 ZENGHU:= ZENGHU*(-1); yPosion:= CentY + ZENGHU; i:= i+ cycle div 4 ; Image.Canvas.LineTo(i,yPosion); (*画第一个1/4周期的图像*) while i<imgWidth + cycle do (*通过循环的方式把后面的波形画出来*) begin i:=i+ cycle div 2; ZENGHU:= ZENGHU*(-1); yPosion:= CentY + ZENGHU; Image.Canvas.LineTo(i,yPosion); end; waveSJStep:=waveSJStep+1; -全局变量 步长加1-end;3.3.5 锯齿波procedure DrowJUCIWave(Image: TImage;wave:Twave);var i:integer;var cycle:integer;var yPosion:integer;var CentY:integer;var ZENGHU:integer;var startY:integer;begin if wave.YZengYi=0 then begin wave.YZengYi:=1;end; (*让增益不能为0 防止数据出错*) if wave.XZengYi=0 then begin wave.XZengYi:=1;end; CentY:= imgCenterY + wave.wavejz; cycle := trunc(wave.wavecycle +wave.XZengYi) ; (*周期*) ZENGHU := trunc( wave.YZengYi*wave.waveVotage ); (*振幅*) if waveSJStep > imgWidth *2 then (*控制动画效果的步长*) begin if trunc(waveSJStep + wave.wavesj) mod cycle )= trunc(cycle div 4) then begin waveSJStep :=0; end; end; i:=0 - waveSJStep - wave.wavesj; (*设置起始位置*) yPosion:= CentY + ZENGHU; Image.Canvas.MoveTo(i,yPosion);/画笔移动到起始位置处 Image.Canvas.Pen.Color :=wave.wavecolor; /初始化画笔颜色 while i<imgWidth + cycle do (*通过循环的方式把后面的波形画出来*) begin ZENGHU:= ZENGHU*(-1); yPosion:= CentY + ZENGHU; i:=i+ cycle div 2; Image.Canvas.LineTo(i,yPosion); ZENGHU:= ZENGHU*(-1); yPosion:= CentY + ZENGHU; Image.Canvas.LineTo(i,yPosion); end; waveSJStep:=waveSJStep+1; -全局变量 步长加1-end;四 示波器最终效果 4.1 程序主界面五 总结通过实验得出如下总结;1、设计的示波器主要的优点为:软件开发效率高,可操作性和维护性好,在相同的硬件条件下,可以通过修改和增加软件模块,形成新的仪器功能。2、又因为知识水平有限,设计中存在着很多的不足:影响示波器系统各个性能的因素很多,检测信号的输入,数据采样,数据分析等功能不能实现。3、所设计的虚拟示波器未具有的网络功能: 网络的潮流将资源共享带入一个新的阶段,加速了虚拟仪器与网络技术相结合以及远程监控技术的发展。 示波器的发展是很值得去开阔,但已要学相关的很多知识才能去解决。六 展望与发展 PC技术与嵌入式系统融合发展,虚拟仪器的功能得到进一步的发展,例如更多的嵌入式和实时功能。随着PC技术和相关技术的发展,虚拟仪器技术已成为一项前沿学科,代表着仪器发展的最新方向之一,不断的被推向各个新的领域,在新的世纪将大行其道。虚拟仪器设计已经成为测试与仪器技术发展的一个重要方向。随着高速A/D芯片和电路的进一步集成化,可以设想 在不远的将来,一台有安装虚拟仪器软件的标准微机成为一个对功能的测量仪器站,从根本上改变目前专用仪器的研制和生产方式,具有广阔的应用前景和巨大的潜在经济效益,计算机虚拟示波器的成本低,功能全,可扩充性强,较适合应用于工业测试和工业自动化及汽车、轮船、水利和医疗等领域。伴随着计算机技术的进一步发展,虚拟器的开发和研究将会获得更大的推动。传统台式仪器是由仪器厂家设计并定义好功能的一个封闭结构,它有固定的输入输出接口和仪器操作面板,每种仪器实现一类特定的测量功能,并以确定的方式提供给用户。从一般的仪器设计模型看,一种仪器无非是由数据采集,分析处理,人机交换和显示等几部分功能模块组成的整体。因此,我们可以设想在必要的数据采集硬件和通用计算机支持下,通过软件设计实现仪器的全部功能,这就是虚拟仪器设计的核心。与传统仪器相比,虚拟仪器除了在性能、易用性、用户可制定性等方面也具有突出优势。一方面,目前我国高档台式仪器如数字示波器、频谱分析仪、逻辑分析仪等主要依靠进口,这些仪器加工工艺复杂、对制造水平要求高,生产突破有困难,采用虚拟仪器技术可以通过只采购必要的通用数据采集硬件来设计自己的仪器系统;另一方面,用户可以将一些先进的数字信号处理算法应用于虚拟仪器设计,提供传统台式仪器不具备的功能,而且完全通过软件配置实现多功能集成的仪器设计。因此,可以说虚拟仪器代表了未来测量仪器设计发展的方向。虚拟仪器技术目前在国外发展很快,以美国国家仪器公司(NI公司)为代表的一批场商已经在市场上推出了基于虚拟仪器技术而设计的商品化仪器厂品。示波器是在科学研究和工程设计中广泛应用的一种通用仪器。它能把肉眼看不见的电信号变换成看得见的图象,便于人们研究各种电现象的变化过程。利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用它测试各种不同的电量,如电压、电流、频率、相位差、调幅度等等七 参考文献1 陆绮荣.基于虚拟仪器技术个人实验室的构建. 北京:电子工业出版社,20062 刘忠义,韩慧莲. 高性能虚拟数字示波器的研究与实现. 华北工业学院测试技术学报,2002,16(1)3 郑莹娜. 基于NI-LabVIEW开发平台的虚拟仪器测试系统. 电子技术应用,1998 4 王勇领.计算机数据处理系统分析与设计.清华大学出版社,1986;5 张基温.信息系统开发案例.北京;清华大学出版社,1999;6 党建武.管理信息系统,兰州大学出版社,2001;

    注意事项

    本文([电子设计论文精品]基于Delphe7虚拟数字示波器设计.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开