新手学工业互联网:一块电表的数字,是怎么跑到大屏上的?
作为工业互联网新手,我花了好几天才想明白一件事:现场一块电表测到的数字,到底经过哪些环节才显示到中控大屏上?这篇是我把它彻底搞懂后整理的学习笔记,画了张四层架构图,也记下了我一开始踩的认知误区。
作为工业互联网新手,我花了好几天才想明白一件事:现场一块电表测到的数字,到底经过哪些环节才显示到中控大屏上?这篇是我把它彻底搞懂后整理的学习笔记,画了张四层架构图,也记下了我一开始踩的认知误区。
📝 写在前面:我是工业互联网的新手,这篇是我的学习笔记,不是经验分享。内容是我查资料、看文档、自己画图理清后的理解。如果哪里写错了,特别欢迎在评论区纠正我——对我来说那比点赞还有用。
学工业互联网的第一周,我被一个看起来很简单的问题卡住了:
车间里一块电表,测到"当前功率 50 千瓦"。这个数字,是怎么最后显示到中控室大屏上的?
我天真地以为是这样:
电表 → 数据库 → 大屏电表把数字存进数据库,大屏去数据库读,完事。这不就两步吗?
后来我才发现,真实的工业系统几乎没有这么干的。我对着各种资料和开源项目啃了好几天,慢慢明白:这条路上其实有四道关,每道关都在解决一个我之前根本没想到的问题。
这篇就是我把这四层搞懂之后画出来的图。写下来,一是怕自己忘,二是如果你也是新手、也卡在同一个问题上,也许能帮你省点时间。
┌─────────────────────────────────────────────────────┐
│ 现场层 Field Layer │
│ 电表 / 传感器 / PLC —— 物理信号 │
└───────────────────────┬─────────────────────────────┘
│ Modbus 等协议
┌───────────────────────▼─────────────────────────────┐
│ 边缘层 Edge Layer │
│ 网关 / 边缘盒 —— 协议转换、清洗、缓存 │
└───────────────────────┬─────────────────────────────┘
│ MQTT / OPC UA
┌───────────────────────▼─────────────────────────────┐
│ 平台层 Platform Layer │
│ 消息队列 + 数据库 —— 接收、存储、计算 │
└───────────────────────┬─────────────────────────────┘
│ API / WebSocket
┌───────────────────────▼─────────────────────────────┐
│ 应用层 Application Layer │
│ 大屏 / 报表 —— 只负责展示 │
└─────────────────────────────────────────────────────┘我学到的一句话,感觉是理解这张图的钥匙:每一层只管自己那层的事。 我一开始的"电表→数据库→大屏"之所以行不通,就是因为它想让一层干完所有事。
下面一层层说我的理解。
现场层就是物理量变成数字的地方:电表、温度传感器、PLC。
我之前完全没意识到的一点:这一层出来的数字,可能本身就是"脏"的。 我查到的常见情况有几种:
第三点和我上一篇学 Modbus RTU vs TCP 时记的"帧结构"对上了——原来一次读完整一帧这么重要。学的东西开始串起来了,这种感觉挺好。
🤔 我目前的理解是:现场层的脏数据,软件这边没法完全避免,只能在下一层想办法处理。如果有更好的现场端做法,希望懂的朋友指点。
这一层让我"恍然大悟"。我之前的脑图里根本没有这层,以为网关就是根线。查了之后发现,边缘层(网关 / 边缘盒)才是整个系统能不能用的关键。我理解它主要干三件事:
现场是 Modbus 之类的工业协议,往上一般转成 MQTT 或 OPC UA。这样上面的平台只要认一种协议就行,不用去适配现场五花八门的设备。
第一关说的那些脏数据,资料里说一般在这一层就处理掉。我试着理解了一下,逻辑大概是这样(我自己写来帮助理解的伪代码):
def clean(value, last_value, lo, hi):
# 超出合理量程,判为无效,用上一个好的值兜底
if value < lo or value > hi:
return last_value
return value就是给数据加个"合理范围"的门槛,离谱的值不让它进系统。我觉得这思路挺朴素但有用。
这点是我之前完全没想到的。如果边缘盒和平台之间的网断了,这段时间的数据怎么办?
我查到的做法是:边缘盒先把数据存在本地,网络恢复后再补传上去。而且补传的数据要带原本采集的时间,不能用"传到的时间",否则历史数据会被当成此刻的实时值——这个细节我觉得很容易踩坑,特地记下来。
这一关纠正了我一个很大的误区。我原来想当然地觉得"存数据 = MySQL"。
但工业数据有个特点:它一直在不停地写、几乎只追加、永远带时间戳、查询基本是按时间段查。 这种数据有个专门的名字叫时序数据,也有专门的数据库(我看到的有 InfluxDB、TDengine 等)。
我整理了一下两者的区别(基于查到的资料,不是实测):
| 维度 | 普通数据库(MySQL) | 时序数据库 |
|---|---|---|
| 写入速度 | 一般 | 高得多 |
| 按时间查询 | 要自己优化 | 天生擅长 |
| 数据压缩 | 一般 | 很高 |
另外我注意到平台层前面常常还有个消息队列(比如 MQTT Broker、Kafka)。我的理解是:它像个缓冲垫,数据突然涌进来的时候先扛一下,避免直接把数据库冲垮。这和边缘层"先存本地"好像是同一个思路——每层都给自己留个缓冲。如果这个类比不准,欢迎纠正。
最后一关我理解起来最轻松:大屏、报表这些,只负责展示,不直接去连现场设备。
它们只读平台层已经存好的数据。需要实时更新的话,用 WebSocket 这种由服务器主动推送的方式,而不是让大屏拼命去问现场。
我猜想(不确定):如果让几十个大屏前端都直接去连那台现场网关,网关大概会扛不住。所以加了平台层这个中间人,前端都找它要数据就行。
把四层学完,我自己做了张表,方便以后回顾。也算检验我是不是真懂了:
| 遇到的问题 | 我理解该归哪层 |
|---|---|
| 数字跳变、有离谱值 | 现场层 + 边缘层清洗 |
| 设备协议乱七八糟 | 边缘层统一转换 |
| 网络不稳、怕丢数据 | 边缘层本地缓存 + 补传 |
| 数据量大、查询慢 | 平台层用时序数据库 |
| 大屏要实时更新 | 应用层订阅推送 |
如果这张表哪一行我归错了,真心希望评论区告诉我。
回到开头那个"电表→数据库→大屏",现在我知道它为什么不行了——它把清洗、缓存、存储选型全跳过了。 这些不是可有可无的优化,而是工业数据能不能用的前提。
作为新手,我最大的收获不是记住了"四层"这个词,而是体会到:工业互联网难的地方,往往不是让数据"跑起来",而是让数据在干扰、断网、海量写入的情况下依然"可信"。
我还有很多没搞懂的地方,比如 OPC UA 和 MQTT 到底该怎么选、时序数据库具体怎么用。这些等我学明白了,会接着写。如果你是过来人,欢迎在评论区给新手指条路;如果你和我一样在入门,也欢迎一起讨论。