
资产建模(元素树 + 元素模板 + 属性 + UOM)------先把「这是哪台设备」说清楚
一句话:IDMP 不把现场数据当成"一堆点位号"。它先让你建一棵树,把厂里有什么设备、设备有哪些属性、属性用什么单位定下来;这棵树建对了,后面的面板、分析、事件、AI 才全都有意义。
一、工业数据的第一道坎不是"存",是"认亲"
时序数据库里,一条数据长这样:
bash
tag001_pv 2026-09-12 08:00:00.000 3.42
存是存下来了。但------这是哪台设备?哪个测点?单位是米还是兆帕?3.42 算正常还是异常?没人知道。
于是每个项目都要重来一遍:写文档、做对照表、在 Excel 里查"tag001 对应 3 号线 2 号泵出口压力"。查完这一遍,系统里的数据才算有了意义------但这份意义不在系统里,在某个人的脑子里。
IDMP 的资产建模,就是把这层意义搬进系统:
| 原来 | 建完模型之后 |
|---|---|
tag001_pv = 3.42 |
「炼钢车间 / 3 号泵站 / 2 号泵」的「出口压力」= 3.42 MPa |
| 不知道是谁的数据 | 知道它属于哪台设备、哪条产线、哪个车间 |
| 不知道正不正常 | 有模板给的正常范围、有单位换算、有理论上的关联测点 |
| 换个人就看不明白 | 谁打开都看得懂 |
一句话:建模不是"配置工作量",是"把老师傅的脑子变成系统的结构"。
二、元素树:像文件夹一样组织整个工厂
IDMP 用一棵树描述你的工厂,和电脑里的文件夹几乎是一个思路:
bash
集团
└── 华东基地
└── 炼钢车间
├── 3 号转炉
│ ├── 氧枪系统
│ │ ├── 氧枪 A
│ │ └── 氧枪 B
│ └── 倾动机构
└── 1 号精炼炉
树上的每一个节点叫一个元素(Element)------可以是一个车间、一条产线、一台设备、一个部件,甚至一个虚拟分组。它有三个好处:
- 找得到:想找 2 号泵,沿树点进去,不用背点位号。
- 可继承:父节点的属性可以被下面的子节点继承和聚合------"整条线"的能耗不用手工加总。
- 权限有边界:谁管哪个车间,就给哪个子树,天然对应组织架构。
⚠️ 但要说清楚:树只表达"归属",不表达"影响"。
"这台泵属于 3 号泵站"是树;"这台泵的停机会导致下游结晶器缺水"不是树,那是关系------见第 04 篇。
三、元素模板:一次定义,批量生产
一台泵有流量、压力、电流、振动、温度、启停状态......如果每台泵都手工加一遍属性,40 台泵就是 40 遍重复劳动,而且必然有人漏、有人拼错。
元素模板(Element Template)就是解决这个的:
- 你定义一个「水泵」模板:12 个标准属性、每个属性的类型和单位;
- 然后每台泵套上这个模板,12 个属性自动到位;
- 以后加一个新属性(比如"轴承温度"),改模板一次,40 台泵全部跟上。
模板还能多层继承:可以定义「旋转设备」→「泵」→「离心泵」,子模板自动拿到父模板的所有属性,再加自己的。
这就是为什么 IDMP 敢说"零代码建模"------不是不用建,是同类设备只建一次。
💡 如果只是临时挂点数据、不想建模板,也支持自由元素(无模板元素)。省事,但会失去一致性------后文「边界与提醒」会说清楚代价。
四、属性:把「数值」变成「有含义的数值」
属性是元素上的一个字段。听起来简单,但 IDMP 的属性支持好几种来源,这是它比"打标签"强的地方:
| 属性类型 | 是什么 | 例子 |
|---|---|---|
| 数据引用(DR) | 直接指向 TDengine 子表的某一列或某个 tag | 泵出口压力 ← pump_003.pressure |
| 表达式属性 | 由其他属性算出来 | 泵效率 = 流量 × 扬程 / 功率 |
| 引用属性 | 引用别的元素的某个属性 | 本站出口压力 ← 下游泵站进口压力 |
| KPI 属性 | 可在模板层定义的业务指标(含公式与单位) | 单位能耗 = 电量 / 处理量 |
| 虚拟表引用 | 指向超级表虚拟表,便于跨子表统一查询 | 全厂所有泵的压力 |
| 联邦属性 | 指向外部数据库(MySQL / PostgreSQL / InfluxDB) | 设备台账里的"投运日期" |
除此之外,每个属性还能带这些"工程附件":
- 单位(UOM):让 3.42 变成 3.42 MPa;
- 限值 :
Lo / LoLo / Target / Hi / HiHi / USL / LSL,SPC 场景还有CL(均值)和σ(标准差)------后面第 06 篇做统计判异就要用; - 精度与显示格式:同一份数据,工程师看 6 位小数,厂长看 2 位。
🔧 工程细节:属性是惰性实例化的。给一个模板挂 50 个属性、下面有 5000 个元素,系统不会一上来创建 25 万个属性实例,而是用到才建------否则第一次打开页面就得转圈半小时。
五、UOM:单位不是备注,是数据结构
很多平台把单位当成一个"备注字段",写个 "MPa" 就完事。结果就是:一个系统里同时存在 kPa、bar、MPa,做聚合时数据直接算错。
IDMP 把单位做成了有换算关系的对象:
bash
单位分类(UOM Class):压力
├── 基准单位(canonical):Pa
├── kPa = Pa × 1000
├── MPa = Pa × 1000000
└── bar = Pa × 100000
好处很直接:上层看 MPa、底层存 Pa,聚合时自动换算,不会算错。
而且整套单位定义可以导出成 JSON 包,导入到另一套环境------引用关系用"名称"而不是本地 ID,所以换环境不会断链。多基地、多环境的项目不用一家家重配。
📣 这条不是我们自说自话:客户研讨会里,国家管网 把"目前均为标量数据,字符串记录的单位转换方式需升级、希望使用 UOM 自动推导单位体系"列为唯一被标为高优先级的技术需求。这是四家客户里最硬的一条痛点。
六、三种建模入口:手工、CSV、Markdown
| 入口 | 适合谁 | 特点 |
|---|---|---|
| 手工建 | 少量设备、探索阶段 | 点着建,最直观 |
| 从 CSV 导入 | 存量项目、有 Excel 台账 | 20 列表格,机器友好、人不好读 |
| 从 Markdown 导入 | 实施团队、多人协作 | 一个元素一块、一个属性一张表,人能读能改能评审 |
Markdown 建模是后加的主力入口,它是一种人能读的建模文件:
- 每个元素用一对注释包起来(
<!-- element:start -->...<!-- element:end -->),块内用表格填信息; - 属性写成表格,一行一个属性,指定数据来源(哪个库、哪张超级表、哪一列);
- 支持
${tbname}这类表达式 + 子表过滤,一段描述能展开成千上万个元素------所以它没有牺牲批量能力; - 支持一次上传多个文件,一个批量任务串行处理,逐文件显示状态,某个文件失败不影响其他文件;
- 不确定怎么写?用「生成基础 MD」按库/超级表导出一份骨架,改就行。
真实用法是这样的:某钢厂项目,建模团队三个人分工,各自用「生成基础 MD」导出骨架,补全后把 炼钢厂.md、轧钢厂.md、动力厂.md 一次全选上传------三个人并行准备,一次提交。
七、一个生产实践的例子:动力厂 120 台泵,一个下午
某钢厂动力厂要做能源管理。要建的是:3 个站房、40 台水泵、80 台风机,共 120 台设备、约 1400 个测点。
老办法:拉一张 Excel 台账,一个一个填------三周,而且填完还有一堆拼错的名字和打架的单位。
这次是这么干的:
13:30 · 先让系统给骨架。
在「从 MD 导入」里选 iot 库、选 pump_data 超级表,点「生成基础 MD」。系统导出一份骨架文件:元素路径、属性表、数据引用列都已经按超级表的真实列名填好了。
14:10 · 补模板和单位。
王工建了一个「离心水泵」元素模板:流量、出口压力、电流、振动、轴承温度......12 个标准属性,每个都挂上单位(m³/h、MPa、A、mm/s、℃)。然后复用已有的「压力」「流量」「温度」三个 UOM 分类------不用重新定义单位,直接从单位库里引用。
14:40 · 批量展开。
风机那 80 台长得一模一样,他在 MD 里只写了一个块:
bash
路径:动力厂/鼓风站/${tbname}
子表过滤:tbname LIKE 'fan_%'
一个块,展开成 80 个元素。上传后十分钟,80 台风机连同测点全部建好。
15:20 · 三个文件一起传。
水泵、鼓风、循环水三个 MD 文件一次选中上传,后端作为一个批量任务串行处理。进度面板上,每个文件的状态一清二楚:pump.md 完成、fan.md 完成、water.md 卡在第 12 块------因为那块引用了单位库里不存在的 kgf/cm²。整个文件在创建前就失败了,一条脏数据都没落库。 补上单位,重新传,通过。
17:00 · 收工。
一棵三层、120 台设备、1400 个测点的模型站在那儿了。后面所有面板、分析、告警,全部长在这棵树上。
最关键的一件事 :一周后王工发现"轴承温度"这个属性应该细分(驱动端 / 非驱动端)。他改了「离心水泵」模板一处,120 台设备全部自动跟上。老办法里,这意味着再改三周。
八、怎么用:三步上手
第一步:先想清楚"树怎么分层"
按你的管理方式分层:集团 → 基地 → 车间 → 产线 → 设备 → 部件。分层要跟组织架构和报表口径一致,不要为了"好看"多加两层。
第二步:找出"重复的那批设备",先建模板
同一类设备别建第二次。建模板时想三件事:它有哪些标准测点、每个测点的单位和量程、哪些指标是算出来的(KPI)。
第三步:量产
- 设备少(<20 台)→ 手工建,顺手验证模板对不对;
- 设备多、有台账 → 「从 MD 导入」,先「生成基础 MD」再改;
- 存量 CSV 项目 → 继续用 CSV 入口,不折腾。
九、能解决什么问题
问题 1:数据是"有数无义"
点位号变成"某台设备的某个测点、带单位、带限值"------数据第一次能被人读懂。
问题 2:同一个模型要建很多遍
模板 + 继承,同类设备只建一次;改一次,全部同步。
问题 3:单位打架、聚合算错
UOM 是数据结构不是备注,换算有依据,单位体系可跨环境搬。
问题 4:建模是"实施顾问的黑盒"
Markdown 建模让建模文件进 Git、能 Code Review、能多人分工------建模从"顾问的手艺"变成"工程团队的资产"。
十、边界与提醒(诚实版)
- 模板设计错了会传染。 模板改一处,下面所有实例一起变。这是它的威力,也是它的风险------上线前先在 2~3 台设备上验证模板,再铺开。
- 自由元素省事,但一致性会丢。 没有模板约束,同一个测点在不同设备上可能叫三个名字,后面做分析时要一个个对齐。
- MD 导入只引用已有单位,不创建单位。 文件里写了库里没有的单位,整个文件在创建前失败(这是刻意的:宁可报错,不要半对半错)。所以建模前先把 UOM 库配好。
- 换算链不能循环。 A 换算到 B、B 又换算回 A,导入会直接拒绝。
- 树不是全能的。 上下游、控制、联锁这些"影响关系"树表达不了,得靠关系图(下一篇)。
- 客户反馈还集中在"要什么"阶段。 研讨会里国家管网提的是 UOM 需求、山东英伟电子提的是"多棵树表达多维度太难",说明建模这一层的真实痛点很硬,但也说明体验层面还有打磨空间。
十一、和别的功能怎么配合
| 你刚建完模型,接下来 | 去哪 |
|---|---|
| 想看设备之间"谁影响谁" | 元素关系图(第 04 篇) |
| 想接外部库里的数据,不搬家 | 外部数据引用 + 联邦查询(第 05 篇) |
| 想让设备自己会算、会告警 | 实时流分析(第 06 篇) |
| 想快速出图看看数据长什么样 | 无问智推(第 01 篇)------模型建好,面板自动推 |
| 想让 AI 帮你解读一台设备 | AI 问答 / AI Function(第 02 篇) |
建模是地基。地基没打好,后面的 AI 只能靠猜------建模质量决定 AI 质量,这句话在 IDMP 上体现得最直接。
十二、关于 TDengine IDMP
TDengine IDMP(Industrial Data Management Platform)是一款 AI 原生的工业数据管理平台 。
它不负责存数据------那是 TDengine TSDB 的事;它负责给数据补上业务含义,并在这个基础上让 AI 真正跑起来。
本文讲到的 AI 问答、AI Function、无问智推,都是平台自带能力,不需要另外搭一套 AI 应用。
免费版够不够用
IDMP 提供免费版,中小企业和个人用户可以直接用。
免费版与商业版在功能、性能上完全一致 ,通过年度续期 即可长期免费使用,只在测点数量 上设有上限------
对大多数中小企业来说,这个额度够用。All-in-One 装完会自动申请并激活免费许可,不需要额外配置。
怎么装:All-in-One 一键部署
All-in-One 把 IDMP、TSDB、TDgpt、TDmodel 打包成一个部署包:
| 环境 | 怎么装 |
|---|---|
Linux (Ubuntu / Kylin / openEuler / Anolis;需 root、内核 ≥ 3.10.0-1160、glibc ≥ 2.28) |
执行下面的主机模式命令 |
| Windows 10/11、Server 2019+ | 下载 TDengineSetup-x64.exe,双击后选「主机方式」 |
| Docker(Linux / macOS / Windows,Docker ≥ 20.10) | 执行下面的容器模式命令;macOS 只支持 Docker 部署,需先启动 Docker Desktop |
bash
# 主机模式(Linux)
curl -fsSL https://downloads.taosdata.com/apex/latest/install.sh | bash -s -- -m apex
# 容器模式(Linux / macOS)
curl -fsSL https://downloads.taosdata.com/apex/latest/install.sh | bash -s -- -m docker
装完浏览器打开:
text
http://localhost:6042
从其他机器访问,把 localhost 换成部署节点的 IP 或主机名。
装完先把 AI 接上
平台装好,AI 还差一步(也就是第五节说的前提):
- 连一个大模型:OpenAI 兼容接口,填地址 / Key / 模型名;内置 15 天试用连接,可先零配置体验;
- (可选)装 TDgpt:要做异常检测、预测、缺失值填补时才需要,它独立于大模型运行;
- 把数据接进来:连现成的 TDengine TSDB,或用示例数据先跑通。
两点容易踩:默认部署清单是
deployment-single-node-no-tdmodel.yaml,TDmodel 仅支持 Docker 部署 ;TDgpt 默认启用 moirai 模型,x64 CPU 需要支持 AVX2。
运维与卸载(Linux 主机模式)
| 操作 | 命令 |
|---|---|
| 启动 IDMP | svc-tdengine-idmp start |
| 停止 IDMP | svc-tdengine-idmp stop |
| 卸载 IDMP | rmidmp |
链接
- All-in-One 下载与安装命令:https://www.taosdata.com/download-center?product=TDengine+All-in-One
- Windows 安装器:https://downloads.taosdata.com/apex/latest/TDengineSetup-x64.exe
- 免费版说明:https://www.taosdata.com/tdengine-free-edition
- 不想本地装:注册云服务直接试用 https://cloud.taosdata.com