大家好,有一个循环语句不懂,请各位知道的帮忙解惑一下
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