2. ThingWorx平台架构

在ERP与PLM系统集成的语境下,ThingWorx并不是一个"替代"ERP或PLM的业务系统,而是位于两者之间、承担协议转换、数据编排与业务事件驱动的集成中间件。要理解它为什么能承担这个角色,需要先看清它的四个核心组件——Thing、ThingTemplate、Mashup、Flow——各自解决什么问题,以及它们在集成链路中的位置。

一、四个核心组件的职责边界

Thing(事物)是ThingWorx中最基础的建模单元,代表一个被数字化的实体。它可以是一台设备、一个工位、一个物料批次,也可以是一个"逻辑对象",例如"ERP物料主数据连接器"或"PLM变更单接收器"。Thing本身不定义能力,它只是承载属性(Property)、服务(Service)、事件(Event)和订阅(Subscription)的容器。在集成场景中,我们通常为每个需要交互的外部系统建立对应的Thing,例如Thing_ERP_Connector、Thing_PLM_Connector,把连接参数、认证信息、接口地址封装在它的配置里。

ThingTemplate(事物模板)是Thing的"类型定义",相当于面向对象中的类。它规定了某一类Thing应该具备哪些属性、服务和事件。集成的价值在于:当企业有多个工厂、多条产线需要接入同一套ERP接口时,只需定义一个ERP_Material_Sync_Template,所有具体Thing都从它继承,接口地址、字段映射、重试策略只需在模板层维护一次。这是ThingWorx能够规模化支撑集成的关键机制。

Mashup(混搭)是ThingWorx的前端可视化与交互层。它把Thing的数据、服务返回值、外部API结果组合成页面,供业务人员查看和操作。在ERP/PLM集成中,Mashup常被用作"集成监控台":展示最近同步的物料、失败的变更单、待处理的工单,并提供"手动重推"按钮。它不承担数据转换逻辑,但承担可观测性与人工干预入口。

Flow(流程)是ThingWorx的编排引擎,负责定义"什么时候、按什么顺序、调用哪些服务、如何处理异常"。它把Thing暴露的服务串联成有向的执行链,支持条件分支、循环、并行和错误捕获。ERP与PLM之间的数据同步、状态回写、审批触发,绝大多数都落在Flow里实现。

ThingWorx 集成中间件:组件定位与数据流 ERP 系统 物料主数据 BOM / 工单 库存 / 采购订单 PLM 系统 设计BOM / 图纸 变更单 ECN 版本 / 物料属性 ThingWorx 平台 ThingTemplate 类型定义 / 属性·服务·事件 Thing 实例 / 连接器·逻辑对象 继承 Flow 流程编排 触发 → 条件分支 → 服务调用 → 异常捕获 → 重试 数据映射 / 状态回写 / 审批触发 Mashup 可视化监控台 同步状态 · 失败清单 · 手动重推入口 REST/OData REST/文件 变更回写 状态回写 ThingTemplate 定义能力 → Thing 承载实例 → Flow 编排调用 → Mashup 呈现结果 ERP 与 PLM 不直接互连,所有交互经 ThingWorx 中转与转换

二、为什么ERP与PLM不直接互连

ERP与PLM直接点对点集成,在系统数量少、接口稳定时尚可维持;一旦涉及多工厂、多PLM实例、多版本接口,点对点连接数会呈平方级增长,且任何一方接口变更都会引发连锁修改。ThingWorx作为中间件的核心价值,是把"N×N"的连接关系收敛为"N×1":每个系统只与ThingWorx建立一条受控通道,转换逻辑集中在Flow和ThingTemplate中维护。

更关键的是,ERP与PLM对同一份数据的"语义"往往不同。例如物料编码,ERP可能使用MAT-000123,PLM可能使用P-2024-0123-A;计量单位上ERP用"个",PLM用"EA"。这些差异不应侵入任何一方的业务逻辑,而应在ThingWorx的Flow中通过映射服务完成转换。ThingWorx在这里扮演的是语义翻译层,而非简单的消息转发器。

三、一个典型的物料同步链路

以"PLM新建物料 → 同步至ERP"为例,说明四个组件如何协同。假设PLM侧通过REST接口暴露物料查询能力,ERP侧通过OData接口接收物料创建请求。

第一步,在ThingWorx中定义PLM_Material_Template,包含属性plmCode、plmName、plmUnit、plmVersion,以及服务getMaterialByCode(code)。再定义ERP_Material_Template,包含属性erpCode、erpName、erpUnit,以及服务createMaterial(payload)。两个模板分别实例化为Thing_PLM_Material和Thing_ERP_Material,各自配置好接口地址与认证凭据。

第二步,在Flow中编排执行链:触发条件设为"PLM物料状态变为Released";调用Thing_PLM_Material.getMaterialByCode获取物料详情;进入映射节点,将plmCode按规则转换为erpCode(例如去掉前缀P-、补零至6位),将plmUnit通过单位映射表转为ERP单位;调用Thing_ERP_Material.createMaterial提交;根据返回的HTTP状态码判断结果——201表示创建成功,409表示编码冲突需人工介入,500表示ERP侧异常需重试。

第三步,在Mashup中构建监控页面,绑定Flow的执行日志,展示"最近1小时同步成功数""失败清单及错误码""手动重推按钮"。业务人员无需登录ERP或PLM,即可在ThingWorx中完成异常处置。

映射规则建议集中维护在ThingTemplate的属性或独立的配置Thing中,而不是硬编码在Flow节点里。这样当编码规则或单位表变化时,只需修改一处,所有继承该模板的Thing自动生效。

四、组件在集成中的定位总结

组件 在ERP/PLM集成中的定位 典型使用方式
ThingTemplate 集成能力的类型定义与复用单元 定义连接器模板、数据映射模板、重试策略模板
Thing 具体系统或逻辑对象的实例载体 每个ERP/PLM接口对应一个Thing,封装地址与凭据
Flow 数据转换与业务编排的执行引擎 触发、映射、调用、异常处理、状态回写
Mashup 集成过程的可观测性与人工干预界面 同步监控、失败清单、手动重推、日志查询

五、实践中的关键判断

在动手搭建之前,需要先回答三个问题。第一,谁是数据主源?物料主数据通常以ERP或PLM之一为主源,另一侧为消费方,这决定了Flow的方向是单向推送还是双向同步。第二,同步是实时还是批量?实时同步依赖事件触发,对接口稳定性要求高;批量同步可用定时Flow,容错空间更大。第三,失败后如何处置?是自动重试、进入死信队列,还是通知人工在Mashup中处理,这需要在Flow设计阶段就明确。

这三个问题的答案会直接影响ThingTemplate的粒度、Flow的分支结构以及Mashup的页面布局。ThingWorx的组件本身并不复杂,复杂的是把ERP与PLM之间真实的业务语义差异,准确地映射到这四个组件的协作关系中。