程式架構請求

請問我希望開一個Main.vi,裡面放一個Tab Control物件。然後這個Main.vi裡面會執行很多個sub.vi,這些sub.vi可能在Main.vi裡是用Flat Sequence或While Loop定時去執行或Event事件觸發。這些sub.vi的資料是需要互通的且可能也有一些數量,而且也需要到Main的Tab Control上面做顯示或控制。請問這樣的架構在Labview是否能做的到呢?如果這些vi需要互通的資料量可能需要很多,請問有怎樣的做法可以做到且往後新增修改也容易呢?

1.QSM-PC(Queue State Machine-Producer Consumer)
2.Actor Framework

QSM-PC是Anthony Lukindo這位高手取名的,

類似結構也有人稱為 Event-driven producer-consumer state machine。
https://learn-cf.ni.com/teach/riodevguide/code/pc_producer-consumer-state-machine.html

總之就是由基本的State Machine去延伸,結合Event structure去偵測UI上使用者的操作,去彈性的觸發執行各獨立任務,或是搭配Queue的運用,去把多個相關的功能連續排序執行。

如果了解物件導向的基礎,且有2年以上使用QSM-PC的經驗,就可以考慮使用Actor Framework,不過這個學習曲線有點陡,近年看到最好的教學是Tom的頻道,有空可以把它一系列教學影片看完。

感謝!但覺得有些複雜,不過還是感謝你,多瞭解一些東西還是不錯的…

從你的描述,猜測你可能使用LabVIEW不到一年,

建議至少先學基本的State machine架構,

針對你的程式畫一下流程圖,規劃狀態跟狀態之間的轉換,

然後再學一下Queue的函數,

和variant轉換函數的使用。

就能進展到Queue State Machine或Queue Message Handler架構,

用這架構寫一些中小型專案應該就夠用了。

1個讚

感謝…

如果需求不是很複雜的話 , 可以試試 Subpanel
其作用在於把 sub.vi的人機介面嵌入到 main.vi上 , 因此可以直接在 mian.vi顯示與操作 sub.vi的人機介面而不用再多寫多少程式。不過 subpanel 的使用會大量用到 vi server , 所以這方面的觀念可能須先了解一下。

另外關於 vi間的數據傳輸 , 其方法也很多種 , Global Variable、Shared Variable、FGV ( Functional Global Variable )…etc , 不過其中會比較推薦使用 Queue,它是重要的資料結構,其讓資料在傳輸上可以先進先出( FIFO , First-in-First-out)而不丟失。不過在使用Queue時 , 時常會搭配使用State Machine , 這方面可以多嘗試看看。

最後如果需要傳輸的資料很多的話,可以試試使用Cluster、Array、Class…等方式把資料包在一起再一併傳輸 , 如果使用的是 Cluster , 蠻推薦使用 Type Definitions, 日後再增減資料內容的時候蠻方便的。

1個讚

感謝!目前我選擇用Cluster來做傳輸 ,真資料增減是真的蠻方便的…