回复:PLC扫描循环体是如何执行的?

emil128

  • 帖子

    271
  • 精华

    10
  • 被关注

    21

论坛等级:侠圣

注册时间:2011-05-16

普通 普通 如何晋级?

发布于 2013-08-07 15:02:54

7楼

楼主似乎是学计算机出身,对循环的理解基本是高级语言的形式。
CASE ,FOR,GOTO等SCL语句与LOOP这样的STL是有区别的。
一定要类比的话,LOOP更接近与FOR吧。
楼主先仔细的读一下LOOP指令的说明吧:
使用循环控制指令(累加器 1 低字中的值减“1 ”,当累加器 1 低字中的值不等于“0 ”时跳转),可以简化循环控制编程。

从本质上说,LOOP就是一个条件跳转指令,FOR何尝不是呢?
只不过高级语言里FOR语句在循环体前,条件判断是在进入前判断了,执行完回到FOR语句;而STL的LOOP必须在循环体后,判断是否跳转到循环体前。

楼主纠结的所谓“1个扫描周期”还是“100个扫描周期的问题”,其实就是看是否跳转回循环体前。
不往回跳转就要靠ob1来循环,那就是100个周期;往回跳转就能在1个周期内完成。
举个简单的例子:一个200步的程序,第50步到100步是循环体。
1、在50步的地方做判断是否执行循环体,不考虑往回跳的。这样的情况下执行就是1-200步。200步做完,一个扫描周期结束,要从头开始就要靠OB1自循环了,这样要循环100次就要100个扫描周期。
2、在100步的地方判断是否跳回50步,那么执行就是1-00步,然后N次50-100步,最后100-200步,这样在扫描到200步时,一个周期内已经执行了N次循环了。

P.S.
0侠给出的程序确实是有误的,LOOP指令本身带自减功能,只要将循环数放进累加器1就能循环了。
用LOOP在循环体内再去自加,结果要么是不执行循环,要么就是死循环。
0侠的例子里使用JC就能实现循环,不能用LOOP。
用LOOP的话,这样就能循环100次了,是不是像手册上说的,可以简化编程呢?
L 100
A00:T MW100
CALL FC1
L MW100
LOOP A00
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。