开发LabVIEW仪器驱动

概览

本文档的适用对象为驱动开发人员,主要介绍LabVIEW即插即用驱动的标准和操作实践,以及VI设计、仪器I/O、风格样式和错误报告的原则。此外,还介绍了仪器驱动组件和组件集成方法的说明。以及有助于开发仪器驱动的流程。

可供仪器驱动开发人员参考的其他资源包括仪器驱动模板和仪器驱动指南,请访问NI仪器驱动程序网络(ni.com/idnet)。

如需使用本文档,用户需要对仪器控制有基本了解,并熟悉LabVIEW操作以及虚拟仪器软件架构(VISA)应用程序编程接口(API)。

内容

什么LabVIEW仪器驱动?

LabVIEW即插即用仪器驱动是用于控制可编程仪器的一系列VI。每个VI对应一项仪器操作,例如配置、触发以及从仪器中读取测量值。由于用户无需学习针对各台仪器的编程协议,仪器驱动在帮助用户利用计算机上的仪器轻松上手的同时,还能节省开发时间与成本。通过开源和具有完整文档说明的仪器驱动,最终用户可对操作进行自定义,以获得更佳的性能。模块化设计简化了自定义驱动过程。

针对所有LabVIEW仪器驱动使用标准架构具有下列优点:

  • 提高仪器驱动的一致性,便于最终用户使用。
  • 改善驱动质量。
  • 尽量减少重复工作。
  • 为不同来源的仪器驱动提供统一的使用方法,从而更方便最终用户使用。
  • 精简仪器驱动开发流程,提高仪器驱动开发人员的工作效率。

LabVIEW仪器驱动网包含各种可编程仪器的仪器驱动,包括GPIB、USB、TCP/IP、VXI、RS-232和PXI仪器。仪器驱动中包含的高层VI具有直观的前面板,因此最终用户可快速测试及验证仪器的远程功能。用户无需了解底层的仪器控制和仪器专用命令及语法。只需要在程序框图上将仪器驱动VI作为子VI来使用,完成VI搭建即可创建仪器控制应用程序。

LabVIEW仪器驱动模型

许多可编程仪器具有大量功能和模式。由于其复杂度较高,有必要提供一种统一的设计模型为仪器驱动开发人员以及开发仪器控制应用程序的最终用户提供帮助。LabVIEW即插即用仪器驱动模型包含关于外部结构和内部结构的指南。外部结构显示仪器驱动与用户及系统中其他软件组件的交互方式。内部结构显示仪器驱动软件模块的内部组织。

仪器驱动外部结构

仪器驱动由用户从高层应用程序调用的API VI组成。下图所示为仪器驱动与系统其余部分的交互方式。

图1:LabVIEW仪器驱动外部结构

外部结构显示仪器驱动如何呈现交互式界面及编程接口。应用程序编程接口(API)是用户可调用的一组仪器驱动VI,用于最终用户系统中。例如,制造商测试系统可能会调用仪器驱动以与万用表或示波器进行通信。

最终用户可以通过仪器驱动前面板了解API。通过交互式运行仪器驱动VI的前面板,最终用户能够理解每个控件对仪器的影响方式。了解设置后,最终用户可在其应用程序中添加仪器驱动VI。

虚拟仪器软件架构(VISA) I/O接口是驱动用于与仪器硬件通信的一组LabVIEW函数。VISA是一种成熟的标准仪器接口,可控制GPIB、USB、串行及其他仪器总线。关于VISA函数和控件的详细说明,请参见LabVIEW帮助。

支持VI是指不希望最终用户直接访问的VI。因此,支持VI不属于仪器驱动API。例如,仪器驱动通常会在初始化过程中调用“默认设置”VI对仪器状态进行设置,以支持仪器驱动VI的其余部分对仪器进行稳定可靠的控制。只有“初始化”VI和“重置”VI将“默认设置”VI用作子VI,因此该VI应视为支持VI

仪器驱动内部设计模型

仪器驱动的内部结构定义了仪器驱动VI的组织结构。用户可访问的所有API VI均依据仪器功能组织为模块化层次结构

下图所示为LabVIEW仪器驱动的内部结构。最终用户具有所需的粒度,可在应用程序中适当地控制仪器。例如,最终用户可在开始时一次性初始化所有仪器、配置多个仪器并同时触发多个仪器。此外,用户只需对仪器进行一次初始化和配置,然后可多次触发仪器并从中读取数据。

