弗吉尼亚电力更新
如果您是Linux Journal的长期读者,您可能已经读过许多关于 Linux 在现实世界中取得成功的激动人心的故事。也许,在轻松地编写设备驱动程序、构建新内核或尝试记住 Emacs 命令来更改 LaTeX 缓冲区中的字体后,您坐在床边,手放在灯开关上,并自言自语:“我想知道那些弗吉尼亚电力公司的人最近在做什么?”
“怎么了,亲爱的?” 您的另一半睡眼惺忪地咕哝着(或者,根据您的生活方式,从床脚发出呜咽或喵喵声)。
“你知道,那些勇敢的家伙,他们使用 Linux 构建了一个分布式数据收集和存档系统(Linux Journal 第 9 期,1995 年 1 月),以及一个拨号 SCADA(监控和数据采集)系统,用于连接他们现有的 SCADA 系统(Linux Journal 第 10 期,1995 年 2 月)。”
“哦——那些弗吉尼亚电力公司的人……”
“是的。我想知道他们是否还在使用 Linux,它是否仍然满足他们的需求,以及他们是否在做任何新的和令人兴奋的事情……”
好吧,作为弗吉尼亚电力公司的其中一员,我可以非常高兴地说:我们当然在做!我想我们过去几年一直忙于编码,以至于没有时间记录我们一直在做的事情,但我会尽力弥补这种不足(至少一点点)在这篇文章中。我将描述我们在其中使用 Linux 的两个新应用程序——一个已经完成、安装并运行良好,另一个完成时,将成为弗吉尼亚电力公司任何类型最大的计算机系统之一,也可能是任何地方使用 Linux 的最大系统之一。
我将讨论的第一个应用程序是我们早期 Linux 应用程序(尤其是我们的拨号 SCADA 系统)的自然延伸。我不会重述该系统的所有细节(如果您有兴趣,请参阅LJ 第 10 期)——重要的是要记住,拨号系统从安装在变电站和电线杆顶部的远程设备检索状态和模拟数据,并向这些设备发送控制命令。
在较大的变电站中,通常使用称为远程终端单元 (RTU) 的设备作为主要远程设备。RTU 充当数据集中器,从站内的各种其他设备收集状态和模拟数据,并提供一个中心位置,可以从该位置远程检索数据,并将控制请求传递到该位置。
RTU 在处理能力和可扩展性方面有些受限,通常只与有限数量的其他监控和控制设备连接。因此,当前变电站设计的一个趋势是使用计算机作为站数据集中器。这种方法不仅在可以连接的设备类型和数量方面提供了更大的灵活性,而且还提供了一个通用的软件环境,可以在其中在变电站本地执行一些监控和控制算法。
正如您可能预料的那样,变电站控制器系统是商业上可用的,许多系统使用 MS Windows 实现。然而,这些系统价格昂贵,难以远程管理,并且包含大量与监控变电站设备无关的软件花哨和无用的小玩意(也称为点击拖动病)。
在运营工程组中,我们意识到我们的拨号 SCADA 系统(见图 1)提供了与那些商业变电站控制器相同的功能,如果您消除了拨号系统并将 PC 和转换器设备移到变电站中(见图 2)。转换器设备是必要的,以便使用古老的面向位的协议(通过 1200bps 的租用线路,不少于!)与我们现有的 SCADA 主控制计算机通信。然而,这些控制计算机将在未来几年内被新的计算机系统取代——稍后会详细介绍。
言归正传,将 PC 移动到变电站正是我们所做的。在撰写本文时,已经安装了六个基于 Linux 的变电站控制器,并且正在全天候工作,更多的控制器正在计划中。
变电站控制器的基本设计非常简单。对于每种在变电站中执行实际监控和控制的特殊设备类型,都会编写一个特定的协议任务(对于强迫症编码员来说,这是有趣的部分),该任务处理数据检索和控制执行的所有细节。执行实际监控和控制的设备通常称为 IED(智能终端设备),因为它们内置了一定的智能,并且位于数据检索和控制路径的末端。一些 IED 通过串行线路通信;另一些使用专门的局域网协议,例如 ModBus+。
另一个协议任务与转换器设备通信,而转换器设备又与 SCADA 主计算机通信。数据库管理守护程序协调所有这些协议任务的活动,并维护包含实际数据的共享内存分区。考虑到所有这些组件,典型的变电站控制器设置如图 3 所示。
在大多数情况下,变电站控制器计算机与变电站“控制室”(一个主要用于防风雨的小型建筑物)中的其余设备一起安装在机架上。它没有键盘,也没有显示器(在您的 Windows 机器上试试这个)。所有系统管理都通过拨号登录远程执行;数据库和程序更新使用 UUCP 分发。在某些情况下,安装包括触摸屏显示器,以提供本地操作员界面,包括报警器面板(见图 4 和 5)甚至用于执行设备控制的界面(见图 6)。
顺便说一句,报警器面板只是报警点的分层显示,其中较高级别的报警意味着较低级别的一个或多个点处于报警状态。报警器面板最初将最顶级的报警显示为标记框的网格(如果所有较低级别的报警都正常,则为绿色;如果至少一个报警处于报警状态,则为红色)。变电站技术人员可以触摸其中一个框来显示下一级较低级别的报警;这些报警中的每一个都可以包含额外的单个报警,等等。
这些变电站控制器系统具有高度的灵活性。如果需要更多的串行端口来与额外的设备通信,我们只需要增加串行多端口卡或添加另一个多端口卡。如果要连接新型设备,我们只需要编写一个新的协议任务,并可能为接口卡编写一个新的设备驱动程序。
这些系统的可靠性如何?我们所有的变电站控制器系统从它们在现场通电的那一刻起就运行得非常好。我们遇到了一些应用程序软件错误和故障,但系统软件从未发生故障,也从未在数千小时的连续正常运行时间内给我们带来任何问题。
很久以前我就不再担心 Linux 的稳健性了——老实说,Linux 及其相关的工具以及来自自由软件基金会和其他地方的支持软件组成了我曾经在任何硬件平台上使用过的最可靠的系统。我听说过其他操作系统的用户的恐怖故事:蓝色死亡屏幕、耗尽的资源限制、古怪的编译器错误等等。我摇摇头,带着一丝苦笑,然后转动我的椅子回到我的 Linux 机器前去完成一些工作。我无法想象将任何其他系统放在野外狂野的真实世界中,并期望它在没有故障的情况下运行数周、数月和数年。
就成本效益而言,新的控制器系统通常仅花费硬件的成本,有时如果需要开发新的协议或设备驱动程序,则会增加一点软件开销。没有商业系统能够期望接近如此低的成本——这要归功于 Linux 的自由分发性质。由于我们的运营工程组负责为电力系统监控和分配需求寻找具有成本效益的解决方案,因此 Linux 简直就是一个奇迹。在非常真实(尽管很小)的意义上,Linux 帮助我们降低了电力分配的成本。随着每个新的变电站控制器的安装,即使从未听说过 Linux 的客户也可以从 Linux 开发人员和维护人员在其系统中投入的所有辛勤工作和精湛工艺中受益。
这两个重要的点——可靠性和低成本——自然而然地引出了我们另一个大型 Linux 项目的讨论:当前 SCADA 主计算机网络的替代系统。SCADA 主计算机是扫描上述所有 RTU 和 IED 的系统(上次计数时为数百个)。这些计算机监控电力系统状况,在检测到异常状况时生成警报,并为系统操作员提供电力网信息的摘要、变电站布局的单线图以及用于远程操作断路器、电容器和其他现场设备的控制界面。这些系统还运行闭环反馈控制程序,这些程序会自动响应(通常通过设备控制)不断变化的系统状况。
目前,SCADA 主计算机是由六台 PDP-11/84 计算机组成的网络,这些计算机几乎已经达到了其使用寿命的尽头——它们已经达到了 CPU 功率、可安装 RAM 等方面的极限。用户界面是专用键盘与功能键组以及基于字符的图形终端的令人讨厌的混合体,该终端具有用于绘制变电站单线图的不可更改的小符号和线段。所有这些功能在 1980 年代初期都是非常新颖和先进的,但对于现在或可预见的未来来说,还远不够灵活。
与我们的变电站控制器一样,当我们开始寻找新的 SCADA 系统时,我们首先走了商业路线。我们审查了大约十几家供应商的产品。唉,由于 SCADA 系统类似于工厂自动化系统甚至飞机模拟器,因此我们审查的许多系统都源自这些类型的系统。因此,它们包含许多对于我们的操作员使用 SCADA 的方式没有意义的功能和附加组件;此外,它们价格昂贵;此外,我们通常无法访问源代码。(我们已经被 Linux 宠坏了。)至少有一家供应商提出将源代码放在第三方保管中——就像被告知巧克力芝士蛋糕有多么美味,但却没有被提供一块一样。
最重要的是,让我们的运营人员(更不用说我们自己)重新培训一个全新的系统。监控配电网是一项 24 小时全天候的工作,因此我们不能仅仅关闭商店几个月,在我们掌握新的一大堆软件的同时。毕竟,我们的目标是可靠地监控和控制电力系统,而不一定是学习一种全新的打开断路器或记录警报的方式。(类似于点击拖动病的是,执行任务的一种新的或不同的方式自动地是一种更好的方式的奇怪概念。)
我们认真思考了我们真正需要什么:一个具有成本效益、灵活、可扩展、可靠的 SCADA 系统替代品,它不需要对我们自己或我们的系统操作员进行广泛的再培训,并且不包括我们不会使用的额外软件小工具。
与此同时,我们的 Linux 系统继续日复一日地安静运行:执行拨号数据检索、监控变电站中的大量设备。特别是变电站控制器几乎是胚胎 SCADA 系统,具有数据检索、数据库存储和存档以及带有单线原理图和控制的用户界面。
当然,变电站控制器缺少几个重要的部分,必须提供这些部分才能将它们变成成熟的 SCADA 系统——但是,在 Emacs 中花费足够的时间后,您往往会认为您可以完成任何事情。因此,我们检查了可扩展性问题,弄清楚了我们到底需要哪些额外的部分,以及我们是否可以在现实的时间表内开发它们,并为我们的管理层准备了一份演示文稿。
令人惊讶的是(或者也许并不那么令人惊讶,考虑到我们其他具有成本效益的 Linux 系统的良好记录),我们的高层管理人员给了我们绿灯。突然之间,我们有了大量的工作要做,实施目标日期是 1998 年 12 月。
我无法充分描述这个项目有多么令人兴奋(以及在某些方面令人恐惧)。我们设计的一些功能
连接我们所有主要机器的专用高速 (100 Mbps) 广域网,通过防火墙与我们的企业网络隔离
500 MHz DEC Alpha 数据库服务器
高速 Intel 前端处理器,用于处理 RTU 扫描和数据库检索
运行 X 的多头操作员工作站
分布式共享内存数据库,用于在所有服务器和工作站之间透明地共享信息
三个区域运营中心,我们在 Grayland Avenue 办公室的重复中心,数十个工作站,以及许多区域中心(一些通过以太网连接,另一些通过 PPP/SLIP 按需连接)
一切都在运行 Linux
我们的系统的总体概述(我们将其命名为 swSCADA,即 SkunkWerx SCADA(微笑))如图 7 所示。
到我们的实施完成时(如上所述,我们的安装从 1998 年 12 月开始,在东/南部区域中心安装新系统,其余中心将在 1999 年底之前分阶段安装),我们将拥有大约四十几个 Alpha 和 Intel 盒子的网络,每天 24 小时、每周 7 天运行。这可能不是最大的完全使用 Linux 系统的网络,但这无疑驳斥了那些声称大型公司不愿意在关键任务情况下使用 Linux 的扶手椅评论家。监控配电网对于电力公司来说是一项关键任务,我们不仅愿意使用 Linux,而且我们全心全意地拥抱它(并且不可否认,有点像传教士)。其稳健的质量和自由分发的特性将为我们的客户节省资金,为他们提供一流的服务,并为我们的股东带来更多的投资回报。在当今注重底线的商业环境中,这些类型的论点很重要。
前几天我在思考 Linus Torvalds 为 Linux 制定的最终目标:“统治世界”。当我们进入 21 世纪时,弗吉尼亚州中部和北卡罗来纳州部分地区的每一盏灯、CD 播放器、电视、烤面包机、PC 和吹风机都将在警惕的 Linux swSCADA 系统的仁慈、警惕的注视下。这还不是统治世界——但这只是一个开始!
