請問幾個小問題

目前我正撰寫一個自動化測試程式,在撰寫過程中遇到一些問題想請教各位高手,還請大家不吝指教。謝謝。                             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).

 

2004-07-06_111220_Step_Test.llb

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 變形如下圖(紅色框選部分),即可事先指定程式流程:

參考一下

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

 

 

[QUOTE=Nakajima] 目前我正撰寫一個自動化測試程式,在撰寫過程中遇到一些問題想請教各位高手,還請大家不吝指教。謝謝。

1.我使用sequence結構來撰寫程式,但我需要一個按鍵能讓程式執行到一半就中斷,若我使用while loop來達成,則必須所有的sequence都跑完才會停止,這並非我想要的功能,請問有什麼方法可以達成?  [/QUOTE]

用這種icon是最簡單最直接的:![](upload://ulM40TEUlcyEs9aNbrkhb2CHsRM.jpeg),只要程式執行到這個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次程式就停止了.

感謝大家熱烈的幫忙,因為小弟表達不清,以致於有些朋友看不懂我在寫什麼,實感抱歉。在此我再說明一下我的問題。

![](upload://3fttzV7Cfl23lbfheQBrzhXZLO4.jpeg)

我的程式架構大概就是上面那張圖,OK Button是用來執行我的測試,stop則是停止程式,但是不論在何時按stop,都必須等到所有的sequence跑完才回 停止迴圈,所以想請問有什麼方法可以中途就停止,然後按OK Button再重新開始RUN

如果按下Stop按鈕,程式就會停止了.

就算按下OK Button是沒辦法啟動(RUN)程式的.

或許你可以在每一個測試步驟之前都進行檢驗 Abort 的動作。

如下圖及附加檔:

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

 

2004-07-07_152814_ATS_with_Abort.llb

 

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

 

![](upload://20sCimcC21pIhWfgLDOmHgyhEz2.jpeg)

 

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

Airbolt38175.660162037