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采集为例,数据从现场到操作员画面通常经历以下步骤:
- 现场传感器将压力、温度、流量等物理量转换为4-20mA或数字信号,接入RTU/PLC的AI/DI模块。
- RTU/PLC按扫描周期更新内部寄存器,形成过程映像区。
- SCADA采集服务按配置周期发起请求,读取寄存器地址,获得原始值。
- 进行量程换算、单位转换、滤波与质量码标记(Good/Bad/Uncertain)。
- 写入实时数据库,供HMI画面、趋势与报警引擎使用。
- 历史采集服务按压缩策略(如旋转门、死区)写入历史库。
- 报警引擎比较阈值、变化率与状态,生成报警事件并推送至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操作站从实时库读取画面数据并接收报警。报警与历史数据并不“飘在空中”,它们分别位于报警引擎与历史库这两个明确位置。
四、案例场景:水厂SCADA的报警与历史数据落点
某水厂有3个泵站,每个泵站配置一台RTU,通过4G与中心通信;中心侧部署采集服务器、实时库、历史库与报警引擎,操作员通过两台HMI工作站监控。某夜班,清水池液位LT_201从2.8m缓慢下降至1.2m,触发L报警。报警引擎在1.2m阈值处生成一条Medium优先级报警,同时历史库以1分钟周期记录液位值。操作员在HMI报警栏看到报警后,调出趋势确认下降速率,最终发现是进水阀故障。复盘时,历史数据提供了完整的液位曲线,报警记录提供了触发时间与确认时间,两者结合才能还原事件全貌。
| 对象 | 所在层级 | 与报警/历史的关系 |
|---|---|---|
| RTU / PLC | 现场控制层 | 提供原始过程值,可带时间戳与质量码 |
| 通信协议 | 通信层 | 决定采集周期与断线缓存能力,影响报警实时性 |
| 采集服务 | 采集与数据服务层 | 完成量程换算与质量标记,是报警与历史的共同入口 |
| 报警引擎 | 采集与数据服务层 | 生成、抑制、确认报警事件 |
| 历史数据库 | 采集与数据服务层 | 存储长期趋势,支撑报表与事后分析 |
| HMI | 监控与操作层 | 展示报警与趋势,执行确认与操作 |
设计建议:报警阈值与历史死区应分开配置。报警关注“是否越限”,历史关注“曲线是否可还原”。若把历史死区设得过大,趋势会失真;若把报警死区设得过小,则会产生大量抖动报警。
常见误区:把HMI当作数据存储位置。HMI画面关闭后,实时值不再刷新,但历史库与报警引擎仍在运行。若历史数据只存在HMI本地,一旦操作站故障,历史将丢失。正确做法是历史库独立部署并定期备份。