«前の日(12-19) 最新 次の日(12-21)» 追記

一往確認日記


2016年12月20日

_ Escalator - bit stack 初期化

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

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

今回はbit stackの初期化です。

パソコンとのやり取りの部分もありますが、省略します。

bit stackはLDから始まるブロックの状態やMPSなどで分岐する時に記憶するための領域です。

SD_DEVICE[ESC_SD_I_BSTACK]から4 word取っています。 ANBなどで最終的にすべてのANDを取ってtrue/falseを判定するので初期値としてオール1のFFFFを設定しています。 wordで処理しているのでブロックの最大レベルが16までとなります。

LDがあると今までの状態をbit0に入れて左にシフトします。

4word取っているのはMPSに出会うとword単位でshiftします。 MPSによる分岐が4レベルまで扱えることになります。

current_bit_valueが状態の初期値でtrueになります。

https://gyazo.com/f0258627c7be5b3843e39fbe882580cb

cycle_runningはラダー処理中であることを示しtrueになっています。

暫く触っていなかったのでbit stackが何をやっているのかすっかり忘れていました。 今後のためにもここに書き留めおいた方がいいですね。


2020年12月20日

_ PLCでmruby (4) ニーモニック変換に方針転換

mrubyをPLCで動かせないかな〜という企画です。

mrubyをPLCで動かすにはmrubyのVirtual Machineを実装すればできると思っていましたが、前回の出力をみるとmrubyのニーモニックからラダーのニーモニックに変換するのが手取り早い気がします。

ニーモニック変換器を作ることを当面の目標としましょう。

前回の出力を再掲します。

% mrbc --verbose a.rb
00001 NODE_SCOPE:
00001   local variables:
00001     a
00001   NODE_BEGIN:
00001     NODE_ASGN:
00001       lhs:
00001         NODE_LVAR a
00001       rhs:
00001         NODE_INT 1 base 10
irep 0x7f897b4059c0 nregs=3 nlocals=2 pools=0 syms=0 reps=0 iseq=8
local variable names:
  R1:a
file: a.rb
    1 000 OP_LOADI_1	R2		
    1 002 OP_MOVE	R1	R2		; R1:a
    1 005 OP_RETURN	R2		
    1 007 OP_STOP

これなら、ラダーで下の様な感じで作れれば置き換えができそうです。(ニーモニックは特定のPLCではなく雰囲気です)
ただ、クラスなど絡んでくるとそんなに簡単ではなく、難しいことは予想されます。

LD ON
@SET SCOPE
LD SCOPE
MOV #1, R2
MOV R2, R1
RST SCOPE

つづく


Amazon | Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm | キヤノン | パソコン・周辺機器 通販