☰
PLC数据采集上云完整方案:协议选型、边缘网关与云端架构实战解析
2026/10/7 20:09:35 网站建设 项目流程

上个月去一家注塑件厂看现场,老板想做PLC数据采集上云:客户审核需要每台注塑机的实际产量和停机记录,过去全靠班组长手写报表,数据根本对不上。这种需求在制造业里太普遍了——PLC品牌五花八门,车间里的数据孤岛比想象中严重得多,想远程监控、想算OEE、想给ERP喂数据,第一步都是把PLC的数据采集上来再传到云端。这篇文章就把我从PLC到云端的完整方案思路写出来,覆盖通讯协议选型、边缘网关配置、云端链路搭建和上线后的坑,给做自动化集成、工业物联网改造,以及正在做物联网毕业设计的同学一个能直接落地的参考框架。

1. 先想清楚为什么上云:三种需求对应三种架构

1.1 数据孤岛的代价

大多数人以为PLC数据上云,就是把设备状态读出来发到网上这么简单。真正做了几个项目就会发现,如果一开始没想清楚数据要用来干什么,后面的架构设计、点位规划、云端存储成本都会出问题。

我在现场经常看到这样的场景:中控室里有台工控机跑着组态软件,画面能实时显示温度、压力、产量,看起来一切正常。但老板在办公室看不到,出差在外地更看不到。每天的生产报表靠班长下班前手动抄表,再录入Excel。不同班次之间的数据口径对不上,夜班设备停了40分钟没人记录,第二天查停机原因只能靠猜。数据采集上云最直接的价值,就是把“躺在PLC里的实时数据”变成“随时能看的远程数据”,让管理层和IT系统能实时拿到真实的生产状态。

再往深一层,上云不是目的,数据能用起来才是。设备综合效率OEE的计算,需要时间开动率、性能开动率、良品率三项数据。时间开动率里的计划外停机,就必须有设备启停记录;良品率需要产量和合格数。这些数据如果靠人工统计,误差大且滞后。设备维护也一样,一台电机的电流曲线如果一直在缓步上升,说明机械负载在变大,这是预测性维护的典型信号。工业数据采集上云后,这类分析才有数据基础。

1.2 三种需求决定三种架构

做PLC上云方案,我习惯先把需求归成三类,因为每一类对数据频率、网络要求、云端组件的选择完全不同。

需求类型典型场景采集频率实时性要求主要技术重点
远程监控型看设备状态、看产量、告警通知1~5秒秒级链路稳定、告警准确
数据分析型OEE计算、能效分析、预测性维护100ms~1s准实时时序存储、数据质量
反向控制型远程下发配方、修改参数100ms~1s毫秒~秒级权限控制、操作审计、安全防护

远程监控型最常见,投入也最低。网关把PLC的启停状态、当前产量、报警信息读上来,传到云平台做看板,设备异常时推送消息。这类架构不追求毫秒级响应,断了几秒数据也无所谓,关键是链路不能长时间断,告警不能误报。

数据分析型对数据完整性要求高。你要做设备趋势分析,就不能漏点。比如某台空压机的运行电流每100ms采一次,一天产生86万个点,一台PLC至少几十个点位,这个数据量不算小。这种架构必须考虑边缘端的缓存、补偿机制,云端要有时序数据库,存储周期和降采样策略也得提前规划。

反向控制型最容易翻车。远程下发参数这种事,如果网络抖动导致指令重复执行,或者权限管控不严,可能造成设备误动作甚至安全事故。所以这类架构需要额外设计确认机制——操作者下发指令后,必须收到设备的实际执行反馈,云端要有完整的审计日志。我现在的建议是:能只读就只读,非必要不做反向控制。真要远程干预,也要人工二次确认加设备侧超时保护,所有操作指令加时间戳和操作人标识。

1.3 哪些产线值得先上云

不是所有设备都适合一窝蜂上云。我见过一个工厂给十几台老旧皮带机装采集网关,那些设备连传感器都没几个,采上来的点位数少得可怜,折腾半年没看到什么价值。判断一台设备值不值得上云,按这个顺序看:

