这段程序怎么判断每个字中的位的呢?最好能给注释

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 下午4:29
下一篇 2018年12月2日 下午4:29

相关推荐