使用 Linux 与可编程逻辑控制器
当为“现实世界”解决控制系统问题时,工具包式的问题解决方法通常能更快、更稳健地找到解决方案。这就是我们在 Advanced Photon Source (APS) 的 DuPont-Northwestern-Dow Collaborative Access Team (DND-CAT) 使用商用基于 Intel 的机器上的 Linux 的原因之一。APS(参见 http://www.aps.anl.gov/)是三个第三代同步加速器 X 射线源之一,它将为科学研究提供世界上最明亮的 X 射线源。DND-CAT(参见 http://tomato.dnd.aps.anl.gov/DND/)是由杜邦公司、西北大学和陶氏化学公司组成的合作组织,旨在 APS 构建和运营科学设备,以研究化学、生物学、材料科学和物理学中工业和学术上有趣的问题。Linux(像所有 Unix 系统一样)是围绕工具包范式设计的。在 Linux 下运行的工具为构建用户界面(例如,Netscape、Java、Tcl/Tk、expect、万维网守护程序)、运行计算(例如,C、C++、FORTRAN、Perl、pvm)以及与外部设备交互(极好地访问串行设备、背板中的卡以及当然还有 TCP/IP)提供了出色的框架。
然而,虽然有人努力为 Linux 配备实时功能,但它不是“实时”操作系统。此外,将商用个人计算机用于控制应用充其量好坏参半。虽然这些系统功能强大、易于获得且价格低廉,但它们的背板上的插槽数量有限,并且机器通常必须在物理上靠近被控制或监控的过程。在过程发生在可能导致硬件故障的恶劣环境(例如,高辐射区域、高振动等)的情况下,这可能会成为问题。这些是整个控制系统设计中的重要因素。然而,如果我们期望 Linux 提供控制问题的完整解决方案,而不是工具包方法中的一种工具,那么这些才只是问题。
在 DND-CAT,我们一直在设计使用可编程逻辑控制器与 Linux PC 结合使用的系统,以为科学实验设备提供低成本的自动化和控制系统。
可编程逻辑控制器 (PLC) 是现代工业革命中默默无闻的英雄。早在 IBM 和 Apple 为大众生产计算机之前,工厂就已经通过计算机化的控制器实现自动化,这些控制器旨在与“现实世界”(即,继电器、电机、温度、DC 和 AC 信号等)接口。这些控制器由许多公司制造,如 Modicon、Allen-Bradley、Square D 等。在他的小册子PLC 历史中,PLC 的最初发明者 Dick Morley 指出,第一个 PLC 是在一家咨询公司 Bedford Associates 于 1968 年开发的。当时,Bedford Associates 正在设计计算机控制的机床以及计算机行业的周边设备。PLC 最初旨在消除控制方面的问题。在数字计算机出现之前,逻辑功能是在继电器架中实现的,其中单个继电器对应于一位。然而,继电器在长期内往往不可靠,并且“软件”是通过布线硬编码的。
可以通过用固态设备替换继电器来提高系统可靠性。这样做的好处是系统可以由电工、技术人员和控制工程师维护。然而,“软件”仍然存在于系统的硬布线中,并且难以更改。当时的替代方案是使用正在开发中的小型计算机之一,例如 Digital Equipment 的 PDP-8。虽然可以实现更复杂的控制功能,但这也会增加系统复杂性,并使工厂车间的人员难以维护。
Morley 设计了第一个 PLC,用专门的实时控制器取代继电器架,该控制器可以在工业环境中生存。这意味着它必须经受住测试,例如跌落、特斯拉线圈电击和橡胶槌敲击。它专为连续运行而设计,没有开/关开关。实时功能过去是,并且在很大程度上现在仍然是——使用梯形逻辑编程到单元中的。
梯形逻辑是一种基于规则的语言;图 1 给出了一个示例。图的左侧的线显示了一个“电源轨”,该电源轨的“地”在右侧(未显示)。该语言的规则是通过从左到右完成梯形图梯级中的“电路”来编码的。在图中,“||”对应于开关触点,“()”对应于继电器线圈。穿过触点和线圈的斜线表示补码。“X”开关触点映射到实际的二进制输入点,“Y”继电器线圈触点映射到输出点,“C”触点/线圈是用于中间操作的软件点。在示例中,闭合 X0 和 C0 或断开 X0 和 C0 将激励 C10 线圈,从而闭合 C10 触点。C10 触点激活 Y0 并关闭 Y1。
虽然这种图形化编程风格对于习惯于使用 C 或 FORTRAN 编程的人来说可能很奇怪,但梯形逻辑使非程序员可以轻松编写有用的应用程序。大多数 PLC 都有大量功能,包括定时器、计数器、数学运算、位移位器等。它们具有各种各样的输入和输出设备,包括二进制和模拟输入和输出、电机和温度控制器、继电器输出、磁性转速表传感器等。输入和输出点的数量取决于 PLC 的类型和大小,但范围可以从微型 PLC 的不到 10 个到高端 PLC 之一的超过一千个。PLC 市场多年来一直在增长,并且受到了计算机革命的影响。今天,市场上有很多高质量、廉价的 PLC。来自同一供应商的 PLC 通常可以联网在一起。在某些情况下,低端 PLC 的构建成本可能低于 500.00 美元。
在我们的应用中,我们使用 Linux 计算机作为 PLC 和外部世界之间的接口。我们这样做的主要目的是使用 Tcl/Tk 和万维网 (WWW) 等工具通过通用网关接口 (CGI) 来控制 PLC 中的过程。用于编程我们的 PLC 的软件是基于 Microsoft Windows 的。因此,通过在同一硬盘上拥有 Linux 和 Windows 分区,我们可以在 MS Windows(我们在其中编程 PLC)和 Linux(我们在其中编程和使用操作员界面)之间来回切换。
PLC 内部的实时操作系统与 Linux 等复杂系统相比相对简单。因此,控制过程中需要极高可靠性的部分可以编程到 PLC 中,从而使 Linux 可用于其他任务。
我们在应用中使用 PLC Direct 系列 PLC(参见 http://www.plcdirect.com/)。为了证明 Linux 和 PLC Direct 组合的可靠性,我们与 UNICAT(大学-国家实验室-工业合作访问团队;参见 http://www.uni.aps.anl.gov/)合作,建立了一个测试系统,该系统使用连接到 PLC Direct 405 PLC 的基于 Linux 的 Web 服务器。与 PLC 的通信是通过多点、基于数据包、主/从协议进行的,该协议通过串行链路运行。使用 PLC Direct 文档,我们使用 Don Libes 的 expect 程序在 Linux 串行端口上实现了此协议,使 Linux 系统成为主站。这使我们能够“窥视”和“探测”到 PLC 内存映射中。CGI 脚本调用 expect 程序以提供对 Web 的访问。
DND-CAT/UNI-CAT Linux/PLC 测试台的照片
1995 年 3 月至 1996 年 7 月期间,互联网用户被允许通过 WWW 界面关闭 PLC 上的输出点并读取输入点。图 2 显示了该测试台的照片。PLC 监控来自 5 个 Love 控制器的数字输入,这些控制器测量 PLC CPU 中的温度,并在温度高于预设值时闭合触点。
除了演示之外,我们还在三个项目领域中使用了 Linux/PLC 组合:用于同步加速器 X 射线束线的简单快门、用于分析 X 射线机的个人安全系统以及使用 Advanced Photon Source 的高强度 X 射线束线的设备保护系统。
简单的梯形逻辑图
我们使用 PLC 和 Linux 的最简单的应用涉及将商用 X 射线束快门连接到我们的 Linux 数据收集计算机。X 射线快门的硬件由两个继电器驱动的螺线管控制。当我们编程 PLC 时,我们分配两个范围的控制继电器,以充当 PLC 和 Linux 之间的接口。图 1 中的程序演示了这一点。Linux 程序将设置 C0。X0 连接到硬件开关,并为系统提供外部输入。X0 和 C0 组合模拟三向开关,Y0 和 Y1 实际操作快门上的继电器。Linux 端的程序可以读取 C10 以监控快门状态。通过控制继电器定义 PLC 和 Linux 之间的接口,实际的控制过程在两台不同的机器之间划分。
我们的第二个项目使用 PLC 作为状态机来监控 X 射线发生器和 X 射线管的辐射外壳。由于这是一个安全设备,我们启用了 PLC 的密码功能以将程序锁定到 PLC CPU 中。如果由于某种原因我们忘记了密码,则必须将 CPU 送回制造商进行重置。PLC 监控十二个门触点开关、来自操作面板的开关、X 射线快门位置、X 射线管的水流互锁,以及提供蜂鸣器和故障安全灯以通知操作员 X 射线和快门已打开。PLC 还为 X 射线发生器和 X 射线快门提供使能信号。
虽然 PLC 的主要目的是保护操作员,但如果 X 射线互锁跳闸,PLC 没有很好的方法来通知操作员发生了什么故障。这就是 Linux 的用武之地。使用 CGI 脚本,我们编写了网页,允许操作员使用浏览器查询 PLC 状态。为了防止未经授权的人员访问设备(只有经过培训的人员才能使用此设备),我们在 Linux 和 PLC 之间提供了看门狗信号。授权用户登录到 Linux 系统并运行受保护的守护程序,该守护程序启动 PLC 中的看门狗定时器。Linux 守护程序必须不断重启看门狗以保持 X 射线系统启用,并且守护程序会在用户注销时禁用系统。Linux 跟踪对系统的所有访问,并在每次发生访问时向 X 射线发生器管理员发送电子邮件。因此,Linux 系统充当连接到 X 射线发生器的仪器的数据收集计算机。
我们的最后一个项目是 Advanced Photon Source 的 X 射线同步加速器束线的设备保护系统。在这种情况下,PLC 正在监控来自水流量计、真空系统输出和真空阀开关的 70 多个输入点。根据这些系统的状态,PLC 向 APS 发送启用或禁用信号,这允许他们将高强度 X 射线束传递到我们的设备。如果系统未就绪时 APS 传递光束,则可能发生严重的设备损坏。在这种情况下,我们使用 Linux 作为数据记录器和操作员界面。每隔几分钟,Linux 轮询 PLC 以记录系统状态。
PLC 本身会在断电时将重要事件的日志保存在非易失性存储器中。为了使 PLC 与 Linux 日志保持同步,我们在 Linux 端使用网络时间守护程序,并且每天重置 PLC 中的实时时钟。除了 PLC 之外,Linux 进程还在通过多端口串行卡监控其他设备,例如真空计。如果发生系统故障,我们的科学家和工程师可以登录到 Linux 系统并运行 expect 脚本来诊断问题,或者使用浏览器并通过 Web 与 Linux/PLC 组合进行交互。此时,操作员可以完全控制 PLC 中进程的启用和禁用。
在此应用中,与万维网的接口极其重要。科学家们从世界各地前往同步加速器光源进行实验。当设施运行时,它每天 24 小时运行。如果我们的 PLC 要关闭设备,则能够诊断故障非常重要,并且如果可能,尽快使设备恢复运行状态。通过使用万维网,我们为我们的科学家和工程师提供了诊断工具,他们可以使用常用的界面软件从任何地方使用这些工具。我个人已经能够在我的工作桌、我在芝加哥的公寓和伦敦的网吧监控我们 PLC 中的系统状态。
总的来说,我们发现将可编程逻辑控制器与 Linux 相结合是在 DuPont-Northwestern-Dow Collaborative Access Team 提供专用控制系统的经济高效且稳健的方法。随着我们构建我们的仪器,我们不断为这种组合找到新的应用。我们还有几个正在进行的项目,包括使用 PLC 为专用机器构建智能控制器,以及使用 Linux 与它们接口。我们还计划在 Linux 下实现 PLC Direct 从站协议,以允许 PLC 将数据直接发送到 Linux 守护程序,因此 PLC 不需要轮询。
我要感谢 UNI-CAT 的 Pete Jemian 在原型系统上的合作以及图 2 中的照片。
DND-CAT 同步加速器研究中心由 E.I. Du Pont de Nemours & Co.、陶氏化学公司、伊利诺伊州(通过商务部)以及高等教育委员会拨款 IBHE HECA NWU 96 和国家科学基金会拨款 DMR-9304725 资助。
提及特定产品不构成商业产品认可。
John Quintana (jpq@nwu.edu) 是西北大学材料科学与工程系的助理研究教授,目前在 Advanced Photon Source 的 DND-CAT 机构工作。在他的业余时间里,他喜欢合气道、万花筒、与妻子一起徒步旅行以及在动物收容所抚摸小狗。如果您有任何问题或意见,可以通过电子邮件或邮寄方式联系他,地址是 DND-CAT, Building 432/A003, 9700 South Cass Avenue, Argonne, IL 60439, USA。