07-26-2017 09:54 AM - 編集済み 07-26-2017 10:06 AM
問題が変わった為、再度投稿させていただきました。
現在、トリガをかけて受け取った信号、また加算平均を行った信号を
グラフに表示させ、Excelに数値データを保存させるというプログラムを作っています。
ですが、エラー”200279” アプリケーションがハードウェア集録に追いついていません。
と表示されます。
NIの技術サポートデータベースから見つけた解決方法にある
強制viを自分のプログラムにも適用してみたものの、エラーが出ます。
DAQmxエラー”-200279”の対処法
http://digital.ni.com/public.nsf/allkb/82B0DFD4DA91B3B4862576E10022A516#numSamples
LabVIEW初心者、プログラムを見よう見まねで独学ということもあり、
あまり理解は深くありません。
どうか、ご教授お願いします。
07-29-2017 03:38 AM
こんにちは。
初心者の場合はサンプルを参考にするといいかもしれませんね。
サンプルファインダー->ハードウェア入力と出力->DAQmx->アナログ入力->電圧-連続入力
に簡単なトリガを使用した電圧連続入力するVIがあります。
また、エラー解消としてバッファサイズを大きくする方法も有るかと思いますがためしてますかー?
プロパティノードで大きく設定もできますよー
08-01-2017 08:28 AM
返信ありがとうございます。
また、返信が遅くなり申し訳ありません。
TKSTさんの言うように、電圧‐連続入力のサンプルプログラムを見ました。
また、サンプルプログラムで”アナログ開始トリガ”、サンプルクロックソースは”OnboardClock”を選択し、
サンプル数は100、サンプルレートは1000とデフォルトの設定を使用し、実行してみました。
ですが、エラーコード”-200284”が表示されました。
このエラーはどうすれば解消できるのでしょうか。
因みに、ファンクションジェネレータから流した信号は4.0Vpp@90.0Hzです。
初歩的な質問かもしれませんがご教授お願いします。
08-01-2017 11:17 PM - 編集済み 08-01-2017 11:28 PM
このエラーは「収集したサンプルを受け取る前にタイムアウトが発生したため」に発生するようです。
下記KBに対処法がまとめてありますのでご参照ください。
[DAQmx読み取りVIからエラー -200284が発生するのはなぜですか? - National Instruments]
http://digital.ni.com/public.nsf/allkb/39E37E27FD35AFF786256E0600396A86
何卒宜しくお願いいたします。
08-02-2017 03:15 PM
横から失礼致します。
エラー:-200284が発生する理由は、Tomo.Tanakaが案内している通り、タイムアウトが発生しているためです。
現状、初めにアップロードされているVIからサンプリングレート、読み取り数以外に変更は加えられていますか?
特に変更がない場合、VIを開始後、211秒以内に開始トリガがかからないとタイムアウトエラーが発生するはずです。
現状、サンプリングレートを変更することでエラー:-200279は回避することができていますが、
何故回避できたのか論理的な説明をした方がよいと思いますので、説明させていただきます。
初めの質問であるエラー:-200279はPCバッファ(DAQデバイスからデータが転送されて、データをストレージするためのPC側メモリ領域)のオーバーフローが発生していることが原因です。
投稿されたコーディングですと、サンプリングレートが200 kS/sなので、5usに一点データを集録し、PC側に転送してます。
また、PC側で確保されるバッファ(メモリ)サイズは、以下のリンクの通り決められます。
○バッファサイズの決定 - NI-DAQmxヘルプ - National Instruments
http://zone.ni.com/reference/ja-XX/help/370466AA-0112/mxcncpts/buffersize/
今回の場合、DAQmxタイミング関数のサンプル数/チャンネル端子には"211"という非常に小さい値が設定されているので、
バッファサイズはデフォルト通り100kSample分確保されます。
また、今回DAQmx読み取り関数では1サンプルしか取得しないモードで動いているので、呼び出されるたびに1Sampleしか取得しません。
DAQmx読み取りが実行される速度はCPUの最速の速度となるので、もちろんCPUの種類・他にどういうアプリケーションを実行しているかなどの環境に大きく依存しますが、数百us程度間隔でDAQmx読み取り関数は実行されていると思います。
つまり、100kSamples分設けられたPCバッファには、5usに1sampleの速度でデータが書き込まれているのに対し、そのデータは数百usに1sampleの速度で読み取られるような設定となっているということです。
容易に想像していただけると思いますが、明らかに書き込み速度に対して読み取り速度が遅いので確実にPCバッファはオーバーフローします。
サンプルレートを1kS/sにして上記オーバーフローエラーが解決したのは、書き込み速度が読み取り速度に対して早くなったためです。
では、書き込み速度が読み取り速度に対して早くなると何が起こるでしょうか。
この場合、データを読み取ろうとしても、読み取るデータがそもそもない状態が発生します。
データが何もない場合、DAQmx読み取り関数に設けられているタイムアウト端子で設定している秒数分、データがくるのを待ちます。
(アップロードしているコーディングだと、プロパティノードRelative toの値が強制されたものがタイムアウト端子に接続されています。Relative toからは一番小さくても10424の数値が出て来るので強制されて、タイムアウトまでの時間は必ず211秒となっています)
いただいたコードですとタイムアウトまでの時間は211秒となっているので、測定が開始されていさえすればタイムアウトエラー:-200284は発生しえません。(サンプリングレート1kS/sであれば、1msに1サンプルは書き込まれるので。)
とすると、開始トリガがかからずに測定が開始されていないことが原因だと推測されます。
なので、開始トリガがかかっているかお調べください。
この問題の初めのオーバーフローエラーを解決するためには、DAQmx読み取り関数を1サンプル読み取りモードで動かすのではなく、Nサンプル読み取りモードで動かすようにしてください。
1度の読み取りに1sampleのみ読み取るのでなく、複数サンプル読み取るようにするだけで問題は解決するはずです。
例えば、サンプリングレートを200kS/sと設定するとして、DAQmx読み取り関数で設定するサンプル数/チャンネルを2000と設定するだけで、問題なく測定できるようになるはずです。
長文にて失礼致しました。
何かご不明な点がございましたら、お知らせくださいませ。
08-03-2017 12:07 AM
Tomo.Tanakaさん
対処法をまとめてあるサイトを教えていただきありがとうございます。
08-03-2017 12:52 AM
Y.Satoさん
エラー”200279”が回避できたのか理論的に詳しく教えていただき、ありがとうございます。
このディスカッションフォーラムに投稿させてもらい、自分なりに考えた結果のプログラムを添付しておきます。(サンプルプログラムを書き換えただけですが)
内容としては、読み取り回数をfor文で制御するという簡単な物です、、、
ほしいデータ数だけ記録することにより、エラー”200279”は回避できました。
また、エラー”200284”はタイムアウトが発生しているため、ということを教えてもらい”-1”を入力することにより無限に待機するようにしました。
しかし、アナログ開始トリガをかけると信号がグラフ表示されません。
アナログ開始トリガのソースに書いてある”APFI0”、物理チャンネルの”Dev1/ai0”に配線をしているため、配線の間違いはないと思います。
プログラムもトリガ部はサンプルプログラムのままなので大丈夫だと思ったのですが、、、
図々しいとは思いますが、もし解決策がありましたらご教授お願いします。