4. 设备信息模型标准与配套规范
OPC UA 只规定了信息模型的“语法”和“通信骨架”,真正让不同厂商设备能够被统一理解的是各类 companion specification(配套规范)。它们由不同行业组织维护,在 OPC UA 基础信息模型之上定义标准化的类型、对象、变量和方法。工程中最常遇到的是 DI、ADI、PLCopen、Machine Tools 和 Robotics 五类。理解它们各自解决什么问题、边界在哪里,才能做出正确的选用与裁剪。
五类配套规范的定位差异
DI(Device Integration,设备集成)是设备层的基础规范,定义了 DeviceType、TopologyElementType、ComponentType 等通用构件,以及 DeviceHealth、SerialNumber、Manufacturer、Model 等标识变量。它不描述具体工艺,只回答“这是什么设备、由哪些部件组成、健康状态如何”。几乎所有设备模型都应从 DI 派生。
ADI(Analyser Device Integration,分析仪器设备集成)面向在线分析仪、光谱仪、色谱仪等场景,在 DI 之上补充了分析通道、测量值、校准、维护等语义。它适合实验室或过程分析设备,普通电机、阀门并不需要。
PLCopen 规范把 IEC 61131-3 的程序组织单元(POU)映射为 OPC UA 类型,使 PLC 中的功能块、变量、任务状态可以被上位系统按标准方式浏览和调用。它解决的是“控制器内部逻辑如何暴露”,而不是设备物理结构。
Machine Tools 面向机床,定义了轴、主轴、刀具、通道、加工状态等对象,并规定了 MotionDeviceSystemType 等类型。它适合数控机床、加工中心,能表达进给轴位置、主轴转速、刀具寿命等关键量。
Robotics 面向工业机器人,定义了机器人系统、轴组、工具坐标系、运动状态、安全状态等。它适合六轴机器人、协作机器人,能表达关节角、笛卡尔位姿、程序运行状态。
选用原则:从设备角色出发,而非从规范名称出发
选用的第一步不是看规范列表,而是明确设备在车间中的角色。一台数控机床,其控制器内部逻辑可以用 PLCopen 暴露,机床本体结构用 Machine Tools 描述,而机床上的温度传感器、振动传感器则用 DI 建模。三者并不互斥,而是分层共存。判断依据可以归纳为三条:
- 物理设备类型决定是否使用 Machine Tools 或 Robotics。机床用前者,机器人用后者,普通传感器和执行器用 DI 即可。
- 是否需要暴露控制逻辑决定是否叠加 PLCopen。如果上位系统只需读取设备状态,不需要调用 PLC 功能块,则 PLCopen 可以省略。
- 是否属于分析测量设备决定是否使用 ADI。只有在线分析仪、光谱仪等才需要,普通温度、压力变送器不需要。
裁剪策略:保留必需语义,删除冗余节点
配套规范通常定义了完整的类型体系,但实际设备往往只用到其中一部分。裁剪的目标是让地址空间既符合标准,又不臃肿。裁剪时按三个层次处理:
第一层,保留强制项。DI 中的 Manufacturer、Model、SerialNumber、DeviceHealth 属于设备身份和健康的核心信息,必须保留。Machine Tools 中的轴位置、主轴转速、通道状态属于加工关键量,也应保留。
第二层,按需保留可选项。例如 Machine Tools 中的刀具寿命统计、Robotics 中的碰撞检测历史,如果上位系统不做相关分析,可以删除对应节点,但要在设备说明中记录裁剪依据。
第三层,删除未实例化的类型和方法。规范中定义但设备不具备的通道、方法、事件,不应出现在地址空间中。例如一台三轴机床不需要保留第四轴、第五轴的占位节点。
实操示例:一台数控机床的信息模型裁剪
假设一台三轴立式加工中心需要接入车间 OPC UA 服务器,上位系统需要读取设备身份、健康状态、三轴位置、主轴转速和当前加工程序号。选用与裁剪过程如下:
- 以 DI 的
DeviceType为根,实例化Manufacturer、Model、SerialNumber、DeviceHealth。 - 叠加 Machine Tools 的
MotionDeviceSystemType,实例化 X、Y、Z 三个轴对象,每个轴保留ActualPosition和AxisState。 - 实例化主轴对象,保留
ActualSpeed和SpindleState。 - 实例化通道对象,保留
CurrentProgram和ChannelState。 - 删除刀具寿命、冷却液状态、第四轴占位等未使用节点。
- 不引入 PLCopen 和 ADI,因为上位系统不调用 PLC 功能块,也不涉及分析测量。
裁剪后的地址空间结构可以用如下节点路径表示(示例):
Objects/
Machine_01 (DeviceType)
Manufacturer = "示例机床厂"
Model = "VMC-850"
SerialNumber = "SN-2024-00123"
DeviceHealth = Good
MotionDeviceSystem (MotionDeviceSystemType)
Axes/
X_Axis (AxisType)
ActualPosition = 125.340
AxisState = Running
Y_Axis (AxisType)
ActualPosition = -48.210
AxisState = Running
Z_Axis (AxisType)
ActualPosition = -210.500
AxisState = Running
Spindle (SpindleType)
ActualSpeed = 8000.0
SpindleState = Running
Channel (ChannelType)
CurrentProgram = "O1024"
ChannelState = Active
上述数值为教学示例,实际工程中应根据设备真实数据填写。裁剪后的模型只保留了上位系统真正需要的节点,地址空间清晰,浏览和订阅效率更高。
常见误区与判断依据
实际工程中容易出现两类偏差。一类是“全量照搬”,把配套规范中所有类型都实例化,导致地址空间庞大、维护困难。另一类是“过度裁剪”,删掉了上位系统后续可能需要的节点,导致二次开发时不得不重新建模。判断依据是:如果某个节点在未来 6 到 12 个月内没有明确的使用场景,可以先不实例化,但要在设计文档中标注为“预留”。
另一个常见问题是规范版本混用。DI、Machine Tools、Robotics 都有多个版本,不同版本的类型定义可能不兼容。选用时应确认设备端和上位端使用同一版本,或在网关侧做版本映射。对于新项目,建议统一采用较新的稳定版本,避免后期升级困难。
总结来说,DI 是设备建模的通用底座,ADI、PLCopen、Machine Tools、Robotics 分别面向分析仪器、控制器逻辑、机床和机器人四类特定对象。选用时从设备角色出发,裁剪时按强制项、可选项、未实例化项三层处理,并保留裁剪记录。这样得到的地址空间既符合标准,又贴合实际工程需要。