设备价值是不是高。一台几百万的数控加工中心停机一小时损失上千块,这种设备必须优先监控;几千块的电风扇再坏也不影响生产,没必要折腾。设备故障影响是不是大。有些设备是产线瓶颈,一停全线停,就算设备本身便宜也得监控。设备分布是不是散。多厂区、异地车间的设备,远程监控的收益明显高于都在一个车间里的设备。有没有明确的数据消费者。如果你的云平台接入了MES、ERP,或者每天要出报表给客户看,那就值得;如果数据采上去没人看,那不如不做。

2. PLC数据采集的底层逻辑:协议、寻址与采集频率

2.1 主流PLC通讯协议速览

搞PLC数据采集上云,第一个绕不开的问题就是:这PLC用什么协议能读数据?各品牌PLC的通讯协议差异很大,但基本都支持以太网通讯,常见的有下面这几类。

PLC品牌常用协议默认端口说明
西门子 S7-1200/1500S7comm、ProfinetTCP 102直接读DB块、I/O、M区;也支持Modbus TCP和OPC UA
西门子 S7-200 SmartPPI、Modbus TCPTCP 102/502老设备多为PPI串口,需加网关转换
三菱 Q/L/FX系列SLMP(MC协议)、CC-LinkUDP或TCP三菱自己的一套协议,读D寄存器很直接
罗克韦尔 AB CompactLogix/ControlLogixEtherNet/IPTCP 44818CIP协议,标签寻址,配置稍复杂
欧姆龙 NJ/NXFINS over UDPUDP 9600老协议但很稳定,注意UDP丢包问题
汇川、信捷、台达、昆仑通态等Modbus TCP为主TCP 502国产设备基本都能用Modbus TCP兜底

如果你是做综合集成的,直接面向多种PLC,最好选一个支持多协议的采集工具或网关。比如Node-RED里node-red-contrib-s7可以读西门子,node-red-contrib-modbus可以读Modbus TCP;商业网关像映翰通、有人、四信,多数自带协议解析库,相当于把各种PLC协议从盒子里直接放出来。

2.2 从程序块到内存地址:寻址方式决定了采数效率

PLC里的数据存在不同的存储区,针对不同品牌要搞清楚寻址方式,否则数据永远读不对。

西门子S7系列最喜欢用DB块(数据块)。你需要在TIA Portal里建一个DB块,把要采集的变量集中放在一块——比如DB100,里面偏移量0.0放运行状态bool,偏移量2.0放当前温度real。S7通讯读取时,要告诉网关DB编号100,偏移量从0开始读几个字节。很多人第一次读到乱码,往往就是偏移量算错或者数据类型对应错。

三菱PLC的软元件是D寄存器,比如D100、D200,一个寄存器16位。如果你要读一个32位浮点数,就要连续读两个寄存器,而且要注意寄存器顺序——三菱默认低字在前还是高字在前,不同型号还有区别。Modbus TCP则要把数据放到保持寄存器区,地址范围对应关系要查PLC的映射表。举个例子,某个国产PLC的Modbus地址40001,对应内部D0,40002对应D1。读保持寄存器40001~40003,就是连续读D0~D2。这里最要命的是数据类型转换:Modbus寄存器读出来的是16位整数,两个寄存器合起来才能变成一个32位浮点数,而字节序可能有ABCD、CDAB、BADC等组合,错一个序数据就完全不对。

我的经验是:在正式采集之前,先拿一个已知值去验证。比如PLC里放一个常数108.5读出来看看浮点数对不对,字节序对不对。这个验证过程花10分钟,能省后面排查数据异常的几个小时。另外建议给每个点位维护一张测点表,列清楚设备ID、PLC地址、数据类型、字节序、倍率、单位,这张表就是采集配置的源头,后面做数据清洗、可视化都要靠它。

2.3 采集频率怎么定:别让数据量大到没用,也别小到失真

