【キーエンスKV-X】条件分岐(IF)文の指令方法とST例

00_【キーエンスKV-X】条件分岐(IF)文の指令方法とST例

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

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

ST言語における条件分岐(IF)文は、「もし◯◯ならこの処理を実行し、そうでなければ別の処理を行う」といった判断を行う制御文です。

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

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

1. IF文の記述方法

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

IF文は、指定した条件式に基づいて処理を分岐させる条件分岐文の代表的なものです。

IF文には、分岐方法に応じて主に以下の3つのパターンがあります。

1-1. IF ~ 文 (条件分岐1)

条件式が真(TRUE)の場合のみ、特定の処理を実行します。条件式が偽(FALSE)の場合は、END_IFにジャンプして処理をスキップします。

ST言語
IF <条件式> THEN		//もし条件式が成り立つ時、
	<処理文>;		//処理文を実行します。
END_IF;				//IF文はここまで

もし条件式が成り立つ時、処理文を実行します。

メモ
条件式には、結果がビット型になる(ブール値を返す)式であれば、どのような式でも使用できます。

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

10_IF文フローチャート

1-2. IF ~ ELSE文 (条件分岐2)

条件式が真(TRUE)場合と、偽(FALSE)の場合で、異なる二つの処理に分岐します。

ST言語
IF <条件式> THEN		//もし条件式が成り立つ時、
	<処理文1>;		//処理文1を実行します。
ELSE				//条件式が成り立たない時、
	<処理文2>;		//処理文2を実行します。
END_IF;				//IF文はここまで

もし条件式が成り立つ時、処理文1を実行します。条件式が成り立たない時、処理文2を実行します。

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

11_IF文フローチャート

1-3. IF ~ ELSIF ~ 文 (条件分岐3)

最初の条件式を満たさない場合、次の条件式にて再度判定を行います。条件をいくつも持てる条件分岐文です。

ST言語
IF <条件式1> THEN		//もし条件式1が成り立つ時、
	<処理文1>;		//処理文1を実行します。
ELSIF <条件式2> THEN		//条件式1は成り立たないが、条件式2が成り立つ時、
	<処理文2>;		//処理文2を実行します。
ELSIF <条件式3> THEN		//条件式1,2は成り立たないが、条件式3が成り立つ時、
 …
ELSE				//全ての条件式が成り立たない時、
	<処理文n>;		//処理文nを実行します。
END_IF;				//IF文はここまで

もし条件式1が成り立つ時、処理文1を実行します。条件式1は成り立たないが条件式2が成り立つ時、処理文2を実行します。条件式1と2は成り立たないが条件式3が成り立つ時、・・・を実行します。全ての条件式が成り立たない時、処理文nを実行します。

メモ
ELSEは省略しても問題ありません。

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

12_IF文フローチャート

2.【例題①】スイッチ押下の有無で分岐(不成立で処理なし)

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

仕様
スイッチ緑を押している場合のみ、Data00の値を1加算する。
※Data00の値は毎スキャン加算され続ける。

スイッチ緑の状態で処理を分岐するためにIF文を使用します。

Data00を毎スキャン1加算し続けるには、ここでは「Data00 := Data00 + 1;」を指令します。

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

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

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

スイッチ緑を押している場合のみ、Data00の値を1加算します。Data00の値は毎スキャン加算され続けます。

使用する変数

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

変数データ型コメント
SwGreenBOOLスイッチ緑
Data00UINTデータ00

ST言語

ST言語は下記のようになります。

ST言語
IF SwGreen = TRUE THEN			//スイッチ緑押下している時、
	Data00 := Data00 + 1;		//Data00に1加算
END_IF;

条件式にSwGreen = TRUEを指令することで、スイッチ緑が押されている間のみ次行の処理文が実行されます。

処理文であるData00 := Data00 + 1が実行されると、Data00が1加算されます。※押されている間は毎スキャン加算されます。

スイッチ緑が押されていない場合、END_IFにジャンプして処理をスキップします。

メモ
条件式から「= TRUE」を省いて、IF SwGreen THENでも問題ありません。

3.【例題②】スイッチ押下の有無で分岐(不成立で他処理あり)

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

仕様
スイッチ緑を押している間、Data00に定数10を格納する。
スイッチ緑を放している間、Data00に定数20を格納する。

スイッチ緑の状態で処理を分岐するためにIF文を使用します。スイッチ緑を放している間にも処理を行うため、ELSEを使用します。

Data00に定数を格納する場合、ここでは「Data00 := 定数;」を指令します。

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

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

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

スイッチ緑を押している間はData00に定数10を格納して、放している間はData00に定数20を格納します。

使用する変数

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

変数データ型コメント
SwGreenBOOLスイッチ緑
Data00UINTデータ00

ST言語

ST言語は下記のようになります。

ST言語
IF SwGreen = TRUE THEN			//スイッチ緑押下している時、		
	Data00 := 10;			//Data00に10格納
ELSE					//スイッチ緑開放している時、
	Data00 := 20;			//Data00に20格納
END_IF;

条件式にSwGreen = TRUEを指令することで、スイッチ緑が押されている間のみ次行の処理文が実行されます。

条件式がTRUEの場合の処理文であるData00 := 10が実行されると、Data00に定数10が格納されます。

スイッチ緑が放されている間は、条件式がFALSEとなりELSEの次行の処理文が実行されます。

条件式がFALSEの場合の処理文であるData00 := 20が実行されると、Data00に定数20が格納されます。

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

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

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

Data00の値で処理を分岐するためにIF文を使用します。値により処理を多重分岐する必要があるため、ELSIFとELSEを使用します。

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

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

00_【キーエンスKV-X】多分岐制御(CASE)文の指令方法とST例 【キーエンスKV-X】多分岐制御(CASE)文の指令方法と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言語
//Data00の値が10以下の時、ランプ緑点灯、黄と赤は消灯
IF Data00 <= 10 THEN
	LpGreen := TRUE;
	LpYellow := FALSE;
	LpRed := FALSE;

//Data00の値が10超過かつ50以下の時、ランプ黄点灯、緑と赤は消灯
ELSIF Data00 > 10 AND Data00 <= 50 THEN
	LpGreen := FALSE;
	LpYellow := TRUE;
	LpRed := FALSE;

//Data00の値が50超過かつ100以下の時、ランプ赤点灯、緑と黄は消灯
ELSIF Data00 > 50 AND Data00 <= 100 THEN
	LpGreen := FALSE;
	LpYellow := FALSE;
	LpRed := TRUE;

//Data00の値が100超過(上記以外)の時、ランプ全て消灯
ELSE
	LpGreen := FALSE;
	LpYellow := FALSE;
	LpRed := FALSE;
END_IF;

条件式にData00と定数を比較するため、比較FUNを指令しています。比較FUNについては以下のページで解説しております。

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

Data00と定数の比較結果が成り立つ条件に応じて、対象のランプの状態をON/OFFしています。

5. おわりに

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

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

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

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

コメントを残す

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