该模型为最终用户提供了统一的仪器驱动模型。用户只需理解一款仪器驱动,即可将这些知识应用于其他LabVIEW仪器驱动。

图2:LabVIEW仪器驱动内部结构

仪器驱动API VI

仪器驱动API VI可划分为以下6种类型:

初始化-所有LabVIEW仪器驱动都应包含初始化VI。该VI用于与仪器建立通信,因此是第一个被调用的仪器驱动VI。用户还可以选择通过该VI进行仪器识别查询和重置操作。该VI还用于将仪器设为默认开机状态或其他状态。

配置-配置VI是一组软件例程集合,用于配置仪器执行特定操作。仪器驱动API通常包括多个配置VI。仪器驱动中配置VI的数量取决于仪器的独特功能。调用配置VI后,仪器就已准备就绪,可以执行测量或进行系统仿真。

动作/状态-动作/状态VI可分为两类。动作VI可使仪器启动或终止测试和测量操作。这些操作包括触发就绪或生成激励。与配置VI不同,这些VI不会改变仪器的设置,而是控制仪器根据当前配置执行操作。状态VI用于获取仪器的当前状态,或待执行操作的状态。通常情况下,当其他函数有相应要求时才会创建状态VI。

数据-数据VI用于将数据传输到仪器,或传输来自仪器的数据。例如,读取测量值或波形的VI以及将波形或数字模式下载至源仪器的VI。该类别中的特定例程取决于具体仪器。

工具-工具VI执行各种辅助操作(例如重置和自检),并可包含其他自定义例程,如校准或存储并重新调用仪器配置。

关闭-关闭VI用于终止软件和仪器的连接。所有LabVIEW仪器驱动都应包含关闭VI。

除初始化和关闭VI外,每类VI均包含多个模块化VI。开发仪器驱动的重点在于仪器驱动API VI的初始设计方案和组织方式。

可下载NI的模板VI,并自行自定义,以执行几乎所有仪器通用的操作,如初始化、关闭、重置、自检和版本查询。模板VI中包含用于特定仪器中具体驱动的修改说明。关于自定义模板VI的详细信息,请参见LabVIEW仪器驱动模板章节。

除了上述常用函数外,用户还可以添加其他VI,以执行仪器专用操作。用户自行开发的具体VI取决于仪器的独特功能。但是,应尽量遵循上述仪器驱动VI的6种类型。

通过图2所示的内部设计结构,最终用户可组合仪器驱动VI并创建应用程序。下图所示为仪器驱动API VI通过编程控制HP34970A采集系统的程序框图。

图3:HP34970A电流测量范例VI程序框图

图4所示为某个仪器驱动API VI的程序框图,该VI使用内置LabVIEW函数和VISA函数创建命令字符串并发送至仪器。VISA函数主要用于设备管理、标准化仪器I/O以及错误处理。图4中的具体VI先组合多个字符串格式化操作,然后将得到的字符串连线至VISA写入函数,从而创建命令字符串。VISA写入函数将命令字符串发送至仪器。VISA读取函数返回仪器的响应字符串。然后,响应字符串被格式化为数值数组,以便最终用户在其应用程序中使用。对响应字符串进行重新格式化有利于用户以合适的格式查看响应数据。错误查询VI用于检查错误并更新错误簇。

图4:创建命令字符串

随仪器驱动发布的其他VI

除内部结构部分介绍的API VI外,仪器驱动还包括范例VI和树形VI。

仪器驱动范例VI

所有仪器驱动均包含范例VI。用户可通过范例学习如何组合仪器驱动VI,并使用仪器进行基本测试和测量操作。范例将仪器配置为常见的操作模式、触发仪器并进行测量,从而演示测试和测量功能。范例VI也可以对仪器通信进行验证。应创建*.bin3文件并将范例VI添加至NI范例查找器。 下图所示为HP34970A电流测量范例VI的前面板。

图5:HP34970A电流测量范例VI前面板

树形VI

大多数用户通过LabVIEW函数选板访问仪器驱动VI。但树形VI支持最终用户一次性查看全部仪器驱动的层次结构。树形VI不可执行,仅用于显示仪器驱动的功能结构,如下图所示。

图6:HP34970A树形VI的程序框图

LabVIEW仪器驱动开发

