干工控这行十年,我接手过不少老旧SCADA系统的改造项目,最头疼的往往不是设备本身,而是“上不了台面的老家伙”——系统跑了十几年,上位机还是Windows XP,工程师连密码都交接不清楚,生产部门却天天喊要加告警、加统计、加手机推送。你说停机升级?领导立刻摇头。所以当我第一次接触“旁路加装边缘计算网关”这个思路时,心里就两个字:靠谱。这篇文章就把我实际做的方案拆开讲,从为什么选旁路、网关怎么选,到点位配置和告警规则怎么写,尽量讲透,让正在被老旧SCADA系统困住的朋友能直接参考。

1. 先理清关系:SCADA、HMI、PLC分别是什么

1.1 三个概念的边界与协作关系

很多人刚接触中控系统,经常会问“SCADA和HMI有什么区别”“SCADA和PLC是什么关系”,这个基础不搞清楚,后面谈旁路加装网关就是空中楼阁。简单说,PLC是现场级执行设备,它接收传感器信号、控制阀门电机,是自己会干活的“手脚”;HMI是单台设备的“脸面”,比如触摸屏,直接连在PLC旁边,操作工站在现场点按钮、看数值;SCADA则是“大脑中枢”,它通过网络把几十上百台PLC的数据汇总到中控室,实现集中监视、历史存储、报表打印和远程调度。

这三者不是竞争关系,而是分层协作的关系。数据流通常是:传感器进入PLC,PLC再通过Modbus、Profibus、OPC等协议把数据送给SCADA,SCADA画面上显示全局工艺参数,操作员在中控室就能下发设定值,最终指令还是会写回PLC。老系统里,可能一台工控机同时装了SCADA组态软件和HMI画面,甚至有些小型项目直接用触摸屏当SCADA用,这也没问题,核心在于数据从哪里来、控制指令到哪里去。

了解这个层级之后,我们做旁路方案就容易定位了——旁路网关要接的位置,就在“PLC与SCADA之间的数据传输链路上”,不动任何一端,只是在旁边听数据。

1.2 老旧SCADA系统为什么不敢轻易动

我碰到过很多老项目,上位机装的是Windows XP或Windows Server 2003,SCADA组态软件可能是十几年前的版本,甚至有的还挂着加密狗。这种系统有几个共性问题:第一,组态软件授权早就找不到人了,格式化后再装回去几乎不可能;第二,老电脑的串口、并口、PCI卡都是特定的,换新机器可能不兼容;第三,很多老工程师退休了,现场图纸不全,点位表靠翻旧记录,谁也不敢保证改完不会丢点。

更要命的是,SCADA系统往往是7x24小时运行,产线不能停。你想在PLC和SCADA之间串一个网关做数据处理,串不好就是事故,轻则通讯超时,重则导致中控失联。所以“能不动就不动,能旁路就不串联”成了我的第一原则。

2. 旁路加装边缘计算网关的核心设计思路

2.1 为什么选旁路而不是串联

传统加网关的方式,是把网关串在PLC和SCADA之间——数据先到网关,网关处理后转发给SCADA。这种做法有两个隐患:一是网关挂了,后面所有数据都断,SCADA直接黑屏;二是PLC的通讯链路会多一次转发延迟,对于老系统本就不富裕的扫描周期来说,可能是压死骆驼的最后一根稻草。串联方案适合新项目,不适合老系统改造。

旁路方案则完全不一样。网关是通过交换机的镜像端口(Port Mirroring)或者TAP分光器,复制一份网络数据流,网关只“听”不改,它不占原链路的IP,不改变原有通讯时间,就算网关断电、重启、烧了,PLC和SCADA之间的数据交换完全不受影响。这也是“无损”两字的真正含义——原有系统一根汗毛都不动。

2.2 旁路监听的技术原理与适用场景

旁路监听听起来像“网络抓包”,实际上比普通抓包更深入。以我常用的方案为例:核心交换机上为SCADA服务器所连端口做一个镜像,或者把PLC接入交换机口的流量全部复制到网关端口,网关以嗅探方式捕获Modbus TCP报文,然后通过协议解析还原出寄存器地址和数值变化,再在本地边缘计算引擎里跑告警规则。

