■ フリップ・フロップ (File: plc_public_codex_xxx | Module:FlipFlop)

⇒ TO Home Page
内容

『ウィ キペディア』によれば「二進法の基本である1 ビットの情報を一時的に"0"または"1"の状態として保持する(記憶する)ことができる論理回路」とあります。
ここでは、色んなフリップフロップを挙げています。また、1ビットだけでなく、ワードまとめて動作させるコードも紹介しています。
命令語で用意されている「オルタネート」と呼ばれる「トグル フリップ・フロップ」も複数の方法を記述しています。
ハード(機械リレー)で組みあげても動作するコードもあります。
最後に、実際の装置に実装したコードをサンプルとして挙げてみました。

●PDFを表示 
◆ リセット・セット フリップフロップ

□1 .出力のフィードバックで微分させる。 【 PLC起動時、[■SET]が真なら出力ON 】
・このコードは、機械リレーで作っ ても動作します。
00005
・[■SET]の立上りで[●RSout01]をセットします。
・[■RES]の立上りで[●RSout01]をリセットします。
・[BufRS11] / [BufRS12] は出力[●RSout01]で動作するので、結果的に微分動作になります。

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



□2 . (1)の変形 1スキャン遅れで微分させる。 【 PLC起動時、[■SET]が真なら出力ON 】
00014
・[■SET]の立上りで[●RSout02]をセットします。
・[■RES]の立上りで[●RSout02]をリセットします。
・[■SET]と[■RES]を微分化してラッチさせます。
・微分動作するデバイスで記述すればもっとシンプルになります。

00016
・[Buf△Set02] / [Buf△Res02]は1スキャン遅れで、ON-OFFするので、ロジックの中では微分動作になります。

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



□2−A .(2)のロジックを1ワード(16ビット)まとめて実行させます。 【 PLC起動時、[■SET]が真なら出力ON 】
00021
・(2)のロジックをそのまま16ビット化しています。

・(2)のコードと対応させると
 - セットさせるためのブロック
/[Buf△Set02] → ( <LDA @FM0> <COM> )
AND
[■SET] → [@R000]
OR
[●RSout02] → [@MR000]
上記結果を
[TM4] に代入

 - リセットさせるためのブロック
/[■RES] → ( <LDA @R100> <COM> )
OR
[Buf△Res02] → [@FM1]

上記結果と[TM4]の論理和をとったものを
出力[@MR000]に代入

 - 1スキャン遅れの代入
[Buf△Set02] = [■SET] → ( <LDA @R000> <STA @FM0> )
[Buf△Res02] = [■RES] → ( <LDA @R100> <STA @FM1> )

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



□3 .(2−A)のロジックをPLC起動時[■SET]が真でも出力OFF に変更。 【 PLC起動時、[■SET]が真なら出力OFF 】
00029
・セット入力[@R000]の1スキャン遅延代入を反転させています。

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



□4 . 変形タイプ。 【 PLC起動時、[■SET]が真なら出力ON 】
00036
・[Set●]の立上りで[Out●]をセットします。
・[Reset●]の立下りで[Out●]をリセットします。但し、[Set●]が真ならリセットは不可能。
・何かの時、必要になり作りました。参考程度に…

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

◆ ディレー ラッチ

□1 . D ラッチ(筒抜けラッチ)
00043
・[■EnabD]が偽の時、[■DataD]は[●Dout00]にそのまま出力されます。(筒抜け状態)
・[■EnabD]が真の間、直前の[■DataD]の状態をラッチします。
例えば、[■DataD]が偽の時、[■EnabD]をONして[■DataD]をONします。でも出力は変化なし。
ここで[■EnabD]をOFFすると、出力はONします。

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

D Latch

・ロジックシンボルで表現すれば、左の様になります。
・「ラッチイネーブル」と「テータ」の論理和を取ったものを、/R/S ラッチのリセット側に入力する事で実現できます。





□1−A . (1)のロジックを1ワード(16ビット)まとめて実行させます。(筒抜けラッチ)
00048
・(1)のロジックをそのまま16ビット化しています。

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



◆ ディレー フリップ・フロップ

□1 出力のフィードバックで微分させる。
このコードは、機械リレーで作っても動作します。
00055
・[■EnabD]の立上りで、[■DataD]状態をラッチします。

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

d_flipflop





・ロジックシンボルで表現すれば左の様になります。
・Dラッチ2個で実現できます。
・上のラダー図表現では、共通の部分を省略しています。












□2 . (1)の変形。1スキャン遅れで微分させる。
00062
・[■EnabD]を微分化しています。
・単純なRSラッチのセット条件を[■EnabD]の微分( <LD ■EnabD> * <LDB Buf△D02>)でゲート(1スキャン真)しています。[■DataD]が真なら出力はON。
・リセット条件を[■EnabD]の微分(<LD ■EnabD> + <LDB Buf△D02>)でゲート(1スキャン偽)しています。[■DataD]が偽の時は出力はOFFします。
・□3 . に分り易く変形したコードを挙げています。

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


