Linux 在现实世界中的应用

作者:Vance Petree

本文介绍了一个令人兴奋且重要的新系统,该系统正在弗吉尼亚电力公司的 Linux 平台上构建——一个虚拟 SCADA(监控与数据采集)系统,它将为传统的 SCADA 连接提供一种经济高效且灵活的替代方案。上个月的故事是一部史诗般的软件冒险,角色众多,而本月的故事更像是一部关于我们 Linux 房屋新增功能的纪录片。在撰写本文时,框架已经搭建起来,屋顶也已盖好,石膏板也已就位。然而,托梁仍然可见,还有大量的管道工程尚未添加。不用担心——戴上虚拟安全帽,手持源代码锤子,我们应该能够轻松地可视化完成的房间。(此外,当您阅读本文时,系统已经完成。杂志是绝妙的时间机器。)

但首先,对于那些可能错过了上个月文章的读者,先简单介绍一下 SCADA 的基础知识。就电力公用事业而言,SCADA 指的是通过安装在变电站中的远程终端单元 (RTU) 从服务区域内各个位置检索实时模拟和状态数据。这些信息由中央主计算机获取,并在那里存储、分析和呈现给系统操作员,他们负责维护输配电网的完整性和可靠性。必要时,这些操作员还可以通过从主计算机向 RTU 发送控制命令来远程操作现场设备,如线路断路器和电容器组。主计算机本身甚至包含反馈算法,可以根据系统状况自动操作某些设备。

在弗吉尼亚电力公司,RTU 和 SCADA 主计算机之间通信的标准媒介是专用串行线路,通常从当地电话公司租用。多个 RTU 可以多点连接到一条专用线路(最多 16 个,这是我们目前使用的 SCADA 协议的限制),但地理限制往往会阻止专用线路的尽可能多的共享。冒着过度简化的风险,我们可以想象每个 RTU 一条专用线路,从而得到一个如图 1 所示的传统 SCADA 系统(见下文)。

专用连接的优点显而易见:持续的数据可用性和快速响应,当系统状况需要某种控制操作时(例如打开或关闭断路器或电容器组)。对于发电站或大型高压变电站,任何其他类型的监控都是不可想象的。

然而,还有其他可能的监控站点,通常位于偏远地区(确切的技术术语是“在荒郊野外”),这些站点并不那么引人注目(或压力巨大)。事实上,从数据采集的角度来看,这些潜在的站点简直是平淡无奇:两到三个模拟点,几个状态点,也许只有一个控制点。如此适度的监控需求不足以证明专用串行线路提供的持续监视是合理的,但信息确实需要检索;控制功能确实需要在需要时可用。

图 1. 传统 SCADA 连接

图 2. 混合 SCADA 系统

多年来,已经实施了一些部分解决方案。在许多情况下,智能电子设备(如数字继电器)可以监控少量模拟和状态设备,并提供足够的控制功能。这些继电器通常实现基于简单串行的协议;与调制解调器一起安装在远程站点,可以使用独立的 PC 软件包从 SCADA 主计算机中心对其进行查询,从而形成如图 2 所示的混合 SCADA 系统(见上文)。

这种混合系统,虽然可能(以某种形式)提供所有必要的数据和控制功能,但未能为系统操作员提供他们正在操作的系统的统一视图。这些人员已经承担了足够的责任,无需再进行如下的心理旋转:“我最好检查一下贝里地区的电压。糟糕——克兰莓变电站必须拨号,所以我只需走到那边的拨号 PC 并...哦,天哪。泰德正在使用 PC 拨打矿泉水变电站!我想我稍后再试...”

当然,可以购买第二台拨号 PC,然后是第三台和第四台,等等——等等!每个 SCADA 主计算机中心中那些极其可靠和灵活的 Linux 系统怎么样?(我知道您已经预料到这一点了。)这些 Linux 系统不仅处理资产管理数据库系统的平均模拟数据,而且还是一个极其可靠和灵活的拨号子系统(我很惭愧承认这一点,但事实就是如此),它有可能与任何类型的具有面向字节协议的设备进行通信!

