Introduction:
小弟想在量測程式加入一個功能
就是在量測ing時若要stop,則會跳出一個dialog box請使用者確認
基本上此時Labview需等到使用者按下按鈕後,程式才會繼續運行,
但我想讓程式在dialog box等待按下的這段時間,仍能持續量測
目前只想到用Reg Event Callback + gloabl variable
但是遇到無法解決的問題,附程式如下:
Problem:
0. 若選擇Dialog_sub_0.vi,則:
(1)dialog box會出現兩次(兩次都按let it be的話則程式結束),亦即動態事件發生兩次。
然而,我只按下一次stop_main,照理說應該僅發生一次event阿???
(2)若dialogbox出現時按下"oh~no"則dialog會重複出現,按個幾下後,程式就掛點了 冏rz
1.若選擇Dialog_sub_1.vi,則:
(1)動態事件仍發生兩次,但只需按下一次stop_main即可結束。
(2)但按下"oh~no"之case仍會掛點...
Help:
1.此程式到底發生什麼問題?
2.是否有別種撰寫方式可達到相同目的,請各位指點方向?
感謝~
之前我也遇到和你相同的問題,後來我改用contol或indicator來顯示訊息,看到上面有訊息就執行另一動作
我自己的做法也像 ancle 一樣。
其實就像是把 dialog box 給內嵌在主畫面上頭,量測仍然在進行,
而同時主畫面又提示操作者該注意什麼事情 或 做什麼動作。
而程式裡頭的設計則是用多工的設計方式來完成,像是分兩道 Data flow的方式,
或是 動態呼叫之後,不等待其執行完畢 等等。
multi-thread 的設計方法,之前有文章討論過,如果有興趣,可以參考一下。
其實做法很多種
當你這樣的方式不行的時候
試試看 逆向思考 是不是一定要用Dialog Box
就你的問題 應該可以把訊息 顯示再主要畫面上
但是底下的動作一樣執行 只要多做一個check 動作 應該就ok
每個Object都有個Reference 你可以把它記錄到Global裡面
然後 再透過Reference去動態 改變畫面的訊息資料
應該也可以達到你想到的結果
如果回答的不好 請見諒
感謝樓上各位前輩的經驗分享
小弟原先也是有想過用只indicator或內嵌dialog box的方式,或許會比較可行
但由於量測程式以後要給他人(學弟妹)使用,考量可能有些人神經比較大條(我自己也是冏rz)
訊息僅顯示在indicator上總是沒有跳出dialog box來得震撼直接...
而小弟才疏學淺,multi-thread是蝦米碗糕還需要去爬文瞭解一下
之後小弟會去揣摩各位前輩的建議去修改程式,謝啦~
問題解決分隔線
經爬文後,發覺multi-thread相關討論極少
但感覺multi-thread大概有點類似隨機式的data flow多工處理吧...(有錯請更正)
此外,小弟的程式修改成功了!如下圖:

關鍵處:
- 一定要將RegEventCallback放在case structure中。否則LabVIEW會發生錯誤然後當掉!原因不明~
- 給RegEventCallback之input ref一個constant!
目的:
若沒給這個constant,則按下stop_main後會發生一次事件,於是跳出dialog box,
此時若點選"oh~no~",則主程式繼續run。
接著若再次按下stop_main則又發生一次事件,但重點來了,
RegEventCallback會累積先前發生事件的次數!!!
亦即此時累積了兩次事件,於是對話匡會出現兩次,
依此類推,按下stop_main n次,則下一次再按後會出現dialog box的次數會變成n+1次!
因此若給RegEventCallback之input ref一個constant,就能維持最原始無暇之處女狀態
chansam39102.3161921296
ChanSam你好:
我看了一下你的程式,但對LabView我是新手,所已想請教一下,且不解為何Event Source和Event Callback Refnum連出來的兩個參數,要放到While Loop外面?以結構性來看,感覺你那樣寫怪怪的,所以我把它放到Case Structure一樣有相同效果說!所以想知道一下你放到While Loop的用意為何?

Hicks39104.6637962963
Hicks你好:
假如執行loop時,某些參數不會被改變
我習慣放在loop外面,好像加減能增加程式執行之效率~