4. 生产数据建模与采集点定义

在TwinCAT与MES集成的项目中,数据建模不是先写PLC代码,而是先回答三个问题:采什么、从哪采、多久采一次。如果采集点定义不清,后期会出现两类典型问题:一是MES侧数据字段缺失,报表无法闭环;二是高频采集把PLC周期和网络带宽拖垮,导致设备响应变慢。因此,本节把生产数据分为五类核心对象,并给出采集频率的设计方法。

一、五类生产数据的语义与边界

设备状态描述设备当前处于什么运行模式,典型取值包括:运行、待机、故障、换型、停机。状态量是离散量,变化不频繁,但必须记录状态切换时刻和持续时长,否则无法计算OEE中的时间开动率。在TwinCAT中,状态通常由PLC内部逻辑综合得出,而不是直接读一个物理输入点。

产量是累计计数类数据,分为总产量、合格品数、废品数。产量必须与工单绑定,否则MES无法判断这批产品属于哪个订单。产量采集的关键是增量计算:PLC侧维护一个累计计数器,MES按周期读取后做差分,避免重复计数。

节拍是单件产品从进入到完成的时间间隔,单位通常为秒或毫秒。节拍分为理论节拍和实际节拍,实际节拍由相邻两件产品的完成时间戳相减得到。节拍数据对分析产线瓶颈、判断设备是否降速运行非常关键。

报警是事件型数据,具有明确的开始和结束。报警建模必须包含报警代码、报警级别、触发时间、恢复时间、持续时长。报警不能只记录“发生了”,还要记录“是否已确认”,否则MES无法区分未处理报警和历史报警。

工艺参数是连续量或设定值,例如温度、压力、扭矩、速度、配方号。工艺参数与产品质量直接相关,采集时通常需要同时记录设定值和实际值,用于判断设备是否按配方执行。

生产数据分类与采集频率设计模型 数据源层(TwinCAT PLC) 状态字 / 模式变量 BOOL / INT 累计计数器 DINT / UDINT 时间戳 / 节拍 TIME / LREAL 报警位 / 报警字 BOOL / WORD 工艺参数 REAL / LREAL 采集策略层 变化触发(On Change) 状态、报警 周期采样(Cyclic) 产量、工艺参数 事件触发(Event) 节拍完成、报警确认 批量上报(Batch) 工单汇总、班次统计 缓存与补传 断网续传、时间戳对齐 MES消费层 OEE / 时间开动率 状态时长统计 工单达成率 产量差分汇总 节拍趋势分析 瓶颈识别 报警管理 MTBF / MTTR 质量追溯 工艺参数曲线 建议采集频率 状态:变化即报 产量:1~5 s 节拍:每件完成时 报警:上升沿触发 工艺参数:100~500 ms 班次汇总:每班一次 原则:状态/报警用 事件触发,连续量用 周期采样,避免高频 轮询拖慢PLC周期

二、采集频率的设计原则

采集频率不是越高越好,而是由数据变化速度和业务用途共同决定。状态和报警属于事件型数据,采用变化触发或上升沿触发,只在状态切换或报警产生时上报一次,既保证实时性,又不占用周期通信资源。产量属于累计量,变化频率取决于生产节拍,通常1~5秒采集一次即可满足工单进度显示。节拍数据在每件产品完成时产生,属于事件触发,不需要周期轮询。工艺参数中,温度、压力等慢变量可以100~500毫秒采集一次;扭矩、位置等快变量如果用于质量追溯,需要与产品序列号绑定后按件存储,而不是持续高频上传。

在TwinCAT中实现时,建议把采集任务与PLC控制任务分开。控制任务保持1毫秒或2毫秒周期,采集任务可以设置为10毫秒或100毫秒,通过ADS或Tc3_IoT把数据推送到MES。这样即使MES侧网络抖动,也不会影响设备控制逻辑。

三、采集点定义表(示例)

下面给出一份可直接参考的采集点定义表。表中参数为教学示例,实际项目需根据设备手册和MES接口规范调整。

数据分类 采集点名称 TwinCAT变量示例 数据类型 采集方式 建议频率 MES用途
设备状态 设备运行模式 GVL_Status.nMode INT 变化触发 变化即报 OEE时间开动率
产量 累计合格品数 GVL_Prod.dwGoodCount UDINT 周期采样 2 s 工单达成率
节拍 单件完成节拍 GVL_Prod.fCycleTime REAL 事件触发 每件完成时 瓶颈分析
报警 报警代码与状态 GVL_Alarm.wCode WORD 上升沿触发 触发/恢复时 MTBF/MTTR
工艺参数 实际温度 GVL_Process.fTempAct REAL 周期采样 200 ms 质量追溯
工艺参数 配方号 GVL_Process.nRecipeID INT 变化触发 换型时 批次追溯

四、从采集点到MES数据结构的映射

采集点定义完成后,需要把PLC变量映射为MES可识别的数据结构。以产量为例,PLC侧只提供累计值,MES侧需要的是“某工单在某时间段内的产量”。因此,在TwinCAT中应增加一个工单上下文变量,记录当前工单号和批次号。MES读取产量时,同时读取工单号,按工单做差分,才能得到正确的工单产量。

报警数据同样需要上下文。一条报警记录至少包含:设备编号、报警代码、报警级别、触发时间、恢复时间、确认状态。在TwinCAT中,可以用结构体数组缓存最近若干条报警,MES按时间戳增量拉取。这样即使网络短暂中断,报警记录也不会丢失。

实践建议:在定义采集点之前,先与MES侧确认三件事——每个字段的语义、时间戳格式(UTC还是本地时间)、断网后的补传策略。这三项确定后,再回到TwinCAT中分配变量和任务周期,可以避免大量返工。

五、常见错误与检查要点

  • 状态量只读当前值,不记录切换时间。MES无法计算状态持续时长,OEE时间开动率会失真。正确做法是在PLC中检测状态变化,记录变化时刻并写入环形缓冲区。
  • 产量用瞬时值而不是累计值。瞬时值在采集周期内可能被覆盖,导致漏计。应使用累计计数器,由MES做差分。
  • 报警只记录触发,不记录恢复。报警持续时长无法计算,MTTR失去意义。应在报警恢复时写入恢复时间戳。
  • 工艺参数采集频率过高。例如把扭矩以10毫秒周期持续上传,会造成网络和数据库压力。正确做法是按件触发,与产品序列号绑定后存储。
  • 时间戳不统一。PLC本地时间与MES服务器时间不一致,会导致数据错序。建议统一使用UTC时间戳,或在TwinCAT中通过NTP同步。