1. ThingWorx工业Mashup开发全景

ThingWorx 是 PTC 面向工业物联网场景的低代码应用平台,它的核心价值在于把设备连接、数据建模、业务逻辑和可视化界面整合到同一个运行时中。对于工业应用开发者而言,理解 Mashup 不能只把它当作"拖拽页面"的工具,而应把它放在整个平台架构中,看清它在数据链路中的位置、它能消费哪些资源、又受哪些边界约束。本章从平台架构、Mashup 的定位、开发流程和工程化视角四个层面建立整体认知,为后续的组件、绑定、服务与部署内容打基础。

一、平台架构:Mashup 处在哪一层

ThingWorx 平台可以按职责划分为四层。最底层是连接层,通过 ThingWorx Edge、工业协议驱动(如 OPC UA、Modbus、MQTT)以及 Kepware 等网关,把 PLC、CNC、传感器、网关设备接入平台。往上是建模层,用 Thing、ThingTemplate、ThingShape 描述设备与资产,用 DataShape 定义数据结构,用 Stream 和 ValueStream 存储时序数据。再往上是服务与逻辑层,包括 Service、Subscription、Event、Timer 以及 Mashup 内部的数据绑定逻辑。最上层是呈现与交互层,也就是 Mashup、Master、Menu、Style Theme 等可视化资源,直接面向操作员、工程师和管理者。

Mashup 位于呈现层,但它并不是孤立的页面。它通过绑定(Binding)从建模层和服务层取数,通过服务调用触发逻辑层动作,再把结果回写到设备或数据库。因此一个 Mashup 的质量,取决于它对下层资源的组织是否清晰,而不是组件堆得多不多。

ThingWorx 平台分层与 Mashup 数据链路 呈现与交互层 Mashup 页面 Master / Menu Style Theme Widget 组件库 服务与逻辑层 Service 服务 Subscription 订阅 Event / Timer Binding 数据绑定 建模层 Thing / Template ThingShape DataShape Stream / ValueStream 连接层 Edge / 网关 OPC UA / Modbus MQTT / REST PLC / CNC / 传感器 数据上行 指令下行 Mashup 通过 Binding 消费建模层数据,通过 Service 触发逻辑层动作

二、Mashup 在工业应用中的定位

在工业现场,Mashup 通常承担三类角色。第一类是监控看板,例如产线 OEE 看板,把设备状态、节拍、良率、报警数量以仪表盘、趋势图、状态灯的形式集中呈现,操作员一眼就能判断当前产线是否正常。第二类是操作面板,例如注塑机参数设定页,工程师通过输入框、下拉框、按钮把工艺参数下发到设备,这类 Mashup 强调输入校验、权限控制和写回确认。第三类是分析与追溯页面,例如按批次查询历史曲线、对比不同班次能耗,这类页面依赖 Stream 查询服务和表格、图表组件。

需要强调的是,Mashup 不是万能的。它适合做交互层和轻量逻辑,不适合承担高频实时控制、复杂算法计算或大规模数据清洗。这些工作应下沉到 Thing 服务、边缘计算或外部系统,Mashup 只负责展示结果和触发动作。明确这条边界,能避免把页面做成"什么都往里塞"的臃肿应用。

三、开发流程:从需求到可运行 Mashup

一个完整的 Mashup 开发流程通常包含六个环节,但实际项目中它们会反复迭代,而不是一次走完。

  1. 明确数据源与对象模型:先确认页面要展示哪些属性,这些属性来自哪个 Thing、哪个 DataShape。例如"设备温度"来自 CNC_01 这个 Thing 的 Temperature 属性,类型为 NUMBER,单位为 ℃。
  2. 准备服务:如果页面需要聚合数据或写回设备,先在 Thing 上定义 Service。例如 GetLineOEE 返回一个 InfoTable,字段为 lineName、oee、status。
  3. 创建 Mashup 并选择布局:在 Composer 中新建 Mashup,选择 Responsive 或 Fixed 布局。工业看板常用 Fixed 布局保证大屏比例稳定,移动巡检页则用 Responsive。
  4. 放置组件并绑定数据:拖入 Gauge、Chart、Grid、Label 等组件,通过 Binding 把组件属性与 Thing 属性或服务输出关联。绑定方向要分清:显示用"从数据源到组件",写回用"从组件到数据源"。
  5. 配置交互与事件:为按钮绑定 Click 事件调用服务,为下拉框绑定 SelectedRowsChanged 事件刷新图表。事件链要避免循环触发。
  6. 预览、调试与发布:用 Preview 检查数据是否正确、布局是否错位,确认后保存并分配给用户组,通过浏览器或移动端访问。
建议在动手拖组件之前,先用一张纸画出"数据从哪来、经过谁、显示在哪、写回到哪"的链路草图。Mashup 的返工大多来自数据源没想清楚,而不是组件不会用。

四、工程化视角:让 Mashup 可维护、可复用

工业项目往往要交付几十甚至上百个页面,如果每个页面都从零搭建,维护成本会迅速失控。工程化的核心思路是抽象共性、隔离变化。

第一,用 Master 统一页头、导航、报警条和用户信息,子 Mashup 只关注业务内容。这样改一次导航,所有页面同步生效。第二,用 Style Theme 统一颜色、字体和控件样式,避免每个页面手工调色。第三,把重复的查询逻辑封装成 Thing 上的 Service,而不是在每个 Mashup 里重复写绑定。第四,命名要规范,例如 Mashup 用 M_LineOEE_Overview,服务用 SVC_GetLineOEE,Thing 用 TH_CNC_01,让资源列表本身就能表达用途。

下面给出一个可直接参考的 Mashup 资源命名与职责对照表,用于项目启动时统一约定。

资源类型 命名前缀 示例 职责说明
Mashup M_ M_LineOEE_Overview 产线 OEE 总览看板,只读展示
Master MA_ MA_Plant_Header 统一页头、导航、报警提示
Thing TH_ TH_CNC_01 单台 CNC 设备实例,含属性与服务
ThingTemplate TT_ TT_CNC_Standard CNC 设备模板,定义通用属性与服务
Service SVC_ SVC_GetLineOEE 返回产线 OEE 的 InfoTable
DataShape DS_ DS_LineOEE 定义 lineName、oee、status 字段
Style Theme ST_ ST_Plant_Dark 大屏深色主题,统一控件样式