第9章仪器控制9.1串行通信9.2GPIB总线标准(IEEE488)9.3VISA编程9.4VXI和PXI总线系统简介9.5LabVIEW仪器驱动程序习题9在使用LabVIEW开发虚拟仪器时,仪器控制是非常重要的内容。仪器控制的功能是把实际仪器设备与计算机连接起来一起工作,同时还可以根据需要进行扩展。要顺利实现仪器控制,要求仪器与计算机实现正确的通信,存在正确的通路,并在计算机上安装仪器控制的程序。仪器与计算机之间的常见接口有串口和GPIB等。LabVIEW中仪器控制节点如图9-1所示。图9-1仪器I/O子模板9.1串行通信串行通信是一种常用的数据传输方法,它用于计算机与外设之间的数据传输,例如一台可编程仪器与另外一台计算机之间的通信。串行通信中发送方通过一条通信线,一次一个字节地把数据传送到接收方。串行通信系统的组成如图9-2所示。由于大多数电脑都有一至两个串行通信接口,因此串行通信非常流行。许多GPIB仪器也都有串行接口。然而,串行通信的缺陷是一个串行接口只能与一个设备进行通信。一些外设需要用特定字符来结束传送给它们的数据串。常用的结束字符是回车符、换行符或分号,具体可以查阅设备使用手册,以决定是否需要一个结束符。图9-2串行通信系统组成在LabVIEW功能模板的InstrumentI/OSerial程序库中包含进行串行通信操作的一些功能模块:(1) SerialportinitVI模块用于初始化所选择的串行口。其中,Flowcontrol设置握手方式的参数;Buffersize设置程序分配的输入/输出缓冲区的大小;Portnumber决定通信接口地址;Baudrate、databits、stopbits和parity等设置通信参数。(2) SerialportwriteVI模块用于把Stringtowrite中的数据写到portnumber指定的串行接口中。(3) SerialportreadVI模块用于从Portnumber指定的串行接口中读取requestedbytecount指定的字符个数。(4) BytesatserialportVI模块用于计算由Portnumber指定的串行接口的输入缓冲区中存放的字节个数,并将该数值存放于Bytecount中。9.2GPIB总线标准(IEEE488)9.2.1GPIB概念惠普公司在20世纪60年代末和70年代初开发了GPIB通用仪器控制接口总线标准。IEEE国际组织在1975年对GPIB进行了标准化,由此,GPIB变成了IEEE488标准。术语GPIB、HP-IB和IEEE488都是同义词。GPIB的原始目的是对测试仪器进行计算机控制。然而,GPIB的用途十分广泛,现在已广泛用于计算机与计算机之间的通信,以及对扫描仪和图像记录仪的控制。9.2.2GPIB总线的结构和工作方式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程序包自动处理寻址和大多数其他的总线管理功能。9.2.3GPIB子模板简介GPIB子模板位于InstrumentI/O子模板下,如图9-3所示。该子模板包含10个传统的GPIB子模块和488.2GPIB命令模块。这些模块在工作平台上可以调用低层的488.2驱动软件。大多数的GPIB应用程序只需要从仪器读写数据串。下面讨论常用的子模块、具体常用节点及其功能(如表9.1所示)。图9-3GPIB子模板表9.1GPIB子模块节点图标及端口连线说明对GPIB设备进行初始化。requirere-adddressing:若输入为“真”,则在GPIB仪器每次读写完毕后,都重新寻址;若输入为“假”,则每次保留地址号。assertRENwithIFC:若输入为真,控制器是系统控制者,则GPIB设备发送远程控制信号。systemcontronller:若输入为真,则计算机为系统控制者。addressstring:输入GPIB设备的地址号GPIB读该模块从addressstring指定地址的GPIB设备中读取bytecount端口指定的字节数。可以使用Mode参数来指定结束读取的条件,与bytecount一起使用GPIB写将data端口中的数据写入addressstring端口指定的设备中。Mode指定如何结束GPIB写入过程GPIB状态给出最近一次GPIB运行结束后指定地址的GPIB控制器的状态和传输的字节数。addressstring:地址字符串是指定GPIB控制器的地址。status:输出指定地址的GPIB控制器的状态9.2.4GPIB仪器应用举例【例9.1】使用GPIB子程序模块与GPIB设备通信。建立一个与任何GPIB仪器通信的程序。本例采用传统的GPIB子程序与指定仪器进行GPIB读/写操作。命令行参数“*idn?”适用于大多数IEEE488.2兼容仪器,它要求仪器返回其标识符。GPIB仪器通信VI前面板如图9-4所示。1.前面板的建立(1)从File菜单中选择NEW打开一个新面板。(2)建立上图所示的控制和显示(请记住,从程序框图(见图9-5)中选择相应的功能模块,再选择CreateControl或者CreateIndicator,可以产生所有的控制和显示)。(3)从“写入数据”控制栏中输入“*idn?”,在“字节计数”中输入数值100,如图9-4所示。图9-4GPIB仪器通信VI前面板图9-5GPIB仪器通信VI框图程序2.程序框图的建立(1)打开框图编程窗口。(2)创建图9-5所示的框图子程序模块。GPIBWrite功能模块(在InstrumentI/OGPIB子模板)用于将字符串写入GPIB仪器。GPIBRead功能模块(在InstrumentI/OGPIB子模板)用于从GPIB仪器中读取数据字符串。GeneralErrorHandler功能模块(在TIME&DIALOG子模板)用于检查出错报告字符串,如果发现错误,则显示一个对话框。(3)返回前面板,并运行该程序。在“读出数据”显示栏中将显示仪器的标识字符串,如果无数据返回,而接收到一个GPIB出错信息“EABO”(或者“error=6”),则表示仪器不能读命令参数“*idn?”,需查阅仪器的使用手册以找出合适的相应命令。(4)将上述程序以GPIB.vi的名字保存,然后关闭。9.3VISA编程9.3.1VISA的基本概念VISA是虚拟仪器软件结构体系(VirtualInstrumentSoftwareArchitecture)的简称,是美国国家仪器NI(NationalInstrument)公司开发的一种用来与各种仪器总线进行通信的高级应用编程接口。VISA总线I/O软件是一个综合软件包,不受平台、总线和环境的限制,可用来对USB、GPIB、串口、VXI、PXI和以太网系统进行配置、编程和调试。VISA是虚拟仪器系统I/O接口软件。基于自底向上结构模型的VISA创造了一个统一形式的I/O控制函数集。VISA是由组成VXIplug&play系统联盟的35家最大的仪器仪表公司所统一采用的标准。采用了VISA标准,就可以不考虑时间及仪器I/O选择项,驱动软件可以相互兼容。一方面,对初学者或是简单任务的设计者来说,VISA提供了简单易用的控制函数集;另一方面,对复杂系统的组建者来说,VISA提供了非常强大的仪器控制功能与资源管理。LabVIEW在I/O控制子模板中提供了VISAResourcename控件,如图9-6所示。9.3.2VISA子模块简介VISA的功能模块位于InstrumentI/O→VISA→VISAAdvanced子模板中,如图9-7所示。该模板中包括基本节点、指定接口、事件处理、高层寄存器读/写、低层寄存器读/写等几个部分,本节仅介绍常用的几个部分。图9-6VISAResourcename控件图9-7VISA子模块1.VISAWrite函数VISAWrite节点的图标及其端口连接定义如图9-8所示。该节点把writebuffer中的字符串(或其他数据)写入VISAResourcename端参数指定的设备。DupVISAResourcename传送相同的Resourcename值。2.VISARead函数VISARead节点的图标及其端口连接定义如图9-9所示。该节点读取VISAResourcename指定设备中的数据。DupVISAResourcename传送相同的session值。图9-8VISAWrite节点的图标及其端口图9-9VISARead节点的图标及其端口3.打开会话通道打开仪器前面板之前,先应该打开两种类型的会话通道,即资源管理器会话通道和器件会话通道,而且应先打开资源管理器会话通道。VISAOpen节点的图标及其端口如图9-10所示。4.关闭会话通道为了节省计算机的系统资源,当VISA程序结束时,必须关闭所有打开的会话通道。VISAOpen节点的图标及其端口如图9-11所示。该函数关闭由VISAResourcename端参数指定的设备通信过程,释放VISA连接占用的计算机资源。图9-10VISAOpen节点的图标及其端口图9-11VISAClose节点的图标及其端口9.3.3VISA应用举例【例9.2】用VISA模块与GPIB设备或者串行设备通信。使用VISA功能模块向指定设备(GPIB或者串行设备)读/写数据。命令参数“*idn?”适用于大多数仪器,无论是GPIB通信或是串行通信。它返回仪器的标识字串。“*idn?”查询可以得到代表被查询仪器的内部标识符,如厂家、型号等。1.前面板的建立(1)打开一个新的前面板,并且照图9-12建立控制和指示件。VISAsession控制件可以在CONTROLS模板中的Path&Refnum子模板中找到,也可以通过VISAOpen功能模块创建。图9-12VISA通信的前面板(2) ResourceName控制件应包含下列值:对于地址=2的GPIB仪器:“GPIB::2::0::INSTR”;对于COM1上的串行仪器:“ASRL1::INSTR”。(3)在WriteBuffer字串控制栏中输入“*idn?”,在ByteCount控制栏中输入100。2.程序框图的建立(1)打开框图窗口,如图9-13所示。(2)按照图9-13所示选择创建框图对象并连接线,图中调用了下面的模块:VISAOpen功能模块(在InstrumentI/O::VISA子模板中)用于打开通信过程,并产生VISAsession参数。VISAWrite功能模块(在InstrumentI/O::VISA子模板中)用于把数据串写入指定设备。VISARead功能模块(在InstrumentI/O::VISA子模板中)用于从指定设备中读入数据。VISAClose功能模块(在InstrumentI/O::VISA子模板中)用于关闭VISASession。(3)返回前面板并运行该程序。VISAsessi