ファーストインファーストアウトの使い方(FIFO 三菱PLC)

FA応用

FIFOとは

FIFO(ファーストインファーストアウト)とは日本語でいうと先入れ先出しになります。

物流関係でよく使われますが、先に入れたものから使いなさいということですね。

PLCプログラムで使う場合は、FIFOの命令語を組み合わせて管理することが重要となりますので、それについて説明します。

FIFWとFIFRの処理について

データの管理を考えよう

データの構造と管理エリアをはっきりさせましょう。

FIFOだけでは、管理しきれない、または重複エリアのデバイスを操作すると不具合が生じます。

例:D10からデータを9個管理する場合

D10にはFIFOで管理されたデータの個数が入ります。

D11-19には、データが入ります。

FIFOでは、シングルワード管理しかできません。

FIFWとFIFR

FIFWはデータの書き込み処理、FIFRはデータの読出し処理となります。

書き込みタイミングでは、処理をパルス化しないと連続で書き込みまたは読み込み処理を実行します。

また、FIFWとFIFRの処理は同じスキャンで実行すると不具合が発生する可能性があるので、タイミングをずらすことを強くお勧めします。

データの操作について

データクリア処理

全部のデータをクリアする場合は、K0(定数0)をD10-19に転送することでクリアできます。

特定データの削除

何番目のデータだけ削除したい場合はFDELを使います。FDELの場合、データの整合性を保ってくれるので、あとの処理が楽になります。

特定データの検索

特定データの場所を特定する場合、SER命令を使います。

この関数で特定の条件のデータを検索して削除するようにします。

※このデータ操作をするときもFIFO命令と同じスキャンで実行しないようにしたほうがいいです。

ダブルワード以上のデータを管理する

2ワード以上のデータを管理したい場合もありますね。

その場合は、FIFOのデータはあくまでインデックス番号として使います。

データ詳細の管理エリアを作成または、事前に準備して、読み出したインデックス番号から詳細情報を転送します。

インデックス番号を複数にすれば、多重ワード(レシピ情報や長い名前)も読出し可能となります。

時間でFIFOをする場合

まずは、時刻を2ワードに変換します。

時刻変換処理内容は、下記の表のようにします。

32bitで時間情報をラックに入庫した時間情報として書き込みをします。

FIFO時の処理は、時間情報の大小判別ができるので一番古い=一番値が小さいとなります。

MIN命令も1ワード処理なので、FOR-NEXTで格納されたデータを検索して最小値を探します。

参考プログラムでは、インデックスとFOR-NEXTを使って最小データの番号をD300に転送しています。

こうすることで時間のデータでもFIFO処理も可能となります。

FIFOでも検索したくない場合は、このデータを複製して、H7FFFFFFFを代入することで検索されなくなります。

禁止棚とか保留製品とかは、こういう処理が必要となるので、データを2重で持つ必要があります。実入庫データ管理エリアとFIFO検索用エリアのように設計するといいですね。

まとめ

信号が入った順番でFIFOする場合でも、優先順位をつけて処理したい場合は、SER命令とFDELでうまく組み合わせて実行するとうまく処理できます。

使い慣れるとFIFO処理は専用命令使わなくてもできることがわかりますが、まずは、FIFO命令から使ってみてください。

コメント

タイトルとURLをコピーしました