当前位置:首页>java>【第7集】:电机控制篇|50个SCL编程经典程序-程序10:软启动器基础控制程序及主程序调用示例

【第7集】:电机控制篇|50个SCL编程经典程序-程序10:软启动器基础控制程序及主程序调用示例

  • 2026-09-04 09:24:11
【第7集】:电机控制篇|50个SCL编程经典程序-程序10:软启动器基础控制程序及主程序调用示例
点击蓝字

PLC自动化汇

关注我们

程序10:软启动器基础控制程序

功能说明

通过软启动器控制电机平滑启动,减少启动电流冲击和机械冲击。支持多种启动模式。

应用场景

  • 大功率风机、水泵

  • 输送带、提升机

  • 压缩机、破碎机

  • 需要平稳启动的任何设备

SCL代码实现

FUNCTION_BLOCK FB_软启动器控制VAR_INPUT    // 控制信号    b_启动按钮: BOOL; // 输入:启动按钮    b_停止按钮: BOOL; // 输入:停止按钮    b_急停按钮: BOOL := TRUE; // 输入:急停按钮    // 软启动器状态反馈    b_软起就绪: BOOL; // 输入:软启动器就绪    b_软起运行: BOOL; // 输入:软启动器运行    b_软起故障: BOOL; // 输入:软启动器故障    // 启动参数(可在HMI设置)    r_启动时间: REAL := 30.0; // 输入:启动时间(秒)    r_初始电压: REAL := 30.0; // 输入:初始电压百分比(%)    r_停止时间: REAL := 10.0; // 输入:停止时间(秒)    // 电机保护    b_热继电器: BOOL := TRUE; // 输入:热继电器保护END_VARVAR_OUTPUT    b_启动命令: BOOL; // 输出:启动命令到软启动器    b_停止命令: BOOL; // 输出:停止命令到软启动器    b_故障复位: BOOL; // 输出:故障复位命令    // 状态指示    b_就绪指示: BOOL; // 输出:就绪指示灯    b_启动指示: BOOL; // 输出:启动过程指示灯    b_运行指示: BOOL; // 输出:运行指示灯    b_故障指示: BOOL; // 输出:故障指示灯    // 模拟量输出(可选)    r_电压设定: REAL; // 输出:电压设定值(0-100%)END_VARVAR    b_运行命令: BOOL; // 内部:运行命令记忆    t_启动过程: TON; // 定时器:启动过程计时    t_停止过程: TON; // 定时器:停止过程计时    t_故障复位: TP; // 定时器:故障复位脉冲    i_控制状态: INT := 0; // 内部:控制状态    r_当前电压: REAL := 0.0; // 内部:当前输出电压END_VAR
// == 控制状态机 ==CASE i_控制状态 OF    0: // 状态0:停止状态        b_启动命令 := FALSE;        b_停止命令 := TRUE;        b_故障复位 := FALSE;        r_当前电压 := 0.0;        // 检查就绪条件        IF b_软起就绪 AND b_热继电器 AND b_急停按钮 THEN            i_控制状态 := 10;  // 进入就绪状态        END_IF;    10: // 状态10:就绪状态        b_启动命令 := FALSE;        b_停止命令 := FALSE;  // 撤销停止命令        b_就绪指示 := TRUE;        // 收到启动命令        IF b_启动按钮 THEN            b_运行命令 := TRUE;            i_控制状态 := 20;  // 进入启动过程        END_IF;        // 故障检测        IF b_软起故障 THEN            i_控制状态 := 50;  // 进入故障状态        END_IF;
    20: // 状态20:启动过程        b_启动命令 := TRUE;        b_启动指示 := TRUE;        // 启动过程计时        t_启动过程(IN:=TRUE, PT:=T#1S);  // 每秒更新一次电压        IF t_启动过程.Q THEN            // 计算斜坡电压(线性增加)            r_当前电压 := r_初始电压 +                          (100.0 - r_初始电压) *                          (TIME_TO_REAL(t_启动过程.ET) / r_启动时间);            // 限制在0-100%            IF r_当前电压 > 100.0 THEN                r_当前电压 := 100.0;            END_IF;            t_启动过程(IN:=TRUE);  // 重新开始计时        END_IF;        // 检查是否完成启动        IF b_软起运行 OR (r_当前电压 >= 100.0) THEN            i_控制状态 := 30;  // 进入运行状态            t_启动过程(IN:=FALSE);        END_IF;        // 停止命令        IF NOT b_运行命令 OR NOT b_热继电器 OR NOT b_急停按钮 THEN            i_控制状态 := 40;  // 进入停止过程        END_IF;
    30: // 状态30:运行状态        b_启动命令 := TRUE;        b_运行指示 := TRUE;        r_当前电压 := 100.0;  // 全压运行        // 停止命令        IF NOT b_运行命令 OR NOT b_热继电器 OR NOT b_急停按钮 THEN            i_控制状态 := 40;  // 进入停止过程        END_IF;        // 故障检测        IF b_软起故障 THEN            i_控制状态 := 50;  // 进入故障状态        END_IF;    40: // 状态40:停止过程        b_启动命令 := FALSE;        b_停止命令 := FALSE;  // 软停止模式        // 软停止过程(电压逐渐降低)        t_停止过程(IN:=TRUE, PT:=T#1S);        IF t_停止过程.Q THEN            // 计算斜坡下降            r_当前电压 := 100.0 -                          (100.0 *                          (TIME_TO_REAL(t_停止过程.ET) / r_停止时间));            IF r_当前电压 < 0.0 THEN                r_当前电压 := 0.0;            END_IF;            t_停止过程(IN:=TRUE);        END_IF;        // 停止完成条件        IF (r_当前电压 <= 0.0) OR NOT b_软起运行 THEN            b_停止命令 := TRUE;  // 发送停止命令            b_运行命令 := FALSE;            i_控制状态 := 0;     // 返回停止状态            t_停止过程(IN:=FALSE);        END_IF;
    50: // 状态50:故障状态        b_启动命令 := FALSE;        b_停止命令 := TRUE;        b_故障指示 := TRUE;        // 故障复位处理(需要按钮触发)        IF b_停止按钮 THEN  // 用停止按钮作为复位按钮            t_故障复位(IN:=TRUE, PT:=T#2S);            IF t_故障复位.Q THEN                b_故障复位 := TRUE;  // 发送2秒复位脉冲                i_控制状态 := 0;     // 返回停止状态            END_IF;        END_IF;END_CASE;// == 输出设定值 ==r_电压设定 := r_当前电压;// == 运行命令处理 ==b_运行命令 := (b_启动按钮 OR b_运行命令)               AND NOT b_停止按钮              AND b_热继电器              AND b_急停按钮;END_FUNCTION_BLOCK