□2−A .(2)のロジックを1ワード(16ビット)まとめて実行させます 00069
・(2)のロジックをそのまま16ビット化しています。

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



□3. (2)のロジックの微分部分を、微分動作をするデバイスに置き換えて記述しました。
00076
・デバイス[Buf▲D03]は[■EnabD]の立上りで、1スキャンONします。
・[■DataD]が真の時、[Buf▲D03]が1スキャンONするので、出力はセットされ、ONします。
・[■DataD]が偽の時、[Buf▲D03]が1スキャンOFFするので、出力はリセットされ、OFFします。

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



□3−A .(3)のロジックを1ワード(16ビット)まとめて実行させます
00082
・ (3)のロジックをそのまま16ビット化しています。

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



□4 .(3)のロジックの簡素版。
00089
・[Buf▲D04]が真の時、[■DataD]が真ならば[●Dout04]はONします。
・次のスキャンで[■DataD]が偽になっても[●Dout04]は真なので、そのまま[●Dout04]はONを保持します。
・[■DataD]が偽で[Buf▲D04]が真の時、ロジック全てが偽になるので出力はOFFします。
・ここまで来るとシンプルです。

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



□4−A . (4)のロジックを1ワード(16ビット)まとめて実行させます
00095
・(4)のロジックをそのまま16ビット化しています。

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

◆ トグル フリップ・フロップ


□1. 出力のフィードバックで微分させる。
このコードは、機械リレーで作っても動作します。
00103
・[■TrgT]の立下りで、出力[●Tout01]を反転します。

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

T_flipflop




・ロジックシンボルで表現すれば左の様になります。
・Dラッチ2個で実現できます。Dラッチどうしをタスキ掛けした様な形です。
・上のラダー図表現では、共通の部分を省略しています。












・実際にリレーで組んだ時の動作画像です。
入力2極以外1極でOKですが、4極リレーを使っています。
T_flipflopcircuit diagram



□2. (1)の変形 1スキャン遅れで微分させる。
00110
・反転ロジックには排他的論理和を使っています。
・出力を入力へフィードバックさせる事と、トリガに微分を使う事で実現します。
・[Buf△T02]は[■TrgT]の1スキャン遅れで、微分動作をします。

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



□2−A . (1)のロジックを1ワード(16ビット)まとめて実行させます。
00117
・(1)のロジックをそのまま16ビット化しています。

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



□3 .(2)のロジックの微分部分を、微分動作をするデバイスに置き換えて記述しました。
00123
・124〜125行目を見ると分る様に、排他的論理和の形です。
・入力[Buf▲T03]は[■TrgT]の立上りで1スキャンだけONします。

・排他的論理和の出力を Qとし、入力 A をトリガ(微分動作)、B を出力のフィードバックとすると。

A=0 B=0 → Q=0 (初期状態)


      ↓Q=0なのでB=0
A=1 B=0 → Q=1 (トリガON)

      ↓Q=1なのでB=1
A=0 B=1 → Q=1 (次スキャンでOFF)

      ↓Q=1なのでB=1
A=1 B=1 → Q=0 (トリガON)


      ↓Q=0なのでB=0
A=0 B=0 → Q=0 (次スキャンでOFF)


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



□3−A . (3)のロジックを1ワード(16ビット)まとめて実行させます。
00129
・131〜132行目でチェックしてください。[■Trigger] にカーソルを合わせ、ダブルクリックすると、ON-OFFできます。

◆ 実用例
□1. D Latch と Toggle Flipflop の組合せ。

一時停止などの操作の為に作ってみました。
スイッチを押す毎に一時停止状態と解除状態を反転させます。停止状態にはスイッチを押すと即時移行します。
ただし、解除の時はスイッチを長押しする必要があります。


・入力スイッチは[@R1000] です。スイッチを押す直前の停止状態を[@MR1802] が記憶しています。
・スイッチが押されるとタイマーが動作開始します。
・スイッチを押す直前の停止状態[@MR1802] がFalse ならスイッチ押下と同時にトリガ[@MR1800] がONします。
・[@MR1802] がTrueなら、タイマーアップを待って[@MR1800] がONします。
トリガ[@MR1800] は停止-解除を反転させるトグルフリップフロップの入力になります。

■ D Latch

入力スイッチ[@R1000]が押されると、筒抜けラッチ動作によって、停止/解除状態[@R1002]を[@MR1802]にラッチします。
・これにより、スイッチON中は停止/解除の変化が有っても、トリガ[@MR1800]信号に影響を与えず、発振を起こしません。

■ Toggle Flipflop

・トリガ入力により、停止/解除状態を反転させます。

●PDFを表示