第4章 虚拟仪器驱动程序的设计方法_第1页
第4章 虚拟仪器驱动程序的设计方法_第2页
第4章 虚拟仪器驱动程序的设计方法_第3页
第4章 虚拟仪器驱动程序的设计方法_第4页
第4章 虚拟仪器驱动程序的设计方法_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章虚拟仪器驱动程序的设计方法4.1虚拟仪器驱动程序4.2SCPI程控标准命令4.3虚拟仪器软件体系VISA4.4可互换虚拟仪器IVI4.1虚拟仪器驱动程序仪器系统设计中,仪器驱动程序设计是最费时间与精力的工作,对于用户来说,仪器驱动程序如神秘的“黑匣子”,浑然不知其内部所含何物,一切靠开发商决定。VPP规范要求仪器模块生产厂家在提供硬件模块的同时,必须提供仪器驱动程序的各种文件形式,一方面给仪器驱动程序的编写提出了一个标准化的规范,另一方面又给仪器用户提供了更多的权限与参与性,进一步扩展了仪器的使用性。仪器驱动程序的概念仪器驱动程序是一套可被用户调用的子程序库,不必了解每个仪器的编程协议和具体编程步骤,只需调用相应的一些函数就可以完成对仪器各种功能的操作。仪器驱动程序一般是控制物理仪器的,但也有的是纯软件工具。4.1虚拟仪器驱动程序虚拟仪器系统中引入驱动程序的必要性系统集成的设计人员,需要学习所有集成到系统中的仪器用户手册,并根据需要,编程调试一个个命令。编程任务既需要完成低层的仪器I/O操作,又要完成高层的仪器交互能力,仪器的编程由于编程人员的风格与爱好不一样而可能各具特色。系统集成设计人员,是仪器专家和编程专家,增加了系统集成人员的负担,使效率和质量无法得到保证。将仪器编程结构化、模块化使控制特定仪器的程序能重复使用。因此,仪器编程语言需要标准化,也需要定义相对独立的具有模块化、独立性的仪器操作程序(驱动程序)。虚拟仪器需要提供模拟实际仪器操作面板的虚拟面板,因此虚拟仪器驱动程序不仅仅是实施仪器控制的程控代码,而是仪器程控代码、高级软件编程与先进人际交互技术三者相结合的产物,是一个包含实际仪器使用、操作信息的软件模块。虚拟仪器系统中引入驱动程序的必要性仪器驱动程序功能仪器驱动程序负责处理与某一专门仪器通信和控制的具体过程,通过封装复杂的仪器编程细节,为用户使用仪器提供了简单的函数接口。用户不必对各种诸如GPIB、VXI、PXI等仪器硬件有专门的了解,就可以通过驱动程序来使用这些仪器硬件。4.1虚拟仪器驱动程序仪器驱动程序的历史1975年在HP-IB基础上IEEE488.1GPIB;1987年IEEE488.2可程控仪器标准命令(SCPI,488.2),90年代初期模块化仪器驱动程序(Driver)VISA:VXI仪器驱动程序(VXIplug&play,VPP),1993年可互换虚拟仪器驱动程序(IVI)——1997年,还在不断完善1975年,在HP-IB仪器接口基础上,IEEE制定了程控仪器接口标准GPIB,即IEEE488.1,严格定义了GPIB的硬件接口,但未定义任何控制仪器的标准语法,只是说明可以使用ASCII和二进制数据格式。1982年,IEEE公布了使用IEEE488.1的推荐应用码和格式,IEEE728,并没有为访问仪器定义语法和协议。1987年,IEEE488.2标准定义了使用GPIB总线时编码、句法格式、信息交换控制协议和公用程控命令语义,但并未定义任何仪器相关命令,使器件数据和命令的标准化存在很大困难。1990年,仪器制造商国际协会,为解决程控仪器编程进一步标准化,在IEEE488.2基础上,提出可编程仪器标准命令SCPI,标准程控语言SCPI,是重要的程控仪器软件标准之一。4.2可编程仪器标准命令SCPI4.2可编程仪器标准命令SCPISCPI

(StandardCommandforProgrammableInstrument,简称SCPI)是为解决程控仪器编程进一步标准化而制订的标准程控语言,目前已经成为重要的程控仪器软件标准之一。与过去的仪器编程语言比较1)描述的是正在试图测量的信号,而不是正在测量信号的仪器;2)相同命令可用于不同类型的仪器(横向兼容性);3)SCPI命令可以扩展,功能可随仪器功能的增加而升级扩展,

