电话/手机:联系客服
离奇问题:CP1H-Y 控制个步进电机,做定长切割。
程序用的是脉冲输出指令。平时切出来的长度都很准。
偶尔(大约 500 次里有一两次)切割长度会多出 2 毫米左右。
我在脉冲完成信号(P_ER)后面加了计数器,发现 PLC 实际发出的脉冲数确实比设定的多了几十个。
指令里设定的是 50000 脉冲,怎么会无端多发?
难道是 PLC 内部扫描周期影响了指令执行?或者是中断程序冲突了?有人遇到过脉冲指令‘刹不住车’的情况吗?”
优质评论内容
这类现象我更倾向于判断成:
不是步进电机“刹不住”,而是 PLC 偶发又执行了一次脉冲输出相关指令,导致目标脉冲数被改大了。
你这条线索非常关键:
你已经确认 PLC 实际发出的脉冲数真的比设定多
多出来的是 几十个脉冲
不是每次都多,是 低概率偶发
这说明问题重点不在机械,不在步进驱动器,更不像普通扫描周期误差,而更像 脉冲指令被重复触发 / 被中途改写。
Omron CP1H-Y 本身是带 1 MHz 级脉冲 I/O 的,脉冲输出不是靠普通逻辑输出一拍一拍“扫描憋出来”的。也就是说,一旦指令正常下发,具体脉冲列主要由脉冲输出功能去执行,不是扫描周期自己随便多吐几拍。
真正危险的是这一条:
Omron 的 PLS2(887) 说明里明确提到,在脉冲输出进行中,PLS2 可以再次执行,用来改变输出脉冲数、目标频率、加减速率。
所以你看到“50000 脉冲,偶尔多几十个”,我第一反应就是:
最可能原因:脉冲指令被重复执行了
典型场景有这几种:
1. 启动脉冲指令没有用微分上升沿
Omron 的示例本身就常用 @PLS2,也就是微分上升沿执行,而不是普通常开条件一直挂着执行。
如果你现在写法类似:
切割启动条件 —— PLS2
而这个启动条件在若干个扫描周期里持续为 ON,
那就有机会出现:
某次条件维持时间偏长
某次互锁位复位慢了一拍
某次中断程序又碰到同一条件
结果就是 PLS2 又被执行一次。
这种情况下,多出来几十个脉冲很正常,不一定是整段都重来一遍。
2. 主程序和中断程序同时动了同一轴
你自己已经怀疑“中断程序冲突”,这个方向很对。
如果有下面任一种情况,都很危险:
主程序里有 PLS2/PULS/SPED/ACC
中断程序里也会改同一轴的相关数据区
中断里会复位/置位启动位
中断会改加减速或目标脉冲表
因为 Omron 允许在输出过程中再次执行 PLS2 去改脉冲数。
所以哪怕你不是“重新启动一次完整定位”,也可能只是 把剩余目标悄悄改大了一点。
3. 目标脉冲数据区在运行中被改写
如果你 50000 这个值不是常数,而是来自:
DM 数据区
配方区
计算结果区
那就要查:
这个 DM 有没有被别的程序段写
有没有 MOV / ADD / SUB 偶发重写
有没有 HMI 在刷新这个地址
有没有中断或通讯写入
这类问题经常表现成:
绝大多数正常
偶尔多一点、少一点
量偏差不是固定倍数,而是几十个、上百个
反而不太像“扫描周期导致多发”
单纯扫描周期变长、变短,通常不会让已启动的高速脉冲输出 凭空多出几十个。
它更常见的影响是:
启动时机差一点
逻辑响应慢一点
完成信号判定晚一点
但你这里是 PLC 自己统计出来实际发脉冲数变多,这更像“命令源变了”,不是“硬件计时飘了”。
也别太早把锅甩给 P_ER
你现在在 P_ER 后面加计数器,这个动作是对的,但要注意一点:
完成信号只说明这一轮脉冲输出结束了,不代表结束前没有被改写过目标值。
也就是说,流程可能是这样:
开始输出 50000
→ 运行中某段逻辑又执行了一次 PLS2 / 改了数据
→ 最终实际输出 50030
→ 然后 P_ER 正常到来
表面看起来像“刹不住车”,其实是 目标被加长了。
现场最值得先查的 5 个点
1. 脉冲输出指令是不是用了 @
先看你是不是:
@PLS2
@PULS
或者明确的一次触发脉冲
如果不是,用普通条件直接驱动,是首嫌疑。
2. 启动位是否可能维持多个扫描周期
查一下启动位来源:
按钮
上位机
切割完成联锁
自动循环位
看看是不是某些时候持续 ON 太久,
导致同一条脉冲指令在不该重复的时候又执行。
3. 同一轴相关指令有没有出现在多个程序段
重点搜:
PLS2
PULS
SPED
ACC
改目标脉冲的 MOV
看同一轴是不是被:
主程序
中断程序
子程序
异常处理程序
多处同时碰。
4. 目标脉冲数据区是否被共享
如果脉冲数放在 D 区,检查:
HMI 有没有写这个 D
配方下载有没有写
中断里有没有复用这个 D
是否有算长度时先写后改
5. 在线监视“启动位”和“脉冲数设定值”
最好抓一次异常前后的趋势:
启动位
设定脉冲数
完成位
中断标志
步进运行中标志
如果异常发生时设定脉冲数也跳了一下,就基本破案了。
我个人的怀疑排序
按你描述,我会这样排:
脉冲输出指令没有做微分上升沿,偶发重复执行
中断程序或别的程序段改了同一轴的脉冲输出参数
目标脉冲数据区被别处偶发改写
较低概率才是 PLC 固件级异常
最直接的改法
你可以优先这样改:
改法 1:启动指令全部改成一次触发
比如用:
@PLS2
或一个明确的单拍启动位
不要让启动条件连续挂在指令前面。
改法 2:加“轴忙”互锁
脉冲输出开始后,未完成前禁止任何同轴的:
再次启动
改参数
改目标脉冲
改法 3:中断程序彻底避开同一轴
尤其不要在中断里碰:
脉冲数设定 D 区
速度设定
启动位
最后一句话
你这个故障,我不认为是“PLC 自己无端多发了几十个脉冲”,
更像是:
Omron 允许在输出过程中再次执行脉冲指令改目标,而你的程序某个低概率条件刚好触发了这件事