本节介绍LabVIEW即插即用仪器驱动的开发流程。在理想情况下,LabVIEW仪器驱动应支持最终用户控制仪器的所有功能。由于无法列举所有不同仪器类型(如万用表、计数器/定时器等)所需的功能,本节着重介绍适用于所有驱动的架构规范。下列信息有助于以一致的方式组织并打包驱动,同时能够实现仪器特有的功能。

LabVIEW仪器驱动开发流程包括3个步骤。第1步:设计仪器驱动结构。第2步:通过仪器驱动项目向导新建仪器驱动VI。第3步:添加开发人员定义的VI并创建范例VI。

第1步:设计仪器驱动结构

理想的仪器驱动应恰如其分地满足用户需求-既无多余,也无不足。没有任何一种驱动能够满足所有人的需求,但通过认真研究仪器并将控件组合为模块化VI,就能满足大部分用户的需求。

随着仪器中可编程控件数量持续增加,对模块化仪器驱动设计的需求也随之增加。应避免只通过一个VI来实现仪器的所有功能。但同样也应避免每个VI只控制一项功能的仪器驱动设计。 这种方法会导致一个API中包含数百个VI。此外,还可能会迫使最终用户去理解仪器专有的命令顺序和交互原则。模块化设计简化了控制仪器所需的编程工作。

在构建单个VI之前,设计仪器驱动的整体结构。设计仪器驱动时,应从应用程序和最终用户的角度进行考虑。

理解仪器是设计流程中的关键步骤

下列步骤是开发LabVIEW仪器驱动结构的一种方法。

  1. 熟悉仪器操作。仔细阅读操作手册。开发VI之前,学习如何以交互方式使用仪器。
  2. 在实际测试配置中使用仪器,以积累实际经验。操作手册中可能会介绍简单测试的设置方式。
  3. 学习手册的编程部分。阅读指令集,了解可用的控件和函数及其组织方式。确定用于编程的最佳功能。
  4. 检查现有的仪器驱动,确认是否有控制类似仪器的驱动。通常,同一系列的仪器具有相似的编程指令集,可在修改后用于其他仪器。
  5. 查找组合在一起用于执行单个任务或功能的控件,以辅助驱动结构的开发。手册各章节内容通常与仪器驱动的功能分组相对应。


通过组织仪器命令开发驱动结构

仪器驱动的组织方式是指仪器驱动组件VI的层次结构和整体关系。

在仪器驱动中存在两种API VI类型:所有仪器通用的API VI和开放仪器独特功能的API VI。模板仪器驱动VI(初始化、关闭、重置、自检、版本查询及错误查询)用于执行通用操作。开放仪器独特功能的VI由仪器驱动开发人员定义。某些仪器驱动可能会定义额外的类别,例如用于开关仪器的“路由”或“扫描”。

将通用VI和开发人员定义的VI归入各自的类别。执行类似操作的一组VI构成一个类别。最常见的VI类别为配置、操作/状态、数据和工具。

下表所示为简单示波器的仪器驱动组织方式示例。层次结构的最高级别为模板VI(初始化和关闭)及典型的VI类别。

表1:简单示波器的组织方式示例

VI层次结构类型
初始化VI(模板)
范例VI
自动设置和读取波形范例
(开发人员定义)
配置VI
自动设置
竖直配置
水平配置
配置触发
配置采集模式
(开发人员定义)
(开发人员定义)
(开发人员定义)
(开发人员定义)
(开发人员定义)
数据VI
读取波形
读取测量值
高级VI
启动
获取波形
获取测量值
(开发人员定义)
(开发人员定义)

(开发人员定义)
(开发人员定义)
(开发人员定义)
工具VI
重置
自检
版本查询
错误查询
(模板)
(模板)
(模板)
(模板)
关闭VI(模板)


设计范例

请查阅大部分仪器手册中所包含的组织方式信息,以确定应在仪器驱动VI中添加的参数。尤其需注意的是,手册中的编程章节可能会将命令进行分组,例如,配置测量、触发、读取测量值等等。这些分组可作为驱动层次结构的模型。查找组合在一起用于执行单个任务或功能的控件,以辅助驱动结构的开发。模块化驱动包含每个控制组的单个VI。

下表所示为简单DMM仪器命令与开发人员定义的仪器驱动VI之间的对应关系。

表2:手册章节和命令与仪器驱动VI的关系。

虚拟仪器接线端仪器命令
初始化ID查询?

重置?
输入/输出配置*IDN?

*RST

