HOME > ソフテックだより > 第407号(2022年8月3日発行) 技術レポート「ターク・ジャパン取り扱い製品向けデータロガー開発」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第407号(2022年8月3日発行)
技術レポート

「ターク・ジャパン取り扱い製品向けデータロガー開発」

1. はじめに

この度ソフテックでは、ターク・ジャパン株式会社が扱うリモートI/Oやワイヤレスコントローラ製品とModbus TCPプロトコルで通信し、レジスタのデータを取得・ロギングするデータロガーアプリケーション「センサデータロギングツール」を受託開発いたしました。本号ではその開発に触れ、アプリの使用方法についても解説していきます。

2. 開発内容

2-1. 背景

同社が扱うTURCK製リモートI/Oやワイヤレスコントローラは、EtherNet/IP、Modbus TCP、PROFINETのマルチプロトコル対応で、様々なメーカのPLCやNC等のコントローラと接続が可能です。従来のニーズではPLCやNC等でのデータ収集及び制御を完結するシステムがほとんどでしたが、昨今ではDX化の流れによって、PLCやNCでの制御と並行して、PCによる現場データのデータ収集及びデータ活用や、様々な場所にセンサが導入される事で、より簡単にセンサデータのモニタリングを求められる様になりました。そうした要望を受けてこのたび弊社にご依頼いただきましたのが、複数のプロトコルを同時に通信可能な製品の特徴を活かし、Modbus TCPプロトコルでLAN上のリモートI/O機器と周期的に通信し、データを収集・ログ出力するWindowsアプリ「センサデータロギングツール」(以下、本アプリ)の開発です。

2-2. 規格・環境

Modbus TCPとは、PLCとの通信のために策定されたModbusプロトコルを、TCP/IPというインターネット通信プロトコルを基盤に拡張したもので、開発は25年前ながら今なお多くの産業向け機器に採用される通信規格です。Modbus TCPについては第155号「PLCでModbus TCP通信 〜横河電機社製での実装例〜」やその後の号でも何度か取り上げておりますので、ぜひページ最下部のリンクからご覧ください。
また、本アプリは最新でない環境でも実行できるように.Net Framework 3.5で設計されているため、Windows 7以降の32bit/64bitシステム上で使用可能です。言語は日本語と英語に対応しています。

2-3. アプリの機能

本アプリの主な機能は、次のようなものです。

-
対象のリモートI/O のIPアドレスや読み出すレジスタアドレス等の設定をすることで、リモートI/Oのデータをアプリ内のレジスタにリマップできる。
-
リマップしたアプリ内レジスタのデータに対してbit抽出や数式によるスケーリングを設定できる。
-
複数の加工したデータをまとめてCSVやエクセル形式のログファイルに出力できる。
-
リモートI/O機器との通信のモニタリングができる。

これらの機能によって、簡易的ながらも、TURCK社製/Banner Engineering社製デバイスのユーザーが、各機器のデータを一括で監視し、またログから長い期間のデータに対して分析をかけることが可能になります。

3. センサデータロギングツールの使用方法

ここから先では、本アプリの使用方法をデモンストレーションしていきます。デモンストレーションでは次の機器を使用します。

-
TURCK社製 マルチプロトコル対応IO-Linkマスタ「TBEN-S2-4IOL」
-
TURCK社製 非接触式IO-Link対応ロータリエンコーダ「RI360P0-QR24M0-IOLX2-H1141」
-
Banner Engineering社製 2.4GHz帯マルチホップ無線状態監視システム「DXM700-B1R4」「DX80DR2M-H6」「QM30VT1」

機器構成は次の画像に示します。

クリックで拡大

上記構成におけるTBEN-S2-4IOLのレジスタアドレス割付は下表の通りです。

表1.  本号におけるTBEN-S2-4IOLのレジスタアドレス割付

