イベント方式ロギングのメリット

  • 変化があった時だけ記録するためデータ量を削減できる
  • SDカード寿命を延ばせる
  • 高速変化を効率的に保存できる
  • 異常解析に必要なデータだけ残せる

CSV保存とバイナリ保存の違い

項目CSVバイナリ
可読性高い低い
ファイルサイズ大きい小さい
速度遅い速い
解析容易専用ツール必要

イベントログ保存の仕組み

メモリの値が変化したらデータを残します
定周期でリングバッファを編集用のリングバッファにコピーします
コピーしたリングバッファに溜まっているデータをWriteBufにデータを整列させてます
整列したWriteBufは定期的または一杯になったら構造体をまるごとFileWriteVarでSDメモリに書き込みます

FileWriteVar命令はメモリの状態をそのままSDメモリに書き込むためバイナリファイルになります
ファイルを開くためには上位側でアプリケーションが必要です

イベントログ記録システム構成図

使用するリングバッファFB

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

RingBufPut

RingBufGet

EventLogSDWriteCSV

イベントログ用構造体

イベントログ保存用構造体

プライマリタスク側の処理

リングバッファ格納処理ラダー

定周期タスク側の処理

イベントログ保存処理ラダー1

イベントログ保存処理ラダー2

FileWriteVarによるSDカード保存

プライマリタスクでは監視しているメモリの値が変化したときにRingFilePutで時刻と変数と値をバッファに追加します
値の変化はビット情報ではXOR命令で前回値と比較してOFF→ON、ON→OFFを監視します
数値では前回値から今回の値を引いて変化の範囲(rangeDInt)を超ているかを監視します

定周期タスクでは10秒間隔もしくはデータが5000個溜まったらリングバッファを編集用のリングバッファ(EventLogRingBufferCopy)にコピーします
コピーしたリングバッファに溜まっているデータを書込み用バッファ(EventLogWriteBuffer)に追加していきます
時刻を監視して分の単位が変化するか、書込み用バッファのカウントが55000個を超えるとFileWiteVar命令でEventLogWriteBuffer構造体を丸ごとSDカードに書き込みます

よくある質問

FileWriteVar命令で保存したファイルはテキストですか?

いいえ。構造体メモリをそのまま保存するためバイナリ形式になります。

リングバッファを使う理由は何ですか?

イベントが短時間に集中してもデータ欠落を防ぐためです。

NX102でも使用できますか?

基本的にNX/NJシリーズで利用できます。

ダウンロード

この記事へのコメント