(纵向兼容性)。SCPI仪器模型每个方框对应一个SCPI子系统,各个子系统又有更详细的模型描述。根据需要,找到仪器特定的功能块,沿着树状网络从顶向下寻找各分支,找到完成功能的命令。格式化:用来转换数据的表达式,当数据需要向外部接口传送时,必须格式化。SCPI仪器模型电压表可能只需要用到测量功能、触发功能和格式化功能单输出的源仪器可能只用到信号产生和格式化块格式化测量功能触发数据总线简化的检测仪器模型信号发生格式化数据总线简化的源仪器模型SCPI命令句法语法和式样:描述SCPI命令的产生规则以及基本的命令结构;命令标记:提供SCPI要求和可供选择的命令;数据交换格式:描述仪器与应用程序之间、应用程序与应用程序之间或者仪器与仪器之间可使用的数据集标准表示方法。1.语法和式样SCPI命令由程控题头、程控参数和注释组成。有两种形式:IEEE488.2命令和SCPI助记符命令。1.语法和式样IEEE488.2命令,或SCPI公用命令,可以是询问命令也可使是非询问命令,前一种情况命令结尾处有问号。举例:*IDN?以冒号分割的一个或者数个SCPI助记符构成。举例:OUTPut:FILTer:LPAss关键词组成短形助记符的规则不多于四个英语字母的关键词是短形助记符;多于四个英语字母的关键词,通常保留前四个字母,作为短形助记符。所有长形、短形助记符均允许有数字后缀,以区别类似结构的多种应用场合。长形助记符与关键词的字母完全相同,书写格式有一定要求,它被分成两部分,第一部分用大写字母表示短形助记符,第二部分用小写字母表示关键词的其余部分。关键词的书写形式要求不严格,可以与长形助记符完全相同,也可以只把第一个字母大写。助记符生成规则长型助记符由一个单词或短语构成。如果是单词,则整个单词构成助记符;如果是短语,则每个单词的第一个字符和整个最后一个单词构成助记符,小于12个字符。CONFIGURE--CONFigureremotemessage--RMESsage短型助记符由长型助记符的前4个字符构成,如果长型助记符的字符长度小于等于4时,长短型助记符相同CONFIGURE--CONFTIME--TIME如果长型助记符的长度大于4,而第四个字符是元音时,短型助记符将舍弃这个元音而变成3个字符TIMer--TIMSWEep--SWE冒号(:)用来分隔命令助记符。分号(;)用来分隔同一命令字串中的两个命令,分号不会改变目前指定的命令路径。逗号(,)用于分隔命令参数。如果命令中需要一个以上的参数时,相邻参数间必须用逗点分开。空格()用来分隔命令助记符和参数。在参数列表中,空格通常会被忽略不计。问号(?)指定仪器返回响应信息,得到的返回值为测量数据或仪器内部的设定值。SCPI命令的规则——命令格式2SCPI命令标记命令标记:仪器公用(IEEE488.2)命令和SCPI主干命令SCPI公用命令简表命令功能描述*CLS清除状态(ClearStatusCommand)*ESE标准事件状态使能(StandardEventStatusEnableCommand)*ESE?标准事件状态使能查询(StandardEventStatusEnableQuery)*ESR?标准事件状态寄存器查询(StandardEventStatusRegisterQuery)*IDN?仪器标识查询(IdentificationQuery)*OPC操作完成(OperationCompleteCommand)*OPC?操作完成查询(OperationCompleteQuery)*RST复位(ResetCommand)*SRE服务请求使能(ServiceRequestEnableCommand)*SRE?服务请求使能查询(ServiceRequestEnableQuery)*STB?读状态字节查询(ReadStatusByteQuery)*TST?自测试查询(Self-TestQuery)*WAI等待操作完成(Wait-to-ContinueCommand)2SCPI命令标记命令标记:仪器公用(IEEE488.2)命令和SCPI主干命令2SCPI命令标记SCPI命令子系统,对应仪器模型各方框功能。SCPI主干命令(1)关键字基本功能测量指令CONFigure组态。设置仪器,以执行相应测量FETCh?取数。重新获取仪器数据,并将数据置于输出缓冲区READ?读。实现对刷新数据的取数操作,数据采集和后期处理MEASure?测量。设置、触发数据采集并进行后期处理子系统命令CALCulate计算。完成采集后期数据处理,有16个分支CALibration校准。完成系统校准,有11个分支CONTrol控制。用于测试和过程控制环境下机电仪器的通断操作,有11个分支DIAGnostic诊断。为仪器维护提供诊断树节点DISPlay显示。控制图、文与迹信息的显示选择和表示方法,有7个分支FORMat格式。为传送数值和矩阵信息设置数据格式,有4个分支HCOPy硬拷贝。控制至外部仪器的绘图与打印操作的设置,有9个分支INPut输入。控制检测器件输入口特性,有14个分支INSTrument仪器。提供识别和选择逻辑仪器的方法,有7个分支SCPI主干命令(2)关键字基本功能子系统命令MEMory存储器。管理仪器存储器,有11个分支MMEMory海量存储器。为仪器提供海量存储能力,有14个分支OUTPut输出。控制源输出口特性,有13个分支PROGramm程序。仪器内部程序控制和管理,有3个分支ROUTe路由。仪器的信号路径选择,有7个分支SENSe检测。控制与信号特性无关的仪器检测功能的特定设置,有25个分支SOURce源。控制与信号特性无关的源功能的特定设置,有23个分支STATus状态。控制SCPI定义的状态报告结构,有3个分支SYSTem系统。实现仪器内务管理和设置全局组态,有14个分支TEST测试。提供标准仪器自检程序,是IEEE488.2*TST命令的扩展TRACe|DATA迹|数据。仪器存储器中命名实体,用于定义和管理记录的数据,有8个分支TRIGger触发。用于同步仪器的动作,涉及4个根级命令UNIT单位。定义缺省(默认)单位,有4个分支VXIVXI总线。控制与VXI总线操作相关的管理功能,有5个分支测量指令测量指令是一组高层次的获取数据的指令,它直接面向被测信号的特性,而与模型中的框图无关测量组指令除了CONFigure有明确的命令和询问形式外,其他指令都具有命令和询问的双重性测量指令集CONFigureFETCh?READ?MEASure?仪器类别SCPI通过仪器类别定义了通用仪器类所需要具备的功能集以及实现这些功能集所需的命令和行为仪器类别的定义有助于SCPI实现缩短自动测试设备的编程开发时间的总目标引导设计者从常见仪器类的角度来使用SCPI达成同类仪器实现的高度一致性仪器类别SCPI规范将常见仪器分为八类机架测力计(ChassisDynamometers)数字表(DigitalMeters)数字化仪(Digitiziers)发射装置(EmissionsBenches)发射测试单元(EmissionTestCell)电源(PowerSupplies)射频与微波源(RF&MicrowaveSources)信号转接开关(SignalSwitchers)仪器类别SCPI对每一类别的仪器从以下几个方面进行描述基本功能基本测量指令设备的基本功能基本状态报告附加功能特定的校准命令特定的诊断命令存储子系统的增加仪器类别数字表(DigitalMeters)DMM仪器模型DigitalMeters–命令树CONFigure [:SCALar]标量(可选节点)

:<meter_fn>[<expected_value>[,<resolution>]]CONFigure?FETCh [:SCALar] [:<meter_fn>]?[<expected_value>[,<resolution>]]READ [:SCALar] [:<meter_fn>]?[<expected_value>[,<resolution>]]MEASure [:SCALar] :<meter_fn>?[<expected_value>[,<resolution>]]DigitalMeters–命令树基本功能术语名称被测量<meter_fn>DCVOLTMETERDCVoltmeterDCVoltsVOLTage[:DC]ACVOLTMETERACRMSVoltmeterRMSVoltsVOLTage:ACDCAMMETERDCAmmeterDCAmperesCURRent[:DC]ACAMMETERACRMSAmmeterRMSAmperesCURRent:ACOHMMETEROhmmeterOhmsRESistanceDigitalMeters–编程示例简单测量SimpleMeasurement当用户只需进行一次简单的测量,而对信号调理和定时没有特殊要求时,使用MEASure询问是最佳选择。MEASure:VOLTage:DC?5,.05DMM自动调整测量范围,以便用合适的分辨率进行测量,并尽快返回测量值。此时,DMM不需要等待其它触发事件。DigitalMeters–编程示例触发测量TimeCriticalMeasurement当需要外部触发信号进行同步测量时,可使用以下命令序列:CONFigure:VOLTage:DC5V,.05VTRIGger:SOURceEXTernalREAD?命令序列使用CONFigure命令和READ?询问组合完成,其中间一行命令完成对触发的设置,作用在于READ?启动测量之后要等到外部触发到来之后才会将完成测量并返回数据。DigitalMeters–编程示例多次测量MultipleMeasurements当需要进行多次测量时,如果对每次测量使用单独的MEASure或READ命令,发送命令的开销将降低连续测量的及时性。此时,就需要仪器能够在本地缓存测量结果,在完成全部测量后,再返回测量结果。CONFigure:VOLTage:DC5V,.05VTRIGger:SOURceEXTernal;COUNt10READ?当外部触发发生10次后,返回10次单独的测量值。3数据交换格式SCPI的交换格式方法与IEEE488.2语法是兼容的,分为标准参数格式和数据交换格式两部分定义了仪器与应用程序之间、应用程序和应用程序之间以及仪器与仪器之间数据集的标准的表示形式数据交换格式除了数据本身外,还描述了数据获得的环境、数据的结构以及其他相关信息数据交换格式采用模块化层次结构,每一个模块代表了数据描述的不同方面数据交换格式的层次结构能适应多种传输媒介和协议,如:IEEE488.1/488.2,RS-232C,SCSI,IEEE802等3数据交换格式数据交换格式主要描述了一种仪器与应用之间、应用与应用之间、仪器与仪器之间可以使用的数据集的标准方法。SCPI的交换格式语法与IEEE-488.2语法是兼容的,分为标准参数格式和数据交换格式两部分。标准参数格式:数值参数、离散参数、布尔参数、字符串参数数据交换格式:SCPI的数据交换格式主要描述了一种数据结构,它用来作为仪器与仪器之间以及不同应用场合情况下交换特征数据。(1)标准参数格式数值参数:常用的包含正负号的数据或特殊数据;离散参数:设定有限数量(如BUS,IMMediate等);布尔参数:表示单一的二进位状态,ON/OFF或0/1;字符串参数:用引号开头结尾的任何ASCII字符集。(2)数据交换格式可以提高数据的可互换性,以Tek公司的模拟数据交换格式(ADIF)为基础修改而来。采用块结构,包括数据本身、测量条件、结构特性和其它有用的信息。数据交换格式示例常用SCPI命令简介1.常用仪器公用命令1)*IDN?功能:用于查询仪器种类的查询命令,仪器用一条带有四个字段的信息进行回答,这四个字段分别为:生产厂家、仪器型号、系列号和固件级别。使用方法:如连接了一个泰克公司的函数发生器VX5520,则执行该命令后,返回代码如下:Tektronix、VX5520、BO354、V1.12)*RST功能:复位仪器到初始上电状态。在仪器工作过程中,程序出错或者其他死机情况经常需要复位仪器。用法:一般情况下,要先用*CLS?清除仪器中的命令,在进行复位。3)*TST?功能:自检命令用法:该命令复位仪器,完成自检。返回“0”表示仪器正常;否则仪器存在故障需要维修。4)*CLS?功能:清除命令。中断正在执行的命令,消除在命令缓冲区等待的命令。5)*ERR?功能:错误信息查询命令。当仪器操作过程中发生错误时,错误代码和信息存储在仪器的错误队列中。用法:用该命令可读入错误队列

