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

その他

スポンサーリンク

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

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

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

スポンサーリンク

ファイル添付機能とは

そもそも今回の記事で紹介していくファイル添付機能自体も、LabVIEW 2026Q3から加わった機能になります。

これ以前のバージョンのLabVIEWのNigelについても、viファイル(もしくはlvprojファイル)は扱うことができました。

VIやプロジェクトを解析させる、といった機能を使うためにファイルを指定するといった方法です。

ただ、2026Q3バージョンから明示的にファイル添付のボタンが追加され、ここからviファイル以外を選べるようになりました。

ただし、添付できるファイルの種類には限りがあるようで、2026Q3バージョン時点では基本的にはテキストファイルになります。

テキストファイルであれば何でもいいかというと、添付自体はできるものののNigel自身がその中身を読み取れない、といった場合もあるようで、自分が試して明確にNigelが読み取れていたのは「.txt」、「.md」ファイルであり、「.csv」ファイルは添付こそできましたが読み取ることができていませんでした。(csvファイルの中身をtxtファイルにコピペすれば読み取られました)

バージョンが変わる等でこの状況に将来的に変化があるとは思いますが、画像ファイルなどが扱えるようになるともっと便利なのにな、といった感じです。

とはいえ、テキストファイルが添付できるようになったことで、Nigelへのコード生成についての指示がしやすくなった面があるので、使い方の例を紹介していこうと思います。

ファイル添付機能を活かしたコード生成指示例

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

添付したファイルを使うことを前提としたコードの生成

最初は、添付したファイルを読み取らせて処理するようなプログラムの生成です。

これだけだと意味が分からないかもしれないので、プロンプトの例を挙げてみます。

添付したtxtファイルをフロントパネル上で指定しておけば、txtファイルに書いてある各項目を反映してDAQによる測定ができるようなプログラムを作成してください。ただし、測定はアナログ電圧入力とします。

また、continuous?のパラメータの値がTrueのときには連続測定、Falseのときには有限測定になるようにしてください。ログするtdmsファイルは、ユーザーのデスクトップ上に保存されるものとしてください。

このプロンプトととともに添付したtxtファイルの中身は以下のようです。

device name,mydevice/ai0

sampling rate,2000

number of sample,100

continuous?,TRUE

log tdms file name,measlog.tdms

結果、最終的には以下のようなプログラムを生成してくれました。

パターンで一致関数での形式指定がなかなか複雑ですが、テキストファイル中の表記ゆれを吸収できる形で実装されているようです。

pythonスクリプトと同じ処理を実装

次の例は、テキストファイルにPythonスクリプトを書いてそのファイルをNigelに与え、そのPythonスクリプトと同じ処理を行うVIを生成してもらう、という例です。

以下のようなプロンプトを試しました。

添付したファイルにはPythonコードが書かれています。このPythonコードと同じ処理を行うLabVIEWプログラムを生成してください。

なお、Pythonスクリプトは以下のようなもので、与えた複数の要素の組み合わせの数を全て列挙するような処理を行うものです。

from collections import Counter

def all_combinations(lst):

    counts = Counter(lst)

    values = sorted(counts.keys())

    result = []

    def dfs(index, current):

        if index == len(values):

            if current:          # 空集合は除く

                result.append(current.copy())

            return

        value = values[index]

        # この値を0個~最大個数まで使う

        for n in range(counts[value] + 1):

            current.extend([value] * n)

            dfs(index + 1, current)

            del current[-n:] if n else None

    dfs(0, [])

    return result

lst = [1, 2, 3, 3, 4]

for c in all_combinations(lst):

    print(c)

結果、以下のようなコードが生成されました。

どのようなPythonスクリプトでもこういったことができるのかについてはわかりませんが、Nigel自身は一般LLMの基に成り立っておりPythonスクリプトの理解は基本的にできるであろうことを考えると、実際に期待した動作をするものが生成されるかどうかはともかくとして、頑張ってコードを書いてくれそうな感じがします。

mdファイルの読み取り

続いては、mdファイルの読み取りです。

Mdファイル自体はテキストファイルであり、仕様書などの要件を書いていて、その仕様に見合った動作をするプログラムを生成させようとしました。

プロンプトとしては以下のようにしています。

添付したファイルの中身の要求に従ってプログラムを作成してください。

そして実際に添付したmdファイルの中身は以下のようです。

# CSVデータ集計ツール

## 概要

CSVファイルを読み込み、指定した列の統計情報を表示するVIを作成してください。

## フロントパネル

|項目|型|

|—|—|

|CSVファイルパス|Path|

|列番号|I32|

|実行ボタン|Boolean|

|平均値|DBL|

|最大値|DBL|

|最小値|DBL|

|件数|I32|

## 処理内容

1. CSVファイルを読み込む

2. 指定された列のみ取得する

3. 数値へ変換する

4. 以下を計算する

   – 平均

   – 最大

   – 最小

   – 件数

5. フロントパネルへ表示する

## エラー処理

– ファイルが存在しない場合はエラーを表示する

– 数値へ変換できない行は無視する

## サンプルCSV

“`csv

Time,Value

0,12

1,15

2,20

3,18

結果、以下のようなコードが生成され、期待したとおりの動作をさせることができました。

フロントパネルの完成形イメージを与える

最後は、viファイルの添付になりますが、そのviはフロントパネルだけ既に作ってある、というものです。

プロンプトとして以下のようなものをNigelに渡しました。

添付したviではフロントパネルが出来上がっています。

このフロントパネルにある制御器や表示器を使ったプログラムを作成してください。各制御器や表示器をブロックダイアグラム上でどうつかうかはラベル名から推測してください。なお、アナログ電圧入力プログラムを作るものとし、チャンネルは常に1つしか指定しないものとします。

実際に渡したviは以下のようなものです。

ブロックダイアグラムは一切編集していません。

上記プロンプトで試したところ、コード生成中に数回LabVIEWがクラッシュしてしまったのですが、最終的には以下のようなプログラムが出来上がってきました。

新規でviを作る関係上、こちらから渡したviとはフロントパネル上の制御器などの配置(と一部のデータタイプ)は異なる形となってしまっています。

ブロックダイアグラムは以下のようなviとして生成されました。

途中でクラッシュした原因はよくわかりません。

ただ、LabVIEWがクラッシュしてNigelがこれに付随してクラッシュしても、再度LabVIEWおよびNigelを立ち上げるとNigelはそれまでの操作を覚えているようで、「続きから」などといった指示を出せば続きの処理から実行してくれるようです。

本記事では、Nigelによるコード生成について特にファイル添付機能を活かしたプロンプトの例をいくつか紹介しました。

ファイルを添付できるようになることで、何か外部で用意した資料を元にプロンプトによる指示を与えることができるようになったのはなかなか便利です。

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

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

コメント

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