影像Lag

我想問一下 要如何在同時 監測影像和讀取溫度的處理 因為我們只要有讀取溫度那方塊就會導致labvieww抓取影像的那部分會造成嚴重延遲且攝影畫面也會lag 想請問論壇大大是否能幫我看一下我的labview 幫我看哪一個迴圈出了問題 導致這些問題的出現

controlnew-correctt.vi

建議寫兩個不同的迴圈,一個給監測影像用,另一個給讀取溫度用。
若不想因為儲存即時data而導致漏讀資料,可利用Queue功能。
Good luck!


不好意思想請問一下 妳說的兩個迴圈!!是用我檔案這個嗎

你應該要用獨立的兩個迴圈來處理不同的硬體設備,若迴圈之間要傳遞資料,可以用local variable也可以用Queue方法。

若傳遞資料時,很在意每一筆擷取的資料,用Queue方法可避免遺失資料或重讀資料。
他會先將data1寫入buffer,然後再用另一個迴圈讀出來(get data1 by queue),
只要讀取的迴圈速度比寫入的迴圈快,就不會遺失資料也不會多出資料。
若用local variable方法,讀取的迴圈速度與data1的迴圈速度不同步,可能會少讀資料或重複讀到一樣的資料。
請參考Queue Basics.vi
Queue Basics.vi

controlnew-correctt.vi


我大概懂妳意思了 我這圖有把它變成分成兩個迴圈了 現在變成溫度讀取不到值(需要將城市停止才能出現溫度值 想請問一下是不是要換別的迴圈 還是我的截止條件有錯誤呢)

轉檔似乎不一定成功且容易缺subvi
建議你用截圖方式呈現程式

這張圖是我抓取影像處理 然後判斷是否國零點 然後傳值給arduino的寫入城市


這張是我讀取養殖端溫度的值
現在我的問題卡在我分兩個迴圈已不會LAG
但需要按暫停溫度讀值才會出現
然後我是影響處理一個大while 讀取溫度一個while 然後全部在包在一個大while裡面
請問大大 是否給我一點指示
SUSANAN42554.5877314815

截圖看不出全貌,不懂你的大while意思?
影像讀取只需要一個while loop,溫度讀取也只需要一個while loop

然後你還把它們包在另一個大while loop裡面? 不懂為何要做此動作? 
這樣看起來會一直initialize這兩個硬體,一直做initialize是否必要?
若你的影像與溫度是要一直在讀取狀態,對包住他們的while loop是等於無動作的。 

這是我全部的LABVIEW程式 麻煩你幫我看一下 問題點出在哪裡 導致我讀取不到ㄌ

在B處,就表示你必須等影像擷取while loop結束後,才會進行下一步讀取你的溫度,程式流的順序你應該要想清楚。
在A處,你等於還是把影像硬體跟溫度硬體寫在同一個while loop裡,建議分開寫。
Good luck!


B處的問題 可否給我一點建議 因為我試過先讀取在寫入也是不行 我想要的是寫入之後 能夠馬上讀取 不向我先等while 結束 但我試了之後發現讀取溫度會造成影像硬體LAG


至於A處 我是因為要在影像硬體要寫入所以才把他接再一起 您的意思是我在兩個中間多加一個while迴圈 會能夠解決問題嗎

比較不好意思的是我LABVIEW程式概念不是說非常的熟 所以需要大大告訴我該怎麼做
SUSANAN42554.6965509259

建議溫度寫入和讀取寫在同一個while loop,影像擷取在另一個while loop,
然後再將你影像處理後的數值結果傳到溫度寫讀while loop裡,傳送可以考慮之前提過的不同方法。
試看看我的建議,成功後你就多學會傳遞資料這招,以後會很有幫助。
最後,不要再用另一個while loop把他們包起來,不懂你為何要這麼做? 
其實真的不需要,是因為不知道怎麼用一個按鈕停掉兩個while loop嗎?參考以下寫法

想請問大大 我有依照您所說的不用大WHILE 而且把溫度讀取跟影像產卵的寫入放在同一個讀值迴圈裡面 不過現在出現的問題變成是我程式執行時硬體方面不會有該有的動作 需要等到程式按了stop才會有動作 溫度也是~~

