跳到正文
Learn-LAD
示例库/楼梯灯控制

楼梯灯控制

三个楼层的按钮分别点亮对应楼层灯,松开后延时 10 秒熄灭。

入门 S7-1200 楼梯灯 TOF 延时

导入到我的 TIA 项目

通过 TiaLink 把本示例的 5 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

概述

每个楼层一个按钮、一盏灯:按下按钮点亮对应楼层的灯,松开后延时 10 秒自动熄灭。

三个网络结构完全相同,都是"按钮 + TOF 延时断开 + 灯"的最简组合。点表里还定义了 L4,但程序只实现了三层。

信号表

信号 类型 含义 作用
S1 / S2 / S3 I 各楼层按钮 按下点亮对应楼层灯
L1 / L2 / L3 Q 各楼层灯 按钮松开后延时 10 秒熄灭
IEC_Timer_0_DB / _1 / _2 TOF 各 10 秒 延时断开
L4 Q 第 4 层灯 点表已定义,程序未使用

工作流程

  1. 按下 S1 → L1 立即点亮;
  2. 松开 S1 → TOF 开始计时 10 秒,L1 继续亮;
  3. 10 秒到 → L1 自动熄灭;
  4. S2/S3 对 L2/L3 同理。

MainOB

Network 1 — 一层灯

Network 1:S1、L1

目的:按钮控制一层灯的延时熄灭。

条件 → 动作:S1=1 时 L1=1;S1 变 0 后 TOF 继续输出 10 秒,然后 L1=0。

为什么:TOF 是"延时断开"——输入为 1 时输出立即为 1,输入变 0 后输出保持 PT 那么久。正好符合"人走后再亮一会儿"的楼梯灯需求。

注意:TOF 的 PT 是"松开后还亮多久",不是"按下后多久亮";这一点和 TON 正好相反。

逻辑:L1 = TOF(IN = S1, PT = T#10s).Q

Network 2 — 二层灯

Network 2:S2、L2

目的:与一层完全相同的延时熄灭逻辑。

条件 → 动作:S2=1 → L2=1;S2 变 0 后保持 10 秒再熄灭。

逻辑:L2 = TOF(IN = S2, PT = T#10s).Q

Network 3 — 三层灯

Network 3:S3、L3

目的:与一层完全相同的延时熄灭逻辑。

条件 → 动作:S3=1 → L3=1;S3 变 0 后保持 10 秒再熄灭。

逻辑:L3 = TOF(IN = S3, PT = T#10s).Q

常见问题

  • 灯不亮:确认按钮信号和对应的 TOF 实例是否正常。
  • 熄灭太快/太慢:改 TOF 的 PT(T#10s)。
  • 第四层没有灯:点表里有 L4,但程序没有实现第四层;需要复制一个网络并接 S4。

变体与扩展

  • 加第四层:复制 Network 3,把 S3/L3 换成 S4/L4(点表已就绪)。
  • 统一延时:把三个 TOF 的 PT 改成同一个变量,便于集中调整。
  • 改成 TON 延时点亮:如果需求是"按下后延迟亮"而不是"延时灭",把 TOF 换成 TON 即可。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
S1Bool%I0.0
S2Bool%I0.1
S3Bool%I0.2
L1Bool%Q0.0
L2Bool%Q0.1
L3Bool%Q0.2
L4Bool%Q0.3
系统实例 DB(3 个)

TIA 自动生成的定时器/计数器实例 DB,导入示例时会一并导入。

IEC_Timer_0_DB 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_1 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_2 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool

下一步