Stateflow_matlab教程_第1頁
Stateflow_matlab教程_第2頁
Stateflow_matlab教程_第3頁
Stateflow_matlab教程_第4頁
Stateflow_matlab教程_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、Stateflow系統(tǒng)建模技術(shù)2010年7月5日內(nèi)容提要 Stateflow入門介紹及基本概念入門介紹及基本概念 創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移 流程圖建模 狀態(tài)圖的層次 并行機制 Stateflow入門介紹 Stateflow是一個交互式設計工具,用來對復雜的事件驅(qū)動模型系統(tǒng)進行建模與仿真。通過緊密地與Simulink和MATLAB集成,Stateflow將復雜的控制和監(jiān)督邏輯有效地結(jié)合到Simulink模型中,為Simulink用戶提供了一個設計嵌入式系統(tǒng)的完美解決方案。 Stateflow入門介紹Stateflow能夠做: 基于有限狀態(tài)機理論對復雜的響應型系統(tǒng)進行可視化建模與仿真 設計和開發(fā)復雜的

2、監(jiān)控邏輯 在同一個Stateflow框圖中同時使用流程圖和狀態(tài)轉(zhuǎn)移圖表示法 自動地從模型中生成整數(shù)或浮點數(shù)代碼 可隨時方便修改設計,評估結(jié)果,驗證系統(tǒng)性能stateflow基本概念l動作l數(shù)據(jù)對象l連接節(jié)點l缺省轉(zhuǎn)移l狀態(tài)l轉(zhuǎn)移l事件l條件有限元狀態(tài)機有限元狀態(tài)機實例:DVD播放機8缺省轉(zhuǎn)移1狀態(tài)2轉(zhuǎn)移3事件4條件5動作7連接節(jié)點6Counter數(shù)據(jù)對象一個狀態(tài)機(也可以包含多個Chart)內(nèi)容提要 Stateflow入門介紹及基本概念 創(chuàng)建狀態(tài)圖創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移 流程圖建模 狀態(tài)圖的層次 并行機制創(chuàng)建狀態(tài)圖插入圖塊Chart 在MATLAB命令窗口輸入 sfnew 直接從stateflo

3、w庫中拖Chart塊到模型中拖拖創(chuàng)建狀態(tài)圖幾個術(shù)語 每個Chart被稱作一個stateflow圖塊,每個圖塊都有對應的stateflow框圖,模型中所有的圖塊的集合叫做stateflow狀態(tài)機,且一個模型中只有一個狀態(tài)機狀態(tài)機圖塊圖塊框圖框圖雙擊雙擊圖塊包含的內(nèi)容圖塊包含的內(nèi)容創(chuàng)建狀態(tài)圖編輯器 可以用編輯器開發(fā)stateflow框圖 仿真過程中可以用編輯器來顯示狀態(tài)圖的執(zhí)行過程創(chuàng)建狀態(tài)圖編輯器 將框圖鎖定的方法: FileChartPropertiesLocked選項創(chuàng)建狀態(tài)圖插入狀態(tài)和節(jié)點 先左鍵單擊選中對象按鈕,然后在編輯區(qū)左鍵單擊放下對象 要插入一個對象的多個拷貝,雙擊對象按鈕,然后再編

4、輯區(qū)左鍵單擊添加,右鍵單擊停止添加 要刪除某個對象,選中后按Delete鍵刪除創(chuàng)建狀態(tài)圖框圖的縮放 縮放范圍20%至500% 左鍵單擊zoom按鈕 上部放大,下部縮小 左鍵單擊兩個zoom按鈕的中間調(diào)用下拉菜單來選擇縮放的比例 移動鼠標到兩個zoom按鈕的中間空白處,左鍵保持在該處直到出現(xiàn)雙箭頭,向上向下拖拉進行縮放2個zoom按鈕創(chuàng)建狀態(tài)圖改變狀態(tài)尺寸 左鍵保持狀態(tài)的一個圓角拖拉即可,當移動鼠標到狀態(tài)的圓角時,會出現(xiàn)一個雙箭頭,這是就可以左鍵保持這個圓角,然后拖拉直到滿意的尺寸大小創(chuàng)建狀態(tài)圖改變節(jié)點尺寸 右鍵單擊節(jié)點,彈出一個快捷菜單,然后選擇Junction Size選項選擇需要的大小尺寸

5、創(chuàng)建狀態(tài)圖移動和復制對象 左鍵保持并且拖拉對象,移動一個狀態(tài)或節(jié)點 右鍵保持拖動對象,拷貝一個對象 如果想移動或拷貝一組對象,首先要框選所感興趣的對象,然后按上面的方法操作 注:單擊時必須點到對象的邊緣里面創(chuàng)建狀態(tài)圖狀態(tài)的標簽 每個狀態(tài)都必須要有一個名字。標簽一個狀態(tài)時,左鍵單擊問號,在光標處輸入文本。注意鼠標點接近問號時它所發(fā)生的變化。狀態(tài)名要以字符串開始,中間不能有空格,但可以寫成多行。編輯狀態(tài)標簽時,左鍵單擊標簽進入文本編輯模式。創(chuàng)建狀態(tài)圖創(chuàng)建轉(zhuǎn)移 從源對象的邊緣左鍵保持并且拖拉到目標對象邊緣。轉(zhuǎn)移只能開始或終止于狀態(tài)的直線的邊緣(不能是狀態(tài)的圓角)。當鼠標點接近狀態(tài)的直線邊緣時光標變?yōu)?/p>

