上个月去一个饮料厂做售后,他们的灌装车间主任拉我到一边,指着灌装线说:”老张你看,这每瓶饮料的重量跟过山车似的,质检那边天天投诉,我头都大了。”
我过去一看,确实。500ml的瓶装水,轻的只有492克,重的能到510克。虽然灌装机本身标称精度±5克,但实际跑起来因为供料压力波动、瓶子自重偏差、灌装嘴磨损这些因素,实际误差比标称值大多了。关键是,他们每天灌十几万瓶,轻了违规(净含量不够要被罚),重了亏本(多灌了就是多送水),两头都难受。
我给他出的方案是:用PLC做实时称重闭环补偿。说白了就是灌装后马上称一下实际重量,算出偏差,然后自动调整下一瓶的灌装参数。
做完了之后效果怎么样?精度从±5克干到了±1克以内,轻瓶和重瓶基本消灭了。今天就写写这个项目的技术细节,给做灌装行业的兄弟参考。
为什么传统灌装机会有这么大误差
搞清楚这个问题之前,得先知道灌装机是怎么控制灌装量的。
最常见的灌装方式是计时灌装——设定一个固定的灌装时间,通过灌装嘴的流量是稳定的,那么时间×流量=体积。再根据密度换算成重量。
理想很丰满,现实很骨感。问题出在这几个地方:
- 供料压力波动:储料罐的液位会变,泵出口压力会波动。压力变了,同样的时间灌进去的液体量就不一样。
- 灌装嘴磨损:灌装嘴用久了内径会变大,流量就大了。
- 瓶子自重偏差:每个PET瓶的重量不一样,±1-2克的偏差很正常。
- 泡沫和飞溅:尤其是碳酸饮料和啤酒,灌装过程中产生的泡沫会影响最终的液位。
所以传统的开环控制,你设定了灌装时间,天知道实际灌了多少。
方案思路:动态称重+闭环补偿
解决方案其实不复杂,就是在灌装线后段加一台动态检重秤(dynamic checkweigher),灌好的瓶子经过检重秤时,PLC实时读取实际重量,跟目标重量比对,算出偏差量,然后自动修正下一瓶的灌装参数。
系统架构如下:
PLC主控 → 灌装阀(控制灌装时间/流量)
↓
灌装完成
↓
动态检重秤(读取实际重量)
↓
PLC计算偏差 = 目标重量 - 实际重量
↓
PID算法调整下一瓶灌装参数
↓
进入下一循环
这里面最核心的其实是两个技术点:高速准确的动态称重和带前馈的PID补偿算法。
动态称重的难点
动态称重跟静态称重完全不一样。静态称重你把东西放秤上等它稳定了读数就行,但灌装线上瓶子是高速移动的,一般速度在每分钟60-120瓶之间。也就是说,你只有不到1秒钟的时间获取一个准确的重量读数。
瓶子在传送带上通过秤台的时候,会产生振动、冲击、倾斜等各种干扰。如果不做处理,PLC读到的重量值会在真实值上下大幅跳动。
我的处理方法:
- 称重传感器选择:选了德国HBM的单点式称重传感器,量程3kg,精度0.02%。国产的我也试过,线性度和温漂差一些。
- AD采样模块:用PLC的高速模拟量模块(S7-1200的SM1231 AI模块,16位精度),采样频率设到100Hz。
- PLC内做数字滤波:在PLC程序里写了滑动平均滤波,取瓶子通过秤台期间(约600ms)的50个采样点,去掉最高和最低的10%,算平均值。这部分用SCL语言写的,比梯形图简洁很多。
这个滤波做下来,动态称重的精度能稳定在±0.3克以内,足够做闭环补偿用了。
PID补偿算法的落地
有了准确的实际重量,接下来就是怎么调灌装参数了。
我一开始想得简单:偏差多少就补多少。实际重量490克,目标500克,那就多灌10克。结果发现不行——反馈太滞后了。因为瓶子从灌装到称重大概有2-3秒的延迟(经过输送带的距离),等发现偏差再调,已经是两三秒之前的问题了。
后来我改成了增量式PID+前馈补偿的方案:
- 增量式PID:不是直接输出灌装时间,而是输出灌装时间的修正量。每次只调一点点,不会震荡。
- 前馈补偿:根据供料压力传感器(在灌装总管上装了一个压力变送器)实时预测流量变化。压力上升了,说明流量会变大,提前减少灌装时间。相当于让PLC”提前知道”问题,不等偏差出现了再补。
前馈这块是核心技术。简单说就是:PLC每100ms读一次供料压力值,通过一个”压力-流量”换算系数,预估当前的瞬时流量。然后用这个流量值修正灌装时间。
公式不复杂:
灌装时间 = 目标重量 / (密度 × 基准流量 + Kp × 压力偏差) 其中: - 基准流量:标定好的平均流量值 - 压力偏差 = 当前压力 - 标定压力 - Kp:压力补偿系数(通过实验标定)
调参的过程确实比较磨人,前后调了差不多两天。先把PID的P值设小一点(防止超调),然后慢慢增加I值(消除稳态误差),最后加一点D值(抑制振荡)。
大致的调参逻辑:
- 如果灌装重量整体偏轻——加大基础灌装时间
- 如果重量忽轻忽重但是有规律——调整前馈系数,看是不是压力波动引起的
- 如果重量随机跳动——检查称重滤波参数,加大去极值的比例
- 如果灌装曲线来回震荡——降低PID的P值或者I值
上线效果
系统调通了之后,我让车间里跑了1000瓶做统计。结果是这样的:
- 没有补偿前:平均重量502.3克,标准偏差1.8克,不合格率7.2%
- 加上前馈+PID补偿后:平均重量500.1克,标准偏差0.3克,不合格率0.1%以下
车间主任笑得合不拢嘴。他说光”多灌的”那一部分,每天就能省下几百块的原材料。而且质检那边再也不投诉了。
后来我又给这个系统加了一个功能:每灌装1000瓶自动做一次校准,把检重秤的读数跟人工抽查的天平读数做对比,自动修正秤的漂移。这样系统的精度就更稳定了。
一点心得
这个项目做下来,我有几个感触:
第一,PLC能做的事情比我们想象的多。很多人觉得PLC就是做逻辑控制、连锁保护的,但S7-1200/1500这类中高端PLC的运算能力做简单的信号处理和PID控制绰绰有余。关键是算法要在PLC里跑,不能依赖上位机——因为上位机可能有延迟,而且断网就完了。
第二,闭环控制的前提是测量。没有准确可靠的检测手段,闭环就是空谈。这个项目里最花时间的不是写PLC程序,而是搞定动态称重的精度问题。
第三,别一开始就追求完美。先把基本功能跑通——动态称重+偏差修正,能控制到±2克就是胜利。然后一步步优化到±1克、±0.5克。一口吃不成胖子。
你们做灌装行业的兄弟,有没有遇到过类似的精度问题?用什么方案解决的?欢迎评论区交流。