LabVIEW程序設計模式(二)—基本狀態機模式

2021-01-09 電子產品世界

狀態機是一種最為經典的程序設計模式,在LabVIEW 7.1(含)之前它幾乎統治了大部分的LabVIEW主程序。最基本的狀態機結構如圖 1所示。狀態是狀態機運行的經脈,在開始使用狀態機模式撰寫程序時需要將應用分為若干個狀態。下面以圖中的應用為例說明基本狀態機的使用。

【應用1】

前面板具有3個按鈕(Control)和1個波形顯示控制項Chart(Indicator),功能分別是:
開始採集:Label是start,單擊後開始進行模擬數據採集程序(這裡使用隨機數代替)。關於:Label是dialog,單擊後彈出對話框以說明這個程序的版權、幫助等信息。停止:Label是stop,單擊後停止程序的運行。Chart:用於顯示獲取的隨機數。這是一個非常簡單的應用,但是具有一定的代表性。根據要求,該應用至少包含以下5種狀態結構。
Initial:初始化狀態;Idle:空閒狀態,用於響應各種用戶界面操作;acquire:採集狀態,用於持續模擬採集數據;about:用於彈出關於和幫助對話框;stop:停止狀態,退出循環並中止程序。
背面板
前面板圖 1 基本的狀態機結構背面板
仔細分析圖中的基本狀態機,可以看出狀態始終貫穿整個應用程式,並由移位寄存器進行值的寄存和傳遞。當前狀態分支的結果將決定下一個狀態,如圖中的Idle狀態。在這個狀態中,程序將自動檢測前面板的三個按鈕是否被按下。如果start被按下,則進入acquire狀態;如果dialog被按下,則進入about狀態;如果stop被按下,則進入stop狀態;否則如果沒有任何按鈕被按下,則仍然進入當前的Idle狀態繼續檢測。

在acquire狀態中,為了保證程序的重複採集使得下一個狀態仍然為acquire,但是這樣會導致程序無法停止(中斷採集)。於是需要在acquire狀態分支中加入stop的探測,如果stop被按下,則不再進入acquire狀態而直接進入stop狀態。

從應用1可以看出,基本狀態機模式大體上能夠滿足主程序結構的需要。該模式能夠很好地使得應用程式的各個功能以狀態的方式有順序地執行,並且保證了程序的可讀性(以狀態圖的方式顯示清晰明了)和擴展性(日後只需要擴展狀態即可擴展相應的功能)。
事例中使用的是「string」型結構來標記狀態,事實上也可以使用其它的數據類型替換,如ring、numeric或enum。從嚴格意義而言,ring並不屬於一種數據類型,它只是一種特殊的numeric性,其性質與numeric基本上一樣。儘管ring與enum控制項從外觀上看是一樣的,如圖 2所示,但是它們實質上是不同的。主要體現為以下7點。

