NI製品ディスカッション

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

DAQmxの再生成モードについて

解決済み
解決策を見る

いつも参考にさせていただいております。

 

DAQmxでアナログ信号を生成するときの再生成モードについて

サンプルプログラムやHelp、このコミュニティの過去ログなどを見たのですが

自分の理解であっているのかどうか良くわからないので確認させてください。

 

DAQmxのアナログ出力における再生成モードの設定は

①再生成を許可しない

②再生成を許可-オンボードメモリのみ使用がTRUE

②再生成を許可-オンボードメモリのみ使用がFALSE

の3種類。

 

主な特徴としては、

①:PCメモリ上にバッファを生成し、そのバッファからDAQデバイスに直接データを書き込む。

バッファのデータは再利用されないため、常に新しいデータを書き込む必要がある。

タスク実行中にパラメータ(周波数、電圧レベル等)を変更できるが、PCの使用状況によってはバッファアンダーランが生じ

信号生成が停止することがある。

 

②バッファを生成せず、デバイスのFIFOメモリに直接データを書き込む。FIFOメモリのサイズはデバイスに依存し、

サイズを超えるデータは書き込めない。

タスク実行中はFIFOメモリにアクセスできないため、タスク実行中に信号のパラメータを変更することはできないが、

PCの使用状況に依存せず安定して信号を出力することが可能。

 

③バッファからデバイスのFIFOにデータを転送し、FIFOのデータを使用して信号を生成する。

FIFOへのデータ転送は繰り返し実行されるため、①のようにタスク実行中でも信号パラメータを変更することが可能な上、

PCの使用状況の変化等でデータ転送タイミングが遅れてもFIFOのデータを再利用するので信号出力は停止しない。

しかし、データ転送タイミングの設定をきちんと行わないと出力信号に不連続点(グリッチ)が発生する。

 

上記のような理解で正しいでしょうか?

特に③についてがいまいちピンときていないのですが。。。

 

なお、動作環境としてはLabVIEW8.5、Windowsを想定しています。

 

 

0 件の賞賛
メッセージ1/7
4,068件の閲覧回数
解決策
受理者 hemp

平素より弊社の製品をご利用頂きまして誠にありがとうございます。
日本ナショナルインスツルメンツ技術部の巳波と申します。


1. 再生成を許可しない

PCメモリ上のバッファに書き込まれたデータがオンボードメモリ(FIFO)に転送され、オンボードメモリに書き込まれたデータが順番に出力されます。
書き込まれたデータが出力されるのは1回のみになりますので、書き込まれたすべてのデータが出力され終わった後は、出力するデータがなくなってしまいます。
このバッファアンダーランを回避するために、データを書き込むスピードがデータが出力されるスピード(アップデートレート)より速くなくてはいけません。
タスク実行中にパラメータを変更することができます。(変更後のデータがPCメモリ上のバッファに書き込まれ、このデータが順番に出力されます。)


2. 再生成を許可-「オンボードメモリのみ使用」がTRUE

PCメモリのバッファを使用せず、デバイスにあるFIFOメモリ(オンボードメモリ)に直接データを書き込み、デバイスがオンボードメモリのデータを出力いたします。
オンボードメモリのデータがすべて出力された後は、また同じデータが出力されます。
PCメモリのバッファを使用しないため、PCの使用状況に依存せず信号を出力することが可能ですが、オンボードメモリの大きさはデバイスによって決まっています。
各デバイスのオンボードメモリの大きさは弊社ウェブサイトの仕様に記載されております。


3. 再生成を許可-「オンボードメモリのみ使用」がFALSE

仰る通りでございます。PCメモリ上のバッファに書き込まれたデータがオンボードメモリ(FIFO)に転送され、オンボードメモリに書き込まれたデータが順番に出力されます。
1. と同じようにタスク実行中にパラメータを変更することができます。
仮に新しいデータが届くのが間に合わず、書き込まれたすべてのデータが出力され終わってしまった場合には、同じデータが繰り返し出力されるので信号出力が途切れることはありませんが、同じデータを再出力中に新しいデータが届いた際に、出力するデータが古いものから新しいものになる境目が不連続点(グリッチ)となって現れます。

*********************************************************************************
日本ナショナルインスツルメンツ株式会社 技術部 巳波裕介
Yusuke Minami, Applications Engineering, National Instruments Japan
技術サポートウェブページ: http://www.ni.com/support/ja
お問い合わせフリーダイヤル: 0120-527196
*********************************************************************************
0 件の賞賛
メッセージ2/7
4,028件の閲覧回数

巳波様

 

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

 

③について、

 

>同じデータを再出力中に新しいデータが届いた際に、出力するデータが古いものから新しいものになる境目が不連続点(グリッチ)となって現れます。

 

再出力中に新しいデータが届いた場合、

A.古いデータが残っていても直ちに新しいデータが出力される

B.再出力中の古いデータを全部出力してから新しいデータが出力される、

C.古いデータと新しいデータが交互に出力される(ヘルプを読むとこの状況をグリッチというようですが。。。)

