CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 303|回复: 0

CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2026-3-18 11:07:43 | 显示全部楼层 |阅读模式
    在工业自动化控制中,多电机顺序启停控制是极为常见的应用场景,比如生产线输送系统、多台水泵联动、风机群组控制等。核心需求是实现电机按预设顺序启动、逆序停止,既能保护设备免受启动电流冲击,也能保障生产流程的连贯性和安全性。
    本文将基于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:急停信号处理(最高优先级)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-1.png


    组件解析:


    • EmergencyStop:常闭触点(程序中用「|/|」表示),对应现场急停按钮的常闭接线;


    • bEmergency:输出线圈,急停激活标志位;


    • 核心逻辑:正常情况下,EmergencyStop=TRUE(常闭触点闭合),bEmergency=FALSE(急停未激活);当急停按钮按下时,EmergencyStop=FALSE(常闭触点断开),bEmergency=TRUE(触发急停)。
    功能说明: 急停是最高优先级保护,bEmergency=TRUE时,会立即停止所有电机、复位系统运行标志,无论系统处于启动、运行还是停止过程中,均优先执行急停逻辑。

    网络2:启动/停止命令的上升沿检测(防长按)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-2.png


    组件解析:


    • [P]:上升沿检测指令(Positive Edge),核心作用是「仅在输入信号从FALSE变为TRUE时,输出一个扫描周期的TRUE」;


    • Start、Stop:常开触点(程序中用「| |」表示),对应启动、停止按钮;


    • bStartCmd、bStopCmd:启动、停止命令标志位,仅在按钮按下瞬间有效。
    实际应用说明:


    • 当操作人员按下启动按钮(Start=TRUE),[P]指令触发,bStartCmd=TRUE(仅保持一个扫描周期),避免按钮长按导致系统重复启动;


    • 按钮保持按下状态时,bStartCmd=FALSE;按钮释放后再次按下,才会再次触发上升沿,生成启动命令;


    • 停止按钮的上升沿检测逻辑与启动按钮一致,防止长按导致停止命令重复触发。
    网络3:系统运行总控制(核心逻辑锁存)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-3.png


    组件解析:


    • [SET]:置位指令,指令触发后,输出变量变为TRUE并保持(直到被复位指令触发);


    • [RST]:复位指令,指令触发后,输出变量变为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启动(启动流程第一步)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-4.png


    逻辑解析:


    • 电机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秒后,启动流程第二步)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-5.png


    逻辑解析:


    • 启动条件(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秒后,启动流程第三步)

    CoDeSys入门实战一起学习(二十八):(FBD)三台电机顺起逆停程序详解—上升、下降沿使用上-6.png


    逻辑解析:


    • 启动条件(AND关系):StartTimer2.Q=TRUE(M2启动延时完成)、Motor3_OK=TRUE(M3无故障)、Motor2_Run=TRUE(M2仍在正常运行);


    • 电机3启动:满足上述条件后,Motor3_Run=TRUE(M3接触器吸合,电机启动),此时三台电机全部启动,系统进入稳定运行状态。
    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-10-9 17:43 , Processed in 0.139979 second(s), 49 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表