第三节 位逻辑指令(一):常开触点、常闭触点、线圈输出、置位/复位指令(SR/RS)
好,咱们今天正式开始啃位逻辑指令这块硬骨头。说实话,这是PLC编程的基石,就像学武术要先练马步一样。你把这几个指令玩明白了,后面那些复杂逻辑才能信手拈来。
一、常开触点与常闭触点——最基础的“开关”
先说说常开触点。说白了,就是“平时断开,按下才通”。在梯形图里,它用两个竖线表示:—| |—。当它前面的条件为真(比如按钮被按下),它就闭合,电流才能流过去。
常闭触点正好相反,是“平时通着,按下才断”。符号是—|/|—。我刚开始学的时候,老是把这两个搞混。后来有个老工程师跟我说了句话,我记到现在:“你想想急停按钮,平时它得是通的,机器才能转。按下去断开了,机器才停。这就是常闭。”
嗯,这里要注意:在西门子S7-1200/1500里,常开触点的地址是I0.0这样的输入点,常闭触点也是同样的地址,只是逻辑取反。别以为常闭触点要换个地址,不是的。
核心记忆点:
- 常开触点:条件满足时闭合(导通)
- 常闭触点:条件满足时断开(不导通)
- 两者可以互相转换——把常开触点取反就是常闭的逻辑效果
二、线圈输出——把结果写出去
线圈输出,符号是个括号—( )—。它的作用很简单:把逻辑运算的结果赋值给一个变量。比如你前面串了一堆触点,最后电流流到线圈,线圈对应的位就变成1,否则就是0。
我在项目里遇到过一个问题:有人把同一个线圈在程序里用了两次。你想想看,PLC扫描是从上往下执行的,后面那次赋值会把前面的覆盖掉。结果就是输出时好时坏,查了半天才发现是双线圈问题。所以记住:同一个线圈,在程序里只出现一次。
我的习惯:给每个输出点单独用一个网络,前面把条件写清楚。这样排查故障时,一眼就能看到这个输出是怎么来的。
三、置位/复位指令(SR/RS)——带记忆的开关
线圈输出有个缺点:它没有记忆功能。条件没了,输出就跟着没了。但很多时候我们需要“按一下启动,机器一直转,直到按停止才停”。这时候就要用置位和复位指令了。
置位指令—(S)—:当它前面的条件为真时,把对应的位设为1,并且保持住。就算条件变回0,它还是1。
复位指令—(R)—:当它前面的条件为真时,把对应的位设为0,同样保持住。
这里有个容易踩的坑:SR和RS的区别。SR是“置位优先”,RS是“复位优先”。什么意思呢?如果置位和复位条件同时为真,SR指令会输出1,RS指令会输出0。
我曾经踩过的坑:有次做一台风机控制,启动和停止按钮同时被卡住了。我用的是SR指令,结果风机一直转,停不下来。后来改成RS指令,同时按下时优先停止,安全多了。所以安全相关的逻辑,我建议用RS(复位优先)。
四、知识体系结构图
下面这张图,把今天讲的几个指令的关系理清楚了。你保存下来,写程序时对照着看。
五、实战示例:风机启停控制
咱们拿一个最简单的风机控制来练练手。要求:按下启动按钮,风机转;按下停止按钮,风机停。就这么简单。
用线圈输出的写法:
网络1:风机启动
启动按钮(I0.0) 停止按钮(I0.1) 风机输出(Q0.0)
——| |——————|/|—————————————( )——
用置位复位的写法:
网络1:风机启动(置位)
启动按钮(I0.0) 风机输出(Q0.0)
——| |——————————————(S)——
网络2:风机停止(复位)
停止按钮(I0.1) 风机输出(Q0.0)
——| |——————————————(R)——
两种写法都能实现功能。区别在哪?线圈输出的写法,如果启动按钮松开了,风机就停了——除非你加自锁。而置位复位写法,按一下启动,风机一直转,直到按停止。我个人习惯用置位复位做启停控制,逻辑更清晰,不容易出问题。
一个小技巧:如果你用线圈输出做自锁,记得把输出点本身的常开触点并联到启动按钮上。这样启动按钮松开后,电流还能通过自己的触点维持导通。这就是“自锁”的由来。
六、常见错误避坑
| 错误类型 | 现象 | 原因 | 解决方法 |
|---|---|---|---|
| 双线圈 | 输出时好时坏 | 同一个线圈在多个网络中被赋值 | 每个线圈只使用一次 |
| SR/RS混淆 | 同时触发时逻辑错误 | 不清楚置位优先和复位优先的区别 | 安全逻辑用RS,报警逻辑用SR |
| 常开常闭搞反 | 按钮按下没反应 | 把常闭当常开用了 | 对照硬件接线图检查 |
| 忘记自锁 | 手一松就停 | 线圈输出没加自锁触点 | 并联输出点的常开触点 |
好了,今天的内容就到这。这几个指令看着简单,但真到了现场,各种奇奇怪怪的问题都出在这些基础指令上。你回去把风机启停的两种写法都试一遍,感受一下区别。下次咱们接着聊定时器指令。