T LW 0 //计数器清0
LAR1 P#0.0
L 2
cyc1: T LW 6 //查询次数,32*N,N>0
L ID [AR1,P#0.0] //需要查询的状态
cyc2: T LD 2
L L#0
==D
JC nxt1
L LW 0
+ 1
T LW 0
L 4
>=I
JC nxt2 //超过四次就退出
L LD 2
+ L#-1
L LD 2
AD
JU cyc2
nxt1: +AR1 P#4.0
L LW 6
LOOP cyc1
nxt2: L LW 0
L 4
>=I
= Q 0.0 //报警输出
程序在论坛中
http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=973203&s_id=23&num=15#anch
我就是不知道怎么判断字中的位的,望大侠指点,很想知道。
问题补充:
其实我的疑惑还是在B的问题上
怎么样才能知道
L LD 2
+ L#-1
L LD 2
AD
T LD2
L L#0
==D
就能判断字中的位是1或者0了
最佳答案
1、程序开始应有 L 0:
L 0 0
T LW 0 //即LW0清零,计数器清0
LAR1 P#0.0 //将地址指针设为0.0
L 2
cyc1: T LW 6 //查询次数,32*N,N>0
L ID [AR1,P#0.0] //需要查询的状态,即第一次查询ID0,第一次查询ID4
cyc2: T LD 2//将ID0(或ID4)的内容送人 LD 2中
L L#0
==D // LD 2中内容等于0吗?
JC nxt1 //如等于0,则跳转到nxt1处。
L LW 0
+ 1
T LW 0//如果不等于0计数器LW 0
L 4
>=I
JC nxt2 / /如果计数器/超过四次就退出
L LD 2
+ L#-1
L LD 2
AD //如果如果计数器/超过四次,则将 LD 2 与 LD 2 内容加1后进行“逻辑与 ”操作。
JU cyc2//行“逻辑与 ”操作后转至 cyc2继续考察下一位。
nxt1: +AR1 P#4.0//地址指针指向下一个双字。
L LW 6
LOOP cyc1
nxt2: L LW 0
L 4
>=I
= Q 0.0 //报警输出
2、我就是不知道怎么判断字中的位的?
a、下述三行指令判断 LD 2是否为0,实际上就是判断是否有为1的位。
cyc2: T LD 2//将ID0(或ID4)的内容送人 LD 2中
L L#0
==D // LD 2中内容等于0吗?
b、下述四行指令,是一个常用的逻辑尺的应用,即将已判断为1的位排除掉,例如 1001,其加1后为1010,1010与原内容1001进行逻与操作后为1000,这样就将已判断为1的位排除掉,又保持了尚未判断为1的位。
L LD 2
+ L#-1
L LD 2
AD //如果如果计数器/超过四次,则将 LD 2 与 LD 2 内容加1后进行“逻辑与 ”操作。
提问者对于答案的评价:
我知道了
其实通过减1,结合与知道有多少个1,当没有1的时候就为0了就跳出来了
谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc248917.html