采集频率是架构设计里最容易被低估的参数。频率设太高,网络带宽和云端存储费用直线上升;设太低,有些过程数据根本看不出规律。实际操作中我按设备类型和数据用途区分:

设备状态量(运行、停止、报警、待机)用1秒采集足够,因为状态切换本来就是秒级以上的事件。温度、压力、液位这些工艺量,变化慢的用3~5秒,变化快的用1秒。电流、功率、转速这些和设备健康相关的量,最好1秒以下,做趋势分析才有意义。振动信号如果要做频谱分析,那是kHz级的,普通网关根本处理不了,得用专业振动采集器,一般不在PLC数据采集范畴里。

数据量估算有个简单公式:点数乘以每秒采样次数乘以每个点的字节数,再乘以冗余系数。比如100个点,1秒采一次,每个点平均8字节(64位双精度),一天的数据量就是100×1×8×86400≈6912万字节,大约69MB。这还只是一台设备,如果你有100台设备,一天就是近7GB。云端存储费用、时序数据库性能都要按这个量级去规划,别到时候存储空间不够再扩容。

还要考虑PLC的通讯负载。你把PLC的数据读出来,用的是PLC的通讯处理器资源。如果采集频率太高,或者网关轮询的点位太多,PLC的通讯负载会占用CPU,影响本身的控制周期。我遇到过一台S7-200 Smart,网关每100ms轮询一次所有点位,结果PLC程序运行时段明显卡顿。后来把轮询周期调成1秒,又做了区域批量读取,问题才解决。批量读取特别重要:一次把连续地址的字节读回来,在本地解析,比一个点位读一次效率高一个数量级。

3. 边缘物联网网关:连接车间和云端的关键桥梁

3.1 网关选型:工业网关、边缘盒子还是PC软采

数据从PLC出来以后,需要一个东西把它转成云端的格式再发出去,这就是边缘物联网网关。选型上有三种常见形态,各有各的适用场景。

第一种是工业物联网关,一个小铁盒子,有网口、串口、4G模块,内置协议解析功能。适合分布式的单台设备采集,比如野外泵站、分散的注塑机,直接插网线连PLC,4G卡插上就能上网。它的优点是小巧、免维护、工业级环境适应性强;缺点是处理能力弱,跑不了复杂的边缘计算,存储空间有限,一般只能做简单的缓存和协议转换。

第二种是边缘计算盒子,本质是一台小工控机,装Linux或Windows,上面可以跑Docker、Node-RED、Python脚本。适合车间里集中采集的场景——比如一个车间有20台设备,一台盒子的多路网卡分别接到几台PLC,跑Node-RED统一采集,本地做数据清洗、缓存,再通过MQTT批量上云。这种方案灵活性高,可以随时加逻辑,是我做集成项目主力推荐的形态。如果你想搞stm32物联网网关这种嵌入式方案,也可以往这个方向靠,但生产环境里我更信任成熟的工控机加通用软件,成本高一点但稳定性和可维护性都强很多。

第三种是PC软采,也就是在已有的上位机或SCADA系统里直接加一层数据上云功能。如果现场本来就有组态软件比如WinCC、组态王在采集PLC数据,那就没必要再引入一套网关,直接在PC上部署一个转发程序,把SCADA已经采集到的数据定时转发到云端。缺点是这个PC一关机,数据链路就断了,而且SCADA本身的点位可能不全,二次开发工作不可控。

3.2 网关与PLC的网络组网:IP规划和安全边界

网关和PLC通讯之前,网络必须先打通。这看起来简单,实际翻车很多。PLC的IP地址和网关必须在同一个网段,或者能通过路由器互相访问。你的工控机上配置的IP最好设置为固定IP,避免DHCP重新分配导致链路断开。

现场网络环境复杂的话,我建议在交换机上划分VLAN,把PLC控制网、办公楼宇网、云端接入网关网段隔离开。PLC控制网是生产命脉,不该让办公电脑直接访问;云端采集网关放在一个单独的网段,只放通它和PLC之间的通讯端口,其他全部禁止。通过防火墙白名单策略,只允许网关访问PLC的指定IP和端口,比如S7协议只放行TCP 102,Modbus TCP只放行TCP 502。这样即使某个环节出了问题,影响面也在可控范围内。

