ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

IEC 81346-2编码规则与类对象代码实战:从设备分类到Python校验

2026/9/17 22:32:58 拓冰建站 浏览量
IEC 81346-2编码规则与类对象代码实战:从设备分类到Python校验 简介IEC 81346-2-2019第2部分《类对象和代码的分类》是国际电工委员会IEC 81346标准系列中面向分类与编码的关键分册主旨是规范类对象的分类方式与代码标识规则为设备、机器、过程和系统等各类对象建立统一的识别框架。适用于自动化设计、系统集成、项目规划、设备管理及运维标准化人员可解决工程对象命名不一、类别混乱、数据交换困难等问题。文件以PDF格式提供压缩包内共1个文件整体大小26.44MB便于离线存档和打印翻阅目前已有317人学习下载。标准阐明了设备类、机器类、过程类和系统类等主要对象类别的划分规则并给出代码结构与格式要求例如通过字母数字组合描述对象特征与功能同时为设计评审、资产编码和台账管理提供国际公认的依据有助于降低系统复杂度、提升跨阶段数据一致性和长期维护效率特别适合在新建或改造项目中参照实施。1. IEC 81346-2编码规则让全厂类对象不再各叫各的拿一张典型的工厂PID图、电气原理图和DCS点表放在一起看同一台泵往往有三个名字CV-101、P-101、FV101。设备没变标识却分了家。设计院按自己习惯编调试队按DCS标签改运维台账又是一套旧编号。等到做变更管理或故障统计时光对编码就要耗掉半天。IEC 81346-2-2019第2部分类对象和代码的分类就是为了终结这种乱象而存在的。它是IEC 81346系列标准的第二部分核心工作是规定工业自动化系统里类对象如何分类、代码如何编写。类对象可以是设备、机器、过程或系统代码则是它们的标准化标识。对工厂设计工程师、DCS/PLC点表规划人员、EAM资产管理员以及写工具辅助编码校验的开发人员来说这份标准把设备叫什么从个人习惯变成了可校验的工程规则。下面从标准骨架拆到Python校验脚本按可直接复现的方式讲。2. 先拆参考命名骨架再看Part 2在IEC 81346里的位置2.1 参考命名的三个前缀符号-、、IEC 81346系列标准建立在一套叫做参考命名的语法骨架上。核心思想非常朴素任何工程对象都可以用前缀符号 类代码 编号的形式被唯一指认。前缀符号回答的是这个对象以什么身份出现前缀-表示产品组件回答它是什么硬件前缀表示功能任务回答它承担什么职能前缀表示位置安装地点回答它装在哪里举一个常见做法某泵站里的变频器产品层面写成-G01功能层面写成V01位置层面写成PUMP_HOUSE_02。三者并不冲突它们只是从不同维度描述同一个物理对象。这一套语法骨架由IEC 81346-1定义但真正让它能落地的是Part 2——因为Part 2给出了类代码的分类规则和代码结构。2.2 Part 2 的产出物给类对象发标准化身份证IEC 81346-2-2019要管理的核心概念是类对象。项目正文把它定义为工业自动化系统中的基本结构单元可以是设备、机器、过程或系统。理解这个时可以借用编程语言里的类与对象类是抽象模板对象是具体实例而类对象则是带类别的实体实例这一组合概念。标准里的类对象从抽象到具体覆盖多个层级。工程落地时通常会整理成一张层级表抽象层级典型实例工程常见代码写法系统类对象冷却水系统SYS-CW-01过程类对象冷却循环回路CIRC-001机器类对象循环水泵机组MACH-PUMP-001设备类对象泵本体、阀门、传感器PUMP-001、VALVE-002需要说明的是右侧代码列是工程中常见约定不是标准原文的强制取值。IEC 81346-2提供的是分类原则、代码格式和扩展规则具体的字母段由工程项目在标准允许的范围内自定义。这张表真正有价值的地方在于左侧的层级划分——它决定了后续所有编码的归属关系。2.3 设备、机器、过程、系统的边界怎么划正文明确指出类对象分为设备类、机器类、过程类和系统类四大类。工程上最纠结的问题是边界一台电机带联轴器带泵头算设备还是算机器标准给出的判断口径是看是否具备完整任务能力。电机单独看是设备类对象它只能完成旋转这个动作当电机、泵体、机座组装成能执行输送介质这一任务的单元时就是机器类对象。过程类对象描述的是工艺步骤本身比如冷却、过滤、压缩它不对应某一台具体硬件。系统类对象粒度最大把一组过程、机器和关联设备打包成可独立运行的整体。实际操作时我一般要求设计方先画一张系统-过程-机器-设备的四层树再把现场实物对号入座。边界判断不了就开专题会定一个结论写进项目编码规定里。编码工程最怕的不是规则复杂而是每个人对边界都有自己的理解。3. 类代码怎么写从四大类划分到PUMP-001的推导过程3.1 字符集与格式大写字母、连字符、流水号IEC 81346-2规定类代码是字母数字结合的字符串。标准没有强求固定长度但工程上推荐的通用结构是类别段 - 子类段 - 流水号。拿正文里的PUMP-001拆开看PUMP是类别段-是分隔符001是流水号。用正则表达这个格式就是^[A-Z]-[A-Z0-9]*-\d{3,}$。为什么要规定字符集因为类代码要穿过CAD图层、DCS标签、SCADA数据库、EAM台账等大量系统。有的系统区分大小写有的不区分有的只认大写有的把空格当非法字符。统一使用大写字母、数字和连字符是兼容性代价最小的选择。标准本质上把这类工程经验固化成了规则。后缀流水号位数也建议全厂统一三位的001能满足大多数场景位数混用会扰乱排序和检索。另外标准的代码体系允许在基础类代码后追加子类扩展字段。比如PUMP-001可以扩展成PUMP-CENT-001表达离心泵这一子类。子类字段放在类别段和流水号之间用第二个连字符隔离。子类取值的字典必须写入项目编码手册不允许现场临时发明。这样做的意义是当场内新增一种没有见过的泵型时不需要推翻整个编码体系只需在手册里登记一个新子类取值。3.2 四大类对象的代码段设计原则设备类对象的核心表达是物理实现。泵、阀门、传感器、执行器都属于这一类。代码段通常直接用设备英文名或行业通用缩写如PUMP、VALVE、SENSOR。粒度上不区分同型号不同尺寸的设备那是规格参数表的事不应进入类代码。设备编码只需保证在所属机器节点下唯一。机器类对象的核心表达是组合后具备的任务能力。机床、机器人、压缩机组都属于这里。代码段体现产品形态或功能如MACHINE、ROBOT。注意机器类对象与设备类对象不是互斥的两套物理实体而是观察视角不同同一台机器人备件管理视角看是设备产线装配视角看是机器。过程类对象的核心表达是工艺任务。冷却、过滤、干燥、压缩这类动词化功能描述都属于它代码常用COOLING、FILTER这类过程英文名。过程类对象不对应单个硬件它标识的是这段工艺过程发生在哪条回路、由哪些机器协同完成。系统类对象则是最大粒度聚合并管理多个过程、机器和设备代码写法常见SYS-CW、SYS-HVAC这类带子系统缩写的形式。3.3 前缀符号与层级编码的搭配策略层级设计是编码失控的重灾区。工程常见做法是系统层用前缀体现功能身份回路层用前缀体现位置身份机器和设备层用-前缀体现产品身份。一套冷却水系统的编码树示意如下SYS-CW 冷却水系统功能身份 CIRC-01 冷却循环回路1位置身份 -MACH-001 循环水泵机组产品身份 -PUMP-001 泵本体 -VALVE-002 出口阀门这个缩进关系就是资产层级。每个下层代码只要求在父节点下唯一不需要全厂唯一——PUMP-001出现在冷却水系统和消防水系统里并不冲突因为它们的父级节点不同。这大大降低了编码维护成本也让新增设备时不需要全局重排流水号。四大类对象在这一结构里各司其职设备提供物理部件机器打包任务能力过程描述工艺步骤系统统领全局。3.4 类代码向DCS点表和SCADA标签的映射类代码定下来之后还要面对一个实际问题DCS/SCADA的标签命名往往有字符长度限制而且各控制系统有自己的保留字符。我一般会把类代码和控制系统标签分开管理类代码进入EAM和图纸控制系统标签保留原有规则但必须在数据库字段里记录对应类代码。例如某DCS点表里写TIC-1001它的类字段里必须指向SENSOR-TEMP-001。千万不要试图让DCS标签直接等于类代码。DCS标签要兼顾控制器通道排列和报警分组而类代码要表达对象类别两者职责不同。强制统一的结果通常是两边都别扭最后又被现场绕过。4. 存量资产迁移从旧编号映射表到Python批量校验4.1 先做映射表不要急着改图纸拿到IEC 81346-2-2019的PDF后第一个动作不应是改图纸而是建立一张旧编码 → 大类 → 新类代码的映射表。存量项目的设备编号五花八门TE-1001、TT-1001、TIC-1001可能指同一支温度变送器。映射表推荐采用以下结构旧编码设备名称大类归属父级机器新类代码备注映射表经过设计方和运维方联合评审之后再批量落地是成本最低的迁移路径。跳过映射直接改系统数据通常会在EAM里产生一批查不到历史工单的孤儿资产。提示映射表评审时建议抽样拉取历史工单数据验证旧编码与新编码能相互命中。常见问题是同一台设备在工单系统里被登记过多个旧编码只映射一个会丢失维修记录。4.2 Python校验脚本字符集、前缀与唯一性映射表一般是Excel或CSV。标准本身不提供软件实现校验逻辑需要工程团队自建。下面是一个最小可用的Python校验脚本覆盖四条核心规则字符集格式、前缀合法性、同父级唯一性、流水号位数统一。import csv import re from collections import defaultdict def validate_codes(csv_path): # 规则1: 类代码只允许大写字母、数字、连字符以至少三位数字结尾 code_re re.compile(r^[A-Z0-9](?:-[A-Z0-9])*-\d{3,}$) parent_map defaultdict(list) errors [] with open(csv_path, newline, encodingutf-8-sig) as f: rows list(csv.DictReader(f)) for i, row in enumerate(rows, start2): parent row[父级机器].strip() code row[新类代码].strip() # 父级机器必填防止半迁移 if not parent: errors.append(f第{i}行 父级机器为空禁止迁移) continue if not code_re.match(code): errors.append(f第{i}行 字符集或格式错误: {code}) continue # 规则2: 前缀符号必须是 - 或 if not code.startswith(-) and not code.startswith(): errors.append(f第{i}行 前缀符号缺失: {code}) # 规则3: 同一父节点下编码唯一 if code in parent_map[parent]: errors.append(f第{i}行 重复编码: {code} (父级 {parent})) parent_map[parent].append(code) if errors: print(f发现 {len(errors)} 个问题:) for e in errors[:50]: print( , e) else: print(f全部校验通过共 {len(rows)} 条) return errors if __name__ __main__: validate_codes(mapping.csv)脚本的运行方式是python validate_codes.py mapping.csvCSV列名必须与代码中的父级机器新类代码完全一致。正则^[A-Z0-9](?:-[A-Z0-9])*-\d{3,}$的含义是以大写字母或数字开头中间允许零到多段连字符字母数字的子类扩展最后以至少三位数字结尾。PUMP-001、PUMP-CENT-001都能通过而pump-1、PUMP_001会被拦截。参数说明第5行的\d{3,}是流水号位数下限项目规定四位流水号就改成\d{4,}第10行的encodingutf-8-sig是为了兼容Excel导出的带BOM文件错误列表截断显示前50条避免一个文件上千条错误时刷屏。脚本输出后优先处理格式类错误再处理重复编码最后补全父级机器空值。4.3 三个高频踩坑点大小写、分隔符和半迁移第一个坑是大小写。Excel的自动首字母大写会把pump-001悄悄改成Pump-001正则只认大写这类错误最容易批量出现。处理办法是导入脚本前先对整列做一次UPPER()清洗或者在脚本里对code先.upper()再匹配。第二个坑是分隔符。标准示例和项目正文都使用连字符-但旧系统点表里习惯用下划线_或点号。迁移时必须在映射阶段统一替换不要拖到写入数据库才处理。脚本里的code_re把非连字符的分隔符一律判为格式错误这正是想要的效果。第三个坑是半迁移设备代码改成新规则了但机器节点和系统节点仍是旧编号。这种状态比完全不迁移更糟——新代码查不到旧工单旧代码找不到新位置。脚本里已经做了父级机器空值检查但这还不够父级机器本身也必须是新类代码格式。实际操作中我会再加一句如果父级机器不匹配^-?[A-Z]前缀同样报错。流程层面的约束也很重要迁移必须从系统层往下逐层执行不允许只切某一层。5. 把编码规则变成流程约束CI校验闸门与数据模型字段5.1 校验脚本挂进CI个人电脑上跑一次校验只能管住当下这一批数据。三个月后重新开始手动维护时编码又会慢慢变形。常见的做法是把第四章的脚本挂到GitLab CI或Jenkins上让每次台账变更都自动跑一遍校验不通过就不允许合并。在CI里调用只需要一行命令python validate_codes.py mapping.csv。把它设成代码仓库的检查项配合一个简单的pre-commit钩子新人提交映射表时就能立刻收到格式错误反馈。这个闸门不复杂但它把编码必须合规从自觉行为变成了硬约束省掉的是后期成百上千条的返工量。5.2 校验通过后直接生成变更单我通常在脚本里加一个--apply选项校验通过后生成一份Excel变更单或者SQL更新语句供EAM管理员审核后导入。校验和变更共用同一份mapping.csv数据只在一个地方维护不会出现脚本里一套、手动改一套的分叉状态。5.3 在数据库字段里固化标准如果项目刚起步别急着做全套工具链。先在建表SQL里加上ref_prefix VARCHAR(8)和class_code VARCHAR(32)两个字段把IEC 81346-1的前缀语法和Part 2的类代码作为字段级注释写进数据模型。这样从第一天起标准就内嵌在数据结构里后续做设备故障统计、备件采购过滤时直接按前缀分组就能得到想要的对象集合远比事后大规模清洗省一个量级的精力。本文还有配套的精品资源点击获取