3. ThingWorx核心建模对象

ThingWorx 的建模体系围绕六个核心对象展开:Thing、ThingTemplate、ThingShape、属性(Property)、服务(Service)与事件(Event)。理解它们之间的“继承—组合—实例化”关系,是后续搭建数字孪生模型的基础。本节先厘清概念边界,再给出可落地的创建顺序与示例。

一、六个对象分别是什么

Thing(事物)是平台中最基本的运行实体,代表一个具体的物理设备、逻辑对象或数据源,例如“车间1号注塑机”。Thing 是属性的持有者、服务的执行者、事件的触发者,也是被订阅和绑定的目标。

ThingTemplate(事物模板)是一类 Thing 的抽象定义,用于批量复用。例如“注塑机模板”可定义所有注塑机共有的属性、服务和事件。新建 Thing 时选择模板,即可自动继承模板中的全部定义。

ThingShape(事物形态)是可复用的功能片段,只包含属性、服务和事件的“定义”,不包含具体值。一个 Thing 或 ThingTemplate 可以同时实现多个 ThingShape,从而把“可联网”“可计量”“可报警”等能力像积木一样组合起来。

属性(Property)描述 Thing 的状态数据,如温度、压力、运行状态。属性有名称、数据类型(NUMBER、STRING、BOOLEAN、DATETIME 等)、默认值、是否持久化、是否记录日志等元数据。

服务(Service)是 Thing 上可被调用的逻辑单元,用 JavaScript 编写,可读取/写入属性、调用其他服务、访问外部系统。服务是“行为”的载体。

事件(Event)是 Thing 状态变化的通知机制。事件通常绑定到某个属性,当属性值变化并满足条件(如超过阈值)时触发,进而执行订阅者或服务。

二、对象之间的关系

可以用一句话概括:ThingShape 提供能力片段,ThingTemplate 组合能力并定义默认实现,Thing 是模板的实例并持有真实数据,属性/服务/事件则是挂载在这三者上的三类成员。

  • 一个 ThingShape 可被多个 ThingTemplate 实现;一个 ThingTemplate 可实现多个 ThingShape。
  • 一个 ThingTemplate 可被多个 Thing 实例化;一个 Thing 只能有一个主模板。
  • 属性、服务、事件可以定义在 Shape、Template 或 Thing 任一层级,遵循“下层可覆盖上层”的规则。
  • 事件必须依附于属性或服务,不能独立存在。
ThingWorx 核心建模对象关系图 ThingShape 可复用能力片段 ThingShape 可复用能力片段 ThingShape 可复用能力片段 ThingTemplate 组合多个 Shape,定义默认属性/服务/事件 Thing 实例:注塑机-01 Thing 实例:注塑机-02 Thing 实例:注塑机-03 每个 Thing 持有:属性(数据) · 服务(行为) · 事件(通知) Shape Template Thing

三、创建顺序与实操方法

推荐按“自下而上定义能力,自上而下实例化”的顺序创建,避免后期返工。

  1. 先建 ThingShape。在 Composer 的“建模 → 事物形态”中新建,例如创建 Shape_Connectivity,在其中定义属性 connectionStatus(STRING,默认 "offline")和服务 ping()。
  2. 再建 ThingTemplate。新建模板 Template_InjectionMoldingMachine,在“实现”页签中勾选上一步的 Shape,再补充模板级属性如 temperature(NUMBER,默认 0)、pressure(NUMBER,默认 0),以及服务 startMachine()。
  3. 最后建 Thing。新建 Thing InjectionMoldingMachine_01,在“事物模板”中选择上述模板。此时属性、服务、事件会自动继承,只需为实例属性填入真实初始值或绑定数据源。
  4. 配置事件。在 Thing 的“订阅”或模板的“事件”页签中,为 temperature 添加事件 HighTempAlert,条件设为 temperature > 180,并绑定一个服务或订阅者作为响应动作。
命名建议:Shape 用 Shape_ 前缀,Template 用 Template_ 前缀,Thing 用业务对象名加编号,便于在大型项目中快速检索与批量管理。

四、一个可参考的配置示例

以注塑机温度监控为例,创建完成后的关键配置如下表所示。表中数值为教学示例,实际项目中应按设备手册和现场标定填写。

对象类型 名称 关键定义 说明
ThingShape Shape_Connectivity 属性 connectionStatus;服务 ping() 所有联网设备共用
ThingTemplate Template_InjectionMoldingMachine 实现 Shape_Connectivity;属性 temperature、pressure;服务 startMachine() 注塑机类设备的统一模板
Thing InjectionMoldingMachine_01 继承模板全部成员;temperature 初始值 25 车间 1 号机实例
事件 HighTempAlert 绑定 temperature,条件 > 180 超温时触发报警服务

五、常见误区与判断依据

初学者容易把 ThingShape 和 ThingTemplate 混用。判断标准很简单:如果一段定义需要被多种不同类型的设备复用,就放进 ThingShape;如果它只服务于某一类设备,就放在 ThingTemplate。另一个常见问题是把实例特有的初始值写进模板,导致所有实例共享同一数值。正确做法是模板只定义结构和默认值,实例属性在 Thing 层单独赋值或通过数据源动态绑定。

创建完成后,可通过 Composer 的“属性”页签查看当前值,通过“服务”页签手动执行 ping() 验证连通性,通过“事件”页签查看触发记录。若属性值未按预期更新,优先检查数据源绑定是否正确、事件条件是否满足、以及服务中读写属性的名称是否与定义完全一致(ThingWorx 属性名区分大小写)。

注意:在 Thing 层覆盖模板属性时,若勾选“持久化”,该值会写入数据库并在重启后保留;若不勾选,重启后回落到模板默认值。生产环境中对需要保留最后状态的属性应开启持久化。

掌握这六个对象的关系与创建方法后,后续的建模工作就有了稳定的骨架:Shape 负责能力复用,Template 负责类别标准化,Thing 负责实例化运行,属性、服务与事件则分别承担数据、行为与通知三类职责。按照这一结构组织模型,可以显著降低重复配置量,并让数字孪生模型更易于维护和扩展。