【オムロンNJ/NX】ビットデコーダ(Decoder)FUNの指令方法とラダープログラム/ST例

00_【オムロンNJNX】ビットデコーダ(Decoder)FUNの指令方法とラダープログラムST例

オムロンNJ/NXシリーズにおける「ビットデコーダ(Decoder)」は、数値データの値に応じて、いずれか1点のビットデバイスのみをONさせるファンクションです。

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

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

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

この記事では、オムロンNJ/NXシリーズにおけるビットデコーダ(Decoder)の指令方法ラダープログラム、ST言語の例について解説します。

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

1. ビットデコーダ(Decoder)の指令方法

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

10_LD表現
ラダープログラム
ST言語
Decoder(In, Size, InOut);

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

引数タイプデータ型初期値コメント
ENINBOOLイネーブル入力
ENOOUTBOOLイネーブル出力
InINBYTE0変換するビット位置
SizeINUSINT1変換するビット数(0~8)
InOut[]配列IN-OUTデータ型に従う※変換対象配列
OutOUTBOOL戻り値

※使用できるデータ型は以下の通りです。

10_データ型

Size(変換するビット数)の値に応じて、InOut[]配列で占有するビット数が変化します。

Sizeの値InOut[]配列の占有ビット数
USINT#12ビット
USINT#24ビット
USINT#38ビット
USINT#416ビット
USINT#532ビット
USINT#664ビット
USINT#7128ビット
USINT#8256ビット

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

LD表現

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

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

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

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

InDataの値OutData[0]~[15]の値
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)ファンクションブロック等で微分化する」または「ビットデコーダ(Decoder)FUNに微分型(@)を指定する」方法があります。

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

00_【オムロンNJNX】立ち上がり微分(R_TRIG)FBの指令方法とラダープログラムST例 【オムロンNJ/NX】立ち上がり微分(R_TRIG)FBの指令方法とラダープログラム/ST例

微分型(@)を指定する場合、FUN(ファンクション)入力時、頭文字に@を付けます。

20_微分型

ST表現

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

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

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

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

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

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

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

Data00の値が15超過の場合にBitAry[0]~[15]を全てOFFにするため、今回は初期化(Clear)を使用します。オムロンNJ/NXシリーズの初期化(Clear)ファンクションについては以下のページで解説しております。

01_【オムロンNJNX】初期化(Clear)FUNの指令方法とラダープログラムST例 【オムロンNJ/NX】初期化(Clear)FUNの指令方法とラダープログラム/ST例

Data00の値に応じて、デコード処理を行う場合(15以下)と、初期化処理を行う場合(15超過)に分岐する必要があります。比較ファンクションを使用して、Data00と定数15の比較を行い各条件に合致した場合のみファンクションを実行します。オムロンNJ/NXシリーズの比較ファンクションについては以下のページで解説しております。

00_【オムロンNJNX】比較FUNの指令方法とラダープログラムST例 【オムロンNJ/NX】比較(=,<>,<,<=,>,>=)FUNの指令方法とラダープログラム/ST例

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

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

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

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

使用する変数

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

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

ラダープログラム

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

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

ビットデコーダ(Decoder)FUNのイネーブル入力にData00<=BYTE#16#0Fの比較を指令することで、Data00が15以下(16進数だと0F以下)の場合のみビットデコーダ(Decoder)が実行されます。(1行目の条件)

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

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

ST言語

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

ST言語
//Data00が15以下→BitAryにデコード、15超過→BitAryをクリア
IF Data00 <= BYTE#16#0F THEN
	Decoder(In := Data00, Size := USINT#4, InOut := BitAry[0]);
ELSE
	Clear(BitAry);
END_IF;

3. おわりに

オムロンNJ/NXシリーズにおけるビットデコーダ(Decoder)について解説しました。

コメントを残す

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