6、十字花。 默認情況下,轉(zhuǎn)移的精確行為是有效的,要想使他無效,可以在轉(zhuǎn)移上右鍵單擊,在快捷菜單上清掉Smart選項。創(chuàng)建狀態(tài)圖創(chuàng)建缺省轉(zhuǎn)移 左鍵單擊圖形編輯器左邊的一列工具條上的第三個按鈕,然后左鍵單擊缺省狀態(tài)的直線邊緣。如果轉(zhuǎn)移從狀態(tài)或節(jié)點的邊緣分離出來,它就會變成缺省轉(zhuǎn)移。創(chuàng)建狀態(tài)圖轉(zhuǎn)移的變更 從一個狀態(tài)的邊緣到另一個狀態(tài)的邊緣,可以改變轉(zhuǎn)移的任何一個末端(帶箭頭或不帶箭頭的):左鍵保持在想改變的轉(zhuǎn)移的末端,然后拖拉它離開原來的邊緣 到達想要的目標的邊緣時釋放轉(zhuǎn)移的末端,重新連接轉(zhuǎn)移 要想改變轉(zhuǎn)移的線路而不影響它的兩端的連接時,左鍵保持在轉(zhuǎn)移的兩個末端之間的線上,拖拉即可改變創(chuàng)建狀態(tài)圖轉(zhuǎn)移標

7、簽及移動 給轉(zhuǎn)移加標簽:左鍵單擊轉(zhuǎn)移選中它,左鍵單擊出現(xiàn)的問號,在光標處插入文本。左鍵單擊文本進入文本編輯模式進行編輯轉(zhuǎn)移的標簽 移動轉(zhuǎn)移標簽:左鍵保持在標簽位置,拖拉到想安放的位置,可以把轉(zhuǎn)移標簽移到框圖內(nèi)的任何位置創(chuàng)建狀態(tài)圖添加注釋 在框圖中指定位置添加注釋:右鍵單擊框圖中要加注釋的位置,彈出快捷菜單選擇快捷菜單中的Add Note選項在光標處插入文本 左鍵單擊文本進入到編輯模式編輯文本注釋注釋創(chuàng)建狀態(tài)圖定制對象屬性 右鍵單擊某一對象,彈出快捷菜單,選擇Properties選項,就會出現(xiàn)關(guān)于這個對象的屬性對話框。 不同對象,屬性對話框有所差異轉(zhuǎn)移屬性對話框轉(zhuǎn)移屬性對話框狀態(tài)屬性對話框狀態(tài)屬

8、性對話框創(chuàng)建狀態(tài)圖設置字體大小 設置狀態(tài)和轉(zhuǎn)移的標簽及注釋信息的字體大小:左鍵單擊選中對象選取Edit菜單下的Set Font Size選項選擇合適的字體 也可以通過對象的快捷菜單進行設置:右鍵單擊對象彈快捷菜單選取Font Size選項選擇合適的尺寸創(chuàng)建狀態(tài)圖設置箭頭尺寸 修改轉(zhuǎn)移箭頭尺寸的方法: 右鍵單擊轉(zhuǎn)移彈出快捷菜單,從Arrowhead Size子菜單中選取合適的尺寸。從狀態(tài)的快捷菜單下對該選項進行設置,所有指向該狀態(tài)的邊緣的箭頭尺寸都將改變創(chuàng)建狀態(tài)圖圖形顯示配置 可以配置一個框圖的圖形風格。包括定制狀態(tài)、轉(zhuǎn)移、節(jié)點、標簽和背景的顏色,狀態(tài)和轉(zhuǎn)移標簽的字體。通過選取Edit菜單下的S

9、tyle選項打開圖形風格對話框來進行編輯。 對話框中:左鍵單擊對象或標簽,設置顏色右鍵單擊標簽,設置字體內(nèi)容提要 Stateflow入門介紹及基本概念 創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移狀態(tài)轉(zhuǎn)移 流程圖建模 狀態(tài)圖的層次 并行機制狀態(tài)轉(zhuǎn)移概念 Stateflow狀態(tài)圖被稱為“狀態(tài)轉(zhuǎn)移圖”,這些狀態(tài)圖中包含了所謂的狀態(tài)、狀態(tài)轉(zhuǎn)移管理和維護當前內(nèi)存中活動的狀態(tài) 一旦包含了狀態(tài)轉(zhuǎn)移的狀態(tài)圖處于活動的狀態(tài),則狀態(tài)圖將一直處于這種活動狀態(tài),直到整個模型仿真計算結(jié)束。 當在某一個制定的時間步長內(nèi)完成了必要的工作后,狀態(tài)圖簡單地進入到一種暫時掛起的狀態(tài),而不是非活動狀態(tài)。也就是說,在連續(xù)兩次觸發(fā)事件之間,狀態(tài)圖是一直處于

10、活動狀態(tài)的。狀態(tài)轉(zhuǎn)移概念(續(xù)) 具有狀態(tài)轉(zhuǎn)移的Stateflow狀態(tài)圖相當于一種包含了離散系統(tǒng)模塊的觸發(fā)子系統(tǒng)。這種子系統(tǒng)在內(nèi)存中保持自己的狀態(tài),在有觸發(fā)時更新自己的輸出,而在兩個連續(xù)的觸發(fā)之間保持自己的狀態(tài)。狀態(tài)轉(zhuǎn)移概念(續(xù)) 當一個狀態(tài)轉(zhuǎn)移圖處于活動狀態(tài)時,這個狀態(tài)轉(zhuǎn)移圖首先嘗試激活相應的狀態(tài),以及鄰近的狀態(tài)。如果,狀態(tài)機處于第一層,則執(zhí)行的第一個元素是系統(tǒng)的默認轉(zhuǎn)移。由于狀態(tài)機在模型運行結(jié)束之前一直處于活動狀態(tài),默認轉(zhuǎn)移僅僅有效一次,即在狀態(tài)機被激活的首次有效,這一點必須注意。如果狀態(tài)的第一層僅有一個狀態(tài),則可以不使用默認的轉(zhuǎn)移。一旦進入一個狀態(tài),這個狀態(tài)就一直處于活動狀態(tài),直到退出為止

