Labviewプログラミング覚書
by K.I
2013/09/xx〜
Index
- Labviewのプログラム覚書
- Labviewのプログラムを作った時に、悩んだ事を備忘録として記録したもの。
- 図は、ほとんどはVIスニペットになってるので、LabView9以降を使っている場合は、
- 図をブロックダイアグラムにドラッグアンドドロップすれば、プログラムを確認する1ことができる。
- でも、IE10になってから、直接ドラッグアンドドロップ出来なくなった。
- 一旦、デスクトップとかにドロップして、ファイル化した後、改めてドラッグアンドドロップすれば2良い。
1NIのサイトでは何でサンプルにスニペット使わないんだろう?
2FireFoxとかChromeとかも同様にする必要がある。
[top]
- LabViewのデータの型チェックは結構厳しくて、合っていないとすぐに配線の接続が切れる。
- DAQのボード等の複数の出力データは、ダイナミックデータという奴になっているが、
- これから、一部のデータを取り出すのに、結構苦労したので。。
- 「ダイナミックデータから変換」というモジュールを使うのがミソかな。
- XY Graphのために、ダイナミックデータってやつを、クラスタにするだけのことでかなり悩んだ。
- DAQの複数のデータ入力の例として、
- 2つの配列データを作って、1つに合成して入力する例
- この例は、配列を作るところも含んでるので、ちょっと複雑に見えるが、
- 要は、配列をダイナミックデータに変換してから、信号を結合で1つにすれば良い。
- DAQのボードで、COMBOボックスからデジタル出力しようとしたら、接続できない。
- 一度、ダイナミックデータに変換してから戻してるので、ちょっと冗長な感じがする。
- 本当はもっと簡単な方法があるのかもしれないけど、まぁ出来たから良いや。。
[top]
- 現在のVIのパスから、VIの名前を除けばカレントパスが求められるが、
- exe化した場合、exeファイル名がパスとして付加されるので、さらに削る必要がある。
- この例はNIのサイトにあったもの。ちょっとメンドイなぁ。
- 保存ボタンを押すと、Logファイル名を聞いてきて、保存を開始
- 再度、保存ボタンを押してOFF状態にすると、保存を停止
- ファイルは上書きされる
- シフトレジスタを使ってファイル名を保存、2回目以降のループではファイルダイアログは表示されない
- 空のパスに初期化されるので、最初の実行時にはファイルダイアログが表示される
- ケースストラクチャが、Falseの場合も空のパスに設定されるので、
- 再度、保存ボタンをONにした場合も、またダイアログが表示される
- Excel等の表をコピーした文字列から、配列を作る
- ダイナミックデータを分岐するだけでも、2つに分けることができる
[top]
- このVIを実行すると、1回だけ処理が実行される。
- NIのサイトに、例があったので、ちょっとマネして作ってみた。
- 確かに、1回だけ実行出来るんだけど、起動時のみ1回実行するだけ
- これだと、起動シーケンスを別に書いて、ワイヤで繋いだ方が簡単じゃないかな。
- 最初に1回だけ実行を、ちょっと改造して、
- ボタンを押した時に、シフトレジスタの値を初期化するようにしてみた。
- 起動時には実行しないように、シフトレジスタの初期値はFalseにした。
- これで一応は動くんだけど。。ちょっと複雑すぎる。。。
- 単に、順番に実行するだけならば、データフローが簡単
- 「フロントパネルアクティビティを待機」を置いて、ボタンの状態の変化で1回だけ実行させるようにした。
- この方法は簡単で良いんだけど、ボタンがONになる時も、OFFになる時も両方とも動くので、変な感じ
- それに、スクロールバーを動かすだけでも動いてしまうので、これはちょっとマズイ。
- 別の制御器があれば、それでも動いてしまうだろう。。
- ボタンの機械的動作を「押されたらラッチ」にすれば、自然な感じになるが、2回づつ動いてしまう
- それで、ケースストラクチャで実行ボタンがONの時だけ実行するようにした。
- シフトレジスタとカウントアップの回路は、実行回数の確認のために入れたもので、実際は不要。
- 実は、「フロントパネルアクティビティを待機」が無くても、良いのかもしれない。
[top]
- ブロックダイアグラムに、コメントを書くには、フリーラベルを使う
- 場所が分かりづらい→プログラミング→ストラクチャ→装飾体→フリーラベル
- ちょっと地味な感じだ。まぁ、コメントを派手にしても仕方がないけど。
- 後から気がついたけど、単に空きスペースでダブルクリックしても、フリーラベルを入れることが出来る。
- プログラム→アプリケーション制御→VIサーバリファレンスで、「このVIのリファレンス」を配置して、
- 作成→VIクラスのメソッド→デフォルト値→現在の設定をデフォルト設定にするで、インボークノードを生成
- このVIのリファレンスをインボークノードのリファレンスに接続することで、メソッドを実行できる
- また、エラーワイヤを接続して、データフローにより初期化後にループが実行されるようにした
- リファレンスというのは、ポインタとかハンドルのようなもの
- インボークノードというのは、クラスのメソッドを実行する
- プロパティノードは、クラスのプロパティを参照・設定できる
- リファレンスやローカル変数を使って、デフォルト値に初期化というのも出来るんだけど、
- VIスニペットにすると、リファレンスが切れてしまう。(保存のリファレンスが切れて、保存2になってしまう)
- どうしてだろう?とりあえず、貼り付けたあと、保存のリファレンスを作り直して、
- スニペットは便利なんだけど、いろいろ問題もあるのかもしれないなぁ。。。
- MAX(Measurement & Automation Explorer)を起動して、
- 構成のソフトウェアを展開すると、各モジュールのバージョンが確認出来る。
- 行列演算の記述方法がわからなくて、結構悩んだ。分かってしまえば、なんてこと無いんだけど。。
- まず、横方向を纏めてから、縦方向を纏めれば良いみたい
- 掛け算のアイコンが判りづらい。。これって、Labviewのバージョンによって違うのかな?
- スプレッドシートファイルに書き込むviを使って、データを保存している時、
- ファイル名を指定するダイアログをキャンセルすると、エラー43が出る
- このエラーをキャンセルする方法として、 こちらを参考にしてエラーキャンセルしようとしたが、
- エラー処理がVI内部にあるので、VI内部にこの記述を付け加えた。
- エラーは出なくなったんだけど、そのまま保存したらオリジナルのVIが変更されてしまったっぽい。
[top]
- DAQmxを使ったデータ入出力プログラムを、別のPCにインストールするとエラーになる。
- DAQmxアシスタントを一旦削除して、新規作成して設定し直せば治るんだけど、面倒だ。
- 多分、 これと同じエラーだと思う。(-10401)
- MAX(Measurement & Automation Explorer)で、表示→更新すれば良いらしい。(未確認)
- USB-6251を使った測定。サンプリング速度は十分余裕があるはずなんだけど、
- 少し多めのサンプル数にすると、時々このエラーになる(2〜30回に1回ぐらい?)
- 記録しとかなかったので、エラーメッセージはうろ覚え
- 一度、エラーになるとLabViewを再起動しても、次回からは必ずこのエラーになってしまう。
- Windows7を再起動すると、動作するようになるんだけど、これは効率が悪すぎる
- USB-6009で、同様の現象と思われるQ&Aがあった
- 回答は、Windows7 EHCIドライバの不具合の可能性があって、回避策としてUSB transfer requestの数を制限するというもの
- 但し、まずDAQmxドライバを9.4以降にする必要があるらしい
- 早速、最新のDAQmxドライバをダウンロード、DAQmxチャネルのプロパティを設定しようとしたが、項目がほとんど表示されない
- ちょっと悩んだけど、これは単にプロパティノードを右クリックして、フィルタの設定で全て表示すれば良いだけだった
- 以下のようにDAQmxチャネルのプロパティを設定
- ブロックダイアグラム上に、プログラミング→アプリケーション制御→プロパティノードを選択して、プロパティノードを配置
- Analog_input→General_Properties→Advanced→Data_Transfer_and_Memory→USB_Transfer_Request_count
- で、値を1に設定して、リファレンスをDAQMXのデータ集録しているVIに接続
- 結果としては、それ以降エラーが発生していない。
- そんなに回数は試していないが、対策になっている様だ。
[top]
[電子工作関連に戻る]