配置测量

测量功能
范围
分辨率
电源线周期数

测量配置SENS:FUNC <function selection>
<function selection>:RANGE;
<function selection>:RES;
<function selection>:NPLC;

配置触发

触发源
触发延迟
触发计数
采样计数

触发操作TRIG:SOUR
TRIG:DEL
TRIG:COUN
SAMP:COUN
读取测量读数测量读数
使用下列命令获取测量值
INIT;
FETCH;


尽管仪器手册可提供大量关于仪器驱动组织方式的信息,但不应完全依赖手册。仪器使用经验才是主要的指导原则。通常情况下,可将多个不同命令组中的命令放置于单个VI中。但有时必须将手册中的一组命令分置于两个或更多VI中。在仪器手册中,触发配置命令与触发就绪和执行命令位于一组内。此时可将上述命令分置于两个VI中-一个用于配置触发,另一个用于仪器就绪或仪器触发。

第2步:使用仪器驱动项目向导新建仪器驱动

LabVIEW仪器驱动结构设计完成后,使用仪器驱动项目向导创建新的仪器驱动,然后对新建的仪器驱动VI进行修改,以配合仪器使用。 

使用仪器驱动向导

在LabVIEW 8.x及更高版本中,可通过仪器驱动项目向导新建仪器驱动项目。 

按照下列步骤,使用仪器驱动向导创建仪器驱动:

  1. LabVIEW Getting Started(LabVIEW启动)窗口中选择Tools(工具)» Instrumentation(仪器)» Create Instrument Driver Project(创建仪器驱动项目),启动Instrument Driver Project Wizard(仪器驱动项目向导)
  2. Project Type(项目类型)菜单中选择New driver from template(基于模板新建驱动),并从Source Driver(源驱动程序)菜单中选择仪器类型。
  3. 选择Next(下一步)。
  4. 创建驱动标识符。 标识符应切合实际。
  5. 选择Next(下一步)。
  6. 选择图标颜色和类型。
  7. 选择Finish(完成)。此时将显示Project Window(项目窗口)LabVIEW Help(LabVIEW帮助)

第3步:添加仪器驱动API VI

添加开发人员定义的API VI,这些VI会对仪器驱动的功能进行定义,并可使用仪器的独特功能。 

使用仪器驱动VI向导

仪器驱动VI向导可创建仪器支持的其他VI。 如果从类模板(例如数字万用表模板)创建驱动,仪器很可能支持类模板未涵盖的其他功能。应使用现有VI和结构作为指导,为每项受支持的功能创建额外的VI。例如,示波器通常具有多种触发类型,但示波器模板仅包含对于边沿触发的支持。如果仪器支持其他触发类型,应通过额外的仪器驱动VI添加该功能。

