Nigelコード生成【ファイルIO】

その他

スポンサーリンク

この記事では、LabVIEW2026Q3バージョンから可能になった、Nigelによるコード生成機能について、ファイルIO関連のコード生成の例を紹介しています。

ファイルIOとはつまりLabVIEW外のファイルの読み取りあるいは書き込み(保存)処理のことで、プログラミングを行って何かデータを保存したり、設定値が書かれたファイルを読み取るといった操作はよく行われます。

そんな操作に関するプログラムが指示した通りに書けるかどうかを試してみました。

なお、Nigelによるコード生成の基本的な使い方については以下の記事を参考にしてみてください。

また、今回の記事で扱っている内容の実際の操作の様子は以下のビデオでも紹介しています。

スポンサーリンク

ファイルIOのプログラムのポイント

ファイルIOを行うプログラムを書く時には、ファイルを開く、つまりプログラムの中でその特定のファイルに対するリファレンスを開いて、そのリファレンスの情報を使ってファイルの読み取りや書込み操作を行い、最後にリファレンスを閉じるという操作が基本になります。

これらのそれぞれの処理について専用の関数がある一方で、これらの関数をひとまとめにした関数(上位関数とも呼ばれる)もあります。

いわゆる一般的なテキストファイル、バイナリファイルへの読み書きを行う以外にも、TDMSというファイル形式だったり、Microsoft OfficeのExcelや、htmlファイルに対しては専用のツールキットを使用したプログラムでの読み書きができるなど、プログラムの書き方は複数あります。

ファイルIO関連のコード生成指示例

では、ファイル添付ができることを活かしたコード生成の指示の例を紹介していきます。

Excelファイルからのデータ読み取り

Excelファイルの読み取りは、ただ単に行、列を指定して値を読み取るだけでなく、シートという概念があることから、どのシートのどの行、どの列のデータを読み取るかということを含めてプログラムで指定する必要があります。

LabVIEWでExcelファイルの操作を簡単にするためのReport Generation Toolkitではシートの指定や読み取るデータセルの位置を指摘するための専用の関数があるので、これらを使えば特定のデータの読み出しは可能になるはずで、コード生成においてもそれらの関数を使ったプログラムが作られることが期待されます。

試したプロンプトは以下のようです。

Excelファイルの各シートに、A列にタイムスタンプデータが、B列に測定データが載っています。

複数のシートにある、これらのタイムスタンプと測定データから波形データを作り、これをフロントパネル上の波形グラフに表示させるVIを作成してください。一つのExcelファイルを指定したら、そのExcelファイルにあるすべてのシートに対して波形グラフを生成してほしいです。

なお、タイムスタンプデータは、0.001、0.002、・・・、0.999、1.000、1.001、・・・といった形式で表された、1ミリ秒おきのデータが載っているものとし、シートによってデータ行の数が違うものとします。

なお、読み取らせる対象のExcelファイルは以下のようなデータが書かれているものとします。

生成されたコードは以下のようなものです。

このプログラムを実行すると以下のような結果となり、確かに複数のシートの結果を全てグラフに表示することができました。

tdmsファイルを比較する

TDMSファイルはデータの検索、比較、管理に優れたファイル形式としてLabVIEWプログラムでよく使われるファイル形式です。

専用の関数が用意されており、これを使用してファイルの比較を行わせるプログラムが組めるかを確かめました。

使用したプロンプトは以下の通りです。

同じグループ名、チャンネル名、プロパティ名を持つ異なるtdmsファイルの中身を比較するためのプログラムを生成してください。

フロントパネルでは、プログラム実行後に二つのtdmsを読み取ってグループ、チャンネルを指定できるようになっており、ユーザーがボタンを押したら指定したグループ、チャンネル名のデータを比較できるように表示して下さい。なお、比較するデータは波形データとしてください。

また、二つのtdmsファイルに共通して存在しているプロパティの一覧がリング制御器に入っていて、特定のプロパティを選ぶと二つのtdmsファイルそれぞれのそのプロパティに対するプロパティ値が表示されるようにしてください。なお、プロパティ値はすべて文字列であるとしてください。

生成されたプログラムのフロントパネルは以下のようです。

生成されたままのプログラムのスクリーンショットにしていますが、VIが壊れていることがわかります。

壊れている理由は後述します。

ブロックダイアグラム全体としては以下のようになりました。

前半部分では、ポーリング処理をしている部分があり、比較実行のボタンがされない限りその先に進めないようになっています。

大きなケースストラクチャは特に必要ないですが、コード生成時にたまにこうしたケースストラクチャが出ることがあります。

小さなケースストラクチャにはプロパティ名が入っており、プロパティ選択の数値によって選ばれた項目が読み取られるプロパティとなります。

このケースストラクチャ、デフォルトケースが設定されていませんでした(これがVIが壊れていた理由です)。

後半部分では残りの処理としてファイルの読み取りやプロパティの比較を行っています。

htmlファイルに保存する

Excel同様、htmlファイルについてもReport Generation Toolkitを使用することで、簡易的なhtmlファイルを作成することができます。

慣れれば各関数を使うのは難しくないですが、コード生成でそれなりなプログラムが作れるのであればだいぶ楽なので、実際にできるか試してみました。

プロンプトは以下のようにしました。

DAQによる有限収録のアナログ電圧測定を行ったあとに、その結果をhtmlファイルにまとめてください。

まとめる項目は、測定の生の値の表、フロントパネル上の波形グラフ、測定値のうちの最大値と最小値と平均値といった統計的な値を載せてください。

他にも載せた方がいいと思われる値があれば適宜htmlファイルに追加してください。

このプロンプトでは最初、Report Generation Toolkiを使用せずに、htmlのタグなどを文字列で直に保存するようなプログラムが生成されました。(その様子が気になる方は冒頭のYouTube動画を確認してみてください)

最終的に生成されたコードは以下の通りです。

なかなか大きいプログラムなので、3つの部分に分けて紹介します。

まずは前半部分です、

DAQによる測定を行い、あとはhtmlファイルの作成に入っています。

中盤、後半部分ではひたすらhtmlファイル作成用の関数をつかっていきます。

このプログラムを実行することで以下のようなhtmlファイルが生成されます。

グラフが最初にでかでかと表示されていますが、元々のプロンプト内でグラフの位置を指定してはいないので、このような形で保存されるのは仕方ないですね。

本記事では、Nigelによるコード生成について特にファイルIOが絡んだプログラムの生成についてのプロンプトの例をいくつか紹介しました。

通常のファイルIO、つまりテキストファイルやバイナリファイルを対象としたデータの読み書きには慣れていても、Report Generation Toolkitを使用するような、普段使わない関数を使用したデータの読み書きは自分で組むと結構苦労したりします。

そんなときに、基本的な機能をどう実装するかのサンプルを作ってもらう感覚で、あるいはプログラムのベースを作ってもらい細かい部分の調整は自分で行うという気持ちで、コード生成を行うのが便利だと思います。

今回紹介したような内容以外に活用方法もあるとは思いますが、まずはどんなことができるのかというイメージをつけるのに今回の記事が役に立てばと思います。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました