恭喜,你发布的帖子
发布于 2017-05-12 13:36:54
15楼
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被大量占用。这是学校的一点零星记忆,不一定对,具体你得问问做高级语言的。
请填写推广理由:
分享
只看
楼主