帮忙解读一下简单的语句表

大家好,有一个循环语句不懂,请各位知道的帮忙解惑一下
L 0 
T MD 4 
OPN DB 1  
L 100
NEXT: T MW 100 
L DBW [MD 4]  
==I  
JC m1 
L MD 4 
L P#2.0 
+D 
T MD 4 
L MW 100  
LOOP NEXT
m1: FP M 10.0    1、跳转到此处后,FPM10.0的状态根据谁来判断有没有上升沿呢?  这里加这么一个FP没有多大用处吧?
 JCN m2      2、既然跳转到了m1处,意思就是现在值相等时,把地址再加2,但是为什么这里又加了一个跳转语句呢,用意何在?
L MD 4 
L P#2.0 
/D 
+ L#1 
T MD 8 
m2: NOP 0 

请知道的指点一下,谢谢

问题补充:
感谢youhm老师,1、假设循环到MW100=96时,和DBW8的值相等,跳转到了m1后,执行了T MD8后,就结束了该循环语句吧?我模拟是这样的。但是您说的“这段代码就实现了在MD8里保存DB1从DBW0开始第一个整数值和循环序号相等的序号”。这句话的意思是不是执行完一次相等的序号后,还要继续循环呢,如果这样的话
那么下一个扫描周期执行时,还是从L 0开始执行吗?如果这样的话,那么不是又重新从100开始循环,从DBW0开始累加了吗?

最佳答案

这段程序写的很诡异,感觉有些故弄玄虚,通过T  MD8来复位M10.0

—————————————————————————————————————————
m1: FP M 10.0    1、跳转到此处后,FPM10.0的状态根据谁来判断有没有上升沿呢?  这里加这么一个FP没有多大用处吧?

这之前只有JC指令影响RLO,JC指令执行后RLO会被置1,所以不管跳转或不跳转执行到m1处RLO必定为1,而边沿存储位M10.上一次的状态就要看上一个周期是否执行T  MD8,如果M10.0最初为1,执行到FP M10.0检测不到上升沿,那么肯定会执行JCN m2,后面的指令会被跳过,那么整段程序就没什么作用,如果M10.0最初为0,就可检测到上升沿了,那么后面几条指令就不会被跳过,这里由于循环次数最大100,所以最终传送到MD8的值不会大于255,所以M10.0就会被复位,这段代码就实现了在MD8里保存DB1从DBW0开始第一个整数值和循环序号相等的序号。

————————————————————————————————————————
 JCN m2      2、既然跳转到了m1处,意思就是现在值相等时,把地址再加2,但是为什么这里又加了一个跳转语句呢,用意何在?

这个跳转的功能就是在M10.0为1时,跳过后面几条指令

提问者对于答案的评价:
两位老师的解答都很给力!最佳只能选一个,但还是要非常感谢zengzy

最佳答案作者回复:
关于补充的,找到相等的就跳出循环了,下一个周期又从100开始

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

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

相关推荐