02-14-2020 07:13 PM
計測停止ボタンで自動停止するようにサブVIを作成し行っていますが、VIが終了した際に停止ボタンが押されたままになってしまいます。
計測停止ボタンが自動停止されてからインターバル時間(ITI)を開始10secさせ、終了というプログラムを組んでいますが、VI終了後に停止ボタンが押されたままの状態を初期値(false)にしたいのですが、どのように組めばよろしいでしょうか?
02-14-2020 07:40 PM
ボタンには2種類ありまして、スイッチとラッチです。おそらくボタンの設定がスイッチになっており、
このために停止ボタンが押されたままになっていると推測します。
こちらを参考に、ラッチへ変更してみてください。
02-15-2020 01:52 AM
ご返答ありがとうございます。
私もそのように思っていたのですが、今回は計測ボタンをスイッチ動作にしている理由として、ローカル変数を使用するためスイッチ動作にしております。
なので、ラッチにしてしまうとその他のVIに影響が出てしまう状況です。
02-17-2020 02:39 AM
igaguriさん、こんにちは
VI終了時に、ローカル変数にFALSEを書き込むようなプログラムとすることはできませんか?
あるいは、VI始動時にFALSEを書き込むこともできるかなと思います。
ローカル変数はエラー配線もなく実行順番を定義できないので、フラットシーケンスストラクチャを用いるとうまくいくと思います。
02-17-2020 03:29 AM
ご返信有難うございます。
サブVIの中にフラットシーケンスを用いたのですが、それを行うと主な筋電計測がストップしてしまい、本末転倒でした。
この流れでいうとどのように配線すべきですか?
添付にサブVIと本プログラムのVIを載せておきます。
02-17-2020 06:13 AM
サブVIにフラットシーケンス、とされていますが、添付していただいた「計測ボタン.vi」にはフラットシーケンスストラクチャは使用されていないですね。別のサブVIがあったのでしょうか?
プログラムの流れは少し不可解な部分がある(ダイナミックデータをケースストラクチャのセレクタ端子に配線するのは個人的に珍しいかなと。また、転置配列のデータを毎回正しく保存できるようなコードにはなっていないような気がします。)のでコードの中身には触れられませんが・・・
すべてのループが終わってから最後にFALSEを書き込むことになると思うので、少し無理やりですが添付の形にすれば一応実現すると思いますがいかがでしょうか?
02-17-2020 07:07 AM
計測停止ボタンviは少し変更しました。
すみません。独学である為、至らない部分もあるかと思います。
一応、ダイナミックデータでの条件を基にケースストラクチャにするのは、今回は必須だったので・・
転置配列データも正しくデータ入っている感じです・・(試行してデータは毎回正しく計測されています。)もし、よろしければ、なぜそのように思うのかご指摘頂けると幸いです。
添付のように組みましたが、ループ終了なっても、やはり計測ボタンは押されたままになってしまいます・・・
02-17-2020 09:05 PM
ダイナミックデータでの条件を基にケースストラクチャにしている・・・んですね。
直前で不等号の関数を使用しているのでFALSEやTRUEに変換してますがダイナミックデータは基本的に波形データ(複数のデータ点になります)を扱うので
どういった場合にFALSEか、TRUEかを扱いづらくなるような気がします。
まぁここは本題とはずれているのでまた別の機会に・・・。
データが正しく入らない可能性があると感じたのは、実行順番が指定されていないためです。「保存」という動作と、「DAQアシスタントからのデータをもとに転置配列のデータを得る」
という動作は順番が指定されていないので、おそらくは保存の動作が後に来るのが望ましいと思います(そして現状はほとんど保存が後に来ているとは思いますが)が、この順番が
保証されていないために、ごくまれに「保存が先に行われる」という動作になってしまう可能性があると思います。例え何千回、いや何万回に一回という確率であっても、いやですよね。
(しかもいつなるかわからない、なっても気づかないという可能性もあるかもしれないです)
私が勘違いをしているかもしれませんが、「ループ終了なっても、やはり計測ボタンは押されたままになってしまいます・・・」は、特定のループの終了のことを
おっしゃっていますか?あるいはプログラム自体の終了のことをおっしゃっているでしょうか?後者だとしたら、計測ボタンがFALSEに戻らないということはないと思うのですが・・・。
あと、計測停止ボタンは貼っていただいたプログラムだと表示器(計測ボタン.viの出力を表示)になっていますが、それでigaguriさんが意図された通りになっているのかも気になりました。
停止ボタンはフロントパネルでユーザーが押して停止させるという動作であることが多いと思いますがいかがでしょう?
02-17-2020 10:06 PM
ご指摘有難うございます。
①データに関しては、現状計測を進めており、保存できている状況です。ファイルが先に作られ、随時データが入力されているようになっていると思うのですが・・・現状、データが入っていないというトラブルは今のところありません。
②計測自動停止ボタンは、少し改変しようと思って作ってみました。
実際の計測では、旧のプログラムで行っており、実際にはフロントパネルで停止ボタンを押している状況です。しかし、その手間を省きたかったので、今回のような形に至りました。
02-18-2020 10:24 AM
御世話様でございます。
横やり失礼致します。vi拝見致しました。この先どのようなプログラムに発展させるのか不明ですが、早い段階でデザイン方法を変更された方がよいように感じました。以下のページを御参照されてはいかがでしょうか?
http://www.ni.com/tutorial/3023/ja/
また並列処理が必要な部分と並列でなくてもよい処理(例:イベントで賄えるもの<イベントは通常操作者は1名のためボタンが2個同時に押されることはありません)に別けて、整理されることをお勧めします。
上記例ではqueueでの実装サンプルが示されていますが、同様な方法を拡張することで拡張性の高いプログラムにすることが可能です。
--