第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 NEXT // 如果累加器 1 低字中的内容大于“0”,则累加器 1 中的内容减“1”,并跳转到 NEXT 跳转标号。
L MW24 // 循环结束之后重新进行程序扫描。
可以看出是先判断<>0则执行-1,跳转再执行一次,否则=0则不跳转,往下执行。
loop循环是在每个扫描周期内执行完的,但是循环次数有一定限制,执行时间不能超过程序的看门狗时间,不然要报错。
提问者对于答案的评价:
感觉有道理
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc210526.html