作者:趙櫟安
四、LabVIEW面向對象的編程架構:Actor Framework
Actor Framework是一個軟件類庫,用以支持編寫有多個VI獨立運行且相互間可通信的應用程序,在該類型應用程序中,每個VI即代表操作者(Actors)執行獨立的系統任務,操作者本身維持著自己的內部狀態,并傳遞消息給其它的操作者,在LabVIEW編程環境中已經有了一些創建此類架構程序的技術存在,而操作者框架則聚焦于容易學習(相對于其它可能強大的工具而言),夠降低死鎖和競爭條件,并擁有最大限度代碼復用的優點。
加載ActorFramework4.1.0,可以看到當前框架的基本結構,主要父類有Actor和Message,及Message隊列類、出入隊列類、優先級操作類。
Actor:擁有數據狀態的模塊。
Message:消息在操作者間傳遞用來觸發狀態改變。
在NI官方資料中,介紹操作者框架(ActorFramework)是在廣泛應用的隊列驅動狀態機(QDSM)的基礎上開發而成,但更優于DSDM的框架。
現在用官網的QDSM和ActorFramework的程序圖做一下比較,能夠很直觀的看出兩者的程序簡潔性,如下圖所示:
可以看到,使用操作者框架后,整個程序非常簡潔,隊列驅動狀態機的簇和相關代碼封裝成類和方法,消息和條件結構封裝為類和動態匹配。當接收到消息時,Actor的方法就自動運行。
使用ActorFramework,如果新增加類似功能,只需要繼承類后,再進行類方法的修改并重載、新建類的獨有方法,而不需要修改主框架,就可以完成新功能的添加。而如果使用QDSM,則需要增加單獨隊列才能完成。
五、范例一
下面以消費者來商店購買東西的場景,完成一個ActorFramework的基本開發過程的演示。
(1)新建一個空白項目。
(2)添加一個Actor,CustomerA
(3)添加第二個Actor,ShopAssistant
(4)新建launch.vi,作為調用主程序,添加類啟動
(5)新建靜態VI,保存為AskMessage,程序增加對話框,然后創建消息
(6)在主程序中添加消息響應函數
(7)運行Launch.vi,當點擊按鈕時,彈出的對話框。說明成功調用AskMessage.vi。
(8)CustomerA詢問啤酒價格,ShopAssistant需要有對應的反饋。在ShopAssistant類里面增加函數ShopAssistant,當調用時,彈出對話框。最后,創建消息。
(9)CustomerA詢問的消息需要傳遞給ShopAssistant,需要修改類私有數據的簇的數據引用類型,添加ShopAssistant的隊列引用。
(10)添加數據成員訪問函數,將ShopAssistant的消息隊列加載進來
(11)修改CustomerA類的函數,增加入隊隊列,調用ShopAssistant消息響應函數
(12)修改Launch.vi,將ShopAssistant隊列傳遞進去,運行后,彈出兩個對話框,即完成了一個Customer與ShopAssistant的對話。
(13)如果CustomerA對ShopAssistant的回復再進行回復,我們僅僅需要在CustomerA類里面添加方法CustomerAFeedBack,創建消息。然后,在ShopAssistant類里面添加消息響應。
(14)運行Launch.vi,首先彈出兩個對話,點擊確認時,彈出“非常感謝”,證明程序調用成功。
綜上,是一個非常簡單的基于ActorFramework編寫的購買東西的場景需求??梢钥吹?,在需求增加的過程中,我們對主界面程序Launch.vi很少有變動修改,大部分的需求增加,都是修改增加對應類中的函數完成,這在中、大型程序的編寫中會有很高的編碼生產效率。
QQ:94737555
電 話:13256768669
傳 真:0531-85880888
郵 箱:94737555@qq.com
地 址:山東省濟南市槐蔭區經十路27566號財富壹號廣場2號樓