关键词:GPIB接口;光时域反射仪;标准仪器控制库;程控仪器
1 引 言
计算机技术和现代微电子技术的发展与普及,促进了电子测量仪器的快速发展。而早期采用独立台式测量仪器来完成的测试工作已不能满足现代测量任务的要求,因此,自动测试系统在企业的生产、科研和工程中得到大规模的发展和应用。自动测试系统即是以计算机软硬件系统为核心,包括测量用仪器仪表、测试对象等组成计算机控制系统。专为仪器控制应用而设计的GPIB接口由此诞生,并广泛运用于仪器仪表的自动测试系统中,成为了智能仪器仪表的标准接口。虽然新兴的接口和总线技术不断地运用于自动测试系统中,但由于GPIB拥有强大的功能、成熟的技术支持与广大的使用者,使GPIB仍将是自动测试系统中的重要组成部分,在系统的组建中,实现对仪器仪表的GPIB控制是最基本和重要的环节。本文将分析和设计使用计算机通过GPIB接口控制TD3000 OTDR仪器,实现仪器的程控测量和测量数据读取方法。
TD3000 OTDR仪器,即光时域反射仪,广泛运用于光纤光缆生产、工程等行业,是对光纤的长度、衰减等重要指标进行测量以及断纤位置定位。常规的操作是在仪器的控制面板上通过各种开关和旋钮完成测量,人工操作较繁琐,数据显示也较单一并且测量结果不易保存和作后续进一步分析处理。此仪器有GPIB标准接口,可与计算机连接组成自动测试系统,完成人工难办或无法进行的测量任务。
2 应用系统组成及GPIB接口简介
2.1 应用系统组成设计
一个典型的GPIB自动测试系统如图1所示,由一台安装有GPIB接口卡的主控计算机与多台带有GPIB接口的测试仪器通过GPIB总线连接而成,其连接方式有总线形式或星形的连接,也可以是两种方式的组合。测试软件运行在主控计算机上,通过GPIB接口卡,对测试仪器进行自动操作和远程控制。
图1 基于GPIB总线的仪器控制系统框图
在本设计系统中GPIB仪器为一台TD3000 OTDR程控仪器,GPIB接口卡采用美国Agilent公司的PCI-GPIB 82350A 型接口卡,计算机平台采用台式微机,并安装接口卡驱动程序及HP SICL仪器控制I/O函数库[1]。
2.2 GPIB接口简介
GPIB接口,即通用仪器标准接口,也称为IEEE-488标准。其数据传输受三根信号线的制约,为“三线挂钩”应答方式的异步数据传输。该通信总线由8根双向数据线DIO1-DIO2,3根信号交换线DAV、NRFD、NDAC,5根通用控制线ATN、IFC、SRQ、REN、EOI以及8根地线,共24根线组成。总线上可连接15台仪器或设备,统称之为器件,向总线发送数据的设备称为“讲者”,从总线上接收数据的设备称为“听者”,控制总线的设备称为“控者”。在GPIB的数据传输过程中,三根信号交换线,DAV数据线上数据有效由讲者使用,NRFD(未准备好接收数据)和NDAC(未收到数据)由听者使用,可实现广播式传输,即一对多的传输方式。其数据的传输过程是:DAV=0,表示数据线上没有数据或数据尚未有效。讲者必须在所有听者均已准备好接收数据的情况下,即NRFD=0,才会令DAV=1。听者在得知数据有效,即DAV=1时,一方面将NRFD=1,以准备下一个数据的传送,另一方面在数据接收完毕以后,立即以NRFD=0来告知讲者。讲者撤消原数据,即令DAV=0,听者在讲者撤消数据以后,以NRFD=1来应答,结束一次数据传输。若还有数据要传输,重复上述过程。从GPIB这种三线挂钩方式的数据传送过程可以看出,它是一种双向全互锁的异步传输过程,其特点不但保证了自动适应不同传输速率的设备,更保证了数据传输的可靠性。在本系统中作为“控者”的设备是微机系统,而TD3000 OTDR程控仪器可工作在“听者”和“讲者”两种模式。
2.3 HP SICL简介
HP SICL是随GPIB接口卡连同驱动程序一起提供的HP标准仪器控制库,它是一个能安装于各种计算机体系、I/O接口和操作系统的标准模块化仪器通讯库。在C/C++或VB中运用此标准仪器通讯库所编写的应用程序可以不加修改或较小修改地从一个系统移植到另一个系统。SICL标准函数适用于多种接口的通讯应用,由于库函数命令与特定通信接口无关,所以在一个接口上对一台仪器所编写的通讯程序可应用在其它接口上的相同仪器。同时SICL也为程序员提供了基于不同I/O接口上的函数命令。
驱动程序和SICL的安装可采用系统默认方式完成。安装完成之后需运行RUN IO CONFIG程序,并设置或采用默认的接口名和总线地址,本设计中接口名为hpib7,总线地址为21[2]。
3 控制系统的软件设计
3.1 TD3000仪器命令
TD3000仪器共有25条程控命令,有启动、测量参数设置和读测量结果及测量原始数据等命令,计算机通过GPIB接口发送这些命令实现对仪器的远程控制,可以完成几乎所有常规操作仪器面板的功能,命令的具体格式在TD3000仪器操作手册上有详细说明。使用这些命令计算机除可以读出仪器的测量结果,如光纤的长度、衰减等外,还可以直接读取仪器测量的原始数据,再利用计算机强大的数据处理功能实现数据的多种算法、显示、保存或打印,有效的扩展了仪器的功能,大大简化了人工操作,提高了效率。本设计即采用此方式,其主要使用的程控命令是OT命令,即输出曲线轨迹数组命令,此命令是TD3000最重要命令之一。其返回信息与其它命令不同,OT命令返回两种信息,首先是ASCII字符串的头记录数据,数据格式为〈ndata〉,〈nscans〉,〈delta〉〈endm〉,分别表示整个曲线的数据点数、扫描时间、数据点之间的距离和终止符。其次是符合ANSI/IEEE Std 728-1982二进制数据块传输标准的曲线数据包,包中数据以“#”和“B”为前缀,后两字节为包中数据字节数,接下来为曲线数据点数据,每两个字节为一个数据点,最后以一个字节的效验和结束。数据包的最大字节数为1024字节,因此一条轨迹曲线的数据一般需要由多个数据包组成[3]。
3.2 软件设计
根据以上的设计分析,计算机控制仪器完成一次测量,并从仪器中读出原始测量数据是系统设计中最重要和最基本的任务。本设计采用C语言编程,调用SICL函数来实现对TD3000仪器的控制。如图2是完成一次测量控制并读取原始测量数据的程序流程[4],此流程中INST
图2测量控制程序流程图
是SICL头文件中所定义的设备标识符数据类型,通过iopen(“hpib7,21”)打开函数获得要通信仪器或设备的标识符,其中“hpib7,21”为运行安装SICL后的IO CONFIG程序所产生的接口名和总线地址。变量和参数是根据程序设计中使用变量定义,如定义存放一个数据包的数组char buf[1024]以及存放曲线数据点的数组int dPoint[ndata]等。接下来是接口的出错及超时处理,仪器参数的设置是根据测量过程的实际要求来确定的,这里需要发送多个TD3000仪器程控命令,使仪器完成所要求的测量任务,此处用库函数iprinf(id,format[,arg1][,arg2][,…] )来实现,如启动扫描命令“SS 12”,命令“SS”后的数值参数是扫描平均时间,根据测试光纤长度及TD3000测试手册确定,其应用函数格式为iprinf(id,“SS 12\n” ),此函数根据应用的需要可同时完成多个命令的发送。扫描完成与否,可读取仪器状态进行检查,判断扫描平均是否结束,发送iprinf(id,“OS\n” )后,返回信息格式为,,用库函数iscanf(id,format[,arg1][,arg2][,…] )读取状态,具体应用函数为iscanf(id,“%c,%c”,&err,&tstat ),判断tstat是否等于2且err=0,表示扫描平均完成曲线数据准备好。此时可直接读取仪器测量并按仪器固定方式计算出的结果,或者读出仪器测量的原始数据,由计算机完成对此数据的计算及处理。本设计采用后者方式,因此发送OT命令。
根据上文的分析可知,OT命令返回两种信息,即与其它命令相似的ASCII信息和符合ANSI/IEEE Std 728-1982标准的二进制数据信息,对于这两种信息采用不同的库函数来完成数据的读取,即用函数iscanf(id,“%d,%d,%f”,&ndata,&nscan,&delta )来读取曲线数据的头记录(Header Record),曲线数据点数ndata用来计算要读几个数据包,nscan实际扫描平均时间单位是毫秒,delta相邻数据点间长度,用于计算光纤长度。用函数iread(id,buf,bufsize,reason,actualcnt)来读曲线数据包,根据数据包数据格式分析,首先读四个字节,函数应用为iread(id,buf1,4,NULL,NULL),buf1[0]、buf1[1]应为ASCII数据“#”和“B”,buf1[2]和buf1[3]为数据包中数据字节数,因此需要再读字节为bytect= buf1[2]*256+buf1[3]+1,此处加上了一个字节的效验和,其函数应用为iread(id,buf2,bytect,NULL,NULL),由此完成了一个数据包的数据读出。按两个字节为一个曲线数据点计算所读数据包的数据点,与头记录中数据点比较,若相等则完成测量原始数据的读出程序,若不相等再读一次,直至读完所有数据点。整个曲线数据点存放于dPoint[ndata]数组中,其最大为16384个数据点,数据值为-2720~8160,计算机可应用此数组编程完成数据的各种计算及处理,以满足用户对仪器测量结果的多方面要求。
4 结束语
本文主要讨论了计算机控制TD3000仪器完成一次测量过程所采用的方式、方法及程序流程,本设计在实际应用系统中实现了计算机对TD3000 OTDR仪器的测量控制,并在实际的生产测试中,取得了良好的效果,不但提高了测试效率,更实现了手工操作难以完成的测试任务。其设计思路和方法也适用于其它类型的程控仪器的计算机控制系统,对用一些老式仪器来组建自动测试系统,提供了一种改造方法。
本文作者创新点:本文介绍的对仪器控制系统的设计不是直接读取仪器测量并计算出的结果,而是读取仪器测量的原始数据,由计算机来处理原始数据,因此可充分发挥计算机的数据运算和处理能力,极大的扩展了原有仪器的功能,满足用户对仪器测量结果新的需求。
参考文献
[1] 张焕林,穆建成.基于GPIB技术的自动测试系统设计[J].微计算机信息,2005,(5):165-166.
[2] HP Standard Instrument Control Library Guide[Z].USA:Hewlett-Packard Company.1998.
[3] TD-3000 OTDR Operating Instructions[Z].USA:Laser precision corp.1994.
[4] 谭浩强.C程序设计[M]. 北京:清华大学出版社,1991.