当 AI 成为数据的第一用户,工业物联底座该怎么重构

一句话判断:AI 不缺数据,缺的是说得清出处的数据。

副标题:解绑测点 · 数据带出身 · 模型可仲裁
在这里插入图片描述
AI 成为数据的第一用户,工业物联底座该怎么重构?老系统真正的短板不是运行时,是数据模型:测点绑死设备,值说不清出处。本文以一套运行二十年的工业物联底座重构为样本,给出三刀——测点解绑、数据自带出身、声明式模型让 AI 产出可校验可仲裁,并说明端云如何共用一套契约、以及不做大爆炸式替换的四关推进路线。让现场数据被看见、被相信、被用好。

本文要点

  • 老底座最该改的不是操作系统或开发语言,而是数据模型:业务测点被死死挂在设备名下,设备一换,点就断。
  • 「AI 原生」不是加一个大模型接口,而是回答三问:语义、时间与质量、血缘。判据是产出能否被机器校验。
  • 第一刀用「五件套」把测点从设备上解下来,业务树与设备树通过 SourceBinding 关联;第二刀让每条 Observation 自带出身;第三刀把组态变成可 diff、可回滚的声明式模型。
  • 端云同一契约、各自实现;落地走「立基线 → 铸内核 → 长能力 → 过交付」四关,而不是一次性替换。

0. 引言:如果只许改一件事,改什么?

我与设备打了二十多年交道。最近这段时间,我一直在琢磨这套底座 3.0 的重构:嵌入式端从 .NET Micro Framework 迁到 RT-Thread + MicroPython,实时数据库 IODB 重新设计,点表要撑起从单台网关到整个集团的数据。

动手之前,我给自己出了一道题:如果只许改一件事,改什么?

换操作系统?换开发语言?把组态搬到网页上?想来想去,这些都对,但都没说到根上。这次重构真正要回答的问题是——

在 AI 成为数据第一用户的年代,一个做了二十年的工业物联底座,应该长成什么样?


1. 二十年老底座,为什么要动

2001 年我进工控行业,最早做的是计量监控、烧结配水、焦炉机车这一类系统。后来做组态后台,再到 YFIOs——驱动、策略、实时数据库 IODB、大块数据 IOBC 各司其职:驱动管通信,策略管逻辑,IODB 管点数据交换。这套架构用了十几年,跨过了 WinCE、.NET Micro Framework 一个又一个平台。

但今天它确实老了。老在三个地方。

1.1 三处老化

维度 现状 后果
运行时 NETMF 已停止演进,社区萎缩 新硬件接不上,招人越来越难
组态方式 Windows 桌面工具 + USB 线逐台下载 现场早已习惯打开浏览器就能干活
数据模型 业务测点挂在设备名下 设备一换,点就断;历史、报警、画面全要重配

前两处是工程问题,第三处是模型问题。工程问题可以换技术栈解决,模型问题会一直跟着你。

1.2 一个空压机站的例子

工厂的空压机站,现场需要「3# 空压机排气压力」和「3# 空压机电机绕组温度」。这两路数据由网关 G1 下的子设备采,还是由网关 G2 直接采,从业务上看有区别吗?

没有。压力就是那路压力,温度就是那路温度。

只有设备出了问题、要维护了,我们才关心它当时从哪个网关、哪个寄存器来。可过去的系统,把业务测点死死挂在了设备名下——设备一换,点就断,历史曲线断在半空中,报警规则要重配,前端画面要改引用。

第一性原理:设备会换,测点不应换;连接会断,历史不应断。

这是我这半年想得最多的一句话,也是这次重构的起点。


2. 什么叫 AI 原生:先看 AI 怎么「死」在老系统上

这两年 AI coding 火得一塌糊涂,我们也在用 AI 生成组态、生成接入代码、生成数据分析。但真用起来就明白一个道理:

让 AI 生成东西不难,难的是验证它生成得对不对。

