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

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

オムロンNJ/NXシリーズにおける「ビットエンコーダ(Encoder)」は、指定した範囲(最大256ビット)のビットデバイスのONしている位置を求めるファンクションです。

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

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

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

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

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

1. ビットエンコーダ(Encoder)の指令方法

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

10_LD表現
ラダープログラム
ST言語
Out := Encoder(In, Size);

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

引数タイプデータ型初期値コメント
ENINBOOLイネーブル入力
ENOOUTBOOLイネーブル出力
InINデータ型に従う※変換対象配列
SizeINUSINT1変換するビット数(0~8)
OutRETURNBYTE変換結果

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

20_データ型

LD表現

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

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

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

変換するビット数にUSINT#4を指令することで、変換対象配列は16ビット長(\(2^4=16\))となります。

InData[0]~[15]のON/OFF状態に応じて、変換結果OutDataの値は以下のようになります。InData[0]~[15]の中でONしているビットが複数ある場合、最上位のビット位置がOutDataに格納されます。また、InData[0]~[15]が全てOFFの場合OutFlagはOFFとなり、一つでもONしているビットがあればOutFlagはONします

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)ファンクションブロック等で微分化する」または「ビットエンコーダ(Encoder)FUNに微分型(@)を指定する」方法があります。

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

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

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

12_微分指定

ST表現

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

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

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

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

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

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

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

ビットエンコーダ(Encoder)FUNでは、エンコード元のビットが一つでもONしている場合、イネーブル出力(ENO)はONになります。そのため、今回はイネーブル出力がONであればランプ緑を点灯させる処理を行います。

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

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

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

配列指定変数BitAry[0]~[15]のONしている最上位位置を、常に変数Data00に格納します。

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

使用する変数

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

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

ラダープログラム

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

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

イネーブル入力に_P_On(常時ON)、変換対象配列にBitAry[0]、変換するビット数にUSINT#4、変換結果にData00を指令することで、配列型変数BitAry[0]~[15]のONしている最上位位置を、常に変数Data00に格納します。

メモ
オムロンNJ/NXシリーズにおけるP_Onは『PLCがRUN中は常にONする』システム変数です。

また、イネーブル出力にLpGreenのコイルを指令することで、変換対象配列が一つでもONしていればランプ緑が点灯します。

ST言語

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

ST言語
//配列型変数BitAry[0]~[15]のONしている最下位位置をData00に格納
Data00 := Encoder(In := BitAry[0], Size := USINT#4, ENO => LpGreen);

3. おわりに

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

コメントを残す

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