NI製品ディスカッション

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

キューを用いたデータの取得と保存について

いつもお世話になっております。
早速ですが、質問させていただきます。
 
データ生成とデータ保存を別々に処理させるためにキューを用いる必要があります。
NIサンプルファインダにキューを使用したサンプル(Queue Basics.vi)を参考にして、作成してみたのですが、所望の動作を行いません。
ランダム定数を用いた制御器20個のうち各々10個から1個のみ2の階乗の数字がある場合に、そのデータを対応する1から160までの番号で計測ファイルへ書き込まれるようにしたいのですが、フロントパネル内の「キューの要素」、「最後に挿入された要素」「最後に削除された要素」全て何の変化もありません。
何故でしょうか?
よろしくお願いいたします。
すべてをダウンロード
0 件の賞賛
メッセージ1/6
9,358件の閲覧回数

Medphys_ST様、
返事が遅くなり大変申し訳ございません。

日本ナショナルインスツルメンツ技術部の神谷です。

添付して頂いたVIを参考に作成したサンプルのVIを作成しましたので、ご参考にして頂きたいと思います。今回はキューをしない方法を用いましたが、希望がございましたらキューを使用するバージョンも用意致しますのでご連絡下さい。

サンプルにもありますように、配列を用いますとプログラムがすっきりします。実際に実行した結果、かなり試行を繰り返さないと目的のデータがとれないようです。目的の動作と異なる場合もお知らせ下さい。

日本ナショナルインスツルメンツ株式会社
技術部 神谷

すべてをダウンロード
メッセージ2/6
9,275件の閲覧回数
日本ナショナルインスツルメンツ株式会社
神谷 様
 
ご回答いただき、誠にありがとうございます。
添付していただいたVIについて動作検証を行ったところ、所望の動作をいたしました。
 
前回の添付画像「frontpanel image.jpg(344kb)」の左上のループはデータ生成部分であり、今回添付いたしましたVI(FPGA module systemを使用)画像(「blockdiagram image2」)を模擬して作成しています。FPGA VIではFIFOを用いているのでエミュレータによるシミュレーションで正しいデータが得られません。そこでまずは前回の添付VI画像(「frontpanel image.jpg(344kb)」)によりシミュレーションを試み、所望の動作ができなかったため、前回質問させていただきました。
 
なお、FPGA VIでは配列化できないDIOPORTを用いています。ですので前回の添付VI画像では配列を用いませんでした。
 
添付いたしましたFPGA VI画像(「blockdiagram image2」)ではデータを集録する部分(集録ループ)とデータをHost VIに送る部分(通信ループ)で分けています。Host VI上ではキューを使用してDMA FIFOからのデータの抜き出しとデータの保存を分けるといった構成にしようと考えております。「frontpanel image.jpg(344kb)」は前文を考慮して作成したものです。
大変恐縮ではございますが、キューを使用するバージョンも用意していただけると大変幸いです。
 
よろしくお願いいたします。
 
 
0 件の賞賛
メッセージ3/6
9,243件の閲覧回数

日本ナショナルインスツルメンツの神谷です。

キューを用いたバージョンを添付しましたので動作のご確認をお願い致します。不明な点がございましたらお問い合せ下さい。

メッセージ4/6
9,186件の閲覧回数

日本ナショナルインスツルメンツ株式会社

神谷 様

サンプルVIを添付していただき、ありがとうございます。

動作確認をしましたところ、添付いたしましたテキストのように、データが重複して保存されている傾向が見られます。これはファイルに保存するループの速度が他の2つのループの速度よりも早いために起こるものなのでしょうか。また、キューの要素が0から変化しない原因についても教えていただけたら幸いです。

また、別のVIで生成されたデータを、キューを用いたVIでデータの抜き出し及び保存を行う場合にも、添付していただいたVIにあるように「data」という取得するキューの名前を入力しなければならないのでしょうか。

添付していただいたVIの左上のデータを生成するループを、別のVIからデータの抜き出しを行うループに変える場合にでも、そのVIの構成は同じでしょうか。

別のVIからのデータの抜き出しは、前回添付いたしました「frontpanel image.jpg」の左上のデータ生成部分単独のVIからのデータの抜き出しを意味しています。

よろしくお願いいたします。

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

日本ナショナルインスツルメンツの神谷です。

データが重複してしまうのは、下のループが100ミリ秒ごとに実行されており、データが生成されたかにかかわらず毎回 Last Element Inserted にある値を書き込んでしまうからです。キューが空の時はデータを書き込まないようにする処理が必要になります。

独立して実行されている別VIのキューにあるデータはそのままでは取り出せません。サブVIとしてキューがワイヤで繋がっている必要があります。

左上のループの内容をMedphys様が作成されたものに置き換える場合、データタイプが違っているので残念ながらそのままでは置き換えできません。私の作成したVIで使用しているデータタイプはI16型の1次元配列になっています。

宜しくお願い致します。

メッセージ6/6
9,125件の閲覧回数