レジスタ番号 モジュールポート 項目
2 (0x0002) IO-Link Port1 RI360P0: 角度情報(シングルターン)
3 (0x0003) RI360P0:
回転数情報(マルチターン) bit3-15
マルチターンエラー bit2
回転エレメント未検出 bit1
回転エレメント検出状態不安定 bit0
4-17 (0x0004 - 0x0011) なし
18-33 (0x0012 - 0x0021) IO-Link Port 2 なし
34-49 (0x0022 - 0x0031) IO-Link Port 3 なし
50-65 (0x0032 - 0x0041) IO-Link Port 4 なし

上記構成におけるDXM700のレジスタアドレス割付は下表の通りです。

表2.  本号におけるDXM700のレジスタアドレス割付

レジスタアドレス (番号) 項目 端末
0 (0x0000) 温度(摂氏) DX80 – QM30
1 (0x0001) 温度(華氏)  
2 (0x0002) Z軸RMS速度  
3 (0x0003) X軸RMS速度  
4 (0x0004) Z軸RMS加速度  
5 (0x0005) X軸RMS加速度  

筆者注) DXM700のレジスタアドレス割付はBanner Engineering社によって頒布されている「DXM Configuration Tool」によって変更可能です。

なお、機器側の設定方法については本号ではご説明いたしませんので、各機器のマニュアルをご参照ください。

3-1. データ取得設定の登録

本アプリを使用するには、まず、「データ取得設定」を登録します。
初めて本アプリを起動すると、画面下部の【データ取得設定】のテーブルに、設定が一つ登録されています。

クリックで拡大

下部の[編集]ボタンをクリックすると、この設定を編集するダイアログが表示されます。このダイアログで、ネットワーク上のどのリモートI/Oのどのアドレスのデータを、アプリ内レジスタのどこにリマップするかを指定できます。画像では、ローカルネットワーク上のアドレス"192.168.1.250"にあるリモートI/O(今回の場合、TBEN-S2-4IOL)のレジスタアドレス2から2WORD分を取得し、アプリ内レジスタの0からのエリアにリマップするよう指定しています。

クリックで拡大

設定ダイアログで[OK]を選択すると、【データ取得設定】のテーブルに設定が反映され、【データロギング設定】のテーブルには指定したIPアドレスと対応するレジスタアドレスがリマップされています。

クリックで拡大

このまま、ローカルネットワーク上のアドレス"192.168.1.240"にあるDXM700からもデータを取得するよう登録していきます。
下部の[追加]ボタンをクリックすると、データ取得設定を新規追加するダイアログが表示されます。今度は、"192.168.1.240"のレジスタアドレス0から6WORD分取得し、アプリ内レジスタの6からのエリアにリマップするよう指定しました。

クリックで拡大

設定ダイアログで[OK]を選択して、【データ取得設定】のテーブルと【データロギング設定】のテーブルに設定とリマップが反映されたことを確認します。

クリックで拡大

これで「データ取得設定」の登録は完了です。画面上部の[接続]ボタンを押すと、右上のステータスが"オンライン"になり、リモートI/Oのレジスタのデータを取得できます。

クリックで拡大

3-2. データロギング設定の登録

取得したデータを加工したり、ログファイルに出力したりするには、「データロギング設定」を編集します。
【データロギング設定】のテーブルでリマップされたデータの一つを選択して下部の[編集]ボタンをクリックすると、このデータについて設定を編集するダイアログが表示されます。画像では、取得したデータを符号なし16bit整数(UINT)として扱い、"0.0055 * x"という式でスケーリングするよう指定しています。

クリックで拡大

設定ダイアログで[OK]を選択すると、【データロギング設定】のテーブルに設定が反映されます。リモートI/Oに接続すると、取得したデータが設定した数式通りに加工されていることを確認できます。

クリックで拡大

スケーリングの他に、bit抽出やバイトスワッピングを指定できます。
画像では、取得したデータのうちbit3から13bit分を抽出して符号なし整数に変換するよう指定しています。

