キーエンスKV-X500/X300シリーズでは、ラダープログラムに加えて、IEC61131-3に準拠したST(Structured Text)言語を使用してプログラムを作成できます。
ST言語は、制御文や数式をテキストベースで記述するプログラミング言語です。特にラダープログラムでは記述が複雑になりがちな数値を扱う複雑な演算処理や、文字列を扱う処理を簡単に記述でき、プログラムの可読性と流用性を向上させるメリットがあります。
ST言語における指定回数の繰り返し制御(FOR)文は、「繰り返し条件により、処理文の実行回数を決めて実行する」処理を行う制御文です。
この記事では、キーエンスKV-X500/X300シリーズにおける指定回数の繰り返し制御(FOR)文の記述方法と具体的なST言語例について解説します。
目次
1. FOR文の記述方法
ST言語における制御文とは、プログラムの流れを変えるもので、条件によって処理の流れを分岐させたり、繰り返しを実行したりするために使用されます。
FOR文は、指定した回数だけ処理を繰り返す文の代表的なものです。
//1.<変数>に<初期値>を格納します。
//2.以下の条件を満たしていれば<処理文>を実行します。
// 満たしていなければFOR文は終わります。
// ・<増分値>>0の場合 → <変数>≦<最終値>
// ・<増分値><0の場合 → <変数>≧<最終値>
//3.<変数>に<増分値>を加算して2.に戻ります。
FOR <変数> := <初期値> TO <最終値> BY <増分値> DO
<処理文>;
END_FOR;
「BY <増分値>」の記述は省略可能です。省略した場合は「BY 1」として扱われ、増分値1として実行されます。
処理の流れは以下のようになります。

2.【例題①】配列型変数の合計値を求める
下記仕様のSTをFOR文を用いて解説します。
配列型変数Ary00の各要素を加算して合計値を算出するための繰り返し処理にFOR文を使用します。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

配列型変数Ary00[0]~[4]の合計値を常時Data00に格納します。
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| Ary00 | ARRAY[0..4] OF UINT | 配列00 |
| Data00 | UINT | データ00(合計値) |
| i | UINT | ループ変数 |
ST言語
ST言語は下記のようになります。
//Data00の値を初期化
Data00 := 0;
//Ary00[0]~[4]の値をData00に加算
FOR i := 0 TO 4 BY 1 DO
Data00 := Data00 + Ary00[i];
END_FOR;Data00の値を初期化するため、先頭でData00に0を代入します。この処理が無いとData00の値が毎スキャン加算され続けてしまい正しい処理になりません。
FOR文で「FOR i := 0 TO 4 BY 1 DO」を使用することにより、以下の処理が行われます。
1. ループ変数iに初期値である0を代入します。
2. iの値が最終値である4を超えるまで、処理が繰り返されます。
3. 増分値が1のため(BY 1)、ループの処理が1回完了する毎に、iの値が1加算されます。
4. 結果としてループ処理はi=0,1,2,3,4の合計5回が実行されます。
FOR文の処理文であるData00 := Data00 + Ary00[i];は、Ary00[0]~[4]の値を順番にData00に累積します。Ary00[i]はループ変数iがAry00の添え字として使用されており、繰り返し処理が行われるたびに配列の要素(Ary[0]→[1]→…→[4])が切り替わります。
3.【例題②】配列型変数の合計値を求める(10以下のみ)
下記仕様のSTをFOR文を用いて解説します。
Ary00[0]~[4]で10を超えるものは算出の対象外とする。
【例題①】と同様、配列型変数Ary00の各要素を加算して合計値を算出するための繰り返し処理にFOR文を使用します。
Ary00[0]~[4]で10を超えるものは対象外とするため「CONTINUE処理」を使用します。CONTINUE処理とは、実行中の繰り返し処理を終了し、次の繰り返しに移行する際に使用します。
今回はループ内でAry00[i]の値が10超過の場合、CONTINUE処理を実行する文を記述します。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

配列型変数Ary00[0]~[4]の合計値を常時Data00に格納します。
Ary00[0]~[4]で10を超えるものは算出の対象外となるため、10以下の合計値がData00に格納されます。
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| Ary00 | ARRAY[0..4] OF UINT | 配列00 |
| Data00 | UINT | データ00(合計値) |
| i | UINT | ループ変数 |
ST言語
ST言語は下記のようになります。
//Data00の値を初期化
Data00 := 0;
//Ary00[0]~[4]の値をData00に加算
FOR i := 0 TO 4 BY 1 DO
IF Ary00[i] > 10 THEN //Ary00[i]が10超過で次のループへ
CONTINUE;
END_IF;
Data00 := Data00 + Ary00[i];
END_FOR;IF Ary00[i] > 10 THENは、Ary00[i]の値が10を超える場合に次行の処理文であるCONTINUE処理を実行します。IF文については以下のページで解説しております。
CONTINUE処理が実行されると、実行中の繰り返し処理(今回はFOR文)を強制的に終了させ、次の繰り返し処理(次のループ変数iの値での処理)に移行します。
合計値をData00に累積処理を行うData00 := Data00 + Ary00[i];は、上記IF文より下に記述されているためCONTINUE処理が実行されたループは累積処理がスキップされます。
4.【例題③】配列型変数の合計値を求める(合計50以上で終了)
下記仕様のSTをFOR文を用いて解説します。
Data00の値が50以上になると、算出はその場で終了する。
※算出はAry00[0]→[1]→[2]→[3]→[4]の順で行われる。
【例題①】と同様、配列型変数Ary00の各要素を加算して合計値を算出するための繰り返し処理にFOR文を使用します。
Data00の値が50以上になると算出をその場で終了させるため「EXIT処理」を使用します。EXIT処理とは、繰り返し処理を強制的に終了(繰り返しから抜ける)する際に使用します。
今回はループ内でData00の値が50以上の場合、EXIT処理を実行する文を記述します。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

配列型変数Ary00[0]~[4]の合計値を常時Data00に格納します。
Data00の値が50以上になると算出はその場で終了するため、以降の値は累積されません。
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| Ary00 | ARRAY[0..4] OF UINT | 配列00 |
| Data00 | UINT | データ00(合計値) |
| i | UINT | ループ変数 |
ST言語
ST言語は下記のようになります。
//Data00の値を初期化
Data00 := 0;
//Ary00[0]~[4]の値をData00に加算
FOR i := 0 TO 4 BY 1 DO
Data00 := Data00 + Ary00[i];
IF Data00 >= 50 THEN //Data00が50以上でループ終了
EXIT;
END_IF;
END_FOR;IF Data00 >= 50 THENは、Data00の値が50以上の場合に次行の処理文であるEXIT処理を実行します。
CONTINUE処理が実行されると、実行中の繰り返し処理(今回はFOR文)を強制的に終了させ、END_FORの次のステップに移行します。
5. おわりに
キーエンスKV-X500/X300シリーズにおける指定回数の繰り返し制御(FOR)文について解説しました。


