跳到主要内容

LED 闪烁与流水灯

1. 设备简介

LED 信号塔控制柜是产线上最朴素也最常见的终端装置, 绿灯亮代表设备正常运行, 红灯闪烁代表需要工人介入, 黄灯常亮代表缺料待补。典型应用于电子组装、食品包装、机加工单元、检测工站等离散制造车间。一个中型工厂往往部署上百个这类信号指示点, 用于工位状态可视化与节拍指引。本入门案例实现 "单灯闪烁 → 8 路流水灯 → 乒乓灯" 三种运行模式, 响应延迟控制在 ≤ 50 ms (1 个扫描周期) 内, 目标是让新工程师 30 分钟内完成第一套 Darra PLC 程序。

2. 项目模块组成

  • 机械部分: 控制柜本体 / 信号塔 / 8 路 φ22 LED 指示灯 / 操作面板
  • 电气部分: 研华工控机 + 汇川 16DI/16DO IO 从站 + 明纬 24V 电源 + 启停按钮
  • 软件部分: Darra IDE 工程包含 OB1 主循环 + FB_LightControl + DB_Config + HMI 画面

3. 机械装配架构

控制柜内部署工控机与 IO 从站, 操作面板 (启动/停止/模式选择) 通过 DI 接入 IO 从站, 8 路 LED 通过 DO 输出直接驱动。信号塔支架安装在产线易观察位置, 支持墙挂或立柱安装。整柜通过一根 EtherCAT 线缆连接主控, 接线量极少, 适合快速部署。

4. 程序架构

OB1 以 50 ms 周期调用 FB_MainControl, 主控功能块根据 HMI 选择的模式 (闪烁/流水/乒乓) 调用 FB_LightControl, 同时 FB_AlarmManager 监视急停与 IO 掉线。所有可调参数存放在 DB_Config 中, 运行态数据存放在 DB_Runtime。

5. 硬件选型 BOM

品牌型号数量单价 (¥)用途
研华MIO-5272 (Intel i5 8GB)13,000工控机主控
汇川AM600-1616END185016DI/16DO EtherCAT IO
国产通用24V LED 指示灯 φ22815红/黄/绿指示灯
正泰按钮盒 (启/停/模式)1120操作面板
明纬LRS-100-24112024V 开关电源
威纶通TK6071iP 7" (可选)11,100本地触摸屏
国产通用CAT5e EtherCAT 专用线130总线连接

注: 若仅使用 Darra 内置浏览器 HMI, 可省去威纶通触摸屏。

6. IO 模块配置

6.1 选择 IO 模块

在 Darra IDE 中打开项目树, 右键 "IO 设备" > 添加 IO 设备 > 从 ESI 库选型:

  • 从站 1: 汇川 AM600-1616END (16 DI + 16 DO) — 用于按钮采集与 LED 输出

配置向导中扫描 EtherCAT 网段自动发现从站, 确认 Vendor ID / Product Code 与型号匹配后点击 "确认添加"。从站会自动分配站点编号 1001。

6.2 IO 地址分配

地址模块信号用途
%IX0.0从站 1SB_Start启动按钮
%IX0.1从站 1SB_Stop停止按钮 (常闭)
%IX0.2从站 1SW_Mode0模式选择位 0
%IX0.3从站 1SW_Mode1模式选择位 1
%IX0.7从站 1SB_EStop急停 (常闭)
%QX0.0 ~ %QX0.7从站 1aLED[0..7]8 路 LED 输出
%QX1.0从站 1HL_Fault故障指示灯

6.3 IO 用途分工

  • PLC 主控: 全部 DO 由 PLC 直接驱动 LED, DI 采集操作员按钮
  • 安全链: 急停按钮接常闭触点, 断线即触发停机, 属于硬件级保护
  • 扩展预留: AM600-1616END 预留 8 点 DI 与 8 点 DO, 后续可扩展到 16 路流水灯

7. 核心数据结构

TYPE UDT_LightStation:
STRUCT
bEnable : BOOL; // 系统使能
eMode : INT; // 0=闪烁 1=流水 2=乒乓
tStepSpeed : TIME; // 步进间隔
nCurrentPos : INT; // 当前流水位置
aOutput : ARRAY[0..7] OF BOOL; // 输出镜像
END_STRUCT
END_TYPE

