GPIB:太酷了,它可以在 Linux 上运行!
对于计算机来说,赌博是一种生活方式。技术日新月异,任何从事系统管理的人都应该不惜一切代价跟上它的步伐。有时,这太过分了。有人问你是否可以在网络中引入一项新功能。如果你说不,你可能会落后于竞争对手;如果你说是,你就是在虚张声势,可能会搬起石头砸自己的脚。当我意识到说是通常比空手虚张声势更有可能成功时,Linux 成为我最喜爱的操作系统。我参与 Linux 的 GPIB 就是这样一个例子。
GPIB 是数据采集和工业过程控制中的标准总线。它由惠普公司于 1965 年开发,最初称为 HPIB。后来更名为 GPIB(通用接口总线)或 IEEE488 接口。GPIB 硬件随处可见。各种 AD 转换器、数字仪表,甚至打印机和绘图仪都使用它作为首选总线。清理实验室中那些布满灰尘的角落,你可能会在背面找到带有 GPIB 接口的古老硬件。随着 PC 进入研究人员的办公桌,开发了 GPIB 接口板,从而可以通过计算机控制 GPIB 硬件链。
我参与了斯洛文尼亚首都卢布尔雅那机械工程学院的技术物理实验室。工作人员使用 GPIB 进行实验控制和数据采集,任何引入实验室的计算环境都必须尽可能支持 GPIB。在我将实验室转换为 Linux 后,通过软盘打印和在单台连接到互联网的计算机上排队等待每日邮件的情况结束了。标准的 Linux 应用程序取代了以前使用的大多数日常软件。然而,GPIB 支持很快成为一个问题。我本人并不是真正的 GPIB 狂热者,但我知道它的广泛应用,并且从我长期的使用经验中了解 Linux 的精神。当我向所有人保证“Linux 的 GPIB?是的,当然!”时,骰子已经掷出。当时我手中只有 Linux 硬件 HOW-TO 中的一条简短说明,指引我前往德国的 Linux 实验室项目(参见“资源”)。
在某个美好的网络冲浪日,我找到了我需要的:Linux GPIB 软件包,由柏林自由大学的 Claus Schroter 编写。该软件包包括一个可加载的 GPIB 驱动程序模块、用于从 C 语言访问总线功能的基本库以及一个 Tcl 接口,从而为 Tcl 语言启用 GPIB。
我拥有 Slackware 3.1,内核版本为 2.0.0,在一台 100MHz Pentium 主板上,配备 16MB RAM。可用的 GPIB 接口卡是 CEC PC488。一个相当低端的 ISA 板,但足以满足我的测试目的。该软件包的信息性文档指出,支持以下板卡:National Instruments AT-GPIB、NI PCII 和 PCIIa 以及兼容板卡、IBM GPIB 适配器、HP82355 和 HP27109 适配器。
模块和 GPIB 库可以直接编译,并且在实际阅读 README 文件后,Tcl 支持也编译成功。驱动程序模块可以在编译时、模块加载时或通过库调用进行配置。必要的参数是 GPIB 板的硬件地址、DMA 通道和正在使用的 IRQ。
在使用前,还必须使用默认的 /etc/gpib.conf 文件配置库。可以为连接到总线的每个硬件设备进行特定配置。应为每个设备提供一个特殊的标识符名称,以便库可以通过合理的名称访问任何硬件设备。我发现这种配置方法非常方便。总线上的所有 GPIB 设备都有不同的地址,它们的初始化字符串也各不相同。通过 /etc/gpib.conf 文件进行配置,只需确定必要的参数并将其写入配置文件一次即可。然后,您只需记住您分配给该设备的任意名称。还有一个基于 Tcl/Tk 的应用程序,名为 ibconf,它简化了维护配置文件。
最吸引我注意力的功能是远程 GPIB,rGPIB。这是一个非常酷的选项,它使没有 GPIB 板的计算机能够通过 TCP/IP 网络访问远程计算机上的 GPIB 板。它比购买接口卡便宜得多,也比在计算机之间交换一块 GPIB 板简单得多。远程 GPIB 使用 RPC(远程过程调用)进行客户端和服务器之间的通信,因此必须先启动并运行 RPC 端口映射器,然后才能使用 rGPIB 服务器。
在软件包编译完成并准备好使用后,我拿了一台带有 GPIB 接口的低频频谱分析仪 HP3582A 和一台 HP3312A 函数发生器来馈送分析仪。对于不熟悉这些机器的读者,请想象一下自己在高速公路上数交通流量。高速公路代表函数发生器。你数车辆,确定与上次计数相比交通量的增加,并将结果输入到便携式计算机中。通过这些操作,你就充当了分析仪——进行一些傅里叶变换。这就是基本思路。
计算机应使用通过 GPIB 发送的初始化字符串启动分析仪,并将其设置为某种模式,以便可以通过总线控制其所有功能。在建立此控制后,计算机必须向分析仪请求数据,然后监听数据传输到总线。由于本文的目的不是讨论 GPIB 的原理,因此只需注意 GPIB 软件接口必须提供向总线写入和读取字符串的方法,以及一些用于状态和事件驱动操作的额外功能。
我将硬件连接到 Linux 工作站,并意识到现在可以完美地双向传输字符串。我的工作完成了,实验室的其他成员现在可以使用新设置进行认真的实验。然而,作为 Tcl/Tk 爱好者,我无法就此止步——我必须检查一下承诺的 Tcl 功能。提供了一个可从 Tcl 加载的共享库。它向 Tcl 解释器添加了新命令 gpib,并且可以通过新命令访问所有总线功能。
虚张声势百分之百奏效了,我一手拿着四个 A,另一手拿着葫芦。停止?没门!我突然想到,我可以使用 Tcl/Tk 的强大功能为 HP3582A 频谱分析仪创建一个用户友好的界面。
我开始开发用户界面,然后决定自己编写 Tcl 接口库。不是因为现有的库有任何问题,我只是需要一个额外的标志来禁用对 GPIB 库的实际调用,因为我在家进行部分程序开发时,既没有 GPIB 板,也无法网络访问远程 GPIB。我在 Tcl 级别添加了一个标志,以使所有功能都可以在不实际调用底层库的情况下运行。借助频谱分析仪的手册和 Linux 作为开发平台,我为远程分析仪操作创建了一个简洁的用户界面(见图 1)。
当我最终从编程痉挛中恢复过来时,我从键盘前抽身出来,花时间重新考虑实验室情况的改善。以前,实验室有一台古老的基于 Motorola 的 HP 300 工作站作为实验控制的主要工具。编程很繁琐,因为大多数工作都是通过设备文件完成的,没有任何高级库。我们的另一个选择是配备 MS-DOS 的 PC,对于实验工作来说,它是一台不错的机器,但在我看来,它作为良好的开发平台毫无用处。我认为使用 Linux 工作站的新解决方案优于其他任何选择。您可以在一台计算机上同时阅读每日电子邮件、处理 GPIB 应用程序和执行非关键测量。如果您不害怕编写几行 C 代码、编写一两个脚本以及将不同的开发工具合并在一起,那么配备 GPIB 支持的 Linux 工作站对于实验人员来说是一台出色的机器。这是我第一次参与 GPIB,但环境的简洁性和自由度激发了我的热情,并将我推向了超出最初意图的方向。
当然,事实上,在撰写本文时,大多数可用于实验控制的商业软件都是 Microsoft 平台或专有 Unix 工作站的原生软件。但随着 Linux 在测量和控制产品中获得越来越多的认可,这种情况正在发生变化。在供应商支持是一个重要问题的大型环境中,商业软件包仍然占主导地位。然而,对于拥有充满热情的工作人员且需求不太苛刻的大学和研究实验室来说,Linux 解决方案值得一试。当然,如果您的预算紧张,您就没有太多选择。Linux 和 GPIB 软件包都是免费的,通常不需要新的硬件。Linux 甚至可能在未来为您节省一两张网络功能的账单。随着实时 Linux 现在和将来被引入实验室,实验的严肃性和重要性应该不会受到限制。