拨号子系统对它可以处理的电话线路数量没有设置限制。如果可以找到某种方法在 SCADA 主计算机和 Linux 系统之间来回移动数据,则可以构建一个更理想的 SCADA 系统,如图 3 所示(见下文)。这将为系统操作员提供其系统的统一概述——所有信息都将存在于 SCADA 主计算机中。其中一些信息将通过传统方式(专用线路)检索,其余信息将通过 Linux 系统的拨号连接获取。

图 3. 理想的统一 SCADA 系统

您可能已经猜到,最后一种方法与我们正在采取的方法非常相似,尽管现实世界中一些令人清醒但幸运的是并非无法克服的现实已经侵入。

  • 我们的 SCADA 主计算机是较旧的机器,即将结束其数字生涯。没有任何备用的处理器周期(或内存字节)用于任何类型的特殊程序来适应与我们的 Linux 系统进行通信。事实上,在我们的 Linux 系统和 SCADA 计算机之间移动数据的唯一可行方法是使用与 RTU 通信的相同协议。唉,这种协议有点过时,并且使用专用调制解调器和编码固件。

  • 拨号设备和检索数据都很好,但有时系统操作员需要持续监控数据点一段时间。

  • 当操作员对远程设备执行控制操作时,他们需要看到即时反馈,以确定控制的成功或失败。某些操作可能会影响几个不同的数据点,这些数据点需要实时更新,直到操作员对控制操作的结果感到满意为止。

关于第一项,我们很幸运能够拥有一个 RTU 平台,我们的小组为该平台开发现场驻留应用程序,例如闭环反馈控制和 IED 的协议转换器。显然,该平台包含与我们的 SCADA 主计算机通信所需的所有固件和硬件,并且是完全可编程的(用 C 语言,谢天谢地)。剥离所有不必要的外部硬件,并加载一个简单的面向字节的协议,通过空调制解调器电缆与我们的 Linux 系统进行通信,这个可编程 RTU 可以非常方便地充当转换器:状态和模拟数据可以从拨号设备传递到 SCADA 计算机,控制请求可以从 SCADA 计算机传递到 Linux 系统以采取适当的操作。当然,SCADA 计算机所知道的只是它正在扫描另一个 RTU。结果是一个稍微缓和的理想系统,如图 4 所示。

图 4. 统一 SCADA 系统,现实世界版

在这一点上,我想提及一些软件木工的细节,当我们讨论现实世界现实列表中的其余项目时,这些细节将非常重要。转换器盒(即与 SCADA 主计算机通信的简化可编程 RTU)的数据库组织为一组数据结构数组——一个用于状态点的数组,另一个用于模拟点的数组,等等。在 Linux 端,一组相应的共享内存分区镜像了转换器盒中的数据结构数组——一个分区用于状态点,另一个分区用于模拟点,等等。Linux 中的守护进程与转换器盒上的对应进程通信,并确保结构数组的相应实例保持一致和最新。此更新过程每隔几秒钟运行一次。

“每隔几秒钟”在与实时数据处理相关联时可能听起来有点模糊,但 SCADA 活动倾向于实时处理的悠闲一侧;RTU 每 2 到 30 秒扫描一次,控制操作期间的触点闭合可能在几百毫秒到一两秒的数量级。因此,即使 Linux(像任何标准 Unix 系统一样)严格来说不是实时系统,但对于我们关注的实时处理规模而言,它也足够响应。

好吧,现在——要记住的要点是:对 Linux 系统中共享内存段中的数据的更改将显示在转换器盒中,在那里它将被 SCADA 主计算机拾取和扫描,最终显示在操作员显示器上。相反,操作员的控制操作将更改转换器盒中的数据,这将显示在 Linux 端并发出(虚拟)铃声,以引起某些操作的发生。从现在开始,我们将忽略转换器盒,并假装 SCADA 主计算机和 Linux 系统正在直接对话。

