【キーエンスKV-X】多分岐制御(CASE)文の指令方法とST例

00_【キーエンスKV-X】多分岐制御(CASE)文の指令方法とST例

キーエンスKV-X500/X300シリーズでは、ラダープログラムに加えて、IEC61131-3に準拠したST(Structured Text)言語を使用してプログラムを作成できます。

ST言語は、制御文や数式をテキストベースで記述するプログラミング言語です。特にラダープログラムでは記述が複雑になりがちな数値を扱う複雑な演算処理や、文字列を扱う処理を簡単に記述でき、プログラムの可読性と流用性を向上させるメリットがあります。

ST言語における多分岐制御(CASE)文は、「基準となるワードデータに格納されている値に応じて、処理を選択する」といった判断を行う制御文です。

この記事では、キーエンスKV-X500/X300シリーズにおける多分岐制御(CASE)文の記述方法具体的なST言語例について解説します。

注意
この記事中のラダープログラムはKV STUDIO Ver.12で作成しており、対応機種はKV-X500に設定してあります。
当サイトは現場の技術者を応援するスポンサー様のご支援により運営されています。
スポンサー様一覧ページはこちら>>

1. CASE文の記述方法

ST言語における制御文とは、プログラムの流れを変えるもので、条件によって処理の流れを分岐させたり、繰り返しを実行したりするために使用されます。

CASE文は、基準となるワードデータに格納されている値を基に処理の流れを分岐させることができます。CASE文は、複数の条件分岐を入れ子構造のIF文などで記述するよりも、簡潔で高い可読性をもって記述できる点が特長です。

ST言語
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以下)

処理の流れは以下のようになります。

10_CASE文フローチャート

2.【例題】変数の値によって多重分岐

下記仕様のSTをCASE文を用いて解説します。

仕様
Data00の値に応じて下記の処理を行う。
Data00の値が10以下の場合、ランプ緑が点灯する。
Data00の値が10超過かつ50以下の場合、ランプ黄が点灯する。
Data00の値が50超過かつ100以下の場合、ランプ赤が点灯する。
Data00の値が100超過の場合、ランプは全て消灯する。

Data00の値で処理を分岐するためにCASE文を使用します。条件値には範囲指定(..)を使用します。

ランプを点灯させるには「ランプ := TRUE;」、消灯させるには「ランプ := FALSE;」を指令します。

上記仕様は条件分岐(IF)文でも作成可能です。条件分岐(IF)文で作成したSTについては以下のページの【例題③】で解説しております。

00_【キーエンスKV-X】比較FUNの指令方法とラダープログラムST例 【キーエンスKV-X】比較(=,<>,<,<=,>,>=)FUNの指令方法とラダープログラム/ST例

タッチパネルの動作イメージ

タッチパネルの動作イメージは以下のようになります。

例題①_タッチパネルイメージ

Data00の値が10以下の場合、ランプ緑が点灯します。(Data00 ≦ 10)

Data00の値が10超過かつ50以下の場合、ランプ黄が点灯します。(Data00 > 10 かつ Data00 ≦ 50)

Data00の値が50超過かつ100以下の場合、ランプ赤が点灯します。(Data00 > 50 かつ Data00 ≦ 100)

Data00の値が100超過の場合、ランプは全て消灯します。(Data00 > 100)

使用する変数

使用する変数は以下になります。

変数データ型コメント
LpGreenBOOLランプ緑
LpYellowBOOLランプ黄
LpRedBOOLランプ赤
Data00UINTデータ00

ST言語

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しています。

注意
上記STはData00が「UINT型(符号なし16ビットデータ)」の前提です。
例えば、INT型(符号あり16ビットデータ)の場合、0..10:ではData00の値が負の場合はカバー出来ておらず、浮動小数点型の場合、10超過=11以上等の関係性は崩れます。

3. おわりに

キーエンスKV-X500/X300シリーズにおける多分岐制御(CASE)文について解説しました。

電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

当サイトを運営している電気設計人は、個人で永工舎として外注業務をお請けしております。

以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です