引言
随着科学技术的发展,基于计算机的自动测试技术在计量测试领域已经得到了广泛应用。这其中LabVIEW作为一种图形化的编程语言,用流程图取代程序代码,为用户提供了实现仪器编程和数据采集系统的便捷途径,已经广泛地被工业界、学术界和研究实验室所接受,目前LabVIEW作为一个标准的数据采集和仪器控制软件在自动测试领域发挥了不可替代的作用[1]。
1、仪器程控驱动
为满足自动测试的需求,当前大多数测量仪器都提供了基于SCPI指令的远程控制功能。同时,为了方便用户使用,从仪器可互换性考虑,通常仪器都配备了对应的IVI-COM/C驱动。该驱动在实现仪器可互换性的同时[2],降低了用户程控仪器的难度,大大缩短了测试软件的开发周期。
IVI-COM/C驱动提供了两种调用方式,动态库DLL形式和COM组件形式[3]。这两种形式的驱动适用于编程语言直接调用,并不适用于LabVIEW图形化的程序语言;在LabVIEW中需要将DLL动态库函数转化为子VI后调用[4]。此种方式存在两方面不足,首先转化后的子VI未进行分组,无法快速定位需要的子VI;其次,子VI缺少帮助,无法获得输入输出参数说明,这些不足都给用户的使用增加了难度。为此LabVIEW提供了自己的驱动开发方法,用于开发适用于LabVIEW的仪器驱动。下面以某型号信号发生器为例对LabVIEW驱动的设计和实现进行阐述。
2、驱动的设计与实现
2.1驱动项目创建
本文使用2015版LabVIEW进行驱动开发;首先打开LabVIEW,选择菜单栏中的工具,在弹出的工具菜单中,选择仪器,并继续选择创建仪器驱动项目[5],打开创建仪器驱动程序项目面板,在该面板中选择项目类型和源驱动程序。在此项目中,项目类型选择为“基于模板的新驱动程序”,并将源驱动程序设置为函数发生器。点击下一步,在弹出的“设置新驱动程序标示符及驱动程序说明”面板中,设置驱动程序标示符,然后依次点击下一步设置VI图标标示栏模板和项目位置,点击完成,创建驱动项目成功。创建的信号发生器驱动项目如图1所示。
图1信号发生器LabVIEW驱动项目
2.2、驱动设计
在创建的项目中,Examples文件夹下为测试用例,Private文件中所有VI子控件无法在LabVIEW对应仪器驱动的函数选板中直接调用;当调用Public文件夹中的某些VI子控件时会自动调用Private文件夹中的VI,在信号发生器驱动设计中,将数值转字符串、状态寄存器开机默认设置等VI控件放在Private文件中。Public文件中的VI控件是用户可直接调用的子VI,是驱动中最重要的子VI;针对信号发生器的功能及程控指令的分类,设计的驱动逻辑结构如图2所示。
图2 信号发生器LabVIEW驱动逻辑结构图
其中Action-Status子文件夹中存放的为仪器状态、文件存储和调用相关的VI控件,Configure子文件夹中存放的为仪器频率、功率、调制、扫描等功能相关的VI控件,Utility子文件夹中存放的为错误查询、复位、自测试等相关VI控件。考虑到功能的独立性,根据不同的调制类型对Modulation进行了进一步的细分。
2.3、驱动实现
每个驱动子VI的实现,需要根据对应功能的配置项设计输入,并根据配置项之间的逻辑关系,设计子VI内部的分支逻辑。在信号发生器驱动实现过程中,在功能分类设计的基础上,根据程控指令的特点,对指令相似的功能通过参数的设计统一为一个控件实现。例如模拟调制中的AM、FM、ΦM三种调制类型中,调制源、调制波形和调制频率等配置项及参数相同,且程控指令相似仅有指令串起始处的关键字“:AM”、“:FM”,“:PM”不同,因此通过参数的设计,将三种调制的配置由一个控件实现,对于指令串中的差异,通过参数设置映射为不同关键字,并使用“格式化写入字符串”函数组合为正确的程控指令字符串,从而实现通过参数控制不同调制配置的功能;有的配置项指令需要进行多次上述的组合,如内部波形设置;最终设计的子控件如图3所示。考虑到指令之间的关联性,还需要进行分支判断,避免了使用时逻辑上的错误。
图3 模拟调制相关配置子控件程序图
由于每个子控件的通常具有多个参数,因此需要对控件的功能和各个参数进行说明,在驱动子控件实现过程中,可通过VI属性中的“说明信息”编辑子控件帮助信息,从而对功能和参数进行说明。
3、驱动验证
基于LabVIEW开发的驱动,在使用时仅需要将驱动项目文件放到LabVIEW安装目录下的National Instruments\LabVIEW2015\instru.lib文件夹下。在函数选板的仪器IO中即可找到项目名称,查看所有子VI驱动。对于每个子VI可通过Ctrl+H键查看编辑的帮助信息。调用驱动子控件搭建的调频配置测试工程如下图4所示,对应的程序框图如图5所示,该测试中使用了初始化、模拟调制源选择,调频配置、开关设置、关闭等子控件通过网络与信号发生器建立连接并进行上述功能配置。该测试可完成信号发生器的远程控制,信号发生器进入了远控状态并根据测试的配置打开了调制开关以及调频开关,如图6所示。测试程序中错误输出信息,通过错误码1073676293可知为visa库的正常输出,表示读取返回值结束的原因为遇到了结束符。
图4 调频配置测试工程前面板图 图5 调频配置测试工程程序框图
图6 联调测试中信号发生器界面图
从最终测试效果来看,通过驱动可完成仪器的远程控制,并且由于驱动对程控指令进行了分类封装,所有配置项均可通过简单的参数输入即可远控控制,简化了远程控制程序的开发;极大地提供了开发效率。
4、结论
本文阐述了LabVIEW程控驱动的开发流程,并以信号发生器为例,从驱动项目的创建、设计、实现和调用等方面进行了详细的说明,最后通过与信号发生器的联调,证明了该类驱动可实现完整的仪器程控需求,并简化了基于LabVIEW的自动测试软件开发难度,极大地提供了开发效率。本文亦可为其他类仪器仪表LabVIEW程控驱动的开发提供参考和技术支撑。
参考文献
[1]郑对元.精通LabVIEW虚拟仪器程序设计[M].北京:清华大学出版社,2012:1.
[2]刘金宁.IVI-MSS模型及其在可互换虚拟仪器测试系统中的应用[J].计算机测量与控制,2004.12,125-128.
[3]顾玉辉,宋利,朱明武.IVI模型在虚拟仪器驱动程序开发中的应用[J].电子技术应用,1999.12,14-15.
[4]郑铭.利用LabVIEW导入工具实现DLL调用[J].电子测试,2009.6,33-39.
[5]Jeffrey Travis,Jim Kring.LabVIEW大学使用教程[M].乔瑞萍,译.北京:电子工业出版社,2016:1.318-319.
作者简介
高训兵(1987),男,山东省德州市,工程师,硕士,主要从事微波仪器软件开发工作