更多资料下载 www.sfmcu.com www.sf-edu.cn 第 1 页 共 57 页
引 言
著名科学家门捷列夫说:“没有测量,就没有科学”。测量科学的先驱凯尔文又说,
一个事物你如果能够测量它,并且能用数字来表达它,你对它就有了深刻的了解;但如
果你不知道如何测量它,且不能用数字表达它,那么你的知识可能就是贫瘠的,是不令
人满意的。测量是知识的起点,也是你进入科学殿堂的开端。
1 基于网络的虚拟仪器测试系统
1.1 概述
随着计算机技术、通信技术与仪器技术的不断发展,使得虚拟仪器得到了进一步发
展,虚拟仪器将计算机资源与仪器硬件、数字信号处理技术结合,把厂家定义仪器功能
的方式转变为由用户自己定义仪器功能。用户可根据测试的需要,自己设计所需要的仪
器系统,利用一种或多种功能的通用模块,调用不同功能的软件模块,组成不同的仪器
功能。在虚拟仪器中,计算机成为仪器的一部分,使得计算机可以得到充分发挥。除了
仪器的输入、输出、数据处理分析、结果显示由计算机完成外,还可组成计算机网络。
一个大的复杂的测试系统往往系统的测量、输入、输出、结果分析分布在不同的地理位
置,仅用一台计算机并不能胜任测试任务,需要由分布在不同地理位置的若干计算机共
同完成整个测试任务。计算机网络技术、总线技术的发展,乃至 Internet 网的发展拓
展了虚拟仪器测试系统的应用范围。利用网络技术将分散在不同地理位置不同功能的测
试设备联系在一起,使昂贵的硬件设备、软件在网络内得以共享,减少了设备重复投资。
一台计算机采集的数据可以立即传输到另一台处理分析机上进行处理分析,分析后的结
果可被执行机构、设计师查询使用,使数据采集、传输、处理分析成为一体,容易实现
实时采集、实时监测。重要的数据实行多机备份,提高了系统的可靠性。对于有些危险
的、环境恶劣的不适合人员操作的数据采集工作可实行远程采集,将采集的数据放在服
务器中供用户使用。
1.2 虚拟仪器网络测试系统设计
虚拟仪器网络测试系统的设计需从虚拟仪器和网络技术两方面考虑。
1.2.1 虚拟仪器部分
分析测试系统的要求和系统的功能,根据系统功能的要求,在软件和硬件之间进
行优化选择,从而确定仪器所必需的硬件模块,以便用最少的模块实现仪器的最佳功
能。根据应用情况与实际的条件选择基于计算机的虚拟仪器的仪器模块(VXI 总线、PCI
总线、PXI 总线、GPIB 仪器),包括示波器、信号调理电路、万用表、信号源等模块。
硬件确定以后,主要确定软件功能模块,哪些仪器功能由软件实现,将软件功能
划分为相对独立的模块。然后选择易于编写的图形化的软件平台。
Virsual C++6.0 是一种面向对象的通用的功能强大的程序设计语言,提供集成性
1
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 2 页 共 57 页
及可视化用户界面,采用面向对象的程序设计方法,它具有底层操作功能,也具有数
据库开发功能,编程灵活,因此也是编程人员常选用的编程语言,我也用 VC++编写了
虚拟仪器平台,可以组建虚拟信号发生器、虚拟示波器、数据采集。
1.2.2 网络结构设计
根据测试系统各部分所处的地理位置和覆盖的范围不同可构建局域网、城域网、广
域网。一个大的复杂的测试系统由各个子系统组成,每个子系统一般在一个单位的小范
围内,因此可建立局域网,然后将每个局域网互联,形成企业测量系统。由于 Internet
网的发展,一些公用的数据还可以通过 Internet 网将测量数据发布到网上供网上用户
使用,可建立测量发布系统。对于有些危险的、环境恶劣的不适合人员操作的数据采集
工作可实行远程采集。
由于网络测试中每个测试点担任不同的测试任务,为了减少不必要的重复工作,通
过网络实现资源共享,同时要减轻服务器与各节点的数据传输,提高网络系统性能,因
此服务器和各个节点以及各节点之间协同工作显得尤为重要。基于 Client/Server 模式
的分布式计算、分布式处理系统是解决这个问题的最好选择。基于 C/S 模式,将系统功
能分解到各个节点,各个节点有机配合,用户在自己的终端上就可以观察到从服务器中
获取的数据和处理结果。在 C/S 中,分客户机(Client)程序和服务器(Sewer)程序。
客户机程序和服务器程序可以运行在一台计算机中,也可运行在两台或多台计算机中,
Client 程序与 Server 程序相互协同处理,一个测试系统由一个或承担不同任务的多个
客户机与一个或多个服务器组成。客户机是用户与系统的交互接口,提供一个用户界面,
完成用户命令与数据的输入,显示服务器送回的结果。服务器接受客户机提出的申请,
完成所要求的操作并将结果传送给用户。在一个测试系统中,根据任务不同,每个服务
器和客户机承担的任务也不同,例如可划分为采集、数据处理分析、输出、监控。一台
计算机采集外部数据,将采集的数据存储并传输给另一台计算机,它就是服务器,另外
它又需要得到远地计算机的数据,这时它又成为客户机。C/S 模式是一种开放式系统的
协同处理工作模式。
设计 C/S 模式时应首先分析系统所要达到的指标和功能要求,在此基础上,把系统
划分为各个相对独立的模块,分配到各个计算机上,每个计算机执行不同的功能,能在
客户机上完成的独立任务就不要放在服务器上,以减低服务器的工作量。第二,要保证
数据在服务器和客户机、客户机间可靠的传输。设计时需考虑网络的带宽要满足传输要
求,并减少网络数据传输量。
Agilent IO 库允许通过 LAN 进行仪器的控制操作。使用标准的 LAN 接口,计算机可
以不要特殊的仪器接口就可以实现对仪器的控制。LAN 软件使用计算机的 C/S 模式,这
种模式使得应用程序(客户)可以不用执行所有的工作,相反,客户机可以向另一台仪
器(服务器)发出某种请求。与可控仪器或器件相连的 LAN 服务器,一旦完成仪器或器
件的请求,LAN 服务器会反馈信息给客户机。反馈的信息包括数据和状态等表明操作是
2
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 3 页 共 57 页
否成功的信息。例如网关在 LAN 软件(客户机支持)和器件支持的仪器接口之间扮演一
个服务器的角色。基本结构如图:
图 1-1
LAN 软件结构:该结构中,包含了 LAN 客户软件和 LAN 软件(TCP/IP)(用于访问服务器
—gateway)。网关包含了 LAN 服务器软件,LAN(TCP/IP)软件以及用于和客户机通讯
和控制仪器的仪器驱动软件。
图 1-2
3
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 4 页 共 57 页
1.2.3 软件设计
与硬件结构相对应,软件结构可分为网络测控系统控制主模块,是系统控制的中枢,
连接和控制各子模块;虚拟信号源、虚拟万用表和虚拟示波器等模块,是控制相应台式
仪器,使其完全能处于远程虚拟控制状态,给测控对象提供激励信号,并监视受控对象
输出特性变化;虚拟 VXI 仪器和信号调理模块是控制 SCXI 和 VXI 硬件模块仪器进行模
拟量数据采集与开关量对象控制,包括数据处理;图象采集模块,包括采集现场景物视
频图象和有形对象的图象采集.与图象处理;网络通信模块承担不同总线模块与主模块
之间的数据传输与通信,也是实现本测控系统与远程用户之间的控制与数据传送。每个
虚拟仪器模块内部都封装了对应仪器状态控制命令集、数据采集命令集、数据处理模型
以及通信协议等处理子模块。
下面的第三章至第五章介绍的就是函数信号发生器、示波器以及万用表模块的设计
和具体的编程。下面让我们先来了解一下 VC++6.0 开发工具和 Agilent VISA 库。
2 开发工具和 Agilent VISA 库介绍
Visual C++6.0 是一套功能强大面向对象的且具有集成编辑器及编译器的编程语
言开发平台。今天我们所使用的许多应用软件,大部分是利用 C 语言来进行编写的。
Visual C++6.0 没有很复杂的开发界面,给用户的开发以很大的灵活性。
2.1 Visual C++6.0 的特点
在众多的程序语言中,Visual C++6.0 是具有编辑和编译的集成开发环境。通过
Visual C++6.0 的编辑功能,可以方便的设计程序。它的编辑功能可以随时让我们了解
到程序的结构、流程以及对象的成员,而完成程序设计之后,也不必经过复杂的编译程
序,而且给出的错误警告可以很方便的进行定位操作,这给程序设计人员以方便。
2.2 IDE 的集成开发环境界面
IDE 就是 Integrated Development Enviroment 的缩写 ,是将 程序代码的编写
(editor)、编译(Compiler)、执行(execution)以及纠错(debug)等功能汇集一身的
单一整合性的界面,提供程序开发过程所需要的相关或扩展服务,让用户只需要通过此
环境便可以轻松完成程序工程。
2.3 Agilent VISA 纵览
VISA 是 Agilent IO 库的一个部分。Agilent IO 库由两个部分组成:VISA 和 SICL。
Agilent VISA 是根据 VXIpp 系统联盟的规定设计的,它允许由不同的厂商开发的软件能
在同一个系统中运行。
如果你想在你的应用程序中使用 VXIpp 仪器驱动或者是想是自己开发的 IO 应用软
件或仪器驱动能符合 VXIpp 的标准,就需要使用 VISA。如果你使用新的仪器或开发 IO
应用程序以及仪器驱动的话,也应该使用 VISA。
Agilent VISA 是一个 IO 库,可以用来开发符合 VXIpp 标准的 IO 应用软件和仪器
的驱动。使用 VISA 开发的应用软件和仪器驱动可以在使用 VISA IO 库的 VXIpp 主机上
4
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 5 页 共 57 页
运行。因此,不同厂商开发的应用软件可以在同一个系统中运行。
32 位版本的 VISA 能在 Windows 95 98 Me 以及 NT 和 2000 中使用。C,C++和
Visual Basic 在这些系统中都被支持。
对与 Windows,VISA 支持 GPIB、VXI、GPIB-VXI、Serial(RS-232)以及局域网
接口。在 Windows NT 中,对 VXI 接口支持的 VISA 仅能运行在 Agilent 嵌入式的 VXI
控制器产品中。一台网络计算机能够通过网络访问配置 VISA 地址譬如 GPIB 接口地址
上的仪器。
2.4 VISA 编程
在 VISA 的编程中需要了解 VISA 的一些机制: VISA 的资源和属性、会话使用、
发送I/O命令、使用事件与句柄、捕抓错误等等。
VISA资源:在VISA中,任何VISA可以提供通讯的器件(如电压表)都可以定义为
一种资源。对于一个完善的VISA系统,VISA定义完全符合VXI即插即用联盟的规范的六
种资源类可以被执行。
VISA属性: 属性是和各种资源或会话相关联的。你可以使用属性来决定资源或会
话的状态或设置资源或会话为指定的状态。
譬如,你可以通过viGetAttribute函数来读取指定会话、事件、查找列表的属性的状态。
有只读和读写的属性。通过使用viSetAttribute函数来修改指定的会话、事件或查找列
表的读写属性。
传递给viGetAttribute函数的指针必须指向那个属性的准确类型:ViUInt16,ViInt32,
等等。譬如,当读取一个返回ViUInt16值的属性的状态时,你必须声明那个属性的变量
和使用它来存储返回的数值。如果ViString被返回,你必须分配一个数组和传递那个数
组的指针给那个返回的数值。
对于C和C++程序,你必须在每一个文件的开始处添加包含VISA调用函数visa.h头文
件:#include “visa.h”这个头文件包含了VISA函数的原型的声明和所有VISA的常量和
错误代码的定义。Visa.h头文件也包含了visatype.h头文件。
该visatype.h头文件对VISA的所有类型进行了定义。VISA的各种类型贯穿了整个VISA,
对函数中用到的数据进行类型定义。
而关于会话,会话其实是一个通讯通道。会话必须在默认的资源管理器中被首先
打 开 , 接 着是 你 将 会使 用 的 每一 种 资 源。首 先 , 你 必须 通 过 默认 资 源 管理 器 的
viOpenDefaultRM函数来建立一个会话。这个函数的第一次调用用来初始化默认的资源
管理器并返回该资源管理器会话的会话。你仅需要打开默认资源管理器一次就可以了。
然而,后来的对viOpenDefaultRM函数的调用则返回同样的默认资源管理器资源的唯一
的会话。
接下来,你利用 viOpen 函数对指定的资源打开一个会话。而在退出程序的时候需要多
打开的会话进行关闭操作,在关闭每一个会话时,必须调用 viClose 函数以释放掉分配
5
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 6 页 共 57 页
给该会话的数据资源。你如果关闭默认的资源管理器会话,则所有被该会话打开的会话
将会被关闭。
当你为一个器件建立一个通讯会话时,通过使用 VISA 的 I/O 程序来启动与该器件的通
讯。VISA 提供了格式化和非格式化的程序。
格式化 I/O 将对格式化字符下的混合数据类型进行转换。数据被存在数据缓冲
器中,因此是接口的通讯得到最大的优化。
非格式化 I/O 口向一个器件发送或接收原始数据。通过非格式化 I/O,数据并不
进行格式化或相应的转换。因此,如果要求格式化数据,它必须通过用户自己
来定义。
事件是那些需要你的应用程序关注的特指事件。事件类型包括服务请求,中断和
硬件触发。事件不会被传递,除非相应的事件被启用。
注意:VISA 不能回调 VB 函数。因此,你只能使用函数 ViEnableEvent 来使用队列机制。
在 VB 中不能安装 VISA 事件句柄。
当事件发生时,有两种方式来接收通知消息:函数回调法和队列法
当一个事件需要立即相应时,可以使用回调函数法。使用回调函数法来接收事
发生时的通知消息。当使能事件发生时,安装的事件句柄会被调用。可以使用函数
viInstallHandler 安装事件句柄,而使用函数 viEnableEvent 来启动一个或多个事件。VISA
允许应用程序在同一个会话中对一种事件类型安装多个句柄。多个句柄可以通过多次调
用函数 viInstallHandler 来安装。每次调用添加到前面的句柄列表中。
如果一个事件类型被安装了多个句柄,当指定的事件发生时,每一个句柄会被调用。VISA
指出,句柄的调用的顺序是后进先出的顺序。当需要安装句柄时,使用下面的函数:
viInstallHandler(vi, eventType, handler, userHandle);
当你的应用程序捕需要及时相应时,队列法通常被使用。为了使用队列法来接收
事件发生时的通知消息,步骤如下:
使用函数viEnableEvent来使能一个或多个事件。
当准备查询时,使用函数viWaitOnEvent来检查队列事件。
如果指定的事件发生,事件信息将会被取得,程序立即返回。如果指定的事件没有发生,
应用程序挂起直至指定的事件发生或指定的超时时间到来。
6
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 7 页 共 57 页
3 函数信号发生器
3.1 Agilent 33250A 80 MHz 函数/ 任意波形发生器介绍
Agilent Technologies 33250A 是高性能的 80 MHz 复合函数发生器,其具有内
置任意波形和脉冲功能函数发生器,其80MHz带宽能适应各种各样的应用要求,它具有
各种内置信号、自定义的任意波形和脉冲能力,能帮助您验证设计,检验新的构想。直
接数字合成技术能获得稳定、精确和低失真的输出信号。
Agilent 33250A能提供您需要的所有波形,其输出频率更高达80MHz。标准输出包括正
弦波、方波、斜波、噪声波、sin(x)/x、真流和其它波形。当标准信号还不能满足您的
要求时,33250A可简化生成任意波形的过程,并赠强这些自定义信号的性能。现在通过
达200MSa/s的采样率,12bit分辨率和64K点的存储器深度,您可建立无限多种信号,以
精确适应您的应用要求。同时具备工作台特性和系统特性是满足您目前及未来测试需求
的多用途解决方案
Agilent Technologies 33250A 的特点如下:
• 10 个标准波形
• 内置的 12 位 200 MSa/s 任意波形功能
• 具有可调边沿时间的精确脉冲波形功能
• LCD 彩色显示器可提供数字和图形视图
• 易用的旋钮和数字小键盘
• 仪器状态存储器用户可自定义名称
• 带有防滑支脚的便携式耐用机箱灵活的系统特性
• 四个可下载的 64K 点任意波形存储器
• GPIB (IEEE-488) 接口和 RS-232 接口为标准配置
• SCPI 可编程仪器的标准命令兼容
Agilent Technologies 33250A 函数/ 任意波形发生器的技术参数如下:
波形
标准波形
任意波形
频率特性
正弦波、方波、斜波、脉冲、噪声、SIN(x)/x,
指数上升和下降、心律波、真流电压
波形长度
1~64K 点
非易失性存储器
4 个波形(每一个汉形 1~64K 点)
幅度分辨率
12bit
采样率
200MSa/s
正弦波
1μHz~80MHz
白噪声
50MHz 带宽
7
更多资料下载 www.sfmcu.com www.sf-edu.cn 第 8 页 共 57 页
方波
1μHz~80MHz
分辨率
1μHz,除脉冲为 5 个字
三角波
1μHz~1MHz
准确度
0.3ppm,(18℃~℃)
斜波
500μHz~50MHz
THD(dc~20kHz) <0.2%+1mVrms
其它特性
幅度(至 50Ω)
10mVpp~10Vpp
准确度(1kHz) ±1%设置值±1mVpp
调制
AM
调制
频率
深度
FM
调制
频率
偏移
扫描
类型
方向
FSK
任何内部波形
内部速率
2mHz~1MHz
2mHz~20kHz
频率范围
1μHz~80MHz
0%~120%
脉冲列
任何内部波形
波形频率
1μHz~80MHz
2mHz~20kHz
计数
1~1,000,000 或无穷多个周期
dc~80MHz
起始/停止相位 -360°~+360°
内部周期
1μ~500s
线性或对数
扫描时间
1ms~500s
上或下
标记
同步信号下降沿
起动 F/停止 F
100μHz 至 80MHz
(可编程)
时钟基准
外部锁定范围
10MHz±kHz
内部频率
10MHz
3.2 对函数/任意波形发生器的远端编程控制
3.2.1 编程的准备工作
了解函数信号发生器的功能特点:因为我要操作的函数信号发生器的型号是
Agilent Technologies 33250A。所以,上网去搜索关于该型号的资源。在安捷伦-中
国的网站上查找到了相关的文件资源。并通过阅读了解了远程控制仪器的方法(通过
VISA I/O库对输入输出操作的支持,并使用该仪器的SCPI-standard command for
programmable instrument命令来对仪器进行相关的操作。
通过查看“自动测试系统”课本上的例子,对自己编写函数信号发生器的界面有了
一定的模型和认识。接下来就是去了解VISA I/O库。通过殷老师提供给我的资料,并通
8