02-18-2025 08:50 PM
いつもお世話になっております。Labviewのプログラミングについての質問です。
現在焦点距離を合わせるプログラムの開発のために、HSC-103というステージコントローラを用いてOSMS26-100というステージの位置の制御をしています。
現状のプログラムでは、シリアル通信➡速度決定➡相対移動(1回)➡座標の読み込みとなっています。
相対移動をプログラム実行中に、スイッチのON/OFFをすることで何度も行いたいのですがどうすればよいか知恵をお貸しして欲しいです。
8_zステージ調整がメインプログラムです。
02-25-2025 07:01 AM
多分イベントストラクチャを使えば、一応「動く」とは思うのですが、もっと上手な組み方がある気がします。ケースストラクチャが多すぎるのが気になっているのと、この形だとVISAオープン、クローズを繰り返すことになるのでよくないです。が、ひとまずVIを共有します。
本来はプログラムの一番最初でVISAリソースを設定し、動作制御部分のみを繰り返し、プログラムの最後でVISAリソースをクローズする、という書き方をするべきです。サンプルにそういう感じのがあった気がしますので、ヘルプ→サンプルを検索、からVISA、シリアル、などで検索して参考にしてみてください。
02-26-2025 09:25 PM
ご回答ありがとうございます。イベントストラクチャ上手く動きました。サンプル参考にしてみます。
後1つ質問なのですが、ケースストラクチャを使った場合Visaオープン、クローズを繰り返すというのが初耳でした。ストラクチャを使うと必ずそのような処理になるのでしょうか?
02-26-2025 10:17 PM
すみません、2つの別の問題をいっぺんに話してしまいました。
・ケースストラクチャのネストについて
通常であればケースストラクチャは2重以上にしなくても実装できるんじゃないかと思います。ここまで多重になっているのは、何か無駄なロジックが組まれている可能性があり、あまり複雑なロジックだとデバッグしにくいだろうな、という老婆心です。
・VISAリソースのオープンクローズについて
ベストプラクティスはプログラムの初期化ステートでオープン、終了ステートでクローズ、です。ベストプラクティスに則っていない、という話をしています。
ご参考まで。
02-26-2025 11:22 PM
度々のご回答ありがとうございます!
ネストが複雑化している部分については、一つにまとめてみようと思います!
VISAリソースのオープン・クローズについては、サブVIを作らないのが正解ということでしょうか?
02-27-2025 02:55 AM
>サブVIを作らないのが正解
そうではありません。繰り返し初期化やクローズ処理がされないようにモジュールを作ることも可能です。Action Engineというモジュールの作り方があります。日本語だと機能的グローバル変数(Functional Global Variable; FGV)とごっちゃになって呼ばれることがあります。
(28) Action Engines in LabVIEW | LinkedIn
https://www.linkedin.com/pulse/application-engines-labview-bytelabs-nbw3f/