這篇延續上一篇的State machine程式架構介紹(LabVIEW_State Machine(狀態機)程式架構介紹),State machine眾所皆知是LabVIEW初學中很重要的程式架構之一,但是他卻有些限制,最主要的就是他每次都只能輪轉一個case。在中小型複雜的程式需求中,會慢慢發現state machine在此彈性上的不足,使用Queue+State machine的搭配,可以一次增加或減少數個case到Queue的buffer中,這樣序列的程序堆疊,可以讓程式活用度更高

這篇的進階為LabVIEW_Queued Enum Handler + Variant 架構介紹範例分享介紹並分享一個Queue搭配Variant的用法,讓架構更為彈性,若這篇已經學習會了就可以以學習搭配Variant使用

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

和State Machine一樣,Queue State Machine 的重要元素有: While loop、Shift Register、Case Satement、Case Selector

另外加上:

  • Queue
  • Concumer loop

比起原本經典的State machine架構,Queue State Machine,更強調人機的互動性,強調人機觸發事件。而事件產生Queue堆疊功能

這裡找到一個由 Wes P  在NI的官方論壇中發表的一篇文章Queued State Machine with User Input,有一個Queue State Machine的程式給大家參考程式如何撰寫,建議直接下載這個範例,實際跑一次比較懂接下來解釋的項目。

程式碼:

上面的Producer Loop主要負責Event的事件觸發,觸發後將Queue傳到下方的Consumer Loop,而下面的Consumer LOOP則是依照先進先出(FIFO)的原則,解析Queue的動作項目

Queue的FIFO先進先出原則,如下圖,Enqueue時程序從左邊進入佇列,Dequeue時,從右邊解析佇列。所以先進入的"1"佇列會先被Dequeue出來

在這範例中,有幾個要注意的地方提醒一下:

為了讓程式能及時停下,這裡作者使用Flush讓程式強制清掉Queue中的buffer;但是在較為複雜的程式中,Enqueue的地方更多,要先確保Queue中沒有Buffer才能增加shutdown的Queue,確保除了Shutdown的其他case都已經被清除掉了。

 

其他參考資料:

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

arrow
arrow

    安伯伯 發表在 痞客邦 留言(0) 人氣()