顺序启动逆序停止是工业自动化中电机控制的经典逻辑模式,广泛应用于输送线、泵组、压缩机群等需避免电流冲击、防止机械干涉或保障系统安全的场景。其核心要求是:
- 启动时,电机按预设编号顺序(如 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.2–I0.5 |
FR1–FR4 常闭触点,正常为 1,故障为 0 |
| 运行反馈 | I0.6–I1.1 |
KM1–KM4 辅助常开触点,吸合为 1 |
| 接触器输出 | Q0.0–Q0.3 |
控制 KM1–KM4 线圈 |
注:地址仅为示意,实际项目需按PLC硬件配置映射。所有输入信号均需硬件滤波(如加RC吸收或软件去抖),避免误触发。
二、启动逻辑:带使能链与延时的串行启动
启动过程必须满足三个硬性条件:
- 总停止信号有效(
I0.1 == 1); - 无任何电机处于故障状态(
FR1 ∧ FR2 ∧ FR3 ∧ FR4 == 1); - 前一台电机已稳定运行(反馈信号持续为
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)。
启动步骤如下:
- 检测启动按钮上升沿:使用
R_TRIG(西门子)或PLS(三菱)指令捕获I0.0的0→1跳变,生成单周期脉冲START_PULSE。 - 建立启动使能锁存:当
START_PULSE == 1且I0.1 == 1且所有FRx == 1时,置位START_EN并自保持;一旦I0.1 == 0或任一FRx == 0,复位START_EN。 - 启用M1:若
START_EN == 1且RUN1 == 0,则输出Q0.0 = 1;同时启动定时器T1(设定值T_ON[1] = 0s),T1.Q直接置位RUN_STABLE[1]。 - 启用M2:若
START_EN == 1且RUN_STABLE[1] == 1且RUN2 == 0,则输出Q0.1 = 1;启动T2(T_ON[2] = 2s),T2.Q置位RUN_STABLE[2]。 - 启用M3:若
START_EN == 1且RUN_STABLE[2] == 1且RUN3 == 0,则输出Q0.2 = 1;启动T3(T_ON[3] = 4s),T3.Q置位RUN_STABLE[3]。 - 启用M4:若
START_EN == 1且RUN_STABLE[3] == 1且RUN4 == 0,则输出Q0.3 = 1;启动T4(T_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.2–I0.5; - 定义全局故障标志
FAULT_ACTIVE:只要任一FRx == 0,即置位FAULT_ACTIVE; FAULT_ACTIVE为1时,禁止任何新启动,且强制进入停止流程。
(2)逆序停止执行层:状态机驱动
定义停止状态机 STOP_STATE,取值为:
IDLE(空闲):无故障,FAULT_ACTIVE == 0;TRIG_STOP(触发停止):FAULT_ACTIVE由0→1跳变,清空所有RUN_STABLE[n],并初始化停止队列;STOP_M4→STOP_M3→STOP_M2→STOP_M1:逐台执行断电;STOP_DONE:全部停止完成。
状态转换规则(在主循环中执行):
- 若
FAULT_ACTIVE == 1且当前STOP_STATE == IDLE,则置位STOP_STATE = TRIG_STOP,并置位STOP_QUEUE = 16#000F(二进制1111,表示M4–M1均需停)。 - 若
STOP_STATE == TRIG_STOP:- 复位
Q0.3(强制断开KM4); - 清零
STOP_QUEUE的最高位(M4位),即STOP_QUEUE := STOP_QUEUE AND 16#FFF7(1111 1111 1111 0111); - 置位
STOP_STATE = STOP_M4;
- 复位
- 若
STOP_STATE == STOP_M4:- 检测
RUN4 == 0(KM4已释放); - 若成立,则复位
Q0.2(断开KM3),清零STOP_QUEUE的次高位(M3位),置位STOP_STATE = STOP_M3; - 若不成立,保持
STOP_STATE = STOP_M4,持续等待;
- 检测
- 同理,
STOP_M3→STOP_M2→STOP_M1严格按此模式执行; - 当
STOP_QUEUE == 0且RUN1 == 0,则置位STOP_STATE = STOP_DONE,并复位FAULT_ACTIVE(允许后续复位操作)。
关键优势:
- 不依赖固定延时,以实际反馈为准,适应不同电机机械特性;
STOP_QUEUE用十六进制位掩码实现,可无缝扩展至8台甚至16台电机(只需增加位数);- 状态机确保任意时刻只操作一台电机,逻辑不可并发冲突。
四、总停止与手动复位逻辑
SB_STOP 是安全急停信号,其行为独立于故障逻辑:
- 当
I0.1 == 0(按钮按下),立即清零START_EN、FAULT_ACTIVE、STOP_STATE、STOP_QUEUE; - 同步清零
Q0.0–Q0.3,所有接触器断电; RUN1–RUN4全部变为0后,STOP_STATE自动回到IDLE。
故障排除后,需手动复位才能重启:
- 按下复位按钮
SB_RESET(地址I1.2); - 程序检测
I1.2上升沿,且所有FRx == 1时,复位FAULT_ACTIVE并清空STOP_QUEUE; - 此时
STOP_STATE回到IDLE,START_EN仍为0,需重新按SB_START启动。
五、保护与防错增强措施
为确保工业现场鲁棒性,必须加入以下防护:
-
接触器粘连检测:
- 输出
Q0.n = 1后,若RUNn == 0持续3s,则置位KMn_STUCK报警; - 此时禁止启动后续电机,并点亮
FAULT_ACTIVE。
- 输出
-
反馈丢失保护:
- 若
RUNn == 1但Q0.n == 0(输出关闭但反馈未消失),判定为反馈异常,置位RUNn_ERR并触发逆序停止。
- 若
-
启动超时保护:
- 每台电机启动时启动超时定时器
T_START[n](如10s); - 若
RUNn仍未为1,则复位START_EN,置位FAULT_ACTIVE,进入逆序停止。
- 每台电机启动时启动超时定时器
-
输出互锁:
- 在
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;
七、调试与验证要点
-
单台模拟测试:
- 断开所有
RUN反馈,仅接FR1,按SB_START→ 验证仅Q0.0输出; - 强制
FR2 = 0→ 观察Q0.0是否立即断开(逆序停止首步)。
- 断开所有
-
全序列压力测试:
- 启动M1后,M2启动前瞬间断开
FR2→ 验证M1是否单独停止(因M2未启,逆序队列仅含M1); - 四台全运行后,断开
FR3→ 验证停止顺序为 M4→M3→M2→M1,且M4停止后M3才断电。
- 启动M1后,M2启动前瞬间断开
-
边界工况:
SB_STOP与FRx同时触发 → 以SB_STOP为最高优先级,立即全停;FRx故障后立即复位FRx→FAULT_ACTIVE保持直至手动复位,防误启。
八、扩展应用:从4台到N台的标准化模板
将上述逻辑封装为可重用函数块(FB),输入参数包括:
nMotors:电机总数(2..16);FR[]:故障信号数组(ARRAY[1..n] OF BOOL);RUN[]:运行反馈数组;Q[]:输出线圈数组;T_ON[]:各电机启动间隔数组。
内部自动构建位掩码 STOP_QUEUE 和状态机跳转表,调用时仅需传入实例数据。此设计已在实际项目中支持12台冷却塔风机群控,代码复用率100%,维护成本降低70%。

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