导入到我的 TIA 项目
通过 TiaLink 把本示例的 5 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。
概述
按一下启动按钮,铃响 10 秒;另外有一个"加时"按钮,按下后 15 秒内不会再响。
程序用两个网络实现:Network 1 决定铃响和 60 秒封锁,Network 2 用加时按钮临时抑制响铃。重点是理解脉冲定时器 TP(响铃时长)和定时封锁(避免连续响铃)的组合。
信号表
| 信号 |
类型 |
含义 |
作用 |
start_button |
I |
启动按钮 |
按一下开始响铃 |
add_button |
I |
加时/静音按钮 |
按下后封锁响铃 15 秒 |
Bell |
Q |
电铃输出 |
响 10 秒 |
Tag_1 |
M |
60 秒封锁标志 |
条件持续 60 秒后置位,阻止响铃 |
Tag_2 |
M |
15 秒静音标志 |
加时按钮触发,阻止响铃 |
IEC_Timer_0_DB |
TP |
响铃定时 10 秒 |
决定铃响多久 |
IEC_Timer_0_DB_1 |
TON |
封锁定时 60 秒 |
长时间按住时封锁 |
IEC_Timer_0_DB_2 |
TP |
加时定时 15 秒 |
决定静音多久 |
工作流程
- 按下
start_button → TP 触发,Bell 响 10 秒;
- 同一条条件同时启动 60 秒 TON,如果条件(启动按钮未被封锁)持续 60 秒 →
Tag_1 置位,封锁响铃;
- 任何时候按下
add_button → Tag_2 置位 15 秒,期间 Bell 不响;
Tag_1、Tag_2 通过常闭触点串在响铃条件里,任一为 1 都会打断响铃。
MainOB
Network 1 — 响铃与封锁
目的:响铃 10 秒,并在长时间触发后封锁。
条件 → 动作:start_button=1 且 Tag_2=0 且 Tag_1=0 时,TP 触发,Bell 输出保持 10 秒;同一条件还接到 60 秒的 TON,持续 60 秒后 Tag_1 置位,把响铃条件切断(Tag_1=1 又会让 TON 复位,形成周期)。
为什么:TP 负责"响多久";TON 负责"连续触发多久后禁止再响";两个封锁标志用常闭触点接入,实现"条件不满足就停"。
注意:start_button 是自复位按钮时,60 秒 TON 需要一直按住才会到时间;如果本意是"响铃后 60 秒内不重复",这个网络并不能实现,需要改成自锁或沿触发(见"变体与扩展")。
逻辑:
Bell = TP(IN = start_button AND NOT Tag_2 AND NOT Tag_1, PT = T#10s).Q
Tag_1 = TON(IN = start_button AND NOT Tag_2 AND NOT Tag_1, PT = T#60s).Q
Network 2 — 加时静音 15 秒
目的:按下加时按钮后,让铃静音 15 秒。
条件 → 动作:按下 add_button → TP 触发,Tag_2 输出保持 15 秒(Tag_2 就是 TP 的 Q)。
为什么:Tag_2 的常闭触点接在 Network 1 的响铃条件上,所以 15 秒内 Bell 不会响;TP 让静音时间固定,不依赖按钮是否按住。
注意:TP 触发一次后就固定输出 15 秒,中途再按 add_button 不会重新计时,要等这次结束。
逻辑:Tag_2 = TP(IN = add_button, PT = T#15s).Q
常见问题
- 按了启动不响:检查
Tag_1/Tag_2 是否还是 1(封锁未解除),或响铃条件是否被断开。
- 必须一直按住才开始 60 秒封锁:这是当前逻辑的行为;如需"响一次后 60 秒内不重复",见扩展。
- 响铃时间或静音时间不对:改两个 TP 的
PT(T#10s、T#15s);封锁时间改 TON 的 PT(T#60s)。
变体与扩展
- 响一次后 60 秒不重复:用
Bell 的下降沿(或任何一次触发)启动 60 秒 TON,把 TON 的 Q 串在启动条件里。
- 上课铃 / 下课铃:把启动按钮换成时间表触发(如时钟比较指令),TP 的时长照旧。
- 加音量或时长选择:用不同按钮触发不同
PT 的 TP,或用变量写入 PT。
变量与数据块
系统实例 DB(3 个)
TIA 自动生成的定时器/计数器实例 DB,导入示例时会一并导入。
IEC_Timer_0_DB 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_1 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_2 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |