PLC自动化汇
关注我们
通过软启动器控制电机平滑启动,减少启动电流冲击和机械冲击。支持多种启动模式。
大功率风机、水泵
输送带、提升机
压缩机、破碎机
需要平稳启动的任何设备
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_OUTPUTb_启动命令: BOOL; // 输出:启动命令到软启动器b_停止命令: BOOL; // 输出:停止命令到软启动器b_故障复位: BOOL; // 输出:故障复位命令// 状态指示b_就绪指示: BOOL; // 输出:就绪指示灯b_启动指示: BOOL; // 输出:启动过程指示灯b_运行指示: BOOL; // 输出:运行指示灯b_故障指示: BOOL; // 输出:故障指示灯// 模拟量输出(可选)r_电压设定: REAL; // 输出:电压设定值(0-100%)END_VARVARb_运行命令: BOOL; // 内部:运行命令记忆t_启动过程: TON; // 定时器:启动过程计时t_停止过程: TON; // 定时器:停止过程计时t_故障复位: TP; // 定时器:故障复位脉冲i_控制状态: INT := 0; // 内部:控制状态r_当前电压: REAL := 0.0; // 内部:当前输出电压END_VAR
// == 控制状态机 ==CASE i_控制状态 OF0: // 状态0:停止状态b_启动命令 := FALSE;b_停止命令 := TRUE;b_故障复位 := FALSE;r_当前电压 := 0.0;// 检查就绪条件IF b_软起就绪 AND b_热继电器 AND b_急停按钮 THENi_控制状态 := 10; // 进入就绪状态END_IF;10: // 状态10:就绪状态b_启动命令 := FALSE;b_停止命令 := FALSE; // 撤销停止命令b_就绪指示 := TRUE;// 收到启动命令IF b_启动按钮 THENb_运行命令 := TRUE;i_控制状态 := 20; // 进入启动过程END_IF;// 故障检测IF b_软起故障 THENi_控制状态 := 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 THENr_当前电压 := 100.0;END_IF;t_启动过程(IN:=TRUE); // 重新开始计时END_IF;// 检查是否完成启动IF b_软起运行 OR (r_当前电压 >= 100.0) THENi_控制状态 := 30; // 进入运行状态t_启动过程(IN:=FALSE);END_IF;// 停止命令IF NOT b_运行命令 OR NOT b_热继电器 OR NOT b_急停按钮 THENi_控制状态 := 40; // 进入停止过程END_IF;
30: // 状态30:运行状态b_启动命令 := TRUE;b_运行指示 := TRUE;r_当前电压 := 100.0; // 全压运行// 停止命令IF NOT b_运行命令 OR NOT b_热继电器 OR NOT b_急停按钮 THENi_控制状态 := 40; // 进入停止过程END_IF;// 故障检测IF b_软起故障 THENi_控制状态 := 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 THENr_当前电压 := 0.0;END_IF;t_停止过程(IN:=TRUE);END_IF;// 停止完成条件IF (r_当前电压 <= 0.0) OR NOT b_软起运行 THENb_停止命令 := 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 THENb_故障复位 := 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
软启动/软停止:电压斜坡控制,平滑启停
多种控制模式:支持直接启动、软启动、软停止
参数可调:启动时间、初始电压、停止时间可在线调整
完善的状态机: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%的工业电机应用场景:
直接启动 - 小功率标准应用【第4集】:电机控制篇|50个SCL编程经典程序-程序6:三相电机直接启动程序
正反转控制 - 双向运动设备【第5集】:电机控制篇|50个SCL编程经典程序-程序7:三相电机正反转控制程序
星三角启动 - 大功率电机降压启动【第6集】:电机控制篇|50个SCL编程经典程序-程序8:星-三角降压启动程序,程序9:电机循环往复运行程序
循环往复 - 自动化往复运动
软启动器 - 高级平稳启停控制
关键技术要点:
安全第一:多重互锁、反馈验证、保护齐全
状态机思维:复杂时序用状态机最清晰
参数化设计:运行参数可调,适应不同工况
完善监控:状态指示、故障报警、运行统计
调试经验分享:
电机类程序必须先模拟测试,再带载测试
接触器反馈必须接线正确,这是安全的关键
定时器参数现场调整,根据实际设备特性优化
一定要有手动调试模式,方便维护
下一集我们将学习:11. 延时启动控制12. 延时停止控制13. 闪烁信号发生器14. 长延时控制程序15. 计数器应用
#今日话题# 你在电机控制中遇到过什么有趣的问题?
欢迎分享你的实战经验!
觉得有用?收藏备用,转发给需要的小伙伴!
学习PLC编程是一场逻辑思维与工程实践的深度结合。沉下心来,从每一个开关、定时器、计数器开始,你终将能搭建出属于自己的自动化大厦。祝你学习顺利!
【🔥 看完别滑走!需要你的支持!】
这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定:
❶ 「评论区」 留下你的想法➠ 遇到了类似问题?有更好的方法?期待你分享见解!
❷ 「转发」 给更多需要的人➠ 也许你身边的朋友,正被同样的问题困扰!
❸ 「收藏」 随时回看复习➠ 知识点需要反复消化,码住不迷路!
每一次互动都是我们继续创作优质内容的动力!💪感谢有你,一起进步!
分享让更多人看看

点赞
收藏
分享