ループ処理、サブルーチン処理のやり方とデバッグ方法を紹介します。
ループ処理について
ループ処理は、同じようなプログラム記述で繰り返し処理する部分を簡略化することです。FOR-NEXTでの処理となります。
まずは、よく使うインデックスレジスタについて説明します。
Z0-15の特殊レジスタをインデックスレジスタと呼びます。
例えば M1200Z0でZ0が0の場合、参照先はM1200ですが、Z0がK20のときは、M1220が参照先となります。
これは、データレジスタでも有効となります。
D200Z1でZ1がK100の場合、D300を参照するとこになります。
FOR-NEXTの使い方ですが、FOR(Kn回数)-NEXTは一体となります。
どちらかがないとエラーになります。使い方の基本形サンプルは下記の通りとなります。
これを応用すると
複数の別のアドレスへの転送も可能ですので、使い方は幅が広がります。
同様の処理がたくさんある場合は、ステップ数の大幅な削減とプログラム作成時間も削減できます。
サブルーチン処理について
サブルーチン処理とは、FEND処理以降で読出ししたときだけ使う処理で、特定の固定処理をする場合や、演算処理が必要な時だけの読出しで使います。
部品の共通化が可能となりますね。
言語系プログラムでもよくつかわれる手法ですが、PLCプログラムでも活用するとプログラムが構造化となり、再利用性が高く、サブルーチン処理が完成度高ければ、生産性も向上します。
例:CALLで読出しする場合、引数も割り当てできます。FX、FY(ビット)FD(ワード)として使えますので、複数指定して演算も可能です。
FOR-NEXTとCALLを組み合わせると構造化プログラムとして使うことができます。
ECALLで宣言すると別のプログラムの記述でも読出しできます。
機能、演算を標準化すれば、呼び出しするだけでいいことになります。
デバッグ方法
便利なデバッグ方法をちょっと説明します。
まずは、デバッグしたい場所を選択
シミュレータを起動して、ブレーク実行します。
ブレークした状態でデバイスモニタしてデバッグします。
まとめ
気を付けてほしいのは、インデックスだらけのプログラムです。
全部のデバイスにインデックスがついているので、デバッグしきれなくなります。
このようなことをしたい場合は、ローカルデバイスを使うことをお勧めします。
FOR-NEXTとCALLが使いこなせれば、PLCプログラム上級者ですね。
コメント