LabVIEW NXG Training Course
Session6 - ファイル I/O
Yusuke Tochigi
NXG 5.0 Version
LabVIEW NXG Training Course 2
ファイル I/O
集録 / 解析したデータをファイルに保存する機能は多くのアプリケーションで必須要件に
なります。複数のファイル形式を、要件に応じて使い分けます。
テキスト (csv など ) バイナリ TDMS
数値精度
精度を保持して保存できるか
△
フォーマットに依存
◎
精度落ちなし
◎
精度落ちなし
可読性
メモ帳等で開いて読めるか
◎ × 〇
Excel アドオン有
サイズ
ファイルサイズは小さいか
× ◎ ◎
検索可能
既存手法でデータ検索可能か
× × ◎
属性を付与
データに属性を付与できるか
× × ◎
高速ストリーミング
保存速度は高速か
× ◎ ◎
LabVIEW NXG Training Course 3
ファイル I/O 関数
ファイル I/O 関数は以下の場所からアクセスできます。「区切られた ... 」関数はそれ 1
つでファイルを開き、読み書きし、閉じる操作を行う便利な関数です。ループの中でこの
関数を呼び出すと、処理が遅くなる原因になります。背景が黄色の関数を使用すること
で、パフォーマンス効率を上げることができます。
LabVIEW NXG Training Course 4
ファイル I/O の基本操作
ファイルの読み書きでは、ファイルを開く、読む / 書く、閉じるという手順を踏む必要があ
ります。一度ファイルを開けば、次に閉じるまで繰り返し読み書きができます。
繰り返し処理の場合は、ファイルを開く / 閉じる処理までループの中に入れると、処理が
遅くなります。これらの関数はループの外に出し、ループの中では読み書きの処理だけを
行います。
読み書き
LabVIEW NXG Training Course 5
ファイルの閉じ忘れ
開いたファイルは必ず閉じます。ファイルが閉じられないとリファレンスリークが発生し、不必
要にメモリを消費します。最後にはメモリオーバーフローとなって、アプリケーションが停止す
る原因となります。また、ファイルが開けなくなる危険性もあります。
例えば以下のコードを実行すると、メモリ使用量は継続的に増えていき、最終的にはメ
モリオーバーフローとなります。開いたら閉じる、この手順を忘れないようにします。
LabVIEW NXG Training Course 6
ファイルを開く
ファイルを開く関数は、操作入力によって、ファイルを開く際の操作を選択することができ
ます。既存のファイルを開く、ファイルが既存であれば置き換える、新規に作成するなどが
選択できます。
LabVIEW NXG Training Course 7
リファレンス
ファイルを開くと、ファイルの情報はリファレンスに保持されます。ファイル I/O ではこのリファ
レンスを受け渡すことで、対象のファイルに対する操作を行います。
リファレンスはそれ自身が一つのデータタイプで、配列などのようにリファレンス自身に対す
る処理というものはありません。あくまでファイル I/O 関数間での情報受け渡しにのみ使
用されます。
LabVIEW NXG Training Course 8
テキストファイルへの書き込み
テキストファイル保存では、文字列データタイプとしてデータを読み書きします。そのため、
書き込むデータは文字列にフォーマットする必要があり、読み込むデータは必要に応じて
文字列から数値への変換作業を行う必要があります。
数値を文字列に変換する際に、数値精度を指定する必要があります。精度を高くする
ほど元のデータの再現率が高くなりますが、ファイルサイズも大きくなります。
LabVIEW NXG Training Course 9
テキストファイルからの読み取り
テキストファイルから読み取られるデータは文字列です。開発者は文字列にどのようなデ
ータが、どのような形式で保持されているか知っている必要があります。
LabVIEW NXG Training Course 10
文字列変換のテクニック
ダイアグラムのパレットから、データタイプ 》 文字列 》 変換の関数を使って、文字列を他
のデータタイプに変換することができます。文字列にフォーマット、文字列からスキャン関
数を使用して、スカラデータを文字列に、またはその逆の操作を行います。
配列を文字列に、もしくはその逆の操作も行えます。
LabVIEW NXG Training Course 11
バイナリファイルへの書き込み
バイナリファイルへの書き込みは、書き込みたいデータをそのまま書き込み関数へ配線し
ます。入力は、任意タイプのスカラ、配列、クラスタを受け付けます。データを文字列へ変
換する作業は不要ですが、書き込まれたデータが何か、ファイルを開いて確認できないた
め、詳細ドキュメントの作成が必要です。
LabVIEW NXG Training Course 12
バイナリファイルからの読み取り
バイナリファイルにどのようなデータが保存されているか LabVIEW NXG は知りません。
よって読み取り関数には、データタイプや読み取るデータ要素の最大数を指定
し、 LabVIEW NXG が正しく読めるようサポートする必要があります。
今回の例は 2D 配列の読み書きであったのでそこまで難しくありませんでしたが、ヘッダと
データが混在するようなケースでは、正しく読み取ることは至難の業です。
LabVIEW NXG Training Course 13
ヘッダの作成
バイナリファイルでヘッダ情報を追加する場合、バイナリデータを書き込む前にテキストファ
イルでヘッダ情報を書き込みます。
読み取り時は、ヘッダ情報の文字サイズを把握しておき、ファイル先頭からそのサイズ分フ
ァイル位置を移動したのち、データの読み取りを開始します。このようなにバイナリファイル
では、文字列と実データが混在するファイルの取り扱いは非常に難しくなります。
LabVIEW NXG Training Course 14
TDMS
Technical Data Management Storage (TDMS) ファイルは National
Instruments が開発したデータ管理ソリューションです。データ保存を最も効率的に行
うことができ、測定データのストリーミング保存などにおいて使用が推奨されます。
TDMS は「ファイル」「グループ」「チャンネル」の 3 階層構造を持ち、ファイルの下に複数
のグループを、グループの下に複数のチャンネルを無制限に作成できます。車両テストの
例を以下に示します。
自動車名 ( ファイル )
+ エンジン ( グループ )
+ 温度 ( チャンネル )
+ 振動 ( チャンネル )
+ 圧力 ( チャンネル )
+ ブレーキ
+ 電圧
+ 電流
+ ライト
+ 電圧
+ 電流
http://www.ni.com/product-documentation/3727/ja/より
LabVIEW NXG Training Course 15
TDMS の属性とデータ
TDMS のファイル / グループ / チャンネルには、それぞれ属性をつけることができます。属
性は各階層に付与できるヘッダ情報です。
例えば先の例では、
●
ファイルに「作業者」や「作業日時」など
●
エンジンやブレーキに「シリアル番号」や「配線情報」など
●
温度や振動に「センサの型番」や「測定条件」など
の属性を付与することで、測定に関する情報を詳細に記録できます。
TDMS ファイルはデータをバイナリ形式で保存するので、情報を失うことなく高速ストリー
ミングが可能です。構造化されているため、属性の読み書きも容易に行えます。
TDMS はテキストとバイナリ、両者の利点を統合したファイル形式です。
LabVIEW NXG Training Course 16
TDMS ファイルの基本操作
テキストファイルと同様に、 TDMS ファイルも開いて閉じる操作が必要です。 TDMS の
場合は、 TDMS を開く、 TDMS を閉じる関数を使用します。 TDMS ファイルの拡張
子は「 *.tdms 」です。 TDMS ファイルは「 *.tdms_index 」ファイルも自動的に生成
します。このファイルは TDMS ファイルを検索する際などに使用されます。インデックスファ
イルがなければ自動で生成されるため、配布の際などに提供する必要はありません。
LabVIEW NXG Training Course 17
TDMS へのデータ書き込み
TDMS 書き込み関数を使用してデータを TDMS ファイルへ書き込みます。書き込みの
際は、グループ名とチャンネル名を指定します。
以下の例では、 DAQmx 読み取り関数から 2 チャンネル分のデータが出力されます。
これを Engine グループの Temperature と Acceleration チャンネルデータとし
て、 TDMS ファイルへ書き込みます。
LabVIEW NXG Training Course 18
TDMS からのデータ読み取り
TDMS 読み取り関数を使用してデータを TDMS ファイルからデータを読み取ります。書
き込みの際と同様に、グループ名とチャンネル名を指定します。
他のテクニックとして、グループまたはチャンネルを未配線にすることができます。詳細はヘ
ルプの配線されていない場合の読み取り動作を確認します。
LabVIEW NXG Training Course 19
属性の追加
TDMS プロパティを設定関数によって、ファイル / グループ / チャンネルに属性を追加し
ます。端子の配線によって、何に対する操作かが変わります。プロパティ値はバリアント
で、様々なデータタイプを入力することができます。
LabVIEW NXG Training Course 20
属性の取得
TDMS プロパティを取得関数を使用して、ファイル / グループ / チャンネルから属性を
取得します。設定と同様に、端子の配線によって何に対する操作かが変わります。デー
タタイプ端子に属性のデータタイプと同じデータを入力することによって、プロパティ値の出
力データタイプが変わります。
LabVIEW NXG Training Course 21
3rd
Party ソフトウェアでの TDMS 読み書き
ナショナルインスツルメンツが提供する
TDM Excel Add-In for Microsoft Excelを使用すると、 Excel で TDMS ファ
イルを開くことができます。
また、無償のCライブラリが提供されているので、他のプログラミング環境からも取り扱うこ
とができます。
LabVIEW NXG Training Course 22
ファイルパス
ファイルパスを使用して、操作対象のファイルを指定します。パスは大きく分けて以下の 2
種類があります。
●
絶対パス
C:UsersUserDesktopHello.txt のように、ファイルまたはフォルダへの完璧な
経路を示します。道を聞かれた際に、目的地の住所を教えるイメージです。
●
相対パス
現在のファイルまたはフォルダ位置からの経路を示します。道を聞かれた際に、現在地か
らの経路を教えるイメージです。 LabVIEW NXG では、以下のような関数を使用して
相対パスを取得します。
LabVIEW NXG Training Course 23
パスの指定
パネル上でパスを指定する場合は絶対パスを使用します。ファイルパス制御器では、構
成ペーンにおいてパス指定の手法を設定することができます。パターンを「 *.png 」のよう
にすることで、ファイル選択時にその拡張子を使用できます。
LabVIEW NXG Training Course 24
パスの自動作成
手動での入力以外に、ファイル名に日時を使用したり、同じファイル名の末尾に番号を
自動で付与したり、 LabVIEW NXG では便利な関数が多く準備されています。
LabVIEW NXG Training Course 25
区切られたスプレッドシート
区切られたスプレッドシートに書き込む / を読み取る関数を使用して、配列を簡単に
csv ファイル等へ保存することができます。ただしこの関数は、ファイルを開いて閉じるまで
の処理を内部的に行います。そのためループの中で処理を行う場合、処理速度に大き
な遅延を生じさせる可能性があるため、高速処理が求められる場合は使用しません。

