『7x24小时有问必答』
点击蓝字

PLC自动化汇
关注我们

程序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_VAR

VAR_OUTPUT      b_闪烁输出:  BOOL;  // 输出:闪烁信号      b_闪烁指示:  BOOL;  // 输出:闪烁状态指示      i_闪烁计数: INT;  // 输出:闪烁次数计数END_VAR

VAR      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编程是一场逻辑思维与工程实践的深度结合。沉下心来,从每一个开关、定时器、计数器开始,你终将能搭建出属于自己的自动化大厦。祝你学习顺利!
【 看完别滑走!需要你的支持!】
这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定:
  「评论区」  留下你的想法

  遇到了类似问题?有更好的方法?期待你分享见解!
  「转发」  给更多需要的人

  也许你身边的朋友,正被同样的问题困扰!
  「收藏」  随时回看复习

  知识点需要反复消化,码住不迷路!
每一次互动都是我们继续创作优质内容的动力!

感谢有你,一起进步!

---

---

推荐阅读:
分享让更多人看看
点赞
收藏
分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码