1. TOP
  2. KEYENCE
  3. KV-X/KV
  4. データ処理
  5. リングバッファ

KVKV-X

ダウンロード

RingBufferKVLib.kufb (ライブラリのみ)
RingBufferKVXLib.kufb (ライブラリのみ)

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

概略

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

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

RingBufferGif

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

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

Dataは構造体も可能です

シンボル

RingBufPut

データをリングバッファに格納するFB
ringbufputfbkv
入出力
RingBuf
リングバッファの構造体
入力
Data
バッファするデータ

RingBufGet

データをリングバッファに格納するFB
ringbufgetfbkv
入出力
RingBuf
リングバッファの構造体
出力
Data
取り出したデータ

RingBufPut

データをリングバッファに格納するFB
ringbufputfb
入出力
RingBuf
リングバッファの構造体
入力
Data
バッファするデータ

RingBufGet

データをリングバッファに格納するFB
ringbufgetfb
入出力
RingBuf
リングバッファの構造体
出力
Data
取り出したデータ

使用例

構造体

sData

構造体

sRingBuffer

構造体

ラダー

ラダー


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

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

構造体

sData

構造体

sRingBuffer

構造体

ラダー

ラダー

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

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

ソース

RingBufPut
RingBufGet

この記事へのコメント