干工厂自动化的朋友应该都有这种体会:最常被业务部门问的一句话就是,“设备的状态数据能不能实时看到?”,“今天生产了多少、停机多久、能耗多少,能不能自动汇总?”早年我们的常规做法是,现场接SCADA或者组态软件,把PLC的数据读出来,画在厂区的监控大屏上。但能看到的范围基本就限制在车间局域网里,一旦想跨厂区、做集团级的集中监控,或者给数据分析团队喂实时数据,这套老架构就卡住了。
把PLC数据采集并上云这件事,本质上是把原来封闭在车间里的数据链路,通过边缘网关和物联网平台,延伸到云端。整个方案涉及PLC通信协议、边缘网关选型、MQTT传输、云端物联网平台、时序数据库存储,再到可视化报表和告警,是一条完整的技术链路。我后续会把这套架构拆成几个层次,结合我做过的实际项目,把每一层的选型思路、参数计算、常见坑位都讲清楚。这套东西适合自动化工程师、物联网开发者和工厂信息化负责人参考,它解决的核心问题,就是让设备数据从“只看本地”变成“可控、可算、可用”。
1. 从PLC到云端:整条链路为什么必须分层设计
1.1 先搞清楚PLC数据上云到底难在哪
PLC本身是个很“封闭”的设备。西门子、三菱、欧姆龙、施耐德、汇川、信捷,各家通信协议不一样,寄存器地址规则不一样,甚至同一家不同系列差别也很大。最传统的方式是用组态软件,比如WinCC、组态王、力控,通过驱动把数据点读进上位机。这个模式稳定,但有一个明显边界:数据到了上位机之后,怎么出去?如果只是局域网看监控,没问题;一旦要上云,就会遇到三个非常现实的问题。
第一个问题是协议不统一。SCADA系统里的点表通常绑定在上位机软件里,导出JSON或者CSV很费劲,而且上位机本身不能长期稳定地扮演“数据中转站”,重启、死机、授权过期都会打断数据链路。第二个问题是网络边界。车间里的PLC一般都在独立的工业网段,办公网、互联网和它是隔离的,硬把PLC暴露到公网端口的操作,风险非常大,这件事我强烈不建议做。第三个问题是数据压缩和断线续传,PLC本身不会缓存历史数据,网络只要抖一下,这段时间的数据就丢了,云端补不回来。
所以从PLC到云端的链路,不能只是一根网线捅到公网,必须设计成分层结构,把“读数据”、“转数据”、“存数据”这三个职责拆开,各管一段,边界清晰了,问题才可控。
1.2 分层架构的三大块:采集层、网关层、平台层
我实际落地的时候,把链路拆成三层:边缘采集层、边缘网关层、云端平台层。
边缘采集层的核心任务是对接现场PLC,把设备里的寄存器数据读出来。这一层直接决定你能采到什么,协议适配、点表规划、通信参数全都在这层完成。考虑到现场PLC种类多、地址分散,这一层往往是整个项目里最耗时的地方。
边缘网关层是中间的“翻译官”和“守门员”。它向下通过Modbus TCP、S7、OPC UA这些协议采集数据,向上通过MQTT等物联网协议把数据推送到云端。数据到了这里要做标准化,把不同PLC的原始数据统一成带时间戳、带位号、带单位的JSON结构。网关还承担本地缓存的功能,断网时数据存在本地,网络恢复后自动补传。
云端平台层负责设备接入鉴权、消息流转、数据存储、规则引擎和可视化。数据进入云端后,通常写入时序数据库,用于后续的实时监控、历史查询、告警触发,以及和MES、ERP做集成。
分层的好处,我最大的体会是可替换性。有一次客户要求把原来的云平台从A厂换到B厂,因为采集层和网关层没有绑定单一厂商,我们只改了平台接入地址和鉴权参数,现场设备完全没动。如果当初把业务逻辑全写在上位机里,这次迁移成本就大了。
1.3 协议选型思路:下行认PLC,上行认MQTT
协议选型是架构设计里最容易被忽略、却最影响稳定性的环节。下行方向(网关访问PLC),要看PLC本身支持什么协议。西门子的S7系列可以用S7comm或者S7Plus,三菱的可以用MC协议,Modbus是通用兜底方案,几乎所有PLC都支持Modbus RTU或Modbus TCP。如果设备种类太多或者数据点特别密集,建议在PLC侧增加OPC UA服务器,把统一的OPC UA接口暴露给边缘网关,这样网关侧不用为每种PLC各写一套驱动。
上行方向(网关访问云端),我基本固定选MQTT。原因很直接:MQTT是长连接协议,连接开销比HTTP轮询小得多;它支持QoS级别,消息可以离线缓存;自带遗嘱机制,设备异常掉线时云端能立刻感知。HTTP虽然调试方便,但语义是“请求-响应”,不适合高频、单向、持续的生产数据上报。
在实际项目里,我见过不少团队在上行协议上纠结很久,最后换来换去又回到MQTT。工业物联网的数据特征就是量大、频率稳定、格式简单,MQTT几乎是为这个场景量身定做的。一个经验是:不要在协议选型上追求“大而全”,下行走OPC UA统一,上行走MQTT,剩下的精力应该留给点表设计和边缘计算逻辑,这两块才是项目成败的关键。
2. PLC侧数据采集:从寄存器到标准数据模型的实操细节
2.1 采集方式的取舍:改程序 vs 外部轮询
到了PLC侧,第一个要决定的问题就是:要不要改PLC程序?
如果条件允许在PLC里加一段数据映射逻辑,把需要上云的数据统一搬运到固定的数据块或寄存器区,后续采集会非常省心。边缘网关只需要读取这个固定区域,不需要关心设备内部复杂的地址布局。这种做法在新建项目里我比较推荐,数据区域设计得好,后期增加点位只是加映射的问题。
但现实中大量项目是改造项目,PLC程序是多年前的,现场又不可能停机很久去修改调试,这时候就走外部轮询方案。外部轮询的优势是不动PLC程序,风险低,上线的速度快。代价是点表采集逻辑变得更复杂,某些特殊类型的数据(比如字符串、数组、定时器当前值)在外部不一定能完整读出来。
我的建议是:改造项目优先外部轮询,新建项目优先做数据映射区。混合型项目可以折中:核心工艺参数走外部轮询先保证上线,预留程序修改窗口,后续再逐步迁移到映射区。这条路线在项目里实测最稳,既保证了上线速度,又给长期运维留了优化空间。
2.2 点表设计:比网关选型更重要的“灵魂工程”
数据采集上云,真正的核心工作量在点表设计,而不是硬件选型。所谓点表,就是把所有需要上云的数据,整理成一张结构化清单,说明每个数据的设备位号、寄存器地址、数据类型、读写属性、缩放系数、采集周期、报警上下限。
我见过不少项目,网关买的是大牌,云端平台也搭得有模有样,结果因为点表漏了数据类型的定义,导致浮点数全部解析成乱码,排查了两天才发现是字节顺序不对。点表设计宁可多花半天时间,也不要拍脑袋往下走。
以下面这个水泵房项目为例,点表的一部分可以这么设计:
| 位号 | 描述 | PLC寄存器地址 | 数据类型 | 读写 | 采集周期 | 缩放系数 | 单位 | 报警下限 | 报警上限 |
|---|---|---|---|---|---|---|---|---|---|
| P-101A_FT | 水泵A出口流量 | %MW100 | UINT16 | 只读 | 1s | 0.1 | m³/h | 0 | 500 |
| P-101A_PT | 水泵A出口压力 | %MW102 | REAL32 | 只读 | 1s | 1 | MPa | 0 | 1.6 |
| P-101A_MT | 水泵A电机电流 | %MW106 | REAL32 | 只读 | 1s | 1 | A | 0 | 120 |
| P-101A_ST | 水泵A运行状态 | %M110.0 | BOOL | 只读 | 1s | - | 0/1 | - | - |
| V-101A_SV | 出口阀门开度设定 | %MW200 | UINT16 | 读写 | 5s | 0.1 | % | 0 | 100 |
注意几个细节:同一类设备的数据点要命名规则统一,这样云端做设备模板时才能用规则批量生成。缩放系数单独列一列,因为很多模拟量在现场是工程量值除以10或者100得到的原始值,这一列不写清楚,到了云端迟早出乱子。采集周期不是每个点位都一样的,状态量和秒级变化的模拟量用1秒,非控制类的温度、液位可以用5到10秒,这样可以显著降低网关和云端的负载。
点表还有一个容易踩的坑:地址变更后的同步。PLC程序一旦被修改,点表里的地址就可能整体偏移。建议每次维护PLC程序时,强制要求更新点表版本号,并且由边缘网关定期校验读取值与量程范围是否合理。如果一个本来该在0到500之间的流量值突然变成负数或者一个天文数字,大概率是地址偏了,这类问题早发现比晚发现代价小得多。
2.3 轮询周期怎么算:一台边缘网关能带多少台PLC
做系统设计的时候,经常被问到:一台网关可以接多少台PLC?这个问题没法直接回答,要结合数据量和实时性来算。
以Modbus TCP为例,每次请求读取一段连续的寄存器,一般建议按地址区间批量读。假设请求120个寄存器,一次通信往返耗时在10到30毫秒之间,取决于网络状况和PLC的响应速度。如果一台设备需要采集200个寄存器,大约拆成2个请求,一轮完整采完需要20到60毫秒。网关串行扫描40台这样的设备,完整轮询一轮大概是0.8到2.4秒。这个水平对于大多数监控场景是完全够用的。
如果数据点更多、实时性要求更高,可以启用多个连接并行读,但要注意PLC的通信负载能力。过高的轮询频率可能挤占PLC本身的程序扫描周期,严重的会导致PLC通信看门狗超时甚至程序卡顿。我做过一次压测,同一个PLC连接数开到8个,每个连接256个寄存器高频轮询,PLC的CPU负载明显上升,程序扫描周期从原来的5毫秒涨到了30毫秒以上。从那以后我都把并行连接数控制在2个以内。
实践中我的轮询周期建议是:状态量和关键保护量用1秒,一般工艺量用2到5秒,累计量(电量、流量累计)用10到30秒。不要一刀切全部1秒,工业现场的数据冗余度很高,很多量5秒采一次足以满足分析需求。
2.4 边缘网关选型:硬件不能只看算力
边缘网关算是整套架构里的关键硬件。市场上的物联网网关五花八门,从百元级的树莓派方案到上万元的工业级边缘计算网关,价格跨度很大。选型时我重点看四个东西:工业级设计、通信接口、协议兼容度、本地存储能力。
工业级设计意味着宽温、无风扇、导轨安装、看门狗复位,这些在车间环境下非常有用。通信接口至少要有一路工业以太网,支持4G或5G模块扩展更好,因为很多老旧厂区没有贯通到车间的可靠网络,4G上云是性价比很高的选择。协议兼容度直接决定你能接入多少种PLC,选型前把现场的PLC品牌和型号列出来,让厂商提供对应的驱动列表,不要只听宣传。本地存储能力相当重要,网关至少要能缓存几天的数据,否则网络故障时数据就直接丢了。
部署位置也有讲究,网关还是尽量靠近PLC,放在控制柜内或柜旁,用工业以太网线连接,长度控制在50米以内。如果放得太远或者中间经过强电桥架,通信误码率会上升,调试时能折腾死人。网关的天线如果用的4G模块,天线要拉出柜体向外安装,柜内金属对信号衰减非常明显,这是我在现场踩过的实实在在的坑。
3. 边缘网关的数据处理与稳定上云的几个关键设计
3.1 网关内部的数据流水线
一个成熟的边缘网关,数据流动大概是这样的:协议采集引擎按照点表定义的周期读取PLC数据,得到原始值。原始值进入处理管线,经过“单位换算、缩放、死区过滤、报警判断”这一步,变成标准化的业务数据。接着进入本地存储引擎,按时间戳写入环状缓存或SQLite数据库。最后通过MQTT客户端将数据打包上传,并确认云端ACK后才从缓存中移除这条数据。
这个流水线里,死区过滤是我特别推荐开启的功能。比如一个液位传感器的波动在正负0.5%以内,对生产没有实际意义,就可以设置死区,值变化不超过死区则不上报。它可以大幅降低上行消息量和云端存储量,一个车间上千个点位的项目里,开启死区过滤后,消息量往往能降一半以上。
网关本地计算也别浪费。常见场景是累计量计算和停机判断。比如用设备的运行状态和瞬时流量,在边缘端就地算出班次产量,云端直接按班次读取,不但简化了云端逻辑,即使传输中断,本地累计结果也不受影响。边缘网关名字里有“边缘”两个字,很多人真的只把它当转发器用,浪费了这部分算力挺可惜的。
3.2 直连云端 vs 网关汇聚:多数场景应该选后者
我在设计跨厂区项目时,会先给客户讲清楚两种上行架构:一种是每台PLC各自连接一个4G模块直接上云;另一种是PLC先汇总到车间边缘网关,再由网关统一上云。
直接上云架构的优点是部署轻,不需要额外增加网关硬件,新增一台设备就增加一个4G模块。但它有一个比较明显的短板:每个上行链路都是独立的,设备多了之后,云端连接数、流量卡管理、故障排查的复杂度都上去了,而且PLC侧型号不同,每个模块的配置工作也得单独做。
边缘网关汇聚架构更适合大多数工厂。PLC和网关都在车间内部网内,通信稳定性和实时性都好控制;网关统一做协议转换、数据处理和缓存,云端只需要面向网关设备做管理,设备数量少一个数量级。新增设备只是更新网关的点表,不需要碰云端。数据传输可靠性上也更有底,断网时本地有缓存,恢复后补传,而不需要每一台PLC模块都支持本地缓存功能。
两种方式的取舍,其实是在部署成本和运维成本之间做选择。少数几台设备、分布在完全不同的地点,可以用直连;但只要是车间级、厂区级的项目,我都建议用网关汇聚。架构越简单,后面踩的坑越少。
3.3 MQTT上行的主题规划与参数设置经验
把数据从网关推到云端,MQTT是主力,但怎么用MQTT,里面的细节决定运维是否顺畅。
第一是Topic设计。我建议按“项目/厂区/设备类型/设备ID/数据类型”这个层级来规划,例如factory_a/pump_room/pump/p-101a/metrics。这样的好处是云端可以用Topic通配符直接订阅某一类设备、某台设备,做告警和统计都很方便。不要在Topic里省略厂区层级,否则以后扩展到第二、第三个厂区时,所有设备Topic都冲突,得重新规划。
第二是QoS选择。MQTT的QoS分为0、1、2,工业环境里我基本用QoS 1。QoS 0消息可能丢,QoS 2在弱网环境下容易引发消息重发风暴,QoS 1保证至少到达一次,配合云端做去重,是最务实的组合。
第三是遗嘱消息和心跳。把网关的在线状态通过遗嘱消息告诉云端,网关异常断电时,云端能在几十秒内收到offline消息,这个能力对设备状态监控非常有用。心跳Keep Alive设置成30到60秒是合理的,太短会频繁发包,太长则无法及时发现异常掉线。
第四是保留消息。设备的基本信息(固件版本、IP、型号、经纬度)建议用retained主题发布一次,云端订阅时立刻拿到最新值,不至于开机后要等一次上报才有设备档案。这个细节能省下很多查询设备信息的时间。
3.4 断线续传与数据一致性:核心机制不能省
只要经过公网,断线就是躲不开的。所以边缘网关的断线续传能力,在我这里是必选项,不是可选项。
具体的实现机制说简单也简单:网关采集到的每条数据都带上本地时间戳,先写入本地存储。MQTT成功上报并获得云端ACK后,再删除或标记这条数据为已上传。断网期间,新数据继续写入存储,形成一个待传队列。网络恢复后,网关按时间戳顺序补传这些积压数据。云端的规则引擎或数据入库逻辑要做去重,因为QoS 1下可能重复到达,去重可以通过设备ID加采集时间戳联合处理。
这里有一个关键点:时间戳一定要在边缘侧生成,而不是等云端收到时打上服务器时间。因为断网补传的数据,到达云端的时间可能晚了好几个小时,如果云端以接收时间为准入库,整段数据的先后关系就全乱了。网关本身要支持NTP同步,保证本地时钟准确,偏差超过30秒的情况都要能被监控到。
数据一致性的另外一个坑是补传风暴。如果断网断了一天,网关积压了上千万个点位数据,恢复瞬间一次性全推上去,可能把云端Broker打崩。我的做法是给网关配置补传限速,比如恢复后按正常速率的2倍补传,避免瞬时尖峰。补传的过程中也不耽误新产生的实时数据优先上传,时间戳排序放在云端入库阶段做,这样实时性和完整性都能兼顾。
4. 云端平台:数据接入、存储和业务价值转化
4.1 云端架构的常规布局
云端侧的核心架构,我在具体项目里一般分成四段:接入层、数据层、业务层、应用层。
接入层部署MQTT Broker,负责海量网关的连接和消息吞吐,同时做设备认证、在线状态管理。数据层主要包含时序数据库(用于点位数据和历史曲线)、关系型数据库(用于设备档案、用户权限、告警记录)和对象存储(用于文件、报表导出)。业务层是规则引擎和告警服务,负责把原始数据变成有价值的事件,比如压力超限触发告警、设备离线通知等。应用层则是可视化大屏、数据统计分析、设备管理后台。
很多项目在部署时容易把精力全铺在应用界面上,先做了一堆图表,后台的告警闭环和数据质量反而不够重视。我的顺序是反过来的:先把“接入-存储-规则引擎”这条数据主干跑通,再开始做界面。数据能通,界面只是个工作量问题;数据断断续续,界面做得再漂亮,客户看两天也会失去信心。
4.2 设备接入鉴权与设备影子
云端的设备管理,首先碰到的是设备身份。我建议统一用“项目编码+设备类型+设备序号”的规则生成设备ID,比如FA-SH-P01-0001。每台边缘网关在平台注册后会分配独立的用户名密码或者证书,MQTT连接时校验身份。不要全部设备共用同一个账号,否则出现异常数据风暴时,根本没法定位到具体是哪台网关出了问题。
设备影子的功能值得用起来。所谓设备影子,就是云端存一份设备的期望状态和实际状态。比如修改某台泵的流量设定值,云端把期望值写入影子,网关通过订阅拿到差值后再下发到PLC,并把实际执行结果上报回来,这样“云端下发的命令”和“设备实际执行的命令”形成闭环。没有影子机制,命令下发往往变成“单向广播”,设备没执行成功,云端完全无感知。
在线状态管理我单独提一句:在云端建立“设备心跳期望时间表”,凡是在N分钟内没有上报任何消息的网关,自动标记为疑似离线,再叠加MQTT遗嘱消息确认。因为有些网关的应用数据上报频率低(比如5分钟上报一次),单靠数据消息判断在线并不可靠,心跳机制不能省。
4.3 时序数据存储:选型和保留策略
工业点位数据,写入量是典型的时序特征:高频、持续、时间戳有序。用它去存传统关系型数据库,表会膨胀到无法维护。我现在的主力选择是时序数据库,开源方案里InfluxDB和TDengine都用过,TDengine在工业高频写入场景下表现更好,集群版部署也简单,InfluxDB胜在生态成熟、周边工具多。
存储策略和数据保留期是设计重点。直接存原始数据,存储成本会随点位数量和数据频率线性增长。我的通用做法是:实时原始数据保留1个月,按5分钟聚合的均值、最大值、最小值保留1年,按小时聚合的归档数据永久保存。这样既保证了短期问题排查时有原始细节,又控制了长期存储成本。
降采样聚合的另一个用处是报表生成。月度报表直接查聚合表,不需要扫描原始表,查询速度会快很多。记住一个原则:存储层设计时就要想清楚数据的“冷热分层”,热的原始数据、温的聚合数据、冷的归档数据分别放不同的存储策略,别等硬盘报警了再来搬数据。
4.4 规则引擎、告警和可视化:把数据变成可用的业务信息
云端平台的上层价值,主要体现在三个方向:实时告警、可视化监控、数据回业务系统。
实时告警我用规则引擎做,比如“水泵出口压力低于0.1 MPa持续10秒,触发低压告警,通知设备负责人”。规则引擎的好处是告警条件可以热更新,不用重启服务。告警通知渠道我常接企业微信、钉钉的webhook机器人,也可配置短信或电话升级。持续告警要做好防抖设计,同一事件在30分钟内不重复推送,避免故障期间电话被打爆。
可视化大屏是项目实施中看起来最出效果的部分。常见布局包括厂区地图加设备分布、实时点位列表、运行状态统计、产量和能耗趋势、告警滚动列表等。值得注意的是,大屏的数据刷新要从时序数据库读聚合查询接口,而不是每个点位单独轮询。我见过一个项目用前端每秒钟轮询几十个点位接口,直接把数仓服务拖垮了,这种问题从根上说是架构问题,不是前端优化能解决的。
和MES、ERP等系统的集成,我建议统一走云端数据服务接口。把设备OEE、产量、能耗、质量相关的指标封装成标准API,业务系统需要什么就获取什么。比如OEE计算可以落地为:时间开动率×性能开动率×合格率,云端按班次、按设备计算并推送报表。这样自动化数据平台就成了整个工厂的数据底座,而不是一个孤立的“监控系统”。
5. 现场项目中的高频问题与排障经验
5.1 高频问题速查表
把做过的项目里高频遇到的问题整理成一张速查表,后续排查效率能提升很多:
| 现象 | 可能原因 | 排查思路与解决办法 |
|---|---|---|
| 网关读不到PLC数据 | IP不在同一网段、PLC通信服务未开启、连接数超限 | 先用ping确认链路,再测试PLC侧通信参数,最后看PLC内部是否有连接授权限制 |
| 数据偶发性中断 | 网关轮询周期太短、PLC通信负载高、网络存在丢包 | 拉长轮询周期,减少并行连接数,启用TCP KeepAlive,必要时更换屏蔽网线 |
| 浮点数读出来是乱码 | 字节序列错误、寄存器地址偏移 | 确认PLC的数据格式是大端还是小端,Modbus中部分设备返回的字序会反转 |
| 云端收到的时间乱序 | 网关本地时间不准、补传和实时数据混在一条链路 | 开启NTP同步,确保边缘侧打时间戳,云端按设备ID+时间戳去重和排序 |
| 网关设备反复掉线 | 心跳与Broker的KeepAlive不匹配、4G信号弱 | 调整心跳周期,检查网络否则直接更换网络方案,观察MQTT连接日志 |
| 上行消息量太大,流量卡爆掉 | 点位上报频率过高、未开启死区过滤 | 在网关侧设置死区,调整采集周期,压缩Payload,采用批量上报模式 |
这个问题清单看着简单,但每一项都对应着我实际调试过的项目。有一个项目我印象特别深,客户反映雷雨天网络正常,数据就是频繁中断,查了两天最后发现是柜内通信线走线跟动力电缆同一桥架,干扰导致TCP频繁重传,后来重新布线并在网关侧启用了数据缓存和补传机制,问题才算根治。环境层面的问题往往是隐性炸弹,调试时不见得能触发,但长期运行一定会暴露。
5.2 字节序、字序与数据类型映射的坑
跨品牌PLC的数据类型解析,是调试期最费时间的一环。这里面的坑主要出在字节序和字序的差异上。西门子PLC的浮点数在Modbus TCP映射下,通常是“大端模式”,即高位字节在前;而市面上一些国产PLC或部分传感器设备,可能存在字序反转。醚读出来的浮点数如果变成了一个天文数字或者一个奇怪的小值,十有八九是字节序不对。
举个例子:PLC内存中一个REAL类型的数值1.5,四个字节为3F C0 00 00。网关驱动如果按错误字节序组装,读出来可能是某一个完全不相关的负数或者极小的非规格化值。解决方式是在点表配置里明确指定字节序模式,并在上线前用仿真值做验证。我的经验是:先读一个已知数值的寄存器,手工换算二进制确认,不要凭空猜。
数据类型映射也要提前定义清楚。常见的UINT16、INT16、UINT32、INT32、FLOAT32、BOOL、STRING等,每个类型占用的寄存器数量、符号位的处理规则都不一样。点表里如果只写“地址”不写“类型”和“长度”,网关解析时容易错位。比如一个UINT32占两个寄存器,如果按UINT16读,数据的一半可能被误当作下一个点位的值。
5.3 安全基线的落地建议
工业数据上云,安全是绕不开的话题,但安全不能只停留在口号层面,必须有基线。
我最强调的就是网络隔离。边缘网关必须位于PLC网络与办公网络之间,PLC层尽量不直接暴露给上层。网关向下采集PLC数据,向上只和云端建立出站连接,不允许云端直接访问网关的内网或PLC。这样即使云端账号被盗,从云端的网络视角也够不到内网PLC,攻击面被限制在了单台网关。
在云端侧,设备接入要做好双向认证。网关连接MQTT Broker时,客户端要有证书或唯一密钥;平台侧可以为每台设备配置独立的鉴权信息,并定期轮换。生产环境的账号权限遵循最小化原则,普通运维账号不授予设备删除权限。
还有一个常被忽视的点是固件更新。边缘网关、4G模块、PLC通信模块都会不定期发布安全补丁,项目交付时要和客户约定固件升级窗口,并在升级前做配置备份。工业现场最怕的就是“系统跑得好好的,谁也别乱动”,但安全漏洞不会因为没人动就消失,该升级时就得升级。
5.4 上线前的压测和验收建议
最后说上线前的整体验收。我强烈建议在批量部署前先做小规模试运行,先接3到5台设备跑一个月。期间重点观察几个指标:数据完整率(云端实际收到的数据点位数 / 网关采集的数据点位数)、端到端延迟(从PLC时刻到云端入库时刻)、断网恢复后的补传耗时、网关7天不重启的稳定性。
正式环境部署前,可以用软件模拟器做压测。PLC侧用Modbus Slave模拟工具生成点位数据,网关侧跑真实的采集和上行逻辑,云端按计划配置好资源和告警阈值。压测时逐渐增加点位数和频率,直到云端资源利用率达到警戒线,这就是系统的上限。上线时保证实际负载低于上限的60%,给突发流量留出缓冲。
关于验收,我建议文档化:每个点位做完地址映射后,抽样比对PLC原值与云端显示值;每台网关做一次拔网线测试,确认断线上报、缓存、补传、告警四步都正常;云端做一次重启测试,确认网关自动重连、数据正常入库。这套流程走完,系统的稳定性才有基本保障,后面运维会省下大量时间。
最后再分享一个小体会:整套架构从PLC到云端,技术上的难点其实都不是单点技术有多深,而是链路长、环节多,任何一个环节的数据质量出问题,都会在云端被放大。点表设计严谨一点、网关配置保守一点、云端去重和补传做充分一点,这套系统的稳定运行年限就会长很多。我后来做新项目,基本就是照着这套分层逻辑走,现场踩坑越来越少,交付也顺畅得多。