SYST:ERR?2.SCPI主干命令1)MEASure?功能:测量命令。该命令配置仪器用指定量程和仪器进行测试。当仪器触发后,该指令完成测试并返回读数到输出缓冲区。用法:MEASure:VOLTage:AC?[<range>[,<resolution>]][,<channel-list>]参数range指定待测信号最大可能电压值,然后仪器自动选择最接近的量程。MEASure?指令MEASure[:<function>]?<parameters>[,<sourcelist>]等价于ABORt;CONFigure:<function><parameters>;READ:<function>?<parameters>[,<sourcelist>];MEASure?指令提供仪器配置和数据读回的完整能力,适用于仪器接受通用测试功能而且无需对仪器配置进行细调的情况2)CONFigure:功能:配置命令。该命令用指定参数设置仪器。用法:可以使用初始化命令INITiate命令置仪器在等待触发状态;或者使用Read命令完成测量并将读数送入输出缓冲区。执行该命令后,测量不会立即开始,因此可以允许用户在实际测量前改变仪器的配置。MEASure:VOLTage:AC?[<range>[,<resolution>]][,<channel_list>]Range待测信号最大电压值;resolution有三种选择:DEF(AUTO)|MIN|MAXChannel_list采用(@ccnn)或(@ccnn:ccnn)形式MEASure:VOLTage:AC?0.54,MAX,(@103,108)CONFigure指令CONFigure<function><parameters>[,<sourcelist>]CONFigure指令有明确的命令和询问形式CONFigure指令将为执行由<function>指定的测量功能配置仪器CONFigure指令执行后并不启动测量功能,其后的READ?询问操作完成指定的测量功能CONFigure?将返回最近一次执行CONFigure或MEASure?所进行的设置CONFigure指令CONFigure指令使用示例如果执行如下CONFigure命令CONFigure:VOLTage:AC5,.001那么,使用CONFigure指令的询问CONFigure?将返回的是:“VOLT:AC5.0,0.001”3)Read?功能:该命令通常与CONFigure命令配合使用,它完成两个功能:置仪器在等待触发状态(执行INITiate命令);当触发后,直接将读数送入输出缓冲区。READ[:<function>]?<parameters>[,<sourcelist>]等价于ABORt;INITiate;FETCh[:<function>]?<parameters>[,<sourcelist>]READ?指令常与CONFigure指令配合使用,其功能与MEASure?指令兼容,但能够实现对仪器配置的细调。READ?指令READ?指令与CONFigure指令结合示例CONFigure:VOLTage:RISE:TIME10PCT,90PCT,0.001SSWEep:TIME.05SVOLTage:AC:RANGe5VREAD:VOLTage:RISE:TIME?CONFigure指令为测量上升时间进行仪器设置READ?指令将完成测量并返回上升时间中间两条指令是为了更准确的完成上升时间测量而进行了扫描时基(0.05s)和幅度灵敏度量程(5V)的设置PCT–Percent(百分数)4)Fetch?功能:取命令。该命令取出由最近的INITiate命令放在内存中的读数值,并将这些读数送到输出缓冲区。在送该命令前,必须先执行INITiate命令,否则将产生错误。FETCh[:<function>]?<parameters>[,<sourcelist>]获取由INITiate命令产生的测量结果,将数据放到输出缓冲区中对一次采集的数据,可以执行多个不同的FETCh?指令,以返回不同的结果示波器采集的数据中可能包含频率、交流电压、直流电压等多个信息,不同的FETCh?可以返回不同的结果。CONFigure,FETCh?,READ?,MEASure之间的关系MEASure?指令一次操作完成仪器组态、测量和结果返回的全部功能。提供仪器之间最好的兼容性。CONFigure/READ?指令组合兼容性稍差,但它们能对仪器进行更精确的控制。CONFigure指令执行仪器测量的组态,而READ?指令则执行测量的数据采集、后处理和数据输出。CONFigure指令完成仪器一般的组态。更精确的组态可能涉及一些仪器相关的功能。CONFigure,FETCh?,READ?,MEASure之间的关系READ?指令可被分解成两条指令:INITiate和FETCh?。INITiate执行数据采集,FETCh?完成数据后处理和数据返回。对一次采集的数据,可以执行多个不同的FETCh?指令,以返回不同的结果例如:在波形参数测量中,采集数据中可能包含脉宽、上升/下降时间、顶、底等多个信息,这时就可以使用FETCh?命令以返回不同的结果,而不需要重新进行新的采集。CONFigure,FETCh?,READ?,MEASure之间的关系FETCh?指令的兼容性也稍差,至少需要知道采集的数据中是否包含所需要的数据示波器能够在一次采集中采到上升时间和脉宽的信息,如果用MEASure?指令采集信号的脉宽,那么我们就可以用FETCh?指令获得信号的上升时间。计数器也可以采集到信号的上升时间或脉宽,但是如果同样用MEASure?指令采集信号的脉宽,却不能用FETCh?指令来获得信号的上升时间。SCPI命令示例

配置数字万用表(DMM)完成一次交流电压的测量,测量时设置量程为20V,测量分辨率为0.001V。:MEASure:VOLTage:AC?20,0.001冒号(:)

表示发送一个新的程控命令MEASure:VOLTage:AC

命令DMM执行一次交流电压测量问号(?)

指示DMM将测量结果返回给计算机/控制器20,0.001

设置测量方式:量程(20V)、测量分辨率(0.001V)5)CALIbration功能:校准命令。该命令选择仪器的参考工作频率,指定打开或者关闭自动调零方式。CALibration:SECure[:STATe]关闭/开启校准保护,当校准保护被禁止后才能进行校准。且在校准保护被禁止后命令表中除标准命令外其它的命令都不能用,且仅能校准当前通道。命令语法:CALibration:SECure[:STATe]<参数1>,<参数2>参数1:0(关闭)|1(开启);参数2:校验密码;单位:无。上电值:1|(开启);复位值:1|(开启)例:CAL:SEC0,"6322"CALibration:SECure[:STATe]?读取校准保护位的状态。查询语法:CALibration:SECure[:STATe]?

返回参数:0(关闭)|1(开启)例:CAL:SEC?CALibration:VOLTage:LEVel设置电压校准的校准点。命令语法:CALibration:VOLTage:LEVel<参数>;参数:P1<第1点>|P2<第2点>

例:CAL:VOLTP1CALibration:VOLT[:DATA]设置电压校准的校准点电压。命令语法:CALibration:VOLT[:DATA]<参数>;参数:当前的实际输出电压。单位:VmVuVkV

例:CAL:VOLT1VCALibration:CURRent:LEVel设置电流校准的校准点。命令语法:CALibration:CURRent:LEVel<参数>;参数:P1<第1点>|P2<第2点>例:CAL:CURR:LEVP1CALibration:CURRent[:DATA]设置电流校准的校准点电流。命令语法:CALibration:CURRent[:DATA]<参数>参数:P1<第1点>|P2<第2点>例:CAL:CURR0.3ACALibration:SECure:CODE设置新的校准密码,命令语法:CALibration:SECure:CODE<参数>参数:长度为4的校准密码字符串。例:CAL:SEC:CODE"1234"CALibration:STRing设置校准时的校准信息。命令语法:CALibration:STRing<参数>参数:最大长度为24个字母的字符串,也就是用户校准时记录的相关信息。如校准时的时间、次数等。例:CAL:STR"2005-1-920:12"CALibration:STRing?查看当时的校准信息。查询语法:CALibration:STRing?返回参数:保存在电源中的校准信息例:CAL:STR?CALibration:SAVe保存校准系数到EEPROM。命令语法:CALibration:SAVe例:CAL:SAV说明:校准后的校准数据只有保存后才会在下次生效。CALibration:INITital初始化校准系数,恢复到出厂值。命令语法:CALibration:INITital例:CAL:INIT说明:当校准失败后可用此命令恢复。6)FORMat:功能:格式化命令。该命令确定通过MEASure?、READ和FETch?命令得到的测量数据格式。FORMat[:DATA]<type>[,<length>]Type:ASCII/REALLength:32/64例如:FORMatREAL,647)SAMPle:功能:采样命令。该命令控制触发信号类型与参数。8)TRIGger:功能:触发命令。该命令控制触发命令与格式。SCPI编程方法SCPI的编程步骤