你可以再仔細思考11樓與13樓那兩位說過的每一句建議

  1. Rabbit建議的是使用 兩個平行迴圈
    將兩個連續做的事情分開
    分開後,他們將使用個別的CPU資源去運作而比較不會互卡

    2.通常分開後,兩個迴圈要各自給他們不同的Wait Until Next ms Multiple等待時間
    哪個你希望快而頻繁,就讓他等待少一點,通常希望最快的還是給個1ms等待比較好,另一個可能給10ms等待
[0]
請先把左邊超大迴圈內放入一個wait until next ms multiple 1ms (這個數值不是一定的,只是讓他們有個快慢差,但又不是無止盡的快)
請再把右邊的副迴圈內放入一個wait until next ms multiple 2ms

如果覺得有異,暫時都把它們調回 0ms

[1]
我想請問監控端傳送值指的是什麼東西
讀取溫度希望是在送出監控端傳送值之後嗎?

[2] 我現在看懂了,監控端傳送值就是用來提醒溫度要更新的變數

[3] 負責溫度的迴圈目前有四條線傳入
1.綠色*
2.紫色
3.粉紅*
4.草綠
你的紫色與草綠都已經走外面了沒錯,現在需要的是綠色跟粉紅的處理

綠色的功能是確認是否stop
粉紅的顏色是提醒是否要抓取一次溫度值

請參考下面Local Variable的用法,(右鍵 -> Create -> Local Variable)把你的綠色跟粉紅兩種都改成用Local Variable取代,其中stop按鍵如rabbit所說Mechanical Action要切換為switch when pressed

[4]

請只留意此範例程式的兩個Boolean,一個是「stop」,另一個是「監測端傳送值」
由於這兩個部分使用Local Variable,主迴圈與副迴圈都沒有任何資料流間的順序關係


你在主迴圈按下綠色按鈕,副迴圈Stop的Local Variable也會相應變成True,準備結束副迴圈
你的主迴圈計算判定監測端傳送值為True,副迴圈監測端傳送值的Local Variable也會相應變成True,提示需要回報數值

2016-7-4 雙迴圈 with 2 local variables (Ming-Yen).vi

解除了雙迴圈間的資料流先後關係,兩個迴圈在LabVIEW中將設定為「平行處理」
雖然爭取了系統資源使用率,但這將觸發所謂的「競態條件」(Race Condition),平行迴圈間,Local Variable抓值改值的先後順序也變得不受控制了,不知道誰快誰慢,這是Local Variable的缺點
如果需要更進階的技巧以改善Local Variable的缺點,則可以採用Queue或Notifier

MingYen42556.4283217593

不好意思想請問一下 我的labview主要是要寫入arduino 但監控端傳送直那邊如果用label variable 要如何接呢??

還有stop一定要多接case迴圈?



我換了這方式變成 我傳送植根溫度都需要案STOP才能接收到 請問大大們 是還有哪邊需要修改嗎

我一下子搞不清楚紫色的這東西是什麼型態
不過你需要的是
1.「一個紫線的Control+一個Local Variable (Write)」或2.「一個紫線的Indicator+一個Local Variable (Read)」

你可以在星星處那個元件的左端端點,點右鍵 -> Create -> Control
製造一個新的Control出來,然後再對這個Control點右鍵 -> Create -> Local Variable
這樣就可以滿足1的組合了

******************************
不過,我建議使用2的組合,所以請再對Control點右鍵 -> Change to Indicator
然後看看Local Variable,請點右鍵將他修改(或確認) 「Change to Read」
你就獲得了「一個紫線的Indicator+一個Local Variable (Read)」

******************************
請把一個紫線的Indicator放在主迴圈讓他吃你的三角形True/False選邊站元件
把Local Variable (Read) 放在星星標記處取代原先的接線

這樣子你就成功把它做成平行迴圈了,別忘了用Local Variable不是最佳的方法,會有競態問題(以後就知道可怕),這也是Rabbit跟我苦口婆心提醒的原因



stop我沒有多接case迴圈。如果我沒弄錯,你問的是Flat Sequence,這是一種控制程式運作順序的用法
「最好用的Flat Sequence是只有單禎的」,你用久了就可以體會了

我是為了stop按鈕搭配Local Variable時,不能使用預設的latch when pressed,只能用switch when released,這個部分R大也有跟你說明
所以在主迴圈開始前把stop按鈕設回false,副迴圈結束時也把stop按鈕設回false


MingYen42556.6404976852