在dialog box等待按下的這段時間,仍能持續量測

Introduction:
 
小弟想在量測程式加入一個功能
就是在量測ing時若要stop,則會跳出一個dialog box請使用者確認
基本上此時Labview需等到使用者按下按鈕後,程式才會繼續運行,
但我想讓程式在dialog box等待按下的這段時間,仍能持續量測
 
目前只想到用Reg Event Callback + gloabl variable
但是遇到無法解決的問題,附程式如下:
 
Dialog_main vi still running.llb
 
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是蝦米碗糕還需要去爬文瞭解一下
 
之後小弟會去揣摩各位前輩的建議去修改程式,謝啦~
 
![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)問題解決分隔線![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)
 
經爬文後,發覺multi-thread相關討論極少
但感覺multi-thread大概有點類似隨機式的data flow多工處理吧...(有錯請更正)
 
此外,小弟的程式修改成功了!如下圖:
 
![](upload://bV9ckJjwUuMVX2hS7dNwZuiowKZ.jpeg)
 
關鍵處:
  1. 一定要將RegEventCallback放在case structure中。否則LabVIEW會發生錯誤然後當掉!原因不明~
  2. 給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,就能維持最原始無暇之處女狀態
附上程式:Dialog_main vi still running_2.llb
 
chansam39102.3161921296

ChanSam你好:

我看了一下你的程式,但對LabView我是新手,所已想請教一下,且不解為何Event Source和Event Callback Refnum連出來的兩個參數,要放到While Loop外面?以結構性來看,感覺你那樣寫怪怪的,所以我把它放到Case Structure一樣有相同效果說!所以想知道一下你放到While Loop的用意為何?

 

![](upload://mPnv7cwUfTy4JlLBAtIG4rRleiU.jpeg)

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