CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上
在工业自动化控制中,多电机顺序启停控制是极为常见的应用场景,比如生产线输送系统、多台水泵联动、风机群组控制等。核心需求是实现电机按预设顺序启动、逆序停止,既能保护设备免受启动电流冲击,也能保障生产流程的连贯性和安全性。本文将基于CoDeSys平台,详细拆解三台电机顺起逆停程序的设计思路、变量定义、梯形图逻辑(带逐网络注释)、安全特性及调试方法,全程附带详细注释,新手可直接参考学习、复用,快速掌握多电机顺序控制和定时器、标志位的综合应用。
一、程序概述
本程序核心功能是控制三台电机(M1、M2、M3)按照「M1→M2→M3」的顺序延时启动,停止时按照「M3→M2→M1」的顺序延时停止,同时集成急停保护、故障检测、状态指示等功能,完全适配工业现场实际应用需求。
1.1 控制时序图(清晰易懂版)
启动流程:
按下启动按钮 → M1启动 → 延时5秒 → M2启动 → 延时5秒 → M3启动 → 三台电机全部运行
停止流程:
按下停止按钮 → M3立即停止 → 延时5秒 → M2停止 → 延时5秒 → M1停止 → 所有电机停止
注:启动、停止的延时时间可在线修改,默认设置为5秒,适配大多数中小型电机启动需求。
二、详细变量定义
变量定义遵循「分类清晰、注释完整、可扩展性强」的原则,明确区分输入、输出、内部变量,每个变量标注用途、地址(默认)及逻辑说明,避免新手混淆。以下是完整的IEC_ST标准变量声明,可直接复制到CoDeSys变量声明区使用。
VAR_INPUT
// ============ 操作员输入信号 ============
Start: BOOL; // I0.0 启动按钮 - 按下时系统开始顺序启动(上升沿触发,防长按)
Stop: BOOL; // I0.1 停止按钮 - 按下时系统开始逆序停止(上升沿触发,防长按)
EmergencyStop: BOOL; // I0.2 急停按钮 - 常闭触点,断开时立即停止所有电机(最高优先级)
// ============ 电机保护反馈信号 ============
Motor1_OK: BOOL := TRUE;// I0.3 电机1热继电器状态 - TRUE=正常,FALSE=过热保护动作(故障)
Motor2_OK: BOOL := TRUE;// I0.4 电机2热继电器状态 - 同Motor1_OK
Motor3_OK: BOOL := TRUE;// I0.5 电机3热继电器状态 - 同Motor1_OK
// ============ 时间参数(可在线修改) ============
StartInterval: TIME := T#5S;// 启动间隔时间,默认5秒(可根据电机功率调整为8-10秒)
StopInterval: TIME := T#5S; // 停止间隔时间,默认5秒(确保电机完全停止后再停下一台)
END_VAR
VAR_OUTPUT
// ============ 电机控制输出 ============
Motor1_Run: BOOL; // Q0.0 电机1接触器控制信号 - TRUE=接触器吸合(电机运行)
Motor2_Run: BOOL; // Q0.1 电机2接触器控制信号 - 同Motor1_Run
Motor3_Run: BOOL; // Q0.2 电机3接触器控制信号 - 同Motor1_Run
// ============ 系统状态指示 ============
System_Running: BOOL; // Q0.3 系统运行指示灯(绿色)- 亮:至少一台电机在运行
System_Stopped: BOOL; // Q0.4 系统停止指示灯(黄色)- 亮:所有电机已停止
System_Fault: BOOL; // Q0.5 系统故障指示灯(红色)- 亮:有电机故障或急停动作
// ============ 电机独立运行指示 ============
M1_Running: BOOL; // Q0.6 电机1运行指示 - 单独显示M1状态,便于故障定位
M2_Running: BOOL; // Q0.7 电机2运行指示 - 同M1_Running
M3_Running: BOOL; // Q1.0 电机3运行指示 - 同M1_Running
END_VAR
VAR
// ============ 定时器定义(核心延时组件) ============
// TON定时器:接通延时,IN=TRUE时开始计时,Q在PT时间到后为TRUE,计时完成后保持
StartTimer1: TON; // 用于M1启动后,延时启动M2(计时时间=StartInterval)
StartTimer2: TON; // 用于M2启动后,延时启动M3(计时时间=StartInterval)
StopTimer1: TON; // 用于M3停止后,延时停止M2(计时时间=StopInterval)
StopTimer2: TON; // 用于M2停止后,延时停止M1(计时时间=StopInterval)
// ============ 内部标志位(逻辑锁存、状态跟踪) ============
bSystemRunning: BOOL := FALSE;// 系统总运行标志 - TRUE=系统处于运行状态(启动中/全运行)
bStartCmd: BOOL := FALSE; // 启动命令标志(上升沿有效)- 仅在启动按钮按下瞬间为TRUE
bStopCmd: BOOL := FALSE; // 停止命令标志(上升沿有效)- 仅在停止按钮按下瞬间为TRUE
bEmergency: BOOL := FALSE; // 急停激活标志 - TRUE=急停按钮被按下,触发紧急停止
// ============ 状态跟踪变量(上升沿检测用) ============
LastStart: BOOL := FALSE; // Start按钮上一个扫描周期的状态 - 用于检测启动按钮上升沿
LastStop: BOOL := FALSE; // Stop按钮上一个扫描周期的状态 - 用于检测停止按钮上升沿
// ============ 故障处理变量(故障记忆、定位) ============
FaultMotor: INT := 0; // 故障电机编号 - 0=无故障,1=M1故障,2=M2故障,3=M3故障
FaultResetPending: BOOL := FALSE; // 故障待复位标志 - 标记故障未复位,防止误启动
END_VAR
变量关键说明:
[*]输入变量中,EmergencyStop采用常闭触点,符合工业安全规范(正常时为TRUE,急停按下时为FALSE);
[*]时间参数StartInterval和StopInterval支持在线修改,无需修改程序即可适配不同电机;
[*]内部标志位bStartCmd、bStopCmd采用上升沿触发,避免按钮长按导致程序重复触发;
[*]FaultMotor用于记忆故障电机编号,方便现场人员快速定位故障点。
三、梯形图程序详细注释(逐网络拆解)
梯形图(LD)是工业控制中最常用的编程方式,直观易懂,贴合电气控制回路逻辑。以下逐网络拆解程序,每个网络附带「梯形图文字模拟+功能说明+逻辑解析」,新手可对照注释,一步步理解每段逻辑的作用。
网络1:急停信号处理(最高优先级)
组件解析:
[*]EmergencyStop:常闭触点(程序中用「|/|」表示),对应现场急停按钮的常闭接线;
[*]bEmergency:输出线圈,急停激活标志位;
[*]核心逻辑:正常情况下,EmergencyStop=TRUE(常闭触点闭合),bEmergency=FALSE(急停未激活);当急停按钮按下时,EmergencyStop=FALSE(常闭触点断开),bEmergency=TRUE(触发急停)。
功能说明: 急停是最高优先级保护,bEmergency=TRUE时,会立即停止所有电机、复位系统运行标志,无论系统处于启动、运行还是停止过程中,均优先执行急停逻辑。
网络2:启动/停止命令的上升沿检测(防长按)
组件解析:
[*]:上升沿检测指令(Positive Edge),核心作用是「仅在输入信号从FALSE变为TRUE时,输出一个扫描周期的TRUE」;
[*]Start、Stop:常开触点(程序中用「| |」表示),对应启动、停止按钮;
[*]bStartCmd、bStopCmd:启动、停止命令标志位,仅在按钮按下瞬间有效。
实际应用说明:
[*]当操作人员按下启动按钮(Start=TRUE),指令触发,bStartCmd=TRUE(仅保持一个扫描周期),避免按钮长按导致系统重复启动;
[*]按钮保持按下状态时,bStartCmd=FALSE;按钮释放后再次按下,才会再次触发上升沿,生成启动命令;
[*]停止按钮的上升沿检测逻辑与启动按钮一致,防止长按导致停止命令重复触发。
网络3:系统运行总控制(核心逻辑锁存)
组件解析:
[*]:置位指令,指令触发后,输出变量变为TRUE并保持(直到被复位指令触发);
[*]:复位指令,指令触发后,输出变量变为FALSE并保持(优先级高于SET指令);
[*]bSystemRunning:系统总运行标志位,是整个程序的「总开关」。
逻辑解析(重点):
启动条件(所有条件同时满足,AND关系):
[*]有启动命令(bStartCmd=TRUE):启动按钮按下瞬间触发;
[*]系统当前未运行(bSystemRunning=FALSE):防止重复启动;
[*]无急停信号(bEmergency=FALSE):急停未激活;
[*]电机1正常(Motor1_OK=TRUE):M1无过热故障(M1是启动基础,M1故障则系统无法启动)。
停止条件(任一条件满足,OR关系):
[*]有停止命令(bStopCmd=TRUE):停止按钮按下瞬间触发;
[*]急停激活(bEmergency=TRUE):急停按钮按下;
[*]电机1故障(Motor1_OK=FALSE):M1热继电器动作,触发故障停止。
注:复位指令(RST)优先级高于置位指令(SET),即使启动条件和停止条件同时满足,也优先执行停止逻辑,保障安全。
网络4:顺序启动逻辑
顺序启动逻辑分为3部分,分别控制M1、M2、M3的启动,通过定时器实现延时联动,确保「M1启动→延时→M2启动→延时→M3启动」的时序。
4.1 电机1启动(启动流程第一步)
逻辑解析:
[*]电机1启动:当系统运行标志bSystemRunning=TRUE(满足启动条件),Motor1_Run=TRUE(M1接触器吸合,电机启动);
[*]定时器触发:Motor1_Run=TRUE且Motor1_OK=TRUE(M1正常运行)时,启动定时器StartTimer1,开始计时(计时时间=StartInterval,默认5秒)。
TON定时器工作时序(新手必懂):
时间线:
0秒:Motor1_Run=TRUE → StartTimer1.IN=TRUE,开始计时,StartTimer1.Q=FALSE(计时中)
1秒:StartTimer1.ET=1S,StartTimer1.Q=FALSE(计时未完成)
4秒:StartTimer1.ET=4S,StartTimer1.Q=FALSE(计时未完成)
5秒:StartTimer1.ET=5S(达到PT设定值),StartTimer1.Q=TRUE(计时完成,保持TRUE)
4.2 电机2启动(延时5秒后,启动流程第二步)
逻辑解析:
[*]启动条件(AND关系):StartTimer1.Q=TRUE(M1启动延时完成)、Motor2_OK=TRUE(M2无故障)、Motor1_Run=TRUE(M1仍在正常运行);
[*]电机2启动:满足上述条件后,Motor2_Run=TRUE(M2接触器吸合,电机启动);
[*]定时器触发:Motor2_Run=TRUE且Motor2_OK=TRUE时,启动定时器StartTimer2,开始计时(延时5秒,为M3启动做准备)。
关键互锁说明: 串联Motor1_Run常开触点,确保只有M1正常运行时,M2才能启动;若M1故障停止(Motor1_Run=FALSE),M2会立即停止,避免设备损坏。
4.3 电机3启动(再延时5秒后,启动流程第三步)
逻辑解析:
[*]启动条件(AND关系):StartTimer2.Q=TRUE(M2启动延时完成)、Motor3_OK=TRUE(M3无故障)、Motor2_Run=TRUE(M2仍在正常运行);
[*]电机3启动:满足上述条件后,Motor3_Run=TRUE(M3接触器吸合,电机启动),此时三台电机全部启动,系统进入稳定运行状态。
页:
[1]