3. 工业数据接入与连接

ThingWorx在工业场景中的价值,首先取决于它能否稳定、准确地拿到现场数据。工业现场的数据源并不统一:底层PLC通过工业协议暴露寄存器与标签,SCADA聚合了产线级画面与报警,OPC UA提供带语义的地址空间,MQTT则常用于边缘网关与云之间的轻量消息传输。ThingWorx的接入层正是为这种异构环境设计的,它通过连接器(Connector)把不同协议的数据源统一抽象为ThingWorx中的Thing(事物)及其属性(Property),再通过流(Stream)与值流(Value Stream)把实时数据持久化,供后续建模与指标计算使用。

一、接入架构:从现场设备到ThingWorx

理解接入,先要理解数据从设备到平台的路径。以一条典型产线为例:PLC负责采集电机电流、气缸位置、节拍计数;SCADA把多台PLC的数据汇总为产线状态;边缘网关通过OPC UA或MQTT把数据送到ThingWorx。ThingWorx侧由工业连接器(如OPC UA Connector、MQTT Connector、Modbus/PLC Connector)完成协议解析,把每个数据点映射为一个Thing的属性,属性值变化时触发订阅(Subscription),写入值流。

现场设备层 PLC 寄存器 / 标签 SCADA 产线状态 / 报警 OPC UA Server 地址空间 / 节点 MQTT Broker Topic / Payload ThingWorx 连接器 PLC / Modbus 轮询 / 批量读取 OPC UA Client 订阅 / 浏览节点 MQTT Client 订阅 Topic REST / JDBC 补充数据源 ThingWorx 平台 Thing 属性映射 Remote Property 订阅与采集 Subscription 值流持久化 Value Stream 实时流处理 Stream / 事件 上层应用 资产模型 Thing Template 指标计算 OEE / 节拍 可视化与告警 Mashup / 通知 数据流向:现场协议 → 连接器解析 → Thing属性 → 值流 → 模型与指标

二、四类数据源的接入要点

PLC接入通常走Modbus TCP或厂商专有协议。以Modbus为例,需要先确认寄存器地址与数据类型:保持寄存器40001对应地址0,读取32位浮点数需占用两个寄存器并注意字序(大端/小端)。在ThingWorx中创建Modbus连接器后,为每个数据点建立Remote Property,设置轮询周期。轮询周期不是越短越好:若PLC扫描周期为20ms,而ThingWorx轮询设为100ms,则每次读取的是当前最新值,不会丢历史,但会漏掉中间跳变。对节拍计数这类累计量,建议用变化上报而非固定轮询。

SCADA接入更多是“聚合接入”。SCADA本身已从PLC取数,ThingWorx可通过OPC UA或数据库接口读取SCADA的实时库。此时要关注SCADA的标签命名规范,尽量在连接器侧做一次映射,把如“Line1.Motor1.Current”映射为ThingWorx中Thing“Line1_Motor1”的属性“Current”,避免后续模型混乱。

OPC UA接入是工业语义化程度最高的方式。连接器需要配置Endpoint URL(如opc.tcp://192.168.1.10:4840)、安全策略(None / Basic256Sha256)与用户凭证。接入后先浏览地址空间,找到目标节点的NodeId,再建立订阅。订阅可设置采样间隔与队列深度:采样间隔决定服务端多久采一次,队列深度决定断连时缓存多少条。对关键报警节点,队列深度可设为10以上,防止瞬时断连丢事件。

MQTT接入适合边缘网关场景。连接器配置Broker地址、端口(1883或8883)、ClientId、用户名密码,并订阅Topic。Payload通常是JSON,例如:

{
  "deviceId": "GW-01",
  "ts": 1718000000000,
  "tags": {
    "motorCurrent": 12.4,
    "cycleCount": 3580,
    "status": "RUN"
  }
}

在连接器中用JSON解析器把tags.motorCurrent映射到Thing属性,ts映射为时间戳。若设备时间与平台时间不一致,应在边缘侧统一为UTC毫秒时间戳,否则值流的时间轴会错乱。

三、配置数据采集与实时流

接入完成后,核心工作是“让数据持续、有序地进入值流”。ThingWorx中通常按以下顺序配置:

  1. 建立Thing与Thing Template:为同类设备定义模板,把公共属性(如Current、CycleCount、Status)放入模板,具体设备Thing继承模板,减少重复配置。
  2. 绑定Remote Property:在Thing的属性上选择“Remote”,指定连接器与数据点地址,设置读写方向。只读属性用于采集,可写属性用于下发。
  3. 配置订阅:对变化频繁的属性启用订阅,设置采样周期与死区(Deadband)。死区用于抑制微小波动,例如电流死区设为0.2A,变化小于0.2A不写入值流,可显著降低存储量。
  4. 创建Value Stream:为每个Thing或每类属性建立值流,指定持久化提供者(如PostgreSQL、InfluxDB或ThingWorx内置流)。值流字段至少包含时间戳、属性名、值、质量码。
  5. 编写实时流服务:用ThingWorx的流服务或订阅事件,在属性变化时触发计算。例如每来一条CycleCount,判断是否达到100的整数倍,若是则写入“产量里程碑”事件。
采集周期与死区需要联合调优。周期过短、死区过小会导致值流膨胀;周期过长、死区过大会丢失关键跳变。建议先以1秒周期、合理死区试运行,观察24小时数据量后再调整。

四、结果观察与判断依据

配置是否成功,不能只看“连接器显示已连接”。应观察三个层面:连接层看连接器状态与错误日志,确认无超时、无认证失败;数据层在Thing的属性上查看当前值是否随现场变化,值流中是否有连续时间戳;业务层看指标是否合理,例如节拍计数应单调递增,电流应在合理量程内。若值流中出现大量相同值,可能是死区过大或订阅未生效;若时间戳跳跃,可能是边缘侧时间未同步。只有三层都正常,才说明数据接入真正可用。

完成接入后,ThingWorx中的Thing已经承载了实时数据,下一步才能在此基础上建立资产模型与指标体系。接入的质量直接决定后续指标的可信度,因此宁可多花时间核对地址、时间戳与死区,也不要让“看起来有数据”掩盖了数据质量问题。