■ 微分 (File: plc_public_codex_xxx | Module:Differential)

⇒ TO Home Page
内容

PLC には命令語として微分命令が備わっています。(LDP / DIFU / MEP など)  通常はそれらを使ってコードを書きますが、それらの機能では事足りない場合や、それらが使えない状況が出てきます。
そんな場合、自力で微分動作を実現するコードを書きましょう。
ここでは色んなパターンの微分動作や、1ワード(16ビットまとめて)扱う方法を紹介します。

●PDFを表示 
◆ 起動時1回のみ実行 【 でも、後からも再実行 】

00006
・これは私がモジュールの定義や、変数の初期化などに使っているコードです。
・PLC起動時は[Initial]は偽なのでサブル−チン0を呼び出します。

00142
・サブルーチン側では、色々な処理の後、[Initial]をセットします。ここで[Initial]が真になったので、次回スキャンからはサブルーチン へは飛びません。
・また、再度初期化が必要になれば、[Initial]をリセットするか、サブルーチンを呼び出します。(PLCモニタ中は手動で[Initial]をリ セットも可能)

・初期設定に関して、通常スキャン内に初期化コードダラダラ書くのを多々見かけますが、不要なスキャンが発生するのと見通しが悪くなるので、 お奨めできません。この様にサブルーチン化してしまえばスッキリします。

◆ 立上微分

□1 . PLC起動時、入力が真で動作する。
00009
・入力[■立上]が真の状態で、PLCを起動すると、[Dev▲01]は1スキャンONします。

・[■立上]が真になった時点(PLC起動時でも)で、まだ/[Buf△01]は真なので[Dev▲01]がONします。
・次行で[Buf△01]がONします。
・次のスキャンでは、/[Buf△01]が偽なので、[Dev▲01]はOFFし、1スキャンのみONした事になります。

・[■立上]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM0]がカウントアップする事で確認します。


□1−A . (1)のロジックを1ワード(16ビット)まとめて実行させます。
00012
・(1)のロジックをそのまま16ビット化しています。
・入力[@R000]〜[@R015]の任意の位置の立上りで、[@MR000]〜[@MR015]の対応するビットが1スキャンONします。


・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・15〜16行目でチェックしてください。[■Inp00/[MaskBit] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM1]がカウントアップするのを確認してください。


□2 . (1−A)の改造版。
00018
・入力[@R100]〜[@R115]の任意の位置の立上りで、[Out▲02]の対応するビットが1スキャンONします。
・出力デバイス[Out▲02]で[@MR100]をラッチさせています。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・22〜24行目でチェックしてください。[■Inp01] //[MaskBit]/[Device.▲01]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・立上りの確認が出来ないので、出力を[@MR100]〜[@MR115]にラッチしました。入力が真のまま、[@MR100]〜[@MR115]がリ セットできる事で微分動作を確認できます。


□3 . 立上りを記憶したデバイスをリセットしないと、次の立上りをマスクする。
00026
・[■立上]をONすれば[Dev▲03]は微分動作をし、[Latch▲03]はそれを記憶します。
・[Latch▲03]をリセットしなければ、次の[■立上]の立上りを検出しません。

・[■立上]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM3]がカウントアップする事で確認します。


□3−A . (3)のロジックを1ワード(16ビット)まとめて実行させます。
00032
・ (3)のロジックをそのまま16ビット化しています
・入力[@R200]〜[@R215]の任意の位置の立上りで、[@MR200]〜[@MR215]の対応するビットがラッチします。
・[@MR200]〜[@MR015]のラッチした箇所をリセットしないと、次の微分動作はしません。
・[@DM4]は、どれかの箇所のビットが真になれば、カウントします。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・35〜37行目でチェックしてください。[■Inp02] / /[MaskBit] / [Latc.▲02]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM4]がカウントアップするのを確認してください


□4 . PLC起動時、入力が真でも動作しない。
00039
・入力[■立上]の立上り時に、[Dev▲04]が1スキャンONします。
・[■立上]が真の状態で、PLCを起動しても、[Dev▲04]はONしません。


・次の行で[■立上]が真なので、[Buf△04]はOFFです。
・[■立上]が偽になった時点で、[Buf△04]はONします。

・次回[■立上]が真になった時、[Buf△04]は真なので[Dev▲04]はONします。
・次行で[Buf△04]はOFFします。
・次スキャンでは、[Buf△04]は偽なので、[Dev▲04]はOFFし、1スキャンのみONした事になります。