关键技术点

  1. 软启动/软停止:电压斜坡控制,平滑启停

  2. 多种控制模式:支持直接启动、软启动、软停止

  3. 参数可调:启动时间、初始电压、停止时间可在线调整

  4. 完善的状态机:5个状态,逻辑清晰


三、主程序调用示例(电机控制)

PROGRAM MAIN_电机控制VAR    // 电机控制功能块实例    fb电机直接启动: FB_三相电机直接启动;    fb电机正反转: FB_三相电机正反转;    fb星三角启动: FB_星三角降压启动;    fb循环往复: FB_电机循环往复运行;    fb软启动器: FB_软启动器控制;    // HMI设置参数    r_正转时间设定: TIME := T#15S;    r_反转时间设定: TIME := T#15S;    i_循环次数设定: INT := 10;    r_软起启动时间: REAL := 20.0;    r_软起初始电压: REAL := 40.0;END_VAR
// == 电机1:直接启动 ==fb电机直接启动(    b_启动按钮 := "HMI_启动1",    b_停止按钮 := "HMI_停止1",    b_远程就地 := "SA_远程就地1",    b_热继电器 := "FR1_OK",    b_电机故障 := "M1_Fault",    b_急停按钮 := "急停_OK",    b_就地启动 := "SB1_启动",    b_就地停止 := "SB1_停止",    b_接触器输出 => "KM1",    b_运行指示 => "HL1_运行",    b_故障指示 => "HL1_故障");// == 电机2:正反转控制 ==fb电机正反转(    b_正转启动 := "HMI_正转",    b_反转启动 := "HMI_反转",    b_停止按钮 := "HMI_停止2",    b_热继电器 := "FR2_OK",    b_急停按钮 := "急停_OK",    b_正转反馈 := "KM2_FB",    b_反转反馈 := "KM3_FB",    b_正转输出 => "KM2",    b_反转输出 => "KM3",    b_运行指示 => "HL2_运行",    b_故障报警 => "ALARM_电机2");// == 电机3:星三角启动 ==fb星三角启动(    b_启动按钮 := "HMI_启动3",    b_停止按钮 := "HMI_停止3",    b_急停按钮 := "急停_OK",    b_热继电器 := "FR3_OK",    b_主接触器反馈 := "KM4_FB",    b_星形反馈 := "KM5_FB",    b_三角反馈 := "KM6_FB",    b_主接触器输出 => "KM4",    b_星形输出 => "KM5",    b_三角输出 => "KM6",    b_启动指示 => "HL3_启动",    b_运行指示 => "HL3_运行");// == 电机4:循环往复运行 ==fb循环往复(    b_启动按钮 := "HMI_启动4",    b_停止按钮 := "HMI_停止4",    b_急停按钮 := "急停_OK",    b_热继电器 := "FR4_OK",    b_正转限位 := "LS1_OK",    b_反转限位 := "LS2_OK",    r_正转时间 := r_正转时间设定,    r_反转时间 := r_反转时间设定,    r_切换延时 := T#500MS,    i_循环次数 := i_循环次数设定,    b_正转输出 => "KM7",    b_反转输出 => "KM8",    b_运行指示 => "HL4_运行",    i_已完成循环 => "HMI_循环计数");// == 电机5:软启动器控制 ==fb软启动器(    b_启动按钮 := "HMI_启动5",    b_停止按钮 := "HMI_停止5",    b_急停按钮 := "急停_OK",    b_软起就绪 := "SSR_Ready",    b_软起运行 := "SSR_Running",    b_软起故障 := "SSR_Fault",    b_热继电器 := "FR5_OK",    r_启动时间 := r_软起启动时间,    r_初始电压 := r_软起初始电压,    r_停止时间 := 10.0,    b_启动命令 => "SSR_Start",    b_停止命令 => "SSR_Stop",    b_故障复位 => "SSR_Reset",    b_就绪指示 => "HL5_就绪",    b_运行指示 => "HL5_运行");END_PROGRAM