DORA 2026 报告把这叫「验证税」——生成越便宜,验证越贵。工业现场更是如此:99% 的成功率不叫可靠性,叫灾难。

2.1 老 IODB 的一个点,AI 答不上来

我拿老 IODB 里的一个点问 AI:「3# 空压机的排气压力现在可信吗?」AI 一看,傻眼了:

AI 的疑问 老 IODB 现状 3.0 的解法
这个值是什么类型、什么单位? 字符串存的 "0.78",类型不明确 Measurement 声明单位、量程、精度
这条值可信吗? 无质量码,分不清是通信成功读来的还是超时残留的旧值 Good / Uncertain / Bad + 细分原因
到底是什么时候测的? 只有一个时间戳,说不清是设备测量时刻还是网关收到时刻 设备 / 网关 / 云端三时间戳 + 「边缘估算」标记
数据从哪来的? 点表挂在某台设备名下,查血缘要人肉翻配置 binding_id 轻量携带,可反查

核心判断:AI 不是缺数据,是缺说得清出处的数据。没有语义、时间、质量、血缘的数据,喂给模型的就是一堆看似丰富、实则无法解释的数字。

2.2 AI 原生的三个判据

所以「AI 原生」不是给老系统加一个大模型接口,而是反过来问三个问题:

  • Q1 语义:AI 读这条数据时,知不知道它的单位、量程、含义?
  • Q2 时间与质量:AI 相不相信这条数据?
  • Q3 血缘:AI 追溯这条数据时,能不能找到它从哪个设备、哪次采集来?

这三个问题,决定了 3.0 整个数据模型的形状。它们同时也是判断一套工业数据系统「是否 AI 就绪」的可执行 checklist。


3. 第一刀:把测点从设备上解下来

重构的第一刀,砍在模型层级上。

旧:网关 → 子设备 → 变量 → 云端数据
    业务数据是设备树的叶子,随设备一起被替换

新:Measurement(业务树,永久身份)
        ↑  SourceBinding(来源 / 换算 / 优先级 / 生效时间 / 映射版本)
    RawTag(设备树,某个时期的数据生产者)

过去业务数据是设备的附属品;现在倒过来:测点是业务资产,设备只是某个时期的数据生产者。

3.1 五个核心对象(「五件套」)

对象 职责 关键内容与归属
Measurement 业务测点,永久身份 单位、量程、精度、有效期、报警策略;按业务树组织,不随设备走
RawTag 设备侧原始变量 寄存器地址、OPC UA NodeId、本地 ADC;握手位与诊断量留在此层,不必都上云
SourceBinding 采集绑定 来源、换算、优先级、生效时间、映射版本;换设备换的是 Binding
Observation 观测样本 值、质量码、三时间戳、序号、血缘标识
ProducerHealth 生产者健康 在线状态、时延、成功率;归运维,不再绑架业务数据
在这里插入图片描述

3.2 工程验证:一座抽水蓄能电站给出的答案

这不是纸上推演。前几年我们给南方某大型抽水蓄能电站做大坝水工监测改造,四百多个测点,散布在上库、下库、地下厂房、蜗壳、岩锚梁。仪器五花八门:差阻式、振弦式、电容式,还有 4~20mA 标准信号;采集器也分成差阻、振弦、电容、模拟量好几种,各管一摊。

最有意思的是,每支仪器测出来的先是「原始量」——电阻比、频差、电容比,要靠一套标定公式才能变成工程量:电阻比变温度,频率变应力,电容比变位移。公式里的标定参数 A、k、f0、R0,每支仪器都不一样。

这件事让我把 Binding 想得更透:

「原始量 → 公式 → 工程量」的换算,天然属于绑定,不属于测点身份。

仪器坏了一支、换了一支,换的是公式参数,「蜗壳钢筋应力」还是那个测点。工业现场最土、最真实的工程实践,和我们要建的模型,说的是同一件事。

3.3 双树模型与故障切换

云端因此有两条树:

  • 业务树回答「我要看什么」,按集团、厂区、区域、对象组织;
  • 设备树回答「数据从哪来、去哪修」,按项目、网关、子设备组织。