这种方式能拿到“真实现场数据”,因为报文直接从PLC发出到SCADA,网关解析的数值和SCADA看到的完全一致,不存在中间转录误差。适用场景非常广泛:水厂泵站、污水处理、热力管网、老旧配电房监控、小型产线设备等,只要现场是用Modbus TCP、IEC 104、OPC UA这类标准工业协议通讯,就可以旁路。

2.3 硬件部署位置与网络测绘

第一次到现场做旁路方案,不要急着接线,先做网络测绘。用笔记本接到核心交换机上,跑一遍Nmap或者Wireshark扫一下网段,搞清楚三件事:PLC都分布在哪些IP、SCADA服务器IP是多少、PLC与SCADA之间的端口映射是什么样的。很多老系统用的是多网卡结构,中控室一台机器几张网卡分别接不同网段,这种情况下你必须在SCADA服务器实际通讯的那张网卡所连交换机上做镜像,否则一定抓不到包。

测绘完成后,给网关分配一个独立的管理IP,和SCADA网段尽量不要冲突,推荐放到一个单独的VLAN里。网关的数据出口(4G或者企业内网上行口)只负责上报数据到云平台或第三方系统,不走工业控制网。

3. 边缘计算网关怎么选:硬件、协议、点位表缺一不可

3.1 硬件配置该怎么定

边缘计算网关不是路由器,硬件配置不能拍脑袋选。我的经验是,先估算数据点位数量和数据量,再决定CPU、内存和存储。假设现场有20台PLC,每台PLC有200个寄存器点,总共4000个点,采集周期1秒,边缘计算每分钟要处理约24万条数据变化,那么四核CPU、4GB内存、32GB工业级存储就绰绰有余。如果你还要在网关本地跑几十条告警规则和公式计算,内存建议起步8GB。

另一个硬件细节是宽温设计。很多网关放在配电柜或机柜里,夏天温度可能到60度,民用级设备扛不住,必须选支持-40到75度工业宽温的产品。另外电源建议双路DC输入,12/24V通用,标配断电报警,防止现场电柜检修时网关悄悄掉电,最后以为是数据异常其实真凶是没电了。

3.2 协议支持是这个方案的核心灵魂

选型时有一个指标比CPU还重要:协议解析能力。老SCADA系统下面带的PLC品牌五花八门,国产的、进口的、日系的。常见的协议至少要覆盖:Modbus RTU、Modbus TCP、OPC DA、OPC UA、IEC 60870-5-104、西门子S7comm、三菱MC协议、欧姆龙FINS、AB的EtherNet/IP。有些厂商的网关只支持自家的“私有云协议”,接到别的平台就哑火,这种尽量避开。

另外要注意,部分国产PLC虽然底层是Modbus,但寄存器编址有偏移或者做了加密封装,最好选支持自定义协议解析、能通过脚本去解的网关。同时,网关必须支持MQTT、HTTP/HTTPS、TCP/UDP等标准上行协议,方便对接公司自己的平台、第三方小程序或者企业微信机器人。

3.3 点位表是部署前的“施工图纸”

去现场之前,一定要找业主或者老工程师要一份PLC点位表。点位表上记录了每一个寄存器的地址、数据类型、量程、工程单位、所属设备。没有点位表,旁路网关就是个瞎子——虽然能抓到报文,但不知道哪个数值是压力、哪个是温度。点位表不完整的情况,我一般会去SCADA组态软件的标签变量表导出一份,再结合PLC程序反查。

点位表拿到手后,按“只采关键告警点”的原则筛选。不要贪多把每个寄存器都配进去,那样规则写起来累,网关负载也高。我通常只采集三类点:模拟量越限点(温度、压力、液位)、数字量状态点(电机启停、阀门开关、故障信号)、累积量点(流量计读数,用于断流检测)。一个几百个点的项目,真正需要采集监听的往往不到100个。

4. 实操全程:三步完成旁路告警系统部署

4.1 第一步:网络接入和交换机镜像配置