按照下列步骤,使用仪器驱动向导创建仪器驱动:

  1. 打开仪器驱动项目。
  2. Project Explorer(项目浏览器)窗口中右键单击LabVIEW仪器驱动项目库(.lvlib)并从快捷菜单中选择New(新建)» Instrument Driver VI(仪器驱动VI),显示仪器驱动VI向导。
  3. 在仪器驱动VI向导的Start(开始)页面中,选择下列选项之一并单击Next(下一步)按钮。
    1. 基于仪器驱动模板VI创建-基于模板VI创建仪器驱动VI。
    2. 基于现有VI复制-复制并配置现有仪器驱动VI及其子VI。
    3. 配置用户VI-配置仪器命令、指定响应解析方式、与已连接的仪器进行交互并将相应的仪器I/O和字符串格式化/解析代码生成为新的仪器驱动VI。
    4. 添加一个空VI-创建仪器驱动VI(仅包含VISA资源名称输入/显示控件和错误簇输入/显示控件)。
  4. 在向导的第二页中:
    1. 如果在Start(开始)页面中选择了Create from an instrument driver template VI(基于仪器驱动模板VI创建),从Clone from Template(基于模板复制)页面上可用的仪器驱动VI模板中选择一个VI并单击Next(下一步)按钮。
    2. 如果在Start(开始)页面中选择了Copy from an existing VI(基于现有VI复制),单击Browse for VI(浏览VI)页面上的Browse(浏览)按钮进行浏览,选择要添加至项目的VI并单击Next(下一步)按钮。
    3. 如果在Start(开始)页面中选择了Configure your own VI(配置用户VI),在Select VI type(选择VI类型)页面中选择Configuration VI(配置VI)Measurement VI(测量VI)并单击Next(下一步)按钮。选择Configuration VI(配置VI)可创建向仪器发送命令的VI。选择Measurement VI(测量VI)可创建向仪器发送命令并从仪器读取响应的VI。
    4. 如果在Start(开始)页面中选择了Add a blank VI(添加一个空VI),跳至步骤6。
  5. 如果在Start(开始)页面中选择了Configure your own VI(配置用户VI),配置控件设置页面并单击Next(下一步)按钮。否则,跳至下一步。
    1. Data type(数据类型)下拉菜单中为每个参数选择合适的数据类型。
    2. Data type(数据类型)下拉菜单旁边的数值框中为每个参数设置一个默认值。
    3. Command preview(命令预览)文本框中验证已配置的命令字符串。
    4. 如果在Select VI type(选择VI类型)页面中选择了Configuration VI(配置VI),从Test the Command(测试命令)部分的下拉菜单中选择仪器。如果在Select VI type(选择VI类型)页面中选择了Measurement VI(测量VI),单击Next(下一步)按钮并从Test the Command(测试命令)部分的下拉菜单中选择仪器。
    5. 单击Run Test(运行测试)按钮,对已配置的命令进行测试。LabVIEW会将Command preview(命令预览)文本框中的命令发送至仪器,并在写入字节文本框中显示写入仪器的字节数。如果命令运行成功,指示灯将变为亮绿色。如果VISA返回错误,指示灯将变为红色。单击Explain Error(解释错误)按钮可显示错误。如果在Select VI type(选择VI类型)页面中选择了Measurement VI(测量VI),LabVIEW将读取仪器响应并将其显示在Response(响应)文本框中。可在Configure response data type(配置响应数据类型)部分中选择响应的数据类型。
  6. VI Properties(VI属性)页面中,编辑VI名称、路径、图标及说明并单击Next(下一步)按钮。
  7. Summary(汇总)页面中,检查新VI的信息并单击Finish(完成)按钮,将仪器驱动VI及子VI添加至仪器驱动项目并打开VI。如果基于模板VI或现有VI创建VI,LabVIEW会对与项目库中的现有VI同名但具有不同连线板的子VI进行重命名。LabVIEW不会复制与项目库中的现有VI具有相同名称及相同连线板的子VI。新VI将使用项目库中的现有VI替换LabVIEW未添加的任何子VI。


•VI:名称和属性
•输入控件/显示控件:命名和数据表示法
•VI前面板
•图标/连线板
•程序框图
•文档

修改所有VI后,创建Functions(函数)选板菜单,以便用户通过Functions(函数)选板安装、访问和使用仪器驱动。为保持一致,仪器驱动应显示在Instrument Driver VIs(仪器驱动VI)子选板中。在子选板内,仪器VI的组织方式应与下图所示的内部设计模型一致。

图7:FL45子选板示例

前面板样式

除了操作仪器所需的控件外,前面板中还应包括VISA资源名称输入控件、VISA资源名称输出显示控件、错误输入输入控件及错误输出显示控件。关于VISA会话句柄的详细信息,请参见驱动支持库章节。在LabVIEW 7.1或更早版本中,请参见LabVIEW用户手册(后附链接)的第6章,了解关于错误输入错误输出参数的详细信息。在LabVIEW 8.0或更高版本中,请参见LabVIEW帮助(后附链接)中的“处理错误”主题。

在设计前面板时,请遵循下列样式指南,以确保与其他LabVIEW前面板保持一致。请参见仪器驱动指南的章节“输入控件/显示控件:命名和数据表示法以及前面板”,获取关于创建仪器驱动前面板的完整要求及建议。

  1. 对所有标签使用默认(应用程序)字体。该字体包含在LabVIEW中,因此其他所有用户均可使用。
  2. 将输入控件和显示控件名称格式设置为粗体。控件标签中每个单词的首字母应大写,例如Configure Trigger Source(配置触发源)。 但VISA resource name(VISA资源名称)、error in(错误输入)、error out(错误输入)及AC或FM等常见缩略词除外。
  3. 将默认信息以纯文本格式放置于控件标签中的括号内,以便默认值可显示在Context Help(即时帮助)窗口中。该信息有助于在程序框图中连线VI。例如,将函数选择器下拉列表控件0项处的默认值直流电压伏特值标记为函数(0:DCV),将默认值为TRUE(表示自动启用)的布尔开关标记为自动触发延迟(T:On)。
  4. VISA资源名称输入控件置于左上方,将VISA资源名称输出显示控件置于右上方,将错误输入控件置于左下方,将错误输出控件置于右下方。
  5. 编辑所有输入控件和显示控件的说明信息。关于创建控件说明信息的详细信息,请参见LabVIEW帮助。


