銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

ほぼ初めてのPLCで感じたラダーの勘所

f:id:takamints:20150912183433j:plain
photo credit: Ladder via photopin (license)

この夏、ラダーが熱かった。7月半ばに、初めて本格的なPLC案件を担当してから、もう2ヶ月か・・・。

本来パソコン側のソフトウェア担当です。PLCと通信して機器設定情報を編集したり、生産実績を収集するよなソフトウェアの経験こそありますが、PLCのソフト(ラダー)の経験はごくわずか。それも組み込みシステムのデバッグ用に接点信号を一定周期でON/OFFするような簡単なものしか作ったことがありません。まあ、ほとんど素人ですね。

7月当初の案件は予定通りのアサインでした。 慣れない作業ですが、盆明けにはなんとか完了。 しかし、その間、隣でくすぶりつづけていた案件が(匂いはしてたw)、ニッチもサッチも行かなくなってドッカンドッカン大炎上。 急遽、消火活動のため、ネコの手よりは役に立つだろう…とアサインされて、半径30km四方のイッサイガッサイ巻き込んで、ワッショイワッショイの3週間。なんとか鎮火した次第です。

てなことで、今回、本気でPLCに取り組んで経験値が少し上がりましたけど、そのうち忘れてしまいそうだし、もったいないから自分のためにも書き残しておこうと思います。


ところで「ラダー図」知ってますか?

プログラマブルコントローラ原理と設計法 (設計技術シリーズ)
高来一彦 張紅 萩原光則 芦田政之 渡辺康雄 半田執
科学情報出版
売り上げランキング: 87,343

いや、ラマーズじゃなくて「ラダー図」です。

「ラダー=ハシゴ」ですね。回路図がハシゴのように見えるからです。

こんな感じ↓
f:id:takamints:20150913202334p:plain

「ラダー回路」と言ったりもしますね。 本質的にはリレー回路を指すのかもしれませんが、ここでは、PLCにプログラムする回路(ソフトウェア)を指しています。

以下、本題に入る前に、ラダーに関する基本事項を箇条書きにしておきます。詳細は調べてみてください。

ラダーの基本

  • リレー - 電磁石でスイッチをON/OFFする電気部品。PLCの中の仮想的なリレーを意味することもあります。また、それを補助リレーとも言います。
  • リレー回路 - 複数のリレーとPLC外部と入出力する信号を目的に応じて接続して、全体で自動的な制御を行うようにする論理回路です。
  • PLC - 「プログラマブル・ロジック・コントローラー(Programmable Logic Controller)」の略。リレー回路をコンピューターでシミュレートしているような機器です。現物は、だいたい小さめのタッパーからお弁当箱くらいまでの大きさの箱です。電気信号の入出力機能を備えた制御用のコンピュータです。
  • コイル - リレーとほぼ同じ意味で使います。通電しているときと通電していないときで、接点の状態が変わります。
  • 接点 - リレーでON/OFFされるスイッチみたいなものです。つながっているか切断しているかという2つの状態があります。接点を1つ以上つないで論理回路を構成します。
  • 論理回路 - 真か偽かを入力して真か偽かを出力する回路ですね。A接点、B接点、論理積(AND)、論理和(OR)を組み合わせて構成します。
  • A接点 - コイルに通電するとつながる接点。
  • B接点 - コイルに通電すると切断される接点。
  • 論理積(AND) - 接点を直列につなげたものです。電池と2つのスイッチと豆電球をつないで、両方のスイッチを押して始めて豆電球が点灯するような回路。
  • 論理和(OR)- 接点を並列につなげたもの。電池と2つのスイッチと豆電球をつないで、どちらか片方を押せば点灯するような回路。
  • 自己保持 - コイルのA接点が、それ自身の条件にORで入っていると、入力接点が一瞬ONになっただけで、その後の入力状態に関わらず、コイルのA接点がつながっている状態を保つ状態。

↓↓↓さてさて、ここからが本題です↓↓↓


「逆よ、全く逆よ。見えてくるわよ、本当のラダーが」もしくは「今考えている事の逆が正解だ」あるいは「右から左へ受け流す」― 解析やデバッグは、出力側から逆向きに追いかける