4.3虚拟仪器驱动程序设计标准(VISA)VISA:VirtualInstrumentationSoftwareArchitecture,即虚拟仪器软件结构,是VPP系统联盟制定的I/O接口软件标准及其相关规范的总称。VISA为虚拟仪器提供了标准化的I/O接口软件规范。VISA是整个工业界的统一的软件基础。虚拟仪器软件结构中的标准I/O接口软件称为VISA库。虚拟仪器的软件体系结构

1.VISA的作用为整个工业界提供统一的软件基础对驱动程序、应用程序不必考虑接口类型仅规定为用户提供的标准函数,不对具体实现作任何说明用于编写符合VPP规范的仪器驱动程序,完成计算机与仪器之间的命令和数据传输,实现对仪器的控制。VISA库作为低层I/O接口软件,运行于计算机系统中。2.VISA的特点适用于各类仪器:VXI,PXI,GPIB,RS-232,TCP,USB……与硬件接口无关既适用于单处理器结构又适用于多处理器或分布式结构适用于多种网络机制3.VISA的组成原理VISA资源管理层:管理所有VISA资源,以实现各种VISA资源的管理、控制和分配。内容:资源寻址;资源创建与删除;资源属性的读取与修改;操作激活;存取控制和默认值设置I/O资源层:提供对于GPIB、VXI、串行口等硬件设备的低级控制功能,并可以很容易的扩充。仪器资源层:提供了采用传统编程方法控制仪器的功能,应用程序可以通过打开与特定仪器资源的通话链路,完成与仪器的通信。用户自定义资源层:也称为虚拟仪器资源层,用户可以在前两层资源的基础上通过增加数据分析、处理等功能来实现物理上并不存在的仪器,体现了VISA的可扩展性和灵活性。用户应用程序接口:位于最顶层,是用户利用各种VISA资源自行创建的,其本身不属于VISA资源。VISA为各种虚拟仪器系统软件提供了一个形式统一的I/O函数库,将不同厂商的仪器软件统一于同一平台。既提供了简单易学的控制函数集,又有非常强大的仪器控制功能。几个重要概念资源管理器(层)。用于管理所有资源的一种系统资源(控制设备资源),执行管理、控制和分配VISA资源的存在。资源。类似于面向对象中的类。VISA中的资源是一个计算机可以访问或可与之通信的实体。会话。指与任何已经存在资源的连接,包括默认资源管理器的连接。VISA现状1995年12月颁布的VISA库规范中规定了VISA资源模板、VISA资源管理器、VISA仪器管理器、VISA仪器控制资源四类函数,共54个。VPP规范在1997年1月、1997年12月、1998年12月的VISA规定修订版中,陆续作了新的补充与更新,如增加了一些新的VISA类型、错误代码、事件、格式化I/O修饰符等。要全部实现VISA标准,对仪器厂商是一项非常复杂的工作,如HP公司1996年5月为用户提供的HPVISA库基本实现了VISA库函数,但也没有考虑到标准中的全部参数和功能。HP、NI等各大公司都正在逐步完善各自的VISA库。VISA的资源结构VISA中的3种机制的作用VISA的编程打开仪器资源写命令从仪器缓存中读取数据关闭仪器资源VISA术语资源(Resource):VISA的资源是对具有某种功能的设备的统称。属性集:字符串、超时值及协议等,事件集:用户要求服务事件等,操作集:各种端口读写操作。资源的属性(Attributes)描述了一个资源或者一个会话所具有的某种状态。资源的属性可以通过viGetAttribute()函数或者viSetAttribute()函数进行读取或设置。资源的事件(Events)是独立于系统正常运行状态的由资源发出的异步请求。可以通过viEnableEvent()、viDisableEvent()或者viInstallHandler()、viUninstallHandler()、viWaitOnEvent()、viDiscardEvents()等函数进行事件相关的操作。资源的操作(Operations)是指由资源定义的可对资源起到控制作用的行为。每种资源都可以定义一系列的操作。上述提到的VISA函数均是对资源的操作。此外常用的对资源的操作函数还有viClose()、viLock()、viUnlock()等等。如同USB设备存在音频类、人体工学输入设备类、大容量存储设备类、打印机类、扫描仪类等诸多类一样,VISA中的资源也存在INSTR(仪器控制)、MEMACC(内存访问)、INTFC(GPIB总线接口)、BACKPLANE(背板)、SERVANT(伺服)、SOCKET(以太网套接字)、RAW(原始设备)等类。其中最重要的类是INSTR类。INSTR类封装了所有的通过资源接口进行通信的函数并且满足大部分情况下的要求。VISA术语会话(Session):从资源被打开到被关闭的过程中进行的操作的集合。在VISA中,会话可以唯一的描述一条通讯通道,除串口之外的很多接口都可以同一个或多个应用程序建立一个或多个会话。正是因为如此,VISA将资源的属性具有全局属性与本地属性之分。会话可以通过viOpen()函数建立。

