目次次へ番外編 Chap.3 制限事項の回避方法

長らく番外編をお休みしていました。
今回から番外編を再開します。
今回は、この番外編で作った命令語インタプリタの制限事項の回避方法について説明します。

その前に、訂正を1つしておきます。
番外編のChap.2で、命令語インタプリタの仕様を「空白行も命令語インタプリタは無視します」と書きましたが、誤りでした。
命令語プログラムに空白行を入れると、命令語インタプリタは終了してしまいますので、空白行は入れないようにしてください。

3.1 制限事項の回避方法−回路ブロックの結合
以前述べたように、番外編で作った命令語インタプリタは、最小仕様の命令語インタプリタです。
このため、ラダー図のパターンの制限が厳しくなっています。
一番問題となるのは、回路ブロックのAND/OR結合ができないという制限です。
この制限のため、回路ブロックのAND/OR結合があるラダー図は、番外編で作った命令語インタプリタを使う限り、複数の回路に分けて記述しなければなりません。
一例を示します。
図3.1のラダー図は、2つの回路ブロックをOR結合した回路です。
すなわち、M0とM1がAND結合された回路ブロック(赤枠部分)と、M2とM3がAND結合された回路ブロック(青枠部分)が、OR結合されています。

図3.1 ラダー図の例(2つの回路ブロックのOR結合)

一般のPLCでは、2つの回路ブロックをOR結合する命令語があるため、このラダー図を命令語に変換可能です。
下の命令語は、仮想のPLCでこのラダー図を命令語に変換した例です。
2つの回路ブロックをORSTACK命令でOR結合しています。

LD M000
ANDNOT M001
LDNOT M002
AND M003
ORSTACK
OUT M080

これに対して、番外編の命令語インタプリタは、命令セット(Chap.1の表1.1)を見てわかるように、「2つの回路ブロックをOR結合する命令」(ここでいうORSTACK命令)をサポートしていません。
このため、番外編の命令語インタプリタで図3.1のラダー図を実行させるためには、図3.2のようにラダー図を回路ブロック毎に1つの回路に分けて記述し、そのコイル(M90とM91)の接点をOR結合しなければなりません。

図3.2 図3.1と等価なラダー図(複数の回路に分けて記述)

このラダー図であれば、番外編の命令語インタプリタの命令セットのみで記述できます。
仮に、さっきの仮想のPLCのニーモニックであれば次のような命令語になります。

LD M000
ANDNOT M001
OUT M090

LDNOT M002
AND M003
OUT M091

LD M090
OR M091
OUT M080

これを番外編の命令語インタプリタの制約に合わせると次のようになります。

(制約事項)
・オペコード(命令)とオペランド(I/O番号)は2行に分けて記述
・I/O種別記号Mは付けない
・空白行は削除

LD
0
ANDNOT
1
OUT
90
LDNOT
2
AND
3
OUT
91
LD
90
OR
91
OUT
80

リストが見にくいですが、インタプリタを手抜きしているため仕方ありません。
これをテキストファイルとして保存したあと、命令語インタプリタで実行して、動作を確認しているのが図3.3です。

図3.3 命令語インタプリタで動作を確認中

なお、「回路ブロックのOR結合」を例に説明しましたが、番外編の命令語インタプリタは「回路ブロックのAND結合」もサポートしていないので、同様のことがいえます。
たとえは、図3.4のラダー図は、番外編の命令語インタプリタでは書き換える必要があります。
どのように書き換えたらいいかは、考えてください。

図3.4 命令語インタプリタでは書き換える必要があるラダー図の例
(2つの回路ブロックのAND結合)

3.2 その他の制限事項について
一般のPLCでは、最低でもタイマ・カウンタ命令と母線を制御する命令があります。
しかし、番外編の命令語インタプリタでは、これらの命令はありません。
タイマ・カウンタ命令が無いのはどうしようもありませんが、母線を制御する命令が無くても等価なラダー図が作成可能です。

目次次へ