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

question

  • 帖子

    873
  • 精华

    6
  • 被关注

    110

论坛等级:奇侠

注册时间:2004-04-13

白金 白金 如何晋级?

发布于 2017-05-14 10:07:50

16楼

展开查看
以下是引用Letham在2017-05-09 08:07:34的发言 >8楼

个人认为 上面梯形图 转换为 SCL应该是


IF %MW10<>%MW14 THEN

    %MW30 := 20;

END_IF;

并不是 WHILE 循环语句。

还有个问题 想请教下 廖老师
STL中的

A M0.0

S M0.1

如果 用SCL 来编写 怎么写?
IF M0.0 THEN 

M0.1:=True;

END_IF;

上面编译完成后,在CPU 里执行 是不是 以下面类似代码来执行的吗?

A M0.0

JCN _M01

S M0.1

_M01:NOP 0 


以下是引用Automann在2017-05-08 17:01:48的发言 >5楼:PLC因为是操作系...

引用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干不了别的事。而梯形图是每个扫描周期只花“一点点”时间来完成同样的任务。



你说的不错。楼主应该是写错了。。

while主要用于遍历数组,累计等。

很少在while中赋值。。如果两个数据不等,那么cpu就一直卡在那里的。

这里应该用if 判断语句。。


另外在scl里,尽量用for,while语句容易判断不清,导致死循环。。。

还可以给while做个保护。在while语句里,就个计数器,如果计数器超出很大的一个值,就exit退出。。

这只是保护。。。

drongh
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10698条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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