11、。與狀態(tài)機類似,狀態(tài)也在連續(xù)兩次觸發(fā)之間掛起而不會成為不活動狀態(tài)。狀態(tài)轉(zhuǎn)移事件驅(qū)動 所謂事件是指觸發(fā)的發(fā)生。一個觸發(fā)可以是隱含存在的,按照預先的配置自動的發(fā)生。同樣,觸發(fā)也可以顯性的定義,在一個具有過零特性的信號發(fā)生,或者被函數(shù)調(diào)用時,觸發(fā)發(fā)生,也就是發(fā)出了事件。由于這種觸發(fā)而引起的相應的動作執(zhí)行,被稱之為事件驅(qū)動 在Stateflow中,所有的狀態(tài)圖的運行都是依靠事件驅(qū)動。換句話說,狀態(tài)圖是依賴于事件而活動的。事件同樣驅(qū)動狀態(tài)的變化。 每次觸發(fā)一次,狀態(tài)圖就重新進行判斷一次。狀態(tài)轉(zhuǎn)移過零觸發(fā) 過零觸發(fā)事件具有三種形式: 1上升沿觸發(fā):當過零信號由負值變?yōu)檎?,或者由負值變?yōu)?,或者由0變?yōu)檎?/p>

12、 2下降沿觸發(fā):當過零信號由正值變?yōu)樨撝?,或者由正值變?yōu)?,或者由0變?yōu)樨撝?3雙邊沿觸發(fā):上述兩種觸發(fā)機制的結(jié)合下降沿下降沿上升沿上升沿狀態(tài)轉(zhuǎn)移產(chǎn)生事件 利用下列的模塊可以在Simulink中產(chǎn)生相應的過零信號:震蕩函數(shù)脈沖發(fā)生器階躍信號(每個階躍信號僅能產(chǎn)生一個事件)雙端輸入開關(guān)靜態(tài)模塊狀態(tài)轉(zhuǎn)移輸入事件定義事件類型事件類型狀態(tài)轉(zhuǎn)移定義多個輸入事件狀態(tài)轉(zhuǎn)移默認轉(zhuǎn)移注意事項 當其父狀態(tài)被激活的時候,默認轉(zhuǎn)移僅僅執(zhí)行一次。那么當父狀態(tài)再次從非活動狀態(tài)進入到活動狀態(tài),默認轉(zhuǎn)移將再次執(zhí)行 當默認轉(zhuǎn)移在狀態(tài)圖的第一層的時候,需要小心。如果第一次觸發(fā)事件發(fā)生時默認轉(zhuǎn)移無效,系統(tǒng)將發(fā)出一個二義性警告,這個

13、警告錯誤一般在父狀態(tài)被激活,而父狀態(tài)下的子狀態(tài)不能確認具體哪一個被激活時發(fā)出。這時候,狀態(tài)圖被激活了,但是沒有一個確定的狀態(tài)被激活。 注:如果在Stateflow調(diào)試器中從錯誤檢測選項字段中去除State Inconsistency,則上述的二義性錯誤警告不會發(fā)出。狀態(tài)轉(zhuǎn)移默認轉(zhuǎn)移注意事項(續(xù)) 一定要牢記一點,一旦Stateflow狀態(tài)圖被激活,則狀態(tài)圖會一直處于激活狀態(tài)直到系統(tǒng)仿真的結(jié)束。由于默認轉(zhuǎn)移的執(zhí)行需要依賴父狀態(tài)的再次激活,則這里的默認轉(zhuǎn)移將不再有機會執(zhí)行了。 若需要通過事件來控制狀態(tài)的執(zhí)行,則可以建立一個啞元狀態(tài),或者將狀態(tài)圖置于使能子系統(tǒng)中,將相應的觸發(fā)事件設置為Reset 例

14、子:exp01_1和exp01_2狀態(tài)轉(zhuǎn)移使用數(shù)據(jù)對象 數(shù)據(jù)對象主要是用在條件和動作語句中。可以根據(jù)需要在Stateflow圖表中限制數(shù)據(jù)對象的使用,也可以使用數(shù)據(jù)對象作為chart和外部環(huán)境的接口,這里所說的外部環(huán)境即Simulink模型中的其他模塊。用在條件中用在條件中用在動作中用在動作中狀態(tài)轉(zhuǎn)移定義數(shù)據(jù)對象添加數(shù)據(jù)添加數(shù)據(jù)數(shù)據(jù)名稱數(shù)據(jù)名稱數(shù)據(jù)對象范圍數(shù)據(jù)對象范圍數(shù)據(jù)類型數(shù)據(jù)類型狀態(tài)轉(zhuǎn)移活動狀態(tài)輸出 可以將狀態(tài)的活動狀態(tài)作為Stateflow塊的輸出,在狀態(tài)屬性對話框中選中Output State Activity選項,stateflow塊就創(chuàng)建了一個數(shù)據(jù)對象輸出到模型,而數(shù)據(jù)對象名稱和狀

