题主这个标题起得很准,我见过太多工厂上了数据平台之后,第一件事就是让人把DCS点位表导出成Excel,再导入到所谓“资产管理库”里,然后跟领导汇报说“Tag模型建好了”。这种事儿干一次两次还行,干到第三次,基本就会在变更管理上栽大跟头。
我在这行做了十年的工控系统集成和厂级数据平台建设,从PLC、DCS到OPC UA、Historian、MES接口基本都摸过一遍。今天这篇文章就想把“工业Tag模型不是点位表”这件事彻底讲透。它不是概念炒作,而是直接影响你工厂能不能做数据分析、能不能做系统联动、能不能扛住后面三年技改的基础工程。我会按这五个话题往下聊:点位表到底缺少什么,命名怎么定才不后悔,语义做到什么程度才叫“机器能懂”,变更治理具体怎么跑,以及落地时怎么避免一上来就搞砸。
1. 先拆掉那个误区:点位表和Tag模型差在一个“关系”上
1.1 点位表为什么不够用
点位表这玩意儿本身没有错。它起源于仪表专业和DCS调试阶段。一个项目的IO清单、仪表索引、DCS点表,长什么样呢?通常就是几列:位号、描述、信号类型、量程、报警值、所属回路、所在机柜、通道号。这东西的用途非常明确——设计、施工、接线、回路测试。它在工程阶段是完全够用的,因为当时大家关心的是“哪些信号要接入系统”“接到哪个机柜哪块卡件”。
但是到了生产运营阶段,情况就变了。你会遇到这些问题。
第一个问题:点位之间是平的,没有关系。你在Excel里看到的“TIC_101.PV”和另一个Sheet里的“TIC_101.SP”,它们是同一个回路的测量值和设定值。但如果你不仔细看前缀,根本不知道这俩有关系。Excel不会告诉你“TIC_101.PV”属于反应釜R-101,也不会告诉你它被反应温度控制回路用到,同时又被历史数据库采集、被报表引用。点位表是张平面的清单,但真实世界的工控数据是一张立体的网。
第二个问题:点位表只有“当时”的信息,没有“过程”的信息。点位表记录的是一个静态的快照,谁建的、为什么建、什么时候改过量程、报警值从多少改成多少、改动前是什么版本,这些信息点位表里全都没有。而生产中你恰恰最需要知道这些。
第三个问题:同名不同义、同义不同名,点位表里发现不了。比如现场有三张表,一张写“进料阀”,一张写“FV-101”,一张写“Feed Valve”,都知道是同一个东西,但没有一个字段把它们串起来。机器也不会自动知道它们之间的等价关系。
1.2 Tag模型的“模型”两个字,到底指什么
很多人以为Tag模型就是给每个标签多填几个字段,比如“所属工段”“所属设备”“备注”,然后点一股脑补上去。这不叫模型,这叫“加了几列备注的点位表”。
所谓模型,要满足三个条件才成立。
第一,结构。Tag不是孤立的字符串,而是有层级归属的对象。它属于哪个装置、哪个单元、哪台设备、哪个控制回路,这些关系必须是显式的。就像一棵树的节点,每个节点都知道自己的父节点是谁、子节点有哪些。
第二,语义。Tag要能被机器和程序解释,而不只是被人解释。什么叫被机器解释?就是这个字段是浮点数还是整数、工程单位是摄氏度还是千帕、数值范围是多少、取值是连续量还是离散状态量、如果取0或1分别代表什么含义。数据显示系统拿到这个元数据,就能自动做量程换算、单位转换、异常判断。这些能力只有一个带语义属性的模型才能提供。
第三,关系。Tag之间、Tag和资产之间、Tag和流程位号之间,都要建立显式的关联。一个控制回路的PV、SV、MV、OP,四个标签应该关联到同一个控制回路键下面。一个联锁逻辑涉及的多个现场信号,应该能通过设备位号或联锁回路ID串起来。数据平台做根因分析、做报警关联分析时,靠的就是这层关系。
变更是第四个要素。模型必须记录谁在什么时候、基于什么原因、把哪个属性从什么值改成了什么值。没有变更历史的叫静态数据库,不叫模型。
1.3 用一张表说清楚差别,方便你直接拿去说服同事
我经常把点位表和Tag模型的差异总结成下面这张表,开共识会时直接投屏,能省不少扯皮的时间。
| 维度 | 点位表 | Tag模型 |
|---|---|---|
| 数据形态 | 平面清单 | 层级化的对象集合 |
| 核心元素 | 一行一个信号 | 一个Tag是拥有属性和身份的对象 |
| 字段关系 | 基本靠人工脑补 | 用关系键显式关联 |
| 生命周期 | 工程施工阶段用途 | 贯穿设计、调试、生产、技改全过程 |
| 语义信息 | 描述性文本,机器不关心 | 结构化元数据,机器可解析 |
| 变更记录 | 一般没有 | 有版本、有审批、有审计 |
| 支撑系统 | Excel也能用 | 需要资产管理工具或平台 |
| 对后续应用的价值 | 仅用于查找信号 | 支撑报警治理、根因分析、数字孪生、AI应用 |
这张表不是要否定点位表。我的态度一直是:点位表是Tag模型的数据来源之一,但它是原材料,不是成品。你搞数据治理,要把原材料加工成有结构、有语义、有生命周期的模型,这个过程才是关键。
2. 命名治理:从“人能看懂”到“机器能解析”之间缺一道关卡
2.1 命名不统一的现场,乱到让人无从下手
先说个真实场景。某个化工厂做数据平台,光温度测点就有三种完全不同的命名方式。老工程留下的叫“TE-101A”,后来的DCS组态工程师习惯用“T1_101A”,新来的乙方项目团队用“TT101_A”。再往下看中文描述,有人填“反应釜温度”,有人填“R101顶部温度”,还有人干脆写“TEMP”。
这些标签来自同一台设备的不同部位,但你以为它们毫无关联。如果你只做点位表,顶多就是在Excel里做两列筛选。但到了做统计分析、做设备预测性维护的时候,你要把“反应釜温度”所有相关测点聚到一起算特征,这时候你就发现压根不知道怎么解释通。
命名治理的核心,不是让名字好看,而是达到三个目标:唯一性、可解析性、可互认性。
唯一性不用多说——整个工厂范围内,一个Tag只能对应一个物理测点,不允许一物多名、一名多物。可解析性意味着你的Tag名要按规则拆解,每个字段都有明确的业务含义,程序拿到Tag名就能知道它属于哪个区域、哪台设备、测什么量、是测量值还是状态值。可互认性则更高一层——同一类型的Tag,不管在哪个工厂、哪条产线,命名逻辑都一致。今天这块新建了一个温度测点叫“REACTOR101_TEMP_MEAS01”,后天新建另一个装置的温度点也应该能套同一套规则,这样仪表工程师、组态工程师、数据分析工程师之间才不会鸡同鸭讲。
2.2 参考现成的层次思想,别自己闭门造车
ISA-88批次控制标准里定义了“过程单元→单元→设备模块→控制模块”的层级,ISA-95企业集成标准里定义了“企业→工厂→区域→工艺单元→设备”的分解方法。还有OPC UA那种Server/Nodeset的树状信息模型,本质也是给你一个结构化的容器,让你把Tag挂在资产树下。
我做Tag模型时,常用的就是ISA-95那一套区域逻辑,改造一下,取四层:
- 第一层:子公司或厂区
- 第二层:装置或车间
- 第三层:工艺单元(比如裂解炉单元、精馏塔单元)
- 第四层:设备或功能回路(比如加热炉F-201、进料泵P-201)
Tag名建议至少体现两到三段,既能区分位置,又不会太长。
2.3 一套可以从下周就开始用的命名规则
我在这里给一套经过多个项目验证的规则,不是标准答案,但至少够用、不踩大坑。
Tag名建议用半角英文数字和下划线,长度控制在24个字符以内。英文大写为主,特殊字符中间允许下划线。禁止使用空格、点号、"/"、"#"这类会被上位机软件和数据库当特殊字符处理的符号。规则分四段:
区域编码_设备编码_测点功能_通道序号举例说出来更直观:
TH_101_RX_20_TEMP_PV COLUMN_201_P1_DISCH_PT第一段区域,用三位左右的大写字母或者缩写,必须有一个枚举字典事先定义好。“TH”代表聚合装置,“COL”代表精馏岗位。第二段设备编码,直接沿用设备位号或者设备树里的编码,“RX_20”就是20号反应器,“P1”就是1号泵。第三段测点功能,用统一的缩写词表,“TEMP”代表温度,“TEMP_PV”代表温度测量值,“DISCH_PT”代表出口压力,“RUN_ST”代表运行状态。最后如果有通道或序号,就再接一个两位或三位的自增数,保证同一设备同一功能上有多个测点时能区分开。
如果控制系统允许,也可以把区域和设备用短斜杠分隔,比如“TH/RX20/TEMP_PV_01”。但很多老系统的Tag名不允许出现斜杠,所以我建议统一用下划线做分隔。另外中文字符不建议进标识符,系统兼容性差,而且下游做计算时容易出乱码。中文含义放到描述字段里,让描述负责人类可读,标识符负责机器可解析。
2.4 命名规则的推行,靠机制而不靠理解
规则定出来了只是第一步,让它落地才是关键。这里有一个很现实的问题:一线人员不见得理解你的规则逻辑,他们只是想赶紧把位号填进去。所以一定要把规则“固化”成工具和流程,而不是做一版PDF让大家自觉遵守。
我的做法有三件配套。
第一,做一个“命名规则校验”的脚本或程序,放在数据导入入口。每次新增标签时,自动校验Tag名是否匹配正则表达式、是否在区域字典之内、是否包含非法字符。不符合就拒绝入库,并提示原因。哪怕只有一个几十行的Python脚本,也比让审核人去肉眼翻表靠谱得多。
第二,建立“缩写词表”和维护流程。比如TEMP、PRES、FLOW、LEV、SPD、RUN_ST、FAULT、CMD,这些词必须唯一、不可混用。新缩写要申请,要过评审,进入词表后全厂统一版本管理。
第三,起名时给一线人员足够的输入提示。如果是用Excel模板收集信息,下拉框里放好区域编码和功能缩写,不让手填。这招表面上不起眼,但它能解决60%以上的命名随意性问题。人一旦需要打字,就会自己发挥创意;只要让他从下拉框里选,规则后面再怎么改都容易。
这里给个正则样例,做校验用的思路,具体语言你自己实现:
^[A-Z0-9]{2,4}_(DEVICE|UNIT)_[A-Z0-9]{1,6}_[A-Z_]{2,8}_[0-9]{2}$这只是思路,实际正则要按照你的编码段位去写。核心是:正则校验是个有效工具,能让你在入库前就把问题挡在外面。
3. 语义治理:把“TT_203”变成一台机器可辨识的资产
3.1 从“信号表”升级到“语义档案”
如果你的Tag模型里只有Tag名和描述,那它仍然是一张换了皮的信号表。要让模型真正支撑上层应用,必须给每个Tag挂一套完整的语义属性。你可以把Tag当成一台设备的“身份证”,名字是公民身份证号,语义属性是这张证上的姓名、住址、有效期、民族。有了这些字段,系统才既能认出它是谁,又知道它是干什么的。
我建议一套最低限度的Tag语义属性,分四个板块:基本属性、工程属性、状态属性和关系属性。
基本属性包括Tag唯一标识、名称、中文描述、英文描述、来源系统、所属区域、所属设备、所属控制回路。工程属性包括数据类型(Float、Integer、Boolean、String)、工程单位及单位符号、量程下限/上限、报警类型和报警值、采集周期、是否需要存储历史数据。状态属性包括当前生命周期状态(规划中、已投用、检修中、已停用)、值状态(正常、坏值、陈旧值、手工置值)、最后更新时间。关系属性包括它所关联的物理仪表位号、上位机画面ID、历史库点ID、下游报表或接口引用信息。
看到这里你可能已经意识到,这套语义档案已经不是一个普通Excel能撑住的了,它需要一个能管理结构化数据的工具,哪怕你暂时用关系型数据库或配置库都行。
3.2 工程单位规范化和枚举字典,两个最容易出丑的细节
工程单位看起来是小事,其实是语义治理里最见功底的地方。现场最常见的乱象是:同一列数据,历史库里存的是摄氏度(℃),而在OPC UA服务端里节点单位写的是“degC”,还有个接口文档里写成“C”,再到MES报表里又变成了“℃”。你肉眼能看出来是一回事,但程序要统一换算就麻烦大了。
我的建议是,在Tag模型的工程属性里,单位字段用标准化的符号标识符,别存中文描述,别存非标准缩写。温度一律用“degC”或“°C+代码”,压力用“kPa”或“MPa”取决于量程大小,液位用“%”或“mm”,流量用“m3/h”或“kg/h”。关键是要有一个“单位字典”,每一条里包含标准符号、中文名、到基准单位(比如国际单位制SI)的换算系数。任何一个Tag的单位都能在这个字典里找到,找不到就不允许入库。
枚举字典是第二个容易乱的地方。举例说明,一台电机的状态信号,在不同生产线上可能分别编码成0/1(0=停,1=运)、1/2(1=运行,2=停止)、A/B。如果不做语义标准化,跨产线对比分析根本没法做。我的做法是建一个“通用状态枚举表”,把“停止”“运行”“故障”“检修”“远方”“就地”这些公共枚举值统一编成两个字符的标准码,比如STOP、RUN、FAULT、MAINT、REMOTE、LOCAL。项目里的每个Tag的枚举值都必须做映射到这张表上,这样才能实现跨装置的可比性。如果现场用了不同的原始编码,允许保留原始值,但模型里必须有一个“标准状态”字段,用统一枚举填充。
3.3 语义映射:两个Tags是不是同一个东西,得让模型来回答
我做过一个项目,DCS和PLC系统分别把同一个马达的状态传给了两个历史库。DCS点叫“M_101_STATUS”,PLC点叫“MOTOR_101_STATE”。你以为建模的时候能通过名字自动识别出它们其实是一回事吗?当然不行。就是需要一张显式的“Tag映射表”,把这个等价关系建立起来。
这张映射表至少要有以下几个字段:
| 字段 | 示例 |
|---|---|
| 逻辑标签ID | MOTOR_101_STATE_MEAS |
| 源系统标签名 | M_101_DCS.STATUS |
| 目标系统标签名 | M_101_PLC.RUN |
| 映射关系类型 | 等值映射 |
| 单位换算 | 无 |
| 有效状态 | 启用 |
| 变更记录ID | CHG_202406001 |
有这张表,数据平台在融合数据时才能拉齐两路数据,报警分析时也不会把同一个信号当作两个原因重复报警。
很多人走到这一步会问,那我是不是要搞一个工业语义的本体或者知识图谱?我的答案是:在你把基础映射表和属性规范化做完之前,不要碰本体这种大词。机器能通过映射表和统一字典完成大部分工作,就说明你的语义治理已经过关了。真正的语义识别也好、知识图谱也好,也是在基础结构之上锦上添花,而不是一上来就建知识图谱。
3.4 一个可以复用的语义完整度检查清单
给你一份可以直接拿来当验收标准的清单。建议每个Tag都跑一遍这个检查,缺一项就打回补全:
- 是否有唯一Tag标识?
- 是否关联了至少一个设备或资产?(工艺性描述字段不算)
- 是否填写了数据类型?
- 是否有标准化工程单位?
- 是否填写量程上下限?
- 是否定义了报警级别(如有)?
- 如果是离散量,是否映射到标准枚举字典?
- 是否注明来源系统?
- 是否建立了与旧位号或源系统标签的映射?
- 是否有负责人和变更记录?
别小看这十条,我见过很多声称建好了Tag模型的工厂,一条条核下来,能全亮的Tag不到30%。
4. 变更治理:为什么99%的现场问题都出在“活数据”上
4.1 一次量程改动引发的连锁灾难
我记得一个例子,某个车间把储罐液位计的量程从0-2000mm改成了0-3000mm,因为设备换了型号。DCS工程师在组态软件里改了量程,现场运行正常,看起来没毛病。但问题来了:
历史数据库还是按旧量程存储的,百分比换算直接翻车——同一个液位实际是50%,历史库里显示成了75%。报表系统生成储罐库存量时,也错把3000mm当成了2000mm,算出来的体积整整多了50%。分析人员又拿旧数据和新数据做趋势对比,发现液位“突然涨了”,于是提了一个设备异常工单。
整个链条上谁都没故意犯错,但结果就是单位混乱、数据失真、产生无效报警和分析报告。这种问题,我觉得比“数据缺失”更让人头疼。因为缺失至少一眼能看出来,而量程不一致,你要是只看数值本身,完全察觉不到。
造成这种事故的根本原因,就是只有点位表,没有人管理Tags的变更。改了量程之后,没有任何机制去通知下游系统同步更新元数据,也没有任何机制去检查历史库里的缩放参数和DCS里的量程是否一致。
4.2 影响分析:任何一次变更,都要先回答“谁会受影响”
变更是不可避免的,技改、设备换型、控制逻辑优化,都会带来Tag的新增、删除、属性修改。治理做得好不好,核心在于两点:变更前能不能做影响分析,变更后能不能可回滚可追溯。
影响分析的第一步,是有一张“反向引用表”。就是知道每一个下游应用引用了哪些Tag。这个引用关系怎么来?不靠人记,靠工具和登记流程。举例说,你的HMI画面上显示了一个温度,这个画面文件里写了这个Tag名;历史库配置里也引用了它;报警设定页里也有它;报表模板里也留了它。这些引用信息应该在平台建设时被扫描并登记下来,形成Tag的关联关系库。
有了这张关系库,提变更时就可以先做“变更影响检查”。如果要把这个Tag的量程从0-100改到0-160,系统自动提示:此Tag关联了3个HMI画面、1个历史库点、5条报警配置、2张报表。然后需要相关责任人确认是否同步修改这些下游配置,并填写影响确认意见,变更才能进入审批。
这一步很多工厂完全缺失。他们只会给Excel加一列“备注”,写“已同步修改XX画面”。真出了问题,Excel上什么也查不到。
如果你想低成本起步,可以建一个“变更登记表”加“影响检查表”,每次变更前花半小时把引用项过一遍。但这不是终极方案,后面还是建议引入带关系库的资产管理系统。
4.3 标签的生命周期:从草案到归档,每一步都要有状态
一个Tag从出生到退休,至少要经历这些状态:
| 状态 | 说明 | 可执行的操作 |
|---|---|---|
| 草案 | 需求提出,尚未经过校验 | 编辑、删除、提交评审 |
| 待评审 | 已提交评审,未被批准 | 修改、撤回 |
| 已批准 | 评审通过,准备接入系统 | 执行接入、计划投用 |
| 已投用 | 已写入DCS/SCADA/历史库,参与生产 | 修改需发起变更流程 |
| 检修中 | 暂时停用/隔离 | 只读,可通过流程恢复 |
| 已停用 | 不再参与生产 | 只读,可归档 |
| 已归档 | 历史记录保留,不再活跃 | 查询只读 |
每进入一个新状态,都要触发对应的动作。比如“已批准”时,要生成标签标识、初始化采集配置;“已投用”时,要在历史库建点、在画面上挂链接。变更治理的本质,就是让状态流和操作流严格绑定,防止跳到某个状态漏掉了某一个环节。
4.4 变更记录的字段,一个都不能少
变更记录是审计的底稿。每次修改Tag的任何属性,不管大小,都应该留档。我建议的最小字段集是:
- 变更单号
- 变更标题
- 变更发起人
- 变更日期
- 变更原因
- 变更前值
- 变更后值
- 影响分析结论
- 审批人及审批意见
- 执行人及实施时间
- 验证结果
- 关联的工单或项目编号
这样你将来做问题回溯时,可以精确到“谁在什么时候把哪个字段改成什么”。真正做过事故复盘的人会明白,这种字段有多重要。否则出了问题只能靠“当时好像是某个人改了一下”这种猜测。
我常说,Tag模型的治理严格程度应该对标IT运维里的配置管理数据库和变更管理,而不是对标一段Excel里自由发挥的备注。工业现场虽然流程重,但上了系统后,反而能减少维护负担,因为大部分检查变成了程序判断。
5. 落地路径:别搞大而全,先从一个车间把骨头啃下来
5.1 为什么一上来就“全厂统一Tag模型”必死无疑
我见过一个集团级的项目,项目组雄心勃勃地说要把五个工厂、二十套装置、十几万个点统一建模。干了半年,连命名规范还在各种会议里吵架,因为每个厂都有自己几十年的习惯,谁也不服谁。最后的结果是,模型搁浅,连原来的点位表都因为反复拆解而出现版本混乱。
这类项目失败的原因不在方法论,在于范围。Tag模型是强业务相关的治理工程,它需要在现实运转中逐步打磨,而不是在办公室里一次定稿。一上来就全厂推广,会让规则设计失去参照物,也让一线参与的人产生巨大的抵触情绪,因为他们的工作习惯会在一个晚上被推翻。
我的建议永远是:选一条产线、一个车间或者一个工段,把范围缩小到你能控制的程度,先把从命名到语义到变更治理的全流程跑通一遍。用跑通的事实和数据说话,再去横向推广。这个思路跟做数字化转型的“灯塔项目”是一样的逻辑,先试点,再拿样板说服人。
5.2 从盘点存量开始,还是从新增开始
很多项目卡在“存量数据清洗”上。几万个历史点位,名字乱得不行,语义字段大量缺失,你要一鼓作气把它们全修好,工作量会大到让人崩溃。
我的经验是双轨并行。存量数据先完成“代码化登记”——只保证每个Tag有唯一标识、有基本类型、有关联设备和基础描述,不追求所有字段都完美。能做到50%的语义完整度先跑起来。同时,所有新增和变更的Tag,严格按新标准和流程执行。这样保证增量是干净的,存量再逐步改造。
打个比方,维护一间旧房子,你不能先把所有墙皮都铲光再重新装修,那样你全家就没地方住了。你要做一个“随时能住”的翻新方案,先通水通电,再逐间修。Tag模型也一样,先让平台能正常跑起来,再分批把存量数据从“能看”变成“好用”。
5.3 六周试点计划,照着排期就能起步
如果你已经开始心动,想在一个车间尝试,我下面给你一个具体的六周路线图,可以参考执行。
第一周,做盘点。导出试点范围内所有控制系统的点表、画面分组信息、历史库点列表。用脚本做一遍统计,看看有多少个重复Tag、多少条缺失描述、多少个同类信号命名风格不一致。先摸清家底,心里有数。
第二周,定规范。结合ISA-95层级和工艺实际情况,产出命名规则V1版、缩写词表V1版、语义字段清单V1版。不要追求完美,明确告诉团队“这是V1版,运行一个月后根据问题修订”。这是减少推行阻力的重要姿态。
第三周,建工具。搭一个最小数据库或资产管理表,包含你需要的语义字段。写几个简单脚本,做命名校验和重复扫描。如果你有开发资源,弄一个小网页让工程师自助查询和提交新Tag更好,没有的话,用PowQuery、Access、甚至飞书多维表格也能先撑起来。
第四周,定流程。明确从提需求、审核、测试、发布、归档这五段式变更流程,指定每个环节的角色。特别要做好“影响分析”这个动作,印成一张必填表单。
第五周,试运行。把增量变更切到新流程,存量数据保留在旧平台慢慢迁移。重点观察新命名规则接入DCS/SCADA时有没有兼容性问题,有没有出现名字太长或特殊字符导致某台上位机软件不识别的情况。
第六周,复盘迭代。把试运行期间所有的新Tag、变更单、校验错误清单拿出来,逐条看哪些是规则不行、哪些是执行不到位,更新V2版规范和流程。试点结束,形成标准操作手册。
5.4 数据质量检查可以做成定期的“健康度体检”
模型上线不等于万事大吉。我建议每个月做一次Tag健康度检查,重点看几类指标:无效Tag占比(没有关联设备的)、单位缺失占比、描述缺失占比、重复Tag对数、无变更记录的Tag占比、下游引用缺失的Tag占比。把这些指标做成一张趋势表,连续看三个月,你就能明确知道治理是在变好还是在恶化。
我举个指标的例子:试点第一个月,描述缺失率可能从40%降到20%,但第二个月如果没人管,又会掉头涨到35%。这种趋势洞察比一场声势浩大的“集中清理”更管用,因为你随时能发现问题苗头,堵住源头比事后清理便宜得多。
最后再说点实在的
我给这套方法起了个外号,叫“先窄后深,控制增量”。做工业Tag模型不是搞学术研究,它是要服务于生产、报警、分析和优化的。不要一上来就追求五百万个点的大而全,也不要一开始就硬上特别晦涩的自定义信息模型。在一个你能完全掌控的试点里,把命名、语义和变更这三件事跑通,你就已经跑赢了大多数同行。后面向全厂推广时,你手里有的是样板,有的是修过一遍的坑,有的是真实生成的治理成果,而不是一份做了三百页却没人看的方案文档。