«前の日記(2017年01月20日) 最新 次の日記(2017年01月26日)» 編集

一往確認日記


2017年01月23日 [長年日記]

_ Escalator - 命令のデコード(6) - MPS MRD MPP

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

今回はMPS MRD MPPの部分です。

https://gyazo.com/143929a34f8e18fbfac5f311deaacb3e

MPS MRD MPPの何れかの場合に下のスクリプトが実行されます。

sftwl(TRUE, ESC_SD_SIZE_BSTACK, 1, SD_DEVICES[ESC_SD_I_BSTACK]);
IF current_bit_value THEN
	SD_DEVICES[ESC_SD_I_BSTACK] := HFFFF;
	ELSE
	SD_DEVICES[ESC_SD_I_BSTACK] := HFFFE;
END_IF;

MPS MRD MPPは右側に伸びる分岐の部分で、下図では赤丸の部分になります。 SD_DEVICES[ESC_SD_I_BSTACK]からbit stackのエリアが設けられていますが、__分岐した行毎に状態を管理したいため__ワード単位でPUSHしています。 OUTなどの終端に達するとPOPします。

https://gyazo.com/b942442ccec872496b06bf881c4e9dcc