PLCをうたったサイトなのでやはり使える情報(?)を発信しないと、、
と思ったので記事にしたいと思います。
※あまりに詳細すぎると守秘義務的なモノに引っかかりそうな気もしますが、(すでに倒産した)以前の会社の話です(キリッ)。何か問題でも?とでも言っておけばOKですね。
入力信号の処理
入力信号(X)をそのままダイレクトに使うパターンもないわけではありませんがタイマで受けておくのが常套手段です。タイマを使わなくても内部コイル(三菱でいうMとかBとか)に受けておくのがベターです。
このように入力信号を別に受けておくのにはいくつか理由があります。
センサの種類によっては一瞬だけONする/OFFするといった反応をする場合もあるためタイマを使って入力の安定をみる(チャタリング防止の)ためです。
チャタリングはないだろうと思いながらも、念のため/おまじない的にタイマを使う場合も多いです。(後から変わるかもしれない、というのがあれば最初からタイマにしておくほうがベターと言えます)
また半導体製造装置は電気設計とPLCソフト設計を別の人・部署で対応することも多いので入力信号のアドレスを予想外のタイミングで変更されることがあり得ます。多くは装置改良・リニューアルのときに設計見直しと合わせて変更されますが、まれに装置立上げ中に何らかの理由(多くはハード的なもので場合によってユニットの設置場所にすき間がない、とかもありえる)で変わることもあります。
入力信号(X)をラダー上で直接使っている場合、作成途中であればプロジェクト全体で置換すれば問題はないですが既に実機で動いているラダーを書き換える場合は単純にいかないこともあります。(最悪は使っている接点数分だけ書換が必要なことも。。)
後から変更しやすいように入力信号(Yの出力信号も考え方は同様)は1~2回しか使わないようにしておくのがポイントです。
他にソフトの内部処理的に都合の良い並べ方に強制する目的のこともあります。覚えやすい並びであることも意外と重要ですし、ループ処理(FOR~NEXT)を使うようなことがあれば規則的に並んでいないと面倒なことだらけになってしまうので。。
手動用の回路
手動・マニュアル・単動作などと呼ばれるもので、基本的には機器の1つの動作毎にそれぞれ作ります。例えばバルブやシリンダの動作、モータの必要ポジション(Up/Mid/Downのように3位置が必要な制御なら3つ別々に回路作成)、ロボットの1アクションなどのように分けて回路を作ります。
この回路が一番基本となる部分です。
作り方次第で良くも悪くもなります。
ある程度経験を積むと、ここの作り方・分け方・考え方で
作成者のおおよそのレベルが分かる場合が多い。
(≒見る人が見ればクソなラダーかどうかすぐ分かる)
まあ他人が作ったプログラムは意図が理解できない場合が
多いため大半のものはクソ認定される運命だが。。
分け方・考え方
さっそく回路の作り方ですが、、
・インターロック条件
・ON、Startコマンド
・OFF、Stopコマンド
・自己保持回路(≒出力、実行)
のように分けて考えるのがベターです。(モータ等の回路だと自己保持回路+αが必要になる)
インターロック
インターロック(Interlock)=動作しても良い条件(の集合)です。インターロックには動作を始めるときだけ監視する初期インターロックと動作中でも常に監視する常時インターロックの2種類があります。
ラダーで記述する場合、初期インターロックと常時インターロックを別のコイルにすることもあれば1つコイルだけにしておき初期インターロックには自己保持のORを付けることもあります。下図のM10は後者側の例。
(どちらを採用するかは単に好みか企業・組織の考え方次第)
コマンド
コマンドは動作させたい(もしくは止めたい)トリガそのものです。手動モードの場合は通常タッチパネルやパソコンから該当するコマンドを出す仕組みになります。
・コマンドを出す側がビット信号ON/OFF処理
・コマンドを出す側がビット信号ONでPLC側でOFF処理
・コマンドを出す側がコマンド番号(ワードデバイス)を指定しPLC側でデコード(ワード→ビット変換)
などコマンド1つとってもいくつかのやり方があり、どれが正解/不正解とか無いのでどのような取り決めをするかの問題です。
それとコマンド部分の記述ですがあまりOR回路にしないことをオススメします。(例のようにB接点のANDをつなげて全体をNOT=A接点のOR回路と同じ論理)
最終的にコマンドが3~4つ程度なら素直にOR回路でも問題ないのですがそれを超えるとどんどん縦長となり、ものすごく読みにくくなってしまうからです。
※コマンドは手動モード以外にも以下の記事にあるような連続処理からのコマンドがあり、処理内容によってコマンドが増えていくイメージです。なので手動回路がしっかり作れていれば連続処理からのコマンドを追加していくだけでOKとなります。
出力(自己保持)
出力はON/StartコマンドのタイミングでインターロックがOKなら出力することになります。(OFF/Stopコマンドが来るかインターロックNGになるまで出力継続となる)
※ON/StartコマンドとOFF/Stopコマンドは同時ONしないようにするのが理想ですが、通常は安全方向を考慮してOFF/Stopコマンド側を優先します。
※上図のValve1やValve2の回路はシングルソレノイドの例です。ダブルソレノイドの場合は下図のようになります。
ダブルソレノイドの場合はOpen or Close、Up or Downのように制御としてはどちらかにしかしない、という視点が必要となります。上図の例ではコマンド(M22, M23)にインターロックを入れて出力が確定するときだけコマンドが出る作りにしています。(例だと少し抜けてますが、、2つの出力が同時に出ることがないように工夫する必要もあります)
良くない例
ちなみに、ですが。
よろしくない回路構成は以下のような感じになります。
最初に例を出したValve1の手動回路の改悪版という表現が妥当、、かな?
(パッと見は回路も少なくなっていて良いんじゃね?と思う人もいるかもしれませんが。。)
独断と偏見。
「インターロックの条件は分かりやすく書いて下さい」
という安易な指示のもとにラダー回路が作られると
こーゆー回路が量産される気がする。。。
先に出した例と比較すればすぐ分かりますが、コマンド(ON/OFF)と出力の自己保持が一体化した回路となっています。コレは上図例だと接点が少ないから理解できるだけの話であって実際の回路ではコマンドが増えていきますので、このままだと回路の折り返しが発生したり無駄に縦長回路になったりして読みにくくなっていく可能性が高いです。出力しているかどうかもYを参照しなければならずYのアドレスが変わったら面倒なことになります。
20~30年前の容量制約が厳しい頃のPLCならばデバイス節約のためにアリと思いますが最近の高機能・大容量化したPLCであれば読みにくくなるだけでメリットがありません。多少のデバイス無駄使いでも1つの回路を簡潔に区切って読みやすさ・分かりやすさを優先したほうがメリットが大きいです。
またラダー回路としての見た目は接点(や値比較)とコイルだけなので、、
何がインターロックで
何がコマンドで
何が出力で
ということはパッと見で判断が付かないことも多いため、コメントやデバイスの種類(Xなのか内部デバイスで受けたものなのかYなのか)、回路構成や区切りを見て判別出来るようになることがほとんどです。(装置に対する理解度(=どれだけ仕様を把握しているか)も大きく関係します)
逆に考えればインターロック(≒状態を集合した条件)とコマンドと出力とが区別しやすい書き方がベストと言えます。
ちょっとした違いだけなのですが、実際にはこのような手動回路が何十・何百とあるので分かりにくい回路があると積もり積もってウンザリすることになります。。(結果バグや不具合を生み出しやすくなる悪循環に陥るのがPLCあるある。)
さらに半導体製造装置業界(?)だといろいろ分業化されていますがPLCをモニタするのがソフト担当者だけとは限りません。現場で装置立ち上げ・調整する部門(≒ソフトが専門ではない人たち)もPLCをモニタするのでなおさら分かりやすいラダーかどうかはポイント高いです。
独断と偏見その2。
比較的トラブル少なめな装置のラダーは読みやすい/分かりやすい
トラブルが多い装置のラダーは読みにくい/分かりにくい
ということが多いイメージ。
あくまで”当社比”的な肌感覚だが。
異常検出回路
通常何かしらの操作をしたら予定どおり動作するのが制御として当然ですが、装置というハードウェアを伴う以上は断線やセンサ・機器の異常を検出してユーザ(装置オペレータ)に知らせる機能が必要です。よく「アラーム回路」などと呼ばれます。
アラーム用のデバイス(上図の例だとM2000~)はビットデバイスなら何でも良いです。(三菱ならBでもLでもFでも。)
ラダー側と表示側(PCやタッチパネルなど)でキッチリと取り決めしておけば良いだけの話なので。
機器からの異常信号があれば即アラーム判断でも問題ありませんが、予期せぬ状態が一定時間継続したらアラームと判断することも多いためアラーム用のビットデバイスとタイマを必要な分だけあらかじめ確保しておくのが常套手段となります。
場合によってアラームとして検出できるのがほんの一瞬ということもありえるため、アラーム回路は自己保持回路にしないと意味がありません。装置は自動運転で稼働していてもオペレータがいない状態で異常が発生するということもあり得ますし、アラームはログ(履歴)管理することが一般的なのでやはり自己保持回路としてオペレータが確認してからのリセットという流れになります。またよほどの理由がない限りアラームの自己保持回路はセット優先にしておくべきです。(アラームリセットで必ず保持を切らないとダメといった明確な理由がある場合以外はセット優先にする)
LIFEカウント回路
装置は一定期間使用したらメンテナンスを実施します。(装置性能にもかかわるので。)
メンテナンスの時期は機器毎や消耗品によって異なりますので必要な項目の数だけ「どれだけ使ったか」を示すものが必要になります。
ラダー回路としては、、
・使用条件のチェック
・時間(0.1秒か1秒クロック)か使用回数で(ワードデバイスを)インクリメント
・LIFEの現在値が設定値を超えたらアラーム(通常は警告/軽故障扱い)
・時間又は回数のリセット(通常はメンテナンス後にリセット)
となります。
装置としては必要な機能なんだが、、
装置を「動かす」という意味においては不要なため
作成が後回しにされることも多い。。
まとめ
おおまかに装置に必要なプログラムの基本は
・入力回路
・手動回路
・異常回路
・LIFE
となります。
他にオートやセミオートのような連続処理(自動運転)が必要です。
コメント