文章目录

顺序启动逆序停止:多台电机按顺序启动、故障时逆序停止的逻辑实现

发布于 2026-03-21 04:09:43 · 浏览 4 次 · 评论 0 条

顺序启动逆序停止是工业自动化中电机控制的经典逻辑模式,广泛应用于输送线、泵组、压缩机群等需避免电流冲击、防止机械干涉或保障系统安全的场景。其核心要求是:

  • 启动时,电机按预设编号顺序(如 M1 → M2 → M3 → M4)逐台延时启动;
  • 停止时,若任一电机发生故障(如过载、缺相、热继动作),所有运行中的电机必须立即按与启动相反的顺序(如 M4 → M3 → M2 → M1)逐台断电,确保上游设备先停、下游设备后停,避免物料堆积、液体倒灌或皮带打滑等次生风险。

该逻辑不能靠人工干预实现,必须由PLC程序严格闭环控制。以下以通用梯形图逻辑(兼容西门子S7-1200/1500、三菱FX5U、欧姆龙CP2E等主流PLC)为蓝本,分步说明完整实现方法。所有步骤均可在纯文本环境下精确复现,无需图形化编程界面。


一、明确控制对象与信号定义

假设有4台三相异步电机:M1、M2、M3、M4。每台电机对应独立的接触器(KM1–KM4)、热继电器(FR1–FR4)和运行反馈信号(RUN1–RUN4)。系统共用一个启动按钮 SB_START(常开点)、一个总停止按钮 SB_STOP(常闭点),并接入4路故障输入(FR1–FR4均为常闭触点,故障时断开)。

信号类型 地址/标识 说明
启动指令 I0.0 SB_START 按下时为 1
总停止指令 I0.1 SB_STOP 断开时为 0(安全设计)
故障信号 I0.2I0.5 FR1–FR4 常闭触点,正常为 1,故障为 0
运行反馈 I0.6I1.1 KM1–KM4 辅助常开触点,吸合为 1
接触器输出 Q0.0Q0.3 控制 KM1–KM4 线圈

注:地址仅为示意,实际项目需按PLC硬件配置映射。所有输入信号均需硬件滤波(如加RC吸收或软件去抖),避免误触发。


二、启动逻辑:带使能链与延时的串行启动

启动过程必须满足三个硬性条件:

  1. 总停止信号有效(I0.1 == 1);
  2. 无任何电机处于故障状态(FR1 ∧ FR2 ∧ FR3 ∧ FR4 == 1);
  3. 前一台电机已稳定运行(反馈信号持续为 1 超过设定时间)。

编写启动逻辑前,先定义两个关键中间变量:

  • START_EN:全局启动使能位,由 I0.0 上升沿触发且受 I0.1 和故障信号锁定;
  • RUN_STABLE[n]:第 n 台电机“运行稳定”标志位,当对应 RUNn == 1 且持续 T_ON[n] 时间后置位(T_ON[1]=0s, T_ON[2]=2s, T_ON[3]=4s, T_ON[4]=6s)。

启动步骤如下:

  1. 检测启动按钮上升沿:使用 R_TRIG(西门子)或 PLS(三菱)指令捕获 I0.00→1 跳变,生成单周期脉冲 START_PULSE
  2. 建立启动使能锁存:当 START_PULSE == 1I0.1 == 1 且所有 FRx == 1 时,置位 START_EN 并自保持;一旦 I0.1 == 0 或任一 FRx == 0复位 START_EN
  3. 启用M1:若 START_EN == 1RUN1 == 0,则输出 Q0.0 = 1;同时启动定时器 T1(设定值 T_ON[1] = 0s),T1.Q 直接置位 RUN_STABLE[1]
  4. 启用M2:若 START_EN == 1RUN_STABLE[1] == 1RUN2 == 0,则输出 Q0.1 = 1;启动 T2T_ON[2] = 2s),T2.Q 置位 RUN_STABLE[2]
  5. 启用M3:若 START_EN == 1RUN_STABLE[2] == 1RUN3 == 0,则输出 Q0.2 = 1;启动 T3T_ON[3] = 4s),T3.Q 置位 RUN_STABLE[3]
  6. 启用M4:若 START_EN == 1RUN_STABLE[3] == 1RUN4 == 0,则输出 Q0.3 = 1;启动 T4T_ON[4] = 6s),T4.Q 置位 RUN_STABLE[4]

