【キーエンスKV】上位・下位データ入れ替え(SWAP)命令の指令方法とラダープログラム例

【キーエンスKV】上位・下位データ入れ替え(SWAP)命令の指令方法とラダープログラム例

キーエンスKVシリーズにおける「上位・下位データ入れ替え」命令とは、内部レジスタに格納されている1ワード(16ビット)長データの上位バイト(上位8ビット)と下位バイト(下位8ビット)の値を入れ替えるラダープログラム命令です。

上位・下位データ入れ替え命令を用いることにより「外部機器から受け取ったデータのバイト順を入れ替える回路」を作ることができます。

このバイト順を入れ替える作業は「ビッグエンディアン⇔リトルエンディアンの変換」と呼ばれ、外部機器(2次元コードリーダや画像センサ、産業用PC)とPLCのデータ授受において、各々扱うエンディアンが異なる場合によく使用されます。

メモ
エンディアン(endian)とは、複数のバイトを並べる順序の種類で、日本語訳ではバイト順とも言います。

この記事では、キーエンスKVシリーズにおける上位・下位データ入れ替え命令の指令方法ラダープログラム例について解説します。

注意
この記事中のラダープログラムはKV STUDIO Ver.11で作成しており、対応機種はKV-N24に設定してあります。
メモ
上位・下位データ入れ替え(SWAP)命令はKV-8000・KV-7500/7300・KV-5500/5000/3000・KV-1000・KV-nanoシリーズで使用可能です。※2024年6月現在
電気設計人
電気設計人

現場では、略して上下バイト入れ替え命令と呼ばれることもあります。

1. 上位・下位データ入れ替え命令の指令方法

上位・下位データ入れ替え命令は、『毎スキャン実行型』『微分実行型(パルス実行型)』に大別されます。

毎スキャン実行型とは、実行条件がONしている間、その命令を毎スキャン実行するものです。対して微分実行形(パルス実行型)とは、実行条件がOFF→ONになったときの1スキャンのみ実行するものです。

SWAP:毎スキャン実行型の上位・下位データ入れ替え命令

毎スキャン実行型の上位・下位データ入れ替え命令は、扱うデバイスのデータ型によって、さらに2種類に分けられます。

以下が毎スキャン実行型の上位・下位データ入れ替え命令です。

SWAP(.U):16ビット符号無しBINデータ
SWAP.D:32ビット符号無しBINデータ

扱う「データ長」や「符号付きor無し」などはサフィックスと呼ばれる接尾語を命令につけて指定します。

メモ
16ビット符号無しBINデータの場合、サフィックスである.UはKV STUDIO上では表示が省略されます。


KV STUDIOで作成した各々の毎スキャン実行型の上位・下位データ入れ替え命令は以下のようになります。

↓が16ビット符号無しBINデータの上位・下位データ入れ替え(SWAP)命令です。

10_SWAP命令

↓命令部分を拡大

10_命令拡大

このラダープログラムでは、実行条件である入力リレーR000がONしている間、データメモリDM0の上位・下位バイトを入れ替えDM10に格納します。

10_命令イメージ
メモ
数値の頭文字が「#」の場合は10進数になり、「$」の場合は16進数になります。

上位・下位データ入れ替え命令について理解するためには、両側のLDA命令STA命令の意味を理解して頂く必要があります。少し長くなりますが、まだ理解していない方は以下の解説をご覧ください。

そもそも上位・下位データ入れ替え命令とは、内部レジスタに格納されているデータの上位バイトと下位バイトを入れ替え内部レジスタ に格納する命令です。

入れ替える前のデータは一度内部レジスタに値を格納する必要があります。この内部レジスタにデータを格納する命令がロードA(LDA)命令です。↑のラダープログラムではデータメモリDM0の値を内部レジスタに格納しています。

入れ替えた結果は内部レジスタに格納されるので、内部レジスタ上からデータメモリ等のデバイスに値を引っ張ってくる必要があります。この内部レジスタのデータを指定したデバイスに格納する命令がストアA(STA)命令です。↑のラダープログラムでは内部レジスタの値をデータメモリDM10に格納しています。

注意
ロードA(LDA)命令、ストアA(STA)命令ともにサフィックスにて扱うデータの型を指定する必要があります。


↓が32ビット符号無しBINデータの上位・下位データ入れ替え(SWAP.D)命令です。

11_SWAP.D命令

↓命令部分を拡大

11_命令拡大

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1の上位・下位ワードを入れ替えDM10,DM11に格納します。

11_命令イメージ
メモ
データメモリDMは、1点が16ビットで構成されるデバイスです。32ビット命令を使用する場合は指定したデータメモリを下位として扱われます。
注意
↑のラダープログラムでは、LDA.D命令によりデータメモリDM0,DM1が、STA.D命令によりデータメモリDM10,DM11が占有されます。DM1,DM11はラダープログラム上では使用していないように見えますが、他の用途では使用できなくなります。

@SWAP:微分実行型(パルス実行型)の上位・下位データ入れ替え命令

微分実行型(パルス実行型)の上位・下位データ入れ替え命令は、毎スキャン実行型と同様にサフィックスによって、さらに2種類に分けられます。