资源模板(ResourceTemplate):所有的VISA具有的公共属性、公共事件与公共操作的集合。在VISA中,所有的资源具有的属性、事件与操作都从资源模板继承,并根据资源本身特点增加特有的属性、事件与操作。如VI_ATTR_RSRC_NAME(资源名)属性为每个资源都会具有的属性,即被定义在资源模板中,某个特点的资源无需额外定义即拥有该属性。资源管理器(ResourceManager):帮助扫描计算机上连接的所有VISA设备并且帮助我们建立同某个资源的会话。需要注意的是,资源管理器一般只起到跟踪连接到计算机上的资源并且帮助创建会话的作用,并不是任何会话的任何操作都需要资源管理器的协助。资源管理器由VISA的软件包内置的驱动提供。我们可以通过viOpenDefaultRM()函数获取资源管理器的操作句柄。在VISA中,一般情况下建立一个会话均需要使用资源管理器的功能。VISA术语基于消息的会话/基于寄存器的会话(Message-BasedCommunication/Register-BasedCommunication):计算机跟资源之间的通信基于“指令-相应”的工作模式时,计算机跟资源之间的会话被称为“基于消息的会话”。计算机跟资源之间的通信基于“写寄存器-读寄存器”的工作模式时,计算机跟资源之间的会话被称为“基于寄存器的会话”。基于消息的会话跟基于寄存器的会话是计算机跟其他设备进行通信的两种基本模式。基于消息的会话常见于串口、GPIB接口、以太网、VXI接口设备中。如用户想通过计算机访问某个网页,则是通过多次的“请求命令-接收数据”的过程完成。基于寄存器的会话常见于VXI与PXI接口设备中。计算机与VXI或者PXI设备之间的通信通过往设备指定地址的寄存器中写入指定的数据来完成。VISA术语事件(Event):计算机跟设备进行通信时,设备经常需要向计算机主动发出一些请求,以通知应用程序一个行为的发生。一般情况下,请求可能因为服务请求信号有效、资源行为的起始与结束、资源进行了不正常的操作等情况导致。这些主动发出的请求通常被称为异步请求,或者简称为“事件”。事件类型包括服务请求(SRQ)、中断和硬件触发。处理时间常用的方法有回调函数法以及排队法。锁定(Locking):通过某会话访问一个设备的时候,不希望其他会话再来访问这个设备。VISA的“锁定”(Locking)机制,防止其他会话获取该设备的访问权限。在VISA中锁定或解锁常常使用viLock()或viUnlock()函数。VISA术语4.VISA库函数资源管理类函数viOpenDefaultRM(ViPSessionRsrc_Manager_Handle);viOpenDefaultRM(&defaultRMHandle);ViStatusviOpen(ViSessionRsrc_Manager_Handle,ViRsrcInstrument_Descriptor,ViAccessModeAccess_Mode,ViUInt32Open_Timeout,ViPSessionInstrument_Handle);viOpen(defaultRMHandle,"VXI0::24::INSTR",VI_NULL,VI_NULL,&dmmHandle);ViStatusviClose(ViSessionSession_Handle);viClose(dmmHandle);资源操作类函数寄存器基仪器通讯viIn8,viIn14,viIn32viIn14(dmmHandle,VI_A14_SPACE,0,&manufactureID);viOut8,viOut14,viOut32viOut14(dmmHandle,VI_A14_SPACE,4,0);消息基仪器通讯viRead,viWriteviRead(dmmHandle,readbuf,100,&count);viWrite(dmmHandle,writebuf,100,&count);格式化I/OviPrintf,viScanfviPrintf(dmmHandle,"*IDN?\n");viScanf(dmmHandle,"%t",result);资源模板事件处理viEnableEvent,viDisableEventviInstallHandler,viUninstallHandlerviWaitOnEvent资源属性viGetAttribute,viSetAttribute4.3虚拟仪器驱动程序设计标准(VISA)

