開発過程において、「感心した事」や「チョットした便利な事」などを掲載しました。
LabVIEWによるSPI通信
SPI通信と聞くと、大抵は、I2Cと並び、組込システムなどでAD等のデバイスとの通信に使用されるイメージです。
そのような組込システムに使用するデバイスを選定するにあたり、データシートの情報だけではなく、実際にデバイスを動作させて評価したいと思う方もいらっしゃるかと思います。
PCからSPI通信やI2C通信を可能とするハードウェアは複数のメーカから発売されておりますが、LabVIEWからI2C/SPI通信を実施する場合は、NI USB-8452が便利です。
LabVIEW用のドライバも用意されているため、より迅速にデバイスの評価作業を行うことが可能となるでしょう。更に、USB-8452のSPI通信機能の1つとして、外部信号をトリガとして指定した数(最大64クロック=8バイト分)だけSCLKをバースト出力することが可能です。これにより、例えば、3軸加速度センサデバイスから逐次出力されるData Ready信号に反応して、3軸加速度を連続読み出すことも可能です(加速度レジスタは連続したアドレスである必要があります)。この、トリガ検出とSCLK出力(=レジスタ読み書き)は、USB-8542によりハード的に実行されますので、サンプリング周波数が数KHzというような、PCソフトによるトリガ検出が困難な頻度であっても対応することが可能です。
2018年1月記
・LabVIEWでFPGAの開発が出来ます。ただし、使えるICは、NIの再構成可能I/O(RIO)ハードウェアに内蔵されているFPGAチップのみです。
従来は、FPGAの開発は、HDLが扱える人に限られておりましたが、これにより開発者の範囲が広がります。
・当社にてLabVIEWによるFPGAの開発実績が御座います。
2017.11 記
・プログラミングをしているとデータを構造化する場面があり、LabVIEWではこれをクラスタとして取り扱います。
クラスタ要素から値を取り出す場合はバンドル関数類を用いますが、クラスタ要素を構成ファイルへ保存する際は、要素と構成ファイルのキー名を紐付けるコードが必要で、クラスタの大きさに比例してプログラムは大きくなりコーディングも煩雑になります。
また、大きなクラスタ要素が変更されると、構成ファイルを読み書きするコードの手直しが厄介です。
この問題を解決する手段として思い付くのはOpenG Toolsです。
要件や仕様が適しているのなら、このツールをお勧めします。
・本記事はこのツールの紹介ではなく、バンドル関数を使わずにクラスタ要素を列挙する方法を紹介します。
掲載したget label text.vi(sub vi)は、クラスタ要素のラベル名を列挙するサンプルのブロックダイアグラムです。
viの入力としてrefnum(Ctl refnum)制御器にクラスタのリファレンスを与えると、そのクラスタ要素のラベル名をlabel text表示器に返します。
必要に応じてプロパティノードにあるValue(バリアント値)から値を取得することも出来ます。
・この形を応用すれば、クラスタ要素のラベル名を構成ファイルのキー名とする事でバンドル関数を使わずにクラスタ要素と構成ファイルのデータが読み書き出来るようになります。
試しにこの vi がどのような結果を返すか、sub viとして実行してみて下さい。
注意
get label text.viはwhileループ内のviが再帰実行になっているため、viプロパティの再入可能項目を「クローン共有による再入実行」にする必要があります。
2017.12 記