From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

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

計測停止ボタン 自動停止

計測停止ボタンで自動停止するようにサブVIを作成し行っていますが、VIが終了した際に停止ボタンが押されたままになってしまいます。

計測停止ボタンが自動停止されてからインターバル時間(ITI)を開始10secさせ、終了というプログラムを組んでいますが、VI終了後に停止ボタンが押されたままの状態を初期値(false)にしたいのですが、どのように組めばよろしいでしょうか?

0 件の賞賛
メッセージ1/11
2,495件の閲覧回数

ボタンには2種類ありまして、スイッチとラッチです。おそらくボタンの設定がスイッチになっており、

このために停止ボタンが押されたままになっていると推測します。

こちらを参考に、ラッチへ変更してみてください。

ブールオブジェクトの機械的動作を変更する

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ2/11
2,490件の閲覧回数

ご返答ありがとうございます。

 

私もそのように思っていたのですが、今回は計測ボタンをスイッチ動作にしている理由として、ローカル変数を使用するためスイッチ動作にしております。

なので、ラッチにしてしまうとその他のVIに影響が出てしまう状況です。

0 件の賞賛
メッセージ3/11
2,440件の閲覧回数

igaguriさん、こんにちは

 

VI終了時に、ローカル変数にFALSEを書き込むようなプログラムとすることはできませんか?

あるいは、VI始動時にFALSEを書き込むこともできるかなと思います。

ローカル変数はエラー配線もなく実行順番を定義できないので、フラットシーケンスストラクチャを用いるとうまくいくと思います。

0 件の賞賛
メッセージ4/11
2,302件の閲覧回数

ご返信有難うございます。

サブVIの中にフラットシーケンスを用いたのですが、それを行うと主な筋電計測がストップしてしまい、本末転倒でした。

この流れでいうとどのように配線すべきですか?

添付にサブVIと本プログラムのVIを載せておきます。

すべてをダウンロード
0 件の賞賛
メッセージ5/11
2,300件の閲覧回数

サブVIにフラットシーケンス、とされていますが、添付していただいた「計測ボタン.vi」にはフラットシーケンスストラクチャは使用されていないですね。別のサブVIがあったのでしょうか?

 

プログラムの流れは少し不可解な部分がある(ダイナミックデータをケースストラクチャのセレクタ端子に配線するのは個人的に珍しいかなと。また、転置配列のデータを毎回正しく保存できるようなコードにはなっていないような気がします。)のでコードの中身には触れられませんが・・・

 

すべてのループが終わってから最後にFALSEを書き込むことになると思うので、少し無理やりですが添付の形にすれば一応実現すると思いますがいかがでしょうか?

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

計測停止ボタンviは少し変更しました。

 

すみません。独学である為、至らない部分もあるかと思います。

一応、ダイナミックデータでの条件を基にケースストラクチャにするのは、今回は必須だったので・・

転置配列データも正しくデータ入っている感じです・・(試行してデータは毎回正しく計測されています。)もし、よろしければ、なぜそのように思うのかご指摘頂けると幸いです。

 

添付のように組みましたが、ループ終了なっても、やはり計測ボタンは押されたままになってしまいます・・・

0 件の賞賛
メッセージ7/11
2,286件の閲覧回数

ダイナミックデータでの条件を基にケースストラクチャにしている・・・んですね。

直前で不等号の関数を使用しているのでFALSEやTRUEに変換してますがダイナミックデータは基本的に波形データ(複数のデータ点になります)を扱うので

どういった場合にFALSEか、TRUEかを扱いづらくなるような気がします。

まぁここは本題とはずれているのでまた別の機会に・・・。

 

データが正しく入らない可能性があると感じたのは、実行順番が指定されていないためです。「保存」という動作と、「DAQアシスタントからのデータをもとに転置配列のデータを得る」

という動作は順番が指定されていないので、おそらくは保存の動作が後に来るのが望ましいと思います(そして現状はほとんど保存が後に来ているとは思いますが)が、この順番が

保証されていないために、ごくまれに「保存が先に行われる」という動作になってしまう可能性があると思います。例え何千回、いや何万回に一回という確率であっても、いやですよね。

(しかもいつなるかわからない、なっても気づかないという可能性もあるかもしれないです)

 

私が勘違いをしているかもしれませんが、「ループ終了なっても、やはり計測ボタンは押されたままになってしまいます・・・」は、特定のループの終了のことを

おっしゃっていますか?あるいはプログラム自体の終了のことをおっしゃっているでしょうか?後者だとしたら、計測ボタンがFALSEに戻らないということはないと思うのですが・・・。

あと、計測停止ボタンは貼っていただいたプログラムだと表示器(計測ボタン.viの出力を表示)になっていますが、それでigaguriさんが意図された通りになっているのかも気になりました。

停止ボタンはフロントパネルでユーザーが押して停止させるという動作であることが多いと思いますがいかがでしょう?

0 件の賞賛
メッセージ8/11
2,260件の閲覧回数

ご指摘有難うございます。

①データに関しては、現状計測を進めており、保存できている状況です。ファイルが先に作られ、随時データが入力されているようになっていると思うのですが・・・現状、データが入っていないというトラブルは今のところありません。

 

②計測自動停止ボタンは、少し改変しようと思って作ってみました。

実際の計測では、旧のプログラムで行っており、実際にはフロントパネルで停止ボタンを押している状況です。しかし、その手間を省きたかったので、今回のような形に至りました。

0 件の賞賛
メッセージ9/11
2,252件の閲覧回数

御世話様でございます。

横やり失礼致します。vi拝見致しました。この先どのようなプログラムに発展させるのか不明ですが、早い段階でデザイン方法を変更された方がよいように感じました。以下のページを御参照されてはいかがでしょうか?

http://www.ni.com/tutorial/3023/ja/

また並列処理が必要な部分と並列でなくてもよい処理(例:イベントで賄えるもの<イベントは通常操作者は1名のためボタンが2個同時に押されることはありません)に別けて、整理されることをお勧めします。

上記例ではqueueでの実装サンプルが示されていますが、同様な方法を拡張することで拡張性の高いプログラムにすることが可能です。

--

http://easymeasurements.com

--
http://EasyMeasurements.com
メッセージ10/11
2,235件の閲覧回数