請教各位先進:
最近在看Application Architecture and Design Patterns in LabVIEW(投影片請參考附件)
其中的Event 結構的章節提到一點
已解決! 轉到解決方案。
在 11-28-2013 08:07 PM
Blocking的意思是說資料流不會實際進到Event中,除非你有設定一個Timeout Event Case。
舉例來說,以下這個event有設定100 ms的Timeout
這個程式一執行的話,迴圈會以100 ms的速度跑並且進入到Timeout這個Case當中執行程式。
但是假設我們把Timeout Case拿掉,也不要在Event Case前設定Timeout的時間,如下圖。
那麼當程式開始執行,資料流進入迴圈之後馬上就會"Block"在進入Event Case之前,導致程式現在卡在Event發生前,
直到使用者按下Stop,Value Change這個事件才會發生,資料流才會進到Event中,否則程式就會像當機一樣被Block住。
不知道這樣解釋有沒有清楚。
11-28-2013 08:38 PM - 已編輯 11-28-2013 08:47 PM
非常清楚
感謝大大解答確實會有這個現象,如果在有Enent的Loop使用移位暫存器做為區域資料保存,如果未設定Timout,則在下一次Event執行時,移位暫存器傳遞到Event上的資料通道的Data可能未更新,當事件發生時,想取為上一次移位暫存器所保留的資料便會有問題,實際上取回資料為上上次的結果。
更正~~我講錯實現的方法了,應該是Event會先執行內部程式碼,才更新資料通道。
實現此現象的方法可以參考附件。