1. TOP
  2. KEYENCE
  3. KV-Xシリーズ
  4. ファンクションブロック
  5. リングバッファ

リングバッファ

ダウンロード

SampleRingBufferFB.zip

※ 動作確認はシミュレータで行いました

概略

記憶装置(SDなど)や外部装置と通信する際に、装置との間で時間のズレを吸収・調整をするために一時的に情報を記憶する記憶領域のことをバッファといいます
リングバッファはバッファの中でも代表的なバッファのアルゴリズムです

リングバッファは下図のようなイメージで、12個のバッファにデータを格納しながら取り出しを行っている様子がわかります
Topの位置が書込みポインタで、Bottomが読出しポインタを示していて、オレンジ色はデータが格納されていることを表しています
1つのデータ領域は構造体を使用して構造体の配列でリングバッファを作ります

RingBufferGif

リングバッファの構造体は以下のようになっています

RingBuffer
|
+- Top
+- Bottom
+- Count
+- Data[] (任意のデータの配列)

Dataは構造体も可能です

シンボル

RingBufPut

データをリングバッファに格納するFB
RingBufferPut

入出力
RingBuf = リングバッファの構造体
入力
Data = バッファするデータ

RingBufGet

データをリングバッファに格納するFB
RingBufferGet

入出力
RingBuf = リングバッファの構造体
入力
Data = 取り出したデータ

使用例

構造体

sData
構造体
sRingBuffer
構造体

ラダー

ラダー
バッファリングするデータは構造体sDataの内容で、時刻(DateTime)とビットデータ10個(B)とDINT型データ10個(DI)をひとつのデータとしてバッファリングします
リングバッファのサイズはsRingBuffer.Dataで指定している1000個になります

PutTriggerの接点がONになると、PutDataの内容をRingBufferに格納します
GetTriggerの接点がONになると、RingBufferからデータを取り出してGetDataに入ります

ソース

RingBufPut
RingBufGet

この記事へのコメント