PLCnextデータロガーデータをCSVにエクスポート:ステップバイステップガイド
産業アプリケーションからの値のログ記録は多くのお客様にとって主要な特徴であり、一部のアプリケーションでは変数の数が非常に多くなるため、このデータログをネイティブかつ簡単に設定する方法が必要です。
以下では、ネイティブなデータログサービスコンポーネントについて詳しく見ていき、このサービスからCSVファイルを生成する方法を確認します。
データロガーの設定とOPC UA Historical Accessでの使用については、以下のリンクで詳細を確認できます:
- データロガーの設定とOPC UA Historical Accessでの使用
- リアルタイムデータロガー - PLCnext Info Center
データログセッションを設定すると、記録された変数のすべての値を含む*.dbファイルが作成されます。この*.dbファイルはデータベースファイルですが、Sqlite3やDB Browserのようなツールを使わないと値を閲覧できません。
多くのお客様はすでに*.csvファイルに慣れ親しんでいるため、このデータベースをCSVファイルにエクスポートする方法を見ていきます。すべてのPLCnextコントローラに搭載されているSqlite3ツールが、このエクスポートに必要なすべてのツールを提供しています。
データベース作成時にデータベース名は任意に設定できますが、値を含むデータベース内のテーブルに特定の名前を設定することはできません。幸い、Sqlite3ツールを使用して、コマンド「Sqlite3 <データベース名> .tables」でデータベース内のテーブルを表示できます。すべての具体的なコマンドは、Sqlite3のヘルプページまたはこのページで確認できます。
テーブル名がわかれば、このテーブルからすべてのデータを選択し、CSVファイルにエクスポートできます。
プロセスを少し簡単にするために、データベースからエクスポートするための2つのスクリプトをリンクします。もちろん、ニーズに合わせてスクリプトを調整できます!
残念ながら*.shファイルをアップロードできないため、以下に2つのファイルの内容を記載します。
まず、ISO8601タイムスタンプ形式用のファイル:
ExportSQL2CSV_ISO.sh
#!/bin/bash
name_of_database="${1:?Missing database}"
name_of_database_no_ext=${name_of_database::-3}
# テーブル名を取得
name_of_table=$(sqlite3 $name_of_database .ta)
# 最初のエントリの日時を取得して出力ファイル名に使用
DateTime=$(sqlite3 $name_of_database "SELECT strftime('%Y_%m_%d_%H_%M_%S',Timestamp) from $name_of_table limit 1;")
# ファイル名を作成
output_filename=${name_of_database_no_ext}_${DateTime}.csv
# CSVファイルにエクスポート
sqlite3 -header -csv -separator ";" $name_of_database "SELECT * from $name_of_table;"\
> $output_filename
次に、RAWタイムスタンプ形式用のファイル:
ExportSQL2CSV_RAW.sh
#!/bin/bash
name_of_database="${1:?Missing database}"
name_of_database_no_ext=${name_of_database::-3}
# テーブル名を取得
name_of_table=$(sqlite3 $name_of_database .ta)
# 最初のエントリの日時を取得して出力ファイル名に使用(RAWタイムスタンプ変換)
DateTime=$(sqlite3 $name_of_database "SELECT strftime('%Y_%m_%d_%H_%M_%S',(Timestamp - 4611686018427387904)/10000000 - 62135596800,'unixepoch') from $name_of_table limit 1;")
# ファイル名を作成
output_filename=${name_of_database_no_ext}_${DateTime}.csv
# CSVファイルにエクスポート(タイムスタンプを可読形式に変換)
sqlite3 -header -csv -separator ";" $name_of_database "SELECT \
strftime('%Y-%m-%d %H:%M:%f',(Timestamp - 4611686018427387904)/10000000 - 62135596800,'unixepoch') AS Time,\
* from $name_of_table;"\
> $output_filename
これらのファイルはスクリプトであるため、実行フラグを追加するのを忘れないでください:
chmod +x ExportSQL2CSV_*.sh
その後、スクリプトを呼び出します。スクリプトの呼び出し例は以下の通り:
./ExportSQL2CSV_ISO.sh <データベースへのパス>
スクリプトが完了すると、データベース名とデータベースの最初のエントリの日時を含む名前のCSVファイルが見つかります:
これで、ネイティブDataLoggerサービスコンポーネントを使用して記録したすべてのデータを含むCSVファイルが得られました。
cronツールを使用して、このファイルの作成を毎時間または毎日自動化することもできます。
ご質問やご意見があれば、お気軽にお問い合わせください!
産業技術
- SPICEでのコマンドラインインターフェースの使い方
- CMからEMS、MSPへ:エレクトロニクス製造サービスの進化を辿る
- COVID-19が浮き彫りにした3Dプリンティングの医療分野における重要な役割
- リードジェネレーション投資のROIを最大化する
- 機械学習で革命を起こすトップ4業界
- ISO 9001を製造戦略に統合:品質と成長を牽引する
- Go言語で静的ファイルを簡単に提供:実証済みアプローチ
- PLCnextでIXMLSerializableを使用してXMLからC++クラスを生成
- ミルファイル(平ヤスリ)完全ガイド:木工・金工の必須工具
- C言語 ファイル入出力: fopen, fprintf, fread, fseek をマスターする
- C言語ヘッダーファイルの理解:種類、使い方、ベストプラクティス