这以一种迂回的方式将我们带到了第二个现实世界项目。如前所述,持续数据监控是专用线路连接的优势之一。使用普通电话线模拟专用线路访问显然是我们将新系统称为虚拟 SCADA 系统的原因,基本原理也很明显:当拨号设备需要持续监控时,拨号并保持拨号状态!

当然,在任何给定时间,只能持续监控与可用电话线路数量一样多的拨号设备——但如果需要,可以随时添加更多电话线路。我们从每台 Linux 机器三个拨号串行端口开始;时间和经验会告诉我们是否需要添加更多端口。但一些复杂情况(像往常一样)出现在细节中。例如,如果操作员开始持续监控拨号设备,陷入其他任务,而忘记释放设备,以便拨号线路可以用于其他用途,会发生什么情况?就此而言,操作员首先如何启动和停止监控设备?

为了处理这些细节,每个拨号设备都关联着许多伪状态、模拟和控制点——这些点与设备监控的数据无关,而是与设备本身相关。

  • 一个 时间戳 模拟点,显示设备数据有多旧(即,上次调用设备的时间)。

  • 一个 连接 状态点,显示设备是否在线。

  • 一个 拨号 控制点。切换此控制将导致设备被拨号并建立连接。

  • 一个 连接时间 模拟点,显示设备自动断开连接前剩余的分钟数。

  • 一个 增加连接时间 控制点。切换此点将为连接时间模拟点增加固定分钟数,使设备保持在线更长时间。

  • 一个 断开连接 控制点,用于立即断开与设备的连接。

一个额外的伪模拟点报告可用拨号线路的数量。此模拟点与上述伪点一起显示在 SCADA 主计算机屏幕上的所有拨号设备上,使系统操作员可以轻松地集中管理所有拨号设备。

作为一个例子,让我们重演一下前几段中假设的场景:“我最好检查一下贝里地区的电压。让我看看——克兰莓变电站必须拨号,所以我只需在我的工作站舒适地戳一下这个控制点就可以了...”

设备拨号需要一些时间;操作员忙于其他事情。然后连接伪状态改变状态并发出警报蜂鸣器以引起操作员的注意:“嗯...克兰莓现在在线了。我最好关注这些电压大约半小时。我将戳几次这个增加时间控制...好了;现在我有 30 分钟的连接时间。”

好吧,这不是一个完美的解决方案;操作员仍然必须执行一些特殊操作才能获得他的数据,并且必须知道什么是拨号设备,什么不是拨号设备。但是所有这些额外的活动都可以在操作员的常规工作站上完成。如果拨号设备被安排进行定期查询,则甚至可能不需要其中一些特殊操作:“我最好检查一下贝里地区的电压。嗯,看起来克兰莓变电站刚刚在 10 分钟前被查询过——最近的时间足够我使用这些值了...”

正如您可能想象的那样,处理伪点和连接计时器涉及 Linux 端许多令人愉快的软件开发,其中一些仍处于蓝图阶段,而另一些只需要最后一层符号剥离漆。解决我们的现实世界现实列表中的最后一个项目——为拨号设备提供操作员控制——仍然在很大程度上处于蓝图阶段,但我们至少可以描述基本思想。

拨号设备控制的主要问题是提供足够的泛化,以便以一致的方式处理控制操作。控制 SCADA 设备的标准方法是三步选择-验证-执行程序:选择要控制的点,验证选择(通常通过让远程设备将选择回显到主计算机),并在操作员最终批准后执行所需的控制。控制操作的结果通常通过监控相关的状态点或一个或多个模拟点来确定。

不幸的是,我们使用虚拟 SCADA 处理的许多智能终端设备没有明确的控制操作步骤序列。例如,一个设备使用 ASCII 编码的位图来选择设备并执行控制,所有步骤都在一步完成——验证就到此为止了。另一个设备实现了通常的 3 步程序,但增加了序列号的负担,以确保一次不超过一个未完成的控制操作(实际上,这根本不是一个坏主意,但与我们现有的 SCADA 协议不兼容)。并且存在明显的先决条件,即要控制的设备必须在线,然后才能尝试任何控制。

