语句表编程set的用法求教
183.233.253.26
发布于2013-03-01 10:15
2
0
标签:
adbx0.1
adbx0.7
jcnm001
l#in2
tdbd20
set
rdbx0.1
m001:nop0
上面的程序,为什么在set后面加一个复位r
问题补充:
能运算到这一步dbx0.1必定为1,感觉没有必要再加set.另外,抛开这段程序,如果要复位的位为1则r运算,如果不为1,则r不运算,为吗非要先置位再复位?
佳答案
我和20120817的观点一样,西门子帮助文件中是这样说的:
r(resetbit)placesa"0"intheaddressedbitifrlo=1andmastercontrolrelaymcr=1
也就是说只有当rlo和mcr位同时为1时才将目标地址置为0,所以加set的目的是为了让rlo位为1.。
单就从这段程序上讲,加不加都不影响终的执行效果,因为在执行jcnm001这条语句时已经对rlo进行了判断,rlo=1则继续往下执行,l#in2和tdbd20不影响rlo位的状态,即便没有set语句一样可以实现复位。
楼主可以用这样一段程序理解下setsaveclr这样三条指令(可以转换成lad):
l#temp1
tdbd20
set
save
clr
abr
rdbx0.1
仅仅是个例子,是用lad编写后转换成stl的,这样就能很好的理解set的作用了。