用VISA函数操作仪器的步骤打开VISA资源管理器句柄,用到的函数:viOpenDefaultRM;打开仪器句柄,用到的函数:viFindRsrc、viFindNext、viOpen等;设置仪器状态、控制仪器操作、读取测量数据、处理仪器事件,用到的函数:viGetAttribute、viSetAttribute、viIn14、viOut14、viPrintf、viScanf、viInstallHandler、viUninstallHandler、viEnableEvent、viDisableEvent、viWaitOnEvent等;释放仪器句柄,用到的函数:viClose;释放VISA资源管理器句柄,用到的函数:viClose。VISA函数应用举例voidmain(void){error=viOpenDefaultRM(&rsrcManager); /*打开VISA资源管理器*/ //rsrcManager为得到的VISA资源管理器句柄

if(error!=VI_SUCCESS)/*如果出错,弹出错误信息对话框,返回*/ { MessagePopup("Error","OpenVISAResourceManagerError!"); return; } error=viOpen(rsrcManager,"VXI0::14::INSTR",VI_NULL,VI_NULL, &instHandle);//instHandle为得到的仪器句柄

if(error!=VI_SUCCESS){ MessagePopup("Error","OpenInstrumentError!"); return; } else{ /*获取仪器模块代码,设置仪器操作超时时间为2000毫秒*/

viGetAttribute(instHandle,VI_ATTR_MODEL_CODE,&moduleID); viSetAttribute(instHandle,VI_ATTR_TMO_VALUE,2000); } viClose(instHandle);/*关闭仪器句柄和VISA资源管理器*/ viClose(rsrcManager);}/*以下是声明区*/Intmain(void){CharrdResponse[RESPONSE_LENGTH]:/*响应返回值*/Intstatus;/*返回状态值*/Shortid;/*器件软件句柄*//*以下是开启区*/Id=ibfind(”devl”);/*开启GPIB器件*/Status=ibPad(5):/*器件主地址为5*//*以下是器件I/O区*/status=ibwrt(id,”*IDN?”,5):/*/*以下是关闭区*//*以下是关闭语句空*/Return;}例1.用非VISA的I/0接口软件库实现对GPIB仪器的读/写操作例2.用非VISA的I/O接口软件库实现对VXI消息基仪器的读/写操作.Intmain(void)CharrdResponse[PESPONSE_LENGTH];/*响应返回值*/Int14status;/*返回状态值*/Unit32retCount;/*传送字节数*/Int14logicalAddr,mode;/*器件逻辑地址和传送模式*/Status==initVXILibrary():logicalAddr=5:/*以下是器件I/O区*/Status=WSwri(logiealAddr,”*IDN”?,5,mode,&retCount);/*发送查询标识符命令*/Status=WSrd(logiealAddr,rdResPonse,RESPONSE_LENGTH,mode,&retCount):/读回响应值*/……以下是关闭区CloseVXIUbrary();Returno;}例3.用VISA的I/O接口软件库实现对GPIB仪器与VXI消息基仪器的读/写操作Intmain(void){VicharrdResponse[PESPONSE_LENGTH];/*响应返回值*/Viintl4status;l*返回状态值*lViuint32retCount;/*传送字节数*/VISessionvi;/*仪器软件句柄*//*以下是开启区*lStatus=viOPen(viDefaultRM,”GPIBO::5”,0,0,&vi);/*若对VXI消息基仪器进行操作.将GPIB换成即可*//*以下是器件I/O区*/Status=viwrite(vi,”*IDN?”,5,&retCount);/*发送查询标识符命令*/Status=viRead(vi,rdResponse,RESPONSE_LENGTH,&retCount):/*读回响应值*/Status=viClose(vi):Returno;}在声明区。声明所用的函数类型均为VISA数据类型,它是与编程语言无关的。VISA数据类型与编程语言数据类型的对应什么包含在特定的头文件中。在开启区。调用的是ViOpenDefaultRM(ViSessionsesn),打开与默认资源管理器的通话,与之建立联系。然后调用vIOpen(Visessionsesn,ViRsrcrsrcName,ViAccessMode,ViUInt32timeout,ViPSessionvi),建立与特定器件的联系。4.3虚拟仪器驱动程序设计标准器件I/O区。主要完成向GPIB器件发送IEEE-488.2公用命令,并从该器件回读相应字符串。关闭区。操作结束时,必须调用viClose(),分别关闭与特定器件的通话和与默认资源管理器的通话。4.3虚拟仪器驱动程序设计标准(VISA)打开VISA资源管理器句柄,用到的函数:viOpenDefaultRM;打开仪器句柄,用到的函数:viFindRsrc、viFindNext、viOpen等;设置仪器状态、控制仪器操作、读取测量数据、处理仪器事件,用到的函数:viGetAttribute、viSetAttribute、viIn16、viOut16、viPrintf、viScanf、viInstallHandler、viUninstallHandler、viEnableEvent、viDisableEvent、viWaitOnEvent等;释放仪器句柄,用到的函数:viClose;释放VISA资源管理器句柄,用到的函数:viClose。874.3虚拟仪器驱动程序设计标准4.4可互换虚拟仪器IVI提出的必要性因为利用VISA编写的驱动程序与特定仪器密切相关,更换不同厂家或同一厂家不同型号的仪器时,不仅要更换仪器驱动程序而且要修改测试程序。针对这一问题,为了提高仪器的互换性和互操作性,制订了IVI规范。VPP仪器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论