一、什么是子面板?
子面板是LabVIEW中的一種容器類型控件,借助這個(gè)控件可以在當(dāng)前VI前面板上動(dòng)態(tài)加載并運(yùn)行另一個(gè)VI的前面板。它和選項(xiàng)卡類似,但又不同于選項(xiàng)卡控件,如子面板控件沒有選項(xiàng)卡控件的頁選擇器,一次只能顯示一個(gè)頁面,但它可以在內(nèi)存中動(dòng)態(tài)加載已運(yùn)行的子程序,且一個(gè)在內(nèi)存中被加載的子程序(模板程序)可以被多個(gè)子面板控件同時(shí)加載運(yùn)行。
如上圖所示,子面板的使用方法其實(shí)就是主界面先獲取到各子界面的VI引用,然后利用子面板插入子界面的VI前面板。這樣一來主界面不僅可以用來響應(yīng)所有用戶操作,還能顯示各個(gè)子界面狀態(tài),并且各個(gè)子界面是相互獨(dú)立的,可以劃分為不同的模塊進(jìn)行開發(fā)。
二、為什么用子面板?
在MVC架構(gòu)中使用子面板主要有以下兩點(diǎn)原因:
1、使用子面板可以實(shí)現(xiàn)主面板程序與子面板程序的分離編寫,便于大型軟件、復(fù)雜軟件的多人協(xié)作分工完成,符合AF架構(gòu)模塊化和多人協(xié)作的編程思路;
2、MVC架構(gòu)中規(guī)定要把所有和界面顯示相關(guān)的工作都放到View中實(shí)現(xiàn),這就注定了View必須處理所有的界面,但是各個(gè)子界面其實(shí)都在它本身所在的Actor中,這就需要將各個(gè)Actor中的界面?zhèn)鞯絍iew中結(jié)合子面板進(jìn)行處理。
三、設(shè)計(jì)實(shí)現(xiàn)
1、創(chuàng)建操作者
如上圖所示,該項(xiàng)目創(chuàng)建了一個(gè)Control,一個(gè)View,三個(gè)Module。其中View是主界面,用來做所有和界面顯示相關(guān)的工作;三個(gè)Module分別是實(shí)現(xiàn)不同功能的模塊,并且它們都擁有自己的界面;而Control是根操作者,也是整個(gè)項(xiàng)目的控制器,用來控制界面顯示和各模塊功能執(zhí)行。
如上圖所示,該UML圖展示了這些操作者之間的邏輯關(guān)系。Control作為根操作者,嵌套調(diào)用了三個(gè)Module和一個(gè)View。嵌套操作者給根操作者發(fā)送消息使用接口(發(fā)送方只需要向接口中寫消息,而接收方只要繼承接口就可以通過實(shí)例化接口消息以實(shí)現(xiàn)消息的傳遞,這樣做可以消除消息發(fā)送方和接收方的耦合關(guān)系)。每個(gè)操作者都擁有自己的一些私有屬性和方法,感興趣的小伙伴們可以閱讀UML圖并結(jié)合源代碼了解此項(xiàng)目的設(shè)計(jì)功能。
2、Module功能設(shè)計(jì)
操作者“M-Hello Word”實(shí)現(xiàn)顯示“Hello Word”并不斷變換文本顏色。
操作者“M-LED閃爍”實(shí)現(xiàn)LED燈的顏色變換。
操作者“M-波形顯示”實(shí)現(xiàn)波形圖表顯示隨機(jī)數(shù)。
每個(gè)Actor的功能都在自己的Actor中獨(dú)立實(shí)現(xiàn),不依賴于其他模塊。
3、使用接口消息傳遞VI引用
三個(gè)Module分別使用接口消息給Control發(fā)送自己Actor Core的VI引用,Control接收到接口消息后立即將VI引用以消息的方式傳遞給View。
下圖為某個(gè)Module的Actor Core,紅色框部分代碼就是當(dāng)此操作者啟動(dòng)后使用接口消息給它的根操作者(Control)傳遞Actor Core VI引用。
下圖為Control實(shí)例化(重寫)接口消息的程序框圖,可以看到Control將Module傳遞來的VI引用直接通過View的消息隊(duì)列傳遞給了View,并且在傳遞消息的同時(shí)還告訴它這個(gè)VI引用來自于哪個(gè)Module。
下圖為View從Control接收到傳遞VI引用的消息后,先判斷這個(gè)VI引用屬于哪個(gè)子界面,然后分別將各個(gè)子界面的VI引用放到自己的私有屬性中,方便后續(xù)使用子面板切換操作子界面。
4、View主界面設(shè)計(jì)
如下圖所示,先看前面板,主界面由一個(gè)樹形控件和一個(gè)子面板控件組成,設(shè)計(jì)功能為通過選定樹形控件來控制子面板切換顯示不同的子界面。再看程序框圖,當(dāng)發(fā)生樹形控件值改變事件時(shí)給自己發(fā)送一個(gè)消息,去執(zhí)行對(duì)應(yīng)的“切換子面板”功能代碼。
“切換子面板”功能代碼如下圖所示,在使用子面板插入VI時(shí)需要注意在插入前先刪除當(dāng)前子面板上的VI界面,然后再插入新的VI界面。該VI根據(jù)“樹選擇”的不同值選擇插入不同Module的界面。
5、Control控制器設(shè)計(jì)
如下圖所示,Control是根操作者,紅色框圖部分代碼是它嵌套調(diào)用了其他操作者并且將View的消息隊(duì)列存入自己的私有屬性中,方便給View發(fā)送消息。
?
審核編輯:劉清
-
控制器
+關(guān)注
關(guān)注
112文章
16433瀏覽量
178953 -
LabVIEW
+關(guān)注
關(guān)注
1976文章
3657瀏覽量
324866 -
UML
+關(guān)注
關(guān)注
0文章
122瀏覽量
30879 -
MVC
+關(guān)注
關(guān)注
0文章
73瀏覽量
13890
原文標(biāo)題:教程 | Actor Framework中MVC架構(gòu)的子面板設(shè)計(jì)
文章出處:【微信號(hào):華穗科技,微信公眾號(hào):華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論