AAlbert.dev
  • 首页
  • 博客
  • 项目
  • 关于
  • 留言板
Albert
© 2026 Albert · 把代码写进车间,把 AI 带入工厂
RSS
目录0%
返回文章列表
工业互联网

新手学工业互联网:一块电表的数字,是怎么跑到大屏上的?

作为工业互联网新手,我花了好几天才想明白一件事:现场一块电表测到的数字,到底经过哪些环节才显示到中控大屏上?这篇是我把它彻底搞懂后整理的学习笔记,画了张四层架构图,也记下了我一开始踩的认知误区。

2026-05-3011 分钟阅读4 次阅读
#工业互联网#数据采集#学习笔记#边缘计算#新手入门
0
喜欢这篇文章?
更多文章AlbertAlbert全栈开发者
上一篇Modbus RTU vs TCP:工业网关协议选型的 5 个真相下一篇把戴尔 7020 MT Plus 上的 Ubuntu Server 换成 PVE:我的安装记录

评论 & 讨论

· 由 GitHub Discussions 驱动

📝 写在前面:我是工业互联网的新手,这篇是我的学习笔记,不是经验分享。内容是我查资料、看文档、自己画图理清后的理解。如果哪里写错了,特别欢迎在评论区纠正我——对我来说那比点赞还有用。

我一开始想不通的问题

学工业互联网的第一周,我被一个看起来很简单的问题卡住了:

车间里一块电表,测到"当前功率 50 千瓦"。这个数字,是怎么最后显示到中控室大屏上的?

我天真地以为是这样:

电表  →  数据库  →  大屏

电表把数字存进数据库,大屏去数据库读,完事。这不就两步吗?

后来我才发现,真实的工业系统几乎没有这么干的。我对着各种资料和开源项目啃了好几天,慢慢明白:这条路上其实有四道关,每道关都在解决一个我之前根本没想到的问题。

这篇就是我把这四层搞懂之后画出来的图。写下来,一是怕自己忘,二是如果你也是新手、也卡在同一个问题上,也许能帮你省点时间。


我画的全景图:数据要过的四道关

┌─────────────────────────────────────────────────────┐
│  现场层  Field Layer                                  │
│  电表 / 传感器 / PLC —— 物理信号                       │
└───────────────────────┬─────────────────────────────┘
                        │  Modbus 等协议
┌───────────────────────▼─────────────────────────────┐
│  边缘层  Edge Layer                                   │
│  网关 / 边缘盒 —— 协议转换、清洗、缓存                  │
└───────────────────────┬─────────────────────────────┘
                        │  MQTT / OPC UA
┌───────────────────────▼─────────────────────────────┐
│  平台层  Platform Layer                               │
│  消息队列 + 数据库 —— 接收、存储、计算                  │
└───────────────────────┬─────────────────────────────┘
                        │  API / WebSocket
┌───────────────────────▼─────────────────────────────┐
│  应用层  Application Layer                            │
│  大屏 / 报表 —— 只负责展示                             │
└─────────────────────────────────────────────────────┘

我学到的一句话,感觉是理解这张图的钥匙:每一层只管自己那层的事。 我一开始的"电表→数据库→大屏"之所以行不通,就是因为它想让一层干完所有事。

下面一层层说我的理解。


第一关:现场层——数字从物理世界来

现场层就是物理量变成数字的地方:电表、温度传感器、PLC。

我之前完全没意识到的一点:这一层出来的数字,可能本身就是"脏"的。 我查到的常见情况有几种:

  • 瞬时跳变:电磁干扰、接触不良,导致某一瞬间读到一个离谱的值
  • 量程问题:传感器配置错了,读出物理上不可能的数(比如负的功率)
  • 拼接错误:一个数值要占两个寄存器,如果分两次读、中间数据变了,高低位就可能拼错

第三点和我上一篇学 Modbus RTU vs TCP 时记的"帧结构"对上了——原来一次读完整一帧这么重要。学的东西开始串起来了,这种感觉挺好。

🤔 我目前的理解是:现场层的脏数据,软件这边没法完全避免,只能在下一层想办法处理。如果有更好的现场端做法,希望懂的朋友指点。