相關焦點

  • LabVIEW設計模型——狀態機
    狀態機是在工程應用中使用最多的設計模型。使用狀態機,我們可以很容易的實現程序流程圖中的判斷、分支。 狀態機是由一系列的狀態構成的,其中包括一個「初始化」狀態,和一個「停止」狀態。
  • 由淺入深,讓你全面了解狀態機模式的應用原理
    本文首先簡單介紹狀態機的基本知識(建議找專門專業的介紹狀態機的書籍進行學習),然後基於十字轉門的例子,以遷移表的方式來實現有限狀態機的功能,接著再介紹經典的狀態機模式,最後重點介紹boost startchart的相關知識點,boost startchart是boost實現的狀態機庫,它幾乎支持了所有的UML中狀態機的特性,主要學習的途徑就是官網提供的指南,該指南信息量很大,但是學習起來有點費勁
  • 如何設計一個穩定可靠的狀態機
    隨著大規模和超大規模FPGA/CPLD器件的誕生和發展,以HDL(硬體描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛.從小型電子系統到大規模SOC(Systemonachip)設計,已經無處不在.在FPGA/CPLD設計中,狀態機是最典型、應用最廣泛的時序電路模塊,如何設計一個穩定可靠的狀態機是我們必須面對的問題.
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    本文引用地址:http://www.eepw.com.cn/article/201706/348829.htm4.6典型實例6:狀態機應用4.6.1實例的內容及目標1.實例的主要內容狀態機設計是HDL設計裡面的精華,幾乎所有的設計裡面都或多或少地使用了狀態機的思想。
  • LabVIEW串口通信的一個例子-串口"示波器"
    最後,用一個狀態機來實現相鄰兩個字符串的判斷。如果串口在相鄰兩個字符串之間接收時間大於50ms,則判斷為兩個獨立的字符串;如果小於50ms,則自動拼接前後兩個字符串。 labview程序性能優化 課時15: 中級08:LabVIEW運行性能(作者:NI應用工程師 李甫成)一、避免強制類型轉換二、防止內存洩漏三
  • 運用狀態機提高嵌入式軟體效率
    如果合理運用狀態機機制開發系統軟體,就可以讓MCU進行多任務的分時處理。本文引用地址:http://www.eepw.com.cn/article/152440.htm1 建立有限狀態機的模型 其實在平時的程序設計中,開發人員已經不知不覺地使用了狀態機,如按鍵狀態轉換、菜單顯示狀態的轉換等。但是,很少有系統會使用狀態機進行多任務處理。
  • 狀態機重新優化業務流程
    SDL狀態機規範和描述語言是ITU的一個標準,其中包括描述轉換中動作的圖形符號:發送事件接收一個事件啟動計時器取消計時器啟動另一個並發狀態機決策SDL嵌入稱為「抽象數據類型」的基本數據類型、操作語言和執行語義,以便使有限狀態機可執行。
  • MVC設計模式的總結
    設計模式起源: 1994 年,由 Erich Gamma,Richard Helm,Ralph Johnson 和 John Vlissides(即所謂的「四人幫』,GoF:Gang of Four)合作的以《設計模式:可復用的面向對象軟體的基本原理》為題目的書藉出版了。
  • LabVIEW設計模型——狀態機之狀態轉換圖
    狀態機是在工程應用中使用最多的設計模型。使用狀態機,我們可以很容易的實現程序流程圖中的判斷、分支。 狀態機是由一系列的狀態構成的,其中包括一個「初始化」狀態,和一個「停止」狀態。
  • 電動汽車動力總成解讀|狀態機
    導語:狀態機,代表了電驅動系統運行的不同狀態或者工作模式,電驅動系統控制器(Inverter)與整車控制器(VCU)狀態機的匹配就好比找對象,既要性格、三觀相匹配,也要有相似的生活方式和行為邏輯。文本從電驅動系統的多種工作模式角度,對電動汽車點火啟動、運轉、熄火停車背後的故事做了簡要介紹。本文分為以下三部分展開:1. 什麼是狀態機?2.
  • 單片機之狀態機淺談
    說到單片機編程,不得不說到狀態機,狀態機做為軟體編程的主要架構已經在各種語言中應用,當然包括C語言,在一個思路清晰而且高效的程序中,必然有狀態機的身影浮現。靈活的應用狀態機不僅是程序更高效,而且可讀性和擴展性也很好。狀態無處不在,狀態中有狀態,只要掌握了這種思維,讓它成為您編程中的一種習慣,相信您會受益匪淺。
  • 不懂狀態機怎麼能讀懂中間件的LifeCycle?
    一個簡單的狀態機在Java技術棧中,很多中間件使用了LifeCycle設計模式組織項目結構,如Tomcat,Jetty,Spring等。要搞清楚LifeCycle模式首先需要能看懂狀態機。事實上,狀態機就是當滿足某種條件時,改變為指定狀態,也是很好理解的。
  • 設計模式之狀態模式總結篇
    狀態模式總結篇狀態模式總結篇,我們將從以下幾個方面對狀態模式進行總結。狀態模式出現的意圖是什麼?通過對象內部狀態發生改變進而來改變對象的行為,對象看起來好像是被修改了一樣。本文出處凱哥Java(kaigejava)講《23種設計模》系列教程種的《狀態模式總結篇》主要解決的問題是什麼?對象的行為依賴於對象的狀態變化(屬性變更),並且根據屬性值(狀態)的改變而改變相關的行為。如,出不出糖果這個行為受糖果機裡面有沒有糖果和有沒有投幣這兩個狀態影響而改變的。什麼時候或者是什麼場景下使用狀態模式?
  • 基於模式的SoC設計方法研究
    軟體設計模式中運用得比較多的面向對象方法是繼承,它同樣適用於SoC的設計模式當中,但必須考慮SoC系統中的物理約束。一些軟體設計模式,主要是創建型模式,能夠動態地生成系統的對象,而SoC系統中硬體部分結構是靜態的,因此,它們不適合於SoC硬體部分設計模式,但是對於SoC系統中的軟體模塊還是可以適用的,例如原型模式和命令模式等。
  • 如何在FPGA中實現狀態機
    對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀 態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。但在一系列觸發器的觸發下,將在不同狀態間進行轉換。本文引用地址:http://www.eepw.com.cn/article/266770.htm  理論上講,狀態機可以分為Moore狀態機和Mealy狀態機兩大類。
  • 設計模式之策略模式(Java實現例子說明)
    有了這個例子,我相信你應該對其思想有了一個基本的認識,下面看一下其正式的概念介紹:定義一系列的算法,把每一個算法封裝起來, 並且使它們可相互替換二、實現策略模式策略模式把對象本身和運算規則區分開來,因此我們整個模式也分為三個部分。環境類(Context):用來操作策略的上下文環境,也就是我們遊客。
  • 基於UART以狀態機的形式實現LIN通信
    LIN協議分析和狀態機的設計有限狀態機是由一組狀態、一個起始狀態、輸入以及將輸入與當前狀態轉換為下一個狀態的轉換函數所組成,它是一個特殊的有向圖,包括一些狀態節點和連接這些狀態的有向弧。對特定的狀態機而言,首先要建立一些有效的狀態,然後設計相應的算法完成狀態的轉換。
  • MVC設計模式(模型-視圖-控制器)設計模式介紹
    控制器與視圖的分離,支持了視圖與不同控制器結合的靈活性,以實現不同的操作模式,例如對普通用戶、專業用戶、或不使用控制器建立的只讀視圖。這種分離還為在應用中集成新的I/O設備提供了途徑。   4 MVC的變化   把模型、視圖、控制器實行分離,使設計和使用有了很大靈活性。但是,在現實中,視圖和控制器的功能通常是緊密地聯繫在一起的。
  • 設計模式之狀態模式(java實現)
    在網上買東西都見過一件9折,兩件5折,限購兩件等等這樣的宣傳語,我們買不同數量的衣服,就會有不同的折扣,這就是今天所講的狀態模式。一、認識狀態模式1、概念狀態模式允許一個對象在其內部狀態改變的時候改變其行為。這個對象看上去就像是改變了它的類一樣。
  • 6.java設計模式之適配器模式
    基本需求:將一個220V的電壓輸出成5V的電壓,其中220V電壓為被適配者,變壓器為適配器,5v電壓為適配目標基本介紹:適配器模式屬於結構型模式,將某個類的接口轉換成客戶端期望的另一個接口表示其別名為包裝器(Wrapper) 分為類適配器模式,對象適配器模式,接口適配器模式用戶的角度看不到被適配者,是解耦的,用戶調用適配器轉化出來的目標接口方法,適配器再調用被適配者的相關接口方法類適配器模式:Adapter 類,通過繼承 src 類,實現 dst 類接口,完成 src->dst