<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > labview的深入探索-----狀態(tài)機的基本概念

          labview的深入探索-----狀態(tài)機的基本概念

          作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
          狀態(tài)機不是LABVIEW獨有的概念,早在LABVIEW誕生之前,就有了狀態(tài)機(STATE MACHINE)的概念,只所以在LABVIEW編程中經(jīng)常強調(diào)狀態(tài)機是因為LABVIEW特有的圖形編程方式特別適合于采用狀態(tài)機模式編程,在PLC中有流程圖的編程方式,從本質(zhì)上說,那是一種特殊的狀態(tài)機。

          STATE MACHINE包括三個基本要件,STATE、EVENT 、ACTION,狀態(tài)、事件和動作

          狀態(tài):是一個抽象的概念在一定條件下或者一定時間內(nèi)保持不變,等待一個或幾個事件的發(fā)生,命名狀態(tài)時,往往可以用等待--來定義。

          事件:是一個瞬時的概念,表示某件事情發(fā)生了,一旦有關(guān)的事件發(fā)生了,勢必要采取某種動作。

          動作:表示一旦事件發(fā)生,采取何種處理方式,處理的結(jié)果就是另一個穩(wěn)定的狀態(tài)。

          狀態(tài)(等待事件)---》事件發(fā)生----》采取動作----》另一個狀態(tài)。

          狀態(tài)機的概念是非常簡單的,越是簡單的東西越不容易處理,原因是簡單則限制少,則靈活,狀態(tài)機設(shè)計的好壞完全取決于編程者的水平,這不僅僅指LABVIEW編程的水平,更重要的是編程者的邏輯思維,一個好的狀態(tài)機的設(shè)計,關(guān)鍵是如何定義狀態(tài),狀態(tài)少了,則意味著每一個狀態(tài)中要處理的事務(wù)多了,狀態(tài)多了,則整個狀態(tài)機就變的復(fù)雜了。

          以一個簡單的紅綠燈控制來說,簡單地說有兩個狀態(tài),紅色狀態(tài)和綠色狀態(tài),事件是綠燈時間到和紅燈時間到,綠色時間到觸發(fā)的動作是,綠色燈滅,紅色燈量,紅色時間到觸發(fā)的動作是紅色滅,綠燈量。

          我過去的文章中多次提到ACTION ENGINE的概念,它與狀態(tài)機的區(qū)別是,它僅僅定義了ACTION,而沒有定義STATE和EVENT,因此,它的ACTION完全取決于編程者,而狀態(tài)機自己本身就可以根據(jù)內(nèi)部或者外部條件的變化,自動采取相應(yīng)的動作,轉(zhuǎn)入其它的狀態(tài),實現(xiàn)控制自動化。

          有多種形式的STATE MACHINE,我將在后續(xù)的文章中陸續(xù)介紹,先看一下紅綠燈的實現(xiàn)過程,假如綠燈亮20秒,紅燈亮10秒。

          先定義三個基本狀態(tài):初始化(僅在第一次調(diào)用時發(fā)生),等待綠燈結(jié)束和等待紅燈結(jié)束。
          LABVIEW的嚴(yán)格枚舉數(shù)據(jù)類型是LABVIEW狀態(tài)機定義狀態(tài)的最好工具,使用狀態(tài)機時,必須要使用這種數(shù)據(jù)類型,好處是增加或者減少狀態(tài),程序可以自動更新。





          關(guān)鍵詞: labview狀態(tài)機基本概

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();