三菱シーケンサでのサブルーチンとCALL命令の使い方

シーケンサ

三菱シーケンサでのサブルーチンとCALL命令の使い方

きちんと書けたら、いくらでも使いまわせるし、コードもすっきりするし
何より、一度のデバッグで済んでしまう。

こんな便利なもの、使わないのはもったいない

どうも!ずぶ です。今回は 三菱シーケンサでのサブルーチンとCALL命令の使い方

※GX simulator2を使用しています
シーケンサでシミュレータの使い方

サブルーチンの基本構成

プログラムで必要なのは

[ CALL ]
[ FEND ]
[ P1 ]
[ RET ]

この 4点セット!
基本配置はこのようになります

 

 

で、注意書きを書き込んでみます

 

FEND で本流を終わらせて、本流の外側に P1 のコードを書き込む
CALLP1 を呼び出して、仕事が終わったら RET で元来た場所へ戻してあげる

たったこれだけです

 

必要なのは、4つ

[ CALL ]
[ FEND ]
[ P1 ]
[ RET ]

 

既存のプログラムをサブルーチン化しよう

では、実際のプログラムをサブルーチン化してみましょう

 

対応する画面は、こんなの

アナログ入力の使い方 で紹介したプログラムです
これをサブルーチン化してみましょう

 

 

手順1.忘れないうちに、4点セットを書き込む

抜けがあるとエラーに掛かるので、最初にセットを書いておくと安心ですね

CALL はメインプログラムの中なので、FEND 以下を忘れないように、全て書き出しておきます

 

手順2.元プログラムを、壊さないように丸ごとコピー

 

先ほどのダミーの箇所に、バサッと貼り付けちゃいましょう

 

 

手順3.元のコードを CALL に変換

 

はい! すっきりしました~

って、ただ追いやっただけですね(笑)

 

 

 

けれど、動作ルーチンの中にデータ絡みのコードが入ってくると、読みにくくなる場合もあるので、どっかに押しやってすっきりさせるっていう使い方もありですね。

邪魔なプログラムを追いやるのもあり(笑)

 

サブルーチンを構造化しよう

サブルーチン化に成功したので、今度はそれを構造化してみましょう

構造化ってのは、
使いまわせるツールを作る事です。
それがブラックボックスでも一向に構わない。
異論もあるかもしれませんが、ここではそんなニュアンスで捉えて下さい

使いまわすに当たって、サブルーチン内の固定値が邪魔 ですね。
こいつがいると、ずっと同じ事をやるだけのプログラムになっちゃいます。
ここでは、D100、D20、D30 が固定値ですね。

まずはこれらを、受皿である D50、D51、D52 に置き換えてみましょう。

 

ただ、置き換えだけだと、D50 達は空っぽのままなので、
[CALL] の前後で 代入 しておきます

 

さっそく、動作テストしてみましょう。

数値が入ってきましたね。

 

 

本当に使いまわせるのか、CH2 を書き足してみます

 

固定値の入っているアドレスだけを変更 して、後は使いまわし です

 

では、動作テスト

 

良いですね。

同じサブルーチンを使用して、別々の計算結果が返ってきました

サイクリックの最後に処理された訳ではなく、その都度処理されている事が分かりますね。

 

 

 

引数を使ってみよう

※FX系は引数対応していないようです。

 

構造化されて随分勝手がよくなりましたね
ですが、プログラムがゴチャゴチャしていて、何だかイマイチです。

 

そこで、CALL のマニュアルを見てみましょう。

 

どうやら、引数が使える ようです。
FDに転送 とか書いてあるので、サブルーチン内で使ってみます。

ついでに、CH3、4も併記します

 

 

なんだか、凄くスッキリしてきたじゃないですか!

 

では、動作テスト

 

お~全て想定通りの数値が返ってきていますね。

 

で、思い返してみて下さい。
webだと、プログラムをバッサリ入れたので、感じにくいですが、
実際に CH3、CH4 を作る時には、もう P10 には目もくれていなかったでしょ?

 

それこそが、構造化の本質 ですね

 

慣れるまでは、メインルーチンから上手く切り離せなかったり、使いまわしにくいプログラムが出来上がったりするでしょうが、頑張ってものにしちゃいましょう。

 

サブルーチン化したった!って言ってやりましょうよ

 

あわせて読みたい

シーケンサのCALL命令の種類と違いについて

シーケンサプログラムのスキャン順序

K4X000(応用命令)の使い方

三菱シーケンサのZ(インデックスレジスタ)の使い方

シーケンサでのインスタンスについて