キーエンスKV-X500/X300シリーズでは、ラダープログラムに加えて、IEC61131-3に準拠したST(Structured Text)言語を使用してプログラムを作成できます。
ST言語は、制御文や数式をテキストベースで記述するプログラミング言語です。特にラダープログラムでは記述が複雑になりがちな数値を扱う複雑な演算処理や、文字列を扱う処理を簡単に記述でき、プログラムの可読性と流用性を向上させるメリットがあります。
ST言語における多分岐制御(CASE)文は、「基準となるワードデータに格納されている値に応じて、処理を選択する」といった判断を行う制御文です。
この記事では、キーエンスKV-X500/X300シリーズにおける多分岐制御(CASE)文の記述方法と具体的なST言語例について解説します。
目次
1. CASE文の記述方法
ST言語における制御文とは、プログラムの流れを変えるもので、条件によって処理の流れを分岐させたり、繰り返しを実行したりするために使用されます。
CASE文は、基準となるワードデータに格納されている値を基に処理の流れを分岐させることができます。CASE文は、複数の条件分岐を入れ子構造のIF文などで記述するよりも、簡潔で高い可読性をもって記述できる点が特長です。
CASE <ワードデータ> OF //ワードデータの値を基準に、
<定数1>:処理文1; //「定数1と等しい」→処理文1実行
<定数2>:処理文2; //「定数2と等しい」→処理文2実行
<定数3>,<定数4>:処理文3; //「定数3または4と等しい」→処理文3実行
<定数5>..<定数6>:処理文4; //「定数5≦ワードデータ≦定数6」→処理文4実行
ELSE //「上記以外」のとき、
<処理文n>; //処理文n実行
END_CASE; //CASE文はここまで
上記のSTは、基準となるワードデータにより以下の処理を行います。
- ワードデータと「定数1が等しい」:処理文1を実行
- ワードデータと「定数2が等しい」:処理文2を実行
- ワードデータと「定数3または定数4が等しい」:処理文3を実行
- ワードデータが「定数5以上かつ定数6以下」:処理文4を実行
- ワードデータが「上記以外」:処理文nを実行
使用例)
・1:単一指定(1のみ)
・3,4,5,6:複数指定(3または4または5または6)
・7..10:範囲指定(7以上かつ10以下)
処理の流れは以下のようになります。

2.【例題】変数の値によって多重分岐
下記仕様のSTをCASE文を用いて解説します。
Data00の値が10以下の場合、ランプ緑が点灯する。
Data00の値が10超過かつ50以下の場合、ランプ黄が点灯する。
Data00の値が50超過かつ100以下の場合、ランプ赤が点灯する。
Data00の値が100超過の場合、ランプは全て消灯する。
Data00の値で処理を分岐するためにCASE文を使用します。条件値には範囲指定(..)を使用します。
ランプを点灯させるには「ランプ := TRUE;」、消灯させるには「ランプ := FALSE;」を指令します。
上記仕様は条件分岐(IF)文でも作成可能です。条件分岐(IF)文で作成したSTについては以下のページの【例題③】で解説しております。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

Data00の値が10以下の場合、ランプ緑が点灯します。(Data00 ≦ 10)
Data00の値が10超過かつ50以下の場合、ランプ黄が点灯します。(Data00 > 10 かつ Data00 ≦ 50)
Data00の値が50超過かつ100以下の場合、ランプ赤が点灯します。(Data00 > 50 かつ Data00 ≦ 100)
Data00の値が100超過の場合、ランプは全て消灯します。(Data00 > 100)
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| LpGreen | BOOL | ランプ緑 |
| LpYellow | BOOL | ランプ黄 |
| LpRed | BOOL | ランプ赤 |
| Data00 | UINT | データ00 |
ST言語
ST言語は下記のようになります。
CASE Data00 OF //Data00の値に応じて多重分岐
0..10: //Data00が10以下
LpGreen := TRUE; //ランプ緑点灯、黄と赤は消灯
LpYellow := FALSE;
LpRed := FALSE;
11..50: //Data00の値が10超過かつ50以下
LpGreen := FALSE; //ランプ黄点灯、緑と赤は消灯
LpYellow := TRUE;
LpRed := FALSE;
51..100: //Data00の値が50超過かつ100以下
LpGreen := FALSE; //ランプ赤点灯、緑と黄は消灯
LpYellow := FALSE;
LpRed := TRUE;
ELSE //Data00の値が100超過(上記以外)
LpGreen := FALSE; //ランプ全て消灯
LpYellow := FALSE;
LpRed := FALSE;
END_CASE;比較する対象にData00を指令することで、Data00の値に応じて分岐処理を行います。
条件式に「0..10:」を指令することで、Data00が0以上かつ10以下の場合にランプ緑のみ点灯する処理に分岐します。
条件式に「11..50:」を指令することで、Data00が10超過(11以上)かつ50以下の場合にランプ黄のみ点灯する処理に分岐します。
条件式に「51..100:」を指令することで、Data00が50超過(51以上)かつ100以下の場合にランプ赤のみ点灯する処理に分岐します。
条件式に「ELSE」を指令することで、上記以外(100超過)の場合にランプを全て消灯する処理に分岐します。
Data00と定数の比較結果が成り立つ条件に応じて、対象のランプの状態をON/OFFしています。
例えば、INT型(符号あり16ビットデータ)の場合、0..10:ではData00の値が負の場合はカバー出来ておらず、浮動小数点型の場合、10超過=11以上等の関係性は崩れます。
3. おわりに
キーエンスKV-X500/X300シリーズにおける多分岐制御(CASE)文について解説しました。
電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

当サイトを運営している電気設計人は、個人で永工舎として外注業務をお請けしております。
以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。
