04-16-2018 06:14 AM
いつもお世話になっております。
現在c-RIOとNI 9263を用いて電磁アクチュエーターの駆動制御を行うプログラムを作成したいと考えています。
csvファイルに保存された電圧情報を9263を通して電磁アクチュエータに出力したいのですが、どのようなコードを書けばよいのでしょうか。
また、今回作成するプログラムをFPGAモードで作成した別のVIに組み込む予定なので、今回もFPGAモードで作成したいと考えております。
拙い質問で大変恐縮ですが、どうかお力添えお願いいたします。
解決済! 解決策の投稿を見る。
04-19-2018 04:34 AM
平素よりNI製品をご利用頂きまして誠に有難うございます。
日本ナショナルインスツルメンツ技術部の岡﨑です。いつもお世話になっております。
まずプログラムの流れとしてはWindowsのVIでファイルを読み込む必要があります。
ファイルがエクセルとのことでしたら、LabVIEWからの読み込みは可能となります。
下記資料のサンプルが参考になると思われます。
http://www.ni.com/example/28409/en/
WindowsのVIでエクセルファイルを読み込んだ後、
DMA FIFOを使用してFPGAモードのVIへデータ転送する方法を推奨いたします。
DMA FIFOの使用につきましては下記の様な資料もございます。
(英文資料となっておりますが、ご参考になれば幸いです)
http://zone.ni.com/reference/ja-XX/help/371599H-0112/lvfpgaconcepts/fpga_dma_how_it_works/
http://zone.ni.com/reference/en-XX/help/371599M-01/lvfpgaconcepts/fpga_transfer_data/
上記内容をご確認頂き、ご不明な点等あればご連絡くださいますようお願いいたします。
よろしくお願い致します。
04-22-2018 08:17 PM
まずCSVファイルについては下記の資料のように一つの関数を使えば読み取りは可能です。
.csv形式のスプレッドシートファイルをLabVIEWに取り込む方法
読み取ったデータを、下記のようにDMA FIFOを用いてWindowsからFPGAへ転送すればよいです。
Use DMA FIFOs to send data to and from an FPGA target (bidirectional data transfer)
04-23-2018 02:27 AM
皆様、非常に丁寧なご回答ありがとうございます。
参考にさせて頂きます。
05-08-2018 05:36 AM
プログラムを試作してみたのですが、FPGAの方でFIFOから電圧データを取り出す際に、データが一部抜け落ちているようです。
添付はFPGAのプログラムとホストのプログラムなのですが、どこを直せばよいのでしょうか。
自分では書き込みの速度のほうが読み取りの速度よりも遅いことが原因ではないかと考えているのですが、書き込みの速度はどのように設定すればよいのでしょうか。
電圧データはlvmファイルに直して取り込むことにしました。
未熟な質問で大変恐縮なのですが、よろしくお願いいたします。
05-08-2018 10:27 PM - 編集済み 05-08-2018 10:28 PM
抜け落ちはどのように確認しています?
もしFPGA側の波形チャートを見てそうおっしゃっているのであれば、FPGAの処理速度は25nsecにもなりますので、チャートの描画速度が高速すぎて、抜け落ちの確認は不可能です。
もしAOの出力電圧を見てそうおっしゃて散るのであれば、あえてFPGA側のWhileループを遅くし、読み取り速度を遅くしてデバッグしてみるのはいかがでしょう。
蛇足ですが、Whileループの中にエラーポップアップの関数が入っていると、エラーが発生するたびにポップアップが出て煩わしいのでお勧めしません。あと、FPGA上で扱うデータはSGL、書き込んでいるデータはDBLですが、このデータ型が不一致なのは問題ありませんか?
05-09-2018 12:59 AM
Emboar様、ご回答ありがとうございます。
抜け落ちの確認についてですが、オシロスコープで確認しようとしたところ、正常な波形が得られなかったため、おっしゃる通り、ひとまずFPGA側に波形チャートを設置して確認しようとしておりました。
オシロスコープで正常な波形が得られなかったことに関しては、プログラム上で何か問題になり得る部分がありますでしょうか。
その他ご指摘いただいた点に関しましても修正させていただきます。
ありがとうございます。
05-09-2018 01:44 AM
ファイルからの読み取り値ではなく、たとえば定数を1,2,3,....10と配列の形で書き込んだ場合はいかがですか?
デープログラム上で問題となりうる点として、SGLデータを <+/- 20, 5>のFXPに強制変換されている点が気になっています。
本来書き込むデータはFXPに変換した上でFPGAに書き込むほうがベターです。
まずは自明の値を書き込んでみて、データ型の問題か、それとも処理速度の問題か切り分けるとよいと思います。
05-11-2018 02:55 AM
Emboar様のアドバイスに従い、定数を送ってオシロスコープで確認したところ、やはり正常な波形が得られませんでした(データの抜け落ち以前に送っている数値が変わってしまっているようです)。
そのため、データ型を修正しようとしているのですが、浮動小数点から固定小数点への変換がうまくいきません。
添付はホストのプログラムとハイライトモードで実行した際のスクリーンキャプチャなのですが、原因が分かりません。
FXPに変換関数の使い方が間違っているのか、FXPに変換関数の構成が間違っているのでしょうか。
大変恐縮ですが、ご回答いただければ幸いです。
05-11-2018 01:15 PM
すみません。
変換に関しては解決いたしました。
やはりデータの抜け落ちがあるようなので引き続き原因を調査していきたいと思います。