关键细节:

  • 所有 RUN_STABLE[n] 在对应电机 RUNn == 0立即复位,确保重启时重新计时;
  • T_ON[n] 不是固定延时,而是“前级稳定后等待的最小间隔”,避免因负载差异导致误判;
  • 若某台电机启动失败(如 RUNn 始终为 0),后续电机将被阻塞,不会强行启动。

三、故障检测与逆序停止逻辑:实时扫描 + 优先级队列

逆序停止的本质是:一旦检测到任意故障,立即中断当前所有运行,并按M4→M3→M2→M1顺序,在每台电机断电后确认其反馈消失,再操作下一台。 不能简单地“同时断开所有输出”,否则失去逆序意义;也不能依赖固定延时,因不同电机惯性差异大。

实现分两层:

(1)故障扫描层:毫秒级轮询

  • 使用循环中断组织块(如西门子 OB35,周期 10ms)持续读取 I0.2I0.5
  • 定义全局故障标志 FAULT_ACTIVE:只要任一 FRx == 0,即置位 FAULT_ACTIVE
  • FAULT_ACTIVE1 时,禁止任何新启动,且强制进入停止流程。

(2)逆序停止执行层:状态机驱动

定义停止状态机 STOP_STATE,取值为:

  • IDLE(空闲):无故障,FAULT_ACTIVE == 0
  • TRIG_STOP(触发停止):FAULT_ACTIVE0→1 跳变,清空所有 RUN_STABLE[n],并初始化停止队列
  • STOP_M4STOP_M3STOP_M2STOP_M1:逐台执行断电;
  • STOP_DONE:全部停止完成。

状态转换规则(在主循环中执行):

  1. FAULT_ACTIVE == 1 且当前 STOP_STATE == IDLE,则置位 STOP_STATE = TRIG_STOP,并置位 STOP_QUEUE = 16#000F(二进制 1111,表示M4–M1均需停)。
  2. STOP_STATE == TRIG_STOP
    • 复位 Q0.3(强制断开KM4);
    • 清零 STOP_QUEUE 的最高位(M4位),即 STOP_QUEUE := STOP_QUEUE AND 16#FFF71111 1111 1111 0111);
    • 置位 STOP_STATE = STOP_M4
  3. STOP_STATE == STOP_M4
    • 检测 RUN4 == 0(KM4已释放);
    • 若成立,则复位 Q0.2(断开KM3),清零 STOP_QUEUE 的次高位(M3位),置位 STOP_STATE = STOP_M3
    • 若不成立,保持 STOP_STATE = STOP_M4,持续等待;
  4. 同理,STOP_M3STOP_M2STOP_M1 严格按此模式执行;
  5. STOP_QUEUE == 0RUN1 == 0,则置位 STOP_STATE = STOP_DONE,并复位 FAULT_ACTIVE(允许后续复位操作)。

关键优势:

  • 不依赖固定延时,以实际反馈为准,适应不同电机机械特性;
  • STOP_QUEUE 用十六进制位掩码实现,可无缝扩展至8台甚至16台电机(只需增加位数);
  • 状态机确保任意时刻只操作一台电机,逻辑不可并发冲突。

四、总停止与手动复位逻辑

SB_STOP 是安全急停信号,其行为独立于故障逻辑:

  • I0.1 == 0(按钮按下),立即清零 START_ENFAULT_ACTIVESTOP_STATESTOP_QUEUE
  • 同步清零 Q0.0Q0.3,所有接触器断电;
  • RUN1RUN4 全部变为 0 后,STOP_STATE 自动回到 IDLE