两棵树通过 Binding 关联,互不绑架。G1 离线了?产生一条采集事件,检查备用路由 G2 有没有新鲜数据,有就无缝切换血缘;都没有,最后值保留、按测点自己的 TTL 转为「陈旧」——而不是 500 个点齐刷刷报 500 条「数据不可靠」的报警风暴。


4. 第二刀:让每条数据自己会说话

第二刀砍在数据本身上。新 Observation 里,每条样本都带齐了四样东西。

要素 内容 解决什么
三个时间戳 设备测量时刻、网关接收时刻、云端接收时刻 哪一段延迟、哪一段时钟不可信一目了然;设备无准确时间由网关标注「边缘估算」,不装诚实
质量码 Good / Uncertain / Bad + 超时、超量程、人工置值、估算值等细分原因 区分「读到」与「残留」;OPC UA 数据可带原始 StatusCode
序号 boot_id + seq 重启不乱、同毫秒可辨、重复可去重;历史库幂等键不再是「点名 + 时间戳」
血缘 binding_id 轻量携带 一段数据异常,可反查当时是哪个网关、哪个绑定在供数

在这里插入图片描述

下面是一个示意性的样本契约(字段用于说明模型形状,非最终 API):

{
  "measurement_id": "plant-a.comp-03.discharge_pressure",
  "value": 0.78,
  "unit": "MPa",
  "quality": "Good",
  "quality_reason": null,
  "ts_device": "2026-11-12T09:58:32.120+08:00",
  "ts_gateway": "2026-11-12T09:58:32.340+08:00",
  "ts_cloud": "2026-11-12T09:58:32.512+08:00",
  "time_origin": "device_clock",
  "boot_id": "gw1-20261109-0001",
  "seq": 184672,
  "binding_id": "bind-v3-g1-40021"
}

4.1 一个容易踩的坑:样本质量不可变,当前有效性动态算

设备后来离线了,不能回头把历史数据改写成 Bad——历史是历史。最新值还能不能用,由「距离测量时刻多久 + 当前绑定健康 + 该测点自己的有效期」实时算出来。温度可以容忍一分钟,振动 200 毫秒就算陈旧,所以有效期属于测点,不属于设备。

定点采集也是同理。那座电站的四百多个测点,绝大多数一天采一次,关键部位一小时一次,还有「每七天加密一天、按小时采集」的策略。大坝是慢数据,振动是快数据——采集频次和有效期,天生就是测点自己的策略,不该由系统一刀切。

4.2 前端不再显示一个裸数字

过去画面上是一个 65.2,现在应该是:

65.2 ℃,采集于 09:58:32,已陈旧 75 秒,当前路由中断

宁可承认不可知,不能伪装成新鲜。


5. 第三刀:让模型可验证、可仲裁

第三刀砍在「配置」上,也是 AI 原生最直接的落点。

AI 生成什么东西最好验证?声明式的模型文件,而不是命令式的代码。

生成物 可校验手段 出错成本
声明式点表 / 物模型(JSON) Schema 校验、逐字段 diff、回滚、终端模拟器仿真 机器和人都能看出错
命令式代码 基本只剩「读一遍」 全额缴纳验证税

一份点表定义、一份物模型,本质就是 JSON。下面同样是示意结构:

{
  "measurement": {
    "id": "plant-a.comp-03.discharge_pressure",
    "name": "3# 空压机排气压力",
    "unit": "MPa",
    "range": [0, 1.6],
    "precision": 0.01,
    "ttl_seconds": 60
  },
  "bindings": [
    {
      "binding_id": "bind-v3-g1-40021",
      "gateway": "G1",
      "raw_tag": "modbus://G1/40021",
      "formula": "raw * 0.001",
      "priority": 10,
      "version": 3
    },
    {
      "binding_id": "bind-v3-g2-40021",
      "gateway": "G2",
      "priority": 20,
      "version": 3
    }
  ]
}

