返回
离奇问题:CP1H-Y 控制个步进电机,做定长切割。 程序用的是脉冲输出指令。平时切出来的长度都很准。 偶尔(大约 500 次里有一两次)切割长度会多出 2 毫米左右。 我在脉冲完成信号(P_ER)后
发布

离奇问题:CP1H-Y 控制个步进电机,做定长切割。 程序用的是脉冲输出指令。平时切出来的长度都很准。 偶尔(大约 500 次里有一两次)切割长度会多出 2 毫米左右。 我在脉冲完成信号(P_ER)后

15阅读 1 回复 2026-04-08 09:09发布
关注Ta

15610146163034普通会员楼主

电话/手机:联系客服

离奇问题:CP1H-Y 控制个步进电机,做定长切割。
程序用的是脉冲输出指令。平时切出来的长度都很准。
偶尔(大约 500 次里有一两次)切割长度会多出 2 毫米左右。
我在脉冲完成信号(P_ER)后面加了计数器,发现 PLC 实际发出的脉冲数确实比设定的多了几十个。
指令里设定的是 50000 脉冲,怎么会无端多发?
难道是 PLC 内部扫描周期影响了指令执行?或者是中断程序冲突了?有人遇到过脉冲指令‘刹不住车’的情况吗?”

以下内容回复后可见

优质评论内容

  • 明扬工控技术客服

    明扬工控技术客服2026-04-08 10:50:09

    这类现象我更倾向于判断成:

    不是步进电机“刹不住”,而是 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 允许在输出过程中再次执行脉冲指令改目标,而你的程序某个低概率条件刚好触发了这件事