四、学习总结

目前学习的5个电机控制程序涵盖了80%的工业电机应用场景:

  1. 直接启动 - 小功率标准应用【第4集】:电机控制篇|50个SCL编程经典程序-程序6:三相电机直接启动程序

  2. 正反转控制 - 双向运动设备【第5集】:电机控制篇|50个SCL编程经典程序-程序7:三相电机正反转控制程序

  3. 星三角启动 - 大功率电机降压启动【第6集】:电机控制篇|50个SCL编程经典程序-程序8:星-三角降压启动程序,程序9:电机循环往复运行程序

  4. 循环往复 - 自动化往复运动

  5. 软启动器 - 高级平稳启停控制

关键技术要点:

  • 安全第一:多重互锁、反馈验证、保护齐全

  • 状态机思维:复杂时序用状态机最清晰

  • 参数化设计:运行参数可调,适应不同工况

  • 完善监控:状态指示、故障报警、运行统计

调试经验分享:

  1. 电机类程序必须先模拟测试,再带载测试

  2. 接触器反馈必须接线正确,这是安全的关键

  3. 定时器参数现场调整,根据实际设备特性优化

  4. 一定要有手动调试模式,方便维护


下章集预告:第3章集 - 定时计数篇

下一集我们将学习:11. 延时启动控制12. 延时停止控制13. 闪烁信号发生器14. 长延时控制程序15. 计数器应用

#今日话题# 你在电机控制中遇到过什么有趣的问题?

欢迎分享你的实战经验!

觉得有用?收藏备用,转发给需要的小伙伴!

学习PLC编程是一场逻辑思维与工程实践的深度结合。沉下心来,从每一个开关、定时器、计数器开始,你终将能搭建出属于自己的自动化大厦。祝你学习顺利!

【🔥 看完别滑走!需要你的支持!】

这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定:

❶ 「评论区」 留下你的想法➠ 遇到了类似问题?有更好的方法?期待你分享见解!

❷ 「转发」 给更多需要的人➠ 也许你身边的朋友,正被同样的问题困扰!

❸ 「收藏」 随时回看复习➠ 知识点需要反复消化,码住不迷路!

每一次互动都是我们继续创作优质内容的动力!💪感谢有你,一起进步!



推荐阅读:
  1. 使出九牛二虎之力!西门子PLC稳定运行的九步通关秘籍
  2. 西门子 S7-1500 PLC 故障排查:化身工业“医生”,快速“治愈”产线停机!
  3. 【10年西门子PLC老兵升级路】从拧螺丝认模块,到玩转通信架构:我的血泪技术栈爬坑指南
  4. 伺服电机的"三种武器":位置/速度/转矩控制详解(附西门子SCL实战代码)
  5. 西门子PLC编程核心揭秘:FB、FC、DB、OB到底是个啥?看完这篇就懂了!
  6. PLC工程师月薪2万却留不住人?高薪背后的“职业倦怠”正在吞噬这个行业!
  7. 西门子PLC编程:梯形图 vs SCL,谁才是你的菜?保姆级入门指南+实战代码!
  8. 告别“面条代码”!西门子PLC步序编程“三步法”,效率翻倍不踩坑!
  9. 西门子SCL通讯心跳监控:工业级心跳程序实战指南
  10. 西门子1200与威纶通标签通讯:告别手动填地址,这位“智能翻译官”让调试快3倍!
  11. 西门子 SCL 实战:手把手教你写工位控制功能块
  12. 西门子S7-1200混合编程实战:SCL与LAD的黄金组合法则
  13. 电气自动化围城:十年血汗换来这份掏心窝的行业经验总结
  14. 西门子SCL工作站控制程序:启停控制+三色灯+蜂鸣器报警
  15. 三菱FX3U PLC双泵恒压供水全解:变频+工频智能切换+安全急停系统
  16. 电气自动化专业毕业指南:就业方向、前景薪资全解析
  17. 电气自动化专科生:起薪不输本科?技术逆袭路线图全公开!
  18. 西门子S7-200 SMART自由口通讯详解:灵活串口通信方案引言
  19. 西门子SCL全功能伺服控制终极方案:8种运动模式+5重安全保护
  20. 用数据说话!理科生VS文科生选专业科学指南(附就业薪资 & 趋势分析)

分享让更多人看看

点赞

收藏

分享

最新文章

随机文章