当前位置:首页>java>【第10集】:定时计数篇|50个SCL编程经典程序-程序13:闪烁信号发生器

【第10集】:定时计数篇|50个SCL编程经典程序-程序13:闪烁信号发生器

  • 2026-08-25 10:05:58
【第10集】:定时计数篇|50个SCL编程经典程序-程序13:闪烁信号发生器
点击蓝字

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_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_确认指示灯);

设计要点

  1. 状态切换:两个状态(ON/OFF)清晰明了

  2. 参数灵活:亮灭时间可独立设置

  3. 多种模式:支持连续、单次、占空比控制

  4. 计数功能:可统计闪烁次数

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

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

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

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

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

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

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



推荐阅读:
  1. PLC编程高手必备!50个经典程序SCL编程全解析(目录提纲)
  2. 【第1集】:50个SCL编程经典程序:程序1-点动控制程序,程序2-自锁(保持)控制程序
  3. 【第2集】:50个SCL编程经典程序-程序3:互锁(联锁)控制程序,程序4:多地控制程序
  4. 【第3集】:50个SCL编程经典程序-程序5:顺序启动控制程序及主程序调用
  5. 【第4集】:电机控制篇|50个SCL编程经典程序-程序6:三相电机直接启动程序
  6. 【第5集】:电机控制篇|50个SCL编程经典程序-程序7:三相电机正反转控制程序
  7. 【第6集】:电机控制篇|50个SCL编程经典程序-程序8:星-三角降压启动程序,程序9:电机循环往复运行程序
  8. 【第7集】:电机控制篇|50个SCL编程经典程序-程序10:软启动器基础控制程序及主程序调用示例
  9. 【第8集】:定时计数篇|50个SCL编程经典程序-程序11:延时启动控制程序
  10. 【上集】西门子SCL实战:智能节拍计算功能块开发全解析
  11. 【下集】西门子SCL实战:产能统计与班次管理系统深度解析
  12. 西门子SCL综合实例项目功能块1:FB_输送带控制 - 物料输送系统控制模块
  13. 西门子SCL综合实例项目功能块2:FB_伺服控制 - 精密运动控制模块
  14. 西门子SCL综合实例项目功能块3:FB_视觉系统 - 机器视觉检测控制模块
  15. 西门子SCL综合实例项目功能块4:FB_气缸控制 - 气动执行机构控制模块
  16. 西门子SCL综合实例项目功能块5:FB_高级PID控制器 - 精密过程控制模块
  17. 西门子SCL综合实例项目功能块6:FB_PID自整定 - 自动参数整定模块
  18. 西门子SCL综合实例项目功能块7:FB_串级PID控制 - 复杂过程控制模块
  19. 西门子SCL综合实例项目功能块8:FB_前馈补偿 - 扰动补偿控制模块
  20. 《一个电气工程师的SCL牛马日常》

分享让更多人看看

点赞

收藏

分享

最新文章

随机文章