15、態(tài)的名稱一致,數(shù)值只能是1或0 例子exp02狀態(tài)轉(zhuǎn)移瀏覽器 使用瀏覽器可以觀察所定義的數(shù)據(jù)和事件 運行瀏覽器:使用Tool菜單下的Explorer命令 瀏覽器左邊列顯示了狀態(tài)機包含的所有層次結(jié)構(gòu)事件事件數(shù)據(jù)數(shù)據(jù)層次結(jié)構(gòu)層次結(jié)構(gòu)狀態(tài)轉(zhuǎn)移瀏覽器(續(xù)) 在瀏覽器中可以定義事件和數(shù)據(jù)對象屬性 用鼠標右鍵拖放事件或數(shù)據(jù)對象,可以完成復制操作 瀏覽器中的Add菜單可以對在層次樹中選擇的stateflow圖表完成添加/定義數(shù)據(jù)和事件對象的操作狀態(tài)轉(zhuǎn)移使用條件 條件表達式包括 :使用布爾運算符比較兩個數(shù)據(jù)對象 以布爾變量作為返回值的函數(shù) 條件表達式不能通過調(diào)用函數(shù)而更改數(shù)據(jù)對象或影響改變圖表中的狀態(tài) 賦值表

16、達式不能作為條件表達式 使用“與”操作符“&”完成條件表達式的與操作 使用“或”操作符“| |”完成條件表達式的或操作 狀態(tài)轉(zhuǎn)移轉(zhuǎn)移動作 轉(zhuǎn)移動作標簽主要由四個部分組成 在轉(zhuǎn)移動作標簽中不一定需要包含所有的上述部分,但是必須按照圖中所示的順序書寫轉(zhuǎn)移動作標簽。 條件動作和轉(zhuǎn)移動作運行有所區(qū)別,條件動作在條件滿足的時候就運行了,而轉(zhuǎn)移動作需要在整個轉(zhuǎn)移通路有效時才運行。見例子見例子exp03事件事件條件條件條件動作條件動作轉(zhuǎn)移動作轉(zhuǎn)移動作狀態(tài)轉(zhuǎn)移狀態(tài)動作在下列情況時,發(fā)生狀態(tài)動作 :初始為非活動狀態(tài),事件驅(qū)動使其激活entry動作初始為活動狀態(tài),事件驅(qū)動使其進入非活動狀態(tài)exit動作 初

17、始為活動狀態(tài),事件沒有改變其活動的狀態(tài)during動作或on動作 狀態(tài)動作一般作為狀態(tài)名稱標簽的一部分,可以緊跟在標簽名稱后面 可以使用一些關(guān)鍵字來標識動作的作用類型 狀態(tài)轉(zhuǎn)移狀態(tài)動作(續(xù)) 有四種類型狀態(tài)動作: entry/en在事件觸發(fā)狀態(tài)進入活動狀態(tài)時執(zhí)行exit/ex在事件觸發(fā)狀態(tài)退出活動狀態(tài)時執(zhí)行during/du在事件觸發(fā)發(fā)生,狀態(tài)保持原來活動狀態(tài)時執(zhí)行on event_name當以event_name命名的事件發(fā)生時,狀態(tài)保持原有的活動狀態(tài)而執(zhí)行相應的動作 系統(tǒng)默認的狀態(tài)動作為entry 狀態(tài)轉(zhuǎn)移動作執(zhí)行順序 在有事件驅(qū)動且條件滿足的時候,執(zhí)行相應的條件動作 整條通路都有效,系統(tǒng)

18、才執(zhí)行轉(zhuǎn)移動作 原狀態(tài)的退出動作在轉(zhuǎn)移動作執(zhí)行之前被執(zhí)行 接著是組含義動作,然后是目標狀態(tài)的進入動作狀態(tài)轉(zhuǎn)移動作語言 Stateflow的動作語言是圖表內(nèi)部進行交互,以及圖表和外部環(huán)境進行交互的接口 動作語言的功能: 執(zhí)行數(shù)學計算:操作數(shù)據(jù)對象調(diào)用函數(shù):使用MATLAB或C語言的函數(shù)觸發(fā)事件:影響內(nèi)部或外部的狀態(tài)狀態(tài)轉(zhuǎn)移支持的數(shù)學運算 二元操作:* / % + - = = = = != & | & | 一元操作: ! - + - 賦值運算:= += -+ *= /= 位操作: & | &= = |=狀態(tài)轉(zhuǎn)移調(diào)用MATLAB函數(shù) 調(diào)用MATLAB 函數(shù),需要在函數(shù)

19、的名字前使用MATLAB命名空間運算符,如ml y = ml.abs(x) 在使用ml運算符調(diào)用MATLAB函數(shù)時需要注意以下幾點:使用ml關(guān)鍵字調(diào)用的MATLAB函數(shù),僅能使用標量或者字符串作為函數(shù)的輸入?yún)⒘?調(diào)用函數(shù)時的圓括號是必須,無論被調(diào)用的函數(shù)是否具有參量 如果調(diào)用的函數(shù)具有返回參數(shù),則返回數(shù)值的類型必須為double型 如果具有多個返回變量,僅有第一個返回變量被賦值如果返回的參數(shù)不是標量,僅向量中的第一個元素被賦值狀態(tài)轉(zhuǎn)移C語言數(shù)學函數(shù) 調(diào)用C語言數(shù)學函數(shù):如y=abs(x) 仿真目標代碼生成器提供了min和max函數(shù)的宏定義 下表中所列的數(shù)學函數(shù)可以被調(diào)用狀態(tài)轉(zhuǎn)移調(diào)用函數(shù) 調(diào)用M

