2. SCADA基础架构

SCADA(Supervisory Control and Data Acquisition,监控与数据采集)系统并不是单一软件,而是由现场设备、通信链路、上位监控与数据存储共同构成的分布式体系。理解这套基础架构,是后续学习报警管理与历史数据工程的前提:只有先看清“数据从哪里来、经过谁、存到哪里、报警在哪里产生”,才能设计出可靠的报警策略与历史归档方案。

一、核心组成:从现场到监控中心

典型SCADA架构可划分为四层:现场仪表与执行机构、控制层、通信层、监控与数据层。

  • RTU(Remote Terminal Unit,远程终端单元):面向广域、分散、无人值守站点,如油气管道、泵站、变电站。RTU强调低功耗、宽温、远程通信能力,通常支持Modbus、DNP3、IEC 60870-5-101/104等协议,具备本地逻辑与断线缓存能力。
  • PLC(Programmable Logic Controller,可编程逻辑控制器):面向高速、确定性控制场景,如产线、水处理、楼宇。PLC擅长毫秒级扫描与联锁逻辑,通过以太网或现场总线与上位系统交换数据。
  • HMI(Human Machine Interface,人机界面):操作员与过程的交互窗口,显示工艺画面、实时趋势、报警列表,并下发设定值与命令。HMI可以是本地触摸屏,也可以是SCADA上位机画面。
  • 通信协议:决定数据如何编码、寻址与传输。常见有Modbus TCP/RTU、DNP3、OPC UA、IEC 61850、MQTT等。协议选择直接影响采集周期、可靠性与互操作性。
  • 数据采集与历史存储:采集服务轮询或订阅现场数据,写入实时数据库与历史数据库;报警引擎基于实时值、死区、延时与优先级生成报警事件。
核心记忆:RTU/PLC负责“采与控制”,通信协议负责“送”,HMI负责“看与操作”,历史库负责“存”,报警引擎负责“判与报”。

二、数据采集流程:一次完整的“现场到画面”

以Modbus TCP采集为例,数据从现场到操作员画面通常经历以下步骤:

  1. 现场传感器将压力、温度、流量等物理量转换为4-20mA或数字信号,接入RTU/PLC的AI/DI模块。
  2. RTU/PLC按扫描周期更新内部寄存器,形成过程映像区。
  3. SCADA采集服务按配置周期发起请求,读取寄存器地址,获得原始值。
  4. 进行量程换算、单位转换、滤波与质量码标记(Good/Bad/Uncertain)。
  5. 写入实时数据库,供HMI画面、趋势与报警引擎使用。
  6. 历史采集服务按压缩策略(如旋转门、死区)写入历史库。
  7. 报警引擎比较阈值、变化率与状态,生成报警事件并推送至HMI报警栏。
# 典型采集配置片段(示意)
tag: PT_101
source: ModbusTCP 192.168.10.21:502
register: 40001
data_type: uint16
scale: 0.1
unit: MPa
scan_rate: 1000ms
deadband: 0.05
history: enable, compression=swinging_door
alarm:
  HH: 1.60  priority=High
  H : 1.40  priority=Medium
  L : 0.20  priority=Medium
  LL: 0.10  priority=High

三、典型SCADA拓扑与报警/历史数据的位置

下图展示了一个典型的分层SCADA拓扑:现场RTU/PLC通过通信链路接入采集服务器,采集服务器同时服务实时库、历史库与报警引擎,HMI操作站从实时库读取画面数据并接收报警。报警与历史数据并不“飘在空中”,它们分别位于报警引擎与历史库这两个明确位置。

现场控制层 RTU PLC 传感器 / 执行机构 通信层 Modbus / DNP3 OPC UA / IEC 104 采集与数据服务层 采集服务 实时数据库 报警引擎 历史数据库 监控与操作层 HMI 操作站 报警显示栏 趋势 / 报表 报警事件 关键位置说明 报警引擎:位于采集与数据服务层,负责阈值判断、死区过滤、优先级与事件生成。 历史数据库:位于采集与数据服务层,负责长期归档、压缩与查询,是趋势与报表的数据源。 HMI:只负责展示与操作,不直接存储历史;报警确认与抑制动作需回写报警引擎。

四、案例场景:水厂SCADA的报警与历史数据落点

某水厂有3个泵站,每个泵站配置一台RTU,通过4G与中心通信;中心侧部署采集服务器、实时库、历史库与报警引擎,操作员通过两台HMI工作站监控。某夜班,清水池液位LT_201从2.8m缓慢下降至1.2m,触发L报警。报警引擎在1.2m阈值处生成一条Medium优先级报警,同时历史库以1分钟周期记录液位值。操作员在HMI报警栏看到报警后,调出趋势确认下降速率,最终发现是进水阀故障。复盘时,历史数据提供了完整的液位曲线,报警记录提供了触发时间与确认时间,两者结合才能还原事件全貌。

对象 所在层级 与报警/历史的关系
RTU / PLC 现场控制层 提供原始过程值,可带时间戳与质量码
通信协议 通信层 决定采集周期与断线缓存能力,影响报警实时性
采集服务 采集与数据服务层 完成量程换算与质量标记,是报警与历史的共同入口
报警引擎 采集与数据服务层 生成、抑制、确认报警事件
历史数据库 采集与数据服务层 存储长期趋势,支撑报表与事后分析
HMI 监控与操作层 展示报警与趋势,执行确认与操作
设计建议:报警阈值与历史死区应分开配置。报警关注“是否越限”,历史关注“曲线是否可还原”。若把历史死区设得过大,趋势会失真;若把报警死区设得过小,则会产生大量抖动报警。
常见误区:把HMI当作数据存储位置。HMI画面关闭后,实时值不再刷新,但历史库与报警引擎仍在运行。若历史数据只存在HMI本地,一旦操作站故障,历史将丢失。正确做法是历史库独立部署并定期备份。