2012-10-04 34 views
1

我很熟悉Qt,QWT,並具有C++的基礎知識。使用Qt,QWT和C++實時數據繪圖

根據該我得到了項目,我必須獲取由傳感器上的給定大篷車一些數據,如太陽能電池板的電壓和電流,溫度,溼度等。所有這些數據都由一些傳感器採集並由NI 6229 DAQ設備採集。

到目前爲止,我只是給了側燈。現在我來解決真正的問題。

我希望獲得來自DAQ設備和表演,情節,記錄附帶的DATAS和登錄程序。

我決定使用C++,Qt和QWT。當然還有用於從DAQ設備獲取數據的NIDAQMX API。

我已經部分設計了一個GUI,但是卡住的地方是我的代碼的真實工作部分。

我不知道如何實現所有這些東西與服用性能指標分析考慮,我真的需要一個嚮導。

我應該如何處理數據採集?

我應該如何繪製我獲得的數據?

這些需要由不同的線程或其他結構分開嗎?

是否收集幾乎10或12個通道數據並實時繪製它會導致合理的性能問題?如果是這樣,我該如何處理?

在此先感謝。

+0

這取決於NIDAQMX API的工作方式。它會觸發事件嗎?多久?涉及多少數據? –

回答

3

如果你寫一個簡單的程序與NI 6229的工作,你需要設置操作的優先級:繪製或記錄數據。
在大多數情況下,數據存儲是最重要的操作。
在我的實踐中,我使用下面的算法:

  • 1 GUI線程(公共UI +繪圖),1個線程的數據採集每個設備,1個線程用於記錄數據。數據採集​​線程每運行一次(我們問設備: - 準備好多少數據? - 10000個樣本 - 好吧,給我吧)。由於NI 6659採樣頻率低於1 MSamples/s,我認爲dT的值大約爲50-200毫秒(取決於接口)。
  • 從設備讀取數據後,我通過使用隊列將數據發送到線程進行記錄。
  • 與繪圖相同。我使用qwt與數據抽取(但你應該保存峯值)。 Qwt並沒有不好的例子。您還可以找到提高繪圖性能的解決方案。我的建議是將圖表拆分爲組,例如,一個組可能包含4個圖表。

它是簡單的程序的解決方案,而不是爲了實時操作系統。