武汉理工大学信息工程学院,吕锋,陈园
通用计算机系统具有强大的处理能力以及丰富的软件资源,正在被越来越多的现代仪器所采用。在仪器的设计过程中,往往需要提供GPIB接口以及相应的指令集以方便用户组成自动测试系统。针对这一需求,本文提出了一个通用计算机平台上IEEE-488兼容仪器的设计方案:通过使用GPIB接口卡和编写相应的仪器端程序,使得基于计算机的仪器能够模拟一个或者多个GPIB仪器。
1 IEEE-488仪器简介
IEEE-488仪器模型如图1所示。仪器提供GPIB接口以及相应的指令集,指令集由以下几部分组成[1-2]:
(1)IEEE-488.2公用命令集,如:*IDN?,*STB?,*CLS等。
(2)SCPI标准规定的STATus和SYSTem子系统,主要用来报告仪器状态和进行系统设置。
(3)仪器特定测量功能指令。
其中,(1)和(2)是仪器必备指令,(3)的选取与仪器的实际功能有关。用户只需要将PC机与带有GPIB接口的仪器连接,通过调用仪器控制软件如NI-488.2和VISA等提供的I/O库向仪器写入指令,就能实现对仪器的控制。
2 系统设计
2.1 系统组成
根据图1所示的模型,在通用计算机平台上设计的IEEE-488兼容仪器软硬件组成如图2所示。
仪器运行在Windows操作系统下,其各部分的功能如下:
(1)PCI-GPIB是NI公司提供的GPIB接口卡。通过安装设备端软件NI-Device,使GPIB接口卡完成Talker/Listener功能。
(2)模块函数和必备函数与IEEE-488仪器模型中的仪器函数相对应:模块函数是模块制造商提供的API,大部分用来处理仪器特定测量功能指令;必备函数通过访问状态报告模型和调用某些模块函数处理IEEE-488.2与SCPI标准规定的必备指令。
(3)状态报告模型由若干状态寄存器组构成,用来描述仪器的状态。大部分仪器函数都会访问此模型。
(4)仪器端程序采用C++编写,主要负责接收主控计算机发送的指令,然后找到对应的仪器函数进行处理。如果接收的是查询指令,还负责将仪器函数的响应结果返回给主控计算机。
系统的核心是仪器端程序和状态报告模型的设计,以下将对这两部分进行详细说明。
2.2 仪器端程序设计
仪器端的程序完成图1中除仪器函数以外的所有功能。其中,总线的消息处理即图1中GPIB总线、I/O组件、输出队列、消息交换组件、输入队列部分的功能通过调用NI-Device提供的API完成,其余部分由设计者自行完成。
2.2.1 总线消息处理
总线上的消息处理主要通过调用NI-Device提供的API完成。NI-Device是NI公司推出的一款面向仪器制造商的设备端软件,可以为仪器开发人员处理绝大部分的IEEE-488协议要求,并且支持面向对象的C++语言接口[3]。IEEE-488兼容仪器主要使用以下几个类:
(1)C4882Device:是一个抽象类,是所有设备类的基类,它定义了设备类与总线接口方式。当总线上发生某个事件时,就调用相应的事件处理函数。此外,C4882Device类还负责输入输出队列管理和状态字节报告等。
(2)CGpibDevice:使用GPIB总线的设备类都必须是CGpibDevice类的派生类,它负责处理GPIB总线协议。