似乎需要一点简陋的面向对象,因此我们抽象了控制请求的基本要素,并顺便为每个拨号设备添加了一些伪点(这些额外的伪点与所有其他设备伪点显示在同一屏幕上)。

  • 一个 连接进行中 状态点,如果关联的设备正在拨号过程中,则切换为真。

  • 一个 控制进行中 状态点,如果正在对关联的设备执行控制,则为真。

  • 一个 控制成功 状态点,显示上次尝试的控制的成功或失败。

操作员可以对任何拨号设备控制点执行控制,就像他对任何其他(专用线路)控制点一样,前提是他理解他的控制操作实际上是在代表他选择、验证和执行控制的请求,在(不久的)将来某个时间。这种区别可能看起来是表面上的,但从操作的角度来看,它实际上很重要。

这是一般的事件顺序:操作员控制拨号设备控制点(使用通常的 3 步程序,因为他正在使用常规 SCADA 协议将其请求传达给 Linux 系统),这会切换 Linux 系统中的数据库点,提醒系统有工作要做。系统设置 控制进行中 状态点,以确保每个设备一次只有一个未完成的控制请求。由于每个拨号设备的单独控制点数量很少,因此此限制不应构成问题。

如果要控制的设备不在线,则会拨号并建立连接(连接进行中 状态点允许监控此过程)。如果设备已在线,则会为其 连接时间 模拟点增加一定的时间量,以便完成控制请求。

设备特定的软件,了解设备上成功控制操作的所有秘密,执行操作员请求的控制,并通过 控制成功 状态点报告总体成功或失败。设备保持在线状态,直到其 连接时间 模拟点倒计时为零,从而使操作员有机会观察任何相关的模拟或状态点,以验证控制操作是否具有预期的效果。

好了,我们几乎已经结束了对 Linux 系统网络最新添加功能的巡视,我希望您对完成的房间的外观以及我们将拥有的关于提高 SCADA 系统效率和可靠运行的绝妙视野有一个很好的了解。但是,这个新系统最引人注目的特点尚未提及,尽管它已在迄今为止讨论的所有内容中暗示。

Linux 已成为我们用来为部门和规划人员制作解决方案的工具包中不可或缺、被接受的一部分,他们向我们小组提出问题和需求。在我们的虚拟 SCADA 系统的设计过程中,没有人建议使用“其他”操作系统平台,也没有人质疑 Linux 是否有足够的马力来处理将要施加在其上的新需求。Linux 作为我们的数据收集前端,一年来表现出色、完美无缺,已经将怀疑变成了欣然接受,并将“那台 PC Unix”的说法转变为“我们的 Linux 系统”。我从未见过在我们公司工作的人给我打电话询问 Linux 问题,因为他们听说了我们系统的优点。

哦,我们仍然有一两个怀疑论者——我确信我们永远都会有。但是,我发现让他们不再纠缠我的最可靠方法是,在他们阐述了下一个版本的“安大略”或“普基普西 96”或“香格里拉”之后,礼貌地咳嗽一下并回答:“嗯,Linux 现在就可以做到。而且它现在就可以工作。看到了吗?”

对于那些回来的人,我告诉他们如何获得良好的 CD-ROM 发行版。多一个快乐的 Linux 用户不会有什么坏处!

Vance Petree (vpetreeinfi.net) Vance 成年初期是音乐作曲专业的学生,但他很快发现计算机是获得食物更可靠的手段。在过去的 15 年里,他一直是弗吉尼亚电力公司的程序员,与他的妻子(一位挂毯编织工——这很像编程,只是速度较慢)和两只健谈的猫住在弗吉尼亚州里士满市中心一个温文尔雅的城市炖锅中一座拥有 70 年历史的联排别墅里。

加载 Disqus 评论