关于loop指令的理解?

第1次执行
L    #Sampling_Num     //若该值为30
aaa:  T     #NUMBER    //则该值也为30
      L     32               //
      *I                         //30*32=960??
      L     P#0.0                
      +D                         //960+0=960??
      LAR1                        //地址寄存器指向960??
      L     DBD [AR1,P#0.0]             //指向960??
      T     DBD [AR1,P#4.0]            //指向964??
      L     #NUMBER                     //仍为30
      LOOP  aaa                 //???先减1,为29<>0,跳到aaa???
//???还是先判断30<>0,再30-1,跳至aaa???
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       。
        。
        。
        。
第30次执行,
L     #Sampling_Num    //该值变为1
aaa:  T     #NUMBER           //    该值变为1               
      L     32                 //
      *I                      //   1*32=32?
      L     P#0.0              //   
      +D                        //  32+0=32?
      LAR1                       //地址寄存器指向32 ?
      L     DBD [AR1,P#0.0]             //指向32 ?
      T     DBD [AR1,P#4.0]            //指向36 ?
      L     #NUMBER                    //此时值为1
      LOOP  aaa                 //  两种理解:1、先执行1-1=0,要跳处循环。2、先判断1<>0,执行1-1,跳至aaa,再执行一次。请问到底应该哪一种理解正确?
另外,上面的中间程序的执行理解是否正确?
再,loop是否为每个扫描周期执行1次减1运算,还是不受扫描周期影响?
对于以上问题,论坛有不同的回答,故在此出贴!

图片说明:

关于loop指令的理解?   

最佳答案

看看手册中的计算举例:
LOOP NEXT // 如果累加器 1 低字中的内容大于“0”,则累加器 1 中的内容减“1”,并跳转到 NEXT 跳转标号。
L MW24    // 循环结束之后重新进行程序扫描。

可以看出是先判断<>0则执行-1,跳转再执行一次,否则=0则不跳转,往下执行。
loop循环是在每个扫描周期内执行完的,但是循环次数有一定限制,执行时间不能超过程序的看门狗时间,不然要报错。

提问者对于答案的评价:
感觉有道理

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc210526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月12日
下一篇 2017年11月12日

相关推荐