电子皮带秤自动配料系统,加上PID模糊控制,是我这几年在工业现场接触最多的组合之一。S7-200虽然早已停产,存量设备却遍布水泥、烧结、选矿、饲料、化工的配料车间,稳定得让人舍不得换。这篇文章只谈一件事:怎么在S7-200这台老而稳的PLC上,把PID控制和模糊控制结合到电子皮带秤配料系统里,把流量波动压下来,把配料的稳定性提上去。
先交代清楚系统定位。电子皮带秤自动配料系统解决的是“连续定量给料”问题:用一条带秤体的皮带连续计量物料,通过调节给料机频率或振幅控制下料量,让皮带秤测到的瞬时流量始终贴着配方设定的目标值跑。S7-200在这里干的是核心控制器的活,接模拟量称重信号、数字量测速信号,算瞬时流量和累计量,再给变频器或振动给料机输出模拟量控制信号。适合参考这个方案的人群也比较明确:搞PLC程序维护的电气工程师、做配料系统成套改造的调试人员,以及刚接触配料闭环控制的自动化专业学生。
1. 先从整体方案说起:这套配料系统到底是怎么控的
1.1 电子皮带秤配料系统的工艺组成与信号链
很多人一听到“自动配料系统”就觉得复杂,实际上拆开看就是三大段:原料段、计量段、执行段。
原料段通常是料仓加给料机构,常见的是螺旋给料机、电振给料机或叶轮给料机。料仓里的物料被连续排出,落到下方的电子皮带秤上。计量段就是皮带秤本体:托辊上的称重传感器加上测速传感器,共同算出皮带上物料通过的瞬时量。执行段就是变频器,根据PLC给的模拟量信号调节给料机转速或振幅,最终让下料量跟随设定值。
信号流向是一条典型闭环:
称重传感器/测速传感器 -> PLC模拟量/高速计数输入 -> PLC内算瞬时流量 -> PID/模糊控制器运算 -> 模拟量输出 -> 变频器 -> 给料机 -> 实际下料量这里要注意,不少老项目把测速信号接到PLC的高速计数器通道,例如用旋转编码器或测速滚筒上的脉冲信号。也有的皮带秤自带称重仪表,仪表把瞬时流量通过RS485发给PLC,这时PLC不需要自己算流量,但控制逻辑里面做模糊控制的关键输入——流量偏差和偏差变化率,还是要自己根据实时流量来算。
1.2 控制回路中的“迟滞”为什么是最大麻烦
配料系统如果只是“称一称、调节一下”这么简单,那用普通PID就够了。真正难的是这套系统存在巨大的纯滞后环节。
举个直观的例子。螺旋给料机从变频器频率变化,到螺旋转速稳定,需要几秒;从螺旋转速变化,到物料被推出来并落到皮带上形成稳定料流,又要几秒;落在皮带上的物料被送到皮带秤称重区,还要一段距离。这几个时间加起来,可能就有5到15秒的滞后。
用生活场景类比一下:你洗澡时调水温,热水管很长,你拧了阀门,要过一会儿水温才变,太烫了你再拧回去,结果等一会儿又变凉了。如果没有经验地乱拧,水温永远在烫和凉之间振荡。皮带秤配料也是如此。纯PID在这种大滞后系统里,增益调大一点就振荡,调小一点又跟不上设定值变化,这就是为什么要在PID基础上引入模糊控制。
2. PID与模糊控制如何分工:不是二选一,而是打配合
2.1 纯PID在皮带秤上的四个“罩门”
我在现场调过的皮带秤配料回路,纯PID控制暴露出四个典型问题,这也是设计模糊PID的直接动机。
第一,给料机存在死区。电振给料机特别明显:频率加到一定值才开始振动,物料才开始“流”出来;而螺旋给料机在料仓蓬料时也会出现“电机转但不下料”的短暂死区。死区会带来严重的积分饱和,PID积分项为了消除偏差不断累积输出,一旦物料突然下来,流量立刻冲过设定值。
第二,物料特性时变。同一台设备,今天配混合料,明天配矿粉,物料的堆密度、含水率一变,给料特性就跟着变。固定一组PID参数不可能适应所有物料。
第三,大扰动频繁。皮带跑偏、料仓中物料压实程度变化、下料口堵料后突然疏通,这些扰动是宽频的,PID只有一个输出通道,很难同时兼顾抗扰动和跟随性。
第四,纯滞后造成的相位滞后。滞后时间与对象时间常数之比太大时,传统PID的稳定裕度急剧下降。这个在上一节已经详细说过。
2.2 模糊PID两条路:改参数还是改给定值
模糊PID在工程上有两种实现路线,很多人把它们混为一谈,其实差别很大。
第一种路线是“参数自整定”路线。模糊控制器根据当前偏差E和偏差变化率EC,实时调整PID回路里面的比例增益、积分时间、微分时间。比如系统刚启动时偏差大,模糊规则就适当加大比例增益,让响应快一点;等接近设定值时,再减小比例增益、加大积分时间,防止超调。这条路效果好,但要注意修改PID参数时机的安全性,特别是积分时间的突变可能让输出跳变。
第二种路线是“给定值修正”路线。模糊控制器不碰PID内部参数,只根据偏差和偏差变化率算出一个修正量,叠加到流量设定值上,然后把这个修正后的设定值送给PID回路。PID还是原来那组参数,但实际跟踪的目标被模糊控制器动态调整。比如系统下垂时,模糊控制器判断偏差变化率还在负方向加速,就会把给定值暂时压低一点,相当于提前“刹车”,抑制超调。
我个人在S7-200上更推荐第二种路线。原因很实际:现场的维护人员对PID向导生成的回调表结构往往不熟悉,直接改增益和积分时间的存储字容易误操作;而给定值修正只是一个加法运算,程序逻辑清晰,出了问题也好排查。而且S7-200上PID向导本身有抗积分饱和功能,配合给定值修正,动态性能已经很够用。
2.3 模糊规则表怎么定才不脱离现场
确定模糊规则是整个设计中最“凭经验”的环节。很多教材讲隶属函数、模糊推理、重心法解模糊,但在S7-200这种小型PLC上,我更建议直接离线生成查询表。
先把偏差E和偏差变化率EC量化成7个语言值:负大NB、负中NM、负小NS、零ZO、正小PS、正中PM、正大PB。E用实际流量减去设定流量来算,单位可以用百分比或直接用量纲(吨/小时);EC是本次偏差减去上次偏差再除以采样周期。
然后再确定输出量,也就是PID设定值修正量SP_trim的语言值。规则的核心逻辑只有四条,全是老师傅的直觉:
- 偏差大且还在往负方向变大:流量严重低于设定,必须大幅提高修正量。
- 偏差大但已经往正方向回归:说明响应开始见效,修正量适度保持或开始回收。
- 偏差小但偏差变化率为负向较大:要提前防止流量继续下滑,修正量适度增加。
- 偏差接近零且变化率平稳:修正量归零,交给PID做细调。
我把常用规则整理成一个7×7的表,规则格子里填的是SP_trim的量化输出。输出范围可以设定为设定值满量程的±3%到±5%,这个范围根据现场允许的动态偏差确定。如果配料允差要求±1%,修正量输出范围取±3%就比较合适,太低起不到作用,太高又会造成设定值振荡。
3. S7-200上的落地实现:查表法比在线模糊推理更实际
3.1 程序总体结构与关键寄存器规划
S7-200的程序结构其实很简单,OB1就是主循环,按扫描周期执行。因为CPU本身运算能力和存储空间有限,在线做完整的模糊推理七个步骤会占用大量扫描时间,所以工程上最成熟的做法是离线把模糊规则表算好,用数据块存在V区,运行时直接查表。
程序我通常分成四个模块:
- 称重计算子程序:读EM231模拟量输入通道的AIW0,完成零点扣除、标定系数换算、瞬时流量计算,顺便做一阶惯性滤波。
- 模糊修正子程序:计算偏差和偏差变化率,量化到[-3,3]区间,查模糊规则表得到输出修正量。
- PID控制子程序:调用S7-200自带的PID向导生成的子程序,把修正后的设定值传给PID回路。
- 输出限幅与手自动切换子程序:防止模拟量输出超出变频器工作频率范围,并支持手动模式调试。
寄存器规划上,我习惯把模糊控制相关的变量集中在V区连续地址,方便监控和修改。比如VW0做当前流量,VW2做设定值,VW4存偏差,VW6存偏差变化率,VW8存模糊修正输出。PID向导生成的回路表从VB0开始可能与我自己的变量冲突,所以一个实用技巧是:先开PID向导,再规划其他V区变量,避免重叠导致不明故障。
3.2 模糊表查询的间接寻址实现
模糊表是49个整数元素,按行优先排列成7×7矩阵。偏移量的计算方式为:偏移 =(行索引×7 + 列索引)× 2。行索引对应偏差E的量化值,列索引对应偏差变化率EC的量化值,都映射到0~6的整数。
S7-200的STL支持间接寻址,可以用这样的思路实现查表:
// 假设E_INDEX存入VW10,EC_INDEX存入VW12 // 模糊表起始地址为VB1000,每个元素为16位整数 LD SM0.0 MOVW VW10, VW20 // 行索引 MUL 7, VW20 // 行偏移 = 行索引 × 7 ADD VW12, VW20 // 总索引 = 行偏移 + 列索引 SLD 3 // 总字节偏移 = 索引 × 2,这里实际用双字移位处理 MOVD &VB1000, VD30 // 取表起始地址 + VD30, VD20 // 起始地址 + 字节偏移 MOVW *VD30, VW40 // 读取模糊输出这个片段表达的是STL思路,实际使用时要注意SLD指令操作数的位数和间接寻址指针必须用双字变量。如果对间接寻址不熟,还有一种土办法:用49个比较指令写7×7的查表逻辑,程序长一点但逻辑直白,我在老设备上甚至见过这么干的,稳定可靠,只是可维护性差。
3.3 PID回路表参数更新与跟踪
S7-200的PID向导会生成PID0_INIT子程序,回路表参数存在V区,包括设定值SP、过程变量PV、比例增益K、积分时间Ti、微分时间Td等。不同版本Micro/WIN生成的回路表偏移地址略有差异,调试时务必在Micro/WIN的“状态图”里查看PID向导生成的符号名,确认增益和积分时间对应的VW地址。
如果采用“参数自整定”路线,就得把模糊查表得到的系数转换成实际增益并写回回路表地址。例如基础比例增益Kp_base为2.0,模糊系数ΔKp为0.25,那么执行指令让新增益等于2.5再写入增益地址。要注意写入的模拟量形式和PID向导要求的格式,增益通常是浮点数,在V区占4个字节,而积分时间可能是整数格式。写错了轻则参数不生效,重则PID输出剧烈跳动。
如果采用我更推荐的“给定值修正”路线,则完全不碰这些参数。只需在调用PID0_INIT之前,把“SP_actual”这个变量更新为“SP_base + SP_trim”,再将SP_actual写入PID向导指定的设定值地址。这样好处是现场维护人员可以用一个寄存器实时观察修正量的变化,系统在任何扫描周期都知道自己在干什么。
3.4 抗干扰与工程量转换的现场细节
S7-200的模拟量输入模块EM231采集称重传感器信号之前,一定要加隔离信号或者做好屏蔽接地。称重传感器输出是毫伏级信号,现场变频器驱动的强电线路很容易在AIW0上耦合出噪声。常见做法是传感器电缆用双屏蔽线、屏蔽层单端接地,PLC柜内加信号隔离器。
流量计算有个工程细节容易被忽略:皮带秤测的是“每米物料重量”与“皮带速度”的乘积,但称重传感器感受到的是整段称重域上的物料总和,需要根据有效称重长度换算。例如称重域有效长度1.2米,传感器输出的毫伏信号代表1.2米长度的物料总重,那么单位长度重量等于总重除以1.2。再乘以当前皮带速度,才能得到瞬时流量。这个换算系数做错的话,流量显示可能差好几倍。
滤波也不能丢。我用的是“限幅滤波加一阶惯性滤波”的两级组合:先判断当前采样值与上一个采样值之差是否超过死区阈值,超过则认为受到脉冲干扰,直接丢弃;没超过则进入一阶惯性滤波,滤波系数取0.15到0.3之间。太大会让流量响应迟钝,太小则滤不掉皮带跳动引起的噪声。这个滤波系数,实际上也是模糊控制器采样周期选择的依据。
4. 现场调试排障与参数速查
4.1 先分清故障来源:是称重不准还是控不准
电子皮带秤配料系统调试时最容易踩的坑,是把控制问题误判成控制参数问题。流量波动大,先别急着调PID参数,先判断是不是称重信号本身就在波动。
一个非常简单的判别方法:把给料机设定到固定频率,保持手动模式,让物料稳定流动,然后观察流量曲线。如果手动情况下流量已经很波动,那问题在机械或称重侧,比如皮带跑偏、托辊粘料、称重传感器受力不均、测速信号不稳。这种情况调PID参数没用,越调反而越乱。
只有手动状态下流量曲线平稳,切换到自动后才出现超调、振荡或长期偏差,才值得动PID和模糊控制器的参数。这个排查顺序,我建议写进现场调试标准化流程,能省掉大量无效工作。
4.2 三个高频问题的排查实录
第一个高频问题是“投料瞬间大幅度超调”。现场表现为启动配料后,实际流量冲过设定值25%以上,再慢慢回落。分析过程发现,螺旋给料机在给料启动前管内是空的,启动后前几秒实际下料量很小,PID一看流量不足就拼命加大输出,积分快速累积;等物料填满螺旋管后,下料量突然上来了,但PID输出还在高位,于是直接冲过头。
解决办法有两个层次。第一层是程序层面:启动时先给出一个基于物料特性的前馈频率,不依赖PID从零开始摸索。前馈值用“设定流量除以给料机标定系数”估算,比如标定得到每赫兹对应0.08吨每小时,那么设定3吨每小时时前馈频率约38Hz。第二层是模糊修正层面:当偏差大且偏差变化率正大时,模糊修正量要果断设置为负值,提前给PID设定值“踩刹车”。
第二个高频问题是“稳态运行周期性锯齿状波动”。流量曲线像锯齿波,周期通常几十秒。这类问题多数是纯滞后引起的振荡。我记得有一次排查到深夜,最终发现测速滚筒打滑,皮带速度信号周期性偏低,导致瞬时流量计算值虚高,PID误以为下料多了就降输出,下料量真的少了之后流量又跌下来,形成锯齿波。换掉打滑的测速滚筒并加装防偏挡板后,曲线立刻平直。所以锯齿波不一定就是控制参数问题,机械因素优先级更高。
第三个高频问题是“更换物料品种后调节效果变差”。这几乎一定会出现,因为物料堆密度变了,同样的螺旋转速下料量就不同。这时模糊控制器的好处就体现出来了:不需要重新整定PID参数,只需要修改模糊表输出修正量的比例系数,或者修改前馈标定系数。我一般在上位做一页“物料特性参数表”,每个品种占用一条记录,切换配方时自动调用对应的前馈系数、模糊输出比例和PID基础参数,省了很多现场干预。
4.3 可以抄作业的调试参数速查表
在实际项目调试中,我习惯先把关键参数定在一个安全范围,再根据曲线微调。这里给出我常用的初始参数表,复制前记得结合自己设备实际。
| 参数项 | 推荐初始值 | 调整说明 |
|---|---|---|
| PID采样周期 | 1秒 | 给料响应慢可延长到2秒,太快噪声大 |
| 基础比例增益Kp | 1.2~2.0 | 流量波动大则减小,响应慢则增大 |
| 基础积分时间Ti | 3~6分钟 | 注意S7-200向导中积分时间单位是分钟 |
| 微分时间Td | 0(关闭) | 皮带秤噪声多,微分慎开 |
| 模糊表输出比例系数 | 满量程的3% | 偏差大时上限可放宽到5% |
| 偏差量化死区 | 设定值的0.5% | 防止频繁调节 |
| 输出限幅高频 | 45Hz | 避免变频器过载 |
| 输出限幅低频 | 5Hz或给料机启动频率 | 避开死区 |
| 前馈标定系数 | 每赫兹对应流量 | 用实物标定或挂码标定获得 |
特别注意积分时间和前期滤波系数的配合。滤波时间常数如果取得大,流量信号相位滞后就大,PID积分时间要相应加大,否则回路上容易产生低频振荡。这是很多工程师调了很久都找不到原因的隐性坑。
结尾:我最后再聊几句实际经验
这套S7-200上的PID模糊控制配料方案,我前后在四五个项目里落地过。最大的体会是:模糊控制在配料系统里的本质作用,不是替代PID,而是给PID加了一个“带经验的调校员”。流量偏差大而且还在恶化时,它提前修正设定值;偏差回到零附近时,它主动收手,把控制权交还给PID。说白了就是把老师傅的调阀逻辑翻译成了查询表。
我的建议是第一次做这个方案的朋友,先别追求复杂的模糊推理算法。从给定值修正法入手,先把偏差和偏差变化率量化好,把49格查询表填上,跑通流程,再逐步优化规则。S7-200的可编程控制器虽然老,但它结构清晰、指令稳定,程序写在里面跑十年都不会乱跳,对于长期运行的配料产线来说是件好事。
还有个小技巧:在调试阶段把模糊修正量单独引到触摸屏上显示,让操作工能看到控制器“在想什么”。一次我们现场操作工发现流量偏低但修正量一直没起作用,原来是他把配方设定值改了,但模糊修正的基准值没有联动更新。后来我把基准值改为从配方画面直接读取,这类问题再没发生过。调试调试,很多时候不是算法不够高级,而是现场逻辑没串通。