MOOMIN ムーミン カオ マグカップ ミイ MM622-11
山加商店
売り上げランキング: 10,979

ラダーには、左側に複数の接点、右側に出力コイルが記述されます。接点がつながったら、コイルに通電されるのです。

ところが、これを通常の文書と同じように、左から右へ順に見ても、いまいち理解が進まないと思います。

逆に、コイルの意味を理解した上で「これが出力される条件とはなんなのだ?」という気持ちで、左側の論理回路を見れば、すんなり理解できると思います。

たとえば、自動販売機でコーヒーを買うときの動作は、

「お金を入れて、このボタンを押せば、このコーヒーが出てきます」

ではなく、

「このコーヒーが出てくるのは、このボタンを押したときだな」と。さらに「このボタンを押せるようになるのは、お金を入れた後で、どのボタンも押されていないときなんだな」

と、読み替えるような感じです。

「直接操作は最後の手段。おいらはここで自己保持る」(安易にコイルをセット・リセットしないで出来れば自己保持しましょうね)

PLCでは、コイルへの出力(OUT)命令とは別に、SETやRSTといったコイルの状態を直接指定する命令があります。 これはそのコイルの自己保持と、その解除に相当する命令です。

二重コイル(複数回、同じコイルに対するOUT命令がある状態)はご法度ですが、SETとRSTはいくらでも好きなだけ書けます。 しかし、広い範囲に渡って安易にこれらを使用すると、どこで何が行われているのかわかりにくくなってしまいます。

また、SETとRSTは、処理内容がその順序に依存してしまい、ややこしいことになりやすい。 ラダーは「回路」なので、基本的には順序に関わらないのですが、SET/RSTの使用で、この前提が崩れるからです。

自己保持の為に補助リレーを追加する必要があっても、できる限りOUT命令で構成するほうが望ましいと思います。 その箇所だけでコイルの状態が替わり、全てが、そこに記述されているので、理解しやすく、デバッグも楽になるはず。

「ラダーは開発室で動いているんじゃあない実機で動いているんだっ」(四の五の言わずにモニターする)

デバッグ時など、机上であれこれ考えるより、実際にラダーを動かして接点の状態をモニターするのが一番です。PC持って実機の前へ陣取りましょう。

思ったとおりの出力が得られていないなら、左の論理回路が想定通りになっていないはず。

論理回路が間違っていれば修正しますが、接点の状態が想定と違うなら、その接点の出力部分をモニターして、繰り返しです。

自己保持回路では、自己保持される時に確認する必要があるかもしれません。

このようにタイミングが限られていたり、SET/RSTで状態が変化している場合は、確認用のロジックを追加するといった、ひと工夫が必要かもしれません。

「もう無茶苦茶でござりまするがな(泣」(手動マージで疲労困憊。PLCにはVCSの概念が丸ごと無い)

無茶苦茶でござりまするがな
クーペ
いそっぷ社
売り上げランキング: 1,921,406

今回の消火活動で一番困ったのがこの問題です(未解決)。

この炎上案件、当初担当していた業者さんが、無茶苦茶なラダーを残して納品日を前に逃げちゃったので、複数人でラダーを修正しないと間に合わないという状況でした。

ところがここで、まさかの手動マージ。ラダーのプログラムがバイナリーファイルなんですよ。コンフリクトしたら終わりですから、もう仕方が無いです。

どうやらこのPLCの世界では、バージョンコントロールシステムという概念が無いようです。

複数の人が同時に編集作業を行うのは想定外。必要なら後で慎重に手マージするしかないという風潮(?)でした。

ちなみに「マージ」や「ブランチ」といったVCS語が通じないだけでなく、作業手順的なセオリーとして、コミットをなるべく小さい単位で刻んだり、他の作業者とコンフリクトが発生しにくいように声をかけるといったこともあまり理解されていないようでした。担当者の経験年数によるものかも知れませんが。

普段Gitでなれている私たちにとってはいろんな面で衝撃でした。なので、ラダー用のVCSがあれば、PLCの開発風景がドラスティックに変わる気もします。 というか、PLCプロジェクトの統合環境がテキストファイルを吐いてくれたら全て解決するのですが・・・。

f:id:takamints:20150912183031j:plain
photo credit: Dezomeshiki via photopin (license)