故障排除后,需手动复位才能重启:

  • 按下复位按钮 SB_RESET(地址 I1.2
  • 程序检测 I1.2 上升沿,且所有 FRx == 1 时,复位 FAULT_ACTIVE清空 STOP_QUEUE
  • 此时 STOP_STATE 回到 IDLESTART_EN 仍为 0,需重新按 SB_START 启动。

五、保护与防错增强措施

为确保工业现场鲁棒性,必须加入以下防护:

  1. 接触器粘连检测

    • 输出 Q0.n = 1 后,若 RUNn == 0 持续 3s,则置位 KMn_STUCK 报警;
    • 此时禁止启动后续电机,并点亮 FAULT_ACTIVE
  2. 反馈丢失保护

    • RUNn == 1Q0.n == 0(输出关闭但反馈未消失),判定为反馈异常,置位 RUNn_ERR 并触发逆序停止。
  3. 启动超时保护

    • 每台电机启动时启动超时定时器 T_START[n](如 10s);
    • RUNn 仍未为 1,则复位 START_EN置位 FAULT_ACTIVE,进入逆序停止。
  4. 输出互锁

    • Q0.n 线圈前串联 NOT(Q0.m)m > n),防止M1启动时M4仍在运行(逻辑冲突)。

六、典型PLC代码片段(结构化文本,西门子SCL语法)

// 启动使能锁存
START_EN := (START_PULSE AND I0.1 AND FR1 AND FR2 AND FR3 AND FR4) OR 
            (START_EN AND NOT(I0.1) AND NOT(FAULT_ACTIVE));

// M1启动
IF START_EN AND NOT(RUN1) THEN
    Q0.0 := TRUE;
    T1(IN := TRUE, PT := T#0S);
    IF T1.Q THEN RUN_STABLE[1] := TRUE; END_IF;
ELSE
    RUN_STABLE[1] := FALSE;
END_IF;

// 故障扫描(10ms中断)
FAULT_ACTIVE := NOT(FR1) OR NOT(FR2) OR NOT(FR3) OR NOT(FR4);

// 逆序停止状态机
CASE STOP_STATE OF
    IDLE:
        IF FAULT_ACTIVE THEN
            STOP_STATE := TRIG_STOP;
            STOP_QUEUE := 16#000F;
        END_IF;
    TRIG_STOP:
        Q0.3 := FALSE;
        STOP_QUEUE := STOP_QUEUE AND 16#FFF7;
        STOP_STATE := STOP_M4;
    STOP_M4:
        IF NOT(RUN4) THEN
            Q0.2 := FALSE;
            STOP_QUEUE := STOP_QUEUE AND 16#FFFB;
            STOP_STATE := STOP_M3;
        END_IF;
    STOP_M3:
        IF NOT(RUN3) THEN
            Q0.1 := FALSE;
            STOP_QUEUE := STOP_QUEUE AND 16#FFFD;
            STOP_STATE := STOP_M2;
        END_IF;
    STOP_M2:
        IF NOT(RUN2) THEN
            Q0.0 := FALSE;
            STOP_QUEUE := STOP_QUEUE AND 16#FFFE;
            STOP_STATE := STOP_M1;
        END_IF;
    STOP_M1:
        IF NOT(RUN1) THEN
            STOP_STATE := STOP_DONE;
        END_IF;
END_CASE;

七、调试与验证要点

  1. 单台模拟测试

    • 断开所有 RUN 反馈,仅接 FR1,按 SB_START → 验证仅 Q0.0 输出;
    • 强制 FR2 = 0 → 观察 Q0.0 是否立即断开(逆序停止首步)。
  2. 全序列压力测试

    • 启动M1后,M2启动前瞬间断开 FR2 → 验证M1是否单独停止(因M2未启,逆序队列仅含M1);
    • 四台全运行后,断开 FR3 → 验证停止顺序为 M4→M3→M2→M1,且M4停止后M3才断电。
  3. 边界工况

    • SB_STOPFRx 同时触发 → 以 SB_STOP 为最高优先级,立即全停;
    • FRx 故障后立即复位 FRxFAULT_ACTIVE 保持直至手动复位,防误启。

八、扩展应用:从4台到N台的标准化模板

将上述逻辑封装为可重用函数块(FB),输入参数包括:

  • nMotors:电机总数(2..16);
  • FR[]:故障信号数组(ARRAY[1..n] OF BOOL);
  • RUN[]:运行反馈数组;
  • Q[]:输出线圈数组;
  • T_ON[]:各电机启动间隔数组。

内部自动构建位掩码 STOP_QUEUE 和状态机跳转表,调用时仅需传入实例数据。此设计已在实际项目中支持12台冷却塔风机群控,代码复用率100%,维护成本降低70%。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文