WMS 核心模块 / 工业通讯协议 / SCADA
WMS 仓库管理系统
WMS 系统概述
仓库管理系统(Warehouse Management System, WMS)是仓储物流体系的核心信息系统,通过对入库、出库、库存、库位、波次、补货等环节的精细化管理,实现仓库作业的标准化、自动化和智能化。
核心模块
| 模块 | 功能职责 | 关键业务规则 |
|---|---|---|
| 入库管理 | 预约、ASN、收货、质检、上架、确认 | 支持预约排程、ASN 预录入、扫码收货、抽检/全检、自动推荐上架库位 |
| 出库管理 | 订单接收、波次、拣货、复核、打包、发货、交接 | 支持订单合并/拆分、波次策略、多种拣货模式、发货确认 |
| 库存管理 | 库存查询、库存调整、库存冻结、库存转移 | 实时库存可视化、多维度库存查询、批次/序列号追溯 |
| 盘点 | 循环盘点、静态盘点、动碰盘点、盲盘 | 支持盘点计划自动生成、差异分析、复盘与调整 |
| 库位管理 | 库位编码、库位类型、库位状态、库位容量 | 库位生命周期管理、库位占用率分析、库位热力图 |
| 波次管理 | 波次规则、波次创建、波次释放、波次监控 | 支持按路线/时效/订单类型/配送方式自动建波 |
| 补货策略 | 库存警戒、自动补货、移库补货、紧急补货 | 支持 Max-Min / 按订单 / 按频率多种补货策略 |
核心数据表设计
入库单表 (asn_header)
CREATE TABLE asn_header (
asn_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'ASN 主键',
asn_code VARCHAR(32) NOT NULL COMMENT 'ASN 编号',
supplier_id BIGINT NOT NULL COMMENT '供应商 ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库 ID',
asn_type TINYINT NOT NULL COMMENT '入库类型:1-采购入库 2-退货入库 3-调拨入库 4-生产入库',
expect_arrive_time DATETIME NOT NULL COMMENT '预计到货时间',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-待预约 1-已预约 2-已到货 3-收货中 4-已收货 5-已上架 6-已完成',
total_sku_count INT NOT NULL DEFAULT 0 COMMENT 'SKU 总数',
total_qty DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT '总数量',
remark VARCHAR(500) COMMENT '备注',
create_by VARCHAR(32) NOT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(32),
update_time DATETIME ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_warehouse_status (warehouse_id, status),
INDEX idx_supplier (supplier_id),
UNIQUE KEY uk_asn_code (asn_code)
) COMMENT '入库单头表';库存表 (inventory)
CREATE TABLE inventory (
inventory_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '库存 ID',
warehouse_id BIGINT NOT NULL COMMENT '仓库 ID',
location_id BIGINT NOT NULL COMMENT '库位 ID',
sku_id BIGINT NOT NULL COMMENT 'SKU ID',
lot_no VARCHAR(64) COMMENT '批次号',
serial_no VARCHAR(128) COMMENT '序列号',
qty DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT '可用数量',
frozen_qty DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT '冻结数量',
allocated_qty DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT '已分配数量',
total_qty DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT '总数量 = qty + frozen_qty + allocated_qty',
production_date DATE COMMENT '生产日期',
expiry_date DATE COMMENT '过期日期',
inbound_time DATETIME NOT NULL COMMENT '入库时间',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-无效 1-正常 2-冻结 3-锁定',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_warehouse_location_sku_lot (warehouse_id, location_id, sku_id, lot_no),
INDEX idx_sku_warehouse (sku_id, warehouse_id),
INDEX idx_expiry (expiry_date)
) COMMENT '库存明细表';入库流程
入库流程从供应商预约到最终上架确认,涵盖以下关键环节:
预约 ASN 收货 质检 上架 确认
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│供应商 │-->│ ASN │-->│扫码 │-->│质检 │-->│系统 │-->│入库 │
│预约 │ │预录入 │ │收货 │ │判定 │ │推荐 │ │确认 │
│到货 │ │(单据) │ │(PDA) │ │(抽检/ │ │库位 │ │记账 │
│时间 │ │ │ │ │ │全检) │ │上架 │ │ │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘环节说明:
- 预约:供应商通过门户或接口提交到货预约,WMS 依据仓库产能和时段分配预约时间窗口。
- ASN:供应商或采购系统预录入 ASN(Advanced Shipping Notice),包括 SKU、数量、批次等信息。WMS 根据 ASN 预占库位资源。
- 收货:到货后现场人员通过 PDA 扫描物流单号或 ASN 码,逐件或批量扫码确认收货。支持按托盘/按箱/按件三种粒度。
- 质检:根据质检规则决定抽检比例或全检,质检结果分为合格、不合格、让步接收。不合格品进入不良品库位,触发退货流程。
- 上架:WMS 根据上架策略自动推荐目标库位,操作人员通过 PDA 引导上架,扫描库位码确认绑定关系。
- 确认:上架完成后系统更新库存数据,更新 ASN 状态为已完成,触发财务结算接口。
出库流程
出库流程从订单接入到装车交接,形成完整的正向物流链路:
订单接收 波次 拣货 复核 打包 发货 交接
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│OMS │-->│波次 │-->│拣货 │-->│复核 │-->│打包 │-->│发货 │-->│装车 │
│下发 │ │策略 │ │(PDA/ │ │(PDA/ │ │(装箱 │ │确认 │ │交接 │
│出库 │ │合并 │ │DAS) │ │扫码) │ │/贴标) │ │(出库) │ │签收 │
│订单 │ │订单 │ │ │ │ │ │ │ │ │ │ │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘环节说明:
- 订单接收:OMS(订单管理系统)下发出库订单至 WMS,WMS 校验库存可满足后锁定库存,否则触发缺货标记。
- 波次:WMS 按波次规则(配送路线、承运商、时效等级、订单类型)将多个订单组合为波次,生成拣货任务。支持按波次拣货(Batch Picking)和按单拣货(Single Order Picking)。
- 拣货:分配拣货任务至操作员 PDA,支持按库位序号的路径优化。拣货模式包括 RF 拣货、语音拣货、DAS(数字拣货系统)、灯光拣货等。
- 复核:对已拣货品进行逐件扫码校验,核对 SKU、数量、批次,差异系统实时提示并要求纠正。
- 打包:复核通过后进行装箱打包,称重获取实际重量录入系统,打印并粘贴面单/运单。
- 发货:确认发货,WMS 扣减库存,释放波次,生成发货单,回调 OMS 更新状态。
- 交接:承运商交接确认,扫描运单号批量装车,生成交接清单。
库存策略
ABC 分类
基于帕累托法则对 SKU 进行分级管理,指导库位分配、盘点频次和补货策略。
| 分类 | 销售占比 | SKU 占比 | 管理策略 |
|---|---|---|---|
| A 类 | 占总销售额 70-80% | 占总 SKU 10-20% | 高频盘点、优先库位(靠近出货口)、高安全库存、严格批次管理 |
| B 类 | 占总销售额 15-25% | 占总 SKU 20-30% | 正常盘点、中间库位、标准补货策略 |
| C 类 | 占总销售额 5% 以下 | 占总 SKU 50-60% | 低频盘点、远端库位、低安全库存、可采用定期补货 |
安全库存
安全库存(Safety Stock)用于吸收需求波动和供应不确定性。
SS = Z * sigma_d * sqrt(LT)
其中:
SS = 安全库存量
Z = 服务水平系数(95% 服务率取 1.65,99% 取 2.33)
sigma_d = 需求标准差
LT = 补货提前期(天)安全库存预警等级:
| 预警等级 | 库存水位 | 触发动作 |
|---|---|---|
| 绿色 | 库存 > SS * 2 | 正常监控,无需动作 |
| 黄色 | SS < 库存 <= SS * 2 | 触发计划补货建议 |
| 橙色 | 0 < 库存 <= SS | 触发紧急补货,通知采购 |
| 红色 | 库存 = 0 | 触发缺货告警,锁定订单 |
FIFO / FEFO 出库策略
| 策略 | 全称 | 适用范围 | 拣货排序规则 |
|---|---|---|---|
| FIFO | First In, First Out | 通用货物、无明确保质期要求 | 按入库时间升序,先入库先出库 |
| FEFO | First Expired, First Out | 食品、医药、化工等有保质期要求的货物 | 按有效期升序,先到期先出库 |
WMS 在分配库存时,按照 FIFO/FEFO 策略锁定批次,结合库位路径优化,在满足策略优先级的前提下减少拣货行走距离。
条码与 RFID 批次追溯
条码方案:
- 一维码(Code 128 / EAN-128):应用于库位码、托盘码、SKU 码,编码规则遵循 GS1-128 标准。
- 二维码(QR Code / Data Matrix):应用于序列号追溯、电子标签、质检追溯码,可存储更多信息。
RFID 方案:
- 在托盘/周转箱上粘贴无源 UHF RFID 标签(EPC Class 1 Gen2),读写距离 3-8 米。
- 在库门口、输送线节点部署固定式读写器,实现出入库自动采集。
- 手持 RFID 终端用于盘点,单次可批量读取 200+ 标签。
批次追溯数据模型:
CREATE TABLE traceability_record (
trace_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '追溯 ID',
sku_id BIGINT NOT NULL COMMENT 'SKU ID',
lot_no VARCHAR(64) NOT NULL COMMENT '批次号',
serial_no VARCHAR(128) COMMENT '序列号(RFID 唯一标识)',
operation_type TINYINT NOT NULL COMMENT '操作类型:1-入库 2-出库 3-盘点 4-移库 5-退货',
operation_time DATETIME NOT NULL COMMENT '操作时间',
operator_id VARCHAR(32) NOT NULL COMMENT '操作人',
source_location VARCHAR(32) COMMENT '源库位',
target_location VARCHAR(32) COMMENT '目标库位',
order_no VARCHAR(64) COMMENT '关联单据号',
qty DECIMAL(12,3) NOT NULL COMMENT '操作数量',
rfid_tag VARCHAR(64) COMMENT 'RFID 标签 ID',
INDEX idx_sku_lot (sku_id, lot_no),
INDEX idx_serial_no (serial_no),
INDEX idx_operation_time (operation_time)
) COMMENT '批次追溯记录表';WMS 库位管理
库位编码规则
库位编码采用"区-排-层-位"四级编码体系,确保每个库位在全仓库范围内唯一标识。
编码格式:ZZ-AAA-BB-CC-DD
示例:A1-012-03-04
含义分解:
ZZ = 仓库代码(如 A1 = 一号仓库)
AAA = 区域代码(如 012 = A 区第 12 巷道)
BB = 排架号(如 03 = 第 3 排货架)
CC = 层号(如 04 = 第 4 层)
DD = 位号(如 00 = 整位,01/02/03 为细分位)编码规则细则:
| 编码段 | 长度 | 取值范围 | 说明 |
|---|---|---|---|
| 仓库代码 | 2 位 | A1-Z9 | 字母 + 数字组合 |
| 区域代码 | 3 位 | 001-999 | 按功能区域顺序编码 |
| 排架号 | 2 位 | 01-99 | 每巷道双侧货架,单数左侧双数右侧 |
| 层号 | 2 位 | 01-10 | 地坪层为 01,向上递增 |
| 位号 | 2 位 | 00-99 | 00 表示整托盘位,01-99 表示散货位 |
库位类型
| 库位类型 | 代码 | 用途 | 存储特点 |
|---|---|---|---|
| 存储库位 | STORAGE | 长期存储整托盘/整箱货物 | 高位货架、驶入式货架、穿梭车货架 |
| 拣货库位 | PICKING | 拣货作业使用的流动库位 | 流利货架、搁板货架、VNA 货架 |
| 暂存库位 | STAGING | 到货暂存、发货暂存、中转暂存 | 地面堆码、缓冲区 |
| 发货库位 | SHIPPING | 已打包待发货货物集中存放 | 按线路/承运商分区 |
| 不良品库位 | DEFECT | 质检不合格、退货待处理、报废品 | 隔离区域,严格权限控制 |
| 退货库位 | RETURN | 退货验收前暂存 | 查验区附近 |
| 设备库位 | EQUIPMENT | 存储托盘、周转箱等物流容器 | 靠近出入库口 |
库位状态
┌──────────┐
│ 空闲 │
│ (EMPTY) │
└────┬─────┘
│ 入库上架
▼
┌──────────┐
┌────>│ 占用 │<────┐
│ │ (OCCUPIED)│ │
│ └────┬─────┘ │
│ │ │
拣货完成 库存调整 分配锁定
│ │ │
│ ┌────▼─────┐ │
│ │ 锁定 │─────┘
│ │ (LOCKED) │
│ └────┬─────┘
│ │
│ ┌────▼─────┐
│ │ 冻结 │
└─────│ (FROZEN) │
└──────────┘| 状态 | 说明 | 可否入库 | 可否出库 | 可否盘点 |
|---|---|---|---|---|
| 空闲 (EMPTY) | 库位无库存,可分配使用 | 是 | 否 | 否 |
| 占用 (OCCUPIED) | 库位有库存,正常作业中 | 否 | 是 | 是 |
| 锁定 (LOCKED) | 库位被出库/移库任务锁定,不可分配给其他任务 | 否 | 受控 | 否 |
| 冻结 (FROZEN) | 库位因维护、损坏、安全原因不可用 | 否 | 否 | 否 |
上架策略
上架策略决定入库货物应存放至哪个库位,直接影响仓库空间利用率和出库效率。
| 策略名称 | 策略描述 | 适用场景 | 算法复杂度 |
|---|---|---|---|
| 关联库位 | 将经常同时出库的 SKU 分配至相邻库位或同巷道,减少拣货路径 | A 类高频关联商品 | 需历史订单数据分析 |
| 随机空位 | 在空闲库位中随机选择,追求空间利用率均衡 | C 类低频商品、临时存储 | O(1) |
| 按体积/重量 | 根据 SKU 体积和重量匹配库位容积,大件放大库位,小件放小库位 | 异形件、SKU 体积差异大 | O(n) |
| 按品类 | 按商品分类规划区域,同品类集中存放 | 医药/化工等品类隔离要求严格的行业 | 区域映射查找 |
| ABC 分类 | A 类品靠近出货口,B 类品中间区域,C 类品远端 | 高周转品先出场景 | 分类匹配 + 路径计算 |
| 按温区 | 根据存储温度要求匹配对应温控库位 | 冷链仓储 | 温区映射 |
上架策略引擎伪代码:
function recommend_location(sku, qty, warehouse):
strategy = get_strategy_by_sku_category(sku)
if strategy == 'ASSOCIATED':
associated_skus = get_associated_skus(sku, top_n=20)
candidates = get_locations_by_skus(associated_skus, warehouse)
elif strategy == 'ABC':
abc_class = get_abc_class(sku)
candidates = get_candidates_by_zone(warehouse, abc_class_to_zone[abc_class])
elif strategy == 'VOLUME':
sku_volume = get_sku_volume(sku)
candidates = get_locations_by_volume(sku_volume, warehouse)
elif strategy == 'CATEGORY':
category = get_sku_category(sku)
candidates = get_locations_by_category(category, warehouse)
else:
candidates = get_empty_locations(warehouse)
// 过滤条件
candidates = filter_by_status(candidates, 'EMPTY')
candidates = filter_by_capacity(candidates, qty)
candidates = sort_by_path_optimization(candidates)
return candidates[0]工业通讯协议
Profinet
Profinet 是西门子主导的工业实时以太网标准,基于标准以太网(IEEE 802.3)实现现场总线级别的实时通信。
协议层级
┌─────────────────────────────────────────────────────────────┐
│ Profinet 应用层 (APIs) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Acyclic 服务 │ │ Cyclic 服务 │ │ Alarm 处理 │ │
│ │ (Record Data) │ │ (Process │ │ (诊断/中断) │ │
│ │ │ │ Data) │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ RPC (DCE/RPC) / CM (Context Management) │
├─────────────────────────────────────────────────────────────┤
│ Profinet IO 数据链路 │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ RT (实时) │ │ IRT (等时实时) │ │
│ │ 优先级 6/7 VLAN │ │ 时间槽调度 / TSN │ │
│ └──────────────────┘ └──────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 标准以太网 MAC 层 │
│ IEEE 802.3 / 802.1Q VLAN │
├─────────────────────────────────────────────────────────────┤
│ 物理层 (100BASE-TX / 1000BASE-T) │
└─────────────────────────────────────────────────────────────┘实时通信等级
| 等级 | 全称 | 循环周期 | 抖动 | 应用场景 |
|---|---|---|---|---|
| RT (Class 1) | Real-Time | 1-10 ms | < 1 ms | 一般工厂自动化、传感器/执行器数据交换 |
| IRT (Class 2) | Isochronous Real-Time | 31.25 us - 1 ms | < 1 us | 运动控制、CNC、机器人同步 |
| IRT (Class 3) | Isochronous Real-Time with Flex | 同 IRT,支持带宽动态分配 | < 1 us | 混合场景,部分端口传输标准 TCP/IP |
等时同步机制
IRT 通过时间槽划分实现确定性通信,在 Profinet 交换机中同步所有节点的时钟:
- 相位分配:通信周期分为红色阶段(IRT 数据)、橙色阶段(RT 数据)、绿色阶段(TCP/IP 数据)。
- 时钟同步:基于 IEEE 1588 (PTP) 精确时间协议,主站通过 Sync 和 Follow_Up 报文同步从站时钟。
- 时间槽:IRT 数据在每个周期内固定时间槽传输,交换机硬件调度保证无冲突。
EtherCAT
EtherCAT(Ethernet for Control Automation Technology)由 Beckhoff 开发,采用"从站逐级转发"的通信理念,实现极低的循环周期和抖动。
通信原理
EtherCAT 采用集总帧(Sum Frame)技术:主站发送一个数据帧,该帧依次经过每个从站,从站在数据帧经过时实时读写对应的数据子报文,最后由末端的从站或开放端口将帧返回主站。
主站 ──> 从站1 ──> 从站2 ──> 从站3 ──> ... ──> 从站N ──> 返回主站
│ │ │ │
▼ ▼ ▼ ▼
读取/写入 读取/写入 读取/写入 读取/写入
子报文 子报文 子报文 子报文数据帧结构
┌───────────────────────────────────────────────────────────────┐
│ EtherCAT 数据帧 (Ethernet Type 0x88A4) │
├───────────────────────────────────────────────────────────────┤
│ 以太网头 (14 bytes) │
│ ┌──────────┬──────────┬──────────┬────────────────────────┐ │
│ │ 目的 MAC │ 源 MAC │ 0x88A4 │ EtherCAT 头 (2 bytes) │ │
│ │ (6 bytes) │ (6 bytes)│ (2 bytes)│ Len(11 bits)+Type(1bit)│ │
│ └──────────┴──────────┴──────────┴────────────────────────┘ │
├───────────────────────────────────────────────────────────────┤
│ Datagram 1 │ 子报文头 (10 bytes) + 数据区 (1-1498 bytes) │
│ Datagram 2 │ 子报文头 (10 bytes) + 数据区 │
│ ... │ ... │
│ Datagram N │ 子报文头 (10 bytes) + 数据区 │
├───────────────────────────────────────────────────────────────┤
│ FCS (4 bytes) │
└───────────────────────────────────────────────────────────────┘子报文结构:
| 字段 | 长度 | 说明 |
|---|---|---|
| CMD | 1 byte | 命令类型:APRD(0x01)/APWR(0x02)/FPRD(0x04)/FPWR(0x05)/BRD(0x07)/BWR(0x08) |
| IDX | 1 byte | 帧索引,用于匹配请求与响应 |
| Address | 4 bytes | 从站地址(位置寻址/节点寻址/逻辑寻址) |
| Len | 2 bytes | 数据长度 bit10=1 表示最后一个子报文 |
| R | 3 bits | 保留位 |
| M | 1 bit | More 位,标识后续子报文 |
| IRQ | 2 bytes | 中断请求标志 |
| Data | 0-1486 bytes | 过程数据或参数数据 |
| WKC | 2 bytes | 工作计数器,从站每成功操作一次递增 |
分布式时钟 (DC)
EtherCAT 的分布式时钟机制使所有从站时钟与参考时钟同步,精度可达 100 ns 以内。
- 时钟结构:每个从站包含一个 64 位本地时钟(纳秒级精度),主站选择一个从站时钟作为参考时钟。
- 同步过程:主站通过 ARMW/FRMW 命令连续测量传播延迟和时钟偏移,写入从站的 System Time Offset 寄存器。
- 同步中断:从站根据本地时钟设定的同步中断时间(SYNC 信号)触发数据采样或 PWM 输出,确保所有从站同步动作。
DC 参数计算:
传播延迟 T_prop = (T2 - T1 + T4 - T3) / 2
时钟偏移 T_offset = T2 - T1 - T_prop
其中:
T1 = 参考时钟发送时间戳
T2 = 从站时钟接收时间戳
T3 = 从站时钟回送时间戳
T4 = 参考时钟回送接收时间戳EtherNet/IP
EtherNet/IP(Ethernet Industrial Protocol)由 ODVA 维护,基于标准 TCP/IP 和 UDP/IP,采用 CIP(Common Industrial Protocol)对象模型。
CIP 对象模型
CIP 使用面向对象的设计,每个设备被建模为对象的集合,对象结构分为三类:
| 对象类型 | 示例 | 说明 |
|---|---|---|
| 必需对象 (Required) | Identity、Message Router、Assembly、Connection Manager | 每个设备必须实现 |
| 应用对象 (Application) | Motor、Valve、Drive、Sensor | 与具体设备功能相关 |
| 网络对象 (Network) | TCP/IP Interface、Ethernet Link | 管理与网络配置相关的参数 |
对象属性结构(以 Identity 对象为例):
对象类: 0x01 (Identity)
实例: 1 (每个设备只有一个实例)
属性列表:
1 (UINT) Vendor ID - 供应商编码
2 (UINT) Device Type - 设备类型编码
3 (UINT) Product Code - 产品代码
4 (STRUCT) Revision - 版本号 (Major + Minor)
5 (SHORT_STRING) Status - 设备状态
6 (UINT) Serial Number - 序列号
7 (SHORT_STRING) Product Name - 产品名称
8 (USINT) State - 设备当前状态消息类型
| 消息类型 | 传输协议 | 特性 | 用途 |
|---|---|---|---|
| 显式消息 (Explicit) | TCP (UCMM) | 非实时、请求-响应模式、可变长度 | 参数配置、诊断、非周期性数据访问 |
| 隐式消息 (Implicit) | UDP (I/O 连接) | 实时、生产者-消费者模式、固定长度 | 周期性 I/O 数据交换(控制指令、传感器值) |
隐式消息连接建立流程:
Scanner (主站) Adapter (从站)
│ │
│ Forward Open (配置连接参数) │
│ - 请求包率 (RPI) │
│ - 连接类型 (点对点/组播) │
│ - 输入/输出数据大小 │
│─────────────────────────────────────>│
│ │
│ Forward Open Response │
│ - O->T 网络连接 ID │
│ - T->O 网络连接 ID │
│ - 实际包率 │
│<─────────────────────────────────────│
│ │
│ I/O 数据连接 (UDP, 按 RPI 周期) │
│═════════════════════════════════════>│
│<═════════════════════════════════════│关键连接参数 (Forward Open Request):
| 参数 | 说明 | 典型值 |
|---|---|---|
| RPI (Requested Packet Interval) | 期望的数据包发送间隔 | 2-100 ms |
| Connection Type | 连接类型:点对点(0x01)、组播(0x02) | 0x01 |
| Priority | 连接优先级:低(0)/高(1)/调度(2) | 1 |
| O->T Size | 输出方向(主站到从站)数据大小(字节) | 4-500 |
| T->O Size | 输入方向(从站到主站)数据大小(字节) | 4-500 |
Powerlink
Powerlink 由 B&R 和 Ethernet POWERLINK 标准组织 (EPSG) 维护,采用轮询和时隙结合的确定性通信机制。
通信周期
Powerlink 的 MN(Managing Node)负责整个网络的时间同步和数据调度,每个通信周期分为三个阶段:
┌─────────────────────────────────────────────────────────────────┐
│ Powerlink 通信周期 │
├──────────────┬────────────────────┬─────────────────────────────┤
│ Start │ Poll / Async │ Idle / Next │
│ Phase │ Phase │ Phase │
├──────────────┼────────────────────┼─────────────────────────────┤
│ SoC 广播 │ PReq (MN→CN) │ SoA 广播,开启异步 │
│ 时钟同步 │ PRes (CN→MN) │ 时段,用于非周期数据 │
│ 所有节点对齐 │ 轮询所有 CN │ 如参数配置、诊断 │
│ 约 10-20 us │ 约 80-400 us │ 约 20-100 us │
└──────────────┴────────────────────┴─────────────────────────────┘阶段详细说明:
- Start Phase:MN 广播 SoC(Start of Cycle)帧,包含精确时间戳,所有 CN(Controlled Node)以此校准本地时钟,实现同步。
- Poll/Async Phase:MN 逐个向 CN 发送 PReq(Poll Request)帧,CN 在收到后立即回复 PRes(Poll Response)帧,携带过程数据。此阶段保证数据确定的收发顺序。
- Async Phase:MN 广播 SoA(Start of Async)帧,开放异步通道,允许非实时数据的传输(如 TCP/IP、FTP、配置数据)。
关键帧结构
| 帧类型 | 功能 | 长度 | 传输方式 |
|---|---|---|---|
| SoC (Start of Cycle) | 周期开始同步 | 最小 12 bytes | 广播 |
| PReq (Poll Request) | MN 轮询 CN 请求数据 | 12 + 数据长度 | 定向 |
| PRes (Poll Response) | CN 响应 MN 的轮询 | 12 + 数据长度 | 定向 |
| SoA (Start of Async) | 异步时段开始 | 最小 12 bytes | 广播 |
| ASnd (Async Send) | 异步数据传输 | 可变 | 定向或组播 |
协议对比
| 对比维度 | Profinet IRT | EtherCAT | EtherNet/IP | Powerlink |
|---|---|---|---|---|
| 标准化组织 | PI (Profibus International) | EtherCAT Technology Group (ETG) | ODVA | EPSG |
| 物理层 | 100BASE-TX / 1000BASE-T | 100BASE-TX | 100BASE-TX / 1000BASE-T | 100BASE-TX |
| 线速度 | 100 Mbps / 1 Gbps | 100 Mbps | 100 Mbps / 1 Gbps | 100 Mbps |
| 最小循环周期 | 31.25 us (IRT) | 10-31.25 us | 0.5-2 ms | 100-400 us |
| 同步精度 | < 1 us (IRT) | < 100 ns (DC) | < 1 ms | < 1 us |
| 抖动 | < 1 us | < 50 ns | < 1 ms | < 0.5 us |
| 最大从站数 | 约 256 | 65535 (理论上) | 约 256 | 约 240 |
| 拓扑结构 | 星型、环型、树型 | 线型、环型、星型、树型 | 星型 (标准以太网) | 星型、树型、总线型 |
| 通信机制 | 时间槽 (TSN-based) | 集总帧逐级转发 | 生产者-消费者 | 轮询 + 时隙 |
| 标准以太网兼容 | 需专用交换机 (IRT) | 需专用从站芯片 | 标准交换机即可 | 需专用 Hub |
| 从站实现成本 | 中等 | 低 (专用 ESC 芯片) | 中等 | 中等 |
| 主要厂商 | Siemens, Phoenix Contact | Beckhoff, Omron | Rockwell, Cognex | B&R, Lenze |
| 典型应用 | 工厂自动化、运动控制、驱动 | 高速运动控制、CNC、机器人 | 离散制造、过程控制 | 运动控制、印刷、包装 |
SCADA 系统
SCADA 系统架构
SCADA(Supervisory Control and Data Acquisition)是工业过程监控与数据采集的核心系统,采用分层分布式架构。
五层架构模型
┌─────────────────────────────────────────────────────────────────────┐
│ 企业层 (Enterprise) │
│ ERP / MES / 生产调度 / 数据分析平台 │
└──────────────────────────┬──────────────────────────────────────────┘
│ OPC UA / Web API / 数据库接口
┌──────────────────────────▼──────────────────────────────────────────┐
│ 监控层 (Supervisory) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 中央监控站 │ │ 操作员站 │ │ 工程师站 │ │
│ │ (MTU 主站) │ │ (HMI 客户端) │ │ (组态/维护) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 实时数据库 │ │ 历史数据库 │ │ 通信服务器 │ │
│ │ (RTDB) │ │ (Historian) │ │ (协议网关) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────┬──────────────────────────────────────────┘
│ 工业以太网 (Profinet / Modbus TCP / OPC UA)
┌──────────────────────────▼──────────────────────────────────────────┐
│ 控制层 (Control) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PLC │ │ RTU │ │ 边缘控制器 │ │
│ │ 逻辑控制/ PID │ │ 远程遥测 │ │ 协议转换/本地 │ │
│ │ 运动控制 │ │ 数据采集 │ │ 闭环控制 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────┬──────────────────────────────────────────┘
│ 现场总线 (Profibus / Modbus RTU / CAN)
┌──────────────────────────▼──────────────────────────────────────────┐
│ 现场层 (Field) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 传感器/ │ │ 执行器/ │ │ 变频器 │ │ 智能仪表 │ │ 视觉 │ │
│ │ 变送器 │ │ 阀门 │ │ │ │ │ │ 相机 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────────┘核心组件说明
MTU(Master Terminal Unit,主站终端单元):
- 位于中央监控中心,作为 SCADA 系统的核心调度节点。
- 负责与所有 RTU/PLC 通信,收集遥测数据,下发遥调指令。
- 运行实时数据库,维护全系统状态快照。
- 典型 MTU 产品:Wonderware System Platform、WinCC OA、Ignition SCADA。
RTU(Remote Terminal Unit,远程终端单元):
- 部署于现场远程站点,用于数据采集和控制指令执行。
- 支持多种通信接口(RS-232/485、以太网、4G/5G、LoRa、卫星)。
- 具备本地自主控制能力和断网缓存功能(存储转发)。
- 典型 RTU 产品:SEL RTAC、Motorola ACE3600、国产四方/南瑞 RTU。
PLC(Programmable Logic Controller,可编程逻辑控制器):
- 部署于车间/产线现场,用于高速逻辑控制、顺序控制、运动控制。
- 扫描周期通常为 1-50 ms,支持梯形图/ST/FBD 等多种编程语言(IEC 61131-3)。
- 通过工业以太网(Profinet/EtherCAT/EtherNet/IP)与上位机通信。
- 典型 PLC 产品:Siemens S7-1500、Rockwell ControlLogix、Beckhoff CX。
HMI(Human-Machine Interface,人机界面):
- 工业触摸屏或工业平板,提供现场级的人机交互操作界面。
- 显示工艺流程、实时数据、报警信息,支持操作员输入控制指令。
- 分辨率通常为 1024x768 到 1920x1080,防护等级 IP65 以上。
- 典型 HMI 产品:Siemens WinCC Comfort/Unified、Rockwell PanelView、Weintek cMT。
通信服务器:
- 担任协议转换网关角色,将多种工业协议统一转换为 OPC UA / Modbus TCP / MQTT。
- 支持多协议并发接入,数据格式标准化,时间戳统一校准。
- 双机冗余配置确保通信链路高可用。
数据采集
三种采集模式
| 采集模式 | 原理 | 适用场景 | 优缺点 |
|---|---|---|---|
| 轮询 (Polling) | 主站按固定周期逐个向从站发送请求,从站响应数据 | 传统 SCADA、站点数量较少 (< 200) | 实现简单,但带宽利用率低,扩展性受限 |
| 事件驱动 (Event-Driven) | 从站仅在检测到事件时主动上报 | 告警、状态突变、设备故障 | 实时响应快,系统负载低,但需保证上报可靠性 |
| 变化检测 (Change Detection) | 从站仅当数据变化量超过死区阈值时才上报 | 模拟量采集(温度、压力、流量) | 有效降低通信负载和数据存储量 |
轮询时序
主站 (MTU) 从站 (RTU/PLC)
│ │
│ 请求帧 (Function Code 03, 地址, 数量) │
│─────────────────────────────────────────>│
│ │ T1 = 响应时间
│ 响应帧 (Data bytes, CRC) │
│<─────────────────────────────────────────│
│ │
│ 轮询间隔 (Polling Interval) │
│ x ms │
│ │
│ 请求帧 (下一个从站 / 下一个寄存器) │
│─────────────────────────────────────────>│
│ │
... ...轮询参数配置建议:
| 数据类型 | 轮询间隔 | 死区设置 | 描述 |
|---|---|---|---|
| 模拟量(温度/压力) | 500-2000 ms | 0.5-1% 量程 | 变化平缓,长周期轮询 + 变化检测 |
| 数字量(开关/状态) | 200-500 ms | 无死区 | 状态变化需要及时采集 |
| 电量(电压/电流) | 1000-5000 ms | 1-2% 量程 | 稳定量测数据,长周期 |
| 告警信号 | 事件驱动 | 无死区 | 采用主动上报模式 |
OPC UA 数据采集示例
OPC UA 客户端 (SCADA) OPC UA 服务器 (PLC/设备)
│ │
│ 1. Discover Endpoints │
│────────────────────────────────────────>│
│ Endpoints Response │
│<────────────────────────────────────────│
│ │
│ 2. Create Session (安全通道建立) │
│────────────────────────────────────────>│
│ Session Response │
│<────────────────────────────────────────│
│ │
│ 3. Browse / Read 变量节点 │
│ NodeId: ns=2;i=1001 (温度) │
│────────────────────────────────────────>│
│ DataValue (Value, Timestamp, Quality) │
│<────────────────────────────────────────│
│ │
│ 4. Subscribe 订阅 │
│ MonitoredItem: NodeId, SamplingInterval │
│────────────────────────────────────────>│
│ Subscribe Response (SubscriptionId) │
│<────────────────────────────────────────│
│ │
│ 5. Publish 通知 (周期性推送) │
│<════════════════════════════════════════│
│ DataChange Notification │
│<════════════════════════════════════════│OPC UA 地址空间节点示例 (JSON 格式):
{
"NodeId": "ns=2;i=1001",
"BrowseName": "Line1.ProductionZone.Temperature",
"DisplayName": "产线1 生产区 温度",
"Description": "1号产线生产区环境温度传感器",
"NodeClass": "Variable",
"DataType": "Double",
"Value": {
"Value": 25.6,
"SourceTimestamp": "2026-07-12T14:30:00.123Z",
"StatusCode": 0
},
"AccessLevel": "CurrentRead",
"MinimumSamplingInterval": 500.0,
"EngineeringUnits": {
"DisplayName": "°C",
"UnitId": 4408652
}
}人机界面 HMI
HMI 画面组态
HMI 组态通常包含以下画面层级:
| 画面层级 | 名称 | 功能 | 刷新频率 |
|---|---|---|---|
| L0 | 总览图 | 全厂或全系统概览,关键 KPI 看板 | 1-5 s |
| L1 | 工艺流程图 | 按生产工艺流程显示设备状态、实时参数、物料走向 | 500-1000 ms |
| L2 | 设备面板 | 单设备详细监控,参数设置,手动控制 | 200-500 ms |
| L3 | 趋势/报表 | 历史趋势曲线、统计报表、效率分析 | 按需查询 |
典型画面布局:
┌─────────────────────────────────────────────────────────────────────┐
│ HMI 画面布局 │
├──────────────┬──────────────────────────────────────────────────────┤
│ │ │
│ 导航栏 │ 工艺流程图主画面 │
│ │ │
│ ┌────────┐ │ ┌────────┐ ┌────────┐ │
│ │ 总览 │ │ │ 料仓 A │───────│ 混合器 │───────│ 反应釜 │ │
│ ├────────┤ │ │ 12.5°C │ │ │ 45.7°C │ │ │ 89.2°C │ │
│ │ 工艺图 │ │ │ 2.3 bar│ │ │ 1.8 bar│ │ │ 5.6 bar│ │
│ ├────────┤ │ └────────┘ │ └────────┘ │ └────────┘ │
│ │ 设备1 │ │ │ │ │ │ │ │
│ ├────────┤ │ └──────┴────────┴────────┴────────┘ │
│ │ 设备2 │ │ │
│ ├────────┤ │ ┌─────────────────────────────────────────┐ │
│ │ 报警 │ │ │ 报警列表 / 操作记录 │ │
│ ├────────┤ │ │ [2026-07-12 14:30:15] 料仓A 温度高报警 │ │
│ │ 趋势 │ │ │ [2026-07-12 14:25:00] 混合器 启动 │ │
│ └────────┘ │ └─────────────────────────────────────────┘ │
│ │ │
├──────────────┴──────────────────────────────────────────────────────┤
│ 状态栏:系统运行中 | 当前用户: Admin | 连接数: 128 | 告警: 3 │
└─────────────────────────────────────────────────────────────────────┘报警管理
报警按严重程度分级管理:
| 等级 | 名称 | 颜色 | 响应时间 | 处理方式 |
|---|---|---|---|---|
| 1 | 紧急 (Emergency) | 红色 (#FF0000) | < 5 min | 自动停机/安全联锁、声光报警、短信通知 |
| 2 | 高级 (High) | 橙色 (#FF8C00) | < 15 min | 操作员确认、自动调节、限制输出 |
| 3 | 中级 (Medium) | 黄色 (#FFD700) | < 60 min | 操作员确认、建议操作 |
| 4 | 低级 (Low) | 蓝色 (#6495ED) | 下一班次 | 记录归档、日常巡检 |
报警数据表:
CREATE TABLE alarm_record (
alarm_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '报警 ID',
alarm_code VARCHAR(32) NOT NULL COMMENT '报警编号',
alarm_level TINYINT NOT NULL COMMENT '报警等级:1-紧急 2-高级 3-中级 4-低级',
alarm_type TINYINT NOT NULL COMMENT '报警类型:1-越限 2-偏差 3-变化率 4-设备故障 5-通信中断 6-系统',
source_node VARCHAR(128) NOT NULL COMMENT '报警来源(OPC UA NodeId 或 设备标签)',
source_desc VARCHAR(256) COMMENT '报警来源描述',
alarm_value VARCHAR(64) COMMENT '触发报警时的值',
limit_value VARCHAR(64) COMMENT '报警限值',
message VARCHAR(500) NOT NULL COMMENT '报警文本',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-未确认 1-已确认 2-已恢复 3-已归档',
occur_time DATETIME NOT NULL COMMENT '发生时间',
ack_time DATETIME COMMENT '确认时间',
ack_user VARCHAR(32) COMMENT '确认人',
recovery_time DATETIME COMMENT '恢复时间',
INDEX idx_occur_time (occur_time),
INDEX idx_level_status (alarm_level, status),
INDEX idx_source (source_node)
) COMMENT '报警记录表';趋势与报表
实时趋势:显示最近 1-4 小时的数据曲线,刷新频率 1-2 秒,用于操作员监控当前工况。
历史趋势:支持任意时间范围查询(天/周/月/年),可叠加多条曲线对比,支持缩放、平移、游标读取。
统计报表:
| 报表类型 | 周期 | 内容 |
|---|---|---|
| 班报 | 每班次 | 产量、合格率、停机时间、能源消耗、报警统计 |
| 日报 | 每天 | 综合生产数据、质量数据、设备综合效率 (OEE) |
| 月报 | 每月 | 月度产量趋势、设备可用率、能耗分析、成本统计 |
| 年报 | 每年 | 年度产能分析、设备维护计划、质量趋势 |
历史数据库
SCADA 采用实时数据库与关系数据库双存储架构,兼顾实时查询的极速响应和历史分析的复杂查询能力。
双存储架构
现场设备 ──> 通信服务器 ──> ┌────────────────────────────────────────┐
│ SCADA 数据管理层 │
│ │
│ ┌──────────────────────────────────┐ │
实时数据──>│ 实时数据库 (RTDB) │ │
│ │ - 仅存储当前值 + 最近 N 个快照 │ │
│ │ - 内存/MMAP 存储 │ │
│ │ - 访问延迟 < 1 ms │ │
│ │ - 支持发布/订阅 │ │
│ └──────────────────────────────────┘ │
│ │ │
│ │ 数据归档 (背景任务) │
│ ▼ │
│ ┌──────────────────────────────────┐ │
│ │ 历史数据库 (关系库 + TSDB) │ │
│ │ - 压缩存储所有历史数据 │ │
│ │ - 关系库:报警/事件/操作日志 │ │
│ │ - 时序库:模拟量过程数据 │ │
│ │ - 死区压缩 + 旋转门压缩 │ │
│ │ - 支持 SQL / REST 查询 │ │
│ └──────────────────────────────────┘ │
└────────────────────────────────────────┘实时数据库核心表结构
实时数据点定义 (Tag Definition):
CREATE TABLE tag_definition (
tag_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '数据点 ID',
tag_name VARCHAR(128) NOT NULL COMMENT '点名(全局唯一)',
tag_alias VARCHAR(64) COMMENT '点别名',
description VARCHAR(256) COMMENT '描述',
data_type TINYINT NOT NULL COMMENT '数据类型:1-BOOL 2-INT16 3-INT32 4-FLOAT 5-DOUBLE 6-STRING',
unit VARCHAR(32) COMMENT '工程单位',
low_limit DOUBLE COMMENT '量程下限',
high_limit DOUBLE COMMENT '量程上限',
deadband DOUBLE COMMENT '变化死区百分比',
scan_rate_ms INT NOT NULL DEFAULT 1000 COMMENT '采集周期 (ms)',
archive_enabled TINYINT NOT NULL DEFAULT 1 COMMENT '是否归档',
archive_deadband DOUBLE COMMENT '归档死区百分比(旋转门)',
alarm_enabled TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用报警',
alarm_high DOUBLE COMMENT '高高报警限',
alarm_low DOUBLE COMMENT '低低报警限',
alarm_high_warn DOUBLE COMMENT '高报警限',
alarm_low_warn DOUBLE COMMENT '低报警限',
source_protocol VARCHAR(32) COMMENT '源协议:OPCUA/MODBUS/PROFINET',
source_address VARCHAR(256) COMMENT '源地址',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_tag_name (tag_name),
INDEX idx_tag_group (tag_group)
) COMMENT '实时数据点定义表';历史归档数据表:
CREATE TABLE history_analog (
tag_id BIGINT NOT NULL COMMENT '数据点 ID',
timestamp DATETIME NOT NULL COMMENT '时间戳',
value DOUBLE NOT NULL COMMENT '数值',
quality TINYINT NOT NULL COMMENT '质量戳:0-好 1-坏 2-不确定 3-手工输入',
INDEX idx_tag_time (tag_id, timestamp)
) COMMENT '模拟量历史归档表(按时间分区,使用时序数据库引擎)';
-- 按天自动分区示例(InfluxDB / TimescaleDB 风格)
-- 关系库实现可做按年/月的分区表旋转门压缩算法 (Swinging Door Trending):
旋转门压缩是 SCADA 历史数据库广泛使用的数据压缩算法,在保证数据精度的前提下大幅减少存储量。
算法原理:
对于每个新数据点 (ti, vi),从参考点 (t0, v0) 出发,计算上下两个
旋转门边界(deadband 宽度 e):
上门斜率上限: max_k = (vi - v0 + e) / (ti - t0)
下门斜率下限: min_k = (vi - v0 - e) / (ti - t0)
当 max_k < min_k 时,表示前一个点为拐点,需要存储,
并以该点为新的参考点继续。
值 (Value)
│
│ ┌──────┐ e = 死区 (归档精度控制)
│ │ │
v0 │──┼──● │
│ │ │ │
│ │ │ │
│ │ └───┼───●
│ │ │ │
│ └──────┼───┼───●
│ │ │ │
│ └───┼───┼───●
│ │ │ │
└───────────────────────→ 时间 (Time)
t0 t1 t2 t3 t4
存储点:t0, t2, t4(拐点存储)
丢弃点:t1, t3(在死区内)SCADA 安全
安全威胁模型
SCADA 系统的安全威胁主要来自以下维度:
| 威胁类别 | 具体攻击 | 潜在影响 |
|---|---|---|
| 网络攻击 | 拒绝服务 (DoS)、中间人攻击、端口扫描 | 通信中断、数据篡改 |
| 恶意软件 | 勒索软件、蠕虫、Stuxnet 式定向攻击 | 系统瘫痪、设备损坏 |
| 内部威胁 | 权限滥用、误操作、数据窃取 | 生产事故、数据泄露 |
| 物理攻击 | 设备破坏、未授权接入控制室 | 系统失守 |
| 供应链攻击 | 固件后门、第三方组件漏洞 | 长期潜伏渗透 |
纵深防御策略
网络隔离:
┌───────────────────────────────────────────────────────────────────┐
│ 企业 IT 网络 (Level 4-5) │
│ Internet / 办公网络 / ERP / MES │
└─────────────────────────┬─────────────────────────────────────────┘
│ 防火墙 (Firewall) + 入侵检测 (IDS)
│ 策略:仅允许特定 IP + 端口 + 协议
┌─────────────────────────▼─────────────────────────────────────────┐
│ SCADA 监控网络 (Level 3) │
│ 操作员站 / 工程师站 / 实时数据库 / 历史数据库 │
└─────────────────────────┬─────────────────────────────────────────┘
│ 工业防火墙 (Industrial Firewall)
│ 深层包检测 (DPI) / 白名单 / 单向网关
┌─────────────────────────▼─────────────────────────────────────────┐
│ 控制网络 (Level 2) │
│ PLC / RTU / 边缘控制器 / 工业交换机 │
└─────────────────────────┬─────────────────────────────────────────┘
│ 物理隔离 / 串口通信
│ 禁止未经授权的访问
┌─────────────────────────▼─────────────────────────────────────────┐
│ 现场网络 (Level 1) │
│ 传感器 / 执行器 / 变频器 / 仪表 │
└───────────────────────────────────────────────────────────────────┘白名单机制:
| 维度 | 白名单策略 | 说明 |
|---|---|---|
| IP 白名单 | 仅允许预先登记的设备 IP 接入 SCADA 网络 | 新设备需审批加入 |
| 端口白名单 | Modbus TCP (502)、OPC UA (4840)、Profinet 等特定端口 | 关闭所有不必要端口 |
| 协议白名单 | 仅允许 Modbus / OPC UA / Profinet / EtherNet/IP 等工业协议通过 | 拒绝非工业协议 |
| 操作白名单 | 仅允许操作员在授权的 HMI 画面上执行预定义操作 | 禁止直接写寄存器 |
| USB 白名单 | 仅允许已注册的 U 盘 / 键盘 / 鼠标接入 HMI 或工程师站 | 防止恶意设备接入 |
用户认证与审计:
| 安全措施 | 实现方式 | 标准/规范 |
|---|---|---|
| 身份认证 | 用户名 + 密码(密码复杂度 8 位以上,包含大小写字母+数字+特殊字符) | ISO 27001 |
| 多因素认证 | 密码 + 动态验证码 / 指纹 / U-Key | NIST SP 800-82 |
| 角色权限 (RBAC) | 操作员(只读/控制)、工程师(组态/修改)、管理员(系统权限)、审计员(只读日志) | IEC 62443 |
| 操作审计 | 记录所有登录、控制操作、参数修改、上下位机通信事件 | 等保 2.0 |
| 会话管理 | 登录超时自动锁定(15 分钟无操作)、并发会话数限制 | OWASP 建议 |
审计日志表:
CREATE TABLE security_audit_log (
log_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '审计日志 ID',
event_time DATETIME NOT NULL COMMENT '事件时间',
event_type TINYINT NOT NULL COMMENT '事件类型:1-登录 2-登出 3-控制操作 4-参数修改 5-配置变更 6-报警确认 7-用户管理 8-系统事件',
user_name VARCHAR(64) NOT NULL COMMENT '操作用户',
user_ip VARCHAR(45) COMMENT '来源 IP',
user_role VARCHAR(32) COMMENT '用户角色',
object_type VARCHAR(32) COMMENT '操作对象类型:TAG/SCREEN/ALARM/USER/SYSTEM',
object_id VARCHAR(128) COMMENT '操作对象标识',
action VARCHAR(256) COMMENT '操作描述',
old_value TEXT COMMENT '操作前值',
new_value TEXT COMMENT '操作后值',
result TINYINT NOT NULL DEFAULT 1 COMMENT '操作结果:0-失败 1-成功',
detail TEXT COMMENT '详细描述',
INDEX idx_event_time (event_time),
INDEX idx_user (user_name),
INDEX idx_event_type (event_type)
) COMMENT '安全审计日志表';合规性检查清单(参照 IEC 62443 / 等保 2.0 工业控制系统安全要求):
| 控制点 | 要求 | 实现方式 |
|---|---|---|
| 账户管控 | 禁用默认账户,删除共享账户,离职员立即注销 | AD/LDAP 统一认证 |
| 访问控制 | 最小权限原则,禁止远程直接访问 PLC | 堡垒机 + 工单审批 |
| 安全补丁 | 每季度评估 SCADA 系统和组件安全补丁 | 补丁测试环境验证后灰度部署 |
| 日志保留 | 日志保存不少于 180 天,支持导出和备份 | 集中日志服务器 (SIEM) |
| 无线安全 | 无线 HMI / 移动终端使用 WPA2-Enterprise 或 VPN 接入 | 独立 SSID + 802.1X |
| 应急响应 | 制定 SCADA 安全应急预案,每年演练一次 | 剧本式应急流程 + 离线备份恢复 |