跳到正文
Learn-LAD
示例库/延时自动门

延时自动门

TON 与 TOF 组合:门在触发后延时打开,离开后延时关闭。

入门 S7-1200 定时器 TON TOF

导入到我的 TIA 项目

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

TiaLink 设置

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

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

概述

门默认是锁住的;当"启动按钮 + 移动传感器"同时有效并持续 10 秒后,门锁打开,并在条件消失后再保持 5 秒,然后重新锁上。

两个网络的分工很清晰:Network 1 用 TON + TOF 串联做"等 10 秒、再保持 5 秒"的延时;Network 2 把结果取反,变成门锁输出。

信号表

信号 类型 含义 作用
Start_Button I 启动按钮 与传感器一起触发开门
Motion_Sensor I 移动传感器 检测到人/物体
Tag_1 M 开门窗口标志 1 = 门锁打开
Door_Locked Q 门锁输出 默认 1(上锁)
IEC_Timer_0_DB TON 延时接通 10 秒 条件持续 10 秒才动作
IEC_Timer_0_DB_1 TOF 延时断开 5 秒 条件消失后再保持 5 秒

工作流程

  1. Start_Button 与 Motion_Sensor 同时有效;
  2. 持续 10 秒后,TON 输出 → TOF 输入接通;
  3. TOF 输出为 1 → Tag_1=1 → Network 2 输出 Door_Locked=0,门锁打开;
  4. 条件消失后,TOF 再保持 5 秒,然后 Tag_1 归 0 → Door_Locked=1,门重新锁上。

MainOB

Network 1 — 10 秒延时 + 5 秒保持

Network 1:Start_Button、Motion_Sensor、Tag_1

目的:生成一个"延迟打开、稍后自动关闭"的开门窗口。

条件 → 动作:Start_Button AND Motion_Sensor 持续 10 秒 → TON 输出;该输出接到 TOF,TOF 让 Tag_1 保持,并在输入消失后继续维持 5 秒。

为什么:TON 解决"必须持续多久才开门",TOF 解决"条件没了还能保持多久"。两者串联就是最常见的"延迟 + 缓释"结构。

注意:TON 要求条件连续成立 10 秒,中途断开就重新计时;这是和 TP(触发后固定输出)最大的区别。

逻辑:Tag_1 = TOF(IN = TON(IN = Start_Button AND Motion_Sensor, PT = T#10s).Q, PT = T#5s).Q

Network 2 — 门锁输出(取反)

Network 2:Tag_1、Door_Locked

目的:把"开门窗口"翻译成门锁的物理输出。

条件 → 动作:Tag_1=1 时 Door_Locked=0(解锁);Tag_1=0 时 Door_Locked=1(上锁)。

为什么:门锁是"失电上锁"(fail-safe)的典型用法:默认锁住,只有逻辑允许时才通电打开,断线或停电都会保持锁门。

注意:原工程的注释里提到 M0.0,但当前逻辑用的是 Start_Button 和 Motion_Sensor;读的时候以实际接线为准。

逻辑:Door_Locked = NOT Tag_1

常见问题

  • 门一直不解锁:确认两个输入是否同时有效且持续了 10 秒;TON 中途断开会重新计时。
  • 门开得太短:把 TOF 的 PT 从 T#5s 调大。
  • 想更快开门:把 TON 的 PT(T#10s)改小。

变体与扩展

  • 自动感应门:把 Start_Button 去掉,只留 Motion_Sensor;再把 TON 时间调短。
  • 加安全联锁:在 Network 2 里串一个"门区无障碍"信号,保证有人时不会上锁。
  • 失败安全:保持 NOT Tag_1 的取反接法,门锁线圈失电时处于锁门状态。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
Start_ButtonBool%I0.0
Motion_SensorBool%I0.1
Door_LockedBool%Q0.0
Tag_1Bool%M0.0
系统实例 DB(2 个)

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

下一步