Session6 - LabVIEW NXG Training Course

  • 1.
    LabVIEW NXG TrainingCourse Session6 - ファイル I/O Yusuke Tochigi NXG 5.0 Version
  • 2.
    LabVIEW NXG TrainingCourse 2 ファイル I/O 集録 / 解析したデータをファイルに保存する機能は多くのアプリケーションで必須要件に なります。複数のファイル形式を、要件に応じて使い分けます。 テキスト (csv など ) バイナリ TDMS 数値精度 精度を保持して保存できるか △ フォーマットに依存 ◎ 精度落ちなし ◎ 精度落ちなし 可読性 メモ帳等で開いて読めるか ◎ × 〇 Excel アドオン有 サイズ ファイルサイズは小さいか × ◎ ◎ 検索可能 既存手法でデータ検索可能か × × ◎ 属性を付与 データに属性を付与できるか × × ◎ 高速ストリーミング 保存速度は高速か × ◎ ◎
  • 3.
    LabVIEW NXG TrainingCourse 3 ファイル I/O 関数 ファイル I/O 関数は以下の場所からアクセスできます。「区切られた ... 」関数はそれ 1 つでファイルを開き、読み書きし、閉じる操作を行う便利な関数です。ループの中でこの 関数を呼び出すと、処理が遅くなる原因になります。背景が黄色の関数を使用すること で、パフォーマンス効率を上げることができます。
  • 4.
    LabVIEW NXG TrainingCourse 4 ファイル I/O の基本操作 ファイルの読み書きでは、ファイルを開く、読む / 書く、閉じるという手順を踏む必要があ ります。一度ファイルを開けば、次に閉じるまで繰り返し読み書きができます。 繰り返し処理の場合は、ファイルを開く / 閉じる処理までループの中に入れると、処理が 遅くなります。これらの関数はループの外に出し、ループの中では読み書きの処理だけを 行います。 読み書き
  • 5.
    LabVIEW NXG TrainingCourse 5 ファイルの閉じ忘れ 開いたファイルは必ず閉じます。ファイルが閉じられないとリファレンスリークが発生し、不必 要にメモリを消費します。最後にはメモリオーバーフローとなって、アプリケーションが停止す る原因となります。また、ファイルが開けなくなる危険性もあります。 例えば以下のコードを実行すると、メモリ使用量は継続的に増えていき、最終的にはメ モリオーバーフローとなります。開いたら閉じる、この手順を忘れないようにします。
  • 6.
    LabVIEW NXG TrainingCourse 6 ファイルを開く ファイルを開く関数は、操作入力によって、ファイルを開く際の操作を選択することができ ます。既存のファイルを開く、ファイルが既存であれば置き換える、新規に作成するなどが 選択できます。
  • 7.
    LabVIEW NXG TrainingCourse 7 リファレンス ファイルを開くと、ファイルの情報はリファレンスに保持されます。ファイル I/O ではこのリファ レンスを受け渡すことで、対象のファイルに対する操作を行います。 リファレンスはそれ自身が一つのデータタイプで、配列などのようにリファレンス自身に対す る処理というものはありません。あくまでファイル I/O 関数間での情報受け渡しにのみ使 用されます。
  • 8.
    LabVIEW NXG TrainingCourse 8 テキストファイルへの書き込み テキストファイル保存では、文字列データタイプとしてデータを読み書きします。そのため、 書き込むデータは文字列にフォーマットする必要があり、読み込むデータは必要に応じて 文字列から数値への変換作業を行う必要があります。 数値を文字列に変換する際に、数値精度を指定する必要があります。精度を高くする ほど元のデータの再現率が高くなりますが、ファイルサイズも大きくなります。
  • 9.
    LabVIEW NXG TrainingCourse 9 テキストファイルからの読み取り テキストファイルから読み取られるデータは文字列です。開発者は文字列にどのようなデ ータが、どのような形式で保持されているか知っている必要があります。
  • 10.
    LabVIEW NXG TrainingCourse 10 文字列変換のテクニック ダイアグラムのパレットから、データタイプ 》 文字列 》 変換の関数を使って、文字列を他 のデータタイプに変換することができます。文字列にフォーマット、文字列からスキャン関 数を使用して、スカラデータを文字列に、またはその逆の操作を行います。 配列を文字列に、もしくはその逆の操作も行えます。
  • 11.
    LabVIEW NXG TrainingCourse 11 バイナリファイルへの書き込み バイナリファイルへの書き込みは、書き込みたいデータをそのまま書き込み関数へ配線し ます。入力は、任意タイプのスカラ、配列、クラスタを受け付けます。データを文字列へ変 換する作業は不要ですが、書き込まれたデータが何か、ファイルを開いて確認できないた め、詳細ドキュメントの作成が必要です。
  • 12.
    LabVIEW NXG TrainingCourse 12 バイナリファイルからの読み取り バイナリファイルにどのようなデータが保存されているか LabVIEW NXG は知りません。 よって読み取り関数には、データタイプや読み取るデータ要素の最大数を指定 し、 LabVIEW NXG が正しく読めるようサポートする必要があります。 今回の例は 2D 配列の読み書きであったのでそこまで難しくありませんでしたが、ヘッダと データが混在するようなケースでは、正しく読み取ることは至難の業です。
  • 13.
    LabVIEW NXG TrainingCourse 13 ヘッダの作成 バイナリファイルでヘッダ情報を追加する場合、バイナリデータを書き込む前にテキストファ イルでヘッダ情報を書き込みます。 読み取り時は、ヘッダ情報の文字サイズを把握しておき、ファイル先頭からそのサイズ分フ ァイル位置を移動したのち、データの読み取りを開始します。このようなにバイナリファイル では、文字列と実データが混在するファイルの取り扱いは非常に難しくなります。
  • 14.
    LabVIEW NXG TrainingCourse 14 TDMS Technical Data Management Storage (TDMS) ファイルは National Instruments が開発したデータ管理ソリューションです。データ保存を最も効率的に行 うことができ、測定データのストリーミング保存などにおいて使用が推奨されます。 TDMS は「ファイル」「グループ」「チャンネル」の 3 階層構造を持ち、ファイルの下に複数 のグループを、グループの下に複数のチャンネルを無制限に作成できます。車両テストの 例を以下に示します。 自動車名 ( ファイル ) + エンジン ( グループ ) + 温度 ( チャンネル ) + 振動 ( チャンネル ) + 圧力 ( チャンネル ) + ブレーキ + 電圧 + 電流 + ライト + 電圧 + 電流 http://www.ni.com/product-documentation/3727/ja/より
  • 15.
    LabVIEW NXG TrainingCourse 15 TDMS の属性とデータ TDMS のファイル / グループ / チャンネルには、それぞれ属性をつけることができます。属 性は各階層に付与できるヘッダ情報です。 例えば先の例では、 ● ファイルに「作業者」や「作業日時」など ● エンジンやブレーキに「シリアル番号」や「配線情報」など ● 温度や振動に「センサの型番」や「測定条件」など の属性を付与することで、測定に関する情報を詳細に記録できます。 TDMS ファイルはデータをバイナリ形式で保存するので、情報を失うことなく高速ストリー ミングが可能です。構造化されているため、属性の読み書きも容易に行えます。 TDMS はテキストとバイナリ、両者の利点を統合したファイル形式です。
  • 16.
    LabVIEW NXG TrainingCourse 16 TDMS ファイルの基本操作 テキストファイルと同様に、 TDMS ファイルも開いて閉じる操作が必要です。 TDMS の 場合は、 TDMS を開く、 TDMS を閉じる関数を使用します。 TDMS ファイルの拡張 子は「 *.tdms 」です。 TDMS ファイルは「 *.tdms_index 」ファイルも自動的に生成 します。このファイルは TDMS ファイルを検索する際などに使用されます。インデックスファ イルがなければ自動で生成されるため、配布の際などに提供する必要はありません。
  • 17.
    LabVIEW NXG TrainingCourse 17 TDMS へのデータ書き込み TDMS 書き込み関数を使用してデータを TDMS ファイルへ書き込みます。書き込みの 際は、グループ名とチャンネル名を指定します。 以下の例では、 DAQmx 読み取り関数から 2 チャンネル分のデータが出力されます。 これを Engine グループの Temperature と Acceleration チャンネルデータとし て、 TDMS ファイルへ書き込みます。
  • 18.
    LabVIEW NXG TrainingCourse 18 TDMS からのデータ読み取り TDMS 読み取り関数を使用してデータを TDMS ファイルからデータを読み取ります。書 き込みの際と同様に、グループ名とチャンネル名を指定します。 他のテクニックとして、グループまたはチャンネルを未配線にすることができます。詳細はヘ ルプの配線されていない場合の読み取り動作を確認します。
  • 19.
    LabVIEW NXG TrainingCourse 19 属性の追加 TDMS プロパティを設定関数によって、ファイル / グループ / チャンネルに属性を追加し ます。端子の配線によって、何に対する操作かが変わります。プロパティ値はバリアント で、様々なデータタイプを入力することができます。
  • 20.
    LabVIEW NXG TrainingCourse 20 属性の取得 TDMS プロパティを取得関数を使用して、ファイル / グループ / チャンネルから属性を 取得します。設定と同様に、端子の配線によって何に対する操作かが変わります。デー タタイプ端子に属性のデータタイプと同じデータを入力することによって、プロパティ値の出 力データタイプが変わります。
  • 21.
    LabVIEW NXG TrainingCourse 21 3rd Party ソフトウェアでの TDMS 読み書き ナショナルインスツルメンツが提供する TDM Excel Add-In for Microsoft Excelを使用すると、 Excel で TDMS ファ イルを開くことができます。 また、無償のCライブラリが提供されているので、他のプログラミング環境からも取り扱うこ とができます。
  • 22.
    LabVIEW NXG TrainingCourse 22 ファイルパス ファイルパスを使用して、操作対象のファイルを指定します。パスは大きく分けて以下の 2 種類があります。 ● 絶対パス C:UsersUserDesktopHello.txt のように、ファイルまたはフォルダへの完璧な 経路を示します。道を聞かれた際に、目的地の住所を教えるイメージです。 ● 相対パス 現在のファイルまたはフォルダ位置からの経路を示します。道を聞かれた際に、現在地か らの経路を教えるイメージです。 LabVIEW NXG では、以下のような関数を使用して 相対パスを取得します。
  • 23.
    LabVIEW NXG TrainingCourse 23 パスの指定 パネル上でパスを指定する場合は絶対パスを使用します。ファイルパス制御器では、構 成ペーンにおいてパス指定の手法を設定することができます。パターンを「 *.png 」のよう にすることで、ファイル選択時にその拡張子を使用できます。
  • 24.
    LabVIEW NXG TrainingCourse 24 パスの自動作成 手動での入力以外に、ファイル名に日時を使用したり、同じファイル名の末尾に番号を 自動で付与したり、 LabVIEW NXG では便利な関数が多く準備されています。
  • 25.
    LabVIEW NXG TrainingCourse 25 区切られたスプレッドシート 区切られたスプレッドシートに書き込む / を読み取る関数を使用して、配列を簡単に csv ファイル等へ保存することができます。ただしこの関数は、ファイルを開いて閉じるまで の処理を内部的に行います。そのためループの中で処理を行う場合、処理速度に大き な遅延を生じさせる可能性があるため、高速処理が求められる場合は使用しません。