close

在LabVIEW的Project Template中已經新增"Queued Message Handler"(簡稱QMH),QMH主要是利用Message Queue+Variant +User Event這些元素來架構而成,對於新手來看這個架構可能會讓人卻步,這篇介紹"簡易版"的QMH架構,去掉User Event,並單純化元件,讓初學者能夠了解QMH的架構精神和應用方法。在學習LabVIEW架構的起手式-State Machine後,Queue 架構是緊接著必學的程式架構技巧,這篇使用State Machine學習過的Enum元件搭配Queue使用,比起State Machine,Queue在Case輪轉中,增加架構的彈性,讓程式更為簡易好閱讀若對Queue的元件不是很熟悉,也可以參考之前的文章,只使用Queue+Event的架構:LabVIEW_Queue State Machine with User Event程式架構介紹

程式碼可在這邊下載 如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

範例人機介紹:

這篇範例使用類似CLD的範例題目Car Wash來做講解,人機畫面中,上半部是輸入的訊息,下半部是顯示訊息;為了展示Variant的彈性,特別增加了手動填入的"會員車號"的字元輸入。

功能方面,人機介面上使用者可以選擇"普通會員"或是"高級會員"選項然後選擇Start開始。若是為普通會員,會做的程序為"高壓沖水+泡沫洗車+全車擦乾";而高級會員則使比起普通會員多了"高級打蠟"。

人機下面的顯示目前進行中的程序。

範例程式重點介紹:

在程式一開始使用Enqueue Element加入Initialize的程序,讓程式可以在一開始跑的時候就執行初始化程式,確保人機介面、傳遞值還原到初始值。

Producer Loop:

Producer Loop使用Event偵測觸發事件,將須傳遞/顯示的項目轉變為Variant傳遞到下方的Consumer Loop做運算/顯示,轉換成Variant後,讓Queue的格式統一為Variant,讓傳遞的資料更為彈性

特別說明一下,將資料傳遞到Consumer做顯示可能在這範例顯得多此一舉,但是若是應用複雜時,就顯得特別重要,例如,不同觸發條件都需要更新項目,若是不使用Cosumer做統以元件的更新,就會需要使用到多個Local Variable,又或是需要更新大量的資料,造成更新時Event無法做偵測 (因為Event Case沒有完成不會繼續一下一個case)...等情況。

結束程序使用 "Enqueue Element At Oppsite End"元件,讓End程序可以優先被處理

在Queue中Enqueue從左加入Queue的程序,Deque從右取出程序,這是依照FIFO的處理程序,也就是先進先出程序。

而Enqueue Element At Oppsite End,是將程序從右邊加入,這樣Dequeue時就會先拿到新加入的項目

Consumer Loop:

將傳遞的資料依照Case做不同的資料拆解,Vairant to Data即是將資料依照定義的資料型態做轉換,這範例根據資料轉換成文字、Ring

根據使否為高級會員而給不同的Queue 程序,這裡是為了強調Queue的好處,使用Array增加Queue的程序,簡易的新增、減少程序的步驟

 

程式碼可在這邊下載 如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

arrow
arrow

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