キーエンスKVシリーズにおける「データ転送」命令とは、16/32/64ビットデータを指定したデバイスに格納するラダープログラム命令です。
データ転送命令を用いることにより「データメモリ(DM)に定数を格納する回路」や「タイマやカウンタの現在値を他のデバイスに格納する回路」を作ることができます。
ラダープログラムでデータメモリ(DM)などのワードデバイスを使用する場合、頻繁に使用する重要なラダープログラム命令になります。
この記事では、キーエンスKVシリーズにおけるデータ転送命令の指令方法とラダープログラム例について解説します。
キーエンスKVシリーズにはブロック転送(BMOV)命令や一括転送(FMOV)命令等がありますが、ここでは対象としていません。
ブロック転送(BMOV)命令については以下のページで解説しております。
【キーエンスKV】ブロック転送(BMOV)命令の指令方法とラダープログラム例一括転送(FMOV)命令については以下のページで解説しております。
【キーエンスKV】一括転送(FMOV)命令の指令方法とラダープログラム例目次
1. データ転送命令の指令方法
データ転送命令は、『毎スキャン実行型』と『微分実行型(パルス実行型)』に大別されます。
毎スキャン実行型とは、実行条件がONしている間、その命令を毎スキャン実行するものです。対して微分実行形(パルス実行型)とは、実行条件がOFF→ONになったときの1スキャンのみ実行するものです。
MOV:毎スキャン実行型のデータ転送命令
毎スキャン実行型のデータ転送命令は、扱うデバイスのデータ型によって、さらに6種類に分けられます。
以下が毎スキャン実行型のデータ転送命令です。
MOV(.U) | :16ビット符号無しBINデータ |
MOV.S | :16ビット符号付きBINデータ |
MOV.D | :32ビット符号無しBINデータ |
MOV.L | :32ビット符号付きBINデータ |
MOV.F | :単精度浮動小数点型実数データ |
MOV.DF | :倍精度浮動小数点型実数データ |
扱う「データ長」や「符号付きor無し」などはサフィックスと呼ばれる接尾語を命令につけて指定します。
KV STUDIOで作成した各々の毎スキャン実行型のデータ転送命令は以下のようになります。
↓が16ビット符号無しBINデータのデータ転送(MOV)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、十進数の定数5をデータメモリDM0に転送します。
↓が16ビット符号付きBINデータのデータ転送(MOV.S)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、十進数の定数-5をデータメモリDM0に転送します。
↓が32ビット符号無しBINデータのデータ転送(MOV.D)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、十進数の定数50000をデータメモリDM0,DM1に転送します。
↓が32ビット符号付きBINデータのデータ転送(MOV.L)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、十進数の定数-50000をデータメモリDM0,DM1に転送します。
↓が単精度浮動小数点型実数データのデータ転送(MOV.F)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、実数の定数1.234をデータメモリDM0,DM1に転送します。
↓が倍精度浮動小数点型実数データのデータ転送(MOV.DF)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、実数の定数1.23456789をデータメモリDM0,DM1,DM2,DM3に転送します。
@MOV:微分実行型(パルス実行型)のデータ転送命令
微分実行型(パルス実行型)のデータ転送命令は、毎スキャン実行型と同様にサフィックスによって、さらに6種類に分けられます。
@MOV(.U) | :16ビット符号無しBINデータ |
@MOV.S | :16ビット符号付きBINデータ |
@MOV.D | :32ビット符号無しBINデータ |
@MOV.L | :32ビット符号付きBINデータ |
@MOV.F | :単精度浮動小数点型実数データ |
@MOV.DF | :倍精度浮動小数点型実数データ |
命令の頭文字に@を付けることで、実行条件がOFF→ONになったときの1スキャンしか実行されない微分実行型(パルス実行型)となります。
KV STUDIOで作成した各々の微分実行型(パルス実行型)のデータ転送命令は以下のようになります。
↓が微分実行型(パルス実行型)の16ビット符号無しBINデータのデータ転送(@MOV)命令です。
微分実行型(パルス実行型)の場合、命令文の左側に上向きの矢印が表示されます。
このラダープログラムは、実行条件である入力リレーR000がOFF→ONになった瞬間に、十進数の定数5をデータメモリDM0に転送します。
このように、微分実行型(パルス実行型)の場合は実行条件がOFF→ONになった瞬間の1スキャンしか命令が実行されません。
扱うデバイスのデータ型によるサフィックスの指定方法に関しては、毎スキャン実行型と同様です。
その他の微分実行型(パルス実行型)のデータ転送命令は以下のようになります。
命令の解説は省略しますが、実行条件がOFF→ONになった瞬間に1スキャンだけ実行されるもので、その他は毎スキャン実行型と同じ機能と捉えて頂いて問題ありません。
↓が16ビット符号付きBINデータのデータ転送(@MOV.S)命令です。
↓が32ビット符号無しBINデータのデータ転送(@MOV.D)命令です。
↓が32ビット符号付きBINデータのデータ転送(@MOV.L)命令です。
↓が単精度浮動小数点型実数データのデータ転送(@MOV.F)命令です。
↓が倍精度浮動小数点型実数データのデータ転送(@MOV.DF)命令です。
KV STUDIOにおける命令挿入の方法
データ転送命令をKV STUDIOの回路上に挿入するには「命令文 転送元 転送先」と回路上で入力します。
例1) 先ほどの毎スキャン実行型の16ビット符号無しBINデータのデータ転送(MOV)命令を挿入する場合、KV STUDIOの回路上でMOV #5 DM0と入力してEnterキーを押します。
例2)先ほどの微分実行型(パルス実行型)の32ビット符号付きBINデータのデータ転送(@MOV.L)命令を挿入する場合、KV STUDIOの回路上で@MOV.L -50000 DM0と入力してEnterキーを押します。
2.【例題①】16ビット符号付きBINデータのデータ転送
下記仕様のラダープログラムをデータ転送命令を用いて解説します。
スイッチ(R001)を押すと、データメモリDM0に定数-8を転送する。
スイッチ(R002)を押すと、データメモリDM0に定数0を転送する。
スイッチが同時に複数押された場合、後から押したものを優先する。
データメモリDM0は16ビット符号付きBINデータとして扱う。
スイッチは後に入力されたものを優先する後入力優先回路となります。後入力優先回路を作成するには色々な手段がありますが、今回はデータ転送命令を微分実行型(パルス実行型)にすることで後入力を優先する手法を用います。
データメモリDM0は16ビット符号付きBINデータとして扱うため、サフィックスは.Sとなります。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。
スイッチを押すと、以下のようにデータメモリDM0に定数を転送します。
スイッチ(R000)押下 | :DM0→定数5を転送 |
スイッチ(R001)押下 | :DM0→定数-8を転送 |
スイッチ(R002)押下 | :DM0→定数0を転送 |
スイッチが同時に複数押された場合、後から押したものを優先します。
ラダープログラム
ラダープログラムは以下のようになります。
実行条件によって各定数をデータ転送命令でデータメモリDM0に転送します。
後入力を優先するために微分実行型(パルス実行型)、データメモリDM0は16ビット符号付きBINデータとするためにサフィックスは.Sを指定します。
以上より、データ転送命令は@MOV.Sを使用します。
シミュレータの動作
シミュレータを実行している様子は以下のようになります。
各デバイスは、黄緑色に塗りつぶされるとONになっている状態です。
入力リレーR000がONすると、データメモリDM0に定数5が転送されます。
入力リレーR001がONすると、データメモリDM0に定数-8が転送されます。
入力リレーR002がONすると、データメモリDM0に定数0が転送されます。
入力リレーが複数同時にONした場合は、後に入力したものが優先されます。
3.【例題②】32ビット符号無しBINデータのデータ転送
下記仕様のラダープログラムをデータ転送命令を用いて解説します。
スイッチ(R001)を押すと、データメモリDM0,DM1に定数80000を転送する。
スイッチ(R001)を押すと、データメモリDM0,DM1に定数0を転送する。
スイッチが同時に複数押されるケースは考慮しなくてよい。
データメモリは32ビット符号無しBINデータとして扱う。(DM0が下位、DM1が上位)
スイッチが同時に複数押されることは考慮しなくて良いので、今回は毎スキャン実行型を使用します。
データメモリは32ビット符号無しBINデータと扱うため、サフィックスは.Dとなります。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。
スイッチを押すと、以下のようにデータメモリDM0,DM1に定数を転送します。
スイッチ(R000)押下 | :DM0,DM1→定数50000を転送 |
スイッチ(R001)押下 | :DM0,DM1→定数80000を転送 |
スイッチ(R002)押下 | :DM0,DM1→定数0を転送 |
ラダープログラム
ラダープログラムは以下のようになります。
【例題①】と同様、実行条件によって各定数をデータ転送命令でデータメモリDM0,DM1に転送します。
今回は命令を実行する順序を考慮しなくて良いため毎スキャン実行型、データメモリDM0は32ビット符号無しBINデータとするためにサフィックスは.Dを指定します。
以上より、データ転送命令はMOV.Dを使用します。
シミュレータの動作
シミュレータを実行している様子は以下のようになります。
入力リレーR000がONすると、データメモリDM0,DM1に定数50000が転送されます。
入力リレーR001がONすると、データメモリDM0,DM1に定数80000が転送されます。
入力リレーR002がONすると、データメモリDM0,DM1に定数0が転送されます。
4. おわりに
キーエンスKVシリーズにおけるデータ転送(MOV)命令について解説しました。
冒頭でも書きましたが、データ転送命令はラダープログラムでワードデバイスを使用する場合は(私の経験上)頻繁に使用する命令になります。
以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。
ただし、ラダープログラムやPLCといった電気・制御設計は参考書やWebサイトのみでの学習には必ずどこかで限界が来ます。
各メーカが販売しているPLCやプログラム作成のアプリケーションを揃えるには安くても十万円以上の大きな費用が掛かり、独学は現実的ではありません。
ラダープログラムの一番現実的な学習方法は「実務で経験を積む」ことです。電気・制御設計者はこれから更に必要な人材になり続けますので、思い切って転職する選択肢もあります。
『doda』といった大手求人(転職)サイトには電気・制御設計の求人が数多く紹介されています。※登録は無料です。
「スキルこそ今後のキャリアを安定させる最も大切な材料」と考える私にとって電気・制御設計はとても良い職業だと思います。キャリアの参考になれば幸いです。
昨日、KV STUDIOでKV Nanoのプログラムをつくっていましたが、
[MOV K0 Z0]を書き込もうとすると、どうもZ0を受付てもらえないようです。どのように入力すると良いのでしょうか。キーエンスのPLCは今迄、一度もラダーを作成した事がありません。済みませんが教えて下さい。
KV Nanoの場合、使用できるインデックスレジスタはZ1~Z12です。
この範囲で代替してみては如何でしょうか。