NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

Labviewのプログラミングについての質問です。

いつもお世話になっております。Labviewのプログラミングについての質問です。
現在焦点距離を合わせるプログラムの開発のために、HSC-103というステージコントローラを用いてOSMS26-100というステージの位置の制御をしています。
現状のプログラムでは、シリアル通信➡速度決定➡相対移動(1回)➡座標の読み込みとなっています。
相対移動をプログラム実行中に、スイッチのON/OFFをすることで何度も行いたいのですがどうすればよいか知恵をお貸しして欲しいです。
8_zステージ調整がメインプログラムです。

0 件の賞賛
メッセージ1/6
131件の閲覧回数

多分イベントストラクチャを使えば、一応「動く」とは思うのですが、もっと上手な組み方がある気がします。ケースストラクチャが多すぎるのが気になっているのと、この形だとVISAオープン、クローズを繰り返すことになるのでよくないです。が、ひとまずVIを共有します。

 

本来はプログラムの一番最初でVISAリソースを設定し、動作制御部分のみを繰り返し、プログラムの最後でVISAリソースをクローズする、という書き方をするべきです。サンプルにそういう感じのがあった気がしますので、ヘルプ→サンプルを検索、からVISA、シリアル、などで検索して参考にしてみてください。

0 件の賞賛
メッセージ2/6
79件の閲覧回数

ご回答ありがとうございます。イベントストラクチャ上手く動きました。サンプル参考にしてみます。

後1つ質問なのですが、ケースストラクチャを使った場合Visaオープン、クローズを繰り返すというのが初耳でした。ストラクチャを使うと必ずそのような処理になるのでしょうか?

0 件の賞賛
メッセージ3/6
62件の閲覧回数

すみません、2つの別の問題をいっぺんに話してしまいました。

 

・ケースストラクチャのネストについて

通常であればケースストラクチャは2重以上にしなくても実装できるんじゃないかと思います。ここまで多重になっているのは、何か無駄なロジックが組まれている可能性があり、あまり複雑なロジックだとデバッグしにくいだろうな、という老婆心です。

 

・VISAリソースのオープンクローズについて

ベストプラクティスはプログラムの初期化ステートでオープン、終了ステートでクローズ、です。ベストプラクティスに則っていない、という話をしています。

 

ご参考まで。

0 件の賞賛
メッセージ4/6
58件の閲覧回数

度々のご回答ありがとうございます!

ネストが複雑化している部分については、一つにまとめてみようと思います!

VISAリソースのオープン・クローズについては、サブVIを作らないのが正解ということでしょうか?

0 件の賞賛
メッセージ5/6
54件の閲覧回数

>サブVIを作らないのが正解

 

そうではありません。繰り返し初期化やクローズ処理がされないようにモジュールを作ることも可能です。Action Engineというモジュールの作り方があります。日本語だと機能的グローバル変数(Functional Global Variable; FGV)とごっちゃになって呼ばれることがあります。

 

(28) Action Engines in LabVIEW | LinkedIn
https://www.linkedin.com/pulse/application-engines-labview-bytelabs-nbw3f/

メッセージ6/6
47件の閲覧回数