繰り返し処理

「FOR」「NEXT」を使った繰り返し処理を行います。そもそも繰り返し処理とはどういうものかというと、プログラムが先頭から「END」まで実行するとき、「FOR」「NEXT」で囲んだ区間だけ、指定回数繰り返すのです。 「NEXT」までスキャンしたら、再度「FOR」まで戻って、また「NEXT」まで行くと「FOR」に戻ります。この区間を指定回数繰り返すとプログラムの「END」までスキャンし、再度プログラムの先頭に戻ります。

まず次のプログラムから見ていきましょう。

「X0」が入ると「M0」がパルスで入ります。その下に繰り返し命令があります。K10となっているので10回繰り返します。
[MOV K0 D0]という命令が10回繰り返されます。「M0」は1スキャン入るので、何回繰り返し処理をしても、そのスキャンは入り続けます。

ではこのプログラムはどのような意味があるでしょうか?実は何も意味がありません。何回繰り返しても結果は同じです。繰り返す必要もありません。 では次のプログラムを見てみましょう。

[INC D0]は実行すると「D0」に”1”を加算します。つまり「X0」を押すと「M0」がパルスで入りそのスキャンだけ「FOR」「NEXT」の区間が有効になります。 10回繰り返しますから、「D0」の値は”10”になります。このプログラムも特に繰り返し処理をする必要はありません。単純に”10”を転送しているのと同じです。

繰り返し処理の機能を有効にするにはインデックスレジスタを組み合わせる必要があります。

繰り返し処理の内部にインデックスレジスタを組み込んでいます。「NEXT」の前でインデックスレジスタに”1”を加算しています。この命令を実行すると「D0」〜「D9」までに”1”を書き込みます。 先ほどのプログラムよりもプログラムらしくなってきました。でもまだ繰り返し処理を行う必要がある動作ではありません。
[FMOV K1 D0 K10]の命令で簡単に処理できるレベルです。

次のプログラムを見てみます。

これは転送元の値と転送先の場所を、繰り返す回数によって変化しています。これにより「D1」には”1”が入り、「D2」には”2”が入り、「D9」には”9”は入ります。 このようにデータレジスタに対して、数値が連番で入っていきます。これが基本的な繰り返し処理の使い方です。

繰り返し処理は、シーケンス回路のみしか経験ない方は戸惑うかもしれませんが、使いこなせば複雑な処理でも簡単に処理することが可能になります。
DL-RS1では繰り返し処理の実践的な使い方を解説していますので、参考にしてください。

最後に簡単な検索プログラムを作ってみたので、参考にしてください。

このプログラムの条件として、データレジスタ100個で1つのデータとします。「ZR0」〜「ZR99」の固まりで1個のデータとします。ZRはファイルレジスタで、データレジスタと同じようにつかえます。 そして各データの一番先頭のデバイスに識別用の数値を入れます。データを検索するときは、この先頭の識別用の数値で検索を開始します。

「ZR0」〜「ZR9999」までをデータの保存領域としています。「D0」に検索対象の数値をいれ「P250」を実行します。 もし検索対象が存在すれば「D100」〜「D199」にデータを転送してきます。「ZR」内の保存領域からは削除する仕様になっています。



Copyright (C) 2010 シーケンス制御講座, All rights reserved.