【キーエンスKV】乗算(MUL)命令の指令方法とラダープログラム例

00_【キーエンスKV】乗算(MUL)命令の指令方法とラダープログラム例

キーエンスKVシリーズにおける「乗算」命令とは、内部レジスタの値に指定した値を乗算して、乗算結果を内部レジスタに再度格納するラダープログラム命令です。

ラダープログラム上で、データメモリ等のワードデバイスのデバイス値を乗算する場合に使用する命令になります。

この記事では、キーエンスKVシリーズにおける乗算命令の指令方法ラダープログラム例について解説します。

注意
この記事中のラダープログラムはKV STUDIO Ver.11で作成しており、対応機種はKV-N24に設定してあります。
メモ
加算命令はKV-8000・KV-7500/7300・KV-5500/5000/3000・KV-1000・KV-nanoシリーズで使用可能です。※2020年11月現在

キーエンスKVシリーズにおける他の四則演算(加算・減算・除算)命令については、この記事では対象としていません。(後日、別記事として解説します)

1. 乗算命令の指令方法

乗算命令は、『毎スキャン実行型』『微分実行型(パルス実行型)』に大別されます。

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

MUL:毎スキャン実行型の乗算命令

毎スキャン実行型の乗算命令は、扱うデバイスのデータ型によって、さらに6種類に分けられます。

以下が毎スキャン実行型の乗算命令です。

MUL(.U):16ビット符号無しBINデータ
MUL.S:16ビット符号付きBINデータ
MUL.D:32ビット符号無しBINデータ
MUL.L:32ビット符号付きBINデータ
MUL.F:単精度浮動小数点型実数データ
MUL.DF:倍精度浮動小数点型実数データ

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

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


KV STUDIOで作成した各々の毎スキャン実行型の乗算命令は以下のようになります。

↓が16ビット符号無しBINデータの乗算(MUL)命令です。

10_MUL命令

↓命令部分を拡大

10_MUL命令(拡大)

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0と十進数の定数5の乗算結果をデータメモリDM10に格納します。

乗算命令について理解するためには、両側のLDA命令STA命令の意味を理解して頂く必要があります。少し長くなりますが、まだ理解していない方は以下の解説をご覧ください。

そもそも乗算命令とは、内部レジスタ × 指定した値 = 内部レジスタ の演算を行う命令です。

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

