根据“loop”后的括号"( )"中指定的临时地址保存的数重复循环处理。
无限循环
当loop括号( )中没有语句时循环是无限的。
您可以在扩展脚本中使用无限循环。
表达式示例:
loop ( )
{
[w:[#INTERNAL]LS0100]=[w:[#INTERNAL]LS0100]+1
if ( [w:[#INTERNAL]LS0100] >10)
{
break
}
endif
}
endloop
loop ( )的格式如下。
例如:
loop(循环次数)//定义保存循环次数的临时地址。
{
[脚本表达式]
break //可选的。用于中途退出循环体。
} endloop //定义循环的终止。
(循环数)只能在圆括号中输入一个临时字地址。(例如,loop ([t:000]))
“loop ( )”不能用于触发等式。
用于定义循环次数的临时字地址值在每次循环时都减少。当该值为0时,循环操作终止。如果修改了为循环次数定义的临时字地址值,该循环可能变成无限循环。这里使用的临时字地址被指定为全局地址。因此,为其他目的同时使用该临时字地址可能导致无限循环。
在循环操作结束前,将不会更新或刷新部件等的画面显示。
loop ( )可以嵌套。如果循环含有嵌套,使用 “break”命令可以跳过 最内层的 loop ( )。
如果循环操作在没有使用退出命令的情况下结束,临时字地址值就变成0。
临时字地址值的可用范围根据所使用的数据格式 (Bin, BCD)、位长和代码 +/- 而有所不同。如果已经设置了代码 +/- 且临时字地址值变成了负 值,将在循环开始时判断该条件,且循环处理停止。
在循环中请不要使用PLC寄存器。而应使用人机界面内部用户区地址或临时字地址。
例如,以下描述在短时间内多次向PLC执行数据写入操作(在下例中是100次)。由于不能以这样的速度执行通讯处理(写入PLC所需的时间),因此这会导致系统错误。
例如:
[t:0000] = 100 //循环100次
loop ([t:0000])
{
//写入D0200。
[w:[PLC1]D0200] = [w:[#INTERNAL]LS0100]
//LS0100加1。
[w:[#INTERNAL]LS0100] = [w:[#INTERNAL]LS0100] + 1
}endloop
请做如下修改:
[t:0000] = 100 //循环100次
loop ([t:0000])
{
//写入D0200。
[w:[#INTERNAL]LS0200] = [w:[#INTERNAL]LS0100]
//LS0100加1。
[w:[#INTERNAL]LS0100] = [w:[#INTERNAL]LS0100] + 1
}endloop
//LS0200内容写入D0200。
[w:[PLC1]D0200]=[w:[#INTERNAL]LS0200]
将“loop”或“break”用作D脚本函数的函数名会造成错误。