第四章 梯形图基础(二):置位/复位指令、边沿检测与定时器
各位同学,欢迎来到梯形图基础的第二讲。上一章我们聊了常开常闭触点、线圈这些基本元素,算是把梯形图的“单词”认全了。今天咱们要学的,是几个真正让程序“活”起来的指令——置位复位、边沿检测和定时器。
说实话,这三样东西,你如果玩明白了,那PLC编程就算入门一半了。我当年刚入行时,师傅丢给我一个项目,让我用起保停电路控制一个传送带。我折腾了半天,结果发现用置位复位指令两行就搞定了。嗯,从那天起我就知道,指令选对了,事半功倍。
本章核心知识点速览:
- 置位(S)与复位(R)指令——让输出“锁住”状态
- 边沿检测指令——捕捉信号的“一瞬间”
- 定时器指令——让程序学会“等待”
一、置位与复位指令——让输出“记住”状态
先问大家一个问题:如果你按一下按钮,灯亮了,手松开后灯还亮着,怎么实现?
用我们上一章学的知识,你可能想到自锁电路。没错,自锁能实现。但自锁有个缺点——程序写起来啰嗦,而且一旦逻辑复杂了,容易出问题。我个人习惯,在这种需要“保持状态”的场景下,直接用置位复位指令。
置位(Set,简称S):当条件满足时,把某个位强制设为1,并且一直保持,直到被复位。
复位(Reset,简称R):当条件满足时,把某个位强制设为0。
说白了,置位就是“开锁”,复位就是“关锁”。锁一旦开了,你不去关它,它就一直开着。
💡 我的经验:在西门子博途(TIA Portal)中,置位指令通常用S线圈表示,复位用R线圈。三菱PLC里则是SET和RST。不同品牌叫法不同,但本质一样。
来看一个最简单的例子:
// 梯形图表示(西门子风格)
// 网络1:当I0.0接通时,置位Q0.0
I0.0 Q0.0
---| |--------( S )
1
// 网络2:当I0.1接通时,复位Q0.0
I0.1 Q0.0
---| |--------( R )
1
这段程序什么意思?你按下启动按钮(I0.0),Q0.0就亮了,手松开也不灭。直到你按下停止按钮(I0.1),Q0.0才灭。
我在项目中遇到过一个问题:有同事用置位复位指令时,把S和R写在了同一个网络里。结果呢?如果两个条件同时满足,到底置位还是复位?不同PLC处理方式不一样,有的优先置位,有的优先复位。这就埋下了隐患。
⚠️ 避坑指南:我曾经在一个包装线项目里,就因为S和R同时触发,导致气缸动作混乱,差点撞坏模具。后来我定了个规矩:置位和复位永远写在不同的网络里,并且用互锁逻辑保证它们不会同时为真。
二、边沿检测指令——捕捉信号的“一瞬间”
你想想看,一个按钮按下去,从0变成1,这个过程在PLC扫描周期里可能只持续几个毫秒。但如果你用普通的常开触点去检测,只要按钮按着,触点就一直通。有时候我们需要的不是“持续通”,而是“刚按下的那一瞬间”。
这就是边沿检测的用武之地。
上升沿(Positive Edge,简称P或R_TRIG):检测信号从0变1的那一瞬间,产生一个扫描周期的脉冲。
下降沿(Negative Edge,简称N或F_TRIG):检测信号从1变0的那一瞬间。
说白了,边沿检测就是“抓拍”。它不关心信号持续多久,只关心变化的那一下。
| 指令类型 | 触发条件 | 输出脉冲宽度 | 典型应用场景 |
|---|---|---|---|
| 上升沿(P) | 信号从0→1 | 一个扫描周期 | 按钮按下触发、启动信号 |
| 下降沿(N) | 信号从1→0 | 一个扫描周期 | 按钮松开触发、故障复位 |
来看个实际例子:
// 梯形图表示(西门子风格)
// 网络1:检测I0.0的上升沿,触发M0.0
I0.0 M0.0
---|P|-------( )
1
// 网络2:M0.0只接通一个扫描周期,用于触发计数器
M0.0 C1
---| |-------( CU )
1
这段程序里,每次你按下按钮(I0.0从0变1),M0.0就亮一下,然后立刻灭掉。这个脉冲用来驱动计数器C1,每按一次,计数器加1。如果你用普通触点,按着不放,计数器会一直加,那就乱套了。
💡 我的习惯:在SCL语言里,边沿检测需要配合R_TRIG或F_TRIG功能块使用。我个人更推荐在梯形图里用边沿检测,因为直观;在SCL里处理复杂逻辑时,再用功能块方式。
我记得有一次调试一个输送带项目,操作工反映“有时候按一下启动,设备会连续动作两次”。查了半天,发现是按钮触点抖动,一个上升沿被检测成了两个。后来加了硬件滤波和软件去抖,问题才解决。嗯,边沿检测虽好,但信号抖动是个大敌。
⚠️ 避坑指南:我曾经在一个项目中,用下降沿检测急停按钮的复位信号。结果急停按钮本身有机械抖动,复位时产生了多个下降沿,导致安全逻辑误动作。后来我在程序里加了延时确认,才彻底解决。记住:边沿检测对信号质量要求高,机械触点一定要做去抖处理。
三、定时器指令——让程序学会“等待”
工业现场,很多动作不是瞬间完成的。电机启动需要时间、气缸伸出需要时间、加热需要时间……这时候,定时器就派上用场了。
PLC里的定时器,说白了就是一个“倒计时闹钟”。你给它设定一个时间,它开始计时,时间到了就给你一个信号。
最常用的两种定时器:
TON(通电延时定时器):输入端接通后,开始计时,时间到,输出接通。输入端断开,输出立即断开,计时器复位。
TOF(断电延时定时器):输入端接通时,输出立即接通。输入端断开后,开始计时,时间到,输出断开。
你想想看,TON就像你按下微波炉的启动键,它开始倒计时,时间到了“叮”一声。TOF呢,就像你关掉风扇,它不会立刻停,而是继续转一会儿才停。
| 定时器类型 | 输入接通时 | 输入断开时 | 典型应用 |
|---|---|---|---|
| TON | 开始计时,时间到输出ON | 输出OFF,计时器复位 | 电机启动延时、故障报警延时 |
| TOF | 输出立即ON | 开始计时,时间到输出OFF | 风扇延时停止、冷却延时 |
来看一个TON的梯形图例子:
// 梯形图表示(西门子风格)
// 网络1:启动定时器
I0.0 T1
---| |--------( TON )
PT: 5000ms
// 网络2:定时时间到,输出Q0.0
T1.Q Q0.0
---| |--------( )
1
这段程序什么意思?你按下I0.0,T1开始计时,5秒后T1.Q接通,Q0.0亮。如果你在5秒内松开I0.0,T1复位,Q0.0永远不会亮。
我在项目中遇到过一个问题:有同事用TON做电机启动延时,结果电机启动后,他忘了把定时器复位。下次启动时,定时器还在上次的计时状态,导致逻辑混乱。其实TON在输入端断开时会自动复位,但如果你用TOF,就要注意了——TOF不会自动复位,需要手动处理。
💡 我的建议:初学者先用TON,逻辑简单,不容易出错。等你把TON玩熟了,再尝试TOF。另外,定时器的精度问题也要注意——普通定时器精度在10ms左右,如果需要高精度计时,要用IEC定时器或系统时钟。
⚠️ 避坑指南:我曾经在一个项目中,用TON做安全门的延时检测。安全门打开后,需要在5秒内关闭,否则报警。结果发现,如果操作工反复开关门,定时器会不断复位重启,永远到不了5秒。后来我改用TOF+上升沿检测的组合,才解决了这个问题。记住:选对定时器类型,比写对定时器参数更重要。
四、混合编程小技巧——把指令串起来用
学完这三个指令,你可能会想:它们能组合起来用吗?当然可以。而且,真正的工业程序,就是这些指令的组合。
举个例子:一个传送带,按下启动按钮,电机延时3秒启动;按下停止按钮,电机立即停止,但风扇继续转5秒散热。
用我们刚学的指令,可以这样实现:
// 梯形图(西门子风格)
// 网络1:启动按钮上升沿,置位电机启动标志
I0.0(启动) M0.0
---|P|----------( S )
1
// 网络2:停止按钮上升沿,复位电机启动标志,置位风扇延时标志
I0.1(停止) M0.0 M0.1
---|P|----------( R )---------( S )
1 1
// 网络3:电机启动标志接通,启动电机延时定时器
M0.0 T1
---| |----------( TON )
PT: 3000ms
// 网络4:定时时间到,启动电机
T1.Q Q0.0(电机)
---| |----------( )
1
// 网络5:风扇延时标志接通,启动风扇延时定时器
M0.1 T2
---| |----------( TOF )
PT: 5000ms
// 网络6:风扇延时定时器输出,控制风扇
T2.Q Q0.1(风扇)
---| |----------( )
1
你看,置位复位用来保持状态,边沿检测用来捕捉按钮动作,定时器用来控制延时。三个指令一组合,一个完整的控制逻辑就出来了。
我个人习惯,在写这种混合逻辑时,先用纸笔画个时序图,把每个信号的变化时间点标清楚。画清楚了再写程序,基本不会出错。
总结一下今天的内容:
- 置位复位指令让输出“记住”状态,适合需要保持的场景
- 边沿检测指令捕捉信号的瞬间变化,适合触发类逻辑
- 定时器指令让程序学会等待,适合延时控制
- 三个指令组合使用,可以构建出复杂的工业控制逻辑
好了,今天就聊到这儿。这些指令看着简单,但真正用好,需要你在项目里多练、多踩坑。下次遇到需要“保持”、“捕捉”、“延时”的场景,你脑子里能立刻想到用哪个指令,那就算真正掌握了。