・[■立上]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM5]がカウントアップする事で確認します。


□4−A . (4) のロジックを1ワード(16ビット)まとめて実行させます。
00042
・(4)のロジックをそのまま16ビット化しています。
・入力[@R300]〜[@R315]の任意の位置の立上りで、[@MR300]〜[@MR315]の対応するビットが1スキャンONします。
・[Dev▲04代]は、16ビット内どれかの箇所のビットが真になれば、1スキャンONします。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・45〜46行目でチェックしてください。[■Inp03] / /[MaskBit] にカー ソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM5]がカウントアップするのを確認してください。


□5 . 回転系、原点停止のサンプル。
00048
・[■TRG]をセットすると、[MOTOR]がONします。
・原点検出で[原点]が真になったら[■TRG]をリセットして、モータを停止します。
・[原点]が真の状態で、再度[■TRG]をセットすると、[MOTOR]がONします。
・原点検出で[原点]が真になったら[■TRG]をリセットして、モータを停止します。

・[■TRG]/ [原点] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。

◆ 立下微分


□1 . PLC起動時、入力が偽でも動作しない。
00052
・入力[■立下]の立下り時に[Dev▼01]が1スキャンONします。
・[■立下]が偽の状態で、PLCを起動しても[Dev▼01]はONしません。

・PLCが起動した時点で[Buf▽01]は偽なので[Dev▼01]はOFFです。
・次の行で/[■立下]が真なので、[Buf▽01]はOFFです。
・/[■立下]が偽になった時点で、[Buf▽01]はONします。

・次回/[■立下]が真になった時、[Buf▽01]は真なので[Dev▼01]はONします。
・次行で[Buf▽01]はOFFします。
・次スキャンでは、[Buf▽01]は偽なので、[Dev▼01]はOFFし、1スキャンのみONした事になります。

・/[■立下]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM16]がカウントアップする事で確認します。


□1−A . (1)のロジックを1ワード(16ビット)まとめて実行させます。
00054
・(1)のロジックをそのまま16ビット化しています。
・入力[@R800]〜[@R815]の任意の位置の立下りで、[@MR800]〜[@MR815]の対応するビットが1スキャンONします。
・[Dev▼01代]は、16ビット内どれかの箇所のビットが真になれば、1スキャンONします。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・57〜58行目でチェックしてください。[■Inp08] / /[MaskBit] にカー ソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM17]がカウントアップするのを確認してください。


□2 . 立下りを記憶したデバイスをリセットしないと、次の立下りをマスクする。
00060
・[■立下]をON→OFFすれば[Dev▼02]は微分動作をし、[Latch▼02]はそれを記憶します。
・[Latch▼02]をリセットしなければ、次の[■立下]の立下りを検出しません。

・/[■立下]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM18]がカウントアップする事で確認します。


□2−A . (2)のロジックを1ワード(16ビット)まとめて実行させます。
00066
・(2)のロジックをそのまま16ビット化しています
・入力[@R00]〜[@R915]の任意の位置の立上りで、[@MR900]〜[@MR915]の対応するビットがラッチします。
・[@MR900]〜[@MR915]のラッチした箇所をリセットしないと、次の微分動作はしません。
・[@DM19]は、どれかの箇所のビットが真になれば、カウントします。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・70〜72行目でチェックしてください。[■Inp09] / /[MaskBit] / [Latc.▼02] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM19]がカウントアップするのを確認してください


□3 . PLC起動時、入力が偽で動作する。
00074
・入力[■立下]の立下時に[Dev▼03]が1スキャンONします。
・[■立下]が偽の状態で、PLCを起動すると[Dev▼03]はONします。

・PLCが起動した時点で、/[Buf▽03]は真なので[Dev▼03]はONします。
・次行で/[■立下]が真なので、[Buf▽03]はONです。

・次スキャンでは、/[Buf▽03]が偽になっているので[Dev▼03]はOFFし、1スキャンONした事になります。

・/[■立下]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM20]がカウントアップする事で確認します。


□3−A . (3)のロジックを1ワード(16ビット)まとめて実行させます。
00076
・ (3)のロジックをそのまま16ビット化しています。
・入力[@R1000]〜[@R1015]の任意の位置の立下りで、[@MR1000]〜[@MR1015]の対応するビットが1スキャンONします。
・[Dev▼03代]は、16ビット内どれかの箇所のビットが真になれば、1スキャンONします。

・また、[LR000]〜[LR015]で偽になっている箇所はマスク され、微分出力されません。
・[Gate]は実行許可フラグです。

・78〜79行目でチェックしてください。[■Inp10] / /[MaskBit] にカー ソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM21]がカウントアップするのを確認してください。

◆ 両エッジ微分

□1 . 立上、立下 両方の微分
00082
・立上 / 立下の両エッジで微分動作をします。
・PLC起動時、入力が真なら微分動作します。
・入力[両方]と、入力の1スキャン遅れ[Buf△▽01]の排他的論理和をとって、微分させています。

・[両方]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM32]がカウントアップする事で確認します。


□1−A . (1)のロジックを1ワード(16ビット)まとめて実行させます。
00086
・(1)のロジックをそのまま16ビット化しています。
・入力[@R1800]〜[@R1815]の任意の位置の立上りと立下りで、レジスタの対応するビットがONします。
・出力デバイスは省略しました。

・[Gate]は実行許可フラグです。

・89行目でチェックしてください。[■Inp18] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・[@DM33]がカウントアップするのを確認してください。


□2 . 立上、立下 の各個微分 【 PLC起動時、入力が真で微分動作 】
00091
・立上、立下の微分を別々に出力します。
・PLC起動時、入力が真なら、立上微分出力します。

・[両方]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・立上時は[@DM35]、立下時は[@DM34]がカウントアップする事で確認します。


□3 . 立上、立下 の各個微分 【 PLC起動時、入力が偽で微分動作 】
00095
・立上、立下の微分を別々に出力します。
・PLC起動時、入力が偽なら、立下微分出力します。

・[両方]にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・立上時は[@DM36]、立下時は[@DM37]がカウントアップする事で確認します。


□4 . 立上でセット、立下でリセット
00099
・入力[@R1900]〜[@R1915]の立上りで、出力[@MR1900]〜[@MR1900]をセット、立下りでリセットします。

・104〜105行目でチェックしてください。[■Inp19] / [Device19] に カーソルを合わせ、ダブルクリックすると、ON-OFFできます。

◆ 立上/立下 インターロック

00109
・セット禁止フラグ[@LR000]〜[@LR015]の任意のビットが真の時、対応する[@R2000]〜[@MR2015]のビットはONできませ ん。
・リセット禁止フラグ[@LR100]〜[@LR115]の任意のビットが真の時、対応する[@R2000]〜[@MR2015]のビットはOFFできま せん。

・108行目と111〜114行目でチェックしてください。[■Inp20] / [△I-Lock] / [▽I-Lock] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。
・また、[CMD01]をセットして、[@R2000]を常時ONしてもセット禁止できる事を確認してください。
・一旦セットされた[@R2000]を[CMD01]で常時OFFしても、リセット禁止できる事も確認してください。

◆ インパルス

00117
デジタル・フィルタの チェック用に作りましたが、他の用途は???です。
・次の2つのパラメータを設定します。
1.[@EM1]:出力する値
2.[@EM2]:出力するスキャン回数
・[ImpTRG]をセットすると[@EM0]に、[@EM2]で設定されたスキャン回数分[@EM1]で設定された値を書出します。
・実行終了時に、実行前の[@EM0]の値を書戻します。

・[@EM0]にカーソルを合わせ、右クリックの「一括モニタウィンドウ」で[@EM0]〜[@EM3]が登録されます。
・上記パラメータを設定して、[ImpTRG]をセットしてください。
・[@EM3]はスキャン回数確認用カウンタです。

◆ 同時セット禁止

□1 . 早いもの勝
00122
・1番に立ったビット以外はセットできません。

・すでに真のビットがある場合、次にセットしたビットの立上りで自分自身を殺しています。
・PLC起動時に、複数のビットが真である場合のために「ENCO 命令」で最も若いアドレスを選択しています。
・対象デバイス[@R2200]〜[@R2215]をセット/リセットするのはこのコードの前、使用するのは後にしてください。

・127行目でチェックしてください。[■Inp22] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。


□1 . 遅いもの勝
00129
・すでに真のビットをリセットして、新なビットをセットします。

・対象デバイスの立上り微分を検知し、そのビットをエンコードしてデコードで戻す事で、他のビットを殺しています。
・対象デバイス[@R2200]〜[@R2215]をセット/リセットするのはこのコードの前、使用するのは後にしてください。

・132行目でチェックしてください。[■Inp23] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。

●PDFを表示