程序13:闪烁信号发生器 功能说明 产生固定频率的脉冲信号,用于指示灯闪烁、设备周期性动作等。工业中最常用的信号发生器之一。 应用场景 设备运行/故障指示灯 蜂鸣器报警 周期性采样/检测 测试信号源 SCL代码实现 FUNCTION_BLOCK FB_闪烁信号发生器VAR_INPUT // 控制信号 b_使能信号: BOOL; // 输入:使能信号 b_手动闪烁: BOOL := FALSE; // 输入:手动触发闪烁 // 闪烁参数(可在HMI设置) r_亮的时间: TIME := T#1S; // 输入:信号为ON的时间 r_灭的时间: TIME := T#1S; // 输入:信号为OFF的时间 b_单次触发: BOOL := FALSE; // 输入:单次闪烁模式END_VARVAR_OUTPUT b_闪烁输出: BOOL; // 输出:闪烁信号 b_闪烁指示: BOOL; // 输出:闪烁状态指示 i_闪烁计数: INT; // 输出:闪烁次数计数END_VARVAR t_亮定时器: TON; // 定时器:亮的时间 t_灭定时器: TON; // 定时器:灭的时间 b_当前状态: BOOL; // 内部:当前闪烁状态 i_计数缓存: INT := 0; // 内部:闪烁计数 b_单次完成: BOOL; // 内部:单次闪烁完成END_VAR // == 闪烁控制逻辑 ==IF b_使能信号 OR b_手动闪烁 THEN IF b_单次触发 AND b_单次完成 THEN // 单次模式且已完成,停止闪烁 b_闪烁输出 := FALSE; b_当前状态 := FALSE; t_亮定时器(IN:=FALSE); t_灭定时器(IN:=FALSE); ELSE CASE b_当前状态 OF FALSE: // 状态0:输出为OFF,等待变为ON b_闪烁输出 := FALSE; t_灭定时器(IN:=TRUE, PT:=r_灭的时间); IF t_灭定时器.Q THEN b_当前状态 := TRUE; // 切换到ON状态 t_灭定时器(IN:=FALSE); // 计数(从OFF到ON算一次闪烁) i_计数缓存 := i_计数缓存 + 1; // 单次模式检查 IF b_单次触发 AND (i_计数缓存 >= 1) THEN b_单次完成 := TRUE; END_IF; END_IF; TRUE: // 状态1:输出为ON,等待变为OFF b_闪烁输出 := TRUE; t_亮定时器(IN:=TRUE, PT:=r_亮的时间); IF t_亮定时器.Q THEN b_当前状态 := FALSE; // 切换到OFF状态 t_亮定时器(IN:=FALSE); END_IF; END_CASE; END_IF;ELSE // 禁用状态 b_闪烁输出 := FALSE; b_当前状态 := FALSE; t_亮定时器(IN:=FALSE); t_灭定时器(IN:=FALSE); i_计数缓存 := 0; b_单次完成 := FALSE;END_IF; // == 输出处理 ==b_闪烁指示 := b_使能信号 OR b_手动闪烁;i_闪烁计数 := i_计数缓存;// == 高级功能:占空比控制 ==VAR_INPUT r_占空比: REAL := 50.0; // 输入:占空比(0-100%) r_闪烁周期: TIME := T#2S; // 输入:总周期时间END_VAR// 如果提供占空比和周期,可以自动计算亮灭时间IF r_占空比 > 0.0 AND r_闪烁周期 > T#0S THEN r_亮的时间 := r_闪烁周期 * (r_占空比 / 100.0); r_灭的时间 := r_闪烁周期 - r_亮的时间;END_IF;END_FUNCTION_BLOCK // 1. 标准闪烁模式fb标准闪烁( b_使能信号 := b_设备运行, r_亮的时间 := T#0.5S, r_灭的时间 := T#0.5S, b_闪烁输出 => b_运行指示灯);// 2. 快速报警闪烁fb报警闪烁( b_使能信号 := b_设备故障, r_亮的时间 := T#0.2S, r_灭的时间 := T#0.2S, b_闪烁输出 => b_故障指示灯);// 3. 单次确认闪烁fb单次闪烁( b_使能信号 := b_按钮按下, b_单次触发 := TRUE, r_亮的时间 := T#0.1S, r_灭的时间 := T#0.1S, b_闪烁输出 => b_确认指示灯); 设计要点 状态切换:两个状态(ON/OFF)清晰明了 参数灵活:亮灭时间可独立设置 多种模式:支持连续、单次、占空比控制 计数功能:可统计闪烁次数 学习PLC编程是一场逻辑思维与工程实践的深度结合。沉下心来,从每一个开关、定时器、计数器开始,你终将能搭建出属于自己的自动化大厦。祝你学习顺利! 【 看完别滑走!需要你的支持!】 这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定: 「评论区」 留下你的想法 遇到了类似问题?有更好的方法?期待你分享见解! 「转发」 给更多需要的人 也许你身边的朋友,正被同样的问题困扰! 「收藏」 随时回看复习 知识点需要反复消化,码住不迷路! 每一次互动都是我们继续创作优质内容的动力!感谢有你,一起进步! --- --- 推荐阅读: 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |