LabVIEW Pro 專業論壇-技術討論區-想縮減程式資源
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 ★LabVIEW Pro 嘉年華★ 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 高手專訪系列 2017 LabVIEW 至尊爭霸賽
 熱門關鍵字 
    量測概念充電站    3小時內學會 LabVIEW    LabVIEW Pro 嘉年華    TOP 資源排行榜    取得 NI 協助
 您的位置:首頁 > 技術討論區 > 想縮減程式資源
  技術討論區   板主:meiae
 之1(10篇)
想縮減程式資源 
 
scott9330
暱稱:hamk
經驗值:144
等級:技工
發文:10
回文:17
版本:LabVIEW 2013
闖關狀態:
前往地圖:
 
字級設定

各位前輩好,小弟我做的昰關於一維波形訊號的儲存,但成時出現越跑越慢的問題

網路上看前輩的文章都是將成是縮減成subvi 或是減少local variable的使用

但還是有變慢的問題,大約成昰執行五分鐘左右開始變慢,波形會明顯延遲

成試主要分為上半部解封包,下半部解碼存值(樹圖案vi為解碼)

主程式為swallow103.3其餘為subvi

我個人士懷疑在波形顯示儲存的地方出問題,但不知該如何解決,請各位前輩賜教

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
bigdicision.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
boolean84.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
check.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
dicision.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
package.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
process.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
swallow103.3
已解決!轉到解決方案
  文章人氣: 2353 讚:0 文章日期:2017/09/26 12:15
mingyenwei

暱稱:銘延
經驗值:1741
等級:舵主
發文:2
回文:439
版本:請選擇
闖關狀態:
飄渺嶺
前往地圖:
1樓
字級設定

Hi scott9330

 

聽了你的說明,我的看法是你中了Express VI的遺毒,因此想用Convert To Dynamic Data + Merge Signals在Waveform Chart上顯示兩個通道的資料。

[+]放大圖片
[+]放大圖片
 

 

就連NI現在也不推廣「Express VI => Polling AI 1 Sample Data => Merge Signals => Waveform Chart => 取出Waveform Chart History」這樣的作法。

較適合的作法的確是用Shift Register + Build Array + Waveform Graph。並且適當的使用Limited Queue 。往這樣子去修改的做法是對的。但是這個做法沒有解掉你的Merge Signals => Waveform Chart的毒。他們都太佔資源而且資料結構複雜,也與常見的資料擷取一次回來一段Array的情境不符。

 

「Shift Register + Build Array + Waveform Graph」用法的標準組合如下(這部分沒空測試,只是常用的組合建議):

[+]放大圖片
 

 

 

 

 

 

 

你如果曾經試過要把兩道DBL Array想要直接拉給Waveform Chart (他不會幫你Merge Signals),那麼會得到下面的結果

[+]放大圖片

 

 

事實上,你只要把Build Array之後的訊號進行轉置,就可以直接使用Waveform Chart輸出兩通道DBL。不論如何,沒有必要用到Merge Signals。

(有時間資訊的時候,該使用Build Waveform系列,也不該使用Dynamic Data。如你所見,DBL Array可以儲存,如果用Waveform則可以用Write Waveform To File儲存,但是用Dynamic Data,你很難在進階的架構下做儲存的事)

 

 

請參考下面的程式,第一組是嘗試單純Build Array給Waveform Chart的人會碰到的結果。第二組與第三組都可以正確地呈現資料。需要注意的是,當資料點很多的時候,Transpose 2D Array會消耗定量的資源,使用時需要謹慎。你的Waveform Chart繪圖也同時會佔用一定資源。

Waveform Chart是以點為基礎,先組成多通道的點組(Ch0,Ch1,Ch2...),(常用Cluster而非這裡的Array),然後再隨時間增加點組。Waveform Graph是以Array為基礎,再去做多通道的組合。因此是1D Array => 2D Array。

 

 
[+]放大圖片

[+]放大圖片
 

 

當所有的資料都用2D DBL的時候,可以被拿去存檔,也可以(參考上面的程式)正確顯示在Chart。這樣就不會再發生Dynamic Data Type的怪問題了。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
a-117.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
    讚:0 文章日期:2017/10/06 15:42
xch53172

暱稱:noobTIM
經驗值:1521
等級:舵主
發文:0
回文:81
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
2樓
字級設定

[+]放大圖片
 

個人猜測...

波型顯示的WHILE LOOP的位移暫存器,會隨著擷取的資料越來越多,陣列會變得越來越龐大...

導致WRITE TO SPREADSHEET FILE這個VI越跑越慢...

5分鐘後你所寫入的檔案應該也變得很大了...

先將WRITE TO SPREADSHEET FILE這個VI拿掉再試試,看效能有無改善...

 

最好還是要限制一下陣列的增長和資料記錄檔的大小...

在擷取資料時,不會將擷取到的每個資料點都完整的做紀錄...

這樣不僅會拖慢程式速度,也會讓負責記錄的檔案變得過度肥大...

    讚:1 文章日期:2017/09/26 13:59
scott9330

暱稱:hamk
經驗值:144
等級:技工
發文:10
回文:17
版本:LabVIEW 2013
闖關狀態:
前往地圖:
3樓
字級設定

想請教前輩昰不是有更好的寫法來解決資料不斷累積的問題~

    讚:0 文章日期:2017/09/27 16:21
