12-27-2018 01:00 AM
いつもお世話になっております。
NI9223を用いて電圧データを保存するプログラムを作成したのですが、ループタイムを計測したところループタイムにばらつきがあることが分かりました。
原因を探っていたのですがよく分かりません。
添付のVIなのですが問題になり得る部分があるでしょうか。
ばらつきについてなのですがAI sample rateを500Hz、software loop timeを2msに設定したところ、測定されたループタイムが1~3msの間で変動していました。
よろしくお願いいたします。
12-27-2018 01:15 AM
すみません。
添付が上手くいっていなかったようなのでスクリーンショットを添付いたします。
12-27-2018 02:24 AM
使用されているティックカウントの関数は分解能1msecなので、
1msecのずれを論ずるのはあまり意味のないことと思います。
その上でまずは、RT Applicationの確定・非確定タスクの考え方を学ばれるべきです。
Creating Deterministic Applications with the Real-Time Module (Real-Time Module)
ループの中でTDMSへの書き込みを行ってますが、
Dividing Tasks to Create Deterministic Multithreaded Applications
の項を見ていただくと、これは非確定タスクなのでループを分けることが推奨されます。
他にも強制ドットをなくす、そもそもグラフを置かないなど、改善できるところは複数あるかと思います。
05-28-2019 02:28 AM
お世話になっております。
Emboar様のアドバイスに従い、データの読み出しと保存でループを分け、シェア変数を用いてループ間のデータのやり取りをしようとしているのですが上手くいきません。
保存側で一度読み取られたデータを複数回読み取って保存してしまいます。
これはどのように解決すべきでしょうか。
よろしくお願いいたします。
06-05-2019 02:17 AM
HIKO様
平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の伴です。
画像を拝見させていただきました。
確認させていただきたい内容が複数ございますので、
以下についてご回答いただけますと幸いです。
1.一度集録されたデータが複数回保存ループで呼び出されているという認識でよろしいでしょうか。
2.FPGAターゲット上でデータを集録しているという認識で合っていますでしょうか。
3.FIFOでのデータ転送は既にお試しいただいておりますでしょうか。
もしFIFOでのデータ転送はまだお試し頂いていなければ、お試し頂く事は可能でしょうか。
シェア変数は一般的にはネットワーク上、複数ループ間などで最新値のみの受け渡しをする際に使用されます。
尚、FIFOでのデータ転送では確実に書き込まれたデータを漏れなく転送できますので、
今回お試し頂ければと存じます。
FIFOについての概要は以下のリンクにてご確認いただけます。
FIFOを使用してデバイスまたはストラクチャ間でデータを転送する (FPGAモジュール) - LabVIEW 2018 FPGAモジュールヘルプ - National Instruments
http://zone.ni.com/reference/ja-XX/help/371599P-0112/lvfpgaconcepts/fpga_transfer_data/
また、FIFOの作成方法についての資料もございますので、
ご参考にして頂けると幸いです。
FPGA VIでFIFOを作成する (FPGAモジュール) - LabVIEW 2018 FPGAモジュールヘルプ - National Instruments
http://zone.ni.com/reference/ja-XX/help/371599P-0112/lvfpgahelp/fpga_creating_fifos/
ご確認の程よろしくお願い申し上げます。
06-11-2019 09:55 PM
日本ナショナルインスツルメンツ技術部 伴様
ご回答ありがとうございます。
説明が不足しており申し訳ありません。以下に御質問の回答をさせて頂きます。
1. 仰る通り、一度集録されたデータが複数回保存ループで呼び出されているようです。
2. 仰る通りです。
3. FIFOではまだ試していないので試してみます。
リンクの添付等ご親切にありがとうございます。
06-12-2019 12:00 AM
「同じ値を読んでいる」のは、RT側で制御器読み取り・書き込みによって値を読み込んでいるからですね。
これでは、FPGA側が制御器・表示器の値を更新するまで、同じ値を読み込んでしまいます。
ご指摘のようにFPGA FIFOを使用することで解決するかと思います。
一方FPGA FIFOを使用するのであれば、タイミングループは不要になると思います。
なぜなら、FPGA FIFOへのデータ書き込み速度によって読み取りに必要な時間は決まるからです。
1msec毎に10個データをFPGAから書き込む、RT上の読み取りで毎回10個読み取りたいのであれば、
ループレートは必然的に1msecとなります。