From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, 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では、数値変更に応じてイベントストラクチャを動作させることを試みているのですが、実際に実行してみると数値が変更されているにも関わらずイベントストラクチャが全く反応しません。どのように修正すべきか、アドバイスをお願い致します。

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

raido 様

 

このイベントストラクチャでは、「“数値”の値変更」と「キーダウン」のイベントのみを処理するようにしていますので、それらのイベントが発生するまで待機しています。

そのため、上部のWhileループが回らず停止ボタンが押されても処理はされません。

 

さまざまな考え方があるとは思いますが、解決策の1つとしてはイベントストラクチャにタイムアウトのイベントケースを追加して、一定時間を越えたらWhileループが回るようにする方法があります。

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

yueno 様

 

アドバイスありがとうございました。

改めてご質問させて頂きたいのですが、以前添付したviにおいて、数値が変更される度にイベントストラクチャ内の処理を実行させるようにするにはどうすれば良いのでしょうか?

0 件の賞賛
メッセージ3/6
7,915件の閲覧回数
解決策
トピック作成者raidoが受理

数値表示器しかない場合は、プロパティノードの「値(信号)」が使えると思います。このプロパティノードを使用すると値の変更だけでなく、イベントも発生します。

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

yueno様

 

おかげさまで問題が解決しました。ありがとうございました。

ちなみに、イベント(数値の変更や追加など)に応じて何らかの処理をする方法として、今回お尋ねしたイベントストラクチャを用いる方法の他、キューを用いる方法やノーティファイアを用いる方法もあるようですが、これらはどのように使い分ければ良いのでしょうか?

それぞれのメリット・デメリットについてご教示頂けますと幸いです。

よろしくお願いします。

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

無事解決したようで何よりです。

 

今回のループ構成で停止ボタンの処理だけなら、添付ファイルのようにイベントケースの処理のみでの停止もできます。

 

キューとノーティファイアの違いですが、自分は簡潔にまとめると以下のようにとらえています。

・ ノーティファイアには、バッファがないが複数のプロセスでメッセージが読める。

・ キューには、バッファがあるが複数のプロセスでメッセージが読めない。

 

それぞれの特徴が長所短所につながりますので、それらを使うデータやアーキテクチャによると思います。

たとえば、ファイルメニュー ≫ プロジェクトを作成 から参照できるサンプルでみると、「キューメッセージハンドラ」はキュー関数を応用した方法でループが2つなので、キュー関数のみで処理しています(正確にはエラーによるWhileループ停止です)。

そして、「連続測定とログ」では3つ以上のループが使われており、ノーティファイアで複数プロセスに信号を渡しています。

 

このようなサンプルと見比べてみてはいかがでしょうか。

0 件の賞賛
メッセージ6/6
7,890件の閲覧回数