LabVIEW覚書
はじめに
私がNI LabVIEWを使っていて気づいたことを書き連ねています。
この文書内ではNI LabVIEWをLVと省略して記述することがあります。
イベント処理
ツリー制御器
-
値変更イベントは項目が選択されている状態でシングルクリックをすると発生します。(ダブルクリックでは発生しない)
-
無効にした項目をクリックした場合、ツリー制御器の値は最後の項目のタグになります。
表制御器
表制御器/表示器からドラッグ開始イベントを検出出来ません。データを他にドラッグする動作を実現したいときは複数列リストボックスで代用するか透明の制御器を使って実装する必要がありそうです。
型
- ブール型は8bit領域に割り当てられます。この振る舞いはC/C++と類似しています。
メモリ領域を節約しようとしてuint8配列で保持していた処理をブール配列に組みなおしたことがあります。しかし途中で型変換を挟むので無駄どころか逆に領域が増えてしまい元に戻す羽目になりました。メモリ領域がシビアなプログラムは64bit版で作成した方が良いかもしれません。
- FXP(固定小数点)のフォーマットはプロパティ画面からのみ指定出来ます。プロパティノードを使用してフォーマットを変更出来ません。Discussion Forumで時々話題に上がっているようです。
- LabVIEW FPGAのFix point(固定小数点数)は整数部ビットをマイナスにすることで0.5以下をフルスケールに割り振ることが出来ます。
JSONの振る舞い
LabVIEW2014以降JSONのデータを使用することが出来ます。
- 重複したキーは先頭のものが有効になります。他の言語における実装は最後に定義したものが有効になります。
- VIにはJSONの仕様通りUTF-8で入力する必要があります。しかし公式にはシステムエンコードとUTF-8の変換VIが用意されていません。VIPMからHidden Gems in vi.libをインストールすることでドキュメント化されていないUTF-8変換VIが使用できます。(LV2014~LV2019で確認済み。LV2020,LV2021,LV2022,LV2023はまだ確認していません)
- Unflatten jsonを使用する場合、クラスタの要素名とJSONのフィールドが一致する必要があります。
システム実行VIの制限
システム実行VIを使用してシェルから外部プログラムを呼び出すことが出来ます。Windows版の場合、cmd.exeとなりますが他のシェルを使いたくなったときシェルのパスを指定することで起動できます。
しかし、呼び出し方によっていくつか制限があるので注意する必要があります。
Powershellを呼び出す場合は入力に
cmd.exe -c powershell コマンドレット
渡すことで新しいcmd.exeのプロセスからpowershellを呼び出せます。
- 呼び出したシェルに標準出力を渡すことが出来ません。
- パイプを使用することが出来ません。スクリプトの中に書く必要があります。
上記のような制限を回避するためには、VIの入力に
powershell コマンドレット
と渡すだけでよいです。
64bitOS上の32bit版LVで動かす場合、powershellは32bitとなるため64bitプロセスが呼べないことに注意してください。
(システム実行VIから直接呼ぶ場合は32bit版LVから64bitプロセスを呼べます。)
追記
PowerShellのパスを直接指定することでPowerShellからも64bitプロセスを呼べました。
PowerShellのパスは、PowerShell上で$PSHOME環境変数を呼び出せば確認できます。
$PSHOME
よって、システム実行VIに以下の入力を行えばLV上でもPowerShellのパスを取得できます。
powershell $PSHOME
通信
キュー
キューのリファレンスを作成したもののいくらエンキューしても要素が0となってしまうことがあります。
対処方法は、デキューを実行時に適当なタイムアウト時間を指定してあげることで回避できます。
原因は不明なものの、FPGAシミュレーションを直接・間接的に呼び出しているホストVIで現象が起こることを確認済みです。(LV2017SP1で確認)
接続
Python
LabVIEW2018以降ではVIからPythonで記述された関数を呼び出すことができます。LabVIEWのバージョンごとに呼び出せるPythonのバージョンが決まっています。
Integrating Python Code in LabVIEW
Python公式WEBからインストーラーをダウンロードしてインストールすることを推奨します。LabVIEWがPythonの場所をバージョンごとに決め打ちで呼び出すので、意図しない場所にインストールされているとPythonセッションが失敗します。
アプリケーションビルダ
インストーラが展開するフォルダの指定はOSにより異なります。Windowsの場合はNIのWEBに記載があります。
Mapping Directories on Disk to Installer Destination Folders for LabVIEW Builds
他
サブパネルで表示させているVIをデバッグするときは、フロントパネルの右クリックからブロックダイアグラムを表示するにチェックを入れるかサブパネルのプロパティノードからAllowOpneBDにTrueを入力しておく必要があります。
Discussion