5.1 组态链路

AI 读公开契约
  → 生成声明式点表 / 物模型(JSON)
  → Schema 校验 + 逐字段 diff + 终端模拟器仿真
  → 人确认
  → 原子发布(生成新模型版本),可回滚

旁路:USB 仅用于首次烧录与无网恢复,不再是唯一配置入口

在这里插入图片描述

设备 Web 端做草稿、校验、编译、发布、回滚;每次发布生成新的模型版本。

我在上一篇《从点表到物模型,再到「模型即数据」》里说过:在 AI 时代,协议文档不再是给工程师看的手册,而是给 AI 读的规格面。 数据契约继续公开——AI 有抓手,产出才可仲裁。


6. 端和云:同一契约,各自实现

模型定了,端和云怎么落?

嵌入式端 云端
实时内核 C/C++ 守住驱动、IODB、报警、时间、通信 —
扩展层 MicroPython 做策略、计算点、非硬实时扩展 视图与订阅 API
存储 IODB 冷热分离:定义放 Flash,运行态放 RAM 逻辑一张表、物理多平面:定义目录、最新状态、历史时序、报警事件、搜索索引、对象与分析
部署形态 新硬件起步,RT-Thread + MicroPython 小项目单 Broker + 单库;大项目分区、集群、数据湖按需长出来
明确禁忌 不让 Python 字典当实时数据库,不在高频采集循环里反复造字符串;三十多个字段全塞内存不是通用性,是浪费 前端只拿视图和订阅,不扫全表

RT-Thread + MicroPython 是手段不是目的。同一套模型,不是同一套重型部署:小项目方便用,大项目能支撑,靠的正是逻辑统一与物理解耦。

至于 AI 怎么用这些数据——通过授权的只读语义查询,问「3# 空压机排气压力现在多少、新不新鲜、上周为什么异常」;训练数据走对象存储和 Parquet。AI 不直接碰底层大表,更不绕过权限去碰设备。

数据越开放,边界越要清楚。


7. 重构不是一次替换,是一条可验证的路

不做大爆炸式替换:老 NETMF 产品继续维护,新平台从新硬件、一个典型 Modbus 项目起步,新旧对照跑黄金帧测试。

关口 目标 验收判据
一、立基线 冻结旧配置导入、典型驱动黄金帧 新旧输出逐帧可比
二、铸内核 C 版 IODB、三时间戳、质量码、序号 断链后不再继续上报「新鲜的 Good 值」
三、长能力 MicroPython、报警状态机、持久化续传、只读 Web 断网续传后历史幂等、不重复
四、过交付 Web 原子部署、模型注册、OPC UA 与 Modbus 投影 可 diff、可回滚;之后才谈数据湖与 AI

这条路看着比直接换个运行时慢,实际是在减少未来十年的返工。


8. 写在最后

写到这,想起当年从 DOS 转 Windows 时的失落,也想起后来 TinyGUI 的积累在嵌入式图形里重新变成稀缺品。重构一个二十年的底座,最怕的不是技术难,是忘了它为什么被造出来——让现场数据更快地被看见、被相信、被用好。

技术会变,工具会老。但让测点独立于设备、让数据带着出身行走、让 AI 有可仲裁的规格可用——这些是给未来十年打的地基。

范式会变,数据长存。


参考资料与延伸阅读

关于作者

刘洪峰,叶帆科技创始人兼 CEO,物联网极客。多届微软 MVP、阿里云 / 华为云 MVP、CSDN 十大 MVB。深耕 AIoT 二十年,研发 YFIOs 数据组态、YFHMI 画面组态及近百种物联网硬件。译《.NET Gadgeteer 电子积木》,著《低代码极速物联网开发指南》,在写《AIoT 全栈开发实战:从 PCB 电路板到 AI 智能体》。践行「一叶启帆,万物智联」。

posted on 2026-11-12 12:34  刘洪峰AIoT  阅读(190)  评论(1)    收藏  举报