网关到云端的连接,优先有线网络,比如工厂的宽带出口;如果现场没有有线网络,用4G/5G专网卡也行。当设备分布在不同地点时,我遇到过网关通过WiFi连接现场路由器的情况,说实话稳定性并不好——WiFi受到干扰会瞬间丢包,PLC通讯链路一旦断开重连需要十几秒,这段时间数据就丢了。能用有线的场景绝对不用无线,这就是我做了几年采集项目最想说的话。

3.3 边缘端必做的三件事:缓存、清洗、协议转换

数据在边缘端不能被当作透明的搬运工,至少要做三件事:缓存、清洗、协议转换。

缓存是可靠性的基础。车间网络不稳定、云端服务器偶尔维护,都会导致数据发送失败。网关本地要有一个环形缓冲或落盘缓存,通常用SQLite或简单的CSV文件。数据先写本地,再由发送模块按顺序向云端推送,云端确认收到后标记发送完成;如果云端连不上,数据继续写缓存,等链路恢复后按时间戳顺序补传。要特别注意控制缓存文件的大小——我给一台网关设置了2GB的SQLite上限,超出后按先进先出淘汰,防止缓存文件把存储写满导致整个网关卡死。

清洗和协议转换是数据质量的保障。PLC里的原始数据有不少是“脏”的——传感器断线时的最大值、设备刚启动时的不稳定值、单位换算错误的值。边缘端要做越限剔除、死区过滤、单位换算。比如PLC里温度寄存器的值是305,实际上是30.5℃,倍率是0.1,这个换算在边缘端一次做完,云端收到的就是标准工程单位。死区过滤的意思是变化量小于设定值就不上报,温度一整天都在30.1和30.2之间波动,没必要每秒都上报两次,设置一个0.5℃死区,一天下来数据量能下降一半以上,这在低频窄带网络场景下非常实用。

协议转换则是把S7、Modbus、CIP这些五花八门的工业协议,统一成云端平台认识的标准格式。目前最通用的还是MQTT协议加JSON消息体。我会统一管理Topic和Payload格式,比如Topic设计成factory/line01/machine07/properties,Payload是一个紧凑的JSON对象,包含deviceId、timestamp、键值对。上游不管是接物联网平台、时序数据库还是自建Web服务,处理逻辑都是统一的。

4. 云端架构设计:从接入到可视化的完整链路

4.1 云平台选型:自建MQTT还是用现成物联网平台

边缘端的数据推到哪里去,是上云架构的核心问题。选择上我有两种思路:自建MQTT服务,或者使用现成的物联网平台。

自建MQTT服务适合有一定技术团队、想对数据链路有完全控制的项目。核心组件是一个MQTT Broker,比如EMQX、VerneMQ、Mosquitto。EMQX在工业界用的很多,最大的优点是集群能力强、插件生态丰富,支持TLS加密、设备鉴权、规则引擎。用Docker启动一个单机版EMQX非常快,适合中小项目和测试环境;生产环境建议至少双节点集群,避免单点故障。Broker的上游可以接数据订阅程序或者规则引擎,把数据写入时序数据库、触发告警,或者转发给其他系统。

现成的物联网平台,国内有阿里云IoT、华为云IoT,开源的有ThingsBoard、JetLinks、ThingLinks这些。选择平台的好处是接入、可视化、告警、设备管理都现成,开发量小,适合快速交付或做物联网毕业设计。缺点是灵活性受平台限制,数据模型、界面风格、二次开发都受约束。我自己的经验是:给客户做生产系统的数据采集项目,我一般用自建MQTT加自定义Web,数据链路完全可控;给高校做物联网实验室或者给预算有限的小工厂做快速demo,直接上ThingsBoard这类开源平台,一周就能出效果。

4.2 数据链路规划:从MQTT到时序数据库的完整管道

无论选哪种平台,数据链路的大框架都是一样的:

