目前我正撰寫一個自動化測試程式,在撰寫過程中遇到一些問題想請教各位高手,還請大家不吝指教。謝謝。 1.我使用sequence結構來撰寫程式,但我需要一個按鍵能讓程式執行到一半就中斷,若我使用while loop來達成,則必須所有的sequence都跑完才會停止,這並非我想要的功能,請問有什麼方法可以達成? 2.我需要一個按鍵能讓程式開始執行,請問除了用case加while loop之外還可以怎麼作呢? 3.在程式最後我想檢視各測試項目的數值,以判定整個測試是否通過,請問除了使用property node之外,還有什麼方法呢?因為使用property node若是有很多項要判定,那使用上會很麻煩…
1.這個問題我也遇到過....不過似乎沒有比較好的解決辦法,你可不可以
試試看在squence loop中的其中一個frame 設定判斷的條件...讓程式
停止....
2. labview不能用一個布林開關來啟動程式!!
3.如果數值是array的形式的話....我會用index array的方式來判斷....
其實方法很多....看你要怎麼利用...若用property node的話...應
該判斷"value"的輸出就可以啦....不會太麻煩吧!!
1.你的sequence應該不會只跑一次吧,所以在當中加入Bottom的判斷應該ok啊,你可以傳一下你的寫法嗎,我認為應 該沒問題
2.你可以在Vi properity設定你寫的好程式Run When Open,程式一執行就開始run了,但是在你還沒按下bottom前,什麼事都不做,所以第一步只要判斷有沒有按下按鈕即可
3.這個問題不知道你為何煩惱,但是用properity node應該是不錯的方法吧
試著用Event 來寫.這樣你比較好規劃程式.它可以直接讓你有一個Stop 的功能.
我簡單利用For Loop,While Loop,Case Structure,Sequence Structure來做這樣的功能.
1)程序指定上,利用Array內的Step1,2,3來指定For Loop執行次數及程序.
2)程式開始時先進入While Loop等待使用者按下Run或Skip按鈕,
當按下Run按鈕時,執行Type Case Structure的條件0迴圈,進入Step Case Structure判斷Step程序呼叫Step內的SubVi.
按下Skip按鈕時,執行Type Case Structure的條件1迴圈.
3)依序完成SubVi內的程序,也就是當SubVi完成後,進行下一個程序(呼叫SubVi).
1)開啟Main.vi.
2)指定Front penal上的程序.
3)執行程式.
其實 Nakajima及 jimmy-Chen 提到的就是 State Machine 的使用。
State Machine 的基本架構可由 Wile Loop 、Case Structure 來組成。
可以用來規劃極有彈性的程式架構,並且有效重覆使用程式碼。
是一種滿 powerful 的程式架構。
缺點可能就是不容易 Debug 吧。
(因為已經跳脫了線性的程式規劃方式。)
可以參考一下底下網頁中的「State Machine」
http://www.g-light.com.tw/labview_index.htm
沒錯.
在LabVIEW GUI Essential Techniques這本書中的Chapter 7 P,240中有提到.
關於State Machine的說明,一開始就說到
One powerful structure that enables both enhanced interactivity and sequential execution is called state machine.
我是看了上述網頁後,才知道 State Machine 的好用。
後來便常常用來處理複雜、重覆性高的程式撰寫。
而且也可以將 State Machine 變形如下圖(紅色框選部分),即可事先指定程式流程:
參考一下

[QUOTE=Nakajima] 目前我正撰寫一個自動化測試程式,在撰寫過程中遇到一些問題想請教各位高手,還請大家不吝指教。謝謝。
1.我使用sequence結構來撰寫程式,但我需要一個按鍵能讓程式執行到一半就中斷,若我使用while loop來達成,則必須所有的sequence都跑完才會停止,這並非我想要的功能,請問有什麼方法可以達成? [/QUOTE]
用這種icon是最簡單最直接的:,只要程式執行到這個icon,程式就會停止。
[QUOTE=Nakajima]2.我需要一個按鍵能讓程式開始執行,請問除了用case加while loop之外還可以怎麼作呢?[/QUOTE]
您可以使用event structure來做。比較不會耗費系統資源,因為等待使用者下命令的時間間隔中,您的電腦是在閒置狀態,而不是一直在檢查您 有沒有按下按鈕。
[QUOTE=Nakajima]3.在程式最後我想檢視各測試項目的數值,以判定整個測試是否通過,請問除了使用property node之外,還有什麼方法呢?因為使用property node若是有很多項要判定,那使用上會很麻煩..[/QUOTE]
從你的敘述中,你好想會得到一些實驗數據,你想透過LabVIEW計算後,判斷整個測試是否通過、過關。可是,這樣應該不需要使 用property node吧。
使用State Machine的方式因為會使用過多的Shift Reigster所以在Debug方面就會比較麻煩.
關於Benjamin所說的Stop,可以使程式進行到一半時強制停止程式進行.
正常執行10次.加上Stop後,只執行3次程式就停止了.
感謝大家熱烈的幫忙,因為小弟表達不清,以致於有些朋友看不懂我在寫什麼,實感抱歉。在此我再說明一下我的問題。

我的程式架構大概就是上面那張圖,OK Button是用來執行我的測試,stop則是停止程式,但是不論在何時按stop,都必須等到所有的sequence跑完才回 停止迴圈,所以想請問有什麼方法可以中途就停止,然後按OK Button再重新開始RUN
如果按下Stop按鈕,程式就會停止了.
就算按下OK Button是沒辦法啟動(RUN)程式的.
或許你可以在每一個測試步驟之前都進行檢驗 Abort 的動作。
如下圖及附加檔:

2004-07-07_152814_ATS_with_Abort.llb
比較進階的作法是,
所有的測試項目用動態呼叫的方式來執行,
如此,你便可以用 Method 「 Abort VI」 的方式來隨時中斷該測試。

附註:當測試項目被動態呼叫執行之後,主程式便不斷去偵測 Abort 是否被按下,
如果 Abort 被按下之後,便去執行 Method 「Abort VI」以中斷測試。