三菱シーケンサでのサブルーチンとCALL命令の使い方
きちんと書けたら、いくらでも使いまわせるし、コードもすっきりするし
何より、一度のデバッグで済んでしまう。
こんな便利なもの、使わないのはもったいない
どうも!ずぶ です。今回は 三菱シーケンサでのサブルーチンとCALL命令の使い方
※GX simulator2を使用しています
シーケンサでシミュレータの使い方
サブルーチンの基本構成
プログラムで必要なのは
[ CALL ]
[ FEND ]
[ P1 ]
[ RET ]
この 4点セット!
基本配置はこのようになります
で、注意書きを書き込んでみます
FEND で本流を終わらせて、本流の外側に P1 のコードを書き込む
CALL で P1 を呼び出して、仕事が終わったら RET で元来た場所へ戻してあげる
たったこれだけです
[ 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 には目もくれていなかったでしょ?
それこそが、構造化の本質 ですね
慣れるまでは、メインルーチンから上手く切り離せなかったり、使いまわしにくいプログラムが出来上がったりするでしょうが、頑張ってものにしちゃいましょう。
サブルーチン化したった!って言ってやりましょうよ
あわせて読みたい
最近のコメント