OpenSCADA 快速入门指南
原文地址: http://oscada.org/wiki/Documents/Quick_start
视频附录: OpenSCADA 0.8.0 LTS 官方附录 (已过时), Sergey Karpesh 的 “How to …” 视频
OpenSCADA 是一个极其模块化、灵活和多功能的 SCADA 系统。因此,初次接触 OpenSCADA 可能会相当复杂,因为用户之前的经验与 OpenSCADA 的方法匹配的机会很小,或者完全没有这样的经验。然而,这在很大程度上只是第一印象,因为 OpenSCADA 的所有功能都掌握在用户手中,用户可能会因为种类繁多而感到困惑,可能需要付出相当大的努力来选择解决其任务所需的功能。
因此,本文档旨在清晰地介绍 OpenSCADA 使用的一般概念。本文档通过示例,以相对简短和直观的形式,提供了从安装和启动 OpenSCADA 到创建用户界面元素的路径。常见问题解答和"如何…"文档可用作配置、实施和解决 OpenSCADA 周围典型任务的针对性帮助。
本文档适用于 OpenSCADA 0.9 及更高版本。如果您对早期版本的此文档感兴趣,可以从该版本 OpenSCADA 软件包附带的文档中获取,或从旧 Wiki 文档获取。
本文档不包含概念的详细描述和 OpenSCADA 细节的深入探讨,但提供了包含此类信息的其他文档的链接,首先是程序手册。
本文档与连接到"AGLKS" 模拟器演示数据库 (DB) 的示例实现同步构建,作为数据源 — PLC。因此,用户必须按照安装部分中更详细描述的方式获取带有此 DB 的 OpenSCADA 发行版!
目录
- 术语、定义和缩写
- OpenSCADA 安装
- 2.1 从现成软件包安装 OpenSCADA
- 2.1.1 添加软件包仓库并从中安装 OpenSCADA
- 2.1.2 手动安装 OpenSCADA 软件包
- 2.2 从源代码安装构建
- 2.1 从现成软件包安装 OpenSCADA
- 初始配置和启动
- 3.1 总体概述
- 3.2 后台和远程执行 — 服务器、PLC 执行环境和远程开发
- 3.3 创建您自己的项目
- 3.3.1 连接和使用远程及后台配置
- 3.3.2 连接标准 OpenSCADA 库
- 使用数据源
- 4.1 从 TP 设备采集数据
- 4.2 处理接收的 TP 数据
- 4.3 信号的复杂对象标签
- 4.4 获取 OpenSCADA 的现成数据 — 网关
- 4.5 TP 数据的归档历史
- 形成可视化表示
- 5.1 添加模板页面并连接动态
- 5.2 创建新框架 — 助记图
- 5.3 创建新的复杂元素
- 5.3.1 基于原语"基本图形"创建"空气冷却器"小部件
- 5.3.2 基于原语"元素组"创建最终组合小部件"冷却器"
- 5.3.3 将复杂元素添加到助记图
- 结论
- 链接
1 术语、定义和缩写 (Terms, definitions and abbreviations)
1.1 术语和定义 (Terms and definitions)
闭锁 (Blocking) — 工艺参数值的条件边界,超过该边界时执行预设算法以防止事故。在某些 TP(启动)模式下,根据规程,您可能需要禁用闭锁 — 解锁。
解锁 (Deblocking) — 在 TP 在某些模式下工作期间禁用闭锁的过程,该操作在规程中保留。解锁工艺参数是严格的报告操作,必须由操作人员按适当顺序执行!
复杂参数标签或信号的对象标签 (Complex parameter-tag or object-tag of the signal) — 作为复杂参数标签的数据源的详细信号,对于模拟量通常包含:
- 工程实际测量单位的信号值
- 测量单位名称
- 信号值物理变化的量程范围 — 最小和最大边界
- 报警边界 — 通常是警告和报警的上下边界
- 滤波参数
- 量程特性参数,确定真实性、表示格式等
数据模型 (Data model) — 在 SCADA 数据源层、协议或 PLC 中组织和结构化 TP 数据或其他自动化对象。默认情况下,它指的是 OpenSCADA 数据源层,其结构为"控制器对象"->“参数,级别1”->…->“参数,级别N”->“值属性 - 信号”。
通用存储 (Generic Storage) — OpenSCADA 的主存储(早期指向为".“,后来间接指向为”"),设计用于将配置文件和工作数据库组合在通用 OpenSCADA 数据的单一存储中。其中配置文件对于已存在的数据是主要的,即它们的更改,而所有新内容都在数据库中创建。
项目 (Project) — 该术语有多种含义,根据上下文可能意味着:
- OpenSCADA 项目(程序) — 您现在正在阅读其文档的自由软件
- 指定的配置和数据集文件夹 — 由 OpenSCADA 用户创建,其中配置存储在配置文件(必需)和一个或多个 DB 文件(可选,可能在线)中。例如 — 演示项目,TP “AGLKS” 模拟器。也就是说,项目的作者是程序的用户 — SCADA 系统的工程师开发人员或程序员
- VCA 项目 — 在模块 UI.VCAEngine 中通过 UI.Vision 创建的可视化和控制区域 (VCA) 的组件,包含一组 VCA 框架
Qt — 软件开发工具,特别是用于创建 QTStarter(基于 Qt 库的 OpenSCADA 模块启动器)、QTCfg(OpenSCADA 的 GUI 配置器)和 Vision(VCA 工作用户界面的编辑器和执行器)模块。它可能以 “QT” 的形式出现,这是 OpenSCADA 开发人员早期使用的 Qt 库条目。
确认 (Quietance) — 确认操作人员已注意到 TP 操作中违规事实的过程。该过程主要意味着采取措施消除违规并按下报警确认按钮。
报警设置 (Alarm setting) — 工艺参数值的条件边界,超过该边界意味着异常情况。通常提供以下边界:
- 上下报警边界 — 工艺参数报警值的边界
- 上下警告边界 — 警告边界 — 工艺参数超出工作范围的规范边界
- 故障 — 指向参数值超出工艺设备硬件边界。通常表征传感器故障、与传感器或 PLC 的通信通道中断
信号(相对于数据源)(Signal) — 数据源中的元素,以工艺参数或传感器的测量或计算值的形式。表示离散、整数或实数类型的标量,通常通过将参数量程缩放到整数维度来编码。信号的标识通常简单地索引或编码在交换协议值映射的地址上,有意义的名称出现在 SCADA 数据模型中。
信号报警 (Signalling) — 通知操作人员工艺过程或自动化设备工作违规的过程。通知方法可以是影响人类感官以引起注意的不同类型。通常提供以下类型的信号报警:
- 灯光信号 — 通常通过更改图形对象的颜色(闪烁)来执行新出现的事件,并通过设置静态报警颜色(红色和黄色)来执行已确认的事件
- 声音 — 在事件出现时通过声音信号输出执行。声音信号类型可以是单调的,也可以是带有违规信息的语音合成消息
VCA 框架 (VCA frame) — 派生的可视化元素,由基本元素组成,能够作为 VCA 项目页面的功能。
VCA 小部件 (VCA widget) — VCA 的可视化元素。
1.2 使用的缩写 (Used abbreviations)
- API — 应用程序编程接口,OpenSCADA 模块或 OpenSCADA 内部语言扩展的接口 — 用户 API
- AWP — 自动化工作站。通常是计算机系统的系统单元、显示器、鼠标"操纵器",有时带有键盘和其他外围设备,用于可视化工艺过程数据以及发出对 TP 的控制动作
- DAQ — 数据采集
- DB — 数据库
- DCON — 工业中使用的通信协议之一的名称
- EVAL — 错误值,用于动态数据和内部语言中,用于指定数据缺失或错误的特定值符号,对于不同的值类型是不同的,但它们可以透明地相互转换。作为 EVAL 在内部语言中的有用同义词,目前使用
null - FS — 文件系统
- GPL — 通用公共许可证,OpenSCADA 在其条件下分发和使用
- GUI — 图形用户界面
- HMI — 人机界面
- HTTP — 超文本传输协议
- MOD — 匹配对象设备。直接连接来自 TP 传感器信号的设备或 PLC 模块数量,用于从模拟到数字形式的转换以及反向转换。转换的目的是在 PLC 中进一步处理工艺参数
- ModBus — Modicon BUS 是一种串行通信协议,有 RTU 和 ASCII 变体,最初由 Modicon 于 1979 年发布,用于其 PLC。后来扩展为通过 TCP-IP 工作,此变体命名为 ModBus/TCP
- OS — 操作系统
- PLC — 可编程逻辑控制器
- QT — 查看术语列表中的 QT,它不是缩写
- SCADA — 监控与数据采集
- SO — 信号对象。缩写中的字母已重新排列以消除与缩写 OS(见上文)的混淆
- TP — 工艺过程。工艺过程的整个工艺设备复合体
- TUI — 终端(文本)用户界面
- UI — 用户界面
- VCA — 可视化控制区域
2 OpenSCADA 安装 (OpenSCADA installation)
安装 OpenSCADA 通常可以通过两种方式完成。第一种也是最简单的方式是获取您正在使用的 Linux 发行版的现成软件包。第二种是从源代码编译 OpenSCADA。
安装过程高度依赖于您使用的 Linux 发行版,本手册无法详尽描述。因此,您可能需要在其文档中深入了解所选 Linux 发行版的软件安装机制。如果用户没有这样的知识、技能和对 Linux 发行版的偏好,建议根据 OpenSCADA 软件包的可用性甚至软件包仓库来选择,这提供了最简单和最无故障的安装。
如果用户不仅在安装 OpenSCADA 方面遇到困难,而且在安装 Linux 发行版方面也遇到困难,那么第一次可以使用已安装并准备好工作和学习演示及全功能 OpenSCADA 的"live" Linux 发行版。如果这种快速可用的环境适合您,那么您可以停留在它上面并安装它。目前,基于 Debian 和 ALTLinux(已弃用)发行版的"live"构建可作为混合 CD/DVD/USB 映像在页面上获得:http://oscada.org/en/main/download/。有关更多信息,请参阅"如何创建 Live disk"文档。
2.1 从现成软件包安装 OpenSCADA (Installing OpenSCADA from ready-made packages)
从现成软件包安装又可以通过两种方式完成。第一种更简单,当 OpenSCADA 软件包已经存在于其自己的 OpenSCADA 软件包仓库或所用 Linux 发行版的官方附加仓库中时。安装这些软件包只需运行典型的发行版软件包管理程序,然后选择 OpenSCADA 软件包即可。除了简单安装外,软件包仓库通常还允许您简单地保持操作系统更新、安全和最新!第二种方法涉及手动获取和安装 OpenSCADA 软件包。
您可以在 OpenSCADA 官方网站的下载页面上检查 Linux 发行版或 OpenSCADA 仓库中 OpenSCADA 软件包的可用性,以及下载 OpenSCADA 软件包进行手动安装。在这里您还可以获取将 OpenSCADA 软件包仓库连接到 Linux 发行版软件包管理器的配置。
您必须直接下载软件包并连接到您使用的发行版版本的软件包仓库,否则在安装过程中可能会出现未解决的依赖问题。
2.1.1 添加软件包仓库并从中安装 OpenSCADA (Adding a package repository and installing OpenSCADA from that)
软件包仓库由 OpenSCADA 项目本身提供,其服务信息通常与软件包本身一起位于并在构建时自动更新,也就是说,这些仓库是最新的和首选的。尽管 OpenSCADA 软件包仍然可以在以下 Linux 发行版的仓库中找到:ALTLinux 和基于 Fedora 软件包库的发行版,但它们可能是旧的,因为目前不再从开发人员那里构建软件包到发行版仓库!
仓库地址和仓库管理器的配置可以在同一个 OpenSCADA 下载页面 (http://oscada.org/en/main/download/) 或以下示例中找到。
从仓库安装时,我们只选择 OpenSCADA 项目或模型配置的软件包。其他所有内容将根据依赖关系自动选择和安装。通常提供以下此类软件包:
- openscada-model-aglks, openscada-model-boiler — 工艺过程动态模拟器项目,共同执行演示 OpenSCADA 的功能
- openscada-vis-station — SCADA 站模板项目,通常在图形界面中运行,不带 Web
- openscada-server — SCADA 服务器模板项目,在后台运行 — 守护进程模式
- openscada-plc — PLC 模板项目,在后台运行 — 守护进程模式
- openscada — OpenSCADA 的典型完整安装
对于 Automation Linux 发行版和 LTS 软件包,后缀"-lts"添加到主软件包名称 — “openscada-lts”,因为仓库是一个,它包含两个分支的软件包:Work 和 LTS。
从仓库安装更新很简单,但特定于 Linux 发行版、窗口管理器或用于处理仓库和软件包的单独程序,因此我们将读者引导到其使用的发行版或程序的相应文档。以下是使用标准命令行工具添加仓库和安装 OpenSCADA 的简要介绍:
基于 APT 软件包管理器的软件包仓库(Debian、Ubuntu、ALTLinux) — 通过将下载的文件"openscada.list"放置到 /etc/apt/sources.list.d 文件夹或通过编辑 /etc/apt/sources.list 文件插入一行来添加:
- Debian(LTS 和 Work,Automation Linux 仓库):
deb http://ftp.oscada.org/Debian/12/openscada ./ - Ubuntu(LTS):
deb http://ftp.oscada.org/OpenSCADA/LTS/Ubuntu/22.04 ./ - Ubuntu(Work):
deb http://ftp.oscada.org/OpenSCADA/Work/Ubuntu/22.04 ./
安装:
apt-get update
apt-get purge openscada* # 在安装其他分支之前完全删除
apt-get install openscada-model-aglks # 安装 Work
apt-get install openscada-lts-model-aglks # 安装 LTS
添加仓库和软件包的签名验证密钥(真实性)(不是必需的,也不是在所有仓库中):
wget -P /etc/apt/trusted.gpg.d http://ftp.oscada.org/Misc/openscada-archive-keyring.asc
# 或在旧的 Debian 系统上
wget -O - http://ftp.oscada.org/Misc/pkgSignKey | sudo apt-key add -
2.1.2 手动安装 OpenSCADA 软件包 (Manual installation of the OpenSCADA packages)
要手动安装 OpenSCADA 软件包,您需要从官方网站或其他来源下载它们。通常可以下载两组软件包。
第一组由十二个软件包表示:
- openscada — 包含完整启动 OpenSCADA 所需的所有文件,包括所有模块
- openscada-server — 包含依赖项、脚本文件和服务器项目配置,以守护进程服务模式运行 OpenSCADA
- openscada-plc — 包含依赖项、脚本文件和 PLC 项目配置,以守护进程服务模式运行 OpenSCADA
- openscada-libdb-main — SQLite 数据库中用于数据采集等的主要 OpenSCADA 库
- openscada-libdb-vca — SQLite 数据库中的可视化组件库
- openscada-model-aglks — 动态实时模型"AGLKS"的 DB 和配置(演示:EN,UK,RU)
- openscada-model-boiler — 动态实时模型"Boiler"的 DB 和配置(EN,UK,RU)
- openscada-doc-en — OpenSCADA 英文离线文档
- openscada-doc-uk — OpenSCADA 乌克兰语离线文档
- openscada-doc-ru — OpenSCADA 俄语离线文档
- openscada-dev — 创建单独 OpenSCADA 模块的开发包
- openscada-dbg — 二进制文件调试信息的调试包,用于报告和搜索程序中的错误
2.2 从源代码安装构建 (Installing-building from the source texts)
当无法获取所选发行版的现成 OpenSCADA 软件包时,只能从源代码构建 OpenSCADA。此过程在"如何从源代码构建"文档中有详细描述。
3 初始配置和启动 (Initial configuration and starting)
对于本文档范围内的 OpenSCADA 主要任务,需要安装 “AGLKS” 模拟器的数据库包 — openscada-model-aglks,详细信息可在上一节中找到。当然,如果您使用 Live Disk,则已经拥有所需的一切。
这里不考虑从源代码安装构建 OpenSCADA,因为该任务对用户资质水平的要求远高于本文档的整体水平,并且由于初始配置可能存在差异,不可避免地会与手册不匹配。
已安装的 “AGLKS” 模拟器数据库不需要任何预设置。如果您想执行与基础配置不同的特定配置,请使用程序手册。在此过程中,您可能需要有关典型 OpenSCADA 账户和密码的信息(与操作系统账户无关),尽管模拟器和新创建的配置从特权用户启动,您可以轻松更改其中任何一个:
- 超级用户 (root / Superuser),密码 — “openscada”
- 用户 (user),密码 — “user”
- 个人用户示例 (roman),密码 — “roman”
基于 “AGLKS” 模拟器数据库的 OpenSCADA 演示与商业软件供应商通常提供的演示不同,后者通过限制功能来展示可能性但排除或复杂化正常操作。OpenSCADA 的演示是功能齐全的程序,提供各种组件的实现和配置示例。
6台气体压缩机压缩站的动态模拟器是演示数据库的基础,需要大量资源,即频率超过 1 GHz (x86) 的处理器和高达 200 MB 的内存。
配置 SCADA 系统以实现"上层"功能 — 操作员 AWP 的一般过程可分为两个阶段:
- 配置数据源,创建这些源参数的数据库 (DB),创建计算逻辑参数并设置历史记录
- 通过创建操作员界面来形成 TP 数据的可视化表示,形式包括:助记图、图形组、轮廓组、文档等
因此,我们的最终目标和本文档的目的是构建一个完整的本地 SCADA 站配置,连接服务器并基于此演示数据库模拟数据源(图3)。

图 3. 演示数据库中 SCADA 站和服务器与数据源的简单统一连接
3.1 总体概述 (General overview)
从桌面环境菜单的"图形"部分启动 OpenSCADA 的本地执行,选择"基于 OpenSCADA 系统的模拟器 ‘AGLKS’"项目,带有特征图标(图3.1.1)。

图 3.1.1. 用于本地启动 OpenSCADA 演示的桌面环境菜单项
也可以从控制台通过以下命令进行本地启动:
openscada_AGLKS
启动后,我们将获得 OpenSCADA 图形配置器窗口 — QTCfg(图3.1.2),打开根页面。

图 3.1.2. OpenSCADA 程序配置器 — QTCfg,根页面
OpenSCADA 的程序配置器是配置 OpenSCADA 任何组件的主要且充分的工具。与 OpenSCADA 的许多其他组件一样,配置器也是作为模块实现的。除了 QTCfg 配置器之外,还有其他配置器可以执行相同的功能,但基于不同的技术实现。例如,Web 配置器:WebCfgD 和 WebCfg。
接下来我们将仅在 QTCfg 配置器中概述所有操作,尽管所有这些操作也可以在其他配置器中完成。
配置器窗口界面的结构可以通过链接详细了解。现在更重要的是概述 OpenSCADA 的所有可用界面,因此点击工具栏顶部倒数第二个图标,这将打开用户界面开发窗口(图3.1.3)。

图 3.1.3. 用户界面开发窗口
然后我们可以启动执行 “AGLKS” 项目,为此在项目列表中选择它并运行,通过点击工具栏左侧第一个图标或在弹出菜单中。结果将是用户最终界面窗口 — 操作员界面(图3.1.4)。

图 3.1.4. "AGLKS" 项目的用户最终界面窗口
构建和执行用户界面由"用户界面"子系统的 Vision 模块实现。除了此模块外,还可以访问其他可视化模块,例如,OpenSCADA 提供 WebVision 模块,它允许通过 Web 技术和标准 Web 浏览器执行先前在"Vision"界面模块中开发的项目。
要访问图3中所需主机的 Web 界面,您可以依次尝试以下 URL:http://localhost:10002、http://localhost:10003、http://localhost:10004。
接下来我们将仅在"Vision"模块界面中概述所有操作。
这样我们就运行了 OpenSCADA 演示并熟悉了主要工具集。接下来我们将使用它们来配置 OpenSCADA 以执行"上层"功能 — AWP 操作员和其他任务。
通过相应的"文件"菜单项关闭程序,这是必须的,否则其后续后台启动将无法打开已被此程序占用的端口。
3.2 后台和远程执行 — 服务器、PLC 执行环境和远程开发 (Background and remote execution)
所有控制台操作都可以在控制台终端中完成,例如,Live Disk 环境中的 “konsole” 程序,在 Alt+F2 启动对话框中。这里的 “{HOME}” 文件夹是 “/home/user”。
OpenSCADA 项目在单独文件夹中的组织使得在服务空间中运行现成项目变得容易 — 后台执行,以及进一步更新和维护此项目而无需直接远程控制。实际上,您可以通过将项目文件夹保存在用户工作文件夹(通常是"{HOME}/.openscada")中来本地开发项目,而要在服务空间中运行,只需复制或打包,传输到远程工作设备并解压到系统工作文件夹(默认"/usr/share/openscada")。
Linux 中程序的服务后台执行由适当生成的脚本提供服务,这些脚本位于"/etc/init.d"文件夹中,并且必须为在服务空间中运行的每个 OpenSCADA 项目单独设置。为了简化并消除创建自己脚本的需要,OpenSCADA 为标准情况配置文件提供了适当的脚本,这些脚本通常随 openscada-server 和 openscada-plc 软件包(LTS 为 openscada-lts-server 和 openscada-lts-plc)一起提供。
因此,要在服务空间中启动 AGLKS 库项目,我们:
- 安装软件包
openscada-model-aglks(LTS 为openscada-lts-model-aglks)和openscada-server(LTS 为openscada-lts-server),如果它们尚未安装且不是 Live Disk 或从磁盘安装的 Linux Automation 环境 - 启动项目"AGLKS",以在用户工作文件夹中获取其文件夹
- 将项目"AGLKS"文件夹复制到系统工作文件夹并重命名为"server",之前停止项目"server"的后台执行并删除其项目文件夹;例如,从控制台这样操作:
# 以超级用户身份连接
su -
# ... 对于 live disk 和一些其他 Linux 环境
sudo bash
# 停止之前服务器配置的执行并删除其文件夹
systemctl stop openscada-server.service # 对于 SystemD
service openscada-server stop # 对于 SysVinit
rm -R /usr/share/openscada/server
# ... 对于 LTS
systemctl stop openscada-lts-server.service # 对于 SystemD
service openscada-lts-server stop # 对于 SysVinit
rm -R /usr/share/openscada/server
# 从用户主文件夹 "{HOME}" 复制项目 "AGLKS" 并重命名为 "server"
cp -R {HOME}/.openscada/AGLKS /usr/share/openscada/server
# 启动服务器,现在是项目 "AGLKS"
systemctl start openscada-server.service # 对于 SystemD
service openscada-server start # 对于 SysVinit
# ... 对于 LTS
systemctl start openscada-lts-server.service # 对于 SystemD
service openscada-lts-server start # 对于 SysVinit
注意,在本地您可以不复制整个项目文件夹,而只创建指向它的符号链接,但您会面临在共享文件夹和数据上双重项目执行的风险,这会导致一个或两个执行崩溃!
服务后台环境中的项目执行与桌面用户环境的区别实际上只有一个,当然除了缺少本地图形界面外,就是后台没有区域设置,即界面语言将是英语。这可以通过更改或添加配置参数 <prm id="Lang">uk_UA.UTF-8</prm> 到后台项目的 oscada.xml 文件的 section-tag “station” 来简单修复。
这样您将获得在后台工作的演示数据库("AGLKS"项目),但是,在我们尝试连接到此配置之前,我们不会看到它,如下所述。现在,每次启动计算机时,它都将以这种方式启动并在后台运行。一般来说,这是启动和执行服务器配置、PLC 环境和单板 PC(类似于 RaspberryPi)的方式。
3.3 创建您自己的项目 (Your own project creation)
在 OpenSCADA 项目管理器窗口(图3.3)中,我们将创建自己的项目,可以从桌面环境菜单的"图形"部分调用,通用项目"Open SCADA system"带有特征图标(图3.1.1)或从控制台终端的命令:
openscada

图 3.3. OpenSCADA 项目管理器窗口
在此窗口中,我们还可以检查服务器和演示配置的后台执行。
按下 “Create-update project”(创建-更新项目) 按钮并输入新项目的名称 — “Start”。
当您想检查自己是否存在某些问题或其他原因时,您可以下载已准备好的 OpenSCADA “Start” 项目的备份,并通过同一窗口图3.3中的上下文菜单恢复它。您必须将备份文件放在 OpenSCADA 用户项目目录中 — “~/.openscada/”,例如从控制台终端:
wget http://ftp.oscada.org/OpenSCADA/Projects/Start_QuickStart.backup -P ~/.openscada/
3.3.1 连接和使用远程及后台配置 (Connecting and using remote and background configurations)
现在我们可以尝试远程连接到后台演示项目,查看其配置并从可视化服务器启动演示项目进行本地执行。
在"传输"页面(图3.3.1.1)的 “User and System”(用户和系统) 模式下,我们将创建到后台演示 “AGLKS” 的连接作为 OpenSCADA 站。指定传输 “Sockets”,地址 “localhost”,用户 “root” 和密码 “openscada”。在上下文菜单命令更新配置器树后,我们应该获得此连接的新根项目,我们可以从此配置器控制远程后台站。
当远程站项目出现但显示缺少连接时,则您在上述配置中犯了错误或远程站不可用,在我们的情况下这只能意味着它没有在后台工作,因此返回相应部分并重复那里的操作。
当一切正常工作时,我们将通过点击上方工具栏左侧第二个图标来保存此配置,因为我们将继续使用它来直接从守护进程项目(作为 PLC)传输数据采集参数。

图 3.3.1.1. OpenSCADA 外部主机的"传输"页面和远程后台站的 OpenSCADA 树浏览
在 UI.Vision 可视化器的配置页面(图3.3.1.2)上,我们将选择:
- VCA 引擎站 — “AGLKS”
- 启动用户 — 留空
- 此远程站的用户密码 — 留空
- 自动执行的项目 — 也留空,因为我们想看到远程开发的可能性

图 3.3.1.2. UI.Vision 可视化器的配置页面
下次通过上方工具栏倒数第二个图标启动 UI.Vision 模块应该会将可视化开发环境连接到后台守护进程项目的可视化项目。在那里您可以执行远程开发(图3.3.1.3)并从此可视化服务器运行项目执行(图3.3.1.4)。

图 3.3.1.3. 可视化服务器 "AGLKS" 的 UI.Vision 远程开发屏幕

图 3.3.1.4. 可视化服务器 "AGLKS" 的 UI.Vision 远程执行屏幕
此远程连接到可视化服务器的配置不需要保存,配置字段"VCA 引擎站"(图3.3.1.2)应返回到 “”,站用户设置为 “root” — 然后保存。
远程连接和开发的能力有时是开发或纠正的唯一方式,不仅适用于仅具有 WEB 界面的服务器配置,还适用于具有本地可视化的配置,当本地环境本身不适合或受限于执行 UI.Vision 模块的开发环境时,例如智能手机、平板电脑和其他小屏幕移动设备,专门使用触摸输入(Android)或限制如无法打开系统虚拟键盘(Nokia N9)。这种远程开发大多可以在执行项目的过程中完成 — 热开发,这对于 Web 界面和仅在执行窗口中运行的本地界面特别相关。
3.3.2 连接标准 OpenSCADA 库 (Connecting the standard OpenSCADA libraries)
新创建的 OpenSCADA 项目不包含任何特定配置,实际上它是空的,并为用户提供在本地 SQLite 数据库文件"St.db"中创建新配置,该文件位于项目自己的同名目录中。使用 OpenSCADA 对象模型 API 的函数库和图形元素库以及其他 OpenSCADA 库可以更轻松地创建 SCADA 系统的复杂项目。要使用 OpenSCADA 库,您需要存储库的数据库文件:在数据库模块"SQLite"的对象中连接添加(图3.3.2.1),安装选择地址并指定数据库编码为 “UTF-8”(图3.3.2.2)。
之后,或者当已经有库数据库条目时,您需要激活需要的条目,继续阅读。

图 3.3.2.1. 添加 DB "SQLite" 对象

图 3.3.2.2. OpenSCADA 库的 DB "SQLite" 对象
OpenSCADA 发行版附带了许多"SQLite"数据库文件形式的库(表3.3.2),当启动创建用户项目时,这些库位于"LibsDB/"目录中。根据此列表,我们在数据库模块"SQLite"的对象中为需要的库添加或使用现成条目,设置"To enable"标志并保存。接下来,要下载库的内容,您可以启用数据库并点击"Load the program from this DB"按钮,但是,加载时,许多新对象未启用,因此更简单的是退出新项目并再次运行它。
表 3.3.2. 发行版中包含的 OpenSCADA 库
| 标识符 (Identifier) | 名称 (Name) | 地址 (Address) | 语言/字符集 | 描述 |
|---|---|---|---|---|
| OscadaLibs | OpenSCADA libraries | LibsDB/OscadaLibs.db | EN,UK,RU/UTF-8 | 数据源、服务和处理的库 |
| vcaBase | VCA: Main libraries | LibsDB/vcaBase.db | EN,UK,RU/UTF-8 | OpenSCADA 模块 UI.VCAEngine 的图形元素库 |
| vcaTest | VCA: Tests | LibsDB/vcaTest.db | EN,UK,RU/UTF-8 | 图形元素测试库 |
| vcaElectroEls | VCA: Electrical elements library | LibsDB/vcaElectroEls.db | EN,UK,RU/UTF-8 | 提供电气变电站和发电站用户界面的助记元素库 |
添加 OpenSCADA 库后,您将获得一个准备好添加数据源、定义其历史记录和形成您自己的 SCADA 系统项目界面的环境。
4 使用数据源 (Working with data sources)
任何 SCADA 系统的主要功能是使用实时数据源,即轮询可编程逻辑控制器 (PLC) 和简单的 MOD 模块。有关更多详细信息,请参阅"OpenSCADA 中的数据采集"文档。
对给定数据源的支持取决于源提供其数据的协议或 API,以及 OpenSCADA 中"数据采集"子系统模块对该协议-API 的可用性,或通过 DAQ 模板在逻辑级别上的实现。"数据采集"子系统模块的完整列表及其文档可以在这里找到,DAQ 模板的通用列表可以在这里找到。
来自源的数据进一步处理、归档并用于 TP 操作员的可视化表示。
4.1 从 TP 设备采集数据 (Data acquisition from the TP device)
作为示例,让我们检查并创建空气冷却器设备的采集。后台演示数据库作为 PLC 和数据源,包含具有六台压缩机的压缩站的实时模型。压缩站 CM101 的两个空气冷却器设备 AT101_1 和 AT101_2 的数据可通过 10502 端口上的 ModBus/TCP 协议获得(默认情况下,如果有权限打开,这是端口 502)。
我们将创建一个控制器对象,用于通过 ModBus/TCP 协议采集并获取此数据。因此,我们实际上实现了采集真实数据的任务,因为我们的配置与使用真实外部设备的区别仅在于其地址和 ModBus 寄存器的地址,这也可能是另一个交互的物理接口 — ModBus 协议的变体。此连接也是基于 OpenSCADA 实现数据源环境 (PLC) 能力的一个明显示例。
要通过 ModBus 协议在 OpenSCADA 中采集数据,提供了"数据采集"子系统的 ModBus 模块。要在配置器中添加新的控制器对象,打开 ModBus 模块页面 “Start”->“Data Acquisition”->“Module”->“ModBus” 并在 “ModBus” 项目的上下文菜单中按 “Add”(添加)(图4.1.1)。

图 4.1.1. 在"数据采集"子系统的 "ModBus" 模块中添加控制器对象
结果将出现一个对话框(图4.1.2),要求您输入新控制器对象的标识符和名称。OpenSCADA 对象的标识符限制为 20 个字符,建议使用英文字母和数字输入。此外,最好以字母开头,这将简化其在内部过程中的使用。OpenSCADA 对象的名称限制为 50 个字符,可以是任何字符。名称通常用于显示,当名称为空时,将使用标识符。以后我们可以在对象配置中更改名称,但标识符不能直接更改;但是,可以剪切对象(Ctrl+X)然后粘贴(Ctrl+V),并重命名它。根据前面的说明输入 ID CM101,名称 “CM 101” — “CM101 (CM 101)”。

图 4.1.2. 指定新对象标识符和名称的对话框
确认后我们将获得新的控制器对象。让我们在配置器中选择它并熟悉设置(图4.1.3)。

图 4.1.3. ModBus 模块控制器对象设置的主选项卡
控制器对象的配置通常特定于不同类型的数据源和协议。有关 ModBus 模块控制器对象设置的详细信息,请参阅链接。我们将考虑此模块的一般和关键设置。
在配置与控制器的通信之前,需要从该控制器的文档中了解其网络接口和协议的设置,以及在使用 ModBus 的情况下,获取控制器外部和内部信号分配到 ModBus 寄存器编号的表 — 寄存器映射。
使用控制器对象页面,在"状态"部分,您可以首先估计控制器对象的当前状态以及与物理控制器通信的实际状态,并快速更改它们。即,"状态"字段包含错误代码和当前与控制器通信状态的文本描述。在我们的情况下,控制器对象被禁用。我们可以通过在相应字段前设置标志来启用和运行它。启用的控制器对象初始化参数,运行的控制器对象还会启动采集任务(控制器对象的单独线程),并提供通过参数属性向控制器传输数据的能力。"存储"字段指示存储对象配置的存储。我们将安排存储在通用存储中,即保持此字段默认。
在"配置"部分,直接包含控制器对象的配置。设置以下内容,其他保持不变:
- “To enable”(启用)和 “To start”(启动) 指示程序启动时将控制器对象移动到什么状态 — 设置两个字段
- “Acquisition schedule”(采集计划) 包含运行数据采集任务的调度程序配置。您可以从工具提示中获取此字段的配置格式描述。单个数字表示执行的周期性,以秒为单位 — 我们将指定一秒
- “ModBus protocol”(ModBus 协议) 指 ModBus 协议的变体。协议的可能变体是 “TCP”、“RTU” 和 “ASCII”。目前我们对 TCP 变体感兴趣,所以保持原样。在通过串行接口与控制器通信的情况下,必须安装 “RTU” 和 “ASCII” 协议,通常是 “RS-485”
- “Transport address”(传输地址) 指示用于连接到控制器的"传输"子系统的传出传输。在 “TCP” 变体的情况下,我们需要 Sockets 模块中的传输,在 “RTU”、“ASCII” 变体和串行接口的情况下,我们需要 Serial 模块中的传输。关于在 “Sockets” 和 “Serial” 中创建传出传输将在下面详细说明
- “Destination node”(目标节点) 指示 ModBus 网络中数据源或控制器的节点。在我们的情况下应该是 1
- “Merging of the data fragments”(数据片段合并) 启用将不相邻的寄存器片段合并到一个请求块中,最多到指定的最大字节数,而不是生成单独的查询,从而允许您减少总采集时间 — 设置此选项
通过点击工具栏左侧第二个图标将我们的更改保存到存储中。
现在,以与控制器对象相同的方式,让我们在 “Sockets” 模块中创建传出传输(“Start”->“Transports”->“Sockets”),通过上下文菜单(图4.1.4)并将传输命名为与控制器对象相同的 “CM101 (CM 101)”。请注意,在输入标识符和名称的对话框(图4.1.2)的"项目类型"字段中,您必须选择 “Output transport”(输出传输)!

图 4.1.4. 在"传输"子系统的 "Sockets" 模块中添加输出传输
输出传输的配置页面如图4.1.5所示。此页面还包含状态和操作控制部分。在"状态"字段中包含传输当前状态的文本描述。我们可以通过在相应字段前勾选复选框来连接它。"存储"字段指示对象配置存储 — 我们将使用"通用存储"。

图 4.1.5. "传输"子系统 "Sockets" 模块的输出传输配置页面
"配置"部分直接包含传输对象的主要配置,让我们设置以下内容:
- “Address”(地址) 指定:类型(可选)、地址和与远程站的连接模式。您可以在工具提示中熟悉记录格式 — 将此字段设置为值 “localhost:10502”
其他类型的传输的创建方式与 “Sockets” 考虑的方法类似,它们的配置通常仅在地址格式和"附加"选项卡中的超时方面有所不同。对于转换器 USB->Serial,Modem,您可以在操作系统中了解该地址,例如通过控制台命令 dmesg 在连接后立即执行。
让我们保存传输对象并返回到控制器对象的配置字段"传输地址",选择地址 “Sockets.CM101”。目前 OpenSCADA 支持大多数数据源类型的控制器对象直接在"传输地址"字段中指定所有传输参数,而无需单独创建任何传输对象。即在字段中指向 “Sockets.CM101:localhost:10502” 将自动在 Sockets 输出传输中创建具有指定地址的 CM101。
控制器对象的配置完成 — 通过设置 “Enabled” 标志启用它。下一步是配置和选择您需要从控制器查询的数据。此设置通过创建控制器的参数来完成。参数允许您描述从控制器获取的数据列表,并将它们传输到 OpenSCADA 的环境 — 数据模型。
要添加新参数,我们打开控制器对象的页面,在 “CM 101” 项目的弹出菜单中点击 “Add”(添加) — 我们将命名为 “AT101_1 (AT 101_1)”。
获得的参数的配置页面如图4.1.6所示。此页面包含状态和操作控制部分。在"类型"字段中包含参数类型,在这种情况下是类型 “Standard”(标准)。我们启用此参数,通过在相应字段前设置标志。启用的参数参与与控制器的交换过程。

图 4.1.6. "ModBUS" 控制器参数的配置页面
"配置"部分直接包含参数的配置。设置以下内容,其他保持不变:
- “To enable”(启用) 指示程序启动时需要将对象转移到"启用"模式 — 设置此字段
- “Attributes list”(属性列表) 包含相对于 ModBus 寄存器和位的参数属性配置,您可以在工具提示中熟悉记录格式 — 将此文本字段的内容设置为:
R:100:r:Ti:T input
R:101:r:To:T output
R:102:rw:Cw:Productivity
以同样的方式我们将创建,或从 AT101_1 复制,第二个参数 “AT101_2 (AT 101_2)” — 其属性列表我们将设置为:
R:103:r:Ti:T input
R:104:r:To:T output
R:105:rw:Cw:Productivity
保存两个参数。现在我们可以启动控制器对象进行采集,为此我们将返回其页面,在"状态"部分设置 “Running”(运行)标志。如果我们没有遗漏任何内容,交换将成功启动,在"状态"字段中我们将获得类似于图4.1.7所示的呈现。

图 4.1.7. 成功与物理控制器交换时的控制器对象页面
在与物理控制器成功交换的情况下,我们还在 OpenSCADA 的基础设施 — 数据模型中获得了控制器的描述数据。您可以在我们的参数 AT101_1(图4.1.8)和 AT101_2 的"属性"选项卡中查看这些数据。由于采集是定期和周期性地每秒进行一次,因此我们可以通过点击工具栏中的"刷新当前页面"按钮来观察它们的变化。

图 4.1.8. AT101_1 参数描述属性的页面
至此,数据采集的配置被认为已完成。
4.2 处理接收的 TP 数据 (Processing received data of the TP)
通常会出现从数据源获取的输入数据是"原始"的情况,即未准备好或不便于可视化表示,因此需要进行此准备。在我们的示例中,我们获得的数据以控制器内部量程的代码形式出现,我们的任务是从获得的数据计算实际值。OpenSCADA 中的数据处理可以直接在可视化中完成,也可以在 DAQ 子系统中完成。但是,将可视化过程和输入数据处理混合会混淆配置,阻止真实数据的历史记录,使生成的可视化形状不太适合重用,并增加可视化线程的负载,从而降低其整体反应。因此,我们将在 DAQ 子系统中准备数据。
DAQ 子系统中用于获取真实数据的计算主要通过逻辑级别模块 LogicLev 和 DAQ 子系统的参数模板完成。ModBus 模块是可以直接在其中进行此类计算的情况,我们将在下面看到。要熟悉逻辑级别概念,您可以在这里了解。
要执行计算,在逻辑级别模块中,您必须首先创建我们项目的模板库和其中的 DAQ 子系统参数模板。要创建模板库,请转到 DAQ 子系统的页面,通过上下文菜单创建模板库 start (Start)。获得的模板库对象的配置页面(图4.2.1)包含状态和操作控制的"状态"部分,以及仅包含默认配置字段且将保持不变的"配置"部分。总的来说我们有:
"状态"部分:
- 标记库可访问 — 在相应字段前设置标志
- 指定存储 — 保留项目的"通用存储"
- 可以控制最后修改的日期
保存对象。

图 4.2.1. 模板库对象的配置页面
要创建模板,打开新创建的模板库页面 “Start”->“Data Acquisition”->“Templates library”->“Start”,通过上下文菜单创建模板对象 airCooler (Air cooler)。获得的模板对象的配置页面(图4.2.2)包含状态和操作控制的"状态"部分,以及仅包含默认配置字段且将保持不变的"配置"部分。总的来说我们有:
"状态"部分:
- 标记模板可访问 — 在相应字段前设置标志,可访问的模板可以连接到数据采集参数,参数将基于此模板进行计算
- 可以控制使用此模板进行计算的对象数量
- 可以控制最后修改的日期
保存对象。

图 4.2.2. 模板对象的配置页面
数据采集参数模板的主要配置和形成在模板的 “IO” 选项卡(图4.2.3)中完成。模板形成过程的详细描述可以在链接中找到。
在模板中,我们将为输入创建两个 IO(“TiCod”、“ToCod”),为输出创建两个(“Ti”、“To”),以及一个透明的(“Cw”)。对于 IO “TiCod”、“ToCod” 和 “Cw”,我们将在 Link 中设置"配置"标志,这将允许它们与"原始"源链接。将为 IO “Ti” 和 “To” 设置"属性"标志为 Read only,为 “Cw” 设置为 Full access — 以在数据采集参数中形成三个属性:两个只读和一个完全访问。
设置程序语言为 JavaLikeCalc.JavaScript,程序为:
Ti = 150*TiCod/65536;
To = 100*ToCod/65536;

图 4.2.3. 模板对象配置页面的 "IO" 选项卡
保存获得的模板并设置可访问性标志(图4.2.2)。
现在我们将在 DAQ 子系统的 LogicLev 模块中创建控制器和参数的对象。LogicLev 控制器对象及其参数的创建方式与之前在 ModBus 模块中在页面 “Start”->“Data Acquisition”->“Module”->“Logical Level” 上创建的方式相同。我们将它们命名为与 ModBus 模块的对象相同。
LogicLev 模块的控制器对象(图4.2.4)没有特定设置,默认设置可以不触碰,除了"计算计划"字段,我们将其设置为 1(一)秒。在添加参数之前,您必须打开控制器对象 — 设置 “Enabled” 标志。

图 4.2.4. LogicLev 模块控制器对象的主配置选项卡
LogicLev 模块控制器对象的参数(图4.2.5)具有特定设置"类型",您需要在其中设置 “Logical”(逻辑),并在"参数模板"字段中选择模板地址,即我们刚刚创建的模板。

图 4.2.5. LogicLev 控制器对象参数的配置页面
除了参数的基本配置外,还需要配置附加的模板(图4.2.6)。模板的配置选项卡出现在参数的"启用"模式下。要启用参数,可以通过先前启用控制器对象来实现。"显示属性"标志允许您分开设置每个链接(图4.2.7)。由于我们在模板中强制描述了链接格式为 “Parameter|Ti”,我们可以通过简单地指向 ModBus 控制器对象中参数的地址来建立所有三个链接。在相应的参数中指定选择地址 “ModBus.CM101.AT101_1” 和 “ModBus.CM101.AT101_2”。
应该注意的是,OpenSCADA 中所有用于输入对象地址的字段都有一个选择地址的机制。此机制涉及逐元素选择,在此过程中发生深度移动。例如,在地址 “ModBus.CM101.AT101_1” 设置开始时,我们将有一个选择数据源类型的选项,其中将有 “ModBus”;选择后,ModBus 模块的控制器对象将添加到可用选择元素列表中,其中将有 “ModBus.CM101”;选择元素 “ModBus.CM101” 将根据对象层次结构添加控制器参数等,直到最终元素。为了能够返回到上一级,当前地址值的所有更高级别的元素都插入到选择列表中。

图 4.2.6. LogicLev 控制器参数页面的"模板配置"选项卡

图 4.2.7. LogicLev 控制器参数页面"模板配置"选项卡的属性配置
让我们保存创建的控制器和参数对象,之后我们将通过在"状态"部分设置 “Running” 标志来启动控制器对象。如果我们没有遗漏什么,计算将成功启动,在"状态"中我们将获得类似于图4.2.8的内容。

图 4.2.8. LogicLev 模块中控制器对象计算成功时的页面
在参数中成功处理模板代码的情况下,我们将在 OpenSCADA 的基础设施(数据模型)中获得处理后的数据。您可以在我们的参数 AT101_1(图4.2.9)和 AT101_2 的"属性"选项卡中查看这些数据。

图 4.2.9. LogicLev 模块 AT101_1 参数的属性页面
至此,数据处理的配置被认为已完成。
4.3 信号的复杂对象标签 (Complex object-tag of the signal)
前面的章节描述了将数据源作为设备对象连接的机制 — “空气冷却器”,这涉及将所有信号组合在数据源参数的一个对象中。然而,对于大型自动化更常见的方法是围绕单个信号形成参数对象,例如 — “冷却器 AT101_1 输出温度 (TE1314_1)”,这些通常被称为标签。
围绕信号创建参数对象允许将其描述形式化为模拟和数字信号的模板,通过包含所有必要的处理、报警和其他特征信息。对于类型化模拟和数字信号的简单配置,OpenSCADA 库中有参数模板,许多可视化表示形状都适合直接与这些参数一起工作和绑定,而无需深入了解属性的详细信息。
此外,统一模板提供了通过在"输入处理过程"字段中定义内部语言 JavaLikeCalc 的过程来深度处理输入信号的可能性。甚至更多,在此过程中可以使用辅助动态属性扩展参数的模板数据模型,实际上将设备对象的元素"挂"在其主信号上;即无需为此创建额外的模板。例如,用于附加手动设置输入的属性:
if(ctx.f_start == null) {
ctx.f_start = true;
this.attrAdd("setIn", "Input set", "real");
this.setIn.set(0);
}
in = this.setIn.get();
通常,对于基于模板创建参数,使用 LogicLev 模块,如前一节所述。但是,包括 ModBus 在内的许多模块提供了立即基于模板创建逻辑参数的能力。我们将通过打开之前创建的 ModBus 控制器对象的页面并在配置器中的 “CM 101” 菜单项上点击 “Add” 按钮来添加新参数。
我们将模拟参数命名为 — TE1314_1 (TE1314_1)(图4.3.1)。参数类型设置为 “Logical”(逻辑),参数模板选择 “base.anUnif”,描述设置为 “Output temperature AT101_1”,设置 “To enable” 和 “Enabled” 标志。接下来,我们需要配置:
在出现的"模板配置"选项卡中配置参数模板(图4.3.2):
- “Input”(输入)字段设置为此参数的 ModBus 寄存器地址值 — “R:101”
- “Maximum module scale”(最大模块量程)字段设置为值 — 65535,对应于 100 °C
"属性"选项卡(图4.3.3):
- “Dimension”(量纲)设置为 — “deg. C”
- “Scale: minimum”(量程:最小值)设置为 — 0
- “Scale: maximum”(量程:最大值)设置为 — 100
- “Border up alarm”(上报警边界)设置为 — 40
- “Border up warning”(上警告边界)设置为 — 30
保存对象。

图 4.3.1. ModBus 模块逻辑参数 TE1314_1 的页面

图 4.3.2. ModBus 模块参数 TE1314_1 的"模板配置"选项卡

图 4.3.3. ModBus 模块参数 TE1314_1 的"属性"选项卡
我们将离散参数命名为 — CB102 (CB102)。参数类型设置为 “Logical”(逻辑),参数模板选择 “base.digitBlockUnif”,设置 “To enable” 和 “Enabled” 标志。接下来,我们需要配置:
在出现的"模板配置"选项卡中配置参数模板(图4.3.4):
- “Command ‘Open’”("打开"命令)字段设置为参数的 ModBus 位地址值 — “C💯rw”
- “State ‘Opened’”("已打开"状态)字段设置为 ModBus 位地址值 — “C:101”
- “State ‘Closed’”("已关闭"状态)字段设置为 ModBus 位地址值 — “C:102”
- “Time to hold the command”(保持命令时间)字段设置为 — 0,因为命令不是脉冲式的
"属性"选项卡(图4.3.5)— 确保命令和状态的可用性。
保存对象。

图 4.3.4. ModBus 模块参数 CB102 的"模板配置"选项卡

图 4.3.5. ModBus 模块参数 CB102 的"属性"选项卡
4.4 获取 OpenSCADA 的现成数据 — 网关 (Getting for ready data of OpenSCADA — gateway)
在熟悉了前面章节中描述的获取数据的典型机制后,您必须已经想象到获取和处理数据的总工作量,即 — 在 SCADA 系统数据模型中形式化和获取这些数据。如果在这里添加在 PLC 级别创建这些数据的任务 — 自由可编程 PLC 的数据模型,以及将其转换为交换协议的数据模型,那么您应该注意到这里有三重数据转换。关于协议数据模型的转换 — 序列化,这是由通信通道的物理特性决定的,并且是自动执行的,但 PLC 数据模型和 SCADA 系统数据模型的形成分别由 PLC 程序员和 SCADA 系统程序员执行。此外,这项工作有很多共同点,特别是如果由一个人或组织执行,因此应该有统一的机制。
在 PLC 和 SCADA 来源不同的情况下,比交换协议层更大的统一很难实现。另一方面,PLC 和 SCADA 数据模型的深度统一可以同时由 PLC 和 SCADA 制造商找到,然而,这只会加强他们的垄断地位,实际上通过解决方案的总体成本降低了统一的好处。
OpenSCADA 通过与 PLC 的关联提供了这种统一的可能性。这种关联只能为完全开放的 PLC 提供,它们安装了开源软件,因此您可以安装 OpenSCADA 作为 PLC 执行环境。作为执行环境,OpenSCADA 也可以通过 ModBus 等标准协议提供 PLC 数据,并且为了直接获取这些数据而无需在 SCADA 系统端对其进行任何操作,提供了 DAQGate 模块,它实际上将这些模型结合在一起。即 PLC 程序员(也是 SCADA 程序员)形成 PLC 数据模型,在 SCADA 级别它已经作为现成的使用,这完全消除了获取、处理和形成 SCADA 系统数据模型的阶段和工作。此外:
- 消除了 PLC 和 SCADA 数据模型在更改时的差异
- 配置数据在逻辑上专门存储在与其相关的 PLC 上
- 违规和其他消息在主要来源 — PLC 上生成,入侵消息 — 操作员的操作也发送到 PLC
- 提供了在 PLC 上完全存储归档历史的机制,以及作为补偿与 SCADA 通信丢失的一部分,特别是对于不良和无线通信
为了演示和熟悉,我们将在这里创建 DAQGate 模块的控制器对象来传输我们虚拟 PLC 的数据。它的创建方式与之前在 ModBus 和 LogicLev 模块中在页面 “Start”->“Data Acquisition”->“Module”->“Data sources gate” 上创建的控制器对象相同,并将其命名为 “AGLKS”。
DAQGate 模块的控制器对象(图4.4.1)具有以下特定设置,我们必须完成:
- “Remote station”(远程站) — 我们将选择之前建立的连接的远程站 “AGLKS”
- 启用控制器对象
- “List of the remote controller objects and parameters”(远程控制器对象和参数列表) — 在"参数树"字段中选择 “LogicLev.gen”,然后选择此列表上方的 “<>”
- 启动控制器对象

图 4.4.1. DAQGate 模块控制器对象的主配置选项卡
如果一切操作正确,所选控制器的参数将自动创建,我们可以在"属性"选项卡中查看它们的数据(图4.4.2)。

图 4.4.2. DAQGate 模块参数的"属性"选项卡
4.5 TP 数据的归档历史 (Archiving-history of the TP data)
早期获得的数据被认为是当前的,即那些定期更新并表征当前时间 TP 参数值的数据。同时,当它们被当前值覆盖时,先前读取的值会丢失,即它们的历史记录丢失。在许多任务中,需要 TP 参数读取值的归档历史,为此 OpenSCADA 提供了"归档-历史"子系统,我们需要在其中创建值和消息(用于违规)的归档器,并指定我们的参数以归档其值。
如果您不创建归档器并且不将我们的参数连接到它们的归档,那么在趋势图上您将无法获得超过其总宽度的历史记录,并且在切换期间也会丢失累积的数据,在报告文档中您将根本无法获得历史记录。
让我们从值的归档开始,为此需要为所需的存储类型和值周期创建至少一个归档器。一般来说,OpenSCADA 包括两个归档模块 — 到文件系统的 FSArch 和到数据库的 DBArch。在这里我们只考虑文件系统归档模块,因为它是最通用和最有效的。关于"高质量"归档器的值周期,最好选择我们系统中最慢数据源的值周期,我们只有一个,我们为其指定了 1 秒的周期。要创建值归档器,打开归档模块页面 “Start”->“Archives-History”->“Module”->“Archiver on the file system”,通过上下文菜单我们将创建值归档器对象 “1s”。注意创建对话框中"项目类型"字段的值,它应该是 Value archiver(值归档器)!获得的值归档器对象的配置页面(图4.5.1)包含状态和操作控制的"状态"部分、配置部分"配置"和归档器模块特定设置的"附加选项"部分。总的来说我们有:
"状态"部分:
- 启动归档器执行 — 在相应字段前设置标志,只有运行的归档器才执行归档
- 在执行完此列表的所有内容后最后设置
- 我们可以控制归档会话的当前和最大时间
- 指定存储 — 保留项目的"通用存储"
- 我们可以控制此归档器的归档文件总大小
"配置"部分:
- 设置程序启动时启动归档器 — 在相应字段前设置标志
- 设置归档文件夹地址 — “ARCHIVES/VAL/1s”,这是默认值
- 设置值周期 — **1(一)**秒
- 设置归档周期 — 60 秒,默认情况下,通常对于任何值周期的归档器都是相同的
保存对象。

图 4.5.1. 文件系统值归档器 "1s" 的配置
一个"高质量"归档器对于大多数任务已经足够,但如果您计划在很大深度(天、周、月)构建值的图形趋势和报告文档,那么您需要创建几个具有更大值周期的归档器,否则构建图形和文档将会很长和/或被时间限制截断!通常,创建这样的附加归档器,您必须按照上面"高质量"归档器的方式相同地创建它们:
- 分钟 — 标识符 “1m”,地址 “ARCHIVES/VAL/1m” 和值周期 60 秒
- 小时 — 标识符 “1h”,地址 “ARCHIVES/VAL/1h” 和值周期 3600 秒
新创建的 OpenSCADA 项目已经包含此类标准归档器的模板,因此您只需启用需要的归档器即可。
要在之前创建的 LogicLev 模块控制器中启用 AT101_1 和 AT101_2 参数的 “Ti” 和 “To” 属性的归档,只需在配置页面的"归档"选项卡中选择要归档的属性以及由哪些归档器归档(图4.5.2)。我们将选择由之前创建的归档器 FSArch.1s、FSArch.1m、FSArch.1h 归档 “Ti” 和 “To” 属性。对于模拟参数 ModBus.CM101.TE1314_1 的 “var” 属性和数字参数 ModBus.CM101.CB102 的 “com” 属性,我们也做同样的事情。

图 4.5.2. LogicLev 模块 AT101_1 参数的"归档"选项卡
作为此操作的结果,将自动为所选属性创建归档对象。参数 AT101_1 的属性 “Ti” 的归档对象示例如图4.5.3所示。

图 4.5.3. AT101_1 参数 "Ti" 属性的归档对象页面
通常归档的设置不需要更改,但如果您需要特殊配置,可以在上述页面上完成。通常您可能需要获取有关归档的信息。例如,了解归档大小(时间和存储),以及查看参数的图形(图4.5.4)。

图 4.5.4. AT101_1 参数 "Ti" 属性归档对象页面的"值"选项卡
控制器对象以及单个参数模板可以生成警报消息,例如 — 复杂信号标签模板在输出值超过边界之一时生成消息。这种性质的消息具有特定类别,称为违规。
OpenSCADA 消息首先进入消息缓冲区,它充当主要归档。但是,缓冲区有限制,仅存储在 RAM 中,即在程序重新启动时丢失。将消息存储在一个或另一个存储中的角色由消息归档器执行,就像值归档器对值的作用一样。
因此,我们将创建一个消息归档器用于归档违规,为此我们将打开归档模块页面 “Start”->“Archives-History”->“Module”->“Archiver on the file system”,通过上下文菜单我们将创建消息归档器对象 alarms (Alarms)。注意创建对话框中"项目类型"字段的值,它应该是 Message archiver(消息归档器)!获得的消息归档器对象的配置页面(图4.5.5)包含状态和操作控制的"状态"部分、配置部分"配置"和归档器模块特定设置的"附加选项"部分。总的来说我们有:
"状态"部分:
- 启动归档器执行 — 在相应字段前设置标志,只有运行的归档器才执行归档
- 在执行完此列表的所有内容后最后设置
- 指定存储 — 保留项目的"通用存储"
- 我们可以控制此归档器中第一条和最后一条消息的时间
- 我们可以控制此归档器的归档文件总大小
- 我们可以控制归档会话的当前和最大时间
"配置"部分:
- 设置程序启动时启动归档器 — 在相应字段前设置标志
- 设置表征违规的消息类别 — "al"*
- 设置归档违规的级别 — “Information (1[X])”
- 设置归档文件夹地址 — “ARCHIVES/MESS/alarms”,这是默认值
保存对象。

图 4.5.5. 文件系统消息归档器 "alarms" 的配置
以同样的方式,您可以创建不同性质的消息归档器,例如 — 操作员操作。为此,只需定义这些消息的类别并为它们形成模板或正则表达式规则即可。您可以在消息归档页面上获取标准类别及其模板或正则表达式规则;或者可以在"归档-历史"子系统的主页面上研究真实消息,在此获取有关类别的信息并设置模板或正则表达式规则。您甚至可以创建一个归档器来归档所有程序消息,但不建议这样做,因为归档大小很大,以后访问它们的时间很长。
新创建的 OpenSCADA 项目已经包含此类标准归档器的模板,因此您只需启用需要的归档器即可。
5 形成可视化表示 (Formation the visual representation)
可视化表示的形成可以在三个复杂级别进行,用户可以根据任务需求、知识水平和可用的现成形状和模板库来选择其中任何一个级别。
- 第一级 需要用户最低资质,但意味着存在解决其任务所需的模板框架库。在第一级范围内,用户只需要知道如何将动态连接到模板框架的页面以及如何添加新的模板框架页面。
- 第二级 需要额外的能力 — 基于完成的复杂元素通过简单地将它们放置在框架区域来创建新框架。要达到这个资质级别,用户需要解决其任务所需的复杂元素库。
- 第三级 要求用户能够使用 OpenSCADA 可视化界面开发环境的所有工具,包括创建新的复杂元素和在项目中开发用户界面。
所有可视化界面的操作我们将在"用户界面"子系统的 Vision 模块环境中进行。要打开 Vision 界面窗口,您应该点击配置器工具栏右侧的第二个图标。结果是之前在图3.3.1.3中显示的窗口。
用户-操作员界面在 OpenSCADA 中通过可视化项目实现。在用户界面主元素库中提供了典型的项目模板,它基于信号对象和显示视图的概念。用户可以通过新项目开始创建自己的可视化界面概念,或者可以使用指定的模板。
要实现可视化项目的新概念,您需要第三级的知识和超出本文档考虑范围的大量努力。因此,我们将考虑基于可用模板项目创建可视化界面。
通过首先点击"复制可视化项目"按钮,然后点击**“粘贴可视化项目”**按钮来复制项目 “Signal groups (template)”(图5.1)。在对话框中我们将新项目命名为 start (Start),在项目列表中我们将获得新项目的条目(图5.1)。

图 5.1. 复制模板项目到新项目
在使用和保存新项目(图5.3)之前,您需要将其存储更改为"通用存储",这可以在可视化元素属性对话框的主页面上完成,该对话框通过"可视化项目属性"按钮调用(图5.2)。之后我们将通过点击工具栏左侧第三个按钮来保存我们的新项目。

图 5.2. 基于模板的新项目属性
模板项目(图5.3)包含两个分支 — “控制面板"和"根页面”。"控制面板"分支包含典型的控制面板和一组特殊框架。“根页面"分支,以根页面为基础,包含信号对象的子分支"组1”、“组2"和不同的分支"结果图形”。信号对象的子分支"组{n}"有一个数字标识符,可以通过添加扩展到顶部两行能容纳的名称数量。"组{n}"的存在通过激活根页面信号对象的相应按钮来反映,允许它们切换。每个子分支"组{n}"都有用于显示视图的容器或模板,通常包括:“助记图”、“图形组”、“轮廓组”、“概览框架组"和"文档”。显示视图容器中页面的存在使根页面相应信号对象的选择成为可能。有关根页面结构的更多信息可以在链接中找到。

图 5.3. 基于信号对象概念的模板项目
5.1 添加模板页面并连接动态 (Adding the template page and connecting the dynamics)
让我们研究第一级复杂度的任务,即在已经设计好的界面概念中需要将动态链接到模板页面。"模板页面"的概念意味着一个页面,在其基础上并借助继承可以创建许多具有单独动态列表的最终可视化页面。这些页面的示例包括:“图形组”、“轮廓组”、“概览框架面板"和"结果图形”。在图5.1.1中,模板页面"图形组"显示在我们项目"Start"的树中。

图 5.1.1. 模板页面"图形组"
模板页面"图形组"提供了链接最多八个信号以同时在图形上显示它们的机会。顶部的元素将自动隐藏未指定的链接。
让我们在根页面第一组的模板容器"图形组"中创建一个新的图形组。为此,在"图形组"项目的上下文菜单中选择菜单项"添加可视化项目"(图5.1.2),然后输入 ID “2” 和名称 “Graphics 2” — 2 (Graphics 2)。

图 5.1.2. 添加图形组 "Graphics 2"
确认名称输入后,将创建一个新页面,但是为了激活我们需要启用它。您可以在页面属性编辑对话框中启用此页面(图5.1.3)。要打开此页面,可以在新创建页面的上下文菜单中选择菜单项"可视化项目属性"。您可以通过将模板复制到自身来在基于模板的逻辑容器中创建页面,也可以复制此容器的另一个页面,但也带有链接。

图 5.1.3. 可视化元素属性编辑对话框
启用页面后,您就可以设置到之前创建的控制器参数的链接了。为此,不要离开新创建页面的属性编辑对话框(图5.1.3),点击"链接"选项卡(图5.1.4)。在此选项卡上,我们可以看到包含元素"el1"…"el8"的树。展开任何元素,我们将看到"Parameter"分支,正是在其中我们必须在"pVal"项目中指定或选择我们属性"Ti"和"To"的地址。总的来说,我们填写四个元素,在此过程中部分属性必须指定为常量:
- “name” — “val:AT101_1 Ti”
- “ed” — “val:deg.C”
- “max” — “val:150”(对于 Ti)和 “val:100”(对于 To)
- “min” — “val:0”
如果控制器参数的模板预先预测了指定为常量的属性存在,那么只需指定参数,属性就会自动排列。这可以通过附加之前创建的复杂对象标签模拟参数 ModBus.CM101.TE1314_1 来看到。

图 5.1.4. 可视化项目属性编辑对话框的"链接"选项卡
完成链接后,我们可以检查我们努力的结果,为此我们将关闭编辑属性对话框并运行项目"Start"执行 — 关于运行按钮我们从前面的章节中记得。接下来选择图形并切换到第二页。在无错误配置的情况下,我们应该看到类似于图5.1.5所示的内容。请注意,对于具有已建立违规限制的复杂对象标签参数,超出边界的输出值用警报颜色标记。为了看到违规边界,您可以将风扇性能值设置为100(图4.2.9)。

图 5.1.5. 连接四个信号和一个对象标签参数的图形组
5.2 创建新框架 — 助记图 (Creating a new frame — mnemonic schemes)
让我们提升级别并创建一个新框架,在其上我们将放置显示控制器参数值的基本元素。这样的框架通常称为助记图,除了动态显示之外,甚至首先包含技术过程的助记表示的静态图像。我们不打算专注于静态创建,而是添加动态元素并将它们链接到我们控制器的参数。我们将把创建的框架放到我们项目的树中。
新框架,稍后将放置在项目中,应该在小部件库中创建和更改。通过选择垂直选项卡"Widgets"并在小部件库窗口的上下文菜单中**选择菜单项"新建库"**来创建新的小部件库(图5.2.1)。在输入名称的对话框中我们将指定 — CM101 (CM 101)。

图 5.2.1. 添加新的小部件库
接下来我们将通过在创建的库"CM 101"的上下文菜单中选择"… from the Library"->“Library: originals”->“Group of elements"来添加新框架(图5.2.2)。在输入名称的对话框中我们将指定 AT101 (AT 101)。任何框架和页面的基础必须是原语"元素组(Box)”,因此我们选择了它。

图 5.2.2. 添加新框架
创建新框架后,需要立即设置其基本属性,这是助记图框架的特征。任何可视化元素的属性或属性可以在"属性"工具栏中指定,预先选择所需的可视化元素。让我们选择创建的框架"AT 101"并设置以下属性:
- “Geometry: width” — 900
- “Geometry: height” — 600
- “Page: group” — “so”,用于在执行时将框架包含到助记图容器中
- “Background: color” — “#5A5A5A”
- “Border: width” — 1
- “Border: color” — “black”
结果我们得到一个空框架(图5.2.3),准备向其中添加元素。要可视化编辑或查看框架,您应该在框架的上下文菜单中选择菜单项"可视化项目编辑"。

图 5.2.3. 新框架视图和助记图设置的属性
现在,我们将向框架添加用于显示模拟参数值的元素,用于我们的四个信号和复杂对象标签参数 ModBus.CM101.TE1314_1。要在助记图上放置模拟信号的显示元素,我们需要选择它,然后在窗口菜单中选择菜单项"Widget"->“Library: Main”->“Analog show”;之后光标将出现此元素的图像,应将其带到助记图的所需区域并按下鼠标左键。在添加时,将出现一个对话框询问新项目的名称。类似地,我们将添加五个元素,我们称之为:A1_Ti、A1_To、A2_Ti、A2_To 和 TE1314_1。
同样,我们为离散参数 ModBus.CM101.CB102 添加复杂对象标签的元素,为此我们将使用库元素"Widget"->“Library: mnEls”->"Ball crane"并将其命名为 CB102。
为了显示当前违规列表,在助记图上我们将从原语库放置一个协议元素"Widget"->“Library: originals”->"Protocol"并将其命名为 Protocol。在属性检查器中我们将设置协议的属性:
- “Geometry: width” — 500
- “Geometry: height” — 250
- “View columns” — “tm;lev;mess”
- “Level” — -1,显示任何级别的当前违规
- “Size, seconds” — 0,显示任何深度的违规
- “Tracing period, seconds” — 1
您可以通过简单地用鼠标选择和拖动来按您想要的方式放置添加的项目。同样,您可以更改它们的大小。简单的大小更改只会调整容器小部件的几何形状,这通常不是必需的。要更改整个小部件内容的大小,必须通过在调整大小时按住"Ctrl"键或通过在状态栏中将"Resize"状态切换为"Scale"来缩放它。
执行所有操作后,我们必须得到类似于图5.2.4的助记图。

图 5.2.4. 带有多个元素的助记图视图
至此,创建助记图的过程将被视为完成。我们将保存新的小部件库"CM 101"并继续将我们的助记图放置在项目"Start"树中的阶段。
通过在项目页面"Mnemos"的上下文菜单中选择菜单项"… from the Library"->“Library: CM101”->“AT 101”,将我们的助记图放到分支"Start"->“Root page (SO)”->“Group 1”->“Mnemos"中。新助记图的标识符设置为"2”,名称字段留空 — 2。
接下来我们需要执行我们从上一节中熟悉的操作,即 — 建立到之前创建的控制器参数的连接。为此,我们将打开助记图属性编辑对话框的"链接"选项卡(图5.2.5),在那里我们将看到包含元素"A1_Ti"、“A1_To”、"A2_Ti"和"A2_To"的树。展开任何元素,我们将看到"Parameter"分支,在其中我们必须在"pVal"项目中指定或选择我们属性"Ti"和"To"的值的地址。在填写元素的过程中,一些属性必须指定为常量:
- “pName” — “val:AT101_1 Ti”
与上一节中的图形组一样,对于复杂对象标签参数 ModBus.CM101.TE1314_1 和 ModBus.CM101.CB102,您只需指定参数,属性就会自动排列。

图 5.2.5. 助记图属性编辑对话框的"链接"选项卡
现在我们可以保存我们的助记图并查看结果。为此,关闭属性对话框并启动我们的项目"Start"执行。接下来用分页按钮切换到我们的助记图,在无错误配置的情况下,我们必须看到类似于图5.2.6的内容。

图 5.2.6. 具有四个链接信号、复杂对象标签参数和协议的助记图
请注意,复杂标签对象参数超出违规边界的输出值通过警报颜色闪烁来指示:参数、警报对象和下方的黄色圆圈。除了闪烁之外,在违规情况下,还会执行单调警报(通常是蜂鸣器)和链接字段"spName"(图5.2.5)中指定的参数位置的语音合成,当相应的语音合成器可用时。当违规被激活时,右侧和右下方带有通知类型指示的按钮被激活,通过点击它们可以静音相应类型的通知。通过按下右下方闪烁的黄色圆圈,所有通知都被静音。违规的存在也通过我们添加的协议中的记录来显示。为了看到违规边界,您可以将风扇性能值设置为100(图4.2.9)。有关违规工作概念的更多信息,请参阅"如何形成违规、警报和通知"文档。
违规历史可以在"违规协议"文档中查看,该文档在选择"文档"视图时可用(图5.2.7)。

图 5.2.7. "违规协议"文档
离散复杂对象标签参数 ModBus.CM101.CB102,我们以球阀形式呈现,是活动的。也就是说,它可以被选择,从而在右侧有控制面板(图5.2.6),以及发送命令(打开或关闭)。您可以从控制面板或通过上下文菜单传输命令。操作员的所有控制影响操作都被记录,协议文档可以在选择"文档"视图时查看(图5.2.8)。

图 5.2.8. "中断协议"文档
5.3 创建新的复杂元素 (Creation a new complex element)
让我们开始考虑第三级复杂度的任务,即创建复杂元素。创建复杂元素,包括不同基本原语的组合,可以分几个阶段进行。作为示例,考虑一个由两个阶段组成的任务:
- 基于原语"基本图形"创建"空气冷却器"小部件
- 基于原语"元素组"创建最终组合小部件"冷却器"
5.3.1 基于原语"基本图形"创建"空气冷却器"小部件
我们将在之前创建的"CM 101"库中创建小部件。为此,右键点击此库中的项目并选择菜单项"… from the Library"->“Library: originals”->“Elementary figure”,如图5.3.1.1所示,我们将新元素命名为 air_cooler (Air cooler)。

图 5.3.1.1. 在 "CM 101" 库中添加基于"基本图形"原语的小部件
确认后,我们将有一个名为"Air cooler"的新小部件,在小部件库"CM 101"中选择它并通过新元素的上下文菜单打开进行编辑(图5.3.1.2)。在属性检查器中我们将设置属性:
- “Geometry: width” — 200
- “Geometry: height” — 200
- “Fill: color” — “lightgrey”,颜色可以使用颜色名称设置,也可以使用格式 #RRGGBB (#RRGGBB-AAA)

图 5.3.1.2. 小部件主要配置
现在让我们绘制小部件的可视化表示,这可以通过两种方式完成:
- 使用鼠标绘制所需的图像,使用"线条"、“弧线”、“贝塞尔曲线"和"填充”;进入编辑-绘图模式后会出现相应的面板"基本图形工具";如图5.3.1.3所示进入此模式或通过双击小部件主体上的鼠标左键
- 通过输入所需项目和点坐标的列表手动填写"元素列表"字段
有关编辑器的更多信息,请参阅此处。

图 5.3.1.3. 进入基于"基本图形"原语的小部件绘图模式
在我们的示例中,我们将使用第二种方法,为此在属性检查器的"元素列表"字段中输入以下列表并按"Ctrl"+“Enter”:
line:(20|80):(100|20)
line:(100|20):(180|80)
line:(180|80):(100|140)
line:(100|140):(20|80)
line:(100|20):(100|140)
line:(20|80):(180|80)
line:(50|165):(100|140)
line:(100|140):(150|165)
line:(150|165):(50|165)
fill:(20|80):(100|20):(180|80):(100|140)
fill:(50|165):(100|140):(150|165)
所有点都是静态指定的,因为在执行模式下不提供动态和坐标更改,所有其他参数保持默认值。因此,我们的小部件将呈现图5.3.1.4的外观。

图 5.3.1.4. 对应小部件"元素列表"的图像
为我们的小部件创建一个图标,它将在库"CM 101"的小部件树中可见(图5.3.1.5)。

图 5.3.1.5. 创建小部件图标
至此,创建第一个小部件的过程可以被视为完成。让我们继续组合和创建结果小部件的阶段。
5.3.2 基于原语"元素组"创建最终组合小部件"冷却器"
最终小部件我们将在"CM 101"库中创建,为此我们必须右键点击库并选择原语"元素组",如图5.3.2.1所示,我们将新元素命名为 — elCooler (Cooler)。

图 5.3.2.1. 在 "CM 101" 库中添加基于"元素组"原语的小部件
确认后,我们将有一个名为"Cooler"的新小部件。在小部件库"CM 101"中选择它并打开进行编辑。在属性检查器中我们将设置属性:
- “Geometry: width” — 250
- “Geometry: height” — 200
取之前创建的元素"Air cooler"并拖动它 — 在其上按下"鼠标"操纵器的左键并将光标移动到新创建小部件的区域,在那里我们释放按钮(图5.3.2.2)。

图 5.3.2.2. 将"空气冷却器"小部件拖放到"冷却器"小部件容器
结果,将出现一个对话框窗口,要求您输入新小部件的标识符和名称。标识符和名称可以任意指定,我们将输入标识符 air_cooler 并将名称留空,它将从父级继承 — 元素"Air cooler"。因此,容器"Cooler"内新创建的小部件将继承元素"Air cooler"。确认标识符和名称的输入后,"Air cooler"小部件将被添加到我们的小部件容器"Cooler"中(图5.3.2.3)。在属性检查器中我们将为其设置属性:
- “Geometry: x” — 25
- “Geometry: y” — 0

图 5.3.2.3. 添加继承的"空气冷却器"小部件
接下来我们将展开库"Mnemo elements"的菜单项,在那里找到"Cooler 2"元素并将其拖到小部件容器中。此元素将动态显示空气冷却器的强度。对于新小部件输入标识符 cooler2 并再次将名称留空,之后"Cooler 2"小部件将被添加到我们的"Cooler"小部件容器中。因此,"Cooler"容器内新创建的小部件将继承库"Mnemo elements"的元素 — “Cooler 2”。在属性检查器中我们将设置属性:
- “Geometry: x” — 75
- “Geometry: y” — 30
- “Geometry: z” — 10,您可以从"可见性小部件功能"面板将元素提升到所有元素之上
- “Color1” — “#FFFF00-200”,添加了 alpha 通道 — 透明度200(“0” — 完全透明,“255” — 完全不透明),如图5.3.2.4所示
- “Color2” — “#FF0000-200”,添加了 alpha 通道 — 透明度200

图 5.3.2.4. 更改继承的"冷却器2"小部件的颜色透明度
现在在"Cooler"小部件中添加两个基于"文本"原语的文本字段,以显示输入和输出流温度。为此,选择"Cooler"小部件,在"CM 101"库的可视化面板中,选择原语"文本"的菜单项,如图5.3.2.5所示。对于第一个文本字段,输入标识符 Ti,在属性检查器中我们将设置属性:
- “Geometry: x” — 5
- “Geometry: y” — 20
- “Geometry: width” — 70
- “Geometry: height” — 35
- “Alignment” — “Center”
- “Font” — “Arial 14 1”,您可以在按下编辑字段中的键时打开的对话框中更改字体(图5.3.2.7)
字体 Arial 可能在对话框中缺失,因此选择您喜欢的字体。
- “Text”(图5.3.2.8):
%1
deg.C
- “Arguments number” — 1(图5.3.2.9):
- “Argument 0: type” — “Real”
- “Argument 0: value” — 300.25,仅为清晰起见指定,在执行模式下它将被输入温度的实际值替换
- “Argument 0: config” — “3;f;2”

图 5.3.2.5. 添加基于"文本"原语的新元素

图 5.3.2.6. 指定 "Ti" 小部件的几何形状

图 5.3.2.7. 更改 "Ti" 小部件的字体大小

图 5.3.2.8. 更改"文本"字段并指示 "Ti" 小部件的参数存在

图 5.3.2.9. "Ti" 小部件的参数配置
现在,为了创建类似的输出温度小部件,复制小部件"Ti",粘贴复制的小部件并给它标识符 To(图5.3.2.10)。在属性检查器中,我们将设置属性:
- “Geometry: x” — 175
- “Geometry: y” — 20

图 5.3.2.10. "To" 小部件
现在添加一个基于原语"表单元素"的小部件(图5.3.2.11),我们将使用它来选择冷却器生产率的设定点。我们将指定标识符 cw(图5.3.2.12),在属性检查器中我们将设置属性:
- “Active” — true
- “Geometry: x” — 60
- “Geometry: y” — 158
- “Geometry: width” — 60
- “Geometry: height” — 40
- “Geometry: z” — 10,您可以从"可见性小部件功能"面板将元素提升到所有元素之上
- “Element type” — “Combo box”
- “Font” — “Arial 14 1”
- “Value” — 200
- “Configuration”:
0
50
100
150
200

图 5.3.2.11. 添加基于"表单元素"原语的小部件

图 5.3.2.12. 填充组合框 "cw" 的参数
为了显示冷却器生产率的单位,添加另一个基于原语"文本"的小部件。我们执行与"Ti"小部件相同的过程。我们将指定标识符 dimension(图5.3.2.13),在属性检查器中我们将设置属性:
- “Geometry: x” — 125
- “Geometry: y” — 168
- “Geometry: width” — 80
- “Geometry: height” — 20
- “Alignment” — “Center”
- “Font” — “Arial 14 1”
- “Text” — “rpm”

图 5.3.2.13. 添加基于"文本"原语的 "dimension" 小部件并更改其属性
要添加"Cooler"小部件的处理逻辑,打开此可视化元素的属性编辑对话框并转到"处理"选项卡。在此选项卡中,我们将看到小部件的属性树和属性处理程序的文本字段。为了解决我们的任务,我们需要添加三个属性:Ti、To、Cw(图5.3.2.14);为此您需要展开根元素".",选择其中的任何项目并点击下方的"添加属性"按钮。
接下来启用组合框"cw"的属性 value 的处理,如图5.3.2.15所示。类似地,我们将为 Ti 和 To 打开 arg0val 属性,以及为"cooler2"元素打开 speed 属性。

图 5.3.2.14. 为 "CM 101" 库的 "Cooler" 元素添加三个属性

图 5.3.2.15. 启用组合框 "cw" 的 "value" 属性处理
最后,我们将设置用户编程语言"JavaLikeCalc.JavaScript"并编写这个用于处理小部件的程序:
Ti_arg0val = Ti;
To_arg0val = To;
for(ev_rez = "", off = 0; (ev_wrk=event.parse(0,"\n",off)).length; )
if(ev_wrk == "ws_CombChange:/cw") Cw = cw_value;
else ev_rez += ev_wrk+"\n";
event = ev_rez;
cw_value = Cw;
cooler2_speed = Cw/5;
放置或编辑小部件程序不会直接编译它,也就是说,如果程序中有错误,将不会有错误消息。这是因为程序的直接执行,因此其编译,是在执行上下文中并在启动可视化项目执行时进行的。在这种情况下,编译期间发生的所有错误都显示为 OpenSCADA 消息,错误的小部件不会被处理。有关如何调试用户过程的详细信息,请参阅"如何调试 OpenSCADA 项目"文档。
整体处理小部件和执行其程序在 VCA 项目生命周期中的任何事件(在"项目"选项卡的"计算周期"字段中指定,图5.2)以及小部件处理周期(在"小部件"选项卡的"周期性处理"字段中指定,图5.1.3)时定期执行。默认情况下,小部件处理周期取自顶部小部件,为1000毫秒,因此当您想要更快地更新小部件时,可以在"小部件"选项卡上将"周期性处理"设置为250毫秒。
"CM 101"库的小部件"Cooler"的结果"处理"选项卡将如图5.3.2.16所示。

图 5.3.2.16. "CM 101" 库 "Cooler" 小部件的最终"处理"选项卡
关闭可视化元素属性编辑对话框,为我们的元素创建图标,关闭内部编辑窗口并保存所有内容。
至此,复杂元素的开发可以被视为完成。
5.3.3 将复杂元素添加到助记图 (Adding the complex element to the mnemonic scheme)
为了测试可操作性并评估我们努力的结果,将创建的小部件添加到第5.2节中开发的助记图中。我们为两个冷却器"AT101_1"和"AT101_2"执行此操作。
为此,我们将打开助记图框架"AT 101"进行编辑,用"鼠标"抓取我们的复杂元素并拖到助记图上,在所需位置放下它 — 分别输入标识符 AT101_1 和 AT101_2。按我们方便的方式放置添加的项目。执行这些操作后,我们必须得到如图5.3.3.1所示的助记图。

图 5.3.3.1. 带有复杂元素的助记图
我们将保存新的助记图并关闭其窗口。接下来转到项目并在项目树"Start"->“Root page (SO)”->“Group 1”->“Mnemos”->“AT 101"中打开此助记图。如您所见,我们的新元素在这里自动出现,我们只需要将链接连接到它们,为此我们将在"链接"选项卡上打开助记图属性编辑对话框(图5.3.3.2)。在此选项卡上,我们看到包含元素"AT101_1"和"AT101_2"的树,展开任何一个我们将看到带有属性"Ti”、"To"和"Cw"的"Parameter"分支。因此,我们可以简单地在"Parameter"字段中指定参数地址 “prm:/LogicLev/CM101/AT101_1” 和 “prm:/LogicLev/CM101/AT101_2”,属性将自动排列。

图 5.3.3.2. 助记图属性编辑对话框的"链接"选项卡
让我们保存我们的助记图并检查结果,为此关闭属性对话框,启动项目"Start"执行并用分页按钮切换到第二个助记图。在无错误配置的情况下,我们必须看到类似于图5.3.3.3所示的图像。

图 5.3.3.3. 最终助记图
在此助记图上,通过我们的复杂元素,我们不仅可以观察,还可以通过简单地更改组合框中的值来控制冷却器的生产率。更改性能时,我们可以注意到温度的变化以及复杂模拟对象趋势参数上的信号。我们可以在第5.1节中创建的图形组和第5.2节中提到的"违规协议"文档中查看和审查更改历史。
6 结论 (Conclusion)
通过这种方式,我们获得了具有各种方式真实数据采集的功能齐全的典型技术过程 (TP) 界面,从而获得了使用 OpenSCADA 的外观和技能。
在构建 TP 界面时,我们查看了所有三个复杂级别,因此我们获得了 SCADA 程序员所需级别的愿景。
数据采集和处理已以各种方式进行审查和实施,从简单典型的方式到基于 OpenSCADA 构建的 PLC 镜像数据模型。也就是说,我们获得了 SCADA 系统数据源的愿景,以及通过 OpenSCADA 相应模块支持的网络接口和交换协议访问它们的方式。
当然,我们还审查了 OpenSCADA 的分发方法、如何安装它以及获得正确的环境,例如:SCADA 服务器、OpenSCADA PLC 和操作员工作站 (AWP)。
有关 OpenSCADA 的信息不限于本文档,您必须在解决具体问题时使用所有可用文档和 OpenSCADA 演示配置模型的示例,利用开源的优势。在这里我们必须再次特别提到"程序手册"、"如何…“和"动态实时模拟器 AGLKS”,作为关于 OpenSCADA 最完整的信息来源。
7 链接 (Links)
本文档翻译自 OpenSCADA Wiki,原文最后修改于 2024年3月21日

6710

被折叠的 条评论
为什么被折叠?



