「減算」命令とは、キーエンスKVシリーズにおける内部レジスタの値から指定した値を減算して、減算結果を内部レジスタに再度格納するラダープログラム命令です。
ラダープログラム上で、データメモリ等のワードデバイス値を減算する場合に使用する命令になります。
この記事では、キーエンスKVシリーズにおける減算命令の指令方法とラダープログラム例について解説します。
キーエンスKVシリーズにおける他の四則演算(加算・乗算・除算)命令については、この記事では対象としていません。(後日、別記事として解説します)
目次
1. 減算命令の指令方法
減算命令は、毎スキャン実行型と微分実行型(パルス実行型)に大別されます。
毎スキャン実行型とは、実行条件がONしている間、その命令を毎スキャン実行するものです。対して微分実行形(パルス実行型)とは、実行条件がOFF→ONになったときの1スキャンのみ実行するものです。
SUB:毎スキャン実行型の減算命令
毎スキャン実行型の減算命令は、扱うデバイスのデータ型によって、さらに6種類に分けられます。
以下が毎スキャン実行型の減算命令です。
- SUB(.U):16ビット符号無しBINデータ
- SUB.S:16ビット符号付きBINデータ
- SUB.D:32ビット符号無しBINデータ
- SUB.L:32ビット符号付きBINデータ
- SUB.F:単精度浮動小数点型実数データ
- SUB.DF:倍精度浮動小数点型実数データ
扱う「データ長」や「符号付きor無し」などはサフィックスと呼ばれる接尾語を命令文につけて指定します。※減算命令の命令文はSUBになります。
KV STUDIOで作成した各々の毎スキャン実行型の減算命令について解説します。
↓が16ビット符号無しBINデータの減算(SUB)命令です。
↓命令部分を拡大
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0から十進数の定数5を減算した結果をデータメモリDM10に格納します。
減算命令について理解するためには、両側のLDA命令とSTA命令の意味を理解して頂く必要があります。少し長くなりますが、まだ理解していない方は以下の解説をご覧ください。
そもそも減算命令とは、内部レジスタ – 指定した値 = 内部レジスタ の演算を行う命令でした。
減算する元(被減数)のデバイスは、一度内部レジスタに値を格納する必要があります。この内部レジスタにデータを格納する命令がロードA(LDA)命令です。↑のラダープログラムではデータメモリDM0の値を内部レジスタに格納しています。
指定した値とは、内部レジスタから減算する値(減数)のことで、↑のラダープログラムでは定数5を指定しています。(#5とは十進数の定数5のこと)
減算した結果は内部レジスタに格納されるので、内部レジスタ上からデータメモリ等のデバイスに値を引っ張ってくる必要があります。この内部レジスタのデータを指定したデバイスに格納する命令がストアA(STA)命令です。↑のラダープログラムでは内部レジスタの値をデータメモリDM10に格納しています。
↓が16ビット符号付きBINデータの減算(SUB.S)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0から十進数の定数-5を減算した結果をデータメモリDM10に格納します。
仮にデータメモリDM0の値が-7の場合「-7 – (-5) = -2」となり、データメモリDM10には-2が格納されます。
↓が32ビット符号無しBINデータの減算(SUB.D)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1から十進数の定数50000を減算した結果をデータメモリDM10,DM11に格納します。
↓が32ビット符号付きBINデータの減算(SUB.L)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1から十進数の定数-50000を減算した結果をデータメモリDM10,DM11に格納します。
↓が単精度浮動小数点型実数データの減算(SUB.F)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1から実数の定数1.234を減算した結果をデータメモリDM10,DM11に格納します。
↓が倍精度浮動小数点型実数データの減算(SUB.DF)命令です。
このラダープログラムは、実行条件である入力リレーR000がONしている間、データメモリDM0,DM1,DM2,DM3から実数の定数1.23456789を減算した結果をデータメモリDM10,DM11,DM12,DM13に格納します。
@SUB:微分実行型(パルス実行型)の減算命令
微分実行型(パルス実行型)の減算命令は、毎スキャン実行型と同様にサフィックスによって、さらに6種類に分けられます。
- @SUB(.U):16ビット符号無しBINデータ
- @SUB.S:16ビット符号付きBINデータ
- @SUB.D:32ビット符号無しBINデータ
- @SUB.L:32ビット符号付きBINデータ
- @SUB.F:単精度浮動小数点型実数データ
- @SUB.DF:倍精度浮動小数点型実数データ
命令の頭文字に@を付けることで、実行条件がOFF→ONになったときの1スキャンしか実行されない微分実行型(パルス実行型)となります。
KV STUDIOで作成した各々の微分実行型(パルス実行型)の減算命令を解説します。
↓が微分実行型(パルス実行型)の16ビット符号無しBINデータの減算(@SUB)命令です。
微分実行型(パルス実行型)の場合、命令文の左側に上向きの矢印が表示されます。
このラダープログラムは、実行条件である入力リレーR000がOFF→ONになった瞬間に、データメモリDM0から十進数の定数5を減算した結果をデータメモリDM10に格納します。
このように、微分実行型(パルス実行型)の場合は実行条件がOFF→ONになった瞬間の1スキャンしか命令が実行されません。
扱うデバイスのデータ型によるサフィックスの指定方法に関しては、毎スキャン実行型と同様です。
その他の微分実行型(パルス実行型)の減算命令は以下のようになります。
命令の解説は省略しますが、実行条件がOFF→ONになった瞬間に1スキャンだけ実行されるもので、その他は毎スキャン実行型と同じ機能と捉えて頂いて問題ありません。
↓が16ビット符号付きBINデータの減算(@SUB.S)命令です。
↓が32ビット符号無しBINデータの減算(@SUB.D)命令です。
↓が32ビット符号付きBINデータの減算(@SUB.L)命令です。
↓が単精度浮動小数点型実数データの減算(@SUB.F)命令です。
↓が倍精度浮動小数点型実数データの減算(@SUB.DF)命令です。
KV STUDIOにおける命令挿入の方法
減算命令をKV STUDIOの回路上に挿入するには「命令文 減算する値」と回路上で入力します。
例1先ほどの毎スキャン実行型の16ビット符号無しBINデータの減算(SUB)命令を挿入する場合、KV STUDIOの回路上でSUB #5と入力してEnterキーを押します。
※ついでにロードA(LDA)命令とストアA(STA)命令も挿入しています。
例2先ほどの微分実行型(パルス実行型)の32ビット符号付きBINデータの減算(@SUB.L)命令を挿入する場合、KV STUDIOの回路上で@SUB.L -50000と入力してEnterキーを押します。
※こちらもロードA(LDA)命令とストアA(STA)命令も挿入しています。
2.【例題①】16ビット符号付きBINデータの減算値を求める
下記仕様の減算値を求めるラダープログラムについて解説します。
入力リレーR001がONすると、データメモリDM1に定数-3を転送する。
入力リレーR002がONすると、データメモリDM0からDM1を減算した結果をDM2に転送する。
入力リレーR007がONすると、データメモリDM0とDM1に定数0を転送する。
入力リレーが複数同時にONすることは考慮しなくてよい。
入力リレーに各定数を転送するには、データ転送(MOV)命令を使用します。
キーエンスKVシリーズにおけるデータ転送(MOV)命令については以下のページで解説しておりますので、宜しければご覧ください。
【キーエンスKV】データ転送(MOV)命令の指令方法とラダープログラム例タイムチャート
タイムチャートは以下のようになります。
入力リレーR000がONすると、データメモリDM0に定数-5を転送します。入力リレーR001がONすると、データメモリDM1に定数-3を転送します。
入力リレーR002がONすると、データメモリDM0からDM1を減算した結果をDM2に転送します。
入力リレーR007がONすると、データメモリDM0とDM1に定数0を転送します。
ラダープログラム
ラダープログラムは以下のようになります。
実行条件をR000とする16ビット符号付きBINデータのデータ転送(MOV.S)命令を用いてデータメモリDM0に定数-5を転送します。
同様に、実行条件をR001としてデータメモリDM1に定数-3を転送します。
実行条件をR002とする16ビット符号付きBINデータの減算(SUB.S)命令を用いてデータメモリDM0からDM1を減算した結果をDM2に転送します。
実行条件をR007としてデータメモリDM0とDM1に定数0を転送します。(リセット的な役割)
シミュレータの動作
シミュレータを実行している様子は以下のようになります。
各デバイスは、黄緑色に塗りつぶされるとONになっている状態です。各データメモリの値はデータメモリの下部に表示されます。
入力リレーR000がONすると、データメモリDM0に定数-5を転送します。入力リレーR001がONすると、データメモリDM1に定数-3を転送します。
入力リレーR002がONすると、データメモリDM0からDM1を減算した結果をDM2に転送します。※今回は「-5 – (-3) = -2」となります。
入力リレーR007がONすると、データメモリDM0とDM1に定数0を転送します。
3.【例題②】32ビット符号無しBINデータの減算値を求める
下記仕様の減算値を求めるラダープログラムについて解説します。
入力リレーR001がONすると、データメモリDM2,DM3に定数30,000を転送する。
入力リレーR002がONすると、データメモリDM0,DM1からDM2,DM3を減算した結果をDM4,DM5に転送する。
入力リレーR007がONすると、データメモリDM0~DM3に定数0を転送する。
入力リレーが複数同時にONすることは考慮しなくてよい。
考え方は【例題①】と同様ですが、扱う型は32ビット符号無しBINデータを使用します。
ラダープログラム
ラダープログラムは以下のようになります。
実行条件をR000とする32ビット符号無しBINデータのデータ転送(MOV.D)命令を用いてデータメモリDM0,DM1に定数90,000を転送します。
同様に、実行条件をR001としてデータメモリDM2,DM3に定数30,000を転送します。
実行条件をR002とする32ビット符号無しBINデータの減算(SUB.D)命令を用いてデータメモリDM0,DM1からDM2,DM3を減算した結果をDM4,DM5に転送します。
実行条件をR007としてデータメモリDM0~DM3に定数0を転送します。(リセット的な役割)
シミュレータの動作
シミュレータを実行している様子は以下のようになります。
各デバイスは、黄緑色に塗りつぶされるとONになっている状態です。各データメモリの値はデータメモリの下部に表示されます。
入力リレーR000がONすると、データメモリDM0,DM1に定数90,000を転送します。入力リレーR001がONすると、データメモリDM2,DM3に定数30,000を転送します。
入力リレーR002がONすると、データメモリDM0,DM1からDM2,DM3を減算した結果をDM4,DM5に転送します。※今回は「90,000 – 30,000 = 60,000」となります。
入力リレーR007がONすると、データメモリDM0~DM3に定数0を転送します。
4. おわりに
キーエンスKVシリーズにおける減算(SUB)命令について解説しました。
以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。
ただし、ラダープログラムやPLCといった電気・制御設計は参考書やWebサイトのみでの学習には必ずどこかで限界が来ます。
各メーカが販売しているPLCやプログラム作成のアプリケーションを揃えるには安くても十万円以上の大きな費用が掛かり、独学は現実的ではありません。
ラダープログラムの一番現実的な学習方法は「実務で経験を積む」ことです。電気・制御設計者はこれから更に必要な人材になり続けますので、思い切って転職する選択肢もあります。
『doda』といった大手求人(転職)サイトには電気・制御設計の求人が数多く紹介されています。※登録は無料です。
「スキルこそ今後のキャリアを安定させる最も大切な材料」と考える私にとって電気・制御設計はとても良い職業だと思います。キャリアの参考になれば幸いです。