Network 1 — 第 1 步:按下启动

目的:把第 1 步标志置位,作为整条链的起点。
条件 → 动作:按下 unlock_button(或 Tag_1 已经为 1)→ Tag_1 置位;松开按钮后由 Tag_1 自己的触点保持。
为什么:这是最基础的自锁写法——启动条件与自身触点并联。
逻辑:Tag_1 = unlock_button OR Tag_1
9 个网络的消毒流程时序:多步动作、条件互锁与输出控制。
通过 TiaLink 把本示例的 3 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。
这是一个单按钮步序链:用一个自复位按钮(unlock_button)配合"按下 / 松开"两种状态,一步步把 Tag_1 到 Tag_8 的步序标志依次置位;最后一步 Tag_8 触发一个定时器,输出极短的 sanitization 脉冲。
它更像一个步序骨架而不是完整设备程序:除了最后一步,中间标志都没有驱动实际输出。适合用来学习"自锁链"和"单按钮推进"的基本写法,也正好暴露了这种写法的几个典型坑(见"常见问题")。
| 信号 | 类型 | 含义 | 作用 |
|---|---|---|---|
unlock_button |
I | 单按钮(自复位) | 用"按下 / 松开"推进步序 |
Tag_1 |
M | 第 1 步标志 | 按下按钮置位 |
Tag_2 |
M | 第 2 步标志 | 松开后置位 |
Tag_3 |
M | 第 3 步标志 | 条件与第 2 步相同 |
Tag_4 |
M | 第 4 步标志 | 条件与第 2 步相同 |
Tag_5 |
M | 第 5 步标志 | 再按一次置位 |
Tag_6 |
M | 第 6 步标志 | 再松开置位 |
Tag_8 |
M | 第 7 步标志 | 第三次按下置位(点表里另有未被使用的 Tag_7) |
sanitization |
Q | 消毒输出 | 由 Tag_8 触发,仅 10 ms |
IEC_Timer_0_DB |
TP | 脉冲定时器 | PT = T#10MS |
说明:每个
Tag_N都是"步序标志",置位后靠自身触点保持(自锁),所以顺序一旦推进就不会自动退回。
unlock_button → Tag_1 置位;Tag_2、Tag_3、Tag_4 接连置位(因为第 2~4 步的推进条件完全相同);Tag_5;Tag_6;Tag_8;Tag_8 触发 10 ms 脉冲 → sanitization 输出一个极短脉冲;
目的:把第 1 步标志置位,作为整条链的起点。
条件 → 动作:按下 unlock_button(或 Tag_1 已经为 1)→ Tag_1 置位;松开按钮后由 Tag_1 自己的触点保持。
为什么:这是最基础的自锁写法——启动条件与自身触点并联。
逻辑:Tag_1 = unlock_button OR Tag_1

目的:第 1 步完成且按钮松开后,进入第 2 步。
条件 → 动作:Tag_1=1 且 unlock_button=0(松开)→ Tag_2 置位并自锁。
注意:第 3、4 步的推进条件与这里完全相同,所以只要按钮保持松开,Tag_2、Tag_3、Tag_4 会在一个扫描周期内接连置位,无法"一步一次"。
逻辑:Tag_2 = (Tag_1 AND NOT unlock_button) OR Tag_2

目的:在 Tag_2 的基础上继续推进。
条件 → 动作:Tag_2=1 且按钮松开 → Tag_3 置位并自锁。
注意:由于 Tag_2 已在按钮松开时置位,本步会紧接着第 2 步在同一个按钮状态下完成。若希望它需要一个新的按钮动作,需要把条件改成"按钮松开→再按下"的边沿(见"变体与扩展")。
逻辑:Tag_3 = (Tag_2 AND NOT unlock_button) OR Tag_3

目的:继续推进到第 4 步。
条件 → 动作:Tag_3=1 且按钮松开 → Tag_4 置位并自锁。
注意:同样与第 2、3 步几乎同时完成;这一组"连跳三步"是本程序最需要留意的行为。
逻辑:Tag_4 = (Tag_3 AND NOT unlock_button) OR Tag_4

目的:第 5 步改为"按下按钮"推进,与前面拉开区别。
条件 → 动作:Tag_4=1 且按钮按下 → Tag_5 置位并自锁。
为什么:这一步利用了按钮的另一种状态,配合前面几步就形成了"按下 → 松开 → 再按下"的推进节奏。
逻辑:Tag_5 = (Tag_4 AND unlock_button) OR Tag_5

目的:松开按钮后进入第 6 步。
条件 → 动作:Tag_5=1 且按钮松开 → Tag_6 置位并自锁。
逻辑:Tag_6 = (Tag_5 AND NOT unlock_button) OR Tag_6

目的:第三次按下按钮,进入最后一步。
条件 → 动作:Tag_6=1 且按钮按下 → Tag_8 置位并自锁。
注意:程序的标志编号从 Tag_6 跳到 Tag_8;点表里其实定义了 Tag_7(%M0.7),只是本程序没有使用,读的时候容易误会"漏了一步"。
逻辑:Tag_8 = (Tag_6 AND unlock_button) OR Tag_8

目的:最后一步触发消毒输出。
条件 → 动作:Tag_8=1 触发 TP(脉冲定时器),sanitization 输出保持 PT 指定的时长,然后自动关。
为什么:TP 的特点是"触发一次、输出固定保持一段时间",适合做点动或脉冲输出。
注意:PT 的导出值是 T#10MS,也就是 10 毫秒——对"消毒"来说通常太短。如果原意是 10 分钟,应改为 T#10M。这很可能是原工程的笔误,也是本示例最值得记住的坑。
逻辑:sanitization = IEC_Timer_0_DB.Q(IN = Tag_8, PT = T#10MS)
PT = T#10MS 是 10 毫秒;改成 T#10M 才是 10 分钟(若原意如此)。Tag_7 去哪了? 点表里有 Tag_7(%M0.7),但程序没有引用它;属于命名/使用上的不一致,不影响逻辑。PBox/R_TRIG)检测按钮的每一次按下,并把"上一步标志 + 新一次按下沿"作为下一步的置位条件,这样每次按钮动作只前进一步。Tag_1…Tag_8 统一清零(可以逐个复位线圈,或用一个 MOVE 批量写 0)。Tag_N 接到对应执行机构的线圈上,就得到一个完整的多步顺序控制程序;步与步之间可按需要加互锁和超时监控。| 名称 | 数据类型 | 地址 | 注释 |
|---|---|---|---|
| unlock_button | Bool | %I0.0 | |
| sanitization | Bool | %Q0.0 | |
| Tag_1 | Bool | %M0.0 | |
| Tag_2 | Bool | %M0.1 | |
| Tag_3 | Bool | %M0.2 | |
| Tag_4 | Bool | %M0.3 | |
| Tag_5 | Bool | %M0.4 | |
| Tag_6 | Bool | %M0.5 | |
| Tag_7 | Bool | %M0.7 | |
| Tag_8 | Bool | %M0.6 |
TIA 自动生成的定时器/计数器实例 DB,导入示例时会一并导入。
| 名称 | 数据类型 | 起始值 | 注释 |
|---|---|---|---|
| Static | |||
| PT | Time | ||
| ET | Time | ||
| IN | Bool | ||
| Q | Bool | ||