您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页GPIB自动测试系统的同步方法

GPIB自动测试系统的同步方法

来源:纷纭教育


0、引言

GPIB(General Purpose Interface Bus)系统即通用接口总线系统,自70年代初创建以来,在自动测试系统(ATS-Automated Test System)领域得到广泛的应用,已经成为台式智能设备主流接口总线。目前国内外的ATS系统大多数都采用GPIB标准组建而成。

由于GPIB系统是在测试程序的统一指挥下,通过各智能设备的互相配合,从而完成自动测量、数据处理、结果输出等一系列工作,因此从系统角度考虑,要使系统工作可靠、测试迅速、结果准确,首先要解决的就是系统的同步问题。

GPIB系统的同步包括两个方面的内容:

(1)通讯同步

主要是要保证智能设备间能双向、异步、准确可靠地传递消息。这种同步层次较低,主要由计算机系统中扩展的GPIB接口卡和智能设备的通讯模块从硬件上加以解决。GPIB为此设置了三条“挂钩总线”分别传递“数据有效(DAC)”,“准备好接收数据(RFD)”和“数据已接收(DAV)”消息,用于在源方和受方之间进行联络。

(2)操作同步

操作同步是指各智能设备进行收发命令、读写数据、执行指令等各种操作的先后顺序和时间配合。这个问题直接关系到系统能否可靠运行,测试数据是否可信以及测试效率如何,操作同步主要依靠在测试软件编制中根据任务要求和仪器特性设计适当的流程来解决。

本文在分析GPIB系统同步机制的基础上,讨论在Windows下的测试软件设计中实

现操作同步的方法。

1、GPIB系统的同步机制

1.1状态和事件报告体系

状态和事件报告体系用来记录相关事件和反映设备内部状态,它是其它同步机制的基础。 GPIB设备的状态系统由多组8位或16位寄存器构成。典型的如标准事件寄存器(SESR)及其屏蔽字(ESER)、状态字寄存器(SBR)及服务请求屏蔽字(SRER)等。其中状态字寄存器各位是对其他寄存器中信息的总结(即某些状态位的“或”)。

状态字寄存器定义如下。

后面将会看到,我们正是利用这些状态信息来实现同步的。

1.2服务请求和串行查询

在向设备发出程控指令后,由于设备速度较慢,主控计算机可能转去处理其他事件,而当设备完成指定操作后,要求主控计算机即时回到原先的指令序列读取数据或进行其他处理。另外,设备在超量程或输出缓冲溢出时,也需要主控计算机中断当前的工作为其服务。服务请求(SR)接口功能就是适应这种需要而产生的。

要求服务的设备通过拉低总线的“服务请求”信号线逻辑电平发出“服务请求”(SRQ)消息,引发主控计算机的GPIB中断。为了弄清具体是哪台(些)设备请求服务,主控计算机一般要发起串行查询,按各设备请求服务的可能性大小逐台询问这些设备。被查询设备利用GPIB的数据总线传回状态字的各位,其中Bit6(RQS线)回答是否请求服务,其它位则说明了请求服务的大致原因。进一步查询其他寄存器可以得到更具体的信息。主控计算机然后根据查询结果进行相应处理。

1.3并行查询

除了串行查询,我们还可以使用并行查询对多台设备进行询问。并行查询分为组态和查询两个阶段进行:在组态阶段,控者分别对不大于8个器件分配回答查询时所用数据线及检测位的逻辑值(0或1);组态完成后,程序就可以进入实际查询阶段,在查询阶段每个设备将用分配的数据线来回答是否请求服务。

并行查询尽管有速度快的优点,但由于每个设备只能用一条数据线来回答查询,有时会嫌它给出的信息量不够,还需要辅以串行查询,这样会导致设备译码量和接口电路复杂程度增加,因此在一般系统中较少使用。

1.4顺序执行命令

一般情况下,设备可以同时进行多个操作,以提高工作效率。但GPIB系统也提供了*WAI等命令强迫设备顺序执行输入缓冲区中的指令。当某一指令的执行依赖于先前指令的执行结果时,就可以使用该功能实现同步。

GPIB系统同步机制的具体工作过程尽管较为复杂,但IEEE488及稍后发布的可程控

设备标准命令(SCPI)将这些工作封装成许多标准命令,屏蔽了底层的操作,使我们可以在不直接与底层打交道的情况下实现测试程序的同步。

2、GPB系统操作同步的实现

在GPIB测试程序中实现同步可以采取以下方法。

2.1延时的方法

