在 S7-1517 的锂电涂布机程序中,如何为涂布速度实现闭环控制(即根据实际速度反馈动态调整输出,保证速度稳定),这是涂布工艺中保证涂层均匀性的核心环节。
一、闭环控制原理与实现思路
涂布速度闭环控制的核心是PID 调节 + 编码器速度反馈:
反馈采集:通过涂布辊 / 牵引辊上的增量编码器,实时采集实际转速(换算为实际涂布速度);
偏差计算:对比设定速度与实际速度的偏差;
PID 调节:通过 PID 算法计算出需要调整的输出量(伺服驱动器的速度给定值);
输出执行:将 PID 调节后的速度值下发给伺服驱动器,动态修正速度偏差。
以下是基于 S7-1517 PLC 的完整闭环控制程序实现,集成到之前的轴控功能块中。
二、涂布速度闭环控制核心代码
1. 新增 PID 功能块与变量定义(修改 FB200)
stl
FUNCTION_BLOCK FB200 VAR_INPUT Auto_Mode: BOOL; Coating_Speed_Set: REAL; // 涂布速度设定值 (m/min) Manual_Jog: BOOL; Encoder_Pulse: INT; // 编码器脉冲输入(高速计数器) END_VAR VAR_OUTPUT Axis_Enable: ARRAY[1..4] OF BOOL; Coating_Speed_Actual: REAL; // 涂布速度实际值 (m/min) PID_Output: REAL; // PID调节后的速度给定 END_VAR VAR // 轴参数 Axis_Speed: ARRAY[1..4] OF REAL; Speed_Ratio: ARRAY[1..4] OF REAL := [0.98, 1.0, 1.02, 0.99]; // 闭环控制核心变量 Encoder_PPR: INT := 1024; // 编码器线数(脉冲/转) Roller_Diameter: REAL := 0.2; // 涂布辊直径 (m) Sample_Time: REAL := 0.1; // 采样周期 (s) Pulse_Count: DINT := 0; // 脉冲累计值 // PID功能块(西门子标准PID_Compact) FB_PID: PID_Compact; PID_Param: PID_Compact_PARAMETERS; // PID参数结构体 END_VAR // ---------------------- 第一步:速度反馈计算 ---------------------- // 高速计数器采集编码器脉冲(100ms采样一次,计算实际转速) #Pulse_Count := HSC_COUNT(1); // 读取高速计数器1的当前值 #Coating_Speed_Actual := (#Pulse_Count / #Encoder_PPR) * (#Roller_Diameter * PI) / #Sample_Time * 60; // 重置脉冲计数(用于下一次采样) HSC_RESET(1); // ---------------------- 第二步:PID参数初始化 ---------------------- IF NOT #Auto_Mode THEN // 初始化PID参数(仅在手动模式执行一次) #PID_Param.Mode := PID_MODE_AUTOMATIC; // 自动模式 #PID_Param.Cycle := #Sample_Time; // 采样周期 #PID_Param.Kp := 2.0; // 比例系数(需现场整定) #PID_Param.Ti := 1.0; // 积分时间 #PID_Param.Td := 0.1; // 微分时间 #PID_Param.ManualValue := 0.0; // 手动输出值 #PID_Param.Setpoint := 0.0; // 设定值初始化 #PID_Param.ProcessVariable := 0.0; // 过程值初始化 #PID_Param.OutputMin := 0.0; // 输出下限(0 m/min) #PID_Param.OutputMax := 50.0; // 输出上限(50 m/min) // 调用PID初始化 #FB_PID(PARAMETERS := #PID_Param); END_IF; // ---------------------- 第三步:PID闭环调节 ---------------------- IF #Auto_Mode THEN // 1. 设置PID设定值和过程值 #FB_PID.PARAMETERS.Setpoint := #Coating_Speed_Set; #FB_PID.PARAMETERS.ProcessVariable := #Coating_Speed_Actual; // 2. 执行PID计算 #FB_PID( EN := TRUE, CYCLE := #Sample_Time, PARAMETERS := #PID_Param, OUT => #PID_Output ); // 3. 基于PID输出的多轴同步速度计算 FOR i := 1 TO 4 DO #Axis_Speed[i] := #PID_Output * #Speed_Ratio[i]; #Axis_Enable[i] := TRUE; // 发送调节后的速度值给伺服驱动器(MC_MOVEVELOCITY指令) MC_MOVEVELOCITY( Axis := Axis_Coating, // 涂布轴工艺对象 Enable := TRUE, Velocity := #Axis_Speed[2], // 涂布轴速度(PID调节后) Direction := POSITIVE, Execute := TRUE, Done => , Busy => , Error => , ErrorID => ); END_FOR; ELSE // 手动模式:直接使用点动速度,无闭环 #Axis_Enable[1] := FALSE; #Axis_Enable[2] := #Manual_Jog; #Axis_Enable[3] := FALSE; #Axis_Enable[4] := FALSE; MC_MOVEVELOCITY( Axis := Axis_Coating, Enable := #Manual_Jog, Velocity := 5.0, // 手动点动速度(固定值) Direction := POSITIVE, Execute := TRUE, Done => , Busy => , Error => , ErrorID => ); END_IF;
2. 高速计数器配置(OB100 初始化块)
stl
// OB100:PLC启动时初始化高速计数器 // 配置高速计数器1为脉冲计数模式(编码器A/B相) HSC_ConFIG( HSC := 1, Mode := HSC_MODE_COUNT, Direction := HSC_DIR_UP, Preset := 0, Enable := TRUE );
3. 闭环控制参数整定说明
| 参数 | 作用 | 推荐初始值 | 调整原则 |
|---|---|---|---|
| Kp(比例) | 快速响应偏差 | 1.5-2.5 | 过小响应慢,过大易震荡 |
| Ti(积分) | 消除静态偏差 | 0.5-1.5s | 过小积分过强,过大静态偏差无法消除 |
| Td(微分) | 抑制超调 | 0.05-0.2s | 过小抑制效果差,过大易受干扰 |
| 采样周期 | 速度采集间隔 | 100ms | 过短数据噪声大,过长控制滞后 |
三、关键实现细节解释
速度反馈计算逻辑:实际速度 = (采样周期内脉冲数 / 编码器线数) × (辊周长) / 采样时间 × 60辊周长 = π × 辊直径,最终换算为 m/min 单位,保证与设定值单位一致。
PID_Compact 功能块:这是西门子 TIA Portal 内置的标准 PID 功能块,无需手动编写 PID 算法,只需配置参数即可实现闭环,适合工业现场快速应用。
抗干扰处理:实际项目中需对编码器反馈值做数字滤波(如滑动平均),避免脉冲抖动导致速度波动:
stl
// 简单滑动平均滤波(取5次采样值平均) Static Speed_Buffer: ARRAY[1..5] OF REAL; Static Buffer_Index: INT := 1; #Speed_Buffer[#Buffer_Index] := #Coating_Speed_Actual; #Buffer_Index := #Buffer_Index + 1; IF #Buffer_Index > 5 THEN #Buffer_Index := 1; END_IF; #Coating_Speed_Actual := (#Speed_Buffer[1]+#Speed_Buffer[2]+#Speed_Buffer[3]+#Speed_Buffer[4]+#Speed_Buffer[5])/5;
总结
涂布速度闭环控制的核心是编码器反馈采集 + PID_Compact 调节 + 伺服速度修正,通过实时对比设定值与实际值,动态调整伺服给定;
关键参数(Kp/Ti/Td)需根据现场设备特性整定,采样周期建议设为 100ms,同时增加滤波处理减少反馈噪声;
程序中需通过高速计数器采集编码器脉冲,结合辊径、编码器线数换算实际速度,保证单位与设定值统一。





