【キーエンスKV-X】8ビットエンコード(Encode)FUNの指令方法とラダープログラム/ST例

00_【キーエンスKV-X】8ビットエンコード(Encode)FUNの指令方法とラダープログラムST例

キーエンスKV-Xシリーズにおける「8ビットエンコード(Encode)」は、指定した範囲のビットデバイスのONしている位置を求めるファンクションです。

一般的にエンコード(Encode)とは、ある情報を別の形式に変換する処理を指します。例えば「文字をコンピュータ内部で扱える数値データに変換する文字コード化」「音声や映像をデジタルデータとして圧縮する処理」など幅広い分野で使われています。

ラダープログラムにおいてエンコードは複数のビット信号を1つの数値(バイナリ値)にまとめる処理を意味します。

8ビットエンコード(Encode)は「異常ビット位置からコード化」「軸の完了ポジション(複数のビット)から現在ポジション番号を格納」といった用途に用いることがあります。いずれもビット列のONしている位置を変数やワードデバイスに格納する処理になります。

この記事では、キーエンスKV-X500/X300シリーズにおける8ビットエンコード(Encode)の指令方法ラダープログラム、ST言語の例について解説します。

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

1. 8ビットエンコード(Encode)の指令方法

8ビットエンコード(Encode)はLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

10_LD表現
ラダープログラム
ST言語
Result := Encode(Src, BitSize);

8ビットエンコード(Encode)は↓の引数で構成されています。

引数タイプデータ型初期値コメント
ENINBOOLイネーブル入力
ENOOUTBOOLイネーブル出力
SrcINBOOL[*]エンコード対象ビット先頭
BitSizeINUINT0変換するビット数(1~256)
ResultRETURNUINTビット位置(0~)

LD表現

↓がLD表現で使用したラダープログラム例です。

10_LD使用例
メモ
8ビットエンコード(Encode)はFUN(ファンクション)のため、インスタンス名を指令する必要はありません。

このラダープログラムでは、InFlag(入力フラグ)がON(TRUE)すると、エンコード対象ビット先頭(エンコード元)であるInData[0]~[15](16ビット)のONしている位置を求め、ビット位置(エンコード結果)OutDataに数値”0~15”を格納します。

InData[0]~[15]のON/OFF状態に応じて、エンコード結果OutDataの値は以下のようになります。InData[0]~[15]の中でONしているビットが複数ある場合、最下位のビット位置がOutDataに格納されます。また、InData[0]~[15]が全てOFFの場合、OutDataには$FFFFが格納されます。$FFFFとは16進数のFFFF、10進数に直すと65535を意味します。

InDataの状態OutDataの値
InData[0]がON0
InData[1]がON1
InData[2]がON2
InData[3]がON3
InData[4]がON4
InData[5]がON5
InData[6]がON6
InData7]がON7
InData[8]がON8
InData[9]がON9
InData[10]がON10
InData[11]がON11
InData[12]がON12
InData[13]がON13
InData[14]がON14
InData[15]がON15

配列型変数InDataはBOOL型の一次元配列、要素は[0]~[15]の要素数16とします。

InFlag(入力フラグ)がON(TRUE)中にエンコード対象(上記だとInData)の値が変化すると、OutData(エンコード結果)の結果も追従して変化します。

InFlag(入力フラグ)がON(TRUE)した瞬間のみエンコードを行う場合、「InFlag(入力フラグ)を立ち上がり検出(R_TRIG)ファンクションブロック等で微分化する」または「8ビットエンコード(Encode)FUNを微分指定する」方法があります。

立ち上がり検出(R_TRIG)ファンクションブロックについては以下のページで解説しております。

00_【キーエンスKV-X】立ち上がり検出(R_TRIG)FBの指令方法とラダープログラムST例 【キーエンスKV-X】立ち上がり検出(R_TRIG)FBの指令方法とラダープログラム/ST例

微分指定する場合、命令の引数設定ダイアログで微分(E)にチェックを入れます。

12_微分指定

ST表現

↓がST表現で使用したST言語例です。

ST言語
IF InFlag THEN
	OutData := Encode(Src := InData[0], BitSize := UINT#16);
END_IF;
メモ
引数タイプがIN、IN-OUTの場合は、「:=」で引数に値を引き渡します。引数タイプが「OUT」の場合は、「=>」で引数の値を変数に格納します。

このSTでは、InFlag(入力フラグ)がON(TRUE)すると、エンコード対象ビット先頭(エンコード元)であるInData[0]~[15](16ビット)のONしている位置を求め、ビット位置(エンコード結果)OutDataに数値”0~15”を格納します。※前述のLD表現と同じ動作です。

2.【例題】ビット配列のON位置を変数に格納する

下記仕様のラダープログラム、STを8ビットエンコード(Encode)を用いて解説します。

仕様
配列型変数BitAry[0]~[15]のONしている最下位位置を、常に変数Data00に格納する。
BitAry[0]~[15]でONしているビットが一つでもあれば、ランプ緑が点灯する。

配列型変数BitAry[0]~[15]のONしている位置をData00に格納する処理に8ビットエンコード(Encode)FUNを使用します。

8ビットエンコード(Encode)FUNでは、エンコード対象のビットが全てOFFの場合、エンコード結果には$FFFFが格納されます。そのため、今回はエンコード対象であるData00が$FFFFで無ければ(不一致であれば)スイッチ緑をONされる処理を行います。

Data00と$FFFFが不一致であるか判別するため、今回は比較ファンクションを使用します。キーエンスKV-X500/X300シリーズの比較ファンクションについては以下のページで解説しております。

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

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

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

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

配列型変数BitAry[0]~[15]のONしている最下位位置を、常に変数Data00に格納します。BitAry[0]~[15]が全てOFFの場合、Data00には$FFFF(16進数のFFFF、10進数に直すと65535)が格納されます。

BitAry[0]~[15]でONしているビットが一つでもあれば、ランプ緑が点灯します。

使用する変数

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

変数データ型コメント
Data00UINTデータ00
BitAryARRAY[0..15] OF BOOLビット配列
LpGreenBOOLランプ緑

ラダープログラム

ラダープログラムは以下のようになります。

例題①_ラダープログラム

イネーブル入力に_AlwaysOn(常時ON)、エンコード対象にBitAry[#0]、変換するビット数にUINT#16、エンコード結果にData00を指令することで、配列型変数BitAry[0]~[15]のONしている最下位位置を、常に変数Data00に格納します。(1行目)

メモ
キーエンスKV-X500/X300シリーズにおける_AlwaysOnは『PLCがRUN中は常にONする』システム変数です。

LpGreenコイルの条件に、Data00<>UINT#16#FFFFの比較を指令することで、Data00が$FFFF(16進数のFFFF、10進数に直すと65535)の場合、ランプ緑が点灯します。(2行目)

ST言語

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

ST言語
//配列型変数BitAry[0]~[15]のONしている最下位位置をData00に格納
Data00 := Encode(Src := BitAry[0], BitSize := UINT#16);

//Data00が$FFFFで無ければランプ緑点灯
IF Data00 <> UINT#16#FFFF THEN
	LpGreen := TRUE;
ELSE
	LpGreen := FALSE;
END_IF;

3. おわりに

キーエンスKV-X500/X300シリーズにおける8ビットエンコード(Encode)について解説しました。

コメントを残す

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