クリックで拡大

バイトスワッピングは、次のようなルールで受信したバイトデータの順序を変換します。

-
[しない]選択:
(16bitの場合) 0x12 0x34 => 0x12 0x34
(32bitの場合) 0x12 0x34 0x56 0x78 => 0x12 0x34 0x56 0x78
-
[16bit]選択:
(16bitの場合) 0x12 0x34 => 0x34 0x12
(32bitの場合) 0x12 0x34 0x56 0x78 => 0x34 0x12 0x78 0x56
-
[32bit]選択:
(32bitの場合) 0x12 0x34 0x56 0x78 => 0x78 0x56 0x34 0x12

まだリマップされていないアプリ内レジスタには、リマップされたデータや自分より上位のスケーリング済みデータをソースとしてデータロギングアイテムを登録できます。
画像では、ローカルネットワーク上のアドレス"192.168.1.250"のレジスタアドレス3をソースとしてbit2を1bit抽出するよう指定しています。

クリックで拡大

このまま表 1、表 2に示したリモートI/O機器のレジスタアドレス割付に合わせて、データロギングアイテムの登録を行っていきます。

クリックで拡大

このように、本アプリではリモートI/Oのアドレス範囲ごとにリマップし、リマップしたデータ1つずつについて、データの加工を指定することができます。
また、スケーリングしたデータをソースにしてさらに別の計算式で多重にスケーリングをかけることもできます。

3-3. ログ出力

【データロギング設定】テーブルの【ログ出力】の列にチェックが入っていれば、その項目をログファイルに出力できます。画像の状態で画面上部の[ロギング開始]ボタンをクリックすると、ステータスが"ログ実行中"になり、取得したデータが【ログ保存先】で指定したフォルダにファイル出力されます。

クリックで拡大

出力されたファイルは画像のようなCSV形式です。

クリックで拡大

ログはCSV形式のみではなく、Excelテンプレートや、開いているExcelブックに出力できます。
Excel出力を設定するには、一度切断し、画面上部の[詳細設定]ボタンをクリックします。

クリックで拡大

表示された詳細設定ダイアログの【Excel出力】タブで[Excel出力]にチェックを入れ、テンプレートファイルを指定し、先ほどと同じようにメイン画面上部の[ロギング開始]ボタンをクリックします。

image16

すると、指定したテンプレートファイルをもとに、ログファイルと同じフォルダにxlsxファイルが生成されます。例えば、画像左のようなテンプレートをもとにすると、画像右のようなxlsxファイルがログファイルフォルダに作成されます。

クリックで拡大

3-4. 通信のモニタリング

画面上部の[通信モニタ]ボタンをクリックすると、通信モニタ画面が開きます。

クリックで拡大

通信モニタ画面上部の[開始]ボタンをクリックすることで、通信関係のイベントのモニタリングを開始できます。(ボタンの表示は[停止]に変わります)

クリックで拡大

-
タイムスタンプ: イベントが記録された時刻
-
ローカルIP: 操作PCがリモートI/O機器と通信する際に使用したIPアドレス("0.0.0.0"はOSによって自動決定されており不明であることを示します)
-
リモートIP: 対象のリモート機器のIPアドレス
-
オフセット: イベントに関連したデータ取得コマンドのオフセット値
-
データ長: イベントに関連したデータ取得コマンドのデータ長
-
格納先先頭データID: イベントに関連したデータ取得コマンドの格納先先頭データID
-
内容: イベントの内容(受信成功の場合、受信データが1WORDずつカンマ区切りで10進数整数として表示されます)

3-5. 各設定項目の概説

3-5-1. メイン画面 - ログ保存設定・ログ自動停止

クリックで拡大