20、ATLAB函數(shù)時需要使用ml操作符,而調(diào)用C語言函數(shù)的時候則比較簡單 ,例例exp04調(diào)用調(diào)用C語言函數(shù)語言函數(shù)調(diào)用調(diào)用MATLAB函數(shù)函數(shù)狀態(tài)轉(zhuǎn)移圖表更新 圖表更新也是可以配置的,更新主要有三種形式:Triggered 或Inherited 狀態(tài)或者被外部輸入的事件觸發(fā),或者按照輸入信號的采樣頻率進行觸發(fā)Sampled 按照一個固定的頻率觸發(fā)狀態(tài)轉(zhuǎn)換 Continuous每個仿真步長觸發(fā)狀態(tài)轉(zhuǎn)換 執(zhí)行File菜單下的Chart Properties命令,在彈出的對話框中,設置Update method 字段中的內(nèi)容 系統(tǒng)默認的更新方式是Triggered or Inherited 狀態(tài)轉(zhuǎn)移觸

21、發(fā)與繼承通過觸發(fā)事件更新狀態(tài)圖需要在stateflow塊輸入具有過零特性的信號如果具有輸入的事件,必須使用Triggered Inherited更新方法如果沒有輸入的事件,則狀態(tài)圖按照輸入信號的采樣頻率自動更新使用繼承更新方法,狀態(tài)圖依賴輸入信號的更新而更新 exp05采樣周期設為采樣周期設為0.2狀態(tài)轉(zhuǎn)移采樣更新 如果使用采樣更新,則stateflow塊類似于離散塊具有固定的執(zhí)行頻率 采樣更新方法按照固定的時間步長觸發(fā)狀態(tài)圖的更新 使用該方法必須指定一個采樣時間 采樣更新方法等同于狀態(tài)圖具有固定周期的驅(qū)動事件 exp06離散采樣周期離散采樣周期0.2狀態(tài)轉(zhuǎn)移連續(xù)更新 使用連續(xù)更新方法時,狀態(tài)

22、圖的運行類似于連續(xù)系統(tǒng)模塊 連續(xù)更新方法在每一個仿真步長觸發(fā)狀態(tài)圖的轉(zhuǎn)換 連續(xù)更新方法等同于狀態(tài)圖具有最小時間步長的觸發(fā)事件 exp07狀態(tài)轉(zhuǎn)移調(diào)試器 使用stateflow調(diào)試器解決狀態(tài)圖中的錯誤 在調(diào)試器中運行模型,可以完全控制模型運行的過程 執(zhí)行調(diào)試器:使用Tool菜單下的Debug命令執(zhí)行狀態(tài)執(zhí)行狀態(tài)全局斷點全局斷點調(diào)試動作調(diào)試動作錯誤檢測錯誤檢測動畫控制動畫控制控制信息控制信息運行信息運行信息狀態(tài)轉(zhuǎn)移設置斷點可以將轉(zhuǎn)移或狀態(tài)作為本地斷點來控制狀態(tài)圖的運行右鍵單擊對象在快捷菜單中選擇Properties選項在breakpoints設置相應的屬性設置也可以將斷點設置為數(shù)據(jù)對象的修改或者事

23、件的觸發(fā),而這些設置在Stateflow瀏覽器中完成。斷點控制斷點控制狀態(tài)轉(zhuǎn)移查詢器從Tool 菜單欄中選擇find選項, 你也可以使用按鈕訪問finder 你可以限制搜尋的范圍,要么查找Stateflow組件,要么既查找Stateflow組件,同時也查找Simulink對象。 內(nèi)容提要 Stateflow入門介紹及基本概念 創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移 流程圖建模流程圖建模 狀態(tài)圖的層次 并行機制流程圖建模轉(zhuǎn)移檢測優(yōu)先權(quán)如果有多個有效的轉(zhuǎn)移,檢測規(guī)則決定執(zhí)行哪個轉(zhuǎn)移限制越多的轉(zhuǎn)移,優(yōu)先級越高:既有事件又有條件的轉(zhuǎn)移第一個被檢測 僅具有事件的轉(zhuǎn)移則被第二個檢測 僅具有條件的轉(zhuǎn)移第三個被檢測 不加任何限

24、制的轉(zhuǎn)移最后被檢測 exp08低低高高流程圖建模轉(zhuǎn)移沖突 如果在同一個優(yōu)先級中,具有兩個合法的轉(zhuǎn)移,在這種情況會觸發(fā)一個轉(zhuǎn)移沖突錯誤的警告信息。 Stateflow 通過幾何的方法解決這樣的問題:對于來自于一個節(jié)點的轉(zhuǎn)移, 按順時針方向檢測轉(zhuǎn)移 對于來自于一個狀態(tài)的轉(zhuǎn)移, 從狀態(tài)的左上角開始,檢測轉(zhuǎn)移 新版本的stateflow可以自己設置轉(zhuǎn)移執(zhí)行的順序流程圖建模流程圖Stateflow 圖如果不包含任何狀態(tài)就構(gòu)成了一個流程圖 流程圖主要是由轉(zhuǎn)移和連接節(jié)點組成 流程圖并不包含任何存儲器 流程圖一旦被觸發(fā),就會一直執(zhí)行到退出為止 在兩個連續(xù)的觸發(fā)之間,這個流程圖是不活動的 流程圖在沒有合法的轉(zhuǎn)移

25、分支的連接節(jié)點處執(zhí)行結(jié)束 流程圖建模終止節(jié)點 終止節(jié)點就是連接節(jié)點,只不過該連接節(jié)點聚集了所有轉(zhuǎn)移路徑 終止節(jié)點類似函數(shù)中的return聲明 在一個流程圖中,必須要有一個無條件路徑來終止連接,防止無窮遞歸 在一個流程圖中, 以 表示的條件動作僅僅是一個可執(zhí)行的動作 流程圖建模If else結(jié)構(gòu)If else結(jié)構(gòu)結(jié)構(gòu)If elseif else結(jié)構(gòu)結(jié)構(gòu)流程圖建模迭代循環(huán)結(jié)構(gòu) for 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) While循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)流程圖建模臨時數(shù)據(jù)vs局部數(shù)據(jù) 狀態(tài)圖中的局部數(shù)據(jù)就相當于函數(shù)的全局變量: 只有在狀態(tài)圖中,數(shù)據(jù)才可見當狀態(tài)圖第一次被激活時,局部數(shù)據(jù)為初值。隨后在狀態(tài)圖被激活時,局部數(shù)據(jù)

