選單製作的問題

請問各位大大


我目前在規畫一個實驗程式,有五個步驟是由不同的subVI組成的

我想要在程式一開始時做一個選單,可以勾選要執行的步驟

例如:我勾選了1,3,5 則程式就會按照1->3->5這樣的順序進行

全部勾選就為全都執行

我大概了解可能是要用Enum和state machine來寫

但是實際的方法並不是很清楚

麻煩各位大大的幫忙了~~

選單不能勾選喔

用按鈕吧,把它改成打勾的圖就可了

有打勾就進入CASE就可了

簡單版SEQUENCE思路:
1. 主程式呼叫step選單
2. 建立一個選單,由於需要給使用者勾選,故主架構為while迴圈。
3. 選單可勾選的介面主要以布林代數做成,勾選完畢後按下某個按鈕離開while迴圈,並把布林代數的值傳出。
4. 由於依據勾選的內容依序執行,故主程式接收到該值後,以SEQUENCE架構撰寫
5. SEQUENCE內至case,當對應的布林代數為true,則執行該項步驟,反之跳過執行下一個SEQUENCE動作
6. 優點為容易撰寫,缺點為當某個step有問題(ex. test NG)無法立即停止,且測試步驟無法更改前後順序

普通版while-step思路
1. 主程式呼叫step選單
2. 建立一個選單,由於需要給使用者勾選,故主架構為while迴圈。
3. 選單可勾選的介面主要以布林代數的矩陣做成,勾選完畢後按下某個按鈕離開while迴圈,並把布林代數矩陣的值傳出。 
4. 主程式利用while迴圈逐一讀出布林代數矩陣,並以while-index為case的參考值來設計step
5. 當布林代數矩陣為true,則執行該step,反之跳過。
6. 優點在於當執行發生異常時,可觸發while中斷,缺點為測試步驟無法更改前後順序

進階版state machine思路
1. 主程式呼叫step選單,選單為左右兩邊的list,左邊為全部的step,右邊為選擇之step
2. 當DOUBLE CLICK左邊list的某個選項時,將該選項加入右邊list_name的矩陣並顯示出來,
3. 當DOUBLE CLICK右邊list的某個選項時,則將該選項於list_name移除
4. 按下某個按鈕後離開選單的while迴圈,同時將右邊list_name的值傳出
5. 主程式接受到值後,則以一般state machine的方式執行即可
6. 即以while-index來選取list_name的矩陣,選取出的文字即為state machine的輸入,將其接到case中可進行各設定步驟的撰寫
7. 優點為除了可遇到異常停止外,可根據使用者點選選單的順序不同來進行計算測試,而非固定一直線的執行步序

以上,僅以文字說明,避免直接套用程式而失去了思考的機會。
有敘述不明的地方可以附上卡關的程式提問。

caeru41205.4316203704

我用最簡的方法給你好了!直接用  table 去做網路上都有教


test.vi
你看到範例就會做了!
ps  另外方式就是用上面大大教的 !

再不然就用小畫家去改button!變成你要的圖案[email protected]@!!超偷懶!哈哈!

感謝各位大大的幫忙  我先試試看


如果還有其他問題會再提出來

麻煩各位了!!

請問caeru大


因為我程式本身就是用Enum和state machine把subVI做連接了

那是不是我只能用你提供的第三種方法呢?

我大概了解你講解的意思  只是我試了很久都沒有什麼頭緒

可否麻煩大大提供詳細一點的程式

我問題比較大的地方是從第三種方法的第四步驟開始 

要如何將值傳出?以及怎麼讓程式知道我勾選的是哪一個步驟?


以下為簡單的二重狀態機
第一重是利用EVENT取得按鍵,觸發相對應的動作(ESC為離開程式,ENTER為執行步驟,F5為讀取步驟)
第二重是一般狀態機,利用取得的步驟逐一執行,或是遇到異常時中止步驟(預設TEST5為異常命令,直行到這行會中止)

main.vi
sub.vi

另SUB VI則為選單部分,
單純利用LIST的double click屬性來操作,主要角色為LIST1,LIST2我沒有寫double click時移除,這個自己想,
由於架構是狀態機,故LIST中的步驟可隨意、可重複,
最後傳出時也不是傳出LIST的值(顯示只是給USER看的)
傳出的是LIST上的文字(這才是狀態機要的)

以上請參考,有不懂再提問~

caeru大大



abcde.vi 我附上的是我程式執行的架構

我了解你subVI上傳值的方式了

我的問題是我目前的程式就像我附上的一樣是由Enum和state machine做連接

就會按照Enum指示的順序進行

我要怎麼在subVI選值和傳值時讓程式知道我選的是Enum中的"初始化"或是"輸出"等選項?

或者是我的程式架構要改用其他連接方式才能達成呢?




我的版本太舊開不了…QQ

不用event的話可以這樣寫@@

給您參考

test11133.vi 

更新

 

SurfersParadis41207.5761921296

caeru大需要幫你轉檔嘛?


Sufersparadis大感謝您的幫忙 我也試試看您的方法

caeru大我附上我程式的截圖好了


我用這邊的轉檔從來沒有成功過…


程式就是使用Enum和state machine做連接 我只有用顯示Msg來表示進行的步驟


程式順序就如同圖片左邊Enum中那樣的順序進行

麻煩大大了

呃,
這整個架構不同,一樣都是狀態機,
但是這樣的架構比較像是活動的sequence,
所以想要預先安排的流程可能會比較難以直接套入。
建議是所有的case結束後都指定到步驟[取得下一步]
當進到[取得下一步]的case之後,利用sub傳出的值(此時就要是數值而非文字)來決定下一步要做甚麼。
然後跳到設定的下一步例如是[擷取],當[擷取]完之後又跳回[取得下一步]
我想你的架構這樣改可能比較簡單一點。

加油!! <span =“bold”>caeru好厲害!!可以開課了!!你po出來的都很有參考價值