图标和连线板

连线板左上角的接线端应保留用于VISA资源名称输入控件,右上角的接线端应保留用于VISA资源名称输出显示控件。左下角的接线端应保留用于错误输入输入控件,右下角的接线端应保留用于错误输出显示控件,这样可简化后续错误接线端的连线。应选择接线端数量大于输入控件和显示控件数量的连线板模式,因为后续可能向连线板添加更多的输入控件/显示控件。采取这种预防措施可避免更改连线板模式以及替换已修改子VI的所有调用实例。将输入放在左侧,输出放在右侧,以实现程序框图中从左至右的数据流。

为每个VI选择有意义的图标。尽量使用图标图形集中的图标。此外,也可以借用其他仪器驱动中类似VI的图标,或使用labview\examples\instr\insticon.llb目录下的图标库Icon256.vi。在图标上方添加仪器驱动的前缀,以便用户可根据驱动API识别VI。创建图标时应使用能代表VI功能的图形和图像。下图所示为Icon256.vi中的示例配置图标。

图8:示例图标

关于创建有意义的图标和设计连线板的具体要求和建议,请参见仪器驱动指南中的“图标和连线板”章节。

程序框图

前面板设计完成后,即可创建程序框图。使用格式化写入字符串函数创建仪器命令字符串。该函数可进行扩展,可将多个值和多个数据类型格式化写入字符串。双击该函数可通过Format Strings(格式化字符串)对话框输入格式命令。此外,也可以通过添加真/假字符串和选行并添加至字符串函数对字符串进行操作。例如,使用添加真/假字符串函数可将前面板上的布尔值转换为字符串。该函数可一次性选择合适的字符串并将其与命令字符串相连。使用选行并添加至字符串可将文本下拉列表值转换为字符串。该函数可根据标签值选择合适的字符串并将其与命令字符串相连。关于这些函数的说明,请参见LabVIEW帮助(后附链接)。下图所示的程序框图为创建命令字符串的优先考虑方法。

图9:创建字符串的技巧

许多仪器都应遵循可编程仪器标准命令(SCPI)中的编程命令集和语法。使用基于SCPI的仪器可组合多个命令,以在单次I/O写入操作中进行发送。上述字符串函数可用于创建包含多个命令的字符串。将组合字符串连线至VISA写入函数。

程序框图是用户学习VI工作原理的主要方式,因此应尽量将程序框图设计得方便易读。仪器驱动程序框图的大部分建议类似于所有LabVIEW应用程序通用的最佳操作实践,例如,遵循从左至右的程序框图布局、尽量减少连线转折、使用高效一致的代码编写技巧。关于创建仪器驱动程序框图的具体要求和建议,请参见仪器驱动指南中的“程序框图”章节。

下图所示的程序框图遵循仪器驱动指南中详述的要求和建议。

图10:符合样式指南的简单程序框图

另请参阅:
LabVIEW用户手册
LabVIEW帮助:处理错误

驱动支持库

可用于仪器驱动开发的LabVIEW工具包括:可用作自行创建驱动基础的模板VI库、对模板进行自定义的仪器驱动项目向导、执行仪器I/O的VISA函数、有助于创建有意义图标的图标库以及支持文件和函数。本节介绍VISA函数和仪器驱动模板VI。

VISA

VISA函数包含仪器驱动与可编程仪器通信所使用的I/O接口。VISA是用于控制VXI、GPIB、串行、TCP/IP及其他类型仪器的单一接口库。关于VISA函数和控件的说明,请参见LabVIEW帮助(后附链接)中的“VISA VI和函数”主题。

多数仪器驱动VI的前面板上均包含VISA资源名称输入控件和VISA资源名称输出显示控件。这些输入控件和显示控件在仪器驱动子VI之间传递会话信息。VISA资源名称用于指定运行VI的资源,还区分了仪器驱动的不同会话。

VISA资源名称是设备I/O会话(初始化VI除外)的唯一标识符引用。用于标识与VI进行通信的设备并传递执行I/O所需的所有配置信息。

