久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 測試測量 > 設計應用 > LabVIEW程序設計模式(三)—消息隊列型狀態機模式

LabVIEW程序設計模式(三)—消息隊列型狀態機模式

作者: 時間:2017-01-09 來源:網絡 收藏
針對基本狀態機模式的第(1~3)個問題,需要對模式進行改進。本節將一一分析這些問題對應的解決方案,并最終形成一種新的狀態機模式——消息隊列型狀態機模式。
  1. 狀態的分類不清晰。
這是一個涉及各個狀態分類管理的問題,是一個組織問題。我們可以做一個類比,在一個書桌上有許多種類的書籍(通信、計算機、機械、法律等),這些書都擺放在書桌上很整齊。但是我們在尋找一本書時并不會覺得很迅速和隨意,因為書籍的擺放是無序的,每次尋找書籍我們不得不從第一本開始瀏覽直至找到我們想要的書籍。或許可以做一些改變,我們設置一些書立,將不同種類的書使用書立分開。并且在書立上標明這些書籍表示的種類。這樣我們在尋找某一種書籍時就不需要從第一本書開始尋找了,只需要找到對應的書立,在這些書立中尋找即可。
讓我們回到程序,并給程序的狀態設置一些“書立”。如圖 4所示,系統共有9個有效狀態(UI Initial、Data Initial、Instr Initial、Temperature、Power、FFT、JTFA、Data Clean、Exit)。如果把這些狀態混在一起,我們需要找到某一個狀態時會比較困惑和麻煩。如同上面所述,將這些狀態分為4類并設置了4個“書立”(Initial、Acquire、Analyse、System)分隔這些狀態。在實際的狀態控制中,需要確保程序只會進入實際的狀態中運行而不會進入到“書立”分支中,因此對每個“書立”加入了“-------”以示區別。


圖 4 狀態分類
盡管我們只是進行了少量的修改,但是這的確有利于程序狀態的組織和閱讀,尤其是當程序具有很多個狀態的時候。
  1. 缺乏數據共享和錯誤處理機制。
在層疊式的順序結構中,數據在幀之間的傳遞是靠“順序局域變量”實現的。那么如果在case結構中如何傳遞不同分支的數據呢?這個問題似乎很容易解決,使用局域變量,全局變量或共享變量都能夠解決,但是這些并不是最優的解決方案。因為上述的方式會明顯系統運行的內存空間和時間。由于狀態機的基本組成元素除了case結構之外還有循環,因此可以使用移位寄存器來傳遞數據。如圖 5所示。


圖 5 狀態機中的數據傳遞
圖 5使用移位寄存器進行數據共享和傳遞,將所有的數據封裝在一個簇中并對每個數據命名,這樣在使用數據時就可以使用“Unbundle by name”或“bundle by name”。需要說明的是,即使使用一個數據需要共享,仍然希望采用簇的封裝形式,這樣當后續需要增加擴展數據的時候并不會影響現有的數據引用。
  1. 每一個狀態分支只能夠決定后面的一個狀態,而無法決定一個狀態序列(多個狀態)。
在基本狀態機中之所以存在這個問題是因為狀態的傳遞使用的是Scalar(標量)形式,如果需要傳遞一個狀態序列,很明顯可以使用隊列或數組進行狀態的傳遞。在LabVIEW程序設計模式中將這種具備處理狀態序列的狀態機稱為“消息隊列型狀態機”,它是在基本狀態機基礎上的改進。
顧名思義,這種模式就像銀行辦理業務時排隊一樣采用隊列的方式。當儲戶進入銀行時,首先到叫號機處領取號碼進行排隊(進入隊列)并等待。然后,當前面的儲戶辦理完業務后就可以到相應的窗口辦理業務(退出隊列)。事實上,這種方式在現代生活中隨處可見。
在LabVIEW中至少有兩種實現消息隊列的方法。如圖 6所示。前者使用數組函數實現隊列元素的入列和出列;后者使用隊列函數實現隊列元素的入列和出列。二者都能夠實現隊列的有序操作和狀態的序列變化。


圖 6 消息隊列型狀態機模式
本節解決了基本狀態機模式中的(1)~(3)個問題,為了更好地比較和使用這些特點,特使用一個實例說明消息隊列型狀態機的使用過程。
【應用2】
本例要模擬一個自動販賣機的工作過程。它的一次正常交易過程為:投幣→選擇需要購買的商品→找幣,當幣值不足或商品已經銷售完畢時則無法購買。
程序的前面板如圖 7所示。在販賣機的左上側有4個按鈕。
  1. 1USD:單擊時表示投入1美元的貨幣,2USD和5USD類同;
  2. Change Back:表示找零,也就是將目前剩余的貨幣退還給用戶。
程序的右側是5個按鈕,表示5種不同類別的可樂(這里均使用了可口可樂的圖標),每種可樂的價格均是1美元。可樂的下面數字表示販賣機中剩余的該商品的數量,初始為每種20瓶。Current money顯示販賣機中剩余的貨幣數,你可以繼續購買可樂或者選擇退回。單擊Stop按鈕將退出應用程序。
本例將使用本節介紹的消息隊列狀態機模式解決這個應用(也可以使用其它的設計模式)。系統的功能并不復雜,關鍵是要判斷販賣機中的剩余錢數和剩余的貨物數以決定交易是否成功。


圖 7 自動販賣機前面板
程序背面板如圖 8所示。系統分為5個狀態,并分為2大類。

上一頁 1 2 下一頁

評論


技術專區

關閉