4. 生产数据对象梳理
在iQ-F与MES集成的项目中,最容易出问题的环节往往不是通信本身,而是“采什么”没有定义清楚。PLC里可读的软元件成百上千,如果直接把D寄存器批量上传,MES拿到的只是一堆没有语义的数字。因此,本节的核心任务是把生产现场的业务对象翻译成一份可落地的数据清单:每个数据点要有明确的业务含义、来源地址、数据类型、更新时机和用途。
一、六个维度构成生产数据的主干
从MES的视角看,一条产线的生产数据可以归纳为六个维度,它们之间存在明确的层次关系:工单是“要做什么”,产量和节拍是“做得怎么样”,良率是“做得好不好”,设备状态是“能不能做”,报警是“为什么做不好”。这六个维度共同构成MES进行生产追溯、OEE计算和异常响应的最小数据集。
以一条典型的iQ-F控制的小型装配线为例,假设MES下发工单号 WO-20240612-001,产品型号 A-100,计划数量 500 件。PLC侧需要围绕这个工单建立一组数据点,而不是孤立地采集计数器。工单信息通常由MES通过以太网写入iQ-F的D寄存器区,例如D100~D109存放工单号ASCII码,D110存放计划数量,D111存放产品型号代码。PLC在接收到工单后置位“工单已接收”标志位M100,作为后续产量统计的启动条件。
二、产量与节拍:从计数到时间戳
产量数据不能只用一个累计计数器。建议至少定义三类点:累计产量(如D200,每完成一件加1)、合格数(D201)、不合格数(D202)。三者的关系应满足 累计产量 = 合格数 + 不合格数,MES侧可据此做一致性校验。如果现场存在返修回流,还需要单独定义返修数,避免良率被重复计算。
节拍数据反映的是生产节奏。常见做法是在PLC中记录每件产品的完成时刻,用相邻两件的完成时间差计算单件节拍。iQ-F没有直接的时间戳寄存器,但可以用1ms定时器或系统时钟特殊寄存器(如SD210系列)配合计算。更实用的方式是在PLC中维护一个“当前节拍”寄存器D210(单位0.1s),由程序在每件完成时刷新,MES按固定周期读取。同时定义“节拍上限”D211,当D210超过D211时置位节拍异常标志M210,供MES判断是否触发预警。
三、良率与设备状态:需要区分统计口径
良率不是PLC直接算出来的,而是由MES根据合格数和不合格数计算。但PLC需要提供准确的计数来源和判定信号。例如,视觉检测工位判定NG时置位M300,PLC在M300上升沿将D202加1,同时记录NG代码到D220。NG代码应事先与MES约定编码表,如1=尺寸超差、2=外观缺陷、3=装配不到位。这样MES不仅能算良率,还能做缺陷帕累托分析。
设备状态建议采用状态字方式,而不是多个独立位。例如用D230表示设备状态:0=停机、1=待机、2=运行、3=报警、4=换型。状态字的好处是MES只需读一个寄存器就能判断当前状态,减少通信点位。同时定义状态持续时间寄存器D231(单位秒),由PLC在状态切换时清零并重新计时,MES可据此计算设备利用率和停机时长。
四、报警数据:要带时间和代码
报警是数据清单中最容易被简化处理的部分。只采集一个“报警中”标志位远远不够。建议定义报警代码寄存器D240、报警发生时间D241~D242(可用32位秒计数)、报警确认标志M400。当报警发生时,PLC将报警代码写入D240,同时记录发生时刻;操作员在HMI上确认后置位M400。MES读取后可以生成报警记录,并统计MTBF和MTTR。
下面这张图展示了六个维度数据点在iQ-F与MES之间的组织关系,以及每个维度的典型寄存器映射和流向。
五、形成数据清单的字段规范
把上述对象整理成清单时,每个数据点至少应包含以下字段:数据点名称(业务语义,如“合格品累计数”)、PLC地址(如D201)、数据类型(16位无符号/32位有符号/位)、读写方向(MES读或写)、更新时机(周期扫描/事件触发/工单切换)、量纲与换算(如0.1s、0.01mm)、用途(OEE/追溯/报警)。缺少更新时机和量纲,MES侧很容易把0.1s当成1s,或者把周期读到的中间值当成稳定值。
以下是一份可直接参考的清单示例,覆盖六个维度的核心点位。示例中的地址和数值均为教学假设,实际项目需根据iQ-F的软元件分配和MES接口协议调整。
| 数据点名称 | PLC地址 | 类型 | 方向 | 更新时机 | 量纲/说明 | 用途 |
|---|---|---|---|---|---|---|
| 工单号 | D100~D109 | ASCII | MES→PLC | 工单切换 | 20字符 | 追溯 |
| 计划数量 | D110 | U16 | MES→PLC | 工单切换 | 件 | 进度 |
| 产品型号代码 | D111 | U16 | MES→PLC | 工单切换 | 编码表 | 换型 |
| 累计产量 | D200 | U32 | PLC→MES | 每件完成 | 件 | 产量 |
| 合格数 | D201 | U32 | PLC→MES | 每件完成 | 件 | 良率 |
| 不合格数 | D202 | U32 | PLC→MES | NG判定 | 件 | 良率 |
| 当前节拍 | D210 | U16 | PLC→MES | 每件完成 | 0.1s | 节拍 |
| 节拍上限 | D211 | U16 | MES→PLC | 参数下发 | 0.1s | 预警 |
| NG代码 | D220 | U16 | PLC→MES | NG判定 | 编码表 | 分析 |
| 设备状态字 | D230 | U16 | PLC→MES | 状态切换 | 0~4 | OEE |
| 状态持续时长 | D231 | U32 | PLC→MES | 周期1s | 秒 | OEE |
| 报警代码 | D240 | U16 | PLC→MES | 报警发生 | 编码表 | 报警 |
| 报警发生时间 | D241~D242 | U32 | PLC→MES | 报警发生 | 秒计数 | 追溯 |
| 报警确认标志 | M400 | Bit | PLC→MES | HMI确认 | 0/1 | MTTR |
最后需要强调的是,数据清单不是一次性的文档。当产线增加新工位、更换产品型号或调整节拍标准时,清单应同步更新版本号,并在MES侧保留变更记录。只有清单与现场保持一致,后续的OEE统计、良率分析和报警追溯才有可靠的数据基础。