CYTseng


2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:C.Y.
經驗值:5347
等級:總舵主
發文:20
回文:1147
版本:LabVIEW 2012
闖關狀態:
英雄殿
前往地圖:
4樓
字級設定

請問具體的需求和功能是什麼?

要有足夠資訊才能告訴你怎麼改

 

例如,

你主要是要記錄甚麼?為什麼要一直堆疊?

上面放一個鍵盤偵測**嘛?!

    讚:0 文章日期:2017/09/27 16:53
scott9330

暱稱:hamk
經驗值:144
等級:技工
發文:10
回文:17
版本:LabVIEW 2013
闖關狀態:
前往地圖:
5樓
字級設定

不好意思小弟沒有解釋完整

整體的程式功能昰將封包中讀出兩個channel的訊號並由chart顯示出兩個channel的波形,並且由空白鍵暫停程式。

而在程式方面的構成為兩個迴圈上方迴圈為解封包迴圈,將解出的封包使用queue與下方chart顯示迴圈溝通,訊號進入下方迴圈後會先進入解碼用vi,最後在將訊號用arrary儲存。

因傳入的訊號有四種,(開始,暫停,增益調整,一般訊號)所以才會將每次的chart中的資料儲存起來以防暫停後訊號消失。

另外一般訊號封包每次進來為十筆資料,兩個channel都是如此,所以波形顯示也昰十筆十筆輸出

    讚:0 文章日期:2017/09/29 16:20
xch53172

暱稱:noobTIM
經驗值:1521
等級:舵主
發文:0
回文:81
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
6樓
字級設定

目前的資料檔太大,是否有必要將所有的資料都寫進你的資料紀錄檔中?

要判斷哪些資料是必需寫進記錄檔,哪些資料不用寫進記錄檔,畢竟有很多感測器是24小時在擷取資料的,如果每筆都完整紀錄,再好的電腦都會不夠用吧...

通常會寫進資料紀錄檔中的資料,都是重要的資料,例如:異常訊號、每隔一段時間擷取的訊號、具有某種特徵的訊號...視你應用在哪方面而定。

    讚:0 文章日期:2017/09/29 17:13
scott9330

暱稱:hamk
經驗值:144
等級:技工
發文:10
回文:17
版本:LabVIEW 2013
闖關狀態:
前往地圖:
7樓
字級設定

我使用這個方式主要是希望可以將chart中的波形可以往回拉來看

因為之前試用chart時可以拉時間軸看波形

但為了可以處理動態訊號所以使用 convert to dynamic data卻發現便成無法紀錄波形

才會使用shift register來記錄,造成記憶體不足的問題。

[+]放大圖片
 
[+]放大圖片
 

 

    讚:0 文章日期:2017/10/05 21:42
lovesmartx

暱稱:幻零
經驗值:2595
等級:總舵主
發文:40
回文:382
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
8樓
字級設定

真正的回拉瀏覽歷史資料的功能會有點複雜,

  • 有一個高效率的存檔方式(二進制),
  • 偵測使用者目前瀏覽畫面的時間軸,
  • 確認時間軸範圍資料有沒有在記憶體之中,沒有要從檔案載入,
  • 把已經相鄰太遠的時間軸資料從記憶體刪除。


最簡單作法是,設定個範圍,比如最多保留最近1個鐘頭的資料。更早的資料從檔案去索引查詢。
畢竟記憶體是有限的,不能盲目把資料堆在記憶體之中。 存檔最好換個更底層的方式。

可以考慮看找這本書來看, 算是一本Labview基礎概念講得很詳細的書。 Labview每個函數和元件都有一些細節在裡面,弄清楚寫起來才會得心應手。

Lab VIEW寶典(簡體書)-陳樹學

    讚:0 文章日期:2017/10/06 10:40
scott9330

暱稱:hamk
經驗值:144
等級:技工
發文:10
回文:17
版本:LabVIEW 2013
闖關狀態:
前往地圖:
9樓
字級設定

感謝各位前輩的指教及建議

小弟最終採用

mingyenwei前輩的方法

解決記憶體問題

小弟想再問一個問題為何程式運作時cpu使用率從2%跳到30%

[+]放大圖片
 

    讚:0 文章日期:2017/10/11 14:35
mingyenwei

暱稱:銘延
經驗值:1741
等級:舵主
發文:2
回文:439
版本:請選擇
闖關狀態:
飄渺嶺
前往地圖:
10樓
字級設定

是使用這個方法之後才30% => Build+Transpose後導致,尤其是大Array Transpose。如果還是想要使用Waveform Chart (而不是往Graph的那一系列走),我們得想看看

[1] 是不是要把shift register的格式一開始就是轉置過的資料

[2] 可以更新Shift Register,但是不要所有的每圈迴圈都Transpose + Chart。

 

是先前就30%,只是先前沒留意 => 要看一下整個程式

 

最近比較忙,可能要來回給小建議,沒法直接測試 Q_Q

    讚:0 文章日期:2017/10/12 11:19
 之1(10篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 如何把DAQ的量測訊號傳入SQL EX...
 
   Top 5 熱門討論 
1. 請問有關circle 檢測的範例
2. 寫一元二次式,當中的錯誤點該如何才能解...
3. Crash Reporter問題
4. 如何把DAQ的量測訊號傳入SQL EX...
5. 有關LABVIWE與PLC無法控制,因...
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia