4. 设备状态数据采集基础

在MES工单与设备状态联动的工程中,第一步不是写联动逻辑,而是把设备“现在处于什么状态”这件事,变成MES能够稳定读取、能够判断、能够追溯的数据。设备状态数据采集基础要解决三个问题:状态从哪里来、通过什么通道进入系统、进入系统后用什么字段和取值表达。如果这三件事没有定义清楚,后续的工单派工、设备锁定、报工校验都会失去可靠依据。

一、设备状态的数据源头:从物理量到状态语义

设备状态最原始的来源是传感器和PLC内部信号。传感器负责把物理量转换为电信号,例如接近开关输出“工件到位”的开关量,光电传感器输出“料仓缺料”的开关量,温度变送器输出4~20mA模拟量,振动传感器输出加速度信号。PLC则负责采集这些信号,并在程序内部形成设备运行、停止、故障、待料、自动/手动等状态位。

需要特别注意的是,传感器信号和PLC状态位之间不是一一对应关系。一个“设备运行”状态,可能由“主电机接触器吸合”“变频器使能”“自动模式有效”三个条件同时成立才能判定。因此,在采集层必须明确状态信号的组合逻辑,而不是简单读取某一个点位。

常见状态信号可分为四类:

  • 开关量状态:运行/停止、自动/手动、门开/门关、急停按下/复位,通常用0/1表示。
  • 模拟量状态:温度、压力、速度、电流,需要经过量程变换和阈值判断后才能转为状态。
  • 故障码/报警字:PLC内部故障寄存器或报警位,例如FaultCode=12表示伺服过载。
  • 计数器/产量数据:用于判断工单是否完成,例如当前产量、节拍、良品数。

状态信号定义时,建议采用“设备编号+信号名+数据类型+取值含义+采集周期+有效条件”的字段结构。例如:设备CNC-01,信号名RunStatus,数据类型Bool,取值1=运行、0=停止,采集周期500ms,有效条件为通讯正常且急停未触发。

二、接入通道:PLC、SCADA、OPC UA与Modbus的分工

设备状态进入MES的通道通常不是单一的,而是分层接入。最底层是PLC和传感器,中间层是SCADA或边缘网关,上层是MES。不同通道的适用场景不同,工程中需要根据设备品牌、通讯能力、实时性要求和改造难度选择组合方案。

PLC直连是最直接的方式。MES或边缘采集程序通过PLC的以太网口,使用原生协议或OPC UA/Modbus TCP读取寄存器。优点是实时性高、数据粒度细;缺点是不同品牌PLC协议不同,且直接读取PLC可能影响控制器负载,需要限制采集频率和并发连接数。

SCADA接入适合已经部署SCADA的产线。SCADA通常已经完成了PLC点位组态、报警管理和历史存储,MES可以通过SCADA的数据库、API或OPC UA接口获取状态。优点是复用已有组态,减少重复采集;缺点是SCADA的点位命名和状态定义可能与MES不一致,需要做映射。

OPC UA是当前设备状态接入的主流标准。它提供统一的信息模型、地址空间、订阅机制和安全通道。MES作为OPC UA Client,可以订阅PLC或网关暴露的变量节点,当状态变化时收到通知,而不是轮询。OPC UA适合跨品牌、跨层级的数据集成,尤其适合需要语义化建模的场景。

Modbus TCP/RTU是大量老旧设备和仪表的通用协议。它简单、开放、成本低,但只提供寄存器地址和原始数据,没有语义信息。使用Modbus时,必须在采集端建立“寄存器地址—状态含义—数据类型—字节序—缩放系数”的映射表,否则读到的只是数字,不是状态。

设备状态数据采集接入通道与状态信号定义 现场设备层 传感器 接近/光电/温度/振动 PLC 状态位/故障字/计数器 仪表/变频器 Modbus RTU/TCP 机器人/CNC 原生协议/OPC UA 状态信号定义 Bool/Int/Real + 语义 接入与汇聚层 SCADA 组态点位/报警/历史库 OPC UA Server 地址空间/订阅/安全通道 边缘网关 协议转换/缓存/断线续传 Modbus 映射表 地址→含义→字节序→系数 统一状态模型 设备ID+状态码+时间戳+质量 MES 状态消费层 状态采集服务 轮询/订阅/变化上报/心跳检测 状态判定引擎 组合逻辑/阈值/延时/去抖 工单联动规则 设备可用→派工;故障→挂起;离线→冻结 状态历史与追溯 状态变更记录/持续时间/质量码 异常处理 通讯中断/状态跳变/数据质量差 关键原则:状态信号必须带设备ID、时间戳、质量码;接入通道可组合,但状态语义必须统一

三、状态信号定义:从“读到值”到“看懂状态”

采集通道打通后,真正决定MES能否正确联动的是状态信号定义。很多项目失败的原因不是通讯不通,而是状态定义模糊。例如PLC里有一个M10.0,注释写“运行”,但实际含义是“自动运行且无报警”,而MES只按M10.0=1判断设备可用,结果设备报警时仍被派工。

状态信号定义应包含以下要素:

  • 设备唯一标识:与MES设备台账一致,例如EQ-CNC-001。
  • 状态编码:建议使用枚举值,如0=离线、1=待机、2=运行、3=故障、4=保养、5=换型。
  • 原始点位:PLC地址或OPC UA NodeId,例如DB1.DBX0.0或ns=2;s=CNC01.Run。
  • 判定逻辑:单点直接映射,还是多点组合。例如运行 = 自动模式 AND 主电机吸合 AND 无故障。
  • 去抖与延时:避免信号抖动导致状态频繁跳变,例如连续3个采集周期为1才确认运行。
  • 质量码:通讯正常、超时、坏值、未初始化,MES根据质量码决定是否信任该状态。

以一台加工中心为例,状态定义可以这样写:设备EQ-CNC-001,状态RunStatus,原始点位DB100.DBX0.0,判定逻辑为“AutoMode=1 AND SpindleOn=1 AND FaultCode=0”,去抖时间500ms,采集周期200ms,质量码由OPC UA订阅状态提供。当FaultCode变为非0时,状态立即切换为故障,并触发MES工单挂起。

四、采集方式的选择与工程注意事项

轮询和订阅是两种基本采集方式。轮询适合Modbus等不支持主动上报的协议,需要设置合理的扫描周期,例如状态位200~500ms,模拟量1~5s。订阅适合OPC UA,状态变化时才上报,减少网络和PLC负载。工程中常见做法是:关键状态用订阅,辅助数据用轮询。

还需要注意字节序和数据类型。Modbus寄存器是16位,32位浮点数需要两个寄存器组合,存在ABCD/CDAB/BADC/DCBA四种字节序。如果字节序搞错,读到的温度可能是乱码。建议在映射表中明确标注字节序和缩放系数,例如温度寄存器40001~40002,Float ABCD,缩放系数0.1,单位℃。

常见排障点:状态一直显示“离线”,先检查采集服务心跳和网络连通性;状态频繁跳变,检查去抖时间和信号质量;状态与现场不符,核对PLC点位注释、字节序和判定逻辑;OPC UA订阅无数据,检查NodeId、安全策略和证书信任关系。

最后,状态采集不是一次性工作。设备改造、PLC程序更新、点位调整都会影响状态定义。建议建立状态信号台账,每次变更同步更新MES映射表,并在测试环境验证后再上线。只有状态数据可信,MES工单与设备状态联动才有工程意义。