PLCイベントログをバイナリファイルとして保存する方法
イベント方式ロギングのメリット
- 変化があった時だけ記録するためデータ量を削減できる
- SDカード寿命を延ばせる
- 高速変化を効率的に保存できる
- 異常解析に必要なデータだけ残せる
CSV保存とバイナリ保存の違い
| 項目 | CSV | バイナリ |
|---|---|---|
| 可読性 | 高い | 低い |
| ファイルサイズ | 大きい | 小さい |
| 速度 | 遅い | 速い |
| 解析 | 容易 | 専用ツール必要 |
イベントログ保存の仕組み
メモリの値が変化したらデータを残します
定周期でリングバッファを編集用のリングバッファにコピーします
コピーしたリングバッファに溜まっているデータをWriteBufにデータを整列させてます
整列したWriteBufは定期的または一杯になったら構造体をまるごとFileWriteVarでSDメモリに書き込みます
FileWriteVar命令はメモリの状態をそのままSDメモリに書き込むためバイナリファイルになります
ファイルを開くためには上位側でアプリケーションが必要です

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



イベントログ用構造体

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

定周期タスク側の処理


FileWriteVarによるSDカード保存
プライマリタスクでは監視しているメモリの値が変化したときにRingFilePutで時刻と変数と値をバッファに追加します
値の変化はビット情報ではXOR命令で前回値と比較してOFF→ON、ON→OFFを監視します
数値では前回値から今回の値を引いて変化の範囲(rangeDInt)を超ているかを監視します
定周期タスクでは10秒間隔もしくはデータが5000個溜まったらリングバッファを編集用のリングバッファ(EventLogRingBufferCopy)にコピーします
コピーしたリングバッファに溜まっているデータを書込み用バッファ(EventLogWriteBuffer)に追加していきます
時刻を監視して分の単位が変化するか、書込み用バッファのカウントが55000個を超えるとFileWiteVar命令でEventLogWriteBuffer構造体を丸ごとSDカードに書き込みます
よくある質問
FileWriteVar命令で保存したファイルはテキストですか?
いいえ。構造体メモリをそのまま保存するためバイナリ形式になります。
リングバッファを使う理由は何ですか?
イベントが短時間に集中してもデータ欠落を防ぐためです。
NX102でも使用できますか?
基本的にNX/NJシリーズで利用できます。
ダウンロード
このサイトが役に立ったと感じたら、ご支援いただけると嬉しいです