D.上記A~Cがランダムに発生し、決まっていない

のいずれの動作になりますか。

 

私の希望はBの動作になるよう規定したいのですが、そのようなことは可能でしょうか。

 

 

0 件の賞賛
メッセージ3/7
4,018件の閲覧回数
hemp 様

いつもお世話になっております。
日本ナショナルインスツルメンツ技術部の巳波です。

PCメモリ上に確保されるバッファというのは循環バッファと呼ばれるタイプのもので、バッファの終端にサンプルを書き終えると、次はバッファの先端から上書きし始めます。
データをアナログ出力する際も、バッファの終端のサンプルを出力し終えると、次はバッファの先端のサンプルから出力し始めます。

「再生成を許可」にしている場合、デバイスが現在バッファにあるすべてのデータをアナログ出力し終えた後(言い換えれば古いデータを再出力し始める瞬間)に、次に新しいデータが届いた際の書き込み位置はバッファの最初の部分に戻ります。(LabVIEWヘルプの「再生成モードプロパティ」参照)

例えばバッファのサイズが1000個で、新しいデータが届かず500個目の番地のサンプルを再出力している途中に新しいサンプルが200個届いたとすると、バッファの1個目から200個目までの番地に新しいサンプルを上書きします。その場合でも、次に出力されるのは501個目の番地のサンプル(=古いサンプル)です。その後502個目、503個目…と出力していき、バッファ終端の1000個目の番地のサンプルが出力された後に、やっとバッファ先端の1個目の番地のサンプル(=新しいサンプル200個で構成されるデータの1個目の要素)が出力されます。

また、次の新しいデータが届くのが遅い場合、C.(古いデータと新しいデータが交互に出力される)、つまりグリッチが発生する可能性もあります。

まとめますと、「データをバッファに書き込むタイミングとサンプルがデバイスに出力されるタイミングにより B.、C. のいずれかが起こる」というのがご質問に対する回答です。

C.(グリッチ)を回避し、B.(再出力中の古いデータを全部出力してから新しいデータが出力される)になるようにするには

I 一度に書き込むサンプル数をバッファサイズと同じにして、バッファの一部ではなく全体を一度に上書きするようにし、
II さらにバッファにデータを書き込むタイミングをバッファのデータが1周分全て出力されるのにかかる時間(=バッファサイズ (Samples) ÷ アップデートレート (Samples/sec) )の倍数になるように設定する

という方法があります
但しこれはあくまでもソフトウェアタイミングですので、ミリ秒単位の誤差を含むことは避けられません。
「バッファサイズ (Samples) ÷ アップデートレート (Samples/sec)」 の値が大きいほど誤差は小さくなりますが、その分新しいデータが反映されるまでの時間が長くなります。
特にアップデートレートが大きい場合には現実的ではなく、お薦めはできません。

出力信号が正確に新しいサンプルに切り替わるようにするにはやはり「再生成を許可しない」に設定する必要があります。
 
*********************************************************************************
日本ナショナルインスツルメンツ株式会社 技術部 巳波裕介
Yusuke Minami, Applications Engineering, National Instruments Japan
技術サポートウェブページ: http://www.ni.com/support/ja
お問い合わせフリーダイヤル: 0120-527196
*********************************************************************************
0 件の賞賛
メッセージ4/7
3,961件の閲覧回数

巳波さま

 

丁寧な説明ありがとうございます。

やっと再生成モードをONにしたときの挙動について理解することができました。

ありがとうございました。

 

また何かありましたらよろしくお願いいたします。

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

 

hemp 様

いつもお世話になっております。
日本ナショナルインスツルメンツ技術部の巳波です。

ご疑問が解消されたとのこと何よりでございます。
また、「解決策に決定」にチェックを入れて頂き、誠にありがとうございました。

この度は弊社ディスカッションフォーラムをご利用頂き、誠にありがとうございました。
こちらこそ、今後とも何卒宜しくお願い申し上げます。
 

 

*********************************************************************************
日本ナショナルインスツルメンツ株式会社 技術部 巳波裕介
Yusuke Minami, Applications Engineering, National Instruments Japan
技術サポートウェブページ: http://www.ni.com/support/ja
お問い合わせフリーダイヤル: 0120-527196
*********************************************************************************
0 件の賞賛
メッセージ6/7
3,912件の閲覧回数

お世話になります。

 

関連した質問ですので、こちらでお願いさせて頂きます。

 

再作成の制御に関する関数がどれなのだかいまいちわかってません。

①再生成を許可しない

 再作成の許可不許可自体は「DAQmx書き込み」”プロパティノード”で選択可能だということはわかるのですが。

②再生成を許可-オンボードメモリのみ使用がTRUE

②再生成を許可-オンボードメモリのみ使用がFALSE

 の”オンボードメモリのみ使用”の選択の方法がわからないです。

 

どの関数を用いればよいでしょうか?

LabVIEWのバージョンは10.0です。

 

以上、よろしくお願い致します。

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