リングバッファとFileWriteで高速ロギングする方法
この方式を使用する理由
FilePuts命令は扱いやすい反面、一度に書き込めるデータ量に制限があります。 大量のデータを高速に保存する場合はFileWrite命令を利用した方が効率的です。
リングバッファを使用することでPLCスキャン時間への影響を抑えながら、 SDカードへ連続的にデータ保存できます。
概略
構造体のデータをリングバッファに一時的に格納します
SDカードに書込みするときにリングバッファからデータを読み出して書込みを行います
SDカードに文字列を書き込むFilePuts命令は一度に1986byte書込みできるのに対してバイナリデータを書き込むFileWrite命令では一度に最大65534byteの書込みが可能です
しかし、FileWrite命令で文字を書き込むときは文字列をバイト配列に変換する必要があるためプログラムが複雑になります

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

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


ロギング用構造体

ラダープログラム例
プライマリタスク

定周期タスク

プライマリタスクではデータをリングバッファに格納ます
RingBufPutでリングファイルにデータを格納して、LogFlgの立下りで空白データを格納してファイルの区切り(ファイル変更)の印とします
定周期タスクではリングバッファから読み出してSDカードに書き込みをします
バイト配列に変換してSDカードに書き込むTraceSDWriteFBの処理に時間がかかるため10ms~のタスク周期で調整します
リングバッファにデータがあればTraceSDWriteを実行し空白データが見つかるまで実行中(Busy)になり、空白データが見つかればファイルを閉じ正常終了(Done)を出力して終了します
よくある質問
FileWriteとFilePutsの違いは何ですか?
FileWriteはバイナリデータを高速に書き込めます。
リングバッファを使う理由は何ですか?
ロギング処理によるスキャン時間増加を防ぐためです。
どのPLCで使用できますか?
OMRON NXシリーズおよびNJシリーズで利用できます。
SDカードへの連続保存は可能ですか?
リングバッファを介して継続的に保存できます。
