导入到我的 TIA 项目
通过 TiaLink 把本示例的 11 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。
概述
打开喷淋开关后,四个喷淋区按 15 秒间隔依次喷淋;下雨天自动跳过,检测到人时对应区暂停;一个完整循环约 60 秒。
程序用 SR 启停 + 四组延时/脉冲 + 雨感和人体感应互锁,是"分区顺序 + 安全条件"的典型结构。
信号表
| 信号 |
类型 |
含义 |
作用 |
Switch_ON / Switch_OFF |
I |
喷淋开/关 |
启动/停止系统 |
Rain_Detection_Sensor |
I |
雨感(常闭) |
下雨时禁止喷淋 |
Human_sensor_Zone_1~4 |
I |
各区人体感应(常闭) |
有人时该区暂停 |
Tag_1 |
M |
系统运行标志 |
SR 保持 |
Tag_2~5 |
M |
四个区的喷淋窗口 |
各 15 秒 |
Tag_6 |
M |
循环结束脉冲 |
60 秒后持续 1 秒 |
Sprinkler_Zone_1~4 |
Q |
四个喷淋阀 |
分区输出 |
工作流程
Switch_ON → Tag_1 置位并保持(Switch_OFF 复位);
- 第 0 秒:1 区喷 15 秒;第 15 秒:2 区;第 30 秒:3 区;第 45 秒:4 区;
- 每个区都串入本区的人体感应常闭触点,有人时该区不喷;
- 第 60 秒:
Tag_6 产生 1 秒脉冲,作为循环结束条件;之后重新开始下一轮。
MainOB
Network 1 — 系统启停(SR)
目的:用开关启停整个喷淋系统。
条件 → 动作:Switch_ON=1 且无雨 → 置位 Tag_1;Switch_OFF=1 → 复位 Tag_1。
为什么:SR 保持让系统在开关松开后继续运行;雨感常闭串在置位条件里,下雨时无法启动。
注意:雨感只在启动时判断;系统运行中下雨,Tag_1 不会自动复位(Network 2 里另有雨感常闭条件)。
逻辑:
置位:Tag_1 = Switch_ON AND NOT Rain_Detection_Sensor
复位:Tag_1 = Switch_OFF
Network 2 — 四区顺序与结束
目的:按 15 秒间隔依次打开四个喷淋区,并在一轮结束后重置。
条件 → 动作:
- 1 区:
Tag_2 = TP(IN = Tag_1 AND NOT Rain AND NOT Tag_6, 15s).Q AND NOT Human_1;
- 2 区:
Tag_3 = TP(IN = TON(IN = 条件, 15s).Q, 15s).Q AND NOT Human_2;
- 3 区:
Tag_4 = TP(IN = TON(IN = 条件, 30s).Q, 15s).Q AND NOT Human_3;
- 4 区:
Tag_5 = TP(IN = TON(IN = 条件, 45s).Q, 15s).Q AND NOT Human_4;
- 结束:
Tag_6 = TP(IN = TON(IN = 条件, 60s).Q, 1s).Q。
为什么:四个区用同一组 TON 做错峰,每个 TP 固定喷 15 秒;Tag_6 在 60 秒时短暂置位,把 Tag_2~5 的条件打断,下一轮重新开始。
注意:人体感应是"该区暂停"而不是"整个系统停止";雨感常闭串在所有区条件里,运行中下雨也会立即停喷。
逻辑(1 区示例):
Tag_2 = TP(IN = Tag_1 AND NOT Rain_Detection_Sensor AND NOT Tag_6, PT = T#15s).Q AND NOT Human_sensor_Zone_1
Network 3 — 分区输出
目的:把四个区的窗口映射到喷淋阀。
条件 → 动作:Sprinkler_Zone_N = Tag_{N+1}。
逻辑:Sprinkler_Zone_1 = Tag_2(其余同理)
常见问题
- 下雨还在喷:检查雨感常闭触点是否正常;运行中下雨应通过常闭条件立即停喷。
- 某个区不喷:先看该区人体感应是否误动作,再看对应的 TON/TP 延时。
- 循环不重启:检查 60 秒的 TON 和 1 秒的
Tag_6 脉冲是否正常。
变体与扩展
- 按湿度喷淋:用土壤湿度传感器替代固定时间,干透才喷。
- 分区时长可调:把每个 TP 的
PT 改成参数,适配不同植物。
- 加手动模式:增加手动按钮,直接打开某个区,便于维护。
变量与数据块
系统实例 DB(9 个)
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 | | |
IEC_Timer_0_DB_3 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_4 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_5 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_6 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_8 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |
IEC_Timer_0_DB_9 实例 DB(IEC_TIMER)
| 名称 | 数据类型 | 起始值 | 注释 |
| Static |
| PT | Time | | |
| ET | Time | | |
| IN | Bool | | |
| Q | Bool | | |