2. 从物理设备到数字资产

在上一节中我们已经明确:ThingWorx 中的“资产”并不是设备本身,而是设备在平台中的数字化表示。要建立这种表示,第一步不是打开建模工具,而是沿着一条真实的数据链路,把物理世界里“发生了什么”逐层翻译成平台可以承载的属性、事件、服务和关系。本节以一台典型的工业设备——例如一台带变频驱动的离心泵机组——为例,完整走一遍从传感器到云平台的数据链路,并从中识别出需要建模的资产要素。

一、先看清物理侧:这台泵机组上有什么

假设这是一台用于循环水系统的离心泵,配套一台 7.5 kW 三相异步电机,由一台小型 PLC 控制,现场配有若干传感器。物理侧的典型配置如下(参数为教学示例,非实测值):

  • 振动传感器:安装在泵轴承座,输出 4–20 mA 信号,量程 0–20 mm/s,对应振动烈度。
  • 温度传感器:PT100 贴装于电机绕组,测量范围 0–150 ℃。
  • 压力变送器:泵出口,4–20 mA,量程 0–1.6 MPa。
  • 流量计:电磁式,输出脉冲或 Modbus 寄存器,量程 0–200 m³/h。
  • PLC:采集上述模拟量与数字量,执行启停联锁,并通过 Modbus TCP 对外提供寄存器。
  • 网关:现场边缘网关,通过 Modbus TCP 轮询 PLC,再以 MQTT 上报到云平台。

这里有一个关键认识:传感器和 PLC 只产生“信号”,不产生“资产”。振动 4–20 mA 只是一个电流值,PLC 寄存器里的 32767 也只是一个整数。只有当平台知道“这个寄存器代表泵轴承振动、单位是 mm/s、量程是 0–20”时,它才成为有意义的属性。这正是资产建模要解决的问题。

二、数据链路:从 4–20 mA 到平台属性

这条链路可以拆成五段,每一段都发生一次“语义转换”:

  1. 物理量 → 电信号:轴承振动 8.5 mm/s 被传感器转换为约 13.6 mA(按 4–20 mA 线性对应 0–20 mm/s 计算:4 + 16 × 8.5/20 = 10.8 mA,此处仅示意换算关系)。
  2. 电信号 → PLC 原始值:PLC 模拟量模块 12 位分辨率,0–20 mA 对应 0–27648,则 10.8 mA 对应约 14930。
  3. PLC 原始值 → 网关数值:网关读取寄存器,按配置的缩放公式还原为工程量:value = raw / 27648 × 20,得到 10.8 mm/s 附近的振动值。
  4. 网关 → 云平台:网关以 MQTT 主题 pump/line1/vibration 发布 JSON 报文,包含时间戳与数值。
  5. 平台报文 → 资产属性:ThingWorx 通过工业连接或 MQTT 订阅接收报文,将其映射到“泵机组”Thing 的 vibration 属性上。

注意第 3 步的缩放公式:如果网关配置错误,把 0–27648 直接当作 0–20 使用,平台收到的振动值就会偏差一个数量级。这类“链路正确、语义错误”的问题,在建模阶段必须通过属性定义中的单位、量程、缩放来显式约束,而不是靠事后猜。

传感器 振动 4–20 mA 温度 PT100 压力/流量 PLC 模拟量采集 启停联锁 Modbus TCP 边缘网关 轮询/缩放 MQTT 发布 断网缓存 ThingWorx MQTT 订阅 属性映射 事件/服务 电信号 原始值 JSON 泵机组 Thing(数字资产) 属性 Properties vibration (mm/s) windingTemp (℃) outletPressure (MPa) 事件 Events HighVibration OverTemperature DryRun 服务 Services Start / Stop ResetAlarm GetHealthReport 映射 关系 Relations 泵机组 → 电机 泵机组 → 变频器 泵机组 → 产线 泵机组 → 网关 (含/被含/连接)

三、从链路中识别四类建模要素

沿着上面这条链路,我们可以把需要建模的内容归为四类,它们恰好对应 ThingWorx 中 Thing 的四个核心组成:

建模要素在本例中的具体内容判断依据
属性 Property振动、绕组温度、出口压力、流量、运行状态、累计运行小时随时间变化、需要被监测或参与计算的状态量
事件 Event振动超限、温度超限、干转、启停动作需要被记录、告警或触发后续动作的瞬时发生
服务 Service启动、停止、复位报警、生成健康报告需要由平台或用户主动发起的动作
关系 Relation泵机组—电机、泵机组—变频器、泵机组—产线、泵机组—网关资产之间需要被追溯、聚合或联动的连接

这里要特别强调“判断依据”一列。很多初学者会把所有采集到的量都建成属性,把所有报警都建成事件,结果模型臃肿且难以维护。更稳妥的做法是:属性回答“现在是什么状态”,事件回答“刚刚发生了什么”,服务回答“能对它做什么”,关系回答“它和谁在一起”。四者职责不重叠,模型才清晰。

四、一个容易忽略的环节:网关本身也是资产

在上面的链路中,网关往往被当作“透明管道”。但在实际运维中,网关的在线状态、缓存积压量、最后上报时间,直接决定了平台数据是否可信。如果网关离线 10 分钟,平台上的振动属性会停留在旧值,此时若基于该值触发告警,就会产生误判。因此,网关应当被建模为一个独立资产,至少包含 online、lastReportTime、bufferCount 三个属性,并通过关系与泵机组关联。这样,平台在判断泵机组健康度时,可以先检查数据新鲜度,再决定是否采信属性值。

建模时建议先画一遍数据链路图,再在图上标注“哪个环节产生语义”。凡是发生语义转换的位置(如 mA→工程量、寄存器→JSON、报文→属性),都是最需要显式定义单位、量程和缩放的地方,也是后续排障时最先怀疑的位置。

五、从链路到模型:一次完整的映射练习

把上面的分析落成一张建模清单,可以按下面的顺序推进:

  1. 列出物理设备上的所有测点与执行机构,标注信号类型与量程。
  2. 确认每个测点在 PLC 中的寄存器地址与缩放公式。
  3. 确认网关的 MQTT 主题命名与报文结构。
  4. 在平台侧为每个测点定义属性:名称、数据类型、单位、量程、默认值、是否记录历史。
  5. 为需要告警或触发的状态定义事件,并写明触发条件与阈值来源。
  6. 为需要远程下发的动作定义服务,并明确输入参数与返回结果。
  7. 梳理资产之间的包含、连接、引用关系,确定父子层级与关联方向。

以振动为例,最终在平台上的属性定义可以写成:名称 vibration,类型 NUMBER,单位 mm/s,量程 0–20,历史存储开启,数据来源为 MQTT 主题 pump/line1/vibration。对应的事件 HighVibration 触发条件为 vibration > 11.2(ISO 10816 中该功率段泵的报警阈值示例),持续 5 秒。对应的服务 Stop 则向 PLC 写入停机指令。三者通过同一个 Thing 聚合,形成完整的数字资产。