VISA资源名称输出包含与VISA资源名称相同的标识符信息,将引用传递出VI,至访问同一仪器的其它VI。连线VISA资源名称可构建数据依赖关系。

还可在程序框图上将VISA资源名称从VISA函数中传入或传出。

仪器驱动模板VI

LabVIEW仪器驱动模板位于instr.lib文件夹中,包含一组大部分仪器通用的VI。NI会定期更新模板,并将其添加至最新版本的LabVIEW。这些VI可用作仪器驱动开发的基础。模板结构简单灵活,为所有LabVIEW驱动建立了标准格式。

模板VI中包含修改VI用于具体仪器的说明信息。基于消息的仪器(GPIB、VXI和串行)和VXI基于寄存器的仪器均可与模板VI配合使用。由于模板的设计适用对象为兼容IEEE 488.2的仪器,因此兼容IEEE 488.2的仪器所需的修改量最小。对于其他仪器,可将模板VI用作解释器或用户VI的模型,对仪器专有命令进行替换。

另请参阅:
LabVIEW帮助:VISA VI函数

重要注意事项

编制VI说明信息

为创建的VI编制说明信息,以便LabVIEW Context Help(即时帮助)窗口可为每个仪器驱动显示说明信息。关于编制VI说明信息的更多内容,请参见LabVIEW帮助(后附链接)中的“编制VI说明信息”主题。

选择Help(帮助)» Show Context Help(显示即时帮助),打开Context Help(即时帮助)窗口。将光标移至前面板或程序框图对象上,或前面板或程序框图右上角的图标上时,Context Help(即时帮助)窗口中将显示该对象的说明信息及文档。

此外,还可使用前面板和程序框图上的自由标签,帮助用户理解。在程序框图上,显示所有接线端标签(纯文本)并将边框颜色设置为透明。将在条件和顺序结构中显示的自由标签设为粗体,以便突出显示注释,并使VI易于理解和修改。

错误报告

仪器驱动中的错误报告与大多数其他LabVIEW应用程序中的错误报告类似。VISA函数将检查错误输入簇的布尔状态,以确认之前运行的VI或函数是否生成了错误。如果VI或函数检测到错误,VISA函数不会执行常规操作,而是将错误信息不加修改地传递至错误输出簇。如果VI或函数未检测到错误,VISA函数将正常运行并确认是否有错误生成。如有错误,函数将在错误输出簇中返回新的错误信息。否则,函数将在错误输出簇中返回错误输入信息。第一个错误将使后续VI无法运行(或执行用户定义的其他操作),错误代码和错误源将传播至顶层前面板。此外,警告(错误布尔值设为FALSE时的错误代码和源消息)可继续传递,但不会触发错误操作。

除VISA错误代码外,下表列出的错误代码和警告代码也将预留用于仪器驱动。满足特定条件时,仪器驱动VI将返回下列代码。在旧版的仪器驱动和仪器驱动模板中,还存在表示仪器专有错误的错误代码,如-1300。但应使用下表中的代码,以确保符合仪器驱动标准。

表3:仪器驱动错误代码十进制代码

十进制代码十六进制代码含义
00无错误:调用成功
1073481728至10734837753FFC0800至
3FFC0FFF
警告:开发人员定义的警告
-1074003951BFFC0011错误:标识查询失败
-1074000000BFFC0F80错误:仪器定义的错误
-1073999873
至-1074001919
BFFC0801至
BFFC0FFF
错误:开发人员定义的错误


“识别查询失败”错误用于初始化VI。“仪器定义的错误代码”用于错误查询VI。


查询仪器状态

几乎所有仪器都具有特定的机制以报告仪器定义的错误。仪器定义的错误包括命令错误、执行错误及查询错误。近年来生产的许多仪器中都包含查询命令,可用于确认是否发生了仪器错误。对于SCPI仪器,查询仪器错误的标准命令为“SYST:ERR?”。该命令的响应包括错误代码和错误消息。如果未发生错误,则响应为“0”,“无错误”。

如果仪器不支持“SYST:ERR?”命令,但支持IEEE 488.2状态寄存器,可通过查询标准事件状态寄存器确定是否发生错误。

使用仪器驱动VI中的错误查询VI可执行仪器错误报告机制,向用户报告仪器错误。仪器驱动不会重新定义仪器驱动中的仪器错误,而是由错误查询VI报告仪器所报告的错误代码和相关消息。