网关采集PLC数据 -> 本地缓存与清洗 -> MQTT发布 -> MQTT Broker -> 规则引擎处理 -> 时序数据库存储 -> API服务 -> 可视化看板与移动端

规则引擎承担的是数据处理中枢的角色。它把MQTT收到的原始数据进行过滤、聚合、补算。比如一分钟内收到60条温度数据,规则引擎聚合算出这一分钟的平均温度、最高温度、最低温度,然后写入另一个聚合桶;同时在判断温度超过80℃且持续10秒时触发告警事件。中小规模项目里,EMQX自带的规则引擎或者Node-RED的服务端节点就能胜任;数据量特别大、需要复杂流计算时,才考虑引入Kafka加Flink这套重量级方案,但说实话,90%的工厂数据采集项目用不到那么重。

时序数据库选型,我目前的主力是TDengine。它在处理工业时序数据上性能不错,SQL风格接近传统数据库,支持数据保留策略、降采样、聚合查询,而且开源版本够用。InfluxDB也很经典,生态成熟,但连续查询和降采样配置要自己打理。如果你想用国产的,Apache IoTDB在高校和科研机构用得比较多。存储策略上我强烈建议设置多级保留:原始数据热存储保留30天,分钟级聚合保留一年,小时级聚合保留三年。这样既保证近期分析需要的精度,又控制存储成本。

4.3 可视化与告警设计:不仅要看得见,还要看得懂

数据到了云端,最后一步是让人用起来。可视化看板我用两类:一类是实时监控型,显示设备当前状态、本周产量、当前报警列表,给车间主任和老板每天看;另一类是分析型,展示趋势曲线、OEE走势、故障原因分布,给工艺工程师和设备维护团队做月度分析。

Grafana是我常用的可视化工具,数据源接TDengine或InfluxDB,画折线图、柱状图、热力图都很顺手。ThingsBoard自带仪表盘,拖拽式操作,适合快速交付给客户自己改。如果要做大屏展示,用Grafana配合大屏分辨率格式,或者用ECharts写定制化图形,效果更灵活。

告警设计有几个容易忽略的细节。第一是告警必须去抖——温度超限一次不算报警,持续3秒才算,避免设备瞬间抖动产生误报;第二是告警要分组和升级——普通告警推送到值班室,严重告警推送到设备工程师,连续告警超过10分钟再升级到厂长;第三是告警通知渠道,微信、企业微信、钉钉、短信都要支持,不同级别用不同渠道,短信留给最严重的。告警风暴也要防:设备断电那一瞬间几十个点位同时报警,要是每一条都推送,所有负责人手机都会被打爆。我的处理办法是设置设备级告警聚合,比如某台设备离线超过1分钟,就只发一条“设备离线”告警,不再发散各个点位告警。

5. 端到端实施实录:一台西门子S7-1200从PLC到云端的完整过程

5.1 PLC侧准备:建DB块、开通讯、通网络

以一台西门子S7-1200为例,我把完整过程走一遍,这是我在项目里反复验证过的路径。

先在TIA Portal里打开PLC程序,在程序块里新建一个DB块,命名为“DataToCloud”。在DB块里添加要采集的变量,比如运行状态(Bool)、当前温度(Real)、累计产量(DInt)。建好后右键DB块属性,勾选“优化块访问”相关设置,同时记下DB块的编号,比如DB100。S7-1200默认支持S7通讯,但要注意连接数限制——基础型号S7-1200最多支持同时几个HMI/上位机连接,如果现场已经接了人机界面,再添加网关可能超限,需要在连接机制里进行限制设置或者改用PUT/GET通讯方式。如果PLC程序允许修改,可以创建一个专用的DB块不参与控制逻辑,只作为数据镜像区,这样对原程序的影响最小。

PLC的IP地址设置成192.168.0.10,子网掩码255.255.255.0。网关工控机设置固定IP为192.168.0.20,用一根网线把PLC和工控机接到同一个工业交换机上。工控机上装一个S7通讯测试工具,可以用开源库如Snap7写个小命令行程序,也可以用商业库HslCommunication的Demo直接填IP、Rack、Slot去读。能读出DB100的数据,说明链路是通的,可以进行下一步。