在程序向设备发出指令后,如果估计到这些操作可能需要较长时间,我们可以在执行下一条指令之前加入一定的延时。延时时间可以根据设备的有关参数进行简单估算,如:数字万用表完成测量所需时间=功能设置时间+触发信号周期+触发延时+积分时间(A/D转换时间)+裕量。(注:在设备手册中,A/D时间常以电源周期(PLC)为单位给出(通常1个PLC=1/50Hz=20ms)。

延时的大致时间确定后,可以采用如下三种方法来实现。

(1)软件延时

软件延时利用执行空操作指令来延时,循环执行空操作指令加大延时长度是最常见的软件延时方法。以HP34401A测量方波电压为例。设HP34401A地址为5,编程工具使用Borland Delphi 3。根据实际测试的需要,我们使用GPIB接口函数编制了f1、f2、f3三个子程序,f1向程控设备发命令并回读结果,f2发命令,f3从设备读数,以下类同。程序如下:

由于低频交流电压的测量是一个较为耗时的操作,如果我们在命令万用表开始测量后立即读数,可能读数为假数据。为实现同步,我们可以在READ语句后加入一个嵌套for循环来延时一段时间,以等待测量完成。

另一种软件延时的方法是把一些像数学计算、屏幕刷新等非GPIB操作放在等待时间内完成,以提高程序效率。

软件延时的主要缺点是循环次数或用于延时的语句数量需要反复试验才能确定,并且随运行环境的变化,指令执行时间也会发生变化,必须针对具体的软、硬件条件加以调整。

(2)使用Windows的定时器

使用Windows的定时器TIMER,同样的功能可以如下实现:

由于Windows定时器建立在计算机硬件和ROM BIOS中定时器的简单扩充基础之

上,最小定时精度只能达到55ms;另外,由于Win32是抢占式多任务操作系统,而定时器消息WM-TIMER优先级很低,可能得不到及时处理,也会造成延时不准确。

为了提高定时精度,必要时可以使用Windows多媒体定时器,其精度可以达到1ms,但编程相对复杂。

延时方法编程简单,且不会造成GPIB总线拥挤,但由于延时长短受各种因素影响难以确定,使得延时带有一定盲目性。

2.2状态查询

利用串行查询接口功能和其他SCPI来查询设备状态,并根据查询结果来决定操作步骤,是使用最广泛的同步方法。例如,在ATS系统中用双踪数字存储式示波器TDS220来测量输入信号的峰一峰值,测量过程需要经历波形获取和波形数据计算两个阶段,才能得出参数值。由于波形获取要完成几千个点的取样和A/D转换,需要较长时间,因此必须采取同步措施保证在波形数据计算前波形获取已正确完成,否则会导致错误的结果。

下面讨论使用状态查询实现以上功能的方法。

(1)使用BUSY?命令BUSY?命令询问设备是否在进行某些复杂操作如波形获取,硬拷贝输出等。使用BUSY?命令,程序如下:

需要提醒的是尽管IEEE488命令*STB?提供了相似的读取状态字的功能,但由于它只在所有先前的指令执行完毕后才被执行,因此用它代替串行查询是不合适的。

(3)使用OPC?命令

OPC?命令不能简单理解为询问状态位OPC,因它只在所有操作完成后才将响应字符“1”放到输出队列中去,而在此之前是无法读取OPC状态的。如要使用*OPC?命令,程序应如下设计:

这样,我们就利用*OPC?命令的特性在总线读操作中完成了等待。使用*OPC?命令,我们无需判断查询结果,也不必在程序中建立自己的等待循环,但必须保证GPIB卡的超时设置大于操作完成所需时间。

2.3顺序执行

*WAI命令强迫设备顺序执行指令,即在处理新指令前必须完成当前操作。同步的任务其实由设备来负责。

使用*WAI命令实现同样的任务,程序如下:

使用*WAI命令时,程序每次只能处理一个指令,降低了效率。另外,由于在等待期间程序仍可以向设备写命令(但不会被执行),当输入缓冲满后,将引起指令丢失或超时错。这是使用*WAI命令的一大隐患,编程时应加以注意。

2.4利用多线程实现服务请求

随着计算机操作系统由DOS转向WINDOWS以及计算机和程控设备的速度和可靠性的大幅提高,很多情况下都可以用状态查询来代替复杂的服务请求编程,因此目前的GPIB

接口卡及驱动软件很多已经不再提供中断功能。然而服务请求毕竟是一种最有效的同步方法,它同时还可以及时反映设备方面的错误和其他附加信息(如指出某测量结果可疑等),这些都有助于进一步提高系统的可靠性。

为了使用“服务请求”,我们可以建立一状态监视线程,该线程负责查询(并行或串行)设备状态,一旦发现设备OPC被置位即向应用程序发出服务请求消息(由用户自己定义)。程序在其消息处理函数中响应服务请求进行处理。程序如下:

3、同步失败时的处理

在系统使用过程中,由于受各种干扰影响,可能出现同步失败的情况。这时设备会报警并拒绝工作,导致系统不能正常运行。测试系统应该能够进行故障自诊断,并能恢复到正常工作状态。例如,HP34401要在频率变化的条件下测量信号源有效值(1次/秒),而当频率很低时,A/D转换时间大幅增加,原先设计的延时往往不够,这时对它进行读操作

就会出错。这种情况下我们可以采取清除错误,重新设置仪表等措施使系统恢复正常,程序如下:

Tag:=0;

S:=f3(5);//读回电压值

End;

以上程序的实际效果是当信号源频率过低时,仪器出错报警,但程序随即清除并继续测量。一旦信号源频率恢复正常,系统也随即恢复正常。

4、结束语

我们将上述方法成功地应用于“超高速大功率通用固态继电器综合测试系统”软件中,系统运行可靠,测试数据准确,异常情况下具有自动恢复功能。本文例程使用IEEE488.2通用命令(带*号者)和SCPI,只需要做少量的改动即可适用于其他编程环境。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务