指定した値とは、内部レジスタに乗算するもう一方の値のことで、↑のラダープログラムでは定数5を指定しています。(#5とは十進数の定数5のこと)

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

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

乗算結果が16ビットの範囲を超える場合、ストアA(STA)命令のサフィックスに.Dを付けて”32ビット符号無しBINデータ”にする必要があります。その場合、↑のラダープログラムは乗算結果がDM10,DM11に格納されます。


↓が16ビット符号付きBINデータの乗算(MUL.S)命令です。

11_MUL.S命令

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0と十進数の定数-10の乗算結果をデータメモリDM10に格納します。

乗算結果が16ビットの範囲を超える場合、ストアA(STA)命令のサフィックスに.Lを付けて”32ビット符号無しBINデータ”にする必要があります。その場合、↑のラダープログラムは乗算結果がDM10,DM11に格納されます。


↓が32ビット符号無しBINデータの乗算(MUL.D)命令です。

12_MUL.D命令

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1と十進数の定数50000の乗算結果をTM0,TM1(上位)と32ビット内部レジスタ(下位)に格納します。

STA.D命令を用いて32ビット内部レジスタの値を”32ビット符号無しBINデータ”としてDM10,DM11に格納します。

メモ
「TM」とは、テンポラリデータメモリと呼ばれるデバイスです。
TM0,TM1は乗算命令や除算命令などの演算結果データが一時的に格納されます。
メモ
データメモリDMは、1点が16ビットで構成されるデバイスです。32ビット命令を使用する場合は指定したデータメモリを下位とする2点が使用されます。
注意
↑のラダープログラムでは、LDA.D命令によりデータメモリDM0,DM1、STA.D命令によりDM10,DM11が使用されます。DM1,DM11はラダープログラム上では使用していないように見えますが、他の用途では使用できなくなります。


↓が32ビット符号付きBINデータの乗算(MUL.L)命令です。

13_MUL.L命令

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1と十進数の定数-50000の乗算結果をTM0,TM1(上位)と32ビット内部レジスタ(下位)に格納します。

STA.L命令を用いて32ビット内部レジスタの値を”32ビット符号付きBINデータ”としてDM10,DM11に格納します。


↓が単精度浮動小数点型実数データの乗算(MUL.F)命令です。

14_MUL.F命令

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1と実数の定数1.234の乗算結果を32ビット内部レジスタに格納します。

STA.F命令を用いて32ビット内部レジスタの値を単精度浮動小数点型実数データとしてDM10,DM11に格納します。

メモ
単精度浮動小数点型実数は32ビットデータとして扱われます。つまりデータメモリDMの場合は、指定したデータメモリを下位とする2点を占有します。


↓が倍精度浮動小数点型実数データの乗算(MUL.DF)命令です。

15_MUL.DF命令

このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1,DM2,DM3と実数の定数1.234567の乗算結果を64ビット内部レジスタに格納します。

STA.DF命令を用いて64ビット内部レジスタの値を倍精度浮動小数点型実数データとしてDM10,DM11,DM12,DM13に格納します。

メモ
倍精度浮動小数点型実数は64ビットデータとして扱われます。つまりデータメモリDMの場合は、指定したデータメモリを最下位とする4点を占有します。

@MUL:微分実行型(パルス実行型)の乗算命令

微分実行型(パルス実行型)の乗算命令は、毎スキャン実行型と同様にサフィックスによって、さらに6種類に分けられます。

@MUL(.U):16ビット符号無しBINデータ
@MUL.S:16ビット符号付きBINデータ
@MUL.D:32ビット符号無しBINデータ
@MUL.L:32ビット符号付きBINデータ
@MUL.F:単精度浮動小数点型実数データ
@MUL.DF:倍精度浮動小数点型実数データ

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


KV STUDIOで作成した各々の微分実行型(パルス実行型)の乗算命令は以下のようになります。

↓が微分実行型(パルス実行型)16ビット符号無しBINデータの乗算(@MUL)命令です。

20_@MUL命令

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

このラダープログラムは、実行条件である入力リレーR000がOFF→ONになった瞬間に、データメモリDM0と十進数の定数5の乗算結果をデータメモリDM10に格納します。

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

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


その他の微分実行型(パルス実行型)の乗算命令は以下のようになります。

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

↓が微分実行型(パルス実行型)16ビット符号付きBINデータの乗算(@MUL.S)命令です。

21_@MUL.S命令


↓が微分実行型(パルス実行型)32ビット符号無しBINデータの乗算(@MUL.D)命令です。

22_@MUL.D命令


↓が微分実行型(パルス実行型)32ビット符号付きBINデータの乗算(@MUL.L)命令です。

23_@MUL.L命令


↓が微分実行型(パルス実行型)単精度浮動小数点型実数データの乗算(@MUL.F)命令です。

24_@MUL.F命令


↓が微分実行型(パルス実行型)倍精度浮動小数点型実数データの乗算(@MUL.DF)命令です。

25_@MUL.DF命令

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

乗算命令をKV STUDIOの回路上に挿入するには「命令文 乗算する値」と回路上で入力します。

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

30_命令挿入1

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


例2先ほどの微分実行型(パルス実行型)の32ビット符号付きBINデータの乗算(@MUL.L)命令を挿入する場合、KV STUDIOの回路上で@MUL.L -50000と入力してEnterキーを押します。

30_命令挿入2

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

2.【例題①】16ビット符号付きBINデータの乗算値を求める

下記仕様のラダープログラムを乗算命令を用いて解説します。

仕様
スイッチ(R000)を押すと、データメモリDM0に定数5を転送する。
スイッチ(R001)を押すと、データメモリDM0とDM1を乗算した結果をDM2に転送する。
スイッチ(R002)を押すと、データメモリDM0に定数0を転送する。(リセット的な意味)
各データメモリは”16ビット符号付きBINデータ”として扱い、乗算結果は16ビット長に収まるものとする。

データメモリDM0に定数を転送するため、データ転送(MOV)命令を使用します。

キーエンスKVシリーズにおけるデータ転送(MOV)命令については以下のページで解説しておりますので、宜しければご覧ください。

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

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

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

例題①_タッチパネル

スイッチ(R000)を押すと、データメモリDM0に定数5を転送します。

スイッチ(R001)を押すと、データメモリDM0とDM1を乗算した結果をDM2に転送します。(DM0×DM1=DM2)

スイッチ(R002)を押すと、リセット的な意味でデータメモリDM0に定数0を転送します。

ラダープログラム

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

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

実行条件をR000とする”16ビット符号付きBINデータ”のデータ転送(MOV.S)命令を用いてデータメモリDM0に定数5を転送します。(1行目)

実行条件をR001とする”16ビット符号付きBINデータ”の乗算(MUL.S)命令を用いて、DM0とDM1を乗算した結果をDM2に格納します。(2行目)

実行条件をR002とするデータ転送(MOV.S)命令を用いてDM0に定数0を転送します。(3行目)

3.【例題②】32ビット符号無しBINデータの乗算値を求める

下記仕様のラダープログラムを乗算命令を用いて解説します。

仕様
スイッチ(R000)を押すと、データメモリDM0,DM1に定数50,000を転送する。
スイッチ(R001)を押すと、データメモリDM0,DM1とDM2,DM3を乗算した結果をDM4,DM5に転送する。
スイッチ(R002)を押すと、データメモリDM0,DM1に定数0を転送する。(リセット的な意味)
各データメモリは32ビット符号無しBINデータとして扱い、乗算結果は32ビット長に収まるものとする。

考え方は【例題①】と同様ですが、扱う型は32ビット符号無しBINデータを使用します。

メモ
32ビット符号無しBINデータの場合、サフィックスは.Dとなります。

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

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

例題②_タッチパネル

※タッチパネル上のデータメモリは32ビット長の数値を表示してあります。

スイッチ(R000)を押すと、データメモリDM0,DM1に定数50,000を転送します。

スイッチ(R001)を押すと、データメモリDM0,DM1とDM2,DM3を乗算した結果をDM4,DM5に転送します。(DM0,DM1×DM2,DM3=DM4,DM5)

スイッチ(R002)を押すと、リセット的な意味でデータメモリDM0,DM1に定数0を転送します。

ラダープログラム

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

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

実行条件をR000とする”32ビット符号無しBINデータ”のデータ転送(MOV.D)命令を用いてデータメモリDM0,DM1に定数50,000を転送します。(1行目)

実行条件をR001とする”32ビット符号無しBINデータ”の乗算(MUL.D)命令を用いて、DM0,DM1とDM2,DM3を乗算した結果をDM4,DM5に格納します。(2行目)

実行条件をR002とするデータ転送(MOV.D)命令を用いてDM0,DM1に定数0を転送します。(3行目)

4. おわりに

キーエンスKVシリーズにおける乗算(MUL)命令について解説しました。

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

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

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

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

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

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

コメントを残す

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