GX Works2で2つのレジスタの四則演算を行うファンクションブロックを作成したので公開します。
アイキャッチ画像に「作:電気設計人」とありますが、許可が必要な訳ではありませんので、ご自由に使用してください。(作ったぜアピールしたいだけです。)
ファンクションブロックの作り方と使い方は以下の記事で解説していますので、宜しければそちらもご覧ください。
【FB】ファンクションブロックの作り方(フリッカー回路) 【FB】ファンクションブロックの使い方(フリッカー回路)この記事中のラダープログラムはFXCPU用の作成したものになります。
目次
1. 作成するファンクションブロックの仕様
四則演算のファンクションブロックを作成する前に、完成したらどのようなことができるか明確にします。
今回は以下のような四則演算ができるものを作成します。
D20:加算結果
D21:減算結果
D22(D23):乗算結果※
D24:除算結果
D25:剰余結果
※乗算結果はD22を下位とする2ワード(32ビット)長として扱う。
スイッチ(X1)を押すと、四則演算結果はすべて”0″になる。
通常のラダープログラムは以下のようになります。
除算指令(DIV)では、除数のD11が0の場合は除算を行わないように接点形比較命令を使用しています。
イメージしやすいように簡単なGOTを作成しました。動作は以下のようになります。
三菱シーケンサFXシリーズにおける四則演算の指令方法は以下の記事で解説しております。宜しければこちらもご覧ください。
【三菱FXシリーズ】加算(ADD)命令の指令方法とラダープログラム例 【三菱FXシリーズ】減算(SUB)命令の指令方法とラダープログラム例 【三菱FXシリーズ】乗算(MUL)命令の指令方法とラダープログラム例 【三菱FXシリーズ】除算(DIV)命令の指令方法とラダープログラム例また、接点形比較命令の指令方法は以下の記事で解説しています。宜しければそちらもご覧ください。
【三菱FXシリーズ】接点形比較命令の指令方法とラダープログラム例X1がONしたとき、D20~D25の6点を一括で0にするために、多点転送命令(FMOV)を使用しています。
【三菱FXシリーズ】多点転送(FMOV)命令の指令方法とラダープログラム例2. デバイスをラベルに置き換え
上記のラダープログラムのデバイスをファンクションブロック内で使用するローカルラベルに置き換えます。
デバイス | ラベル(置き換え後) |
X0 | i_Set |
X1 | i_Reset |
D10 | i_Num1 |
D11 | i_Num2 |
D20 | o_Add |
D21 | o_Sub |
D22(D23) | o_Mul |
D24(D25) | o_Div |
このラベルを最初の仕様のデバイスに置き換えると、以下のような仕様になります。
o_Add:加算結果
o_Sub:減算結果
o_Mul:乗算結果※1
o_Div:除算結果※2
※1)乗算結果はダブルワード(32ビット)長になります。
※2)除算結果はダブルワード(32ビット)長になり、上位16ビットが商・下位16ビットが剰余となります。
スイッチ(X1)を押すと、四則演算結果はすべて”0″になる。
このファンクションブロックを作成することで、ラダープログラム内で何回でも上記の四則演算処理を使用することができます。
3. 作成した四則演算のファンクションブロック
それでは四則演算のファンクションブロックを作成します。
ファンクションブロックの名前は「Arithmetic_operations」とします。
Arithmetic_operationsのファンクションブロック内のラダープログラムは以下のようになります。
<ファンクションブロック内部>
ラベルではFMOV指令は使用できませんでしたので、別々で定数”0″を転送します。o_Mulとo_DivはダブルワードなのでDMOV指令を使用します。
このファンクションブロック「Arithmetic_operations」をラダープログラム上で使用すると以下のようになります。
<Arithmetic_operations使用例>
このラダープログラムを使用すると、以下のような仕様になります。
D20:加算結果
D21:減算結果
D22(D23):乗算結果※
D24:除算結果
D25:剰余結果
※乗算結果はD22を下位とする2ワード(32ビット)長として扱う。
スイッチ(X1)を押すと、四則演算結果はすべて”0″になる。
これは最初の仕様と同じものです。ラダープログラム上でファンクションブロック「Arithmetic_operations」は別の場所で別のアドレスで何回でも使用することができます。