根据对三个指令的使用态度区分,坛子里的网友可分为两个阵营:
主张少用甚至不用R、S的归为一个阵营,其它不介意R、S、=混用的归为一个阵营。
我本人属于混用阵营。
以Smart200为例,我把它的指令分为三个大类:
1、有条件执行指令
LAD程序,能流是必须有的。
大多数指令,根据前面的能流情况(OFF/ON、0/1)决定是否执行。
此类由能流决定执行的指令,我称其为有条件执行指令,能流就是执行条件。
STL程序,与能流概念对应的是逻辑堆栈的栈顶值。
2、无条件执行指令
此类指令,只要PLC扫描到,一定执行。
凡是以能流(条件)为操作对象(操作数)的指令,都属于此类。
3、其它指令
此类指令PLC并不执行,不占用PLC执行时间
比如,与For配套的NEXT指令,LBL指令等。
根据上面的分类:
R、S指令属于有条件执行指令
=指令属于无条件执行指令
=指令的本质,是把能流直接输出(COPY)给目标,能流是操作数。
=指令既可以让目标为0,也可以让目标为1,一条指令完成。
R指令,在条件成立(能流ON)时,让目标为0
与之对应,S指令,在条件成立(能流ON)时,让目标为1
所以,R/S指令一般成套出现(但数量上并不一定是1:1)。
请看两段程序:
程序1
LD I0.0 // 能流(栈顶)=I0.0
= Q0.0 // 能流(栈顶)COPY给Q0.0
程序2
LD I0.0 // 如果I0.0=ON
S Q0.0, 1 // 置1
NOT // 如果I0.0=0
R Q0.0, 1 // 清0
这两段程序,在绝大多数情况下,功能是等价的。
(不等价的情形,我遇到的是在顺控指令内,另行叙述)。
粗看起来,用R、S既笨又啰嗦,但它的长处也在于此,把清0和置1分离开来了。