コンテンツにスキップ

入力ポートでのデータ集約

複数コンポーネントからナノ秒単位でわずかに異なるタイムスタンプで届くデータを、指定したウィンドウ幅(ミリ秒)の区間ごとに1つのレコードへまとめて書き込む。

本事例で使用しているプロジェクトファイルです。通常版と、PLCコレクタをシミュレーションモードで設定した確認用ファイルを用意しています。

※SpeeDBee Synapseバージョン4.9.9以降でインポートできます。

  • 複数コンポーネントのデータが別々のレコードになる理由
  • 入力ポート設定の集約機能を使ってデータを1つのレコードにまとめる方法

PLC-AとPLC-Bに接続したPLCコレクタで、各PLCからtemperatureとpressureを収集し、CSVシリアライザの同じ入力ポートへ入力する。入力されたデータを設定したウィンドウ幅で区切り、各ウィンドウ区間内のデータを1つのレコードにまとめて出力する。

コンポーネントデータアドレス内容
PLCコレクタ(PLC-A)temperatureD0100温度(℃)
PLCコレクタ(PLC-A)pressureD0101圧力(kPa)
PLCコレクタ(PLC-B)temperatureD0100温度(℃)
PLCコレクタ(PLC-B)pressureD0101圧力(kPa)

PLC-AとPLC-Bで同じ種類のデータを収集していても、PLCごとにデータを収集するタイミングは完全には一致しません。タイムスタンプはナノ秒単位で付与されるため、わずかなタイミング差によるタイムスタンプの違いでレコードが分かれます。

集約を設定しない場合、CSVシリアライザからは次のように出力されます。PLC-AとPLC-Bのデータが別々のタイムスタンプになっているため、各レコードには片方のPLCのデータだけが入ります。

timestampPLC-A:pressurePLC-A:temperaturePLC-B:pressurePLC-B:temperature
13:08:04.947378445+09006825
13:08:04.949666433+09008231
13:08:05.947378445+09006825
13:08:05.949666433+09008331

※日付部分(YYYY-MM-DD)は省略しています。

このように、タイムスタンプの異なるデータはレコードが分かれて出力されてしまうため、集約機能を使って同じウィンドウ区間内のデータを1つのレコードにまとめます。

  • PLCコレクタ(PLC-AとPLC-Bからデータを収集)
  • CSVシリアライザ(集約したデータをCSV化)
  1. PLCコレクタでPLC-AとPLC-Bのデータを収集
  2. PLC-AとPLC-Bから収集したデータを、CSVシリアライザへ入力
  3. CSVシリアライザの入力ポート設定の集約機能で、設定したウィンドウ幅で区切った各区間内のデータを同じレコードにまとめる
  4. 集約したデータを、CSVの1つのレコードとして出力
  1. PLCコレクタを設定します。 PLC-AとPLC-Bそれぞれの接続先、収集対象のアドレス、データ型などを指定し、temperatureとpressureを収集できるようにします。 今回の設定では、各PLCのD0100をtemperatureとして、D0101をpressureとして収集します。

  2. CSVシリアライザを設定します。 今回は、切替件数を10件に設定し、10レコードごとに1ファイルとして出力されるようにします。

  3. CSVシリアライザ設定後、CSVシリアライザの入力ポートに各PLCコレクタを接続します。 複数のコンポーネントから同じ入力ポートへデータが入力される構成にします。

  4. CSVシリアライザの入力ポートを右クリックして入力ポート設定を開き、集約するをONにします。 ウィンドウ幅を指定します。今回は1秒に設定し、各ウィンドウ区間内(1秒間)のデータを同じレコードにまとめます。

  5. 入力されるデータに対して集約の設定を行います。今回は正規表現で対象を指定します。 コンポーネント名に.*、データ名に.*を指定し、CSVシリアライザに入力されるすべてのデータを対象にします。

  6. 集約した値だけを出力するため、RAW DATAのチェックを外します。指定した入力データの集約トグルをクリックし、集約オプションから最新値を選択します。今回は、ウィンドウ区間内の最新値のみを使用します。

  7. 設定を保存し、各コンポーネントを起動します。

同じウィンドウ区間に含まれるデータは、CSVの1つのレコードとして出力されます。

集約後CSVのサンプルをダウンロード

以下は、集約後に出力されたCSVから一部のレコードを抜粋したものです。このように、各コンポーネントのデータに付与されたナノ秒単位のタイムスタンプが異なっていても、同じウィンドウ区間内のデータであれば1つのレコードにまとめて出力できます。

timestampPLC-A:pressure.newerPLC-A:temperature.newerPLC-B:pressure.newerPLC-B:temperature.newer
14:37:13.551084040+090071268634
14:37:14.551084040+090071268734
14:37:15.551084040+090071278735
14:37:16.551084040+090072278835
14:37:17.551084040+090068258231
14:37:18.551084040+090068258331

※日付部分(YYYY-MM-DD)は省略しています。