■ 仮想 エアシリンダ (File: plc_public_codex_xxx | Module:VirtualCylinder)

⇒ TO Home Page
内容

シミュレーション用のエアシリンダを、仮想的に32 個作りました。
 
このサンプルでは、32個分記述しています。32個分のコードを書くのは現実的でないので、1スキャンで2個分を記述し、インデックスレジスタで修飾しています。

●PDFを表 示 
◆ シーケンスルーチン 【 シリンダON時の動作 】

00011
・各デバイスは、インデックスレジスタ[Z6]で修飾されています。[Z6]は『TimeSlice Module』で1スキャン毎に0〜15で循環します。
・入力[R1400]は、ソレノイドバルブON信号です。シリンダの動作時間はクロック[@T0]をカウント[@FM0]する事で実現しています。
(能動時クロック×設定値)
・出力[R1600]はピストン出限端のセンサです。

・入力[R1400]ONの立上りでクロック[@T0]をリセットします。
・入力ON中は、出限センサがOFFであれば、クロックの立上りでカウンタを1進め、クロックをリセットします。
・カウンタの値が設定値[Resolution]以上になれは出限センサをONし、カウントを停止します。

・ここで立上り微分を実現するために、微分命令は使っていません。スキャン毎に[Z6]が変化する場合、1スキャン前の状態は無意味なので微分命令は使えないのです。



◆ シーケンスルーチン 【 シリンダOFF時の動作 】

00015
・入力[R1400]がOFFすると、その立上りでクロック[@T32]リセットします。
・入力OFF中は、戻限センサ[R1800]がOFFであれば、クロックの立上りでカウンタ[@FM0]を1戻し、クロックをリセットします。
・カウンタの値が0以下になれば戻限センサをONし、カウントを停止します。
・動作時間はクロック[@T32]をカウント[@FM0]する事で実現しています。(非能動時クロック×設定値)


◆ タイマルーチン

00006
・また、タイマもインデックス修飾できませんの で上の用なコードにして、常時能動にしておき他からリセットする様な使用法にします。


◆ サブルーチン 【 SBN0 】

00038
・カウンタの分解能[Resolution]を「10」に、シリンダON動作時間を「1500」に、シリンダOFF動作時間を「800」に設定しました。
・タイマ値は、動作設定値を[Resolution]で割る(サブルーチン02)で算出しています。
・例えばON動作時間は「1500」と設定しているので[Resolution]の10で割って「150」となります。タイマは1msなので、クロックは 150ms
そのクロックを10回カウントするので、動作時間は1500ms(1.5秒)になります。
・シリンダON時のタイマ設定値[ACT_t]と、OFF時の設定値[INA_t]がそれぞれ計算されます。
・ここで算出されたON/OFF時の値をそれぞれ実タイマに代入します。そのためのインデックスレジスタ[Z1]をクリアします。


00041
・32個のシリンダを作ったので、FOR〜NEXTで32回ループします。
・ループの中は、ON時設定時間[ACT_t]を[@T0]〜[@T31]へ。OFF時接待時間[INA_t]を[@T]〜[@T64]へ代入します。
・タイマ設定値の参照デバイスを記述する方法もありますが、今回はタイマ値代入でやってみました。

●PDFを表示