冲床依靠曲轴编码器角度做判停;转速越高,电磁阀、气路、制动器机械滞后带来的角度误差越大。很多项目直接在主任务扫描判断角度,高速冲次下停止位置离散、不准。硬件前提:编码器必须接入1756‑HSC 高速计数模块,禁止普通 DI 口读编码器;输出优先晶体管 DO 或 SSR,禁止继电器输出模块驱动离合器 / 制动器电磁阀。
一、任务架构是第一关键点
❌错误做法
把曲轴角度判断、离合器制动器输出逻辑放在 Continuous(连续任务)。连续任务扫描周期受其他程序、通信、标签读写影响,周期抖动,高速时,一次抖动就会转过很大曲轴角度,停止位置离散。
✅优化架构
建立独立 Periodic 周期性任务,周期 1ms(根据冲床最高转速,建议 0.5~1ms)
把角度读取、判停逻辑、离合器 / 制动器输出逻辑全部放在这个固定周期任务。
任务优先级调高,高于普通 IO、HMI、通信任务。
禁止在该任务内做 HMI 写、日志记录、大量字符串处理,减少任务抖动。
Continuous 主任务:只做模式选择、报警、HMI 交互、安全逻辑,不做角度判停。
安全急停、安全门信号:使用安全任务或者安全 IO,不要依赖普通周期任务。
注意:HSC 模块的计数值,模块硬件内部计数,背板只周期性刷新标签;不要自己用普通 DI 做软件计数。
二、信号处理:曲轴角度、转速计算
HSC 读取原始脉冲,换算成曲轴实际角度 0‑360°。
在 1ms 周期任务内实时计算实时曲轴转速 RPM。
转速是做动态制动提前补偿的核心,不能只用固定补偿角度。
编码器信号做合理性校验:
转速突变超限、角度跳变,判定编码器故障,立即切断离合器,安全停机。
角度做环形处理(0‑360 循环,不要出现负数溢出)。
标签示例:
Crank_Angle:曲轴角度 RealCrank_Speed_RPM:实时转速 DINTHSC_Pulse:高速计数值
三、离合器与制动器时序逻辑(核心优化)
冲床气动离合器制动器存在物理时序:
PLC 输出 → 电磁阀动作 → 气路充放气 → 摩擦片建立扭矩,存在几十 ms 的固有滞后。转速越高,同样毫秒滞后对应的曲轴转过角度越大。
关键概念:动态提前制动角度
不要写死固定角度:IF Crank_Angle >= Stop_Angle THEN 切断离合器+上制动器。
低速尚可,高速就滞后超程。
公式思路:
提前触发角度 = 目标停止角度 − 【系统滞后对应的曲轴角度】系统滞后角度 = 实时转速 × 系统总滞后时间 (ms) × 系数
示例逻辑伪代码(周期性任务内执行)
plaintext
// 总系统滞后时间:PLC输出→制动器有效扭矩的总时间,现场实测标定,例如45ms System_Lag_ms := 45; // 根据转速算出这段时间曲轴会转多少度 Lag_Angle := Crank_Speed_RPM * System_Lag_ms / 60000.0 * 360.0; Trigger_Angle := Target_Stop_Angle - Lag_Angle; IF Crank_Angle >= Trigger_Angle AND NOT Stop_Triggered THEN Clutch_Output := OFF; // 断开离合器 Brake_Output := ON; // 投入制动器 Stop_Triggered := TRUE; END_IF;
⚠实际项目还要加上下限,防止转速极低时补偿角度过大。例如补偿角度限制 0~30°。
离合器 / 制动器互锁时序
严禁离合器断开和制动器合上完全同时输出;
方案:离合器先断开,经过一小段固定延时(气路泄压时间,现场标定 5‑20ms),再输出制动器。
延时不要用 TON(TON 指令是任务周期为单位,抖动);在 1ms 周期任务内做毫秒级软件计时。
离合器还没脱开,制动器强行抱闸 → 冲击大、摩擦片快速磨损,停止位置离散。
制动器释放逻辑
曲轴完全停止后,延时再松开制动器,避免滑块微动漂移;不能角度一到立刻松闸。
四、模式区分:单次冲压、连续冲压、点动
单次模式(寸动一次)检测上死点;按下启动,离合器吸合,到达动态计算的提前触发角,切断离合 + 制动,停在上死点附近。增加状态机:
Idle → Clutch_Engage → Running → Stop_Trigger → Stopped → Idle
强烈建议用状态机编程,不要大量堆砌置位复位,避免多条件竞争导致逻辑混乱。
连续冲压模式连续模式下,每次停止判停逻辑同样启用动态补偿;同时增加冲次监视,编码器角度异常直接安全停机。
点动模式点动转速低,可以降低补偿角度,避免提前刹停。
五、报警与诊断逻辑优化
在周期任务采集,保存故障瞬间快照:
触发制动时刻:
Crank_Angle、Crank_Speed_RPM、计算出的Lag_Angle实际最终停止角度
Actual_Stop_Angle
HMI 可以显示:理论停止角度 VS 实际停止角度,观察偏差是固定偏移还是随机离散。
报警条件:
触发制动后,曲轴转过角度超过允许滑行角度 → 报警:制动器制动力不足 / 气路故障。
连续多次停止误差超阈值 → 提示摩擦片磨损、需要维护。
编码器角度跳变、转速异常 → 编码器故障停机。
六、输出硬件逻辑优化
DO 输出离合器、制动器,增加输出一致性监控:PLC 输出标签和模块返回反馈做比对,如果输出指令和模块回读不一致,报输出故障。
电磁阀线圈增加 RC / 续流吸收;避免关断浪涌干扰编码器。
禁止在中断外随意改写离合器制动器输出标签,所有输出只在 1ms 周期任务内刷新。
七、现场标定调参步骤
低速运行,记录:从 PLC 输出制动信号,到滑块真正停止,曲轴实际滑行多少角度,算出系统滞后时间
System_Lag_ms初始值。提升转速,观察停止位置;微调系统滞后时间参数,HMI 做成可调整参数,不用改程序下载。
观察:
如果总是过冲:增大
System_Lag_ms如果总是提前停下没到位置:减小
System_Lag_ms观察离散度:每次停止忽左忽右,不是固定偏移,说明不是单纯补偿问题,是机械 / 气路 / 电磁阀响应波动。
八、常见程序错误复盘
判停逻辑放在主循环,任务周期抖动,高速位置乱。✅移到 1ms 周期性高优先级任务。
写死固定提前角度,不随转速变化。✅增加转速动态补偿。
离合器制动器同时输出,没有泄压延时。✅做时序错开。
使用 TON 做毫秒级延时,TON 计时受任务周期影响不准。✅周期任务内做软件毫秒计时。
没有状态机,多处网络 S/R 置位复位离合器,多条件竞争。✅使用状态机管理冲压流程。
用普通 DI 采集编码器脉冲,丢失脉冲。✅改用 HSC 高速计数模块。
补充安全提醒
程序逻辑优化只能改善停止精度;机械磨损、气源压力波动、摩擦片性能下降是硬件层面,程序补偿不能无限弥补硬件缺陷,必须保留外部硬件限位保护。


