如何存取隨著時間一筆一筆的量測數據到一個矩陣內

各位大師好,我想請教我的程式設計邏輯哪邊出了問題,以及該怎麼設計出我需要的程式。

signal 端是一個sampling rate 1 kHz的量測訊號,我想將signal 每秒1000筆的數據儲存到一個 1000x1 的array 裡,並且array 裡的1000 筆data 會隨著每1 秒新的1000 筆資料近來而被覆蓋。

附圖是我目前的進度,但我發現signal 的橘線好像拉出 1ms 的while loop 外之後他就沒有時間的概念,所以我讀取不到值,想請各位大大幫忙,謝謝。

LabVIEW基本概念是當所有資料進入迴圈時,迴圈啟動,迴圈結束時資料傳出,所以你直接拉一個節點出去在你while迴圈運作時,是不會有資料傳遞出去的,可以用QMH架構搭配Event去做,之後也比較好修改程式,一個主迴圈搭配Event做操作面板按鈕觸發,一個迴圈用Queue接受狀態啟動擷取,另外一個迴圈則是資料處理運算,資料也是用Queue傳遞

1個讚

QMH架構搭配FGV
然後程式儘量依照功能規劃成SubVI,不要直接在主程式裡面撰寫所有程式,後續維護跟功能擴充更改起來才會更快更有彈性

1個讚

我覺得 你的程式碼跟你的邏輯 完全不符.

  1. signal 端是一個 sampling rate 1 kHz 的量測訊號 signal 每秒1000筆的數據
    但你內迴圈 While Loop 資料擷取 輸出使用了 Index Array 只有單筆資料.

2.array 裡的1000 筆data 會隨著每1 秒新的1000 筆資料近來而被覆蓋。
外迴圈 While Loop 你放一個 Wait 延遲 1000 (ms) ,
也就是說 每秒 只有一筆資料 然後 進入 For Loop 使用 Insert Into Array 1000 次
相同的一筆資料 寫1000次 不覺得恨奇怪嗎?

想將 signal 每秒1000筆的數據 儲存到一個 1000x1 的array 裡
內迴圈 While Loop 資料擷取 如果是單筆資料輸出
使用 Build Array 不需要使用 For Loop Insert Into Array

先確認一個問題 , 每秒1000筆 的資料擷取
Signal 端輸出是 單筆 還是 1000筆

1個讚

signal 端是一個 sampling rate 1 kHz 的量測訊號 , 每秒1000筆


Simulate MyRIO Signal.vi (106.4 KB)

1個讚

一般正常 DAQmx Timing function上輸入的速率為1000Hz,則 DAQmx Read功能上每個通道的取樣數應不超過100

時間的概念
每秒 1000 筆取決於硬體的擷取速率. 如果用軟體控制每秒1000 筆 ,
我以迴圈 跑1000次為例 , 那每跑一次迴圈的條件必須是 小於 或 等於 1ms.
若在迴圈內又放了 延遲時間的話 那又會更久. 難以控制在每秒1000 筆
而且 每個人的電腦資源處理速度也不一樣.

另外 你想輸出覆蓋 1000筆 更新資料
在迴圈輸出端點 按滑鼠右鍵 修改輸出模式
Tunnel Mode → Last Value → Indexing 即可.


Simulate Signal in While Loop.vi (49.4 KB)

1個讚