如果不使用错误查询VI查询仪器错误,最终用户即使使用简单错误处理器,也可能无法意识到仪器中发生了错误。向仪器发送/接收数据不会造成I/O错误,但无法报告仪器错误。

为更好地帮助用户及时获取仪器错误信息,大多数API VI在完成I/O操作后会调用错误查询VI。发生仪器错误时,标准LabVIEW错误处理技术(例如,调用简单错误处理器VI)将自动向用户通知错误。如果检测到错误,错误查询VI会将错误代码-1074000000(十六进制:BFFC0F80)更新至错误簇,并将仪器返回的错误信息添加至源消息。LabVIEW错误处理器VI将错误代码-1074000000视为仪器特有错误,并生成相应的错误消息。下图所示为错误查询VI的前面板。

图11:错误查询VI的前面板


低层API VI不调用错误查询VI。许多低层API VI主要用于改善性能,或提供更多的仪器操作控制权限。例如,示波器仪器驱动可能会执行读取波形VI,以返回基于通道的波形数据。如需为高级用户提供更多的控制权限,应采用启动和获取VI。低层的启动和获取VI可提供更多的控制权限,使用户能够控制操作的执行时间,因此这些低层VI不会调用错误查询VI。

某些仪器具有错误队列,检测到的错误和事件可存储在队列中。该队列为先进先出(FIFO)模式,最小长度为两条消息。如果发生溢出,仪器将保留最新的错误/事件,并将最早的错误/事件替换为队列溢出消息。在仪器驱动中,可在发送命令后对仪器进行查询,从而通过该队列检测并报告仪器错误。发出SYST:ERR?命令后,SCPI仪器将返回队列中的一个条目,可能是错误、溢出警告或消息0,“无错误”。有些最终用户可能希望获取整个错误队列,因此许多仪器驱动中也包含错误查询(多个)VI。该VI通过:SYST:ERR?命令查询仪器,直到错误队列为空。

仪器驱动项目向导生成的代码中包含错误查询VI。

仪器驱动VI通常不对输入参数执行范围检查。如果用户传入无效值,仪器将报告仪器专有错误。错误查询VI可检测到该仪器错误,并向用户报告超出范围。在VI和控制帮助中编制范围说明信息,以免用户遇到超出范围的错误。

其他样式指南

在不同仪器驱动之间保持一致可改善用户体验。简单的前面板和程序框图以及易于理解的布局可使最终用户轻松修改代码。某些用户可能需要修改代码并进行优化,以适应其特定需求。关于样式指南的详细信息,请参见仪器驱动指南。

测试操作

随着开发的进行,应对仪器驱动进行测试。大多数用户会通过Context Help(即时帮助)窗口来确定VI的输入,但有些最终用户可能不会这么做,并有可能会向VI传递无效的数据。因此,应使用无效数据、边界条件和范围以及不常见的输入组合对VI进行测试。如果子VI需要字符串或数组信息,可将空数组或空字符串连线至VI输入。

另请参阅:
LabVIEW帮助:编制VI说明信息

结论

定义VI结构是仪器驱动开发流程中最重要的步骤。应将相关联的仪器控件分组为模块化VI,每组执行的任务应与用户在前面板中实际使用仪器的方式保持一致。此类结构可确保VI能够为用户提供执行特定仪器操作所需的确切信息。仪器驱动开发过程中的最大挑战在于确定每个VI下辖的控件。

对于最终用户而言,逻辑结构、说明信息及错误报告是仪器驱动最重要的功能。应在所有的说明信息框中添加相应注释,并在程序框图中使用注释为代码编制说明信息。使用本文档中介绍的方法为VI创建实用的错误报告机制。全面测试所有VI,确保其正常工作。

仪器驱动开发不仅仅是构建字符串并将其发送至仪器。应充分利用仪器驱动项目向导及NI仪器驱动程序网络(ni.com/idnet)中的数千个仪器驱动。模板中包含大部分仪器通用的VI,并展示了仪器驱动VI所需的样式和结构。使用现有的仪器驱动作为参考,创建自己的仪器驱动。遵循内部设计结构,并在创建VI时留意API VI的类别。使用仪器驱动指南来指导仪器驱动开发流程,以确保创建高质量的仪器驱动。这些工具可帮助开发人员设计出大量用户易于接受的仪器驱动。

Was this information helpful?

Yes

No