回复:SCL的WHILE和REPEAT指令的问题

龙晨旭日

  • 帖子

    346
  • 精华

    2
  • 被关注

    39

论坛等级:侠圣

注册时间:2011-11-01

黄金 黄金 如何晋级?

发布于 2017-05-12 13:36:54

15楼

展开查看
以下是引用Automann在2017-05-08 17:01:48的发言 >5楼

PLC因为是操作系统循环调用用户程序,所以有超时的问题。高级语言中的WHILE和REPEAT则不存在这个问题。用看门狗解决不了问题。

这两条指令和FOR指令不是一回事。For指令循环一万次也要不了多少时间。而WHILE和REPEAT指令可能延长任意长的时间。

下面是SCL语言使用WHILE指令的例子:

WHILE MW10<>MW14 DO

    MW30 := 20;

END_WHILE;

只要MW10和MW14的值不相等,就会执行DO后面的指令。二者相等时,程序将从END_WHILE后继续执行。

其实上述要求可以用下面的梯形图程序来实现。

MW10和MW14的值不相等时执行DO后面的指令,SCL程序是在一个扫描周期内完成的,CPU干不了别的事。而梯形图是每个扫描周期只花“一点点”时间来完成同样的任务。



%MW40 := 0;

WHILE   %MW10 <> %MW14   DO

    %MW30 := 20;

    %MW40 := %MW40 + 1;

    IF  %MW40 > 100   THEN

        EXIT;

    END_IF;

END_WHILE;

这样写是可以的。

WHILE 循环是当条件不满足时才能终止循环,也就是说MW10<>MW14结果一直为TRUE,那么WHILE循环会一直执行下去。PLC有看门狗时间,所以会报警停机。

 %MW60 :=  0;

REPEAT

    %MW60 := %MW60 + 1;

    IF  %MW60 > 100   THEN

        EXIT;

    END_IF;

UNTIL  NOT  %M70.0

END_REPEAT;

REPEAT 循环的是当条件满足时才能终止循环,也就是说当  %M70.0为 true  时及条件为false,循环会一直执行下去,会报警停机。 

REPEAT  与 WHILE 的不同之处在于,无论条件是否满足REPEAT至少会执行1次,WHILE则在条件不满足时1次也不会执行。


高级语言不熟,但是高级语言的WHILE 循环一般用来做人机交互窗口等待用户选择时弹出界面的,好像不会有看门狗时间,并且高级语言进入死循环,程序不会停,一直会运行,只不多CPU被大量占用。这是学校的一点零星记忆,不一定对,具体你得问问做高级语言的。

如果要飞得高,就该把地平线忘掉!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10698条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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