loop に続く( )内のテンポラリアドレスの値の回数だけループ処理(繰り返し処理)を行います。
無限ループ
loop ( )の( )内に何も記述しないときは無限ループとなります。
無限ループは、拡張スクリプトのみ使用できます。
記述例
loop ( )
{
[w:[#INTERNAL]LS0100]=[w:[#INTERNAL]LS0100]+1
if ( [w:[#INTERNAL]LS0100] >10)
{
break
}
endif
}
endloop
loop( )の書式の例は以下の通りです。
例)
loop (ループ数) // ループする回数がセットされたテンポラリアドレスを指定
{
動作式
break // 途中でループを抜ける場合に記述(省略可)
} endloop // ループの最後に記述
(ループ数)にはテンポラリアドレスのみ指定可能(例:loop ([t:0000]))
loop( )はトリガ式内では使用できません。
ループ数に指定したテンポラリアドレス内の値はループをするたびに1ずつ減少していき、0になった時点でループから抜けます。ループ内の動作式でループ数に指定したテンポラリアドレスを加工したりすると永久ループになりますのでご注意ください。また、テンポラリアドレスは、グローバルなワードになっていますので、別の箇所で同じテンポラリアドレスを使用する場合は、プログラムによっては、永久ループになりますのでご注意ください。
ループ処理が終わるまで、部品などの表示は更新されません。
loop( )のネストは可能です。ネストしている場合、breakは一番内側のloop ( )だけ抜けます。
途中でループを抜けずにループを終了した場合は、テンポラリアドレスの値は0になっています。
テンポラリワークアドレスの値の範囲は、データ形式(Bin、BCD)、ビット長、符号+/-により異なります。もしも、設定が符号ありでテンポラリワークアドレスの値がマイナス値になった場合には、ループの先頭で条件判定されてループを抜けます。
ループ内ではPLCデバイスを使用せず、表示器内部デバイスのユーザーエリアのデバイス、またはテンポラリワークアドレスを使用するようにしてください。
例えば、以下のような記述の場合には、短時間の間に多数(以下の例では100個)のPLCへの書き込みが発生することになり、通信の処理(PLCへの書き込み)が間に合わずシステムエラーが発生する場合があります。
例)
[t:0000] = 100 //100 回ループ
loop ([t:0000])
{
//D0200 に書き込む
[w:[PLC1]D0200] = [w:[#INTERNAL]LS0100]
//LS0100をインクリメント
[w:[#INTERNAL]LS0100] = [w:[#INTERNAL]LS0100] + 1
}endloop
次のように変更してください。
[t:0000] = 100 //100 回ループ
loop ([t:0000])
{
//D0200 に書き込む
[w:[#INTERNAL]LS0200] = [w:[#INTERNAL]LS0100]
//LS0100をインクリメント
[w:[#INTERNAL]LS0100] = [w:[#INTERNAL]LS0100] + 1
}endloop
//LS0200の内容をD0200に書き込む
[w:[PLC1]D0200]=[w:[#INTERNAL]LS0200]
Dスクリプト関数の関数名に“loop”、“break”を使用するとエラーになります。