1

私は Qt、QWT の初心者で、C++ の基本的な知識を持っています。

私が得たプロジェクトによると、ソーラーパネルの電圧と電流、温度、湿度など、キャラバンのセンサーから得られるデータを取得する必要があります。これらのデータはすべて、一部のセンサーによって取得され、NI 6229 DAQ デバイスによって収集されます。

今までサイドライトだけつけていました。今、私は本当の問題に来ています。

DAQ デバイスから取得したデータを取得し、プログラムで表示、プロット、記録、およびログを作成したいと考えています。

C++、Qt、および QWT を使用することにしました。もちろん、DAQデバイスからデータを取得するためのNIDAQMX API。

私は既に GUI を部分的に設計しましたが、私が立ち往生したポイントは、私のコードの実際の作業部分です。

パフォーマンス基準を考慮してこれらすべてを実装する方法がわかりません。本当にガイドが必要です。

データ取得をどのように処理すればよいですか?

取得したデータをどのようにプロットすればよいですか?

これらは、異なるスレッドまたは別の構造で分離する必要がありますか?

ほぼ 10 チャネルまたは 12 チャネルのデータを収集してリアルタイムでプロットすると、妥当なパフォーマンスの問題が発生しますか? もしそうなら、どうすればそれを処理できますか?

前もって感謝します。

4

1 に答える 1

3

NI 6229 で動作する簡単なプログラムを作成する場合、操作の優先順位を設定する必要があります: データのプロットまたは記録。
ほとんどの場合、データ ストレージは最も重要な操作です。
私の実践では、次のアルゴリズムを使用しました。

  • 1 つの GUI スレッド (共通 UI + プロット)、各デバイスのデータ取得用に 1 つのスレッド、データの記録用に 1 つのスレッド。
  • データ取得のためのスレッドは、dT 時間ごとに実行されます (デバイスに問い合わせます: - 準備ができているデータの量は? - 10000 サンプル - わかりました、ちょっとだけ)。NI 6659 のサンプリング周波数は 1 MSamples/s 未満であるため、dT の値はおよそ 50 ~ 200 ms になると思います (インターフェースによって異なります)。
  • デバイスからデータを読み取った後、キューを使用して記録するためにデータをスレッドに送信します。
  • プロットについても同じです。データ間引きで qwt を使用します (ただし、ピークを保存する必要があります)。Qwtには悪い例はありません。また、プロットのパフォーマンスを向上させるソリューションも見つけることができます。私のアドバイスは、グラフをグループに分割することです。たとえば、1 つのグループに 4 つのグラフを含めることができます。

これは単純なプログラムのみのソリューションであり、リアルタイム OS 向けではありません。

于 2012-10-04T22:58:07.863 に答える