«前の日(05-07) 最新 次の日(05-09)» 追記

一往確認日記


2017年05月08日

_ スウガクって、なんの役に立ちますか?: ヘタな字も方向オンチもなおる!数学は最強の問題解決ツール(杉原 厚吉)

なかなかダイアリーを書く時間が取れず前回からほぼ1ヶ月経ってしまいました。 今後も宜しくお願いします。

昨日から読み始めた本です。

4416616929

数学は好きな方ですが、限られたことにしか使っていないのでこんなところに使えるんだと面白く読んでます。

席順を決めるときに、この人とこの人は隣同士にできない、逆に隣にしなければならないというのをどう組んでいくかということなど様々な事柄で数学が生かせるということが書かれています。

適度なお湯の温度を作り出す方法とか、きちんと分量を量らない人には面倒で役立ちそうにないのですが、コーヒーを淹れるのにも分量をきちんと量っている人にはヒントになると思います。 自分は量るタイプなんです。

B004VC7VCS


2019年05月08日

_ シリンダーの例。 - PLCのRuby言語コントロールユニット(6)

PLCのソフトをラダーの代わりにRubyで書けたらという企画です。
今までの内容はこちらでご覧いただけます。

前回は簡単な入力がそのまま出力になったり、自己保持回路で試しました。

実際に試してみる。 - PLCのRuby言語コントロールユニット(5) - 一往確認日記(2019-04-29)

今回はシリンダー動作に関する回路で考えてみます。

前回同様に結果から

Rubyでも意図した様に動作させる事ができています。
後半に実際のタッチパネルでの使用を意識した配置で試しています。

Timerの置き換えからRubyらしい考え方 - PLCのRuby言語コントロールユニット(4) - 一往確認日記(2019-04-27)

でRubyで表現する場合に、シリンダーオブジェクトとして次の様に表現したらということを書いていました。

cs = CylinderSensor.new(x4, x5, 5)
m4 = cs.moved?
m5 = cs.returned?
m6 = cs.error?

今回はそれを実践したことになります。

最初にsetupでシリンダーを動作させるソレノイドとシリンダーセンサーのオブジェクトを生成しています。
SingleSolenoidとCylinderSensorクラスが肝となっています。
この中身については全く知る必要がなく使い方が分かっていれば良いです。

setup do |plc|
  sol = SingleSolenoid.new out:plc.dev.y0
  plc.add_device sol:sol
  cyl_sen = CylinderSensor.new solenoid:sol, moved_sensor:plc.dev.x2, org_sensor:plc.dev.x3, timeout:3.0
  plc.add_device cyl_sen:cyl_sen
end

plc.add_device sol:solで登録しているため以降はplc.solでソレノイドを扱う事ができる様になっています。

実際に制御する方ですが、plc.solの自己保持回路でx0でONさせてx1でOFFさせる様にしています。
センサーの状態を(4)で提案した様にメソッドで得られる様になっていて、m0〜m2に取り込んでいます。

sequence do |plc|
  plc.sol = (plc.x0 || plc.sol) && !plc.x1
  plc.m0 = plc.dev.cyl_sen.moved?
  plc.m1 = plc.dev.cyl_sen.returned?
  plc.m2 = plc.dev.cyl_sen.error?
end

こちらにもう少し詳しく説明しています。

thought_of_ladder_to_ruby/README_JA.md at master · ito-soft-design/thought_of_ladder_to_ruby · GitHub

今後は…

シリンダーが増えても下の様にどんどん登録していけるはずですし、

  plc.add_device sol0:SingleSolenoid.new(out:plc.dev.y0)
  plc.add_device sol1:SingleSolenoid.new(out:plc.dev.y1)
  plc.add_device sol2:SingleSolenoid.new(out:plc.dev.y2)
  plc.add_device sol3:SingleSolenoid.new(out:plc.dev.y3)

色んな役割をするクラスを追加して行けば良いはずです。
後々もっと深く考えてみます。