// DB_Config (Retain) —— HMI 可调参数
VAR_GLOBAL RETAIN
gCfg_Mode : INT := 1; // 默认流水模式
gCfg_StepSpeed : TIME := T#200ms; // 默认步速
END_VAR

// DB_Runtime —— 运行态
VAR_GLOBAL
gRun_Light : UDT_LightStation;
gRun_CycleCount : DINT; // 累计循环次数
END_VAR

8. 核心程序代码

FB_MainControl — 模式分发状态机:

FUNCTION_BLOCK FB_MainControl
VAR_INPUT
bStart : BOOL;
bStop : BOOL;
bEStop : BOOL;
END_VAR
VAR
tonStep : TON;
bToggle : BOOL;
bForward : BOOL := TRUE;
i : INT;
END_VAR

// 急停联锁 (失效安全)
IF NOT bEStop THEN
gRun_Light.bEnable := FALSE;
FOR i := 0 TO 7 DO gRun_Light.aOutput[i] := FALSE; END_FOR;
RETURN;
END_IF;

// 启停
IF bStart THEN gRun_Light.bEnable := TRUE; END_IF;
IF NOT bStop THEN gRun_Light.bEnable := FALSE; END_IF;

// 模式 0: 单灯闪烁 (1 Hz)
IF gCfg_Mode = 0 AND gRun_Light.bEnable THEN
tonStep(IN := NOT tonStep.Q, PT := T#500ms);
IF tonStep.Q THEN bToggle := NOT bToggle; END_IF;
gRun_Light.aOutput[0] := bToggle;
END_IF;

// 模式 1: 流水灯
IF gCfg_Mode = 1 AND gRun_Light.bEnable THEN
tonStep(IN := NOT tonStep.Q, PT := gCfg_StepSpeed);
IF tonStep.Q THEN
gRun_Light.nCurrentPos := (gRun_Light.nCurrentPos + 1) MOD 8;
END_IF;
FOR i := 0 TO 7 DO
gRun_Light.aOutput[i] := (i = gRun_Light.nCurrentPos);
END_FOR;
END_IF;

FB_AlarmManager — 报警管理:

FUNCTION_BLOCK FB_AlarmManager
VAR_INPUT
bEStop : BOOL;
bStopBtn : BOOL;
END_VAR
VAR_OUTPUT
bAlarm : BOOL;
sMsg : STRING[40];
END_VAR

IF NOT bEStop THEN
bAlarm := TRUE;
sMsg := '急停按钮已按下';
ELSIF NOT bStopBtn THEN
bAlarm := FALSE;
sMsg := '';
ELSE
bAlarm := FALSE;
END_IF;

9. 运行与调试

  1. 仿真 Runtime 验证: IDE 内置仿真模式, 不接硬件即可观察 DO 输出
  2. 下载到 Runtime: IDE 菜单 "部署" → 选择目标 IP → 下载 PLC 程序
  3. 在线监控: 打开 DB_Runtime, 观察 nCurrentPos 按设定速度递增
  4. 强制信号测试: 强制 %IX0.7 := TRUE (模拟急停复位), 观察 LED 正常亮灭
  5. 常见报警排查: 若全部 LED 不亮, 优先检查 24V 电源电压 + 从站 RUN 灯 + EtherCAT 链路

10. 用到的 Darra 功能

功能模块本案例用到的说明
PLC 编程SCL + OB1 主循环 + TON 定时器 + FOR 循环行业标准 IEC 61131-3
工艺对象无 (纯逻辑)入门案例
HMI本地浏览器 + 手机远程同屏无需额外组态软件
通讯EtherCAT 主站高精度 IO 采集
服务终端授权管理设备出厂后可远程运维

11. 项目总结

  • 实测指标: 扫描周期 50 ms, 响应延迟 ≤ 1 个周期, 连续运行 72 小时零丢步
  • 扩展方向:
    1. 增加"按节拍闪烁" (对接 MES 订单节拍信号), 红/黄/绿自动切换
    2. 增加 16 路灯塔版 + RGB 幻彩 (需换 16DO 模块)
    3. 对接微信/钉钉 Webhook, 故障灯亮时推送到维修群