| 内容
巷には、動作を順次進めるアルゴリズムが色々ありますが、ここでそれらを比較してみます。以下の5つの方式を挙げてみました。 サンプルでは、基本編『仮想エアシリンダ』 を使って、動作確認します。また「SPI (シリアル・ペリフェラル・インタフェース)」のサンプルもあります。 (次工程移行アドレス式) |
| ●PDFを表示 |
|
◆1 . 次工程移行フラグ式
特徴 ・条件分岐が容易。(指定先相対アドレスをワードデバイスに代入) ・次工程の場合は、次工程移行のためのフラグをセットするだけ。 ・状態フラグのデバイスはベースに指定したデバイスのみ。 ・メモリを無駄に消費しない。 ・状態フラグの切替りはその工程終了の次スキャン時。 ・アドレス指定は相対。 ![]() ・9行目:次工程移行命令[NextSTG]がセットされると、現工程のアドレス[@FM0]をインデックスレジスタに代入し、現工程デバイス [@R000:Z1]をリセットします。 ・10行目:現工程で指定された次工程アドレス[@EM0]と現工程アドレスを比較し、違っていれば 次工程アドレスを現工程あドレスに代入します。(この段階でレジスタには次工程アドレスが入っています。) この条件は、次工程以外へっジャンプさせたい場合。 ・11行目:現工程アドレス=次工程アドレスならば([NextSTG]のみセットされた場合)、現工程アドレス[@FM0]をインクリメントし、レジス タに書込みます。 ・12行目:現工程アドレス=次工程アドレスな ら1加算された数値を、現工程アドレス≠次工程アドレスな らジャンプ先に指定された数値がインデックスレジスタ[Z1]と次工程アドレスに代入され、そのビットデバイスがセットされます。 ・指定は相対アドレスなので、この例の場合、[@R102]へジャンプさせる場合は「18」を指定します。 ◇ テスト操作 メニュー選択 ![]() ・PLCが起動すると、[@R000]がONしています。 ・次の工程に進めるにはゲート[@LR000]をセットします。(カーソルを合わせダブルクリック)順次ゲートをセットして工程を進めてみてください。 ・シリンダシミュレーションへは[@LR001]をセットします。変則 的なアドレスへのジャンプは、ジャンプアドレス[@EM0]に飛び先を代入します。 ・[@LR002]をセットすれば、一気に[@R004]へジャンプします。順次ゲートをセットして工程を進めてみてください。 シリンダ動作テスト ![]() ・相対アドレス16(@R100)へ飛ぶと、シリンダ動作テスト実行選択になります。 ・[①CYL中止]をセットすると初期工程へジャンプします。 ・[①CYL開始]セットで一連のてすと動作を行います。27~28行目のインジケータにて動作確認できます。 ・動作が終わると、再び[@R100]へ制御が戻ります。 |
|
◆2 . 次工程移行アドレス式 特徴 ・条件分岐が容易 ・状態フラグのデバイスはベースに指定したデバイスのみ。 ・メモリを無駄に消費しない。 ・状態フラグの切替りはその工程終了の次スキャン時。 ・アドレス指定は絶対。 メインルーチン ![]() ・現工程のアドレス[@FM2]と次工程のアドレス[@EM2]を比較し、違いがあればサブルーチンを呼出す。この段階でレジスタには現工程のアドレスが 入っているので、それを引数にしてサブルーチンに渡します。 ・サブルーチンでは絶対アドレス~相対アドレス変換を行っています。(詳しくは後述) ・相対アドレスがレジスタに戻っているので、インデックスレジスタに代入し、現工程デバイス[@R000:Z1]をリセットします。 ・次工程アドレス[@EM2]をレジスタに渡し、サブルーチンで絶対アドレスに変換します。同じく次工程のデバイス[@R000:Z1]をセットします。 ・次工程アドレスを現工程アドレスに代入します。 ・アドレス指定は5桁で、上3桁がチャネル番号。下2桁は接点番号です。例えば[@R56012]へ飛ばしたいなら「56012」を書込みます。 ・チャネル番号「999」まで使用できる様、2ワード変数を使っています。 サブルーチン 【 SBN10 】 ![]() ・レジスタを引数として値が渡されたサブルーチン側は、後で使うため、まず値を[SOURCE]に代入します。 ・次に、5桁の上3桁を抽出するため、100で割って(下2桁切捨)チャネル番号[CHAN]に代入します。 ・抽出された上3桁に再度100を掛け、バッファ[TM4]に入れておきます。 ![]() ・次にレジスタを代入しておいた5桁から、チャネル番号だけの5桁を引くと、接点番号が抽出できます。それを[CONT]に入れておきます。 ・この時、接点番号が15を超えたなら接点番号に15を入れます。 ・166行目で、相対アドレスを計算しています。( チャネル番号 × 16 + 接点番号 ) ◇ テスト操作 メニュー選択 ![]() ・PLCが起動すると、[@R400]がONしています。 ・ゲート[@LR400]をセットすると[@R401]へ制御が移ります。カーソルを合わせダブルクリック)順次ゲートをセットして工程を進めてみてくだ さい。 ・[@LR408]をセットすると[@R500] SPI サンプルプログラムへジャンプします。 ・この様に、デバイ番号を直に指定できます。 ![]() ・SPI サンプルを実行するには[SPI開始]を、初期工程に戻るには[SPI中止]をセットしてください。 ・SPIに関しては、少し詳しく解説します。 ![]() ・タイマ[@T0]でクロックを作ります。クロック発振許可[@LR500]が真の時、タイマが発振します。 ・排他的論理和の出力を入力にフィードバックしクロックと排他的論理和をとる事でトグルフリップフロップを作っています。 ・[@T0]の2倍の周期、デューティー50%のクロックができます。 ![]() ・SPI を開始すると、[@R502]に制御がうつります。(初期化ルーチン) ・転送ワード数[@DM8]をカウンタ[@FM10]に代入します。この時、転送ワード数が8以上に設定されていると、8を代入します。 ・転送ワードのインデックスカウンタ[@FM12]を0に初期化します。 ・データ[@MR901]をリセットし、[@R504]へ制御を移します。 ![]() ・実行開始遅延[@T2]後、クロック発振許可を発行します。引き続きクロック[@Mr900]をセットします。 ・インデックスカウンタ[@FM12]を[Z1]に代入し、データの1番目[@DM0]をバッファ[@FM8]に代入します。このバッファと次のビット検 出変数[@FM9]とで真であるビットを検知します。 ・ビット検知[@FM9]の最上位ビットを立てます。 ・動作確認用カウンタ[BIT]に16を代入します。(動作的には何もしない) ・[@R508]へ制御を移します。 ![]() ・クロックの立上りで、ビット検知変数[@FM9]とデータ[@FM8]の論理積をとります。 ・ビット検知変数のビットが立っている箇所と同じ箇所に、データのビットも立っていれば[CR2010]がOFFしますので、データをセットします。 ・データのビットが立っていなければデータをリセットします。 ・上記どちらの場合も[@R510]へ移ります。 ![]() ・クロックの立下りで、確認ウンタ[BIT]をデクリメントします。 ・ビット検知変数のビットが立っている箇所を1つ下位へ移動させます。 ・ビット検知変数に立っているビットがまだ残っていれば[CR2010]がOFFするので、[@R508]へ制御が移り、データ出力を変更します。 ・立っているビットが無くなれば[@R512]へ移ります。 ![]() ・転送ワード数カウンタ[@FM10]をデクリメントします。設定数分の転送が終了( [CR2010]がON )したなら[@R514]へ ・要転送データがあるなら、クロックを停止し、インデックスをインクリメントして[@R504]に制御を移します。 ![]() ・クロックの立下りで、クロックを停止し、データをOFFして[@R600]へ移ります。 ![]() ・終了待ち時間[@T3]待機後、[@R500]メニューへ戻ます。 ● 参考 他に、飛び先にワードデバイスを使って、デバイスと定数の一致を見て工程を選択する方法があります。シー ケンサ制御.com ![]() ・この例では「比較接点命令」を使っていますが、記述が面倒なのと、処理時間が長いのがデメリットです。 KV-3000 LD :0.010 LD= :0.120 処理時間比:12倍 KV-7000 LD :0.00096 LD= :0.01413 処理時間比:約14.7倍 接頭辞/単位:μ秒 |
|
◆3 . STG~JMP命令 特徴 ・条件分岐が非常に楽。 ・アクティブでないSTG内の命令は実効しない。 ・STGに使うDeviceの種類が自由に設定できる。 ・メモリを無駄に消費しない。 ・状態フラグの切替りはその工程終了のスキャン時。 ![]() ◇ テスト操作 ![]() ・PLCが起動すると、[@R800]がONしています。 ・[@LR800]をセットすれば、次のステージへ飛びます。(カーソルを合わせ、ダブルクリック)順次ゲートをセットして工程を進めてみてください。 ・[@LR801]をセットすれば、シリンダテスト動作へ飛びます。 ![]() ・STG命令はアクティブでないSTGに書かれた命令は実行しないので、上記2段共にある[@MR800]はどちらのSTGに制御があってもONしていま す。 ・ゲートデバイスをセットして順次工程を進めてみてください。 ![]() ・シリンダ動作テスト実行選択です。 ・実行する場合は[③CYL開始]をセットしてください。 ・[③CYL中止]セットで[@R800]のトップSTGへ飛びます。 ![]() ・ここに制御が移ると、下降シリンダ[R1404]をセットします。 ・下降限センサ[R1604]が入ると、チャックシリンダ[R1406]をセットします。 ・チャック閉センサ[R1606]がONしたら、次STGへ駒を進めます。 ![]() ・ここではチャック閉の確認ができているので、下降シリンダ[R1404]をリセットします。(上昇) ・上昇端センサ[R1804]がONしたら、横行シリンダ[R1405]をセットします。 ・横行端[R1605]を検出したら、次STGへ飛びます。 ![]() ・横行端に居るので、下降シリンダ[R1404]をセットします。 ・下降端センサのONで、チャックシリンダ[R1406]をリセットします。(チャック開) ・チャック開[R1806]の確認が取れたら、次のSTGへ制御を移します。 ![]() ・チャック開状態なので下降シリンダ[R1404]をリセットします。(上昇) ・上昇端を検知したら、横行シリンダ[R1405]をリセットします。(横戻) ・横行戻[R1805]を検出すれば、1サイクル終了したので、動作実行選択[@R900]へ飛びます。 |
|
◆4 . 歩進式 特徴 ・条件分岐が煩雑になる事。 ・記述がだらだらと長くなる事。 ・歩進を進める条件の中に出力を記述できない事。(常時実行される為) ・歩進を進める条件と、出力を別の場所にCodingしなければならないので見通しが悪い。無駄が多い。 ・出力にダラダラと条件が要る。 ・状態フラグの切替りはその工程終了のスキャン時。 ![]() ・トリガ[⑩開始]を事始めに、次工程に進む条件が真であれば、順次ラッチして行きます。 ![]() ・124行目:最後の工程の条件が真になれば、終了フラグ[@MR1609]を立てて、全ラッチをリセットします。 ![]() ・出力[R1408] / [R1410]はラッチデバイス(工程フラグ)の論理を取とって作ります。 ・工程が多数あり、制御対象が少なければ、同じ制御対象を何度もON-OFFする事になるので、このロジックが煩雑になります。 ◇ テスト操作 ![]() ・上の確認コードで[⑩開始]をダブルクリックして、セットしてください。 ・順次、工程が進むと左側のインジケータ[⑩上昇]等がONするので、確認してください。 ・[⑩開始]フラグは動作終了時、OFFします。 |
|
◆5 . ステップ式 特徴 ・条件分岐が煩雑になる事。 ・歩進を進める条件と、出力を別の場所にコーディングしなければならないので見通しが悪い。無駄が多い。 ・無駄にメモリを使用する事.(この例では10ステップに対し16ビット占有されている。) ・状態フラグの切替りはその工程終了の次スキャン時。 ・記述がだらだらと長くなる事。 ・出力に工夫が要る事。 ![]() ・ジャンプ先[@EM8]の数値をビットデバイスデコードします。 ・例では[@MR1700]~16ビット分デコードします。16ビットで不足する時は、256ビットまでデコードできます。 ・デコードは2のN乗毎になるので、無駄なデバイスができる可能性があります。 ![]() ・飛び先アドレス[@EM8]の初期値は0なので[@MR1700]がONします。[⑪開始]が真になると飛び先がインクリメントされ、デコードされるた め[@MR1700]がOFFし[@MR1701]がONします。 ・この様に順次工程が進んでいきます。最終工程で飛び先アドレスを0にすると振り出しへ戻ります。 ![]() ・下降条件[@MR1701] / [@MR1705]の立上りで下降シリンダ[R1412]をセットします。 ・上昇条件[@MR1703] / [@MR1707]の立上りで降シリンダをリセットします。 ・(OUT) 命令で書いても良いのですが、条件分けができないので上記コードが分かりやすいと思われます。 ![]() ・同じく 横行シリンダのセットとリセットです。 ◇ テスト操作 ![]() ・上の確認コードで[⑪開始]をダブルクリックして、セットしてください。 ・順次、工程が進むと左側のインジケータ[⑪上昇]等がONするので、確認してください。 ・[⑪開始]フラグは動作終了時、OFFします。 |
| ●PDFを表示 |