リングバッファ
リングバッファとは
記憶装置(SDなど)や外部装置と通信する際に、装置との間で時間のズレを吸収・調整をするために一時的に情報を記憶する記憶領域のことをバッファといいます
このサンプルではOMRON NX/NJシリーズのSysmac Studioで使用できるリングバッファ(Function Block)を紹介します。
リングバッファはロギング、トレーサビリティ、通信データの一時保存などで使用される代表的なデータ構造です。
リングバッファの例
リングバッファは上図のようなイメージで、12個のバッファにデータを格納しながら取り出しを行っている様子がわかります
Topの位置が書込みポインタで、Bottomが読出しポインタを示していて、オレンジ色はデータが格納されていることを表しています
1つのデータ領域は構造体を使用して構造体の配列でリングバッファを作ります
構造体の例
リングバッファの構造体は以下のようになっています
RingBuffer
|
+- Top
+- Bottom
+- Count
+- Data[] (任意のデータの配列)
Dataは構造体も可能です
シンボル
RingBufPut
データをリングバッファに格納するFB

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

入出力
- RingBuf
- リングバッファの構造体
出力
- Data
- 取り出したデータ
使用例
構造体
- sData, sRingBuffer

ラダー
-
バッファリングするデータは構造体sDataの内容で、持続時間型(Time)とビットデータ10個(B)とDINT型データ10個(DI)をひとつのデータとしてバッファリングします
リングバッファのサイズはsRingBuffer.Dataで指定している1000個になります
PutTriggerの接点がONになると、PutDataの内容をRingBufferに格納します
GetTriggerの接点がONになると、RingBufferからデータを取り出してGetDataに入ります
ソース
よくある質問
リングバッファとは何ですか?
リングバッファは固定長のメモリ領域を循環利用するデータ構造です。
リングバッファはPLCで何に使用しますか?
ロギングや通信データの一時保存に使用します。
ダウンロード
このサイトが役に立ったと感じたら、ご支援いただけると嬉しいです

