版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章虚拟仪器控制及应用实例8.1虚拟仪器控制软件结构8.2仪器控制程序的编写8.3通用的I/O控制方法8.4仪器控制与应用实例8.5课程练习本章小结练习与思考8.1虚拟仪器控制软件结构
虚拟仪器控制软件结构(VirtualInstrumentationSoftwareArchitecture,VISA)是由VPP系统联盟制定的I/O接口软件标准及其相关规范的总称,它规定了虚拟仪器各模块之间进行通信应遵循的基本原则和方法。按照该结构,一个标准的虚拟仪器控制软件基本层次构成应包括用户应用程序接口、用户定义资源层、仪器资源层、I/O资源层以及资源管理层五个部分,如图8-1所示。图8-1虚拟仪器控制软件基本层次构成
VISA是随着虚拟仪器系统的发展而不断发展的,特别是随着总线技术的不断发展,不同厂家分别就不同的总线标准开发出了许多不同的硬件设备,由于在设计和生产中这些硬件设备都严格遵循一定的软件结构标准,因此在实际使用中,不同厂家生产的硬件设备可以方便地实现互换或替代,这样做的积极意义是显而易见的:一方面,它方便了用户的使用;另一方面,这种硬件的标准化为虚拟仪器的进一步发展奠定了牢固的基础。在VISA出现之前,许多仪器生产厂家在推出控制器硬件的同时也推出了不同的接口软件,但这种软件只是针对某一类仪器,并不具有通用性。为了使预先编写的仪器驱动程序和软面板能够适应于任何情况,就必须建立标准化的I/O接口软件。为此,VPP联盟制定了新一代的I/O接口软件规范,即VPP4.x系列规范(该系列规范也称为虚拟仪器软件结构),并将此作为迈向工业界软件兼容的第一步。
VISA为整个工业界提供了一个统一的软件基础,各个模块生产厂家以该结构作为I/O控制的底层函数库进行相应开发,从而使得不同厂家的软件可以在同一平台上协调运行,
这将大大减少工业界的软件重复开发,缩短测试应用程序的开发周期,因此,VISA毫无疑问地大大促进了虚拟仪器的发展速度。8.1.1虚拟仪器软件架构
对于驱动程序、应用程序的开发者而言,VISA函数是一套可方便调用的函数,其中核心函数可控制各种类型器件,而不必深入考虑器件的接口类型。VISA包含了很多不同类型的接口函数,以方便用户用不同的函数分别为GPIB器件、VXI器件等各种类型器件编写软件,其目的是只要用户学习一次VISA就可以处理各种不同情况,而不必再学习不同厂家、不同接口类型的I/O接口软件的使用方法。
VISA与硬件是密切相关的,它规定了其标准函数库能够或者是应该向用户提供的标准函数、参数形式、返回代码等参数的基本形式,但是它没有规定如何实现上述功能。其实硬件功能的具体实现是交由厂商来完成的,也就是说,不同的厂商在提供不同硬件设备的同时,必须根据自己的硬件设计提供相应的VISA库用以支持多种接口类型和网络结构。显然,对于控制器厂商而言,这一点无疑增加了其软件开发的难度,但是对于用户而言,却可以使其应用得到最大可能的简化。
VISA采用了如图8-1所示的自下而上的架构,在其最底层定义了一个管理所有资源的管理器件——资源管理器。它主要用于管理、控制和分配VISA资源的操作功能(如资源寻址、资源创建与删除、资源属性的读取与修改等)。
在资源管理器的基础上,VISA列出了各种仪器的操作功能,并在此基础上进一步实现了操作功能的合并。每个资源的内部实质是各种操作的集合,这些资源就是仪器控制资源(I/O资源层)。一般情况下,我们把其中那些包含了各种仪器控制的资源称为通用资源,而把那些无法合并的功能称为特定仪器资源。在I/O资源层之上,VISA定义并创建了一个用应用程序接口(API)实现的资源。该资源称为仪器资源层,它为用户提供了一个单一的控制所有VISA仪器控制资源的方法。
在仪器资源层上对应的是用户定义资源层,该层的具体定义并没有在VISA规范中规定,它一般包括用户自定义的资源,体现了VISA的可扩展性和使用的灵活性,因此该层是VISA的可变层。
在用户定义资源层之上的是用户程序接口,它是不同的用户根据实际需求利用VISA资源实现的应用程序。8.1.2VISA资源描述及事件处理
1.VISA的资源描述
在VISA中,最基本的软件模块是定义在资源类上的资源。需要强调的是,这里的资源独立于编程语言与操作系统之外,它的定义与描述不包含任何有关操作系统或编程语言相关的限制。VISA的资源不仅包含数据实体,而且还提供一些特定的服务。作为一个数据实体,它很像一个记录,由一些相同或不同类型的域构成(该域的整体被称为一个对象的状态),因此,要改变对象的状态只需要改变其对应域中的属性值。
VISA中的资源由三个要素组成:属性集、事件集和操作集。以写资源为例,其属性包括起始字符串、字符长度以及协议等,事件集包括用户登录、用户操作事件等,操作集包括各种端口的数据写入或读出操作。
VISA的资源描述格式如表8-1所示。
VISA资源描述格式与编程语言无关,资源内所有元件的定义也均与编程语言无关,为了适应于不同的操作系统和编程语言环境,VISAI/O接口软件的源程序可为不同系统提供不同的API接口。在具体使用中如果要调用VISA库,均需要在应用程序头部引入说明文件。在C语言环境下,VISA资源说明文件为visatype.h和visa.h。不同的引用接口与文件说明,实现了不同环境下的适用性。VISA的资源描述格式不仅适用于现在VISA库包含的所有资源,也为VISA库将来的资源扩充定义了一个标准。所有的VISA资源类定义如表8-2所示。
2.VISA的事件处理
在具体的设备编程过程中,通常会遇到以下的情况:
(1)硬件设备发出设备服务请求,请求系统给予处理;
(2)硬件设备产生中断,需要系统立即响应;
(3)程序探知某个系统服务是否在线;
(4)出现意外或非正常状态,需要终止程序执行;
(5)程序执行过程中的错误情况。
在VISA中,类似以上的情况被定义为事件模型,并且制定了标准的规定,以便用来处理在设备编程过程中可能会出现的不同事件。
1)事件模型
VISA的事件模型主要包含捕获/通知、事件处理和确认三部分内容。具体如下:
捕获/通知就是设置一个VISA的源,并且使它进入能够接收事件的状态。这种设置有效地保证了该VISA源把捕获到的事件传到通知处理工具,以使其对事件进行相应处理的效率。
事件处理就是对VISA已经捕获到的事件进行相应处理,具体的处理方法按照VPP规定有两种,即排队法和回调函数法。
确认部分主要是用来在事件处理完备后,根据不同的返回信息,用来确认是否已经成功地执行了事件处理任务。
2)事件的处理方法
上面已经提到过事件处理的方法有回调函数法和排队法两种,它们分别适用于不同事件处理任务,是相互独立的两种方法。在实际使用中用户可以根据需要独立定义使用一种或同时定义使用这两种处理方法。
排队法的关键是利用VISA将发生的事件保存到一个VISA队列中,事后再对队列中的事件进行处理。在处理过程中,每一类事件都有自己的优先级,因此,在排队过程中,优先级高的事件进入队列后会被插入到优先级低的事件之前。同等优先级的事件按照FIFO(先进先出)的顺序排列。当用户程序对事件的实时性要求不是很严格时,即不需要对发生的事件做出实时响应时,通常使用排队法。
回调函数法的关键是事件发生时能够立即触发处理用户事先定义的操作,即用户首先在程序中定义一个回调函数,每次事件发生后,VISA自动执行用户定义的回调函数。
由于回调函数法的实时响应性能要优于排队法,因此,当用户需要对发生的事件立即做出响应时,通常应考虑用回调函数的处理方法。8.1.3可编程仪器控制标准命令
可编程仪器控制标准命令是为了程控仪器编程进一步标准化而制定的标准程控语言,目前已经发展成为重要的程控软件标准之一。IEEE488.2虽然定义了GPIB总线的编码、句法格式、信息交换控制协议和公用程控命令语义,但它没有定义任何与仪器相关的命令,这使得在使用过程中器件数据和命令的标准化仍存在一定困难,因此,仪器制造者迫切需要改变这一不利局面。于是在1990年,由仪器制造商国际协会在IEEE488.2基础上提出了可编程仪器标准命令——SCPI。SCPI的推出更进一步推动了程控仪器的标准化发展。
SCPI命令描述的不是用于测量信号的仪器,而是描述人们正试图测量的信号。SCPI具有一种被称为“横向兼容性”的特性,也就是相同的SCPI命令可以用于不同类型的仪器。同时,SCPI还具有可扩展功能,其功能可随着仪器功能的增加而升级扩展,这一点对于仪器的更新换代显然是很有帮助的,而这个特性又被称为SCPI的“纵向兼容性”。标准的SCPI仪器程控消息、响应消息、状态报告结构和数据格式的使用只与仪器测试功能、性能及精度相关,而与具体仪器型号和厂家无关。关于SCPI命令的具体描述详见8.2.3节。8.1.4仪器驱动程序结构
VPP规范提出了仪器驱动的两个基本结构模型,即外部接口模型和内部接口模型。
1.外部接口模型
仪器驱动程序的外部结构模型如图8-2所示,它表示仪器驱动程序如何实现与外部软件系统的接口。外部接口模型共可分为函数体、交互式开发接口、程序开发接口、VISA接口和子程序接口五部分。图8-2仪器驱动程序外部接口
1)函数体
函数体是仪器驱动程序主体功能的实现部分,也就是仪器驱动程序的实际源代码。VPP规范定义了两种源代码形式,一种为语言代码形式(C语言),另一种为图形语言(G语言)形式。具体函数体的构成可以采用上述语言之一,而函数体的内部结构详见内部设计模型。
2)交互式开发接口
交互式开发接口通常是一个图形化的功能面板,用户根据实际功能要求开发出图形化面板,并可以在这个图形化接口上管理各种控制方式或是改变每一个功能调用的参数值。
3)程序开发接口
程序开发接口是应用程序调用驱动程序的软件接口,通过该接口可以方便地调用仪器驱动程序中定义的所有功能函数,从而实现不同的功能。对于不同的应用程序开发环境,将有不同的软件接口。
4) VISAI/O接口
仪器驱动程序通过该接口来调用VISA标准的I/O接口程序库,从而实现了仪器驱动与仪器的通信问题。
5)子程序接口
子程序接口是为了仪器驱动程序调用其他软件模块(如数据库、FFT变换、网络通信等软件)而提供的软件接口。良好的子程序接口可以方便地调用其他软件模块,并能有效地缩短程序开发时间的消耗。
2.内部接口模型
仪器驱动模型的内部设计模型如图8-3所示。它定义了外部接口模型中所定义的函数体的内部结构,并做了详尽的描述。由于所有VPP仪器驱动程序的源代码都是根据该结构模型来设计的,因此,这一模型对于仪器驱动程序的开发者来说是非常重要的。同时,对于仪器用户来说也非常重要,因为一旦用户理解了这一模型,并知道如何使用仪器驱动程序,那么,他们就完全知道怎样使用所有的仪器驱动程序了。图8-3仪器驱动程序内部接口模型
VPP仪器驱动程序的函数体主要由两部分组成:一部分是一组部件函数,它们是一些控制仪器特定功能的软件模块,包括初始化、配置、作用/状态、数据、实用和关闭功能;另一部分是一组应用函数,它们使用一些函数共同实现完整的测试和测量操作。
1)部件函数
仪器驱动的部件函数包括:初始化函数、配置函数、作用/状态函数、数据函数、实用函数和关闭函数。
(1)初始化函数:是访问仪器驱动程序时调用的第一个函数,它也被用于初始化软件连接或是执行一些必要的操作,使仪器处于默认的上电状态或其他特定状态。
(2)配置函数:是一些软件程序,它对仪器进行配置,以便使其执行所希望的操作。
(3)作用/状态函数:用于执行一项操作或者报告正在执行或已经挂起的操作的状态。这些操作包括激活触发系统、激励输出信号或报告测量结果。
(4)数据函数:用来按照一定格式从仪器取出数据或者向仪器发送数据。
(5)实用函数:包括多标准的仪器操作,如复位、自检、错误查询、错误处理、驱动程序的版本以及仪器硬件版本的报告等函数。实用函数也可包括开发者自定义的仪器驱动函数,如仪器的存储、仪器重新设定初始值、仪器的校准和误差的补偿等。
(6)关闭函数:是用来关闭仪器与软件连接的函数,它一般是最后被调用的。
2)应用函数
应用函数是一组以源代码提供的面向测试任务的高级函数,在大部分情况下,这些例行程序通过配置、触发和从仪器读取数据来完成整个测试操作。应用函数本身是基于部件函数的,它不仅提供了如何使用部件函数的实例,而且当用户仅需要一个面向测试的函数接口而不使用单个部件函数时,它们也非常有用。8.2仪器控制程序的编写
仪器的驱动软件是专门控制某种仪器的软件。以LabVIEW为例,由于该软件内部包含有多种VISA仪器驱动程序的模板程序,从而使得用户可以方便地根据实际需要修改驱动程序的模板程序以供使用。同时,LabVIEW因为具有面板控制的概念,特别适合于创建仪器的驱动程序。在LabVIEW中,用户所创建的软件前面板可以用于模拟仪器的前面板操作,而软件的框图部分则可以传送前面板指定的命令参数到仪器内部以执行相应的操作。当建立了一个仪器的驱动程序后,就不必再记住仪器的控制命令,而只需从前面板输入简单数据。对用户而言,仅仅拥有控制单台仪器的软件,其积极意义并不突出。虚拟仪器驱动软件的真正意义在于可以把仪器驱动程序作为子程序调用,从而使之与其他子程序一道组成一个大的控制程序,进而控制整个系统的运行。对于LabVIEW而言,使用者只需要在其仪器驱动程序模板库中找到适合自己特定仪器驱动的模板程序,即可根据情况进行修改,使之符合自己的实际要求。该驱动程序模板库位于LabVIEW→EXAMPLES→INSTR→INSTTMPL.LLB程序库中。这些模板程序是适用于大多数仪器的驱动程序,并且是LabVIEW仪器驱动程序开发的基础。这些模板程序符合仪器驱动程序的标准,并且每个程序都有指导帮助指令以便于用户根据自己的实际需求修改程序以适应某种具体的仪器。8.2.1VISA的事件处理方法
前面已经讲过,在设备编程过程中关键的是事件的处理方法,而VISA关于事件的处理方法有两种,即排队法和回调函数法。
这两种方法的执行过程都可以根据需要被挂起,程序执行过程中随时都可以调用ViDisableEvent()来挂起或终止事件的接收。下面对这两种处理方法的简单应用作一介绍。
1.排队法
排队法通常包含以下两个步骤:
(1)通知VISA开始对某类事件进行排队。在下面的例子中,我们使用viEnableEvent()来定义,其中参数VI_EVENT_SERVICE_REQ是让VISA对来自硬件设备的服务请求进行排队,参数VI_QUEUE表示设置排队法来处理该事件。
(2)系统查询VISA队列中的事件,并且允许系统等待一定的时间,在等待过程中,系统将其他程序挂起,直到有事件发生进入队列或预定的等待时间结束,例程中调用viWaitOnEvent()对队列进行查询,参数timeout给出了等待时间,若为0则表示不论队列中是否有事件发生,都立即返回。下面是一个排队法处理事件的C代码例程。
status=viOpen(viDefaultRm,“GPIB0::5”,0,0,&vi);
status=viEnableEvent(vi,VI_EVENT_SERVICE_REQ,VI_QUEUE,VI_NULL);
//设置排队事件
status=viWrite(vi,“VOLT::MEAS?”,10,&retcount);
//产生事件
status=viWaitOnEvent(vi,VI_EVENT_SERVICE_REQ,timeout,&countext);
//等待事件发生,进入队列
If(status=VI_SUCESS)
viRead(vi,rdResponse,RESPONSE_LENGTH,&retcount);
2.回调函数法
回调函数法包含以下三个步骤:
(1)需要用户为事件定义一个事件句柄,即编写一个回调函数。在回调函数中应该对发生的事件进行预期并做出相应的处理。在下面的例程中,事件句柄就是函数SRQHandlerFunc(),这个函数的写法与一般函数的写法相同。需要说明的是,每个发生的事件只能触发执行一个回调函数,即一个应用程序只能为每个事件定义一个句柄。但是在一个程序中可以同时定义多个事件,并为多个事件装载句柄,而且多个事件可以定义相同的句柄,即不同的事件发生时可以触发调用同一回调函数。
(2)时间句柄的装载(即告知VISA用户定义的回调函数的名称),由viInstallHandler()来实现。
(3)通知VISA开始接收事件,当事件发生时,立即调用执行回调函数,具体工作由viEnableEvent()来实现。
回调函数法处理事件的C代码例程如下:
status=viOpen(viDefaultRm,“GPIB0::5”,0,0,&vi);
status=viInstallHandler(vi,VI_EVENT_SERVICE_REQ,SRQHandlerFunc,VI_NULL);
//设置回调函数名称
status=viEnableEvent(vi,VI_EVENT_SERVICE_REQ,
VI_HNDLR,VI_NULL);
//设置回调函数要处理的事件类型
status=viWaitOnEvent(vi,VI_EVENT_SERVICE_REQ,timeout,&countext);
//等待事件发生,进入队列
VIStatusSRQHandlerFunc
{
/*用户自定义的回调函数代码*/
}8.2.2使用VISA函数编写仪器控制程序
使用VISA函数编写仪器控制程序时,可以根据使用的I/O库是否属于VISA而分为非VISA类和VISA类接口库两种类型,这两种类型的基本构成都包括声明区、开启区、器件I/O区和关闭区。
下面给出两大类的应用实例,请读者注意其中的异同点。
1.非VISA类接口库
1)用非VISA的I/O接口软件库(NI-488)实现对GPIB仪器的读/写操作
intmain(void)
{
/*以下是声明区*/
charrfResponse[RESPONSE_LENGTH];//响应返回值
intstatus;
//返回状态值
shortid;
//器件软件句柄
/*以下是开启区*/
id=infind(“devl”);
//开启GPIB器件
status=ibpad(5);//器件主地址为5
/*以下是器件I/O区*/
status=ibwrt(id,“*IDN?”,5);
//发送查询标示命令
/*以下是关闭区*/
//本例程关闭语句空
return0;
}
(1)声明区:声明程序中所有变量的数据类型。
(2)开启区:进行GPIB器件的初始化,确定GPIB器件的地址,并为每个器件返回一个对应的软件句柄。在初始化过程中软件句柄作为器件的标志,以输出参数形式返回。
(3)器件I/O区:完成命令的发送,并从GPIB器件中读回响应数据。由初始化得到的软件句柄在器件I/O操作中作为函数的输入参数被使用。程序通过对软件句柄的处理,完成对仪器的一对一操作。
(4)关闭区:GPIB的I/O软件库将本身的数据结构存入内存中,当系统关闭时,所有的仪器全部自动关闭,无需对I/O软件本身作关闭操作。这也说明,GPIB的I/O软件库(NI-488)无关闭机制。
2)用非VISA的I/O接口软件库(NI-VXI)实现对VXI消息基仪器的读/写操作
intmain(void)
{
/*以下是声明区*/
charrfResponse[RESPONSE_LENGTH]; //响应返回值
int16status; //返回状态值
unsignedint32retCount;//传送字节数
int16logicalAddr,mode;//器件逻辑地址和传送模式
/*以下是开启区*/
status=InitVXILibrary();//初始化VXI库
logicalAddr=5;
/*以下是器件I/O区*/
status=WSwrt(logicalAddr,“*IDN?”,5,mode,&retCount);//发送查询标示命令
status=WSrd(logicalAddr,rdResponse,RESPONSE_LENGTH,mode,&retCount);//读取响应值
…
/*以下是关闭区*/
CloseVXILibrary();
//关闭VXI器件
return0;
}
(1)声明区:声明程序中所有变量的数据类型。
(2)开启区:进行消息基器件的初始化,确定VXI消息基器件的逻辑地址。在对VXI消息基器件的操作中,逻辑地址取代了GPIB器件的软件句柄,作为器件的标志,在初始化中返回唯一的值。
(3)器件I/O区:完成对命令的发送,并从VXI消息基器件中读回响应数据。由初始化得到的器件的逻辑地址在器件的I/O操作中作为函数的输入参数被调用。程序通过对逻辑地址的处理,完成对仪器的一对一操作。在VXI消息基器件中,其mode参数表示数据传输方式;retCount参数表示实际传送的字节数。
(4)关闭区:对于VXI器件存在一个关闭机制,要求在结束器件操作的时候,同时关闭I/O接口软件库。
2.VISA类接口库
1)用VISA的I/O接口软件库实现对GPIB仪器的读/写操作
intmain(void)
{
/*以下是声明区*/
VicharrdResponse[RESPONSE_LENGTH]; //响应返回值
Viint16status;//返回状态值
Viint32retCount;
//传送字节数
ViSessionvi;//仪器软件句柄Viint32retCount; //传送字节数
ViSessionvi; //仪器软件句柄
/*以下是开启区*/
status=viOpen(viDefaultRm,"GPIB::5",0,0,&vi); //打开器件
/*以下是器件I/O区*/
status=viWrite(vi,"*IDN?",5,&retCount); //发送查询标示命令
status=viRead(vi,rdResponse,RESPONSE_LENGTH&retCount);//读取响应值
…
/*以下是开启区*/
status=viOpen(viDefaultRm,“GPIB::5”,0,0,&vi); //打开器件
/*以下是器件I/O区*/
status=viWrite(vi,“*IDN?”,5,&retCount);//发送查询标示命令
status=viRead(vi,rdResponse,RESPONSE_LENGTH&retCount);//读取响应值
…
/*以下是关闭区*/
status=viClose(vi);//关闭器件
return0;
}
(1)声明区:声明程序中所有变量的数据类型。在这里声明的数据均为VISA数据类型,与编程语言无关。VISA的数据类型的声明均包含在特定的头文件中,例如其C语言形式的头文件为visatype.h。
(2)开启区:进行消息基器件的初始化,建立器件与VISA库的通信关系。对所有器件进行初始化,均调用VISA函数viOpen()来完成。该初始化过程完全可以适用于各种仪器硬件接口类型,初始化过程返回的vi参数类似于软件句柄,可作为器件操作的标志与数据传递的中介。
(3)器件I/O区:完成对GPIB器件命令的发送,并从GPIB器件中读回响应数据。
(4)关闭区:调用viClose()函数关闭器件与VISA库的联系。
2)用VISA的I/O接口软件库实现对VXI消息基仪器的读/写操作
intmain(void)
{
/*以下是声明区*/
VicharrdResponse[RESPONSE_LENGTH];//响应返回值
Viint16status; //返回状态值
Viint32retCount;//传送字节数
ViSessionvi;
//仪器软件句柄
/*以下是开启区*/
status=viOpen(viDefaultRm,“VXI::5”,0,0,&vi);//打开器件
/*以下是器件I/O区*/
status=viWrite(vi,“*IDN?”,5,&retCount);//发送查询标示命令
status=viRead(vi,rdResponse,RESPONSE_LENGTH,&retCount);//读取响应值
…
/*以下是关闭区*/
status=viClose(vi);//关闭器件
return0;
}8.2.3SCPI命令的基本描述
1.SCPI仪器模型
为了满足程控命令与仪器的前面板和硬件无关的要求,
也就是满足设计中的面向信号而不是面向具体仪器的设计
要求,SCPI提出了一个描述仪器功能的通用仪器模型,如图
8-4所示。
该程控仪器模型描述了SCPI仪器的功能逻辑和分类,提供了各种SCPI命令的构成机制和相容性。图8-4SCPI程控仪器模型图8-4上半部分反映了仪器测量功能,其中信号路径选择用来控制信号输入通道与内部功能间的路径,当输入通道本身存在不同路径时,也可进行选择。该模型中,测量功能是其核心,可能会需要触发控制和存储管理。格式化部分用来转换数据的表达形式,当数据需要往外部接口传送时,格式化是必需的。图8-4的下半部分描述了信号源的一般情况,信号发生功能是信号源的核心,它也经常需要触发控制和存储管理,格式化部分送给它所需要的形式的数据,生成的信号经过路径选择输出。
2.SCPI命令语法
SCPI程控命令标准由三部分组成:第一部分为语法和样式,用于描述SCPI命令的产生规则及基本的命令结构;第二部分为命令标记,用于给出SCPI要求或可供选择的命令;第三部分为数据交换格式,用于描述在仪器与应用之间、应用与应用之间或仪器与仪器之间使用数据集的标准表示方法。
1)语法和样式
SCPI命令由程控题头、程控参数和注释三部分组成。SCPI程控题头有两种形式,分别如图8-5(a)和(b)所示。第一种形式采用IEEE488.2命令,也称为SCPI公用命令。IEEE488.2命令前面均以* 号开始,它可以是询问命令(结尾处有? 标记)和非询问命令(结尾处没有? 标记)。
第二种形式采用以冒号“:”分割的一个或多个SCPI助记符构成。其中,助记符可以选择长形或者短形任意一种形式,这里的长形或者短形助记符都是由关键词变换而来的。关键词是用来提供命令的名称,可以是一个单词或一个词组(这种情况下,关键词由词组前面每个词的第一个字母加上最后一个完整单词构成)。图8-5SCPI命令程控题头(a) SCPI公用命令题头;(b)程控命令题头短形助记符是根据关键词作相应变换而来的,当关键词不多于4个英文字母时,短形助记符就是大写的关键词,而当关键词多于4个英文字母时,短形助记符通常保留关键词的前4个英文字母的大写形式。长形助记符与关键词完全相同,只不过它被要求第一部分用大写字母表示短形助记符,第二部分用小写字母表示关键词的其余部分。数字后缀为允许选用项,主要在类似结构的多种应用场合时用于区分不同器件。
SCPI命令的第二部分是参数,将在数据交换格式中详细介绍,而命令的注释部分只是为了程序的可读性而加入的,实际使用中可有可无。
2)命令标记
SCPI命令标记主要包括SCPI要求的和可供选择的命令,概括地讲,SCPI命令分为仪器公用命令(见表8-3)和SCPI主干命令(见表8-4)。SCPI主干命令又可以分为测量指令和21个命令子系统,其中测量指令包括一组与测量有关的重要指令,
21个命令子系统主要对应于图8-4所示仪器模型中的各方框的功能。
3)数据交换格式
SCPI的数据交换格式语法与IEEE488.2语法兼容,分为标准参数格式和数据交换格式两部分。SCPI语言定义了供程序信息和响应信息使用的不同数据格式。
SCPI的标准参数格式包括数值参数(NumericParameters)、离散参数(DiscreteParameters)、布尔参数(BooleanParameters)和字符串参数(StringParameters)四种基本类型。其中,数值参数需要有数值参数的命令,可以接收常用的十进制数,包括正负号、小数点等,也可以接收如MAXimun、MINimun等特殊数值。离散参数用来设定有限数值(如BUS、EXTernal等)。和命令关键词一样,离散参数有简要形式和完整形式两种,而且大小写可以混用。布尔参数用来表示单一的二进制状态,有接通和断开两种形式,分别对应ON和OFF,也可以表示为“1”和“0”。布尔参数用在查询布尔设定时,返回值总是“1”或“0”。字符串参数可以包含任何的ASCII字符集。字符串的开头和结尾要有引号,引号可以是单引号或双引号。
SCPI定义数据交换格式是为了提高数据的可互换性。具体的数据交换格式是以TeK公司的模拟数据互换格式(ADIF)为基础产生的。它采用块(block)结构,具有灵活性和可扩展性。除了数据本身,数据交换格式还提供测量条件、结构特性和其他有关信息。SCPI数据交换格式不但适用于测量数据,而且对计算机通信和其他数据传输交换也有一定意义。8.2.4验证仪器驱动软件
下面以验证HP34401A万用表驱动软件为例,简单讲解一下验证仪器驱动软件的一般过程。如果有一只HP34401A万用表,就可以运行该程序。否则只能学习程序设计和驱动软件的验证方法。
在LabVIEW→EXAMPLES→INSTR→HP34401A.LLB中打开HP34401AGettingStartedVI程序。该程序是一个仪表驱动应用程序。其前面板模仿仪表的前面板,从Help菜单中的ShowHelp可以打开帮助窗口,然后把光标指向程序前面板的各个控制件或指示件,就会出现前面板上鼠标所指对象的描述信息。当编写或使用这些仪器驱动程序时,档案资料是非常重要的,它为我们了解程序的工作提供了很大的帮助作用。而这些仪器驱动程序则可以用来简洁地设置仪器参数和读取仪器数据。
本程序是采用低层的仪器驱动模块子程序编写的。这些低层子程序用到了前面我们所学习的VISA功能子模块。程序的前面板如图8-6所示。程序的软件框图如图8-7所示。图8-6虚拟万用表前面板图8-7虚拟万用表软件框图图8-7中的程序使用了如下的子程序:
HP34401AInitializeVI子程序(LabVIEW→EXAMPLES→INSTR→HP34401A.LLB)。这个子程序用于与仪器建立通信并产生一个VISAsession标识字串。
HP34401AApplicationExampleVI子程序(LabVIEW→EXAMPLES→INSTR→HP34401A.LLB)。这个子程序关闭VISAsession过程。
注意:上述程序中各个子程序之间的连线关系,以及
errorin和errorout群的连接。通过这些连线,定义了数据流动的方式。8.3通用的I/O控制方法
本节主要介绍使用LabVIEW通过I/O方式来进行仪器控制的各种方法。学习时应特别注意串行I/O、GPIBI/O和VISAI/O的使用方法,同时也要注意可以验证LabVIEW本身提供的仪器驱动程序。
本节的实验设备为一块已安装的GPIB卡、一台GPIB仪器以及LabVIEW开发系统。8.3.1串行通信
串行通信是一种常用的数据传输方法,它用于计算机与外设(例如一台可编程仪器)或者与另外一台计算机之间的通信。串行通信中发送方通过一条通信线,一次一个字节地把数据传送到接收方。
由于大多数电脑都有一至两个串行通信接口,因此,串行通信非常流行。许多GPIB仪器也都有串行接口。然而,串行通信的缺陷是一个串行接口只能与一个设备进行通信。在实际使用中,经常碰到一些外设需要用特定字符来结束传送给它们的数据串。常用的结束字符可以是回车符、换行符或者分号。具体使用时可以查阅设备使用手册以决定是否需要一个结束符。
在LabVIEW功能模板的InstrumentI/O→Serial程序库中包含以下进行串行通信操作的一些功能模块。
1.SerialPortInitVI模块
SerialPortInitVI模块用于初始化所选择的串行口。其中,Flowcontrol设置握手方式的参数;Buffersize设置程序分配的输入/输出缓冲区的大小;Portnumber决定通信接口地址;baudrate、databits、stopbits和oddparity等用于设置通信参数(如图8-8所示)。图8-8串口通信参数设置子VI模块
2.SerialPortWriteVI模块
SerialPortWriteVISerialPortIritVI模块用于把Stringtowrite中的数据写到Portnumber指定的串行接口中(如图8-9所示)。图8-9SerialPortWriteVI模块
3.SerialPortReadVI模块
SerialPortReadVI模块用于从Portnumber指定的串行接口中读取requestedbytecount指定的字符个数(如图8-10所示)。
4.BytesatSerialPortVI模块
BytesatSerialPortVI模块用于计算由Portnumber指定的串行接口的输入缓冲区中存放的字节个数,并将该数值存放于Bytecount中(如图8-10所示)。图8-10SerialPortReadVI模块和BytesatSerialPortVI模块8.3.2IEEE488(GPIB)通信
GPIB程序库中包括IEEE488.2应用程序和传统的GPIB应用程序。GPIB应用程序中增加了IEEE488.2兼容性,因此也具有IEEE488.2的功能。然而,在这里,我们只讨论传统的GPIB应用程序。
惠普公司在20世纪60年代末和70年代初开发了GPIB通用仪器控制接口总线标准。IEEE国际组织在1975年对GPIB进行了标准化,并由此变成了IEEE488标准(术语GPIB、HP-IB和IEEE488都是同义词)。GPIB的原始目的是对测试仪器进行计算机控制。然而随着技术的发展和使用的普及,GPIB的用途已十分广泛,现在除了对测试仪器进行计算机控制外,它已被广泛用于计算机与计算机之间的通信,以及对扫描仪、图像记录仪等不同仪器的控制中。
1.GPIB通信
GPIB是一个数字化的24线并行总线,包括8条数据线、5条控制线(ATN、EOI、IFC、REN和SRQ)、3条握手线和8条地线。GPIB使用8位并行、字节串行的异步通信方式。也就是说,所有字节都是通过总线顺序传送的,传送速度由最慢部分决定。由于GPIB的数据单位是字节(8位),数据一般以ASCII码字符串方式传送。数据传送过程中有三种方式来标明传送数据结束。通常,GPIB包括一根连接线(EOI),用来传送数据完毕信号。或者,也可以在数据串结束处放入一个特定结束符(EOS)。有些仪器用EOS方法来代替EOI信号线方法,或者两种方法一起使用。还有一种方法,听者(数据接收方)可以计数已接收的数据字节,当达到限定的字节数时停止读取数据。只要EOI、EOS和限定字节数的逻辑“或”值为真,数据传送就停止。一般字节计数法作为缺省的传送结束方法,典型的字节数限定值等于或大于需要读取的数据值。每个传送设备,包括计算机接口卡,都必须有一个0~30之间的GPIB地址。一般,GPIB接口板设置地址为0,仪器的GPIB地址为1~30。GPIB有一个控者(用户的电脑或者其他控制器)来控制总线。在总线上传送仪器命令和数据,控者寻址一个说者,一个或者多个听者。数据串在总线上从说者向听者传送。LabVIEW的GPIB软件包自动处理寻址和大多数其他的总线管理功能。
2.GPIB软件包
LabVIEW在InstrumentI/O功能模板的GPIB和GPIB488.2子模板下有许多GPIB通信功能子程序模块,这些模块在工作平台上可以调用低层的488.2驱动软件。大多数的GPIB应用程序只需要从仪器读/写数据串。下面讨论传统的GPIBWRITE/READ子程序模块。
GPIBWRITE模块(如图8-11所示)把datastring中的数据写入addressstring指定的设备中。mode指定如何结束GPIB写入过程,如果在timeoutms指定的时间内操作未能完成,则放弃此次操作。errorin和errorout字符串与出错处理程序配合使用,检测可能的出错情况。status是16位的布尔逻辑数组,每个元素代表GPIB控者的一种状态。图8-11GPIBWRITE模块在图8-11中,GPIBWRITE模块把“VDC;MEAS1?;”字符串写入地址=2的GPIB设备中,其中mode=0,timeoutms=25000ms。
GPIBREAD模块(如图8-12所示)从addressstring指定地址的GPIB设备中读取由bytecount指定的字节数,用户可以使用mode参数指定结束读取的条件,与bytecount一起使用。读取的数据由datastring返回。
用户必须把读取的字符串转换成数值数据,才能进行数据处理,例如进行曲线显示。errorin和errorout是出错指示数簇。
GPIBREAD模块遇到下列情况之一则中止读取数据:
(1)程序已经读取了所要求的字节数;
(2)程序检测到一个错误;
(3)程序操作超出时限;
(4)程序检测到结束信息(由EOI发出);
(5)程序检测到结束字符EOS。
如图8-12所示,GPIBREAD从地址=2的设备中读取20个字节的数据。该程序使用了缺省值mode = 0,timeoutms = 25000ms。在本例中,如果读够了20个字节,或者检测到EOI,或者超出25000ms的时间,读取过程将结束。图8-12GPIBREAD模块8.3.3VISA编程
VISA是VirtualInstrumentSoftwareArchitecture(虚拟仪器软件结构体系)的简称。VISA是在所有LabVIEW工作平台上控制VXI、GPIB、RS-232以及其他种类仪器的单接口程序库。
VISA是由组成VXIplug&play系统联盟的35家最大的仪器仪表公司所统一采用的标准。采用了VISA标准,就可以不考虑时间及仪器I/O选择项,驱动软件可以相互相容使用。VISA包含的功能模块在InstrumentI/O>VISA子模板中。大多数的VISA功能模块使用了VISAsession参数(如图8-13所示),该参数在Control模板的PathandRefnum子模板中。图8-13VISAsession参数
VISAsession是每次程序操作过程的唯一逻辑标识符。它标识了与之通信的设备名称以及进行I/O操作所必需的配置信息。它由VISAOpen功能模块产生,提供给VISA主功能模块使用。VISAOpen功能模块产生标识信息,然后把它传送给下一个VISA功能模块,这样简化了数据流编程。它类似于文件I/O模块的参考功能。
VISAsession的缺省值是Instr。如果需要,可以打开VISAsession选择如下值:Instr、GPIBInstr、SerialInstr和VISA/GPIB-VXIRBDInstr。下面介绍常用的VISA功能模块:VISAOpen、VISAWrite、VISARead和VISAClose。
VISAOpen根据ResourceName和VISAsession与指定的设备建立通信。模块返回VISAsession标识值,使用该标识值就可以调用此设备的任何其他的操作功能。Errorin和Errorout字符串包含出错信息。
ResourceName包含I/O接口类型以及设备地址等信息。其编程语法如表8-5所示。关键词GPIB用于同GPIB设备建立通信,关键词VXI通过嵌入式或MXI总线控制器同VXI仪器建立通信,关键词GPIB-VXI用于GPIB-VXI控制器,关键词SERIAL用于异步串行设备通信。
在图8-14中,VISAOpen模块通过仪器描述字符串“GPIB::2::0::INSTR”与主地址=2的GPIB设备建立通信。
VISAWrite模块把writebuffer中的字符串写入VISAsession指定的设备。dupVISAsession向下传送相同的session值。在UNIX工作平台上,数据同步写入;在其他工作平台上,数据异步写入。returncount返回实际传送的字节数。Errorin和Errorout字串包含出错状况。图8-14VISAOpen模块
VISARead读取由VISAsession指定设备中的数据。bytecount指明读入readbuffer中的字节数。VISAsession向下传送相同的session值。在UNIX工作平台上,数据同步读入;在其他工作平台上,数据异步读入。returncount返回实际传送的字节数。Errorin和Errorout字串包含出错状况。
VISAClose关闭由VISAsession指定设备的通信过程,释放系统资源,Errorin和Errorout字串包含出错状况。8.4仪器控制与应用实例
8.4.1采集电压并绘制波形图
在本节我们将创建一个NI-DAQmx任务,用于连续采集电压读数并将采集到的数据绘制到波形图中。具体实现时,需要使用DAQAssistantExpressVI在NI-DAQmx中创建一个任务,NI-DAQmx是用户与数据采集设备进行通信的编程接口。关于创建NI-DAQmx任务更多方法的详细信息可以参考LabVIEW帮助“目录”栏中“LabVIEW入门→DAQ入门指南→TakinganNI-DAQmxMeasurementinLabVIEW”的部分内容。在该任务的具体实现中还要用到NI-DAQmx和支持NI-DAQmx的设备(详细内容见NI-DAQReadme中的列表)。如所使用的设备仅支持TraditionalNI-DAQ,可以参考LabVIEW帮助“目录”栏中的“仪器测量”部分使用TraditionalNI-DAQ(Legacy)设备进行数据采集的相关信息进行设置。
注意:NI-DAQmx7.4或更高版本可在MAX中创建NI-DAQmx仿真设备。NI-DAQmx仿真设备是DAQ设备的软件模拟。下列操作中要用到NI-DAQmx仿真设备,关于创建NI-DAQmx仿真设备的详细步骤,见Measurement&AutomationExplorerHelpforTraditionalNI-DAQ。
1.创建NI-DAQmx任务
在NI-DAQmx中,任务是包括一条或多条通道以及定时、触发等属性的集合。从概念上来说,任务就是要进行的测量或生成。例如,测量DAQ设备一条或多条通道的温度就是一个任务。
按照下列步骤,创建并配置一个从DAQ设备读取电压的任务。
(1)新建一个空白VI。
(2)在程序框图中,打开“函数”选项板并选择“Express→输入”,显示“输入”选项板。
(3)选择“输入”选项板上的DAQAssistantExpressVI,如图8-15所示。将该ExpressVI放置到程序框图上。打开DAQAssistant,弹出CreateNewExpressTask对话框。
(4)单击AcquireSignals→AnalogInput,显示AnalogInput选项。
(5)选择Voltage项,创建一个新的电压模拟输入任务。对话框将列出各个已安装的DAQ设备的通道。列表中通道的数量取决于DAQ设备的实际通道数量。
(6)在SupportedPhysicalChannels列表中选择仪器与信号连接的物理通道(如ai0),并单击“Finish”按钮。DAQAssistant将打开一个新对话框,如图8-16所示。对话框显示选中完成任务的通道的配置选项。图8-15DAQAssistantExpressVI示意图图8-16使用DAQAssistant配置任务图
(7)在Settings选项卡的SignalInputRange部分,将Max和Min分别设为10和-10。
(8)在Configuration选项卡的TimingSettings部分,从AcquisitionMode下拉菜单中选择NSamples项。
(9)在SamplestoRead文本框中输入1000。
至此,就完成了NI-DAQmx任务的创建,下面要进行测试任务工作。
2.测试任务
首先应明白我们所进行的测试任务工作,其目的是检验通道配置是否正确。具体实现时可以按照下列步骤,确认数据采集的执行状态。
(1)单击“Run”按钮。执行该动作后,图8-16中
的ExpressTask选项卡会及时更新,由此可确认正在采集数据。
(2)单击“OK”按钮,保存当前配置并关闭DAQAssistant项。LabVIEW将生成该VI。
(3)将VI命名为ReadVoltage.vi,并保存至合适的位置。
完成测试任务后,就可以进行绘制DAQ设备采集数据的任务了。
3.绘制DAQ设备采集的数据
使用上面创建的任务,将DAQ设备采集到的数据绘制到图形中。按照下列步骤,把从通道中采集到的数据绘制到波形图并改变信号的名称。
(1)右键单击data接线端,并从快捷菜单中选择“创建→图形显示控件”。
(2)切换到前面板并运行VI三到四次。观察波形图,波形图顶部的图例中将出现Voltage项。
(3)在程序框图上,右键单击DAQAssistantExpressVI,并从快捷菜单中选择“属性”,打开DAQAssistant。
(4)右键单击通道列表中的Voltage项,从快捷菜单中选择Rename,打开Renameachannelorchannels对话框。
提示:选择通道名称并按F2键也可以显示Renameachannelorchannels对话框。
(5)在NewName文本框中,输入FirstVoltageReading并单击“OK”按钮。
(6)单击“OK”按钮,保存当前配置并关闭DAQAssistant项。
(7)打开前面板并运行VI,采集数据的波形图图例中将出现FirstVoltageReading项。
(8)保存VI。
4.编辑NI-DAQmx任务
将另一条通道添加到任务中,比较两个电压读数。也可自定义一个连续采集电压读数的任务。
按以下步骤在任务中添加一条新通道,连续采集数据。
(1)双击程序框图上的DAQAssistantExpressVI,打开DAQAssistant。
(2)单击“AddChannels”按钮。在AddChannel菜单中选择电压通道,打开AddChannelsToTask对话框。
(3)在SupportedPhysicalChannels列表中任选一个未使用的物理通道,单击“OK”按钮并返回至DAQAssistant。
(4)将该通道重命名为SecondVoltageReading。
(5)在TaskTiming选项卡中选择Continuous项。在DAQAssistant中设置定时和触发选项,这些选项将用于通道列表中的所有通道。
(6)单击 “OK”按钮,保存当前配置并关闭DAQAssistant,此时将出现ConfirmAutoLoopCreation对话框。
(7)单击“Yes”按钮。
LabVIEW在程序框图上放置一个While循环,将DAQAssistantExpressVI和图形显示控件包围在内。While循环的停止按钮与DAQAssistantExpressVI的“stop”输入端相连。ExpressVI的“stopped”输出端与While循环的条件接线端相连。程序框图如图8-17所示。图8-17ReadVoltageVI的程序框图8.4.2仪器通信
若使用仪器驱动,用户则无需学习各种仪器的编程协议,从而简化了仪器控制并减少测试程序的开发时间。仪器驱动是控制可编程仪器的一套程序集合。各个程序对应一个编程操作,如配置、读取、写入和触发仪器等。在仪器控制中应尽可能使用仪器驱动。NI为各种仪器提供了数千种仪器驱动程序。
以下示例将详细介绍如何与仪器进行通信。
1.查找和安装仪器驱动(Windows和Linux)
NI仪器驱动查找器用于在不离开LabVIEW编程环境的条件下查找和安装LabVIEW即插即用的仪器驱动。注意:仪器驱动查找器仅可在Windows和Linux平台上使用。使用仪器驱动查找器,必须保证能访问因特网。
实际使用中也可以通过/idnetNI仪器驱动网查找相应的仪器驱动。按照以下步骤,通过NI仪器驱动查找器查找和安装仪器驱动。
(1)选择“工具→仪器→查找仪器驱动或帮助→查找仪器驱动”,打开仪器驱动查找器。
(2)在“制造商”下拉菜单中选择NationalInstruments项。
(3)单击“搜索”按钮。“搜索结果”窗口中的文件夹表示仪器驱动,文件夹中的内容表示仪器驱动查找器可下载和安装的文件。仪器驱动查找器将打开列表中第一个驱动文件夹并选中一个驱动文件。可单击其它驱动,根据窗口右侧出现的详细信息选择合适的仪器驱动。
(4)从“驱动”列表中选择第一个仪器驱动,并单击“安装”按钮。
(5)如尚未拥有NI.com的用户帐号,选择“不,我需要创建个人帐号”并单击“创建个人帐号”按钮,此时将出现一个网页浏览器窗口,在此创建一个NI.com上的个人帐号。如已有在NI.com上的个人帐号,则跳至步骤(7)。
(6)创建个人帐号,返回仪器驱动查找器。
(7)选择“是”,填写个人电子邮件地址和密码,单击“登录”按钮。
(8)当仪器驱动查找器将仪器驱动下载并安装至labview\instr.lib目录后,将显示该新安装驱动所在文件路径,单击“关闭”按钮。
(9)单击“关闭”按钮,关闭仪器驱动查找器。
用户可创建自定义仪器驱动。关于上述功能的更多信息,见LabVIEW帮助的“目录”栏中的“仪器控制→使用仪器驱动”。
2.通过仪器I/O助手选择仪器
如果无法找到某个仪器驱动,通过“仪器I/O助手”ExpressVI可与该仪器进行通信。
注意:只有安装仪器I/O助手后才能使用“仪器I/O助手”ExpressVI。如果没有安装请使用NI仪器驱动程序CD(DeviceDriversCD)来安装仪器I/O助手。
按照下列步骤,通过“仪器I/O助手”ExpressVI选择仪器。
(1)打开仪器的电源开关。使用“仪器I/O助手”ExpressVI时必须将仪器电源接通。
(2)选择“输入”选板上的“仪器I/O助手”ExpressVI,放置在程序框图上。将出现“仪器I/O助手”对话框。
(3)如对话框右边没有出现帮助信息,单击“仪器I/O助手”对话框右上角的显示帮助按钮,帮助窗口将出现在对话框右侧。帮助窗口上半部分为仪器I/O助手的使用信息。帮助窗口下半部分为对话框中各个部分的即时帮助信息。
(4)单击帮助窗口上方的“选择仪器”链接,并根据帮助窗口提示选择需进行通信的仪器。
(5)按实际需要配置仪器属性。
(6)如需最小化帮助窗口,在“仪器I/O助手”对话框右上角,单击“隐藏帮助”按钮。
3.采集并解析仪器信息
选择好仪器后,可发送命令至仪器以获取数据。下面重点解释了如何使用“仪器I/O助手”ExpressVI采集和解析仪器识别信息。
按照以下步骤,与仪器建立通信。
(1)在“仪器I/O助手”对话框中单击“添加步骤”按钮并选择“查询并解析”。
(2)在“输入命令文本”框中输入*IDN?。“*IDN?”是一条仪器查询命令,它可被大多数仪器识别,识别后仪器将返回一个仪器识别号。如仪器不支持该命令,请参阅仪器的参考手册中的支持命令列表。
(3)单击“运行”按钮,仪器I/O助手将向仪器发送命令,而仪器将返回相应的识别信息。
(4)在响应窗口“字节索引”列的下拉菜单中选择“ASCII”,将仪器名称解析为ASCII码。也可通过仪器I/O助手解析ASCII码和二进制数据。
(5)单击“仪器I/O助手”对话框的“解析帮助”按钮,显示解析数据的相关信息。
(6)在响应窗口的“ASCII表示法”列中,单击要解析的值。
(7)在“解析段名称”文本框中输入解析段或所选择的解析数据的名称。在“解析段名称”文本框中输入的名称是“仪器I/O助手”ExpressVI的输出,如图8-18所示。图8-18仪器I/O助手ExpressVI图按照以下步骤,将参数添加到命令中。
(1)单击“添加步骤”按钮并单击“写入”项。
(2)在“输入命令”文本框中输入“*IDN?”。
(3)在“输入命令”文本框中选择一个命令,单击“添加参数”按钮,将参数添加到命令中。
(4)在“测试值”文本框中输入参数的默认值。
(5)在“参数名”文本框中输入参数名称。该名称用于指代应用程序中的参数。
(6)单击“确定”按钮保存当前配置,并关闭“仪器I/O助手”对话框。8.4.3实例主要概念总结
1. DAQAssistantExpressVI
DAQAssistantExpressVI用于以交互方式创建测量通道或任务。将DAQAssistantExpressVI放置在程序框图上,配置相应通道和任务,从而在NI-DAQmx中进行数据采集。NI-DAQmx是用户与数据采集设备进行通信的编程接口。使用DAQAssistantExpressVI,控制NI-DAQmx支持的各种设备。
关于DAQ助手的详细信息见LabVIEW帮助“目录”栏中的“LabVIEW入门→DAQ入门指南→TakinganNI-DAQmxMeasurementinLabVIEW”部分。
2.任务
在NI-DAQmx中,任务是一条或多条通道以及定时、触发等属性的集合。从概念上来说,任务可以简单的理解为是要进行的测量。例如,可以配置一组通道用于模拟输入操作。创建一个任务后,无需对每个通道进行配置,而是通过处理单个任务实现模拟输入操作。创建任务后,可向任务添加或删除通道。
关于通道和任务的更多信息,见LabVIEW帮助“目录”栏中的“仪器测量”部分。
3.仪器驱动程序
使用NI仪器驱动查找器,就可以在LabVIEW开发环境中查找并安装仪器驱动。仪器驱动是控制可编程仪器的一套程序集合,各个程序对应一个编程操作,如配置、读取、写入和触发仪器等。在仪器控制中应尽可能使用仪器驱动。
NI为各种仪器提供了数千种仪器驱动程序。关于上述功能的更多信息,见LabVIEW帮助的“目录”栏中的“仪器控制→使用仪器驱动”。
通过/idnet的NI仪器驱动网可查找相应的仪器驱动或创建自定义的仪器驱动。关于上述功能的更多信息,见LabVIEW帮助的“目录”栏中的“仪器控制→使用仪器驱动”。
4.“仪器I/O助手”ExpressVI
如果无法找到某个仪器驱动,通过“仪器I/O助手”ExpressVI可与该仪器进行通信。仪器I/O助手可与基于消息的仪器进行通信,并以图形化的方式解析响应信息。将仪器I/O助手ExpressVI置于程序框图上,或双击程序框图上的仪器I/O助手ExpressVI图标,均可启动仪器I/O助手。
关于与外部设备进行通信的更多信息见仪器I/O助手帮助。单击“仪器I/O助手”对话框的“显示帮助”按钮可显示仪器I/O助手帮助。
8.5课程练习
1.练习1
目的:使用GPIB子程序模块与GPIB设备通信。
可以建立一个与任何GPIB仪器通信的程序。本例采用传统的GPIB子程序与指定仪器进行GPIB读/写操作。
命令行参数“*idn?”适用于大多数IEEE488.2兼容仪器,它要求仪器返回其标识符。
前面板:
从File菜单中选择New打开一个新面板。建立如图8-19所示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《区域分析与区域规划》2023-2024学年第一学期期末试卷
- 淮阴师范学院《秘书理论与实务》2021-2022学年第一学期期末试卷
- 淮阴师范学院《中国民族民间音乐》2022-2023学年第一学期期末试卷
- 淮阴师范学院《移动开发技术》2023-2024学年期末试卷
- 淮阴师范学院《小型乐队编配》2021-2022学年第一学期期末试卷
- 淮阴师范学院《工程电磁场》2023-2024学年期末试卷
- 淮阴工学院《食品添加剂》2022-2023学年第一学期期末试卷
- 淮阴师范学院《地理信息系统概论》2022-2023学年第一学期期末试卷
- 淮阴师范学院《JAVA+Web项目综合实训》2021-2022学年期末试卷
- DB3711-T 155-2024生态茶园土壤培肥技术规程
- 全科医生临床常见病门急诊病历模板(范例)
- 商业综合体停车收费管理详细规定
- 工程流体力学名词解释和简答题-大全
- 变电站安装工程质量通病及处理措施
- 山东省招远市2023-2024学年六年级(五四制)上学期期中地理试题
- 安全生产企业负责人五带头的内容
- 第6课数据整理 课件(共14张PPT) 浙教版(2023)信息科技四年级上册
- 与城投公司的合作协议(成立公司合作协议)
- 新苏教版六上科学3.10《用化石作证据》优质课件
- ERAS理念下疼痛管理专家共识介绍课件模板
- 古风折扇的制作 (教学设计)-三年级上册劳动浙教版
评论
0/150
提交评论