中国科技论文在线基于 VC++的虚拟示波器的设计与实现孟小琳北京邮电大学信息与通信工程学院,北京(100876)Email: XiaolinMeng@摘 要:本文中介绍的虚拟仪器是基于 VC++和数据采集卡的多功能虚拟数字示波器。
结合 VC++良好的面向对象的特性,该虚拟示波器具有丰富的功能,诸如界面控制和波形显示、 数据采集以及波形的测量等。
论文对这些功能模块的实现方法与过程进行了详细的讨论。
该 系统较之传统示波器结构简单,开发成本低,实现方便,且在各个模块之间能形成较好的交 互性能,能够满足不同用户的需求。
关键词:虚拟仪器;示波器;VC++1 虚拟仪器和虚拟示波器简介1.1 虚拟仪器测量是人类认识自然、 改造自然的一种手段, 通过测量人们可以对客观世界取得定量的 信息, 仪器是测量中必不可少的工具。
电子测量是利用电子学的理论和技术对电量和非电量 进行观察和测量的装置和系统。
随着电子技术的发展及其在各方面的广泛应用, 对于测量和 仪器提出了更高的要求,测试项目和范围与日俱增,测试精度和测试速度要求急剧提高。
七 十年代以来, 是电子测量和仪器领域发生飞跃变化的年代, 微计算机的问世和大规模集成电 路的发展对这一领域产生了革命性的影响。
在测试系统中,对仪器的“智能”要求越来越高, 仪器中微机的任务不断加重,仪器在很多方面逐渐向微计算机靠拢。
此外,随着微计算机和 智能仪器的普及, 测试系统中包含的重复部件越来越多, 而冗余的部件往往不能容错。
因此, 需要统筹地考虑仪器与计算机之间的系统结构。
在这种背景下, 1982 年出现了一种与 PC 机 配合使用的模块式仪器,自动测试系统结构也从传统的机架层迭式结构发展成为模块式结 构。
与传统仪器不同的是,模块式仪器本身不带仪器面板,因此必须借助于 PC 机强大的图 形环境和在线帮助功能,建立图形化的“虚拟的”仪器面板,完成对仪器的控制、数据分析与 显示。
这种与 PC 机结合构成的,包含实际仪器使用与操作信息软件的仪器,被称为“虚拟 仪器”[1]。
与传统仪器相比,虚拟仪器具有以下几个性能特点: 1. 虚拟仪器的硬、软件具有开放性、模块化、可重复使用及互换性等特点。
为提高测 试系统的性能, 可以方便地加入一个通用仪器模块或更换一个仪器模块, 而不用购买一个全 新的系统,有利于测试系统的扩展。
2. 可由用户自定义仪器功能。
由于仪器的功能可在用户级上产生,故它不再完全由仪 器生产厂家来确定,用户可以根据自己的需要,通过增加或修改软件,为虚拟仪器加入新的 测量功能,而不用购买一台新的仪器。
3. 数据处理能力强。
由于借助于计算机,虚拟仪器可以实现过去比基于微处理机内核 仪器复杂许多的数据处理、 分析与显示能力, 并可利用数据文件或数据库格式进行数据的存 储与恢复。
1.2 虚拟示波器-1-中国科技论文在线示波器是一种图形显示设备,它在描绘电信号的波形曲线的同时说明信号的许多特性: 信号的时间和电压值、振荡信号的频率、是否存在信号失真、比较多个波形信号等。
我们可 以从其操作面板的显示屏幕上直观地观察到波形和一些重要参数。
而虚拟示波器就是在传统 的示波器的基础上体现了虚拟仪器可重复使用、更好的面向对象的优势。
对于虚拟示波器来说, 最为重要的应该是其应用程序的开发环境。
自动测试系统应用程 序开发环境可以选择传统文本形式的语言环境, VB、 如 VC、 Delphi 或 LabWindows/CVI 等, 也可以选择图形化的软件开发环境。
被称为快速应用程序开发环境(RAD)的 VC、VB、 Delphi 等开发平台具有可视化界面与已经以类形式封装的可视化控件, 在很大程度上编程也 不需要从头开始。
而另外的基于图形化的编程平台是 NI 公司的 LabVIEW, 它具有图形化的 源代码且能提供复杂的数学分析能力以及丰富的数据显示方式。
一台传统的独立示波器, 往往具有一个操作前面板, 我们可以通过操作面板上的显示屏 幕作为图形化输出。
所有的功能,均需要通过仪器面板的操作来实现,这个操作面板是人与 机器的交互面板, 是传统意义上的人机交互界面。
而虚拟示波器的最大特点就是抛弃了传统 示波器的操作面板, 所有操作与波形显示均须借助计算机强大的计算与显示功能来实现, 用 户与示波器的交互界面变成了由计算机软件实现,也即软面板。
软面板的存在使得人机交互更为自然, 而源代码的编写使得这一交互真正成为可行。
不 论是哪种类型的开发环境, 都致力于产生一个整合性能较好的应用程序, 使示波器完成预期 的任务,实现波形的显示以及谱线的分析等基本功能。
2 虚拟示波器的设计2.1 需求分析虚拟示波器的设计要使外接数据采集卡的 PC 机的界面上显示出对应数据的波形,并对 波形进行分析和存储,以及对一些波形参数进行测量和显示,这一切都应该通过安装在 PC 上的开发环境产生前面板及内部源程序, 形成一个完整的软件系统。
而基于示波器针对波形 的基本处理操作,我们需要通过开发环境完成信号采集、波形控制、数据分析等功能,并使 得虚拟仪器的优越性——可适当添加新的模块——进而完整该系统的设计构想[2]。
2.2 软件的总体设计2.2.1 各模块的划分 基于软件功能的需求分析,可设计出若干功能模块如下:数据采集模块,波形的读取和存 储模块,波形的测量模块,界面控制和波形显示模块及数据分析模,这部分软件和外部硬件 设备结合起来就可以形成一个完整的虚拟示波器系统[2]。
功能模块示意图如下:-2-中国科技论文在线被测信号数据采集卡PC软面板界 面 控 制 和 波 形 显 示数 据 采 集波 形 的 读 取 和 存 储波 形 的 测 量数 据 分 析图 1 虚拟示波器各模块划分 Fig1 the division of each module of Virtual Oscilloscope2.2.2 各模块的功能 界面控制和波形显示模块: 界面控制和波形显示模块主要的功能是:使得人机交互界面能够实现复位和退出,波形 基本显示等功能。
数据采集模块: 数据采集模块主要完成的功能是:通过设置采样通道,采样频率,触发产生的方式等条目 由外部的数据采集卡将数据以波形的形式在显示区呈现出来 (故波形的显示模块有一部分是 与数据采集模块交叉在一起的) 。
波形的测量模块: 波形的测量模块主要完成的功能是:随着设置在波形图上的游标的移动,可测量出此游 标的中心所在的 X 轴和 Y 轴的坐标; 并且可以通过一些控件来控制和更改图形的显示范围: 一种方式是用旋钮和滑块直接改变范围,而另一种方式是用 update 键将编辑框中的数值映 射成波形显现的坐标范围上。
2.2.3 模块间的关系 几乎所有的模块都与界面控制和波形显示模块有直接或间接的关系: 数据采集模块和数 据读取模块可以将代表某种波形的数据引入系统,以波形的形式呈现在波形显示模块中;而在-3-中国科技论文在线波形测量模块中,对波形参数的一些控制会使得波形显示模块中的波形有相应的变化,当然这 一过程是通过在程序中调用相应的函数和设置相应的参数实现的, 如在波形显示控制模块中 定义可以存储数据的变量来记录经过调整的波形,再通过把变量存储进 PC 的某个文件夹, 以便在波形的读取和存储模块中可以调出来用数据描述的波形[2]。
3 虚拟示波器的实现3.1 开发环境简介本设计中使用的开发环境是 Visual C++ 6.0 的环境下通过添加 NI 公司推出的集成式套 件 Measurement Studio 来构成的。
3.1.1 Measurement Studio NI Measurement Studio 是为 Visual Studio .NET 和 Visual Studio 6.0 环境提供的一个集成 式套件,包括各种常用的测量和自动化控件、工具和类库[4]。
NI Measurement Studio 带有的 ActiveX 和.NET 控件、面向对象的测量硬件接口、高级的分析库、科学的用户界面控件、 测量数据网络化、向导、交互式代码设计器和高扩展性类库等功能,极大的减少了应用程序 的开发时间。
3.2 各模块的实现流程及相关代码首先通过 AppWizard 建立应用程序框架,并新建一个工作区,取名 workspace,并在该工作 区下添加一个项目,命名 project。
这样直至应用程序框架生成,再调用已被安装在 VC++下的 Measurement Studio 中的控件,如 slide、knob、graph、button、numedit 等。
然后便可以在对 话框中进行具体模块的实现了[4]。
3.2.1 界面控制和波形显示模块 界面控制和波形显示模块中,通过设置图形显示控件以及两个按键(这三个控件都属于 Measurement Studio 的专用控件)。
它们分别完成波形的显示、复位及退出的基本功能。
这一 模块中主要应用的是控件属性的添加和变量的设置。
在控件工具栏中波形图的位置上按下鼠标并拖动鼠标画出一个适中的 Graph 控件。
在 Graph 上单击鼠标右键,选择 properties 对话框,分别对各个选项卡进行参数设置。
在 General 选项卡中,将 Caption 改为 wave;在 Plots 选项卡中设置两个波形,并分别将它们的颜色改为一 黄一粉,分别对应数据采集模块中的两个通道;在 Cursor 选项卡中添加一个游标,并将其 Crosshair 设置为 Major X & Major Y;在 Axes 选项卡中设置 X 轴和 Y 轴,并将 X 轴的取值范围 设为 0—1000,将 Y 轴的取值范围设为-1000—1000。
在属性设置完毕时,在 ClassWizard 中为 Graph 设置一个变量 m_graph1,以便于以后对某些成员定义时,调用方便。
最后在工具栏中的 ClassView 里,对 CProjectDlg 进行两个变量 m_wave1 和 m_wave2 的添加,以便于对两个波形 数据的存储,这便完成了该模块与波形的读取和存储模块的交互。
Graph 设置完毕,接着添加两个 Caption 为复位和退出的按钮,用来对界面进行控制。
分别 在它们各自的 ClassWizard 中添加 ValueChanged 功能,并编写相应代码如下: 1. 复位按钮: CNiMath::SineWave(m_wave1,1000,500); 此处调用系统自带的正弦函数,并将正弦波存储在 m_wave1 变量中;-4-中国科技论文在线m_graph1.Plots.Item(1).PlotY(m_wave1);使用 m_wave1 中存储的数据在示波区画出编号为 1 的图形,m_wave1 中的数据映射为 波形的纵坐标,此代码中对于变量 m_graph1,引用了其属性 Plots; m_knob1.Value=1000; 此代码对于变量 m_knob1 的属性 Value 进行赋值, 即进行复位操作后, 系统对旋钮赋初 值 1000; m_numedit1.Value=m_knob1.Value; 将旋钮的初值即时赋给编辑框; CNiMath::SineWave(m_wave2,1000,700); m_graph1.Plots.Item(2).PlotY(m_wave2); m_numedit2.Value=m_slide1.Value;m_slide1.Value=1000;对于波形 2 的一些操作,原理同波形 1; m_CtrlSampFre.SetCurSel(0); m_CtrlWin.SetCurSel(0); m_CtrlFilter.SetCurSel(0); m_numedit3.Value=0; m_numedit4.Value=0; m_graph1.Cursors.Item(1).SetXPosition(m_numedit3.Value); m_graph1.Cursors.Item(1).SetYPosition(m_numedit4.Value); 之上七句代码作用在于对三个列表框,两个编辑框和游标位置赋初值,具体调用函数将 在数据采集模块和波形测量模块中进行详述。