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

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

キーエンスKV-Xシリーズにおける「8ビットデコード(Decode)」は、数値データの値に応じて、いずれか1点のビットデバイスのみをONさせるファンクションです。

一般的にデコード(Decode)とは、「符号化された情報を元の意味に読み解く」「数値や信号を分解して解釈する」といった意味を持つ言葉です。映像・音声・通信などの分野では、データを受け取った側が、符号化(エンコード)された情報を再び元の状態に戻す処理を指して使われます。

ラダープログラムにおいてデコードは数値を対応する1点のビット信号として展開する処理を意味します。

8ビットデコード(Decode)は「異常コードのビット展開」「軸の現在ポジションに応じたビット展開」といった用途に用いることがあります。いずれも変数やワードデバイスに格納された値に応じて、特定のビット列に展開する処理になります。

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

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

1. 8ビットデコード(Decode)の指令方法

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

10_LD表現
ラダープログラム
ST言語
Decode(Src, BitSize, Dst);

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

引数タイプデータ型初期値コメント
ENINBOOLイネーブル入力
ENOOUTBOOLイネーブル出力
SrcINUINT変換ビット位置
BitSizeINUINT0変換するビット数(1~8)
DstIN-OUTBOOL[*]デコード結果格納先の先頭

BitSizeの値に応じて、Dstで占有するビット数が変化します。

BitSizeの値Dstの占有ビット数
UINT#12ビット
UINT#24ビット
UINT#38ビット
UINT#416ビット
UINT#532ビット
UINT#664ビット
UINT#7128ビット
UINT#8256ビット

占有ビット数がデコードできるビット数と言い換えることが出来ます。例えばBitSizeがUINT#7の場合、Srcの値0~127に応じて、128ヶのビットのいずれかがONします。

LD表現

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

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

このラダープログラムでは、InFlag(入力フラグ)がON(TRUE)すると、変換ビット位置(デコード元)であるInDataの値(0~15)に応じて、デコード結果OutData[0]~[15]のいずれかがONします。BitSizeがUINT#4のため、上記の表から占有ビット数は16ビット(OutData[0]~[15])となります。

InDataの値(0~15)に応じて、デコード結果OutData[0]~[15]は以下のようになります。

InDataの値Dstの占有ビット数
0OutData[0]がON
1OutData[1]がON
2OutData[2]がON
3OutData[3]がON
4OutData[4]がON
5OutData[5]がON
6OutData[6]がON
7OutData[7]がON
8OutData[8]がON
9OutData[9]がON
10OutData[10]がON
11OutData[11]がON
12OutData[12]がON
13OutData[13]がON
14OutData[14]がON
15OutData[15]がON

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

InFlag(入力フラグ)がON(TRUE)中に変換ビット位置(上記だとInData)の値が変化すると、OutData(デコード結果)の結果も追従して変化します。

InFlag(入力フラグ)がON(TRUE)した瞬間のみデコードを行う場合、「InFlag(入力フラグ)を立ち上がり検出(R_TRIG)ファンクションブロック等で微分化する」または「8ビットデコード(Decode)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
	Decode(Src := InData, BitSize := UINT#4, Dst := OutData[0]);
END_IF;
メモ
引数タイプがIN、IN-OUTの場合は、「:=」で引数に値を引き渡します。引数タイプが「OUT」の場合は、「=>」で引数の値を変数に格納します。

このSTでは、InFlag(入力フラグ)がON(TRUE)すると、変換ビット位置(デコード元)であるInDataの値(0~15)に応じて、デコード結果OutData[0]~[15]のいずれかがONします。※前述のLD表現と同じ動作です。

2.【例題】変数の値をビット配列にデコードする

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

仕様
変数Data00の値(0~15)に応じて、配列型変数BitAry[0]~[15]のいずれか1点のみをONする。
Data00の値が15超過の場合、BitAry[0]~[15]は全てOFFする。
配列型変数BitAryは一次元配列、要素は[0]~[15]の要素数16とする。

配列型変数BitAry[0]~[15]のいずれか1点のみをONする処理に8ビットデコード(Decode)FUNを使用します。

Data00の値が15超過の場合にBitAry[0]~[15]を全てOFFにするため、今回は変数リセット(Clear)を使用します。キーエンスKV-X500/X300シリーズの変数リセット(Clear)ファンクションについては以下のページで解説しております。

00_【キーエンスKV-X】変数リセット(Clear)FUNの指令方法とラダープログラムST例 【キーエンスKV-X】変数リセット(Clear)FUNの指令方法とラダープログラム/ST例

Data00の値に応じて、デコード処理を行う場合(15以下)と、変数リセット処理を行う場合(15超過)に分岐する必要があります。比較ファンクションを使用して、Data00と定数15の比較を行い各条件に合致した場合のみファンクションを実行します。キーエンスKV-X500/X300シリーズの比較ファンクションについては以下のページで解説しております。

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

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

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

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

変数Data00の値(0~15)に応じて、配列型変数BitAry[0]~[15]のいずれか1点のみがONします。Data00の値が15超過の場合、BitAry[0]~[15]は全てOFFします。

使用する変数

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

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

ラダープログラム

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

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

8ビットデコード(Decode)FUNのイネーブル入力にData00<=UINT#15の比較を指令することで、Data00が15以下の場合のみ8ビットデコード(Decode)が実行されます。(1行目の条件)

8ビットデコード(Decode)FUNの変換ビット位置(デコード元)にData00、変換するビット数にUINT#4、デコード結果にBitAry[0]を指令することで、Data00の値(0~15)に応じて、デコード結果BitAry[0]~[15]のいずれかがONします。(1行目の8ビットデコード(Decode)FUN)

変数リセット(Clear)FUNの対象変数にBitAryを指令することで、Data00が15を超えるとBitAry[0]~[15](配列全体)がゼロクリアされます。(2行目)

ST言語

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

ST言語
//Data00が15以下→BitAryにデコード、15超過→BitAryをクリア
IF Data00 <= UINT#15 THEN
	Decode(Src := Data00, BitSize := UINT#4, Dst := BitAry[0]);
ELSE
	Clear(BitAry);
END_IF;

3. おわりに

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

コメントを残す

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