上級:プログラム作成データシフトについてで説明した動作を例にします。製品シフトは次のようになります。全体の動きを把握します。各ユニットの動作条件などすべて把握します。機械図面が手に入るようでしたらもらっておきましょう。ここでの機械図面は詳細まで書いてあるものでなくてもいいです。機械図面が手に入らないのであれば、手書きでもいいので簡単に書いて見ましょう。イメージがわかればいいので、本当に簡単でいいのです。私は各ユニットを四角で書くだけです。各ユニットの動作がイメージできていれば次の準備に移ります。デバイス番号を決める。次はデバイス番号を決めておきます。「部品を置く」ステーションでは、「M1000」~「M1199」の200個の内部リレーを使用するように取り決めを行います。このようなことを決めるのかというと、分かりやすいからです。ラダー図も番号がそろっていてきれいに見えます。一昔前のシーケンサはメモリ容量も少なく、内部リレーも限られた数しかありませんでした。そのため、使用していないデバイス番号をかたっぱしから使用していました。このように使わないと内部リレーも足りなくなるからです。そのためなるべく隙間を空けないように使用するのが一般的でした。昔のシーケンサになると、デバイス番号も固定されていて、タイマーコイルなどは数個しか使えない時代もありました。今は昔と違いこのようなことは無いと思います。内部リレーも大量に用意されていますので、コイルが足りなくなるより先にプログラムのメモリがオーバーすると思います。このように最近のシーケンサは性能もあがり、ある程度余裕のある使用ができるのです。デバイス番号を決めるのですが、深く考える必要もありません。プログラムの経験がほとんどないと、使用する数がわからないと思います。そこまで大きくない動作でしたら内部リレーで200個程度割り当てれば問題は無いでしょう。部品を置く動作をプログラムするときは「M1000」~「M1199」の内部リレーを使うようにします。製品情報や良否判定は「D1000」~「D1099」の範囲で使用します。ここでの取り決めは自分の中での取り決めなので、絶対に範囲以外のデバイスが使用できないということではありません。普通に使えば使用できます。足りなくなった場合など例えば「M2000」~などに適当に増やしていきます。しておけば使用している内部コイルによって、どこの制御か分かりやすいし、プログラムを作るときに「内部リレーは何番を使おう?」と悩む必要も無いのです。デバイス番号が決まれば、先ほど準備した図面上にわかりやすく書いていきます。最終的には電子ファイルにまとめますが、作成中は紙に書いたものを見たほうが作業もしやすいでしょう。全体のプログラム設計デバイス番号が決まったからといって、プログラムを作るわけではありません。プログラムの設計は最初が大事で、最初の考え方を間違えると後で痛い目にあいます。製作する設備にあわせた設計をしっかりしてください。この作業に時間をかけても問題ありません。設計といっても図面を引いたりするわけではなく、どのように制御するのかを考えるのです。上の図での制御方法を少し考えて見ましょう。図には書いていませんが、「ベースを入れる」位置にベースが来ると、設備は「部品を置く」位置までベースを引き込むものとします。このユニットを搬入ユニットと呼ぶことにします。設計する場合、このプログラム設計の時点でわからなくなる可能性があります。深く考えれば余計にわからなくなります。それは制御を上位側から考えようとしているからです。慣れないうちは下から考えてください。下からというのは各ユニットの制御のことですが、今は全体的な制御設計をしているので各ユニットの動作までは考える必要はありません。各ユニットの動作条件を決めます。この条件は他のユニットとできる限り統一します。その条件が成立したとき、そのユニットは1サイクル動作させます。ネジ締め動作条件が成立した場合、「ネジを締める」ユニットはネジ締め動作を1サイクル実行します。このように各ユニットの動作条件を決めていくことも大切な設計となります。次は搬入ユニットです。ここは「ベースを入れる」位置にベースがあった場合、さらに「部品を置く」位置にベースが無い場合と、内部の搬送ユニットが動作していない場合を条件に搬入動作させればいいと思います。次は内部の搬送ユニットです。搬送ユニットが動作したら、D1000〜D1399のデータを100個単位でデータシフトすることにします。ここで搬送ユニットが動作する条件を決める必要があります。搬入ユニットからベースが入ってきて、「部品を置く」動作を完了したとき、搬送ユニットが動作する。単純に考えればこのような動作条件になりますが、この条件には欠点があります。搬入ユニットからベースが入ってこないと動作しません。常に搬入させないと設備は動きません。一日の作業が終わったとき、中の作業中のベースを排出することができないのです。私はこのような条件は好きでないので変更します。搬送ユニットが動作する条件はワーク検出している各ユニットが動作完了している。各ユニットが動作中で無いこと、です。「部品を置く」ユニットでは、ワーク検出していれば、動作完了していること。ワーク検出していないこと。この条件を各ユニットごと設定しANDでくくればいいのです。いずれかのユニットがワーク検出していることも条件に入れておきましょう。しておけば例え次のベースが搬入されなくても、搬送動作は内部ワークがなくなるまで動作します。動作完了しているかどうかの条件設定方法は後で説明します。搬送動作の条件はできました。次は各ユニットの動作条件を考えて見ましょう。搬送ユニットが動作した後に各ユニットを動作させる。この条件も一見はいいように見えますが、もし搬送ユニットが動作した後、設備を停止させた場合、動かなくなります。設備を自動運転に入れた瞬間、前回停止した状態を読み出し、各ユニットに動作指令を出す必要があります。このようなめんどくさい設計はやめましょう。単純に考えればいいのです。ワーク検出している各ユニットが動作完了していない状態で、搬送ユニットが動作中でなく、原点で待機している場合。ユニットが動作完了しているかどうかを見るにはデータレジスタを使用します。部品を置くユニットの「D1000」〜の部分を見てみます。下の図のように設定します。設定方法は自分のわかりやすい順序で設定してください。今回は説明用なので単純に設定してみました。これは部品を置くユニットの内容なのですが、すでにネジを締めるユニットなどの項目があります。実はここで使うことは無いのですが、データレジスタを100個分まとめてシフトさせるのであらかじめ設定しています。このように先のことまで考えてシステム全体を設計することが大切です。全ユニットで見ると下の図のようになります。「カバーを置く」ユニットで考えて見ましょう。「D1101」を動作完了確認とします「D1101」が“0”で搬送が原点で待機しているとき動作させます。ユニットが動作開始した時点で、搬送ユニットは動作しないようにしてください。「カバーを置く」ユニットがサイクル完了した時点で、正常完了であれば「D1101」に“1”を書きます。トラブルがあった場合などは“2”を書きます。「D1101」の値が1以上であれば動作完了となります。各ユニットもこのような条件をつけます。各ユニットが動作完了すると搬送ユニットが動作します。するとデータシフトするので、「D1101」は“0”となり、再度動作します。「ネジを締める」ユニットはどうでしょう。データシフトするので「D1201」は“1”が入っています。「ネジを締める」は「D1202」を使います。一桁目の番号を変えないと上書きされるからです。この方法だと動作条件を細かく変えることもできます。「ネジを締める」ユニットで「D1201」に“2”が入っていれば動作させずにそのまま「D1202」に“3”を書き込み完了させる。これは前ユニットで正常に完了していなければ、それ以降のユニット動作は必要ないため、動作をさせないのです。ここで“3”を書き込みましたが、これはユニットパスしたということで、書き込んだだけで特に何を書き込んでも問題ありません。面白いことに最初から“3”を書き込んでおくとそのユニットをパスしていきます。搬入時に書き込んでおけばパス運転などに使えます。各ユニットの条件は完了しました。ここで気づいた人もいると思いますが、これで動作します。全体を把握するメインルーチンと言うべき回路を作る必要は無かったのです各ユニットがそれぞれの条件で動作するため、何らかの不具合で動かない時はそのユニットの動作条件を見ればいいのです。一応回路設計は完了しましたが、今回の設備はあまり大きくないので各ユニットがそれぞれ独立して動作する形になりました。各ユニットを接続するものはデータシフトしているデータのみです。大きな設備や複雑な制御が必要な場合はやはり全体を監視するプログラムをいれておいたほうがいいかもしれません。方法は特に難しくも無く全体を監視できる動作部分、ここでは搬送部分になりますが、この部分にデータシフトから各ユニット情報を監視して、各ユニットに動作指令を出すようにすればいいのです。簡単に言うと、各ユニットがそれぞれ動作条件を持って動作していたものを、搬送ユニットにまとめて、全体を監視するようにするのです。全体の制御の設計が終わったら、各ユニットの制御設計を行います。簡単に説明しましたが、各ユニットの動作完了状況を入れるデータレジスタの値は統一しておいてください。