先确定镜像方式。老交换机如果支持端口镜像,直接命令行配置。以常见的H3C交换机为例,假设SCADA服务器接在G1/0/1口,网关接在G1/0/24口,配置如下:

system-view
mirroring-group 1 local
mirroring-group 1 mirroring-port GigabitEthernet1/0/1 both
mirroring-group 1 monitor-port GigabitEthernet1/0/24

这里的both表示双向流量都镜像,既监听PLC发给SCADA的数据,也监听SCADA下发给PLC的指令。对于告警系统来说,双向数据都重要——下发指令是判断操作员操作行为的关键。

如果老交换机不支持镜像功能,就得用TAP分光器。物理上把它串在PLC与交换机之间的网线上,一路给交换机,一路给网关。注意,这种部署必须去现场确认网线确认为PLC到交换机的直连,不要误接在两条不同的链路上。分光器属于物理层设备,即使断电也只影响网关那一路,原通讯完全不受影响。

4.2 第二步:网关数据采集规则配置

网关配好IP和网络后,进入配网页面。在Modbus TCP采集配置里,按点位表逐条添加。以一台PLC采集温度为例,设备IP是192.168.1.10,温度寄存器地址是40001(Modbus协议里4开头的保持寄存器),数据类型为16位无符号整数,量程0到150摄氏度,采集周期1秒。

设备名称: 1号PLC
协议: Modbus TCP
IP: 192.168.1.10
端口: 502
采集周期: 1s
点位列表:
  - 名称: 1号反应釜温度
    寄存器: 40001
    类型: UINT16
    倍率: 0.1
    单位: ℃
    越限高值: 120
    越限超高值: 135
    越限低值: 5
    死区: 0.5

这里有两个细节常被忽略。一个是倍率,很多PLC内部温度值会乘10再存,比如1200代表120.0度,配置时倍率写0.1才能还原真实工程值。一个是死区,温度在设定值附近上下抖动属于正常波动,不设置死区会产生大量无效告警,我一般按满量程的0.5%至1%设置死区。

4.3 第三步:告警规则与通知渠道配置

告警规则的核心是“好规则胜过多告警”。我通常会按优先级建立三档规则:

  • 一级紧急告警:模拟量超高/超低,或数字量故障信号为1,立即触发,通过MQTT上报、短信通知值班班长。
  • 二级警告:模拟量接近上下限但未越限,触发后延迟10秒确认才推送,防止偶发毛刺。
  • 三级事件记录:设备启停、操作员登录,仅记录存库,不推送。

以“1号反应釜温度超高”为例,在网关边缘计算模块里写规则:

-- 伪代码示意
local temp = data["1号反应釜温度"]
if temp >= 135 then
  alarm("紧急", "1号反应釜温度超高", temp .. "℃")
elseif temp >= 120 then
  alarm("警告", "1号反应釜温度接近上限", temp .. "℃", 10)
end

告警触发后,网关通过MQTT协议推送到物联网平台,平台再调用企业微信机器人、短信网关或者邮件服务触达相关人员。整体链路延时实测小于2秒,比传统SCADA的声光报警加电话通知要直接得多。

5. 告警质量是这个方案真正值钱的地方

5.1 旁路网关做告警的差异化优势

老SCADA系统本身也有报警功能,那为什么还要额外加边缘计算网关?我遇到最多的情况是:老系统的报警功能太弱,只有声音和画面弹窗,报警历史记录存放在本地硬盘,一旦硬盘满了或系统重启,记录的报警全没了。而且老系统只能用机房里的专用电脑看,工程师不在中控室,报警根本看不到。

旁路网关把告警这一层彻底解耦了出来。告警规则生成、历史存储、消息推送全部由网关负责,就算老SCADA系统崩溃、蓝屏、断网,告警链路依然工作。这个“双保险”的意义,在半夜设备故障时尤其明显——工人不用跑到中控室盯着屏幕,手机直接收到故障点信息。

5.2 告警去重、抑制与升级机制

直接按数值临界触发告警,会产生大量垃圾信息。比如液位在设定值附近来回波动,5分钟推送10条,谁都会把消息屏蔽。我这边实际用下来,必须在网关侧做好三件事:

一是去重,同一设备同一告警类型在保持时间内只能触发一条,待状态恢复后再生成新的告警。二是抑制,当某一个关键前置条件不满足时,后续告警不触发,比如“冷却水泵未启动”时不再推送“温度高”告警,因为这时候温度高是正常现象。三是升级,如果告警持续超过10分钟没有被确认,自动从企业微信消息升级为电话语音通知,防止漏看。

这些逻辑如果放在老SCADA的组态软件里写,每加一个都要停机组态、重新下载程序,风险极高。但放在边缘网关里,只是配置一段规则而已,试错成本极低。

5.3 用实测数据调优告警准确率

部署完成后,不要急着交付,建议至少观察一周。这段时间我会每天比对网关记录和现场实际运行情况,统计误报率、漏报率,然后调优死区范围和延迟确认时间。以我做的某水厂项目为例,第一周交付时告警准确率只有78%,误报全是浊度仪瞬间波动引起的。后来把这几个点位的死区从1%调成3%,告警确认延迟从0秒改为5秒,第二周准确率稳定在97%以上。

有一个经验供参考:受控对象的惯性越大,死区可以设得越大。温度、液位这类大惯性参数,死区按满量程的2%到3%设;压力、流量这类快变量,死区要小一些,但建议配合3到5秒的连续越限确认,而不是单点越限就触发。

6. 真实踩坑记录:排查方法与避坑技巧

6.1 常见问题排查速查表

现象 可能原因 排查思路
网关抓不到PLC报文 镜像口配置错误或接错交换机 用Wireshark看是否能看到含PLC IP的包,看不到就回到4.1检查设备接入
能抓到包但解析不出数值 寄存器地址或数据类型设置错 用Modbus Poll工具主动去读PLC,对比点位表核对地址和字序
告警偶尔漏报 采集周期大于数据变化周期 缩短网关采集周期,比如从1秒改为500毫秒
告警重复推送 未设置保持时间或死区 在规则里增加去重大时间窗口和死区
网关重启后配置丢失 配置未保存到本地磁盘 检查配置持久化选项,定期导出备份

6.2 案例一:镜像口抓不到包,现场排查花了半天

某污水处理厂项目,我在核心交换机上配了镜像,但网关什么都抓不到。检查了VLAN配置、镜像方向、端口UP状态,全部正常,最后还是用笔记本插到网关口抓包才发现,交换机上配置的镜像源端口号打错了——SCADA服务器实际接的是G1/0/5,我配成了G1/0/4。这种低级错误最好用一层层检查的办法:先确认物理端口,再确认VLAN,最后确认镜像方向。

6.3 案例二:设备状态明明是停机,网关还显示运行

后来发现是PLC的寄存器字序问题。某进口PLC采用大字序(Big Endian)存储32位浮点,而网关默认按小字序解释,数值完全对不上。排查时用Modbus Poll逐个读寄存器,对比PLC编程软件里的实际值,才定位到是字节序的问题。这种问题在对接西门子、AB等老外设备时特别常见,网关配置页面一定要确认字节序设置。

6.4 案例三:4G信号弱导致通知延迟,部署位置调整后解决

某个泵站现场在地下室,4G信号只有一格,告警消息延迟了将近3分钟。后来我把网关的天线用延长线拉到了机柜外部,信号从一格变成三格,延迟降到了5秒以内。如果机房环境实在差,建议选支持外接天线的型号,部署时先测一下运营商信号强度,不要图省事直接塞机柜里。

这套方案做完之后的一些体会

旁路加装边缘计算网关这个方法,本质上是给老旧SCADA系统配了一套“体外生命体征监护仪”,它不代替原有系统工作,但在原系统照顾不到的地方——告警推送、历史存储、远程通知——补齐了关键能力。我个人做下来,最大的收益不是功能本身,而是“终于可以不用再提心吊胆地动老系统了”。如果你手头也有这样的老旧系统,不妨先做一个小的点位试点,用一台网关、一条命令、一个镜像口,先把一套关键设备的告警跑起来,再逐步扩展。这种小步快跑、无损叠加的改造思路,值得在每个工控老项目里试一试。

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