4. 连接工业数据源
告警系统能否及时、准确地触发,取决于底层数据是否被稳定采集并正确映射。ThingWorx 本身不直接“读”PLC 寄存器,它通过工业连接器(Industrial Connectivity,基于 Kepware 技术)把 OPC UA、Modbus、MQTT 等异构协议统一转换为 ThingWorx 可识别的数据模型。本节围绕“采集—建模—映射—触发”这条主线,说明如何把设备数据变成告警可用的属性与事件。
一、先分清四类数据源的角色
在动手配置前,需要明确每种协议在架构中的位置,否则容易出现“用错工具”的问题。
- OPC UA:面向语义化、带类型和地址空间的工业标准协议,适合连接支持 OPC UA Server 的 PLC、DCS、SCADA。它自带节点 ID、数据类型、时间戳和质量码(Quality),是告警判断中最“干净”的数据源。
- Modbus TCP/RTU:轻量、寄存器导向。数据本身没有语义,只有地址(如 40001)和寄存器类型(线圈、输入寄存器、保持寄存器)。需要人工定义缩放、字节序和工程单位。
- MQTT:发布/订阅消息协议,适合网关、边缘设备、传感器上报。数据以主题(Topic)和 JSON/字符串载荷形式到达,天然是“事件流”,适合直接映射为 ThingWorx 事件。
- ThingWorx 工业连接器:作为统一接入层,把上述协议(以及 Siemens、Allen-Bradley 等原生驱动)汇聚为 OPC UA 或 REST 接口,再通过 Industrial Thing 暴露给平台。
二、采集链路与映射关系
下图展示从现场设备到告警触发条件的完整数据流:设备经协议进入工业连接器,被组织为标签(Tag),再通过 Industrial Thing 映射为 ThingWorx 的属性和事件,最终由告警规则消费。
三、从标签到属性的映射要点
映射不是简单“改个名字”,而是要把现场数据的物理含义完整传递到平台。以 OPC UA 为例,在工业连接器的 Channel 下建立 Device,再建立 Tag,每个 Tag 需要确认四项:
- 地址与数据类型:OPC UA 直接引用节点 ID,如
ns=2;s=Boiler1.Temp;Modbus 则填写寄存器地址与类型(如 40001 保持寄存器、Float 或 Word)。类型不匹配会导致属性值异常或写入失败。 - 缩放与工程单位:Modbus 原始值常为整数,需设置缩放系数。例如电流寄存器原始值 0–65535,缩放 ×0.1 后得到 0–6553.5 A,属性单位标注为 A。
- 扫描速率:决定数据刷新频率。温度这类慢变量可设 5000 ms,振动、电流等快变量可设 500–1000 ms。扫描过快会增加连接器与网络负担,过慢则告警滞后。
- 质量码处理:OPC UA 的 Quality 为 Bad 时,属性值不可信。告警规则应结合质量码判断,避免因通信中断产生误报。
在 ThingWorx 侧,Industrial Thing 通过 RemoteThing 或 ThingShape 绑定这些标签,形成属性。属性名建议与业务语义一致,例如 BoilerTemp、MotorCurrent、VibrationRMS,而不是沿用 Tag001 这类无意义名称。
四、MQTT 数据的特殊处理
MQTT 到达的是消息而非持续变量,因此更适合映射为事件。典型做法是:在 ThingWorx 中订阅主题 factory/line1/vibration,收到 JSON 载荷后解析出 rms 字段,写入属性 VibrationRMS,同时触发一个自定义事件 VibrationReported。告警规则既可以监听属性变化,也可以直接监听事件,后者更适合“每次上报都判断一次”的场景。
五、告警触发所需的属性与事件设计
映射完成后,需要为告警准备两类数据:
- 数值属性:用于阈值比较,如
BoilerTemp > 95、MotorCurrent > 12.5。属性应带单位、时间戳和质量码。 - 状态/事件:用于表达离散变化,如设备启停、通信中断、MQTT 上报异常。事件可携带上下文参数,便于告警消息中直接引用。
一个常见的告警条件可以写成:当 BoilerTemp 连续 3 次采样超过 95 °C,且质量码为 Good,且持续时间超过 10 秒,则触发“锅炉超温”告警。这里的“连续 3 次”“10 秒”就是告警规则中的持续时间与去抖参数,它们依赖采集侧的扫描速率和映射稳定性。
六、配置检查清单
| 检查项 | 判断依据 | 常见问题 |
|---|---|---|
| 连接器通道状态 | Channel/Device 显示 Connected | IP、端口、认证错误 |
| 标签值刷新 | Tag 值随时间变化,质量码 Good | 地址错误、扫描速率过低 |
| 属性映射 | ThingWorx 属性值与标签一致 | 类型不匹配、缩放未设置 |
| 事件触发 | MQTT 上报后事件日志出现记录 | 主题未订阅、JSON 解析失败 |
| 告警条件 | 模拟超限后告警状态变为 Active | 阈值单位不一致、死区过大 |
完成本节配置后,设备数据已经具备被告警规则消费的条件。下一步的关键是让告警规则正确理解这些属性的语义、时间特性和质量状态,从而在真实工况下稳定触发。