4、数据采集:利用PLC信号和MES系统自动采集节拍数据

做节拍提升,第一步是什么?

不是改设备,不是调参数。是先把真实数据拿到手。

我见过太多工厂,工程师拿着秒表在产线边上蹲一天,记下来的数据跟实际差一大截。为什么?人眼反应有延迟,而且工人看到你在计时,动作都会变快——这叫“霍桑效应”。

所以我的习惯是:能自动采集,绝不人工测量

4.1 为什么必须搞自动数据采集?

说白了,人工采集有三个硬伤:

  • 精度不够:秒表精度0.1秒,PLC信号采集精度可以到毫秒级
  • 样本量小:人工一天测50个循环就算多了,系统可以24小时全量采集
  • 无法追溯:记在本子上的数据,过两周就不知道当时发生了什么异常

我在一个汽车零部件项目里遇到过这种情况。客户说节拍是45秒,我让MES拉了一个月的数据,实际平均节拍是52秒。为什么差了7秒?因为人工只测了正常生产时段,而换刀、清屑、等待物料这些时间全被“优化”掉了。

核心观点:没有自动数据采集,节拍改善就是“盲人摸象”。你改的可能是假问题,验证的可能是假效果。

4.2 数据采集的两条路径

实际项目中,我主要用两种方式采集节拍数据。你根据自己工厂的自动化水平选就行。

路径一:PLC信号直接采集

这是最可靠的方式。PLC里本来就有每个工位的动作信号——气缸到位、电机启停、传感器触发。我们只需要把这些信号的时间戳抓出来。

具体怎么做?

  1. 确定关键信号:比如“工件到位传感器”的上升沿和下降沿
  2. 在PLC程序里加一段计时逻辑:记录每次信号变化的时间
  3. 通过OPC UA或Modbus TCP把数据传给上位机

举个简单例子,在西门子S7-1200里,我习惯这样写:

// 节拍计时功能块
// 当工件到位传感器(I0.0)上升沿时,记录当前时间
// 当工件离开传感器(I0.0)下降沿时,计算节拍

IF "Sensor_Workpiece" AND NOT "Last_Sensor_State" THEN
    // 上升沿:开始计时
    "Start_Time" := T_CONV(IN := T_PLC_MS());
ELSIF NOT "Sensor_Workpiece" AND "Last_Sensor_State" THEN
    // 下降沿:结束计时,计算节拍
    "Cycle_Time_MS" := T_CONV(IN := T_PLC_MS()) - "Start_Time";
    // 把节拍数据写入DB块,供上位机读取
    "DB_Data".Cycle_Time := "Cycle_Time_MS";
END_IF;

"Last_Sensor_State" := "Sensor_Workpiece";

我的经验:PLC采集的原始数据不要做任何滤波或平均。把毫秒级的原始值全部上传,让MES或数据分析系统去处理。为什么?因为异常值里往往藏着问题——比如某次节拍突然变成200秒,那可能是设备故障的前兆。

路径二:MES系统自动采集

如果工厂已经有MES,那就更简单了。MES本身就在记录每个工单的开工时间、完工时间、数量。通过这些数据,我们可以算出“宏观节拍”。

MES采集节拍的逻辑:

  • 单件节拍 = (完工时间 - 开工时间) / 生产数量
  • 线体节拍 = 最后一个工件下线时间 - 第一个工件下线时间,再除以总数量
  • OEE节拍 = 计划运行时间内的实际产出 / 计划运行时间

我建议把这两种方式结合起来用:

采集方式 精度 覆盖范围 主要用途
PLC信号 毫秒级 单个工位 微观分析、瓶颈识别
MES系统 秒级 整线/整车间 宏观监控、产能核算
两者结合 全量 全范围 从微观到宏观的完整视图

4.3 数据采集的架构设计

嗯,这里要画一张图,帮你理清数据怎么从设备流到分析系统。

自动化产线节拍数据采集架构 设备层(PLC/传感器) 信号采集:气缸到位、电机启停、传感器触发、扭矩数据 采集频率:1ms - 10ms 边缘计算层(工业网关/边缘服务器) 协议转换:OPC UA、Modbus TCP、Profinet → MQTT/RESTful 数据清洗:去重、补零、时间戳标准化 平台层(MES/SCADA/数据库) 数据存储:时序数据库(InfluxDB)、关系型数据库(SQL Server) 业务逻辑:节拍计算、OEE统计、报警规则 应用层:节拍看板、数据分析、改善决策

这张图我用了很多年。核心思路就是:数据从设备出来,经过边缘处理,进入平台存储,最后变成可用的信息。每一层都有它的职责,别想着一步到位。

4.4 避坑指南:数据采集的常见问题

做了这么多年自动化,我在数据采集上踩过的坑,说出来都是泪。分享几个最典型的:

我曾经犯过的错:

  • 时间不同步:PLC用的是PLC时间,MES用的是服务器时间,两个时间差了几秒钟。结果节拍数据对不上,分析了一周才发现是时间戳的问题。解决方案:所有设备统一用NTP对时,精度到毫秒。
  • 信号抖动:传感器在工件边缘来回触发,导致PLC记录了一个0.1秒的“节拍”。后来我在程序里加了20ms的去抖滤波,才把假数据过滤掉。
  • 数据量太大:一个工位每秒采集1000个点,10个工位一天就是8.6亿条数据。数据库直接崩了。后来改成“变化采集”——只有信号变化时才记录,数据量降到原来的1%。

4.5 数据采集后的第一件事:验证数据质量

数据采上来了,别急着分析。先问自己三个问题:

  1. 数据完整吗?——有没有漏采的时段?比如夜班或者周末
  2. 数据准确吗?——拿秒表抽测10个循环,跟系统数据对比,误差在5%以内才算合格
  3. 数据一致吗?——PLC的“节拍”和MES的“节拍”是不是同一个定义?

我的习惯:数据采集系统上线后,先跑一周的“观察期”。这一周不做任何改善,只验证数据质量。等数据可靠了,再开始分析瓶颈、制定改善方案。你想想看,如果数据本身是错的,后面的分析再漂亮也是白搭。

好了,数据采集这块就聊到这儿。记住一句话:自动采集是节拍改善的基石,没有数据,一切都是空谈

本章要点回顾:

  • 自动数据采集比人工测量更准、更全、更可追溯
  • PLC信号采集适合微观分析,MES系统采集适合宏观监控
  • 数据采集架构分四层:设备层→边缘层→平台层→应用层
  • 时间同步、信号去抖、数据量控制是三个常见坑
  • 数据质量验证是分析前的必要步骤

专注资料整理