5.2 网关侧配置:Node-RED从读取到发布

工控机上安装Node-RED,这一步我踩过不少坑。Node-RED在Node.js环境下运行,国内安装时经常遇到npm源下载慢的问题,建议先配置npm淘宝源再装。然后安装三个关键节点库:node-red-contrib-s7(读西门子PLC)、node-red-contrib-modbus(读Modbus设备)、node-red-contrib-mqtt-broker(MQTT发布)。

创建流程的思路是:S7节点定时读取DB块 -> function节点解析和格式化成JSON -> MQTT节点发布到云端。S7节点的配置里填PLC的IP、Rack=0、Slot=1,变量列表按“DB号;偏移量;数据类型”的格式填写,比如“100;0.0;bool”、“100;4.0;real”。轮询周期我按2秒设置,这个频率对大部分场景足够。

中间一个function节点把读取结果包装成统一格式,代码大致是这个逻辑:

// 读取到的变量在msg.payload中,重新组装消息 var deviceId = "S7-1200-Line1-01"; var ts = new Date().toISOString(); var values = { running: msg.payload.running, temperature: parseFloat(msg.payload.temperature.toFixed(2)), totalCount: msg.payload.totalCount }; return { topic: "factory/line1/machine01/properties", payload: JSON.stringify({ deviceId: deviceId, timestamp: ts, values: values }) };

MQTT节点配置云端Broker的地址。发布QoS根据数据重要程度选择,我一般用QoS 0或1,不用QoS 2,因为QoS 2的性能开销大而且工业数据偶尔丢一条影响不大。如果断网,Node-RED本身没有自动缓存能力,所以我在这条链路里加入了一个SQLite缓存逻辑:数据先写成一条消息插入SQLite,再由发送节点读取并推送,推送成功后删除记录。

5.3 云端接入与端到端验收

云端这边用一台云服务器,Docker部署EMQX。

docker run -d --name emqx -p 1883:1883 -p 1883:8083 -p 8084:8084 -p 18083:18083 emqx/emqx:5.x

EMQX启动后,通过Dashboard创建账号,在客户端连接测试里用MQTTX填入服务器地址和账号密码订阅Topic,然后回到PLC程序里把模拟量强制改成一个新值。观察传感器——如果MQTTX里收到了更新,说明整条链路通了。

接下来把数据接入时序数据库。我用EMQX规则引擎将MQTT消息直接写入TDengine:创建一条规则,SQL语句从Topic中提取字段,目标动作写入TDengine的数据表。TDengine里建一张超级表,字段包括ts、device_id、running、temperature、total_count,通过设备ID创建子表。这样查询任意一台设备的历史曲线就非常方便了。

端到端验收建议做三个检查:一是在PLC里强制修改温度值,看云端实时值和告警是否正确;二是断开网关的网络连接,模拟断网,恢复后看补传数据是否完整、时间是否连续;三是连续跑24小时,对比PLC侧累计产量和云端入库的产量,误差要为零。这三个检查都通过了,这套采集链路的可靠性才算达标。

6. 项目上线之后踩过的坑:安全、可靠性和长期运维

6.1 安全边界:别让PLC直接暴露在公网上

很多人做PLC数据采集上云,图省事直接把PLC映射到公网,或者把网关的MQTT端口裸奔在公网。这是工业现场最大的安全隐患。一旦有人扫描到了这些端口,可以尝试对PLC发起恶意通讯,轻则干扰控制逻辑,重则导致设备停线。

我的做法是三条线隔离。第一,PLC控制网和采集网分离,网关只通过白名单访问特定PLC的特定端口;第二,云端Broker只开放MQTT TLS端口,使用证书对网关做设备认证,不允许匿名连接;第三,即使网关被攻破,它也只能读写采集用的数据区,无法触达控制指令。如果一定要做远程控制,加一层专用控制服务器,所有指令写审计日志,且指令必须经过设备返回的确认信号才算执行成功。这套体系在我做的项目里运行了一年多,没有发生过安全性问题。