26、為前一次數(shù)值重新賦初值時,它的值必須要重置 狀態(tài)圖中的臨時數(shù)據(jù)對象就相當于函數(shù)中的一個局部變量 它的值僅在狀態(tài)圖中可見永遠從初值開始在狀態(tài)圖的以后激活的情況下,自動重置 只有在無狀態(tài)的狀態(tài)圖中臨時數(shù)據(jù)才是有效的 2009a版本中已沒有臨時數(shù)據(jù)類型?流程圖建模密碼檢測邏輯密碼檢測邏輯的要求: 密碼是具有四個數(shù)字的輸入信號 流程圖應分別檢測每個數(shù)字是否與預設的密碼匹配 把正確的密碼數(shù)字聲明為常量 如果密碼正確,則輸出為1,否則為0 見例見例exp10內(nèi)容提要 Stateflow入門介紹及基本概念 創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移 流程圖建模 狀態(tài)圖的層次狀態(tài)圖的層次 并行機制狀態(tài)圖層次概念 當一個狀態(tài)圖具有第

27、二層狀態(tài)時就構(gòu)成了層次 高層次的狀態(tài)就被稱為父狀態(tài),而低層次的狀態(tài)就被稱為子狀態(tài) 狀態(tài)圖中允許擁有的狀態(tài)層次的數(shù)目是沒有任何限制的 Stateflow允許在不同層次狀態(tài)之間存在轉(zhuǎn)移 如果轉(zhuǎn)移穿越了父狀態(tài)的邊界直接到達了低層次的子狀態(tài),則轉(zhuǎn)移被稱之為超轉(zhuǎn)移 子狀態(tài)的各種對象僅僅父狀態(tài)活動時,才有可能執(zhí)行或者有效 直接從父狀態(tài)發(fā)出的轉(zhuǎn)移,可以不用考慮具體哪一個子狀態(tài)處于活動狀態(tài) 狀態(tài)圖層次層次化轉(zhuǎn)移在具有層次的狀態(tài)之間轉(zhuǎn)移時,一般轉(zhuǎn)移路徑的源頭是從最內(nèi)部的子狀態(tài)出發(fā),而終止于目標狀態(tài)的最內(nèi)部的子狀態(tài)。例例exp11狀態(tài)圖層次使用層次的目的在狀態(tài)圖中使用層次有如下幾個目的: 使用層次,可以將相關(guān)的對

28、象組合在一起,構(gòu)成族群 可以將一些通用的轉(zhuǎn)移路徑或者動作組合成為一個轉(zhuǎn)移動作或路徑,簡化模型 適當?shù)厥褂脤哟危梢杂行У乜s減生成代碼的大小,也能夠提高程序執(zhí)行的效率和可讀性狀態(tài)圖層次生成組合父狀態(tài) 需要將父狀態(tài)組合起來 ,這樣就可以作為一個整體對狀態(tài)圖進行移動、拷貝或者重新定義尺寸操作 方法:右鍵單擊父狀態(tài)彈出快捷菜單,選擇Make Contents子菜單下的Grouped命令或者左鍵雙擊父狀態(tài)狀態(tài)圖層次低層次默認轉(zhuǎn)移第二個層次狀態(tài)的默認轉(zhuǎn)移決定了當父狀態(tài)被激活時,具體哪一個子狀態(tài)被激活 思考下圖?例例exp11和和exp12狀態(tài)圖層次歷史節(jié)點 歷史節(jié)點記錄了在父狀態(tài)退出活動狀態(tài)時,具體哪一個

29、子狀態(tài)處于活動狀態(tài) 當父狀態(tài)再次被激活時,如果子狀態(tài)沒有定義顯性直接轉(zhuǎn)移,則歷史節(jié)點將使其記錄的子狀態(tài)處于活動狀態(tài)。 例例exp13 歷史節(jié)點歷史節(jié)點狀態(tài)圖層次內(nèi)部轉(zhuǎn)移 內(nèi)部轉(zhuǎn)移是指從父狀態(tài)邊緣內(nèi)部出發(fā),終止于子狀態(tài)外邊緣的轉(zhuǎn)移,轉(zhuǎn)移始終處于父狀態(tài)的內(nèi)部。例例exp14狀態(tài)圖層次層次轉(zhuǎn)移測試優(yōu)先權(quán) 轉(zhuǎn)移的測試從活動的父狀態(tài)開始 向外的轉(zhuǎn)移首先被測試(level 1)接著是內(nèi)部轉(zhuǎn)移(level 2) 然后從活動的子狀態(tài)開始檢測轉(zhuǎn)移穿越父狀態(tài)邊緣的轉(zhuǎn)移首先被檢測(level 3) 然后是父狀態(tài)內(nèi)部子狀態(tài)之間的轉(zhuǎn)移被檢測 (level 4) 在同等層次的轉(zhuǎn)移之間,具有最嚴格限制的轉(zhuǎn)移首先被檢測 狀態(tài)