@SWAP(.U):16ビット符号無しBINデータ
@SWAP.D:32ビット符号無しBINデータ

命令の頭文字に@を付けることで、実行条件がOFF→ONになったときの1スキャンしか実行されない微分実行型(パルス実行型)となります。


KV STUDIOで作成した各々の微分実行型(パルス実行型)の上位・下位データ入れ替え命令は以下のようになります。

↓が微分実行型(パルス実行型)16ビット符号無しBINデータの上位・下位データ入れ替え(@SWAP)命令です。

20_@SWAP命令

↓命令部分を拡大

20_命令拡大

微分実行型(パルス実行型)の場合、命令文の左側に上向きの矢印が表示されます。

このラダープログラムは、実行条件である入力リレーR000がOFF→ONになった瞬間に、データメモリDM0の上位・下位バイトを入れ替えDM10に格納します。

このように、微分実行型(パルス実行型)の場合は実行条件がOFF→ONになった瞬間の1スキャンしか命令が実行されません。

扱うデバイスのデータ型によるサフィックスの指定方法に関しては、毎スキャン実行型と同様です。


その他の微分実行型(パルス実行型)の上位・下位データ入れ替え命令は以下のようになります。

命令の解説は省略しますが、実行条件がOFF→ONになった瞬間に1スキャンだけ実行されるもので、その他は毎スキャン実行型と同じ機能と捉えて頂いて問題ありません。

↓が32ビット符号無しBINデータの上位・下位データ入れ替え(@SWAP.D)命令です。

21_@SWAP.D命令

↓命令部分を拡大

21_命令拡大

KV STUDIOにおける命令挿入の方法

上位・下位データ入れ替え命令をKV STUDIOの回路上に挿入するには「命令文」と回路上で入力します。

例1 先ほどの毎スキャン実行型の16ビット符号無しBINデータの上位・下位データ入れ替え(SWAP)命令を挿入する場合、KV STUDIOの回路上でSWAPと入力してEnterキーを押します。

20_命令挿入

※同時にロードA(LDA)命令とストアA(STA)命令も挿入しています。


例2)先ほどの微分実行型(パルス実行型)の32ビット符号無しBINデータの上位・下位データ入れ替え(@SWAP.D)命令を挿入する場合、KV STUDIOの回路上で@SWAP.Dと入力してEnterキーを押します。

21_命令挿入

※こちらも同時にロードA(LDA)命令とストアA(STA)命令も挿入しています。

2.【例題】16ビット符号無しBINデータの上位・下位データ入れ替え

下記仕様のラダープログラムを上位・下位データ入れ替え命令を用いて解説します。

仕様
スイッチ(R000)を押すと、データメモリDM0に定数$1234を転送する。
スイッチ(R001)を押すと、データメモリDM0に定数$5678を転送する。
データメモリDM2に、データメモリDM0の上下バイトを入れ替えた結果を常に書き込む。

スイッチを押すと、データメモリDM0に各定数が転送されます。定数の転送にはいくつか方法がありますが、今回はデータ転送命令を使用します。データ転送命令は以下のページで解説しております。

00_【キーエンスKV】データ転送(MOV)命令の指令方法とラダープログラム例 【キーエンスKV】データ転送(MOV)命令の指令方法とラダープログラム例

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

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

例題①_タッチパネル

スイッチを押すと、以下のようにデータメモリDM0に定数を転送します。

スイッチ(R000)押下:DM0→定数$1234を転送
スイッチ(R001)押下:DM0→定数$5678を転送

ラダープログラム

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

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

実行条件によって各定数をデータ転送(MOV)命令でデータメモリDM0に転送します。

データメモリDM2には常にDM0の上下バイトを入れ替えた結果を転送するため、コントロールリレーCR2002を使用してSWAP命令を実行します。

メモ
コントロールリレーとは、予め機能が割り振られている特殊なデバイスです。その中のCR2002は「PLCがRUNモード中、常にONする」デバイスです。

SWAP命令によりDM0の上位バイト(上位8ビット)と下位バイト(下位8ビット)の値を入れ替えた結果がDM2に格納されます。

3. おわりに

キーエンスKVシリーズにおける上位・下位データ入れ替え(SWAP)命令について解説しました。

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

ただし、ラダープログラムやPLCといった電気・制御設計は参考書やWebサイトのみでの学習には必ずどこかで限界が来ます。

各メーカが販売しているPLCやプログラム作成のアプリケーションを揃えるには安くても十万円以上の大きな費用が掛かり、独学は現実的ではありません。

ラダープログラムの一番現実的な学習方法は「実務で経験を積む」ことです。電気・制御設計者はこれから更に必要な人材になり続けますので、思い切って転職する選択肢もあります。

doda』といった大手求人(転職)サイトには電気・制御設計の求人が数多く紹介されています。※登録は無料です。

「スキルこそ今後のキャリアを安定させる最も大切な材料」と考える私にとって電気・制御設計はとても良い職業だと思います。キャリアの参考になれば幸いです。

コメントを残す

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