6.2 断网续传与数据补偿

工厂的办公网络确实容易出幺蛾子——上次客户把交换机重启了一下,配置没保存,网关和云端断了整整半天。如果网关没有本地缓存,那半天数据就全丢了。断网续传我在5.2提过,SQLite缓存基本能解决,但还有一个细节值得强调:补传时的时序一致性。

云端存储数据的timestamp,必须用设备侧或者网关侧的时间戳,而不是云端接收数据的时间。因为补传的数据接收时间是延迟后的,如果云端按接收时间入库,整个时间序列就乱了。解决办法是网关在发布数据时就带上时间戳,云端写入时序数据库时以该时间戳为准。就有一次我没注意,补传的数据时间戳全部是同一秒——因为网关发送时统一打了当前时间,结果那一段的曲线变成了一根垂直的线。后来改成分条记录原始采集时间,问题才解决。

6.3 时钟同步:PLC时钟不准比你想的更常见

PLC时钟不准,是所有数据采集项目里最容易忽略又最难排查的问题。很多老PLC的时钟芯片精度低,加上长期不断电,时钟会逐渐漂移。如果网关、PLC、云端三者的时钟不统一,你看到的数据曲线会被细节失真的时间戳搞乱。

解决思路是三级同步:网关工控机使用NTP同步网络时间;PLC侧尽量在程序里做一次校时逻辑——开机时从网关读取时间写入PLC时钟;云端所有时间处理统一使用UTC存库,页面展示时按时区转换。如果某些PLC实在不支持校时,那就以网关接收时间为准,但必须在数据表里标注清楚时间来源,免得后续分析时拿错时间字段。

6.4 长期运维的几条建议

项目上线容易,长期跑下去难。几个运维上的经验分享给各位。

第一,PLC侧改动要谨慎。每次修改PLC程序前必须全量备份程序,采集配置里的DB地址变了要及时同步修改,否则第二天云端数据全是空的。我吃过一次亏:客户更新了一条产线的PLC程序,加了几行逻辑,导致DB块里面的偏移量整体后移,网关还在读原来的地址,读出来的全是“接近零”的垃圾值。

第二,采集配置要版本管理。网关里跑了一大堆节点、数据库配置、脚本,建议全部用Git管理,每次改动记录清楚。Node-RED的流程可以导出成JSON文件放到仓库里,换一台网关几秒钟就能恢复。

第三,监控采集链路本身。这个反直觉但很重要:数据采集系统自己不监控自己,断了也没人知道。我会在云端定期发一个探活消息给网关,网关回复心跳;如果超过两分钟没收到心跳,云端自动告警,比客户发现数据断了再反馈给我们要主动得多。网关的CPU占用率、内存使用量、MQTT连接状态这些指标也要纳入监控范围,尤其是缓存文件大小——缓存无限膨胀导致磁盘写满,是最常见的网关宕机原因。

第四,关于上位机读PLC的频率。用C#写读取程序时,我看到很多人用线程循环去高频读PLC,有的甚至每10ms读一次,这其实非常不健康。读取频率应该和实际用途挂钩,监控用途1秒足够,数据采集用网关统一处理,上位机尽量通过本地缓存或订阅变更事件来减少IO交互。如果确实要高频读取,改成批量读取连续地址,一个请求把几十个变量读回来,远远比分别读几十次效率高。

做PLC数据采集上云这件事,技术难点从来不在一块传感器或者一个看板,而是在整条链路上任何一个环节的可靠性。我第一次把PLC数据真正跑到云端的实时看板上时,客户盯着屏幕看了半天,说了句“原来这台设备每班要停这么多次”。那一刻我就知道,这个方案是有价值的。如果你正准备做类似项目,我的建议是别急着铺设备覆盖面,先打通一台设备、一条数据流、一个看板,再慢慢往四周扩展。架构想清楚,链路走一遍,坑踩过几个,后面的规模化就是水到渠成的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询