30、圖層次內(nèi)部轉(zhuǎn)移規(guī)則 狀態(tài)的外部轉(zhuǎn)移優(yōu)先于內(nèi)部轉(zhuǎn)移被首先測試 內(nèi)部轉(zhuǎn)移僅在沒有有效的外部轉(zhuǎn)移使父狀態(tài)退出活動狀態(tài)時被執(zhí)行 內(nèi)部轉(zhuǎn)移優(yōu)先于子狀態(tài)之間的轉(zhuǎn)移被首先測試狀態(tài)圖層次狀態(tài)動作vs轉(zhuǎn)移測試 狀態(tài)入口動作在默認轉(zhuǎn)移之前被執(zhí)行 狀態(tài)的during或on-event動作在內(nèi)部轉(zhuǎn)移之前被執(zhí)行 例例exp15狀態(tài)圖層次子狀態(tài)圖 子狀態(tài)圖是從父狀態(tài)圖中創(chuàng)建的 它在功能上有別于父狀態(tài) 子狀態(tài)利用灰色圖塊隱藏內(nèi)部細節(jié) 簡化了狀態(tài)圖的復雜程度 子狀態(tài)圖更類似與Simulink的子系統(tǒng) 創(chuàng)建子狀態(tài)圖:右鍵單擊父狀態(tài)彈出快捷菜單,使用Make Contents子菜單,選擇Subcharted命令狀態(tài)圖層次子狀態(tài)圖

31、之間超轉(zhuǎn)移 從源狀態(tài)出發(fā),左鍵拖放轉(zhuǎn)移 將轉(zhuǎn)移拖過目標狀態(tài)的邊界,這時在子狀態(tài)圖中心將出現(xiàn)一個蟲孔 繼續(xù)拖放轉(zhuǎn)移到蟲孔中心,編輯窗體將自動切換到子狀態(tài)圖的內(nèi)部,顯示子圖的細節(jié) 繼續(xù)拖放轉(zhuǎn)移,到最終的子狀態(tài)的邊界,這樣完成了超轉(zhuǎn)移的設置 蟲孔蟲孔狀態(tài)圖層次狀態(tài)轉(zhuǎn)移流程圖 狀態(tài)之間的轉(zhuǎn)移可以使用流程圖來完成復雜的邏輯控制 一旦發(fā)生了觸發(fā),狀態(tài)轉(zhuǎn)移中的流程圖就會被執(zhí)行,直到其中的一個分支到達了某個狀態(tài) 如果存在終點是連接節(jié)點的轉(zhuǎn)移分支,這個轉(zhuǎn)移被認為無效 例例exp16狀態(tài)圖層次狀態(tài)中的流程圖包含于狀態(tài)中,而沒有狀態(tài)終點的流程圖能夠控制動作的執(zhí)行每次狀態(tài)被激活,則流程圖被執(zhí)行一次流程圖的運行直到流程

32、圖到達終點的節(jié)點,或者沒有有效的轉(zhuǎn)移路徑為止當流程圖運行結(jié)束后,父狀態(tài)保持活動狀態(tài)狀態(tài)圖層次定義狀態(tài)本地數(shù)據(jù) 可以將數(shù)據(jù)對象的作用范圍定義成為Local或者靜態(tài),這樣數(shù)據(jù)對象的有效范圍就可以在某個狀態(tài)內(nèi)部了 通過瀏覽器的狀態(tài)列表,執(zhí)行瀏覽器的Tool菜單下的命令,可以為狀態(tài)添加本地數(shù)據(jù)對象 利用瀏覽器的狀態(tài)列表,可以右鍵拖放本地數(shù)據(jù)對象到其他的狀態(tài)中狀態(tài)狀態(tài)添加數(shù)據(jù)按鈕添加數(shù)據(jù)按鈕狀態(tài)圖層次訪問數(shù)據(jù)對象 在其他狀態(tài)中訪問其他狀態(tài)的數(shù)據(jù)對象 ,需使用下面的語法結(jié)構(gòu):state_name.data_name 如果父狀態(tài)中存在與本地數(shù)據(jù)對象名稱一致的數(shù)據(jù)對象,訪問這個數(shù)據(jù)對象時也要使用下列語法結(jié)構(gòu):

33、parent_name.data_name狀態(tài)圖層次圖形函數(shù) 圖形函數(shù)是指在狀態(tài)圖中以圖形方式存在的函數(shù) 主要結(jié)構(gòu)形式是狀態(tài)圖的流程圖 函數(shù)一旦被創(chuàng)建,就可以重復使用 允許包含輸入輸出接口來調(diào)用相應的動作或者條件狀態(tài)圖層次創(chuàng)建圖形函數(shù)內(nèi)容提要 Stateflow入門介紹及基本概念 創(chuàng)建狀態(tài)圖 狀態(tài)轉(zhuǎn)移 流程圖建模 狀態(tài)圖的層次 并行機制并行機制并行機制概念 邊框為虛線的狀態(tài)表示為并行狀態(tài) 當父狀態(tài)處于活動狀態(tài)時,并行狀態(tài)也處于活動狀態(tài) 將默認轉(zhuǎn)移終止到并行的狀態(tài)時非法的并行機制設置狀態(tài)解析關(guān)系 設置狀態(tài)的并行關(guān)系需要將狀態(tài)默認的解析關(guān)系從互斥變?yōu)椴⑿?用鼠標右鍵單擊狀態(tài)的父狀態(tài),注意不是每個狀

34、態(tài),然后在Decomposition子菜單下選擇Parallel命令 對于頂層的狀態(tài),直接在圖形編輯器背景右鍵單擊,然后在Decomposition子菜單下選擇Parallel命令并行機制使用層次的并行狀態(tài) 可以在任意的層次上設置并行狀態(tài) 在同一個層次上的不同狀態(tài)的解析關(guān)系必須保持一致 即在某個層次上,所有的狀態(tài)要么是互斥的,要么就是并行的,兩種解析狀態(tài)是不可能同時存在于同一個父中 并行機制并行狀態(tài)的激活順序 并行狀態(tài)的激活是有一定順序的 并行狀態(tài)的激活順序在每一個狀態(tài)的右上角標明 激活次序一般按照“從上至下,從左至右”的規(guī)則激活次序標注激活次序標注并行機制并行狀態(tài)執(zhí)行順序 在并行狀態(tài)中的所有

