3. 工业数据建模与Thing实体

在ThingWorx中,工业数据建模的核心不是“建一张表”,而是把物理设备抽象成可被平台识别、查询和调用的Thing实体。一个Thing实体既承载数据(属性),也承载行为(服务),还通过Thing Template和Thing Shape获得可复用的结构与能力。理解这三者之间的关系,是后续Mashup绑定、服务调用和工业设备接入的基础。

一、Thing Template、Thing Shape与Thing实例的分工

Thing Template是“设备类型的总纲”。例如,一个“注塑机模板”可以定义所有注塑机共有的属性:设备编号、运行状态、锁模力、注射压力、熔胶温度、当前产量;同时定义共有服务:启动、停止、复位报警、读取实时参数。模板一旦发布,就可以被多个Thing实例继承。

Thing Shape是“能力的积木块”。它比模板更细粒度,通常描述某一类可复用能力,例如“具备温度采集能力”“具备报警上报能力”“具备OEE计算能力”。一个Thing可以同时实现多个Thing Shape,从而组合出复杂能力。模板与形状的关系可以理解为:模板偏向设备类型,形状偏向功能切面。

Thing实例是“具体设备”。例如“注塑机-01”“注塑机-02”都是注塑机模板的实例。实例继承模板和形状定义的属性、服务、事件与订阅,但每个实例拥有独立的属性值。工业现场中,通常一台物理设备对应一个Thing实例,实例名称建议与设备台账编码一致,如IMM-01、CNC-07,避免后续Mashup绑定时出现歧义。

Thing实体建模关系与工业设备映射 Thing Template 注塑机模板 属性:设备编号、运行状态 属性:锁模力、注射压力 属性:熔胶温度、当前产量 服务:启动、停止、复位报警 服务:读取实时参数 事件:报警触发、状态变更 Thing Shape 可复用能力积木 温度采集能力 报警上报能力 OEE计算能力 能耗统计能力 远程启停能力 可被多个模板/实例复用 Thing 实例 IMM-01 注塑机-01 设备编号:IMM-01 运行状态:运行中 锁模力:1200 kN 熔胶温度:215 ℃ 当前产量:3840 模 继承模板+形状能力 物理设备:注塑机-01 PLC / OPC UA Server / 网关 寄存器地址、采集周期、数据类型 映射 映射关键字段 Thing属性 ← 设备寄存器 Thing服务 → 设备指令 Thing事件 ← 报警信号 建模原则: 模板定义共性 → 形状组合能力 → 实例承载具体设备数据 → 通过映射绑定PLC/网关地址,实现工业设备与Thing实体的双向对应。

二、属性建模:从设备参数到Thing属性

属性是Thing实体中最常被Mashup绑定的数据。工业设备映射时,属性建模要解决三个问题:属性名怎么定、数据类型怎么选、采集频率怎么设。

属性名建议采用“设备类型_参数名”的命名方式,例如IMM_ClampForce、IMM_InjectionPressure、IMM_MeltTemp。这样在Mashup中绑定时,即使同时接入多台设备,也能通过前缀快速识别。数据类型要与PLC寄存器类型对应:整数型寄存器用INTEGER,浮点型用NUMBER,开关量用BOOLEAN,字符串型用STRING。如果类型不匹配,ThingWorx在读取时可能返回空值或异常值。

采集频率需要根据工艺节拍设定。例如锁模力、注射压力属于高速变化量,建议采集周期200ms~500ms;熔胶温度变化较慢,1s~2s即可;设备编号、额定功率等静态参数只需在初始化时写入一次。采集频率过高会加重网关和平台负担,过低则可能丢失关键工艺波动。

三、服务建模:把设备动作封装成可调用服务

服务是Thing实体对外暴露的行为接口。工业设备映射中,服务通常分为三类:读取类服务(如GetRealTimeParams)、写入类服务(如SetTargetTemp)、动作类服务(如StartMachine、StopMachine、ResetAlarm)。

以StartMachine为例,服务内部通常包含:参数校验(确认设备处于允许启动状态)、写入PLC启动位、等待设备反馈运行信号、更新Thing属性RunStatus、记录操作日志。如果只写一个“置位”动作而不做状态确认,Mashup上点击启动后可能显示已启动,但设备实际未运行,造成误判。

服务参数建议使用基本类型,避免复杂嵌套。例如SetTargetTemp接收targetTemp(NUMBER)和unit(STRING,如“℃”),服务内部再转换为PLC可识别的整数值。这样Mashup端只需要绑定一个输入框和一个下拉框,降低配置复杂度。

四、工业设备映射方法:从物理点到Thing属性

工业设备映射的本质是建立“物理地址 ↔ Thing属性/服务”的对应关系。常见映射方式有三种:

  • 直接地址映射:Thing属性直接绑定PLC寄存器地址,如DB1.DBD0对应IMM_ClampForce。适合OPC UA、Modbus TCP等支持直接寻址的协议。
  • 网关标签映射:设备数据先进入边缘网关,网关把寄存器转换为带名称的标签,Thing属性再绑定标签名。适合多协议混合现场。
  • 服务中间映射:Thing属性不直接绑定地址,而是通过Thing服务定时读取网关或数据库,再写入属性。适合需要做数据清洗、单位换算或聚合计算的场景。

映射完成后,必须做一次“点对点验证”:在ThingWorx中手动读取属性值,与设备HMI或PLC监控软件上的数值比对。例如IMM_MeltTemp在ThingWorx显示215,HMI显示214.8,说明映射正确且精度可接受;如果显示0或-1,则要检查寄存器地址、数据类型和字节顺序。

映射检查要点:地址是否正确、数据类型是否匹配、字节序是否一致、采集周期是否合理、写入服务是否有状态回读。四项都通过后,才建议在Mashup中正式绑定。

五、一个可参考的建模示例

假设现场有一台注塑机,PLC为西门子S7-1200,通过OPC UA接入。可以按以下结构建模:

Thing属性 数据类型 OPC UA节点 采集周期
IMM_RunStatusBOOLEANns=3;s="Machine"."Run"500ms
IMM_ClampForceNUMBERns=3;s="Machine"."ClampForce"200ms
IMM_MeltTempNUMBERns=3;s="Machine"."MeltTemp"1s
IMM_OutputCountINTEGERns=3;s="Machine"."OutputCount"1s

服务方面,定义StartMachine写入ns=3;s="Machine"."StartCmd",定义StopMachine写入ns=3;s="Machine"."StopCmd",定义ResetAlarm写入ns=3;s="Machine"."ResetCmd"。每个服务执行后,再读取IMM_RunStatus确认结果。这样,Mashup上的按钮、指示灯和趋势图就有了稳定的数据来源。

需要强调的是,Thing Template和Thing Shape不是必须同时使用。小型项目可以只用Thing实例直接建模;设备类型多、复用需求强时,再用模板和形状做抽象。关键是让属性名、服务名和映射关系保持清晰一致,避免后续Mashup绑定时反复猜测和修改。