第二关:边缘层——我觉得最关键、也最容易被新手忽略的一层

这一层让我"恍然大悟"。我之前的脑图里根本没有这层,以为网关就是根线。查了之后发现,边缘层(网关 / 边缘盒)才是整个系统能不能用的关键。我理解它主要干三件事:

1. 协议转换

现场是 Modbus 之类的工业协议,往上一般转成 MQTT 或 OPC UA。这样上面的平台只要认一种协议就行,不用去适配现场五花八门的设备。

2. 数据清洗

第一关说的那些脏数据,资料里说一般在这一层就处理掉。我试着理解了一下,逻辑大概是这样(我自己写来帮助理解的伪代码):

def clean(value, last_value, lo, hi):
    # 超出合理量程,判为无效,用上一个好的值兜底
    if value < lo or value > hi:
        return last_value
    return value

就是给数据加个"合理范围"的门槛,离谱的值不让它进系统。我觉得这思路挺朴素但有用。

3. 断网了数据不能丢

这点是我之前完全没想到的。如果边缘盒和平台之间的网断了,这段时间的数据怎么办?

我查到的做法是:边缘盒先把数据存在本地,网络恢复后再补传上去。而且补传的数据要带原本采集的时间,不能用"传到的时间",否则历史数据会被当成此刻的实时值——这个细节我觉得很容易踩坑,特地记下来。


第三关:平台层——我学到"不是所有数据都该塞进 MySQL"

这一关纠正了我一个很大的误区。我原来想当然地觉得"存数据 = MySQL"。

但工业数据有个特点:它一直在不停地写、几乎只追加、永远带时间戳、查询基本是按时间段查。 这种数据有个专门的名字叫时序数据,也有专门的数据库(我看到的有 InfluxDB、TDengine 等)。

我整理了一下两者的区别(基于查到的资料,不是实测):

维度普通数据库(MySQL)时序数据库
写入速度一般高得多
按时间查询要自己优化天生擅长
数据压缩一般很高

另外我注意到平台层前面常常还有个消息队列(比如 MQTT Broker、Kafka)。我的理解是:它像个缓冲垫,数据突然涌进来的时候先扛一下,避免直接把数据库冲垮。这和边缘层"先存本地"好像是同一个思路——每层都给自己留个缓冲。如果这个类比不准,欢迎纠正。


第四关:应用层——大屏只管"看"

最后一关我理解起来最轻松:大屏、报表这些,只负责展示,不直接去连现场设备。

它们只读平台层已经存好的数据。需要实时更新的话,用 WebSocket 这种由服务器主动推送的方式,而不是让大屏拼命去问现场。

我猜想(不确定):如果让几十个大屏前端都直接去连那台现场网关,网关大概会扛不住。所以加了平台层这个中间人,前端都找它要数据就行。


我整理的一张"问题该归哪层"对照表

把四层学完,我自己做了张表,方便以后回顾。也算检验我是不是真懂了:

遇到的问题我理解该归哪层
数字跳变、有离谱值现场层 + 边缘层清洗
设备协议乱七八糟边缘层统一转换
网络不稳、怕丢数据边缘层本地缓存 + 补传
数据量大、查询慢平台层用时序数据库
大屏要实时更新应用层订阅推送

如果这张表哪一行我归错了,真心希望评论区告诉我。


学完的一点感想

回到开头那个"电表→数据库→大屏",现在我知道它为什么不行了——它把清洗、缓存、存储选型全跳过了。 这些不是可有可无的优化,而是工业数据能不能用的前提。

作为新手,我最大的收获不是记住了"四层"这个词,而是体会到:工业互联网难的地方,往往不是让数据"跑起来",而是让数据在干扰、断网、海量写入的情况下依然"可信"。

我还有很多没搞懂的地方,比如 OPC UA 和 MQTT 到底该怎么选、时序数据库具体怎么用。这些等我学明白了,会接着写。如果你是过来人,欢迎在评论区给新手指条路;如果你和我一样在入门,也欢迎一起讨论。