cRIO-9074を使用してあるデータロギング/監視システムを構築中です。
FPGA上で読み取ったデータをFIFOへ書き込んで、RT上でFIFOを読み取ってホストPCへ転送する。というものです。
(データロギングは一度だけではなく、ある一定の間隔を設けて断続的に行います。)
ここでRT⇒ホストPCへのデータ転送はネットワークストリーム関数を使用しています。
RT上の確定的ループ内でFIFOからデータを読み取って、キューに格納し、非確定的ループ内でキューの値を読み出したらネットワークストリームに書き込む。という流れです。(添付1:RT データ転送部のブロックダイアグラム)
一通り実装が完了し、正常に動作する事が確認できたので色々な条件で動作テストをしていた所、長時間動作させた際にある時点以降ストリームの書き込みができなくなる事が判明しました。
色々と検証を行った結果、RTターゲットのメモリ不足による可能性が高いことが分かりました。
VI実行中に分散システムマネージャーにてRTの利用可能メモリをモニタした所、ある水準に達した所でネットワークストリームの書き込みが止まっていました。(書き込み関数は実行しているが空のデータを書き込んでいる模様)
割り当て済みメモリが128MBに達した為?
(添付2:正常動作中の分散システムマネージャー画面)
(添付3:ストリーム書き込み不能に陥った後の分散システムマネージャー画面)
ちなみにこの時は10800ポイントの倍精度実数配列を転送しています。
このデータを682回転送したのちに書き込みができなくなりました。
転送データを少なくすると転送可能回数は増加し、データを多くすると減少します。
一度に転送するデータ量によって監視可能な連続運転時間が制限されてしまうのではシステムとして成り立たない為、
なんとかこの問題を回避できないものかと苦悩しております。
一度に転送できるデータ量に制約があるのはターゲットリソースに依存するので理解できますが、累積データ転送量に制約が出てくるのは何となく腑に落ちません。
何卒、回避策のご教授お願い致します。