两种基于LabVlEW 自动测试仪表程控驱动设计方法
2022-08-19高青君周钦山曹利建
高青君,周钦山,曹利建
(中电科思仪科技股份有限公司 山东 青岛 266555)
0 引言
LabVIEW 是一种图形化界面的编程语言,是应用广泛的虚拟化仪器软件开发环境,引领测量仪器与自动测试领域的发展方向。随着测量仪器领域的高速发展,测量应用行业对通用仪器的参数控制及数据采集需求越来越多,该领域对专业技术性要求比较高。本文基于LabVIEW 软件,采用两种驱动设计方法搭建自动测试流程,实现对通用仪器的远程控制、参数设置及数据采集,满足使用者更好更高效的自动化程控测试的需求。
1 程序控制仪表驱动设计原理
SCPI(Standard Commands For Programmable Instruments)指令是基于IEEE 488.2 标准的可用于程控仪器的标准指令,被广泛应用于各种通用测量仪器的开发和测试。SCPI 指令是远程编程仪器操作的直接控制指令,对编程者的仪器精通专业程序要求比较高。
相对来说,VISA(Virtual Instrument Software Architecture)是在不同的总线上作了一个统一的编程接口,使用VISA 接口编写的程序可以对使用不同总线的仪器进行控制[1]。IVI 仪器驱动比VISA 规范更高一层,是在同类仪器不同的产品间做了一个统一的编程接口,通过调用下层的VISA I/O 来实现仪器的实际通信和交互[2]。对仪器驱动器和应用程序而言,VISA 库函数是一套可方便调用的函数,其核心函数能够控制各种类型器件,无需考虑器件的接口类型和软件的兼容性,使用IVI 仪器驱动器可以对支持IVI 规范的同类仪器进行控制[3]。
IVI 基金会在VPP 兼容框架的基础上定义了一系列标准仪器编程模型,并根据测试系统中仪器的重要性和通用性划分仪器类。目前,已经定义的最新仪器类有:示波器类(IviScope)、数字万用表类(IviDmm)、函数发生器类(IviFGen)、功率表类(IviPower)、频谱分析仪类(IIviSpecAn)、射频信号发生器类(IIviRFSigGen)等,IVI 规范定义的仪器驱动器有IVI 类驱动器和IVI专用驱动器两大类,通过VISA 与仪器仪表建立通信并通过驱动器函数控制仪器,IVI 驱动器体系结构图见图1。
LabVIEW 是一种图形化界面的编程语言,是应用广泛的虚拟化仪器软件开发环境,对智能化、网络化测量仪器、测量系统有着不可替代的作用,引领测量仪器与自动测试领域的发展方向[4]。其将所需要的函数封装成一个个子VI 控件,逐个进行拖动连接,展示效果好。
2 两种LabVIEW程控驱动设计方法
2.1 IVI 函数转换VI 法
LabVIEW 编程环境下,调用IVI-COM 驱动器,将IVI DLL 库封装成一个个独立的子VI 函数,通过子VI 建立程控通信连接,并利用IVI 句柄实现对仪表的远程控制[5]。
驱动设计方法说明:(1)符合IVI 规范的同类仪器驱动安装包安装后提取DLL 文件;(2)打开LabVIEW 软件,选择菜单工具-导入-共享库,指定创建或者更新模式,并选择为共享库创建VI,选择共享库(.dll)文件和头文件(.h),再选择待转换函数,将需要转换的DLL 函数打钩;(3)添加Include 的头文件和预处理定义,配置DLL函数生成VI 后的属性规范及参数类型,生成Lvlib 文件;(4)在LabVIEW 中调用生成的一系列子VI 函数,进行对应仪表的程控通信连接及测量参数控制流程设计。下面以频谱分析仪类仪表为例,进行第1 种IVI 驱动设计,采用IVI-COM 驱动函数子VI 的方式,实现LabVIEW 环境下对频谱仪程序控制的流程搭建及测量结果展示。下载并安装频谱分析仪IVI-COM 驱动,在LabVIEW 中导入共享库文件及对应头文件,见图2、图3。
将需要的IVI 函数进行转换,对转换后的VI 控件进行配置设置。
等待生成进度,生成Lvlib 文件。Lvlib 文件包含IVI 函数转换的各种子VI 控件,在LabVIEW 软件程序框图中进行加载,见图4。
采用IVI 函数转换的VI 控件程序框图见图5,无需知道VI 内部具体封装的SCPI 指令,对仪器端指令熟悉度要求较低,直接调用封装VI 进行控制,方便使用操作。
此时IVI 驱动函数已经部署好,下面进行频谱仪IVI驱动程序控制的简单流程搭建,需要用到的子VI 有Init With Option.vi、Configure Center Span.vi、Configure Sweep Coupling.vi、Marker Search.vi、Read Y Trace.vi、Close.vi。其中Init With Option.vi,负责仪表的初始化设置及建立通信;Configure Center Span.vi,负责设置仪表的中心频率和频宽参数;Configure Sweep Coupling.vi,负责设置仪表的扫描时间、RBW 等参数;Marker Search.vi,负责对仪表进行峰值搜索功能;Read Y Trace.vi,负责同步测量,查询轨迹数据等操作[6]。
用上述的子VI 搭建测试流程对频谱仪进行远程控制及自动测试,见图6,实现了远程控制频谱仪进行初始化,设置频率频宽、RBW、扫描时间,并进行峰值搜索,取频谱结果等测试。
2.2 组合SCPI 指令封装VI 法
LabVIEW 编程环境下,直接对组合SCPI 指令进行函数封装VI,封装成一个个不同功能的子VI,实现对仪器的远程控制。根据仪表SCPI 指令通用分类,将这种方式封装的函数分为Configure 类、Data 类、Utility 类、Action-Status 等类别。其中Configure 类为配置类子VI,主要配置仪表的各种测量参数设置,峰值标记等设置;Data 类为数据类子VI,主要用来读取各种测量结果及轨迹数据;Utility 类为公用类子VI,主要负责公用错误查询、复位、自测试等功能;Action-Status 类为动作状态类子VI,主要负责仪表状态查询,轨迹、标记关闭等操作。组合SCPI 指令封装VI 法见图7。
采用直接封装SCPI 指令产生的VI 控件程序框图见图8,能够很清晰地看到VI 内部具体封装的SCPI 指令,并可以任意调整此VI 控件内容,直到满足需求。采用这种方式,对使用者来说更加好理解,可操作性更强。
与IVI-COM 驱动方法不同的是,组合SCPI 封装函数是利用VISA 句柄实现对仪表的远程控制,使用VISA 句柄能清晰看到子VI 函数中多条SCPI 指令及对应指令含义,并可以任意修改函数内容及组合。其中主要用到了LabVIEW 环境自带的VISA 写入函数ViWrite 控件,VISA读取函数ViRead 控件实现对仪表的测量控制及结果读取等操作。
该方法需要阅读仪器厂家的程控手册,并对仪器端指令有一定了解,这种方法优势也很明显、灵活、可操作性强、方便调试。用户可以自定义编辑修改子VI 封装的SCPI 指令,并可以按照自己的需求定制封装子VI。
同样,下面以频谱分析仪类仪表为例,采用组合SCPI指令封装函数子VI 的方式,实现LabVIEW 环境下对频谱仪程序控制的流程搭建及测量结果展示,见图9。
3 实现效果
这是第1 种IVI 驱动转换VI 的方法,通过上面的测量控制流程测试出的仪器端结果展示,见图10。
这是第2 种直接封装组合SCPI 指令的VI 方法,仿真结果展示见图11。
从最终效果来看,两种仪表驱动设计方法均能实现仪器仪表的远程控制,并达到测量参数的设置、测量结果的读取查询等操作。虽然设计方法不同,但最后实现结果是相同的。
4 结语
本文采用了两种程控驱动设计方法,在LabVIEW 下进行仪表的测量流程搭建及结果获取,实现自动控制和自动化测试。两种设计方法,一种方法为如何将IVI 驱动转成LabVIEW 子VI 模块,并建立与仪表的网络通信,实现测量控制自动测试。本方法对使用者SCPI 指令熟悉度要求不高,操作相对简单,实现效率高,只需要操作各种子VI,不需要了解具体的SCPI 指令的用法,使用者的体验性更好一些,但IVI 句柄封装SCPI 指令无法编辑修改,使用者也无法看到子VI 封装的具体SCPI 指令,可用性和复用性较差;第2 种方法为将组合SCPI 指令按照一定规则进行封装使用,也能达到与方法1 相同的效果,由于VISA 句柄的可操作性,任意编辑性,指令可见性强,使用者很容易理解各种子VI 的功能并根据需求增加各种类型的VI,但本方法对使用者SCPI 指令熟悉度要求较高,需要了解常见SCPI 的规则及指令含义。