4. 工业数据采集与建模

在ThingWorx与MES集成的整体链路中,数据采集层决定了上层业务能“看见”多少真实生产状态。现场设备种类繁多:PLC负责逻辑控制与过程量输出,SCADA承担集中监控与历史归档,传感器直接输出温度、压力、振动等物理量。ThingWorx并不直接“读懂”这些设备,它依赖边缘连接组件(如ThingWorx Edge、Kepware、OPC UA网关或MQTT代理)把不同协议的数据统一接入,再通过物模型(Thing Model)把原始点位映射为具有业务语义的属性、事件和服务。

一、现场数据源与协议差异

PLC侧常见协议包括西门子S7、三菱MC、罗克韦尔EtherNet/IP、Modbus TCP等。它们以寄存器地址或标签名暴露数据,例如DB1.DBD0、%MW100、N7:0。SCADA通常通过OPC DA/UA对外提供带质量戳的标签,质量戳(Good/Bad/Uncertain)是判断数据可信度的关键。传感器则可能输出4-20mA模拟量、0-10V电压或IO-Link数字信号,需要经过变送器或采集模块转换为可读数值。

这些差异意味着:采集层不能只做“取数”,还要完成协议转换、地址映射、时间戳对齐和质量判断。否则MES收到的可能是一堆无法解释的裸值。

二、边缘连接与数据规范化

边缘连接的核心任务可以概括为“采集—转换—发布”三步。以Kepware或ThingWorx Edge为例,典型配置包括:

  • 通道与设备定义:为每种PLC协议建立通道,指定IP、端口、机架槽号或站号;
  • 标签/点位映射:把DB1.DBD0映射为Reactor_Temperature,并设置数据类型(Float、Int、Bool);
  • 扫描频率:按工艺需求设置,如温度1s、振动100ms、能耗5s,避免全量高频造成网络拥塞;
  • 数据规范化:统一单位(℃、kPa、rpm)、统一时间戳(UTC或本地时区)、统一命名规范(设备_测点_单位)。

规范化后的数据通过MQTT或OPC UA发布到ThingWorx。MQTT主题建议采用层级结构,例如factory/line1/reactor01/temperature,便于订阅与权限控制。ThingWorx侧再通过Remote Thing或Edge Thing接收,并绑定到物模型属性。

建议在边缘侧完成一次“量程转换”和“死区过滤”:例如4-20mA对应0-150℃,原始值raw=12mA时,温度=(12-4)/(20-4)*150=75℃;死区设为0.5℃,避免微小波动频繁上报。

三、物模型建模:从点位到业务语义

ThingWorx的物模型不是简单地把点位堆在一起,而是按“设备—属性—事件—服务”组织。以一台反应釜为例:

模型元素示例说明
属性Temperature、Pressure、Level实时值,可绑定边缘标签
事件OverTemperature、BatchComplete由规则或边缘触发
服务StartBatch、StopBatch供MES调用,反向控制
元数据unit、min、max、precision单位、量程、精度

建模时要注意:属性名与MES工单、批次、物料编码保持可关联;事件要携带时间戳和上下文(如批次号、设备号);服务要定义输入输出参数,便于MES通过REST API调用。

四、实时数据流与质量判断

从PLC到ThingWorx的完整数据流可以概括为:现场设备→边缘采集→协议转换→规范化→MQTT/OPC UA→ThingWorx Edge→物模型属性→MES订阅。每一段都可能引入延迟或失真,因此需要在关键节点设置质量判断。

现场设备层 PLC S7 / Modbus / EIP SCADA OPC DA / UA 传感器 4-20mA / IO-Link 质量戳:Good/Bad 边缘连接层 协议转换 S7→OPC UA / MQTT 地址映射 DB1.DBD0→Temp 量程/死区转换 4-20mA→0-150℃ 时间戳/单位统一 UTC + 工程单位 传输层 MQTT Topic 分层 OPC UA 订阅/发布 QoS / 断线缓存 保证不丢数 ThingWorx Edge Thing 接收远程数据 物模型属性 Temp/Pressure 事件/服务 OverTemp/Start MES 订阅/调用 反向控制:MES 服务调用 → 边缘 → PLC 写值 质量判断:超时/坏值→标记 Uncertain

图中展示了从现场设备到ThingWorx的完整链路,以及反向控制路径。实际运行中,边缘侧应记录每个标签的采集时间、质量戳和原始值,便于排障时回溯。例如当MES发现某批次温度曲线异常,可以检查是PLC输出波动、边缘转换错误,还是MQTT丢包导致。

五、实操示例:反应釜温度采集配置

假设一台反应釜温度通过西门子S7-1200的DB1.DBD0输出,量程0-150℃,扫描周期1s。在Kepware中建立S7通道后,添加标签Reactor01_Temp,数据类型Float,地址DB1,DBD0。在ThingWorx Edge中创建Remote Thing,属性Temperature绑定该标签,并设置单位℃、最小值0、最大值150。

// 边缘侧量程转换示例(伪代码)
raw = readPLC("DB1.DBD0")        // 假设返回 0-27648 对应 0-150℃
temp = raw / 27648.0 * 150.0     // 转换为工程值
if (temp < 0 || temp > 150) {
    quality = "Uncertain"
} else {
    quality = "Good"
}
publish("factory/line1/reactor01/temperature", {value: temp, unit: "℃", quality: quality, ts: now()})

MES侧订阅该主题后,即可在工单执行界面实时显示温度。若质量戳为Uncertain,MES应提示操作员检查仪表或PLC连接,而不是直接使用该值做批次判定。

常见问题:PLC地址偏移错误、字节序(大小端)不一致、扫描周期过短导致网络拥塞、时间戳未统一造成MES排序混乱。建议先在边缘侧用OPC UA客户端工具验证标签值,再接入ThingWorx。

六、数据规范化检查要点

  • 命名:设备_测点_单位,如Reactor01_Temp_C;
  • 单位:统一为SI或行业惯用单位,避免℃/℉混用;
  • 时间:统一UTC,MES展示时再转本地时区;
  • 质量:每个数据点携带Good/Bad/Uncertain;
  • 频率:按工艺需求分级,关键联锁点可提高至100ms;
  • 安全:边缘到ThingWorx使用TLS,MQTT启用用户名密码或证书。

完成上述配置后,ThingWorx中的物模型就具备了与MES对话的能力:MES可以通过REST API读取属性、订阅事件,也可以调用服务反向控制PLC。数据采集不再是“把数拿上来”,而是把现场物理量转化为可被业务系统信任和使用的语义数据。