-
ログ保存先: ログファイルの保存先ディレクトリ
-
[参照]ボタン: ログ保存先の選択ダイアログを表示します
-
保存先フォルダ: ログ保存先ディレクトリをエクスプローラーで開きます
-
データ取得間隔: リモートI/O機器からデータを取得する間隔を設定します。
-
ログ自動停止(件数): 有効にしているとき、ログの件数が指定件数に達したらログ出力を自動停止します。
-
ログ自動停止(日時): 有効にしているとき、システムの時刻が指定日時に達したらログ出力を自動停止します。

3-5-2. 詳細設定 - Modbus TCP

image21

-
ローカルIPアドレス: リモートI/O機器と通信する際に使用する操作PCのIPアドレスを指定します。空欄の場合はOSによって自動で選択されます。
-
データ取得間隔: リモートI/O機器からデータを取得する間隔を指定します。(メイン画面の同名項目と一致します)
-
タイムアウト: データ取得のコマンドをリモートI/O機器に送出した後、応答受信を待ち合わせる時間を指定します。
-
リトライ回数: 応答受信がタイムアウトした際に、コマンドを再度送出して応答を待つ回数を指定します。
-
ソケットクローズ: [あり]を選択すると、データ取得のたびにリモートI/O機器との通信を切断します。(データ取得間隔が30秒以上の場合のみ)
-
キープアライブ: リモートI/O機器との通信を維持中に、接続が引き続き有効であるか確認するキープアライブシグナルを送出するまでの時間を指定します。
-
接続ディレイ: リモートI/O機器までの通信経路が確保できることを確認後、実際に接続するまでの時間を指定します。
-
タイムアウト時: (リトライにもかかわらず)応答受信がタイムアウトした際に、アプリ内レジスタの値を書き換えるかどうかを指定します。

3-5-3.  詳細設定 - ログ保存

image22

-
区切り文字: CSV(Character Separated Value)形式のファイルを出力する際に、区切り文字として使用する文字を指定します。タブ文字を指定する場合は"\t"と入力します。
-
ファイル分割: [日付ごと]が選択されている場合、システムの日付が変更されるたびに新しいログファイルが作成されます。[ログ件数]が選択されている場合、指定した件数ごとに新しいログファイルが作成されます。
-
CSV書き込み頻度: [自動]が選択されている場合、取得・加工したデータをログファイルに書き込む頻度はアプリの稼働状況に応じて自動で決定されます。[ログ件数]が選択されている場合、指定した件数ごとにデータをログファイルに書き込みます。

3-5-4. 詳細設定 - Excel出力

image23

-
エクセル出力: 有効にしているとき、CSVファイルと同時にエクセル形式のファイルまたは開いているエクセルブックにデータを書き込みます。
-
[テンプレートファイル]選択: 指定したテンプレートファイルをもとに新たにエクセル形式のファイルを作成し、ログ保存先ディレクトリに出力します。
-
[開いているブック]選択: EXCELで開いているブックのアクティブシートにログを出力します。ファイル分割設定に関わらず、アクティブシートに出力し続けます。この項目を選択するには、EXCELが起動されていて一つ以上のブックが選択されている必要があります。
-
設定情報: 有効にしているとき、指定したセルを左上セルとした範囲にデータロギング設定情報を出力します。
-
データ開始セル: データを書き込むエリアの左上セルを指定します。

4. おわりに

ここまで、ターク・ジャパンが取り扱うリモートI/Oやワイヤレス製品と通信してデータのロギングを行う、弊社開発のデータロガーアプリ「センサデータロギングツール」についてご紹介しました。
スマートファクトリーやIIoTなどをキーワードに、産業分野には大きな変革の波が押し寄せ、今はその時流の真っ只中です。ソフテックでは、お客様のこうした変化への対応をお手伝いすべく、Modbus TCPのような産業向け規格を柔軟に取り入れた開発を承っています。

なお、本号でご紹介した「センサデータロギングツール」は、ターク・ジャパン株式会社が取り扱うリモートI/Oやワイヤレス製品のユーザー向けに、同社によって頒布が予定されています。

(R.O.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