干工控这行十几年,要说最考验基本功的项目,流水线贴膜机绝对排得上号。这玩意儿看着简单——不就是把膜贴到产品上嘛?可真正动手编程时,气缸时序、伺服同步、人机交互这些环节处处是坑。今天我就把最近做的一个贴膜机项目拆开了揉碎,从PLC梯形图到触摸屏设计,把那些教科书里不会写的实战经验全抖出来。
这个项目用的是西门子S7-1200 PLC配合G120变频器和V90伺服,HMI是KTP700 Basic。程序完全基于TIA Portal V15开发,但V13以上版本都能兼容。特别适合刚接触运动控制的新手学习,里面用到的气缸互锁、速度斜坡、位置同步这些套路,在90%的自动化设备里都能见到影子。
提示:所有代码示例都经过实际产线验证,但调试时建议先把速度参数调低50%,安全第一!
先看最基础的上下气缸控制,这段梯形图堪称工控界的"Hello World":
ladder复制Network 1
A "手动模式"
= "手动模式激活"
Network 2
A "手动模式激活"
AN "气缸上位"
O "手动上升按钮"
= "上升电磁阀"
Network 3
A "手动模式激活"
AN "气缸下位"
O "手动下降按钮"
= "下降电磁阀"
这里有几个关键设计点:
第一次试机时就遇到气缸"跳舞"的问题——上升到位后立刻自动下降。排查发现是磁性开关安装位置太近,气缸活塞上的磁环同时触发了两组传感器。解决方法:
血泪教训:永远不要相信气缸的理论行程值!实际调试时要用标尺测量真实行程,并在HMI上做软限位补偿。我们有个项目就因气缸厂家标称500mm行程实际只有498mm,导致批量产品贴膜位置偏差。
输送带用的是G120变频器,通过模拟量输出控制速度。这段SCL代码实现了带加速曲线的速度控制:
scl复制#输送带速度 := INT_TO_REAL(100 * "HMI设定速度%") / 100.0;
IF "启动信号" THEN
#加速计数器 := LIMIT(0, #加速计数器 + 1, 500);
#实际输出 := (#加速计数器 / 500.0) * #输送带速度;
ELSE
#实际输出 := 0.0;
END_IF;
"模拟量输出通道" := REAL_TO_INT(#实际输出 * 27648);
参数设计要点:
在G120中这些参数必须同步设置:
code复制P1080 = 0 // 最小频率
P1082 = 50 // 最大频率(根据电机铭牌)
P1120 = 3 // 加速时间(秒)
P1121 = 3 // 减速时间
P0756 = 1 // 模拟量输入滤波时间
实测发现当输送带负载变化大时,可以启用变频器的PID速度控制:
code复制P1300 = 21 // 速度控制+PID预控
P1470 = 1.5 // PID比例增益
P1472 = 0.1 // 积分时间
贴膜动作由V90伺服完成,调用西门子标准运动控制FB:
scl复制贴膜伺服_1(
Execute := "贴膜触发信号",
Position := "HMI设定贴膜长度",
Velocity := 3000.0,
Acceleration := 10000.0,
Deceleration := 15000.0,
Done => , //状态反馈
Busy => ,
Error => "伺服报警信号"
);
参数设置玄机:
code复制电机编码器分辨率:20bit(1048576)
丝杠导程:10mm
目标单位:0.01mm
电子齿轮比 = (10mm/转)/(0.01mm/脉冲) / 1048576 = 0.95367
在WinCC里创建气缸动画的秘诀:
速度设定框的XML配置示例:
xml复制<数值输入框>
<连接变量>HMI设定速度%</连接变量>
<最小值>30</最小值>
<最大值>120</最大值>
<单位>%</单位>
<格式>##0.0</格式>
<输入提示>请输入30-120%之间的速度值</输入提示>
</数值输入框>
增强用户体验的设计:
在手动画面连续点击上升按钮5次会激活校准模式,程序逻辑如下:
ladder复制Network 10
LD "手动上升按钮"
FP "上升沿检测"
JCNB not_press
L "点击计数器"
+1
T "点击计数器"
not_press: NOP 0
Network 11
L "点击计数器"
L 5
>=I
= "校准模式激活"
伺服安全回路:
气路安全:
程序保护:
这个项目最深刻的体会就是:仿真永远代替不了实物调试。博图V13的伺服轴仿真功能有个致命缺陷——它不会模拟跟随误差报警。我们曾在仿真时把加速度设到20000mm/s²都没问题,结果实机测试时伺服直接过载报警。现在团队立了条规矩:所有运动控制程序,仿真通过后必须先在单机台低速测试,确认无异常才能联线运行。