リングバッファを使用するメリット

  • SDカード書込み待ちによるデータ欠落を防止できる
  • 高速サンプリングが可能になる
  • タスク周期を安定させられる
  • 一時的な書込み遅延を吸収できる

収集周期の考え方

SDカードの書込み時間は一定ではありません。
そのため1ms周期でデータ収集しながら、100ms周期で書込み処理を実行する構成が有効です。

リングバッファロギングの仕組み

構造体のデータをリングバッファに一時的に格納します
SDカードに書込みするときにリングバッファからデータを読み出して書込みを行います
SDカードへの書込み時間はバラツキがあるので緩衝材となるバッファを設けることで収集周期を短くすることができます

リングバッファロギング構成図

使用するファンクションブロック<

リングバッファのファンクションを使います

リングバッファ書込みファンクション

リングバッファ読出しファンクション

ロギング用構造体

ロギング用構造体

ラダープログラム例

リングバッファロギングのラダープログラム例

SDカード書込み処理

LogFlgの接点がONになるとRingBufPutファンクションでデータをリングバッファに格納します
リングバッファのカウントが0より大きくなれば(LogExistがON)リングバッファからデータを読み出してファイルの書込み処理をします
書込み処理は「もっとも簡単ロギング」と同様ですが、書込み完了でリングバッファのカウントが0より大きければ再度書込み処理を実行する処理を追加しています

よくある質問

リングバッファはなぜ必要ですか?

SDカードの書込み時間は一定ではないため、収集処理と書込み処理を分離するために使用します。

リングバッファ容量はどれくらい必要ですか?

最大イベント発生数とSDカード書込み時間から決定します。

高速サンプリングに向いていますか?

はい。収集処理を高速タスクで実行できるため高速ロギングに適しています。

EventCsvやEventBinとの違いは何ですか?

本ページはリングバッファを利用した基本構成であり、保存形式はCSV・バイナリの両方へ応用できます。

ダウンロード

この記事へのコメント