35、有效的狀態(tài)(包含子狀態(tài))執(zhí)行到下一個有效的狀態(tài)被執(zhí)行為止 exp19執(zhí)行一次的結(jié)果:out=1out=4out=8out=11并行機制本地事件廣播使用事件廣播,可以在某個狀態(tài)內(nèi)部觸發(fā)其他并行狀態(tài)的執(zhí)行被廣播的事件在數(shù)據(jù)字典中定義為Local 。例例exp20事件廣播事件廣播并行機制本地事件優(yōu)先級 本地事件廣播的優(yōu)先級相當于函數(shù)調(diào)用 當出現(xiàn)事件廣播時,原有的執(zhí)行順序被打斷,直到所有與事件廣播有關(guān)的動作執(zhí)行完畢 PLAY廣播事件時,先執(zhí)行與其有關(guān)的動作 見例見例exp21并行機制直接事件廣播 使用直接事件廣播可以限制廣播的事件觸發(fā)指定的狀態(tài) 可以防止事件廣播無意識的改變整個狀態(tài)圖的狀態(tài) 使用直接事

36、件廣播的命令格式:send(event_name,state_name) 例例exp22并行機制定義狀態(tài)的本地事件 可以限制事件的作用范圍在狀態(tài)的內(nèi)部 :在瀏覽器種選擇某個狀態(tài) 使用瀏覽器的Add 菜單添加事件到數(shù)據(jù)字典也可以通過瀏覽器修改事件的可見范圍 也可以修改事件到不同的狀態(tài)中 并行機制受限事件廣播 狀態(tài)之外觸發(fā)狀態(tài)的本地事件需要指定狀態(tài)名,命令格式為:state_name.data_name 使用受限的事件廣播可以將事件限制在具體的狀態(tài)內(nèi)例例exp23并行機制隱含事件和條件 有助于簡化并行狀態(tài)之間的依賴關(guān)系 減少數(shù)據(jù)字典中定義的事件數(shù)量,降低狀態(tài)圖的復雜程度 隱含事件 :entry(s

37、tate_name) 或en(state_name)exit(state_name) 或ex(state_name)change(data_name) 或chg(data_name)wakeup 或tick 隱含條件:in(state_name)并行機制使用隱含事件和條件例例exp24并行機制時間邏輯事件使用時間邏輯事件,可以根據(jù)事件發(fā)生的次數(shù)決定事件的邏輯轉(zhuǎn)換 時間邏輯操作符(at, every,after和before)分別完成相應的Boolean 運算,處理Stateflow事件的發(fā)生次數(shù) 時間邏輯可以 :監(jiān)測轉(zhuǎn)移 控制on-event狀態(tài)動作 語法:temporal_operator(

38、number,event_name) Stateflow中有四種時間邏輯:at(n,event) : 當事件第n 次觸發(fā)時 every(n,event) :當事件每觸發(fā)n 次時after(n,event) :當事件觸發(fā)n 次后before(n,event) :當事件第n 次觸發(fā)前 例例exp25并行機制時間邏輯事件(續(xù)) 下列情況下,事件計數(shù)器清零 :具有時間邏輯轉(zhuǎn)移的源狀態(tài)進入活動狀態(tài)具有on-event 狀態(tài)動作使用時間邏輯運算符的父狀態(tài)被激活時stateflow基本概念狀態(tài)機 有限元狀態(tài)機是具有有限個狀態(tài)的系統(tǒng)的理論表述。它以某些缺省的狀態(tài)為起點,根據(jù)所定義的事件和轉(zhuǎn)移進行操作。轉(zhuǎn)移表示

39、狀態(tài)機如何對事件進行響應。它有明確的輸入和輸出個數(shù),可以明確地配置所有的模式或狀態(tài)。它定義了導致系統(tǒng)從一個狀態(tài)轉(zhuǎn)換到另一個狀態(tài)的邏輯或事件 直觀理解:模型中包含的所有stateflow塊的集合stateflow基本概念狀態(tài) 在有限元狀態(tài)機里,狀態(tài)描述的是系統(tǒng)的一種模式。狀態(tài)具有布爾行為,也就是說在任何給定的時刻它或者是活動的或者是非活動的。 狀態(tài)在系統(tǒng)中被看作為記憶元件。它保持系統(tǒng)的當前模式,一旦被激活,狀態(tài)就保持活動的模式,直到系統(tǒng)改變模式,狀態(tài)才變?yōu)榉腔顒拥摹?在層次的同一級里,所有的狀態(tài)要么是互斥(OR)的要么并行(AND)的。如果狀態(tài)之間是互斥的,那么在任何給定的時刻只有一個狀態(tài)是活動的,如果狀態(tài)之間是并行的,在同一時刻所有的狀態(tài)都是活動的。在同一級里面不可能有既是互斥的又是并行的狀態(tài)存在。它們必須是或者互斥或者并行。stateflow基本概念轉(zhuǎn)移 轉(zhuǎn)移描述的是有限狀態(tài)系統(tǒng)內(nèi)的邏輯流。轉(zhuǎn)移管理了當系統(tǒng)從當前狀態(tài)改變時,這個系統(tǒng)可能發(fā)生的模式改變。當轉(zhuǎn)移發(fā)生時,源狀態(tài)變?yōu)榉腔顒拥模繕藸顟B(tài)變?yōu)榛顒拥摹?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論