




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、stateflow教程Stateflow概述:概述: Stateflow 是集成于 Simulink 中的圖形化設(shè)計(jì)與開發(fā)工具,主要用于針對(duì)控制系統(tǒng)中的復(fù)雜控制邏輯進(jìn)行建模與仿真,Stateflow 適用于針對(duì)事件響應(yīng)系統(tǒng)(Reactive System)進(jìn)行建模和仿真。與事件響應(yīng)系統(tǒng)相對(duì)應(yīng)的就是動(dòng)態(tài)變換系統(tǒng)(Dynamic Transformational System)。動(dòng)態(tài)變換系統(tǒng)通??梢岳脭?shù)學(xué)表達(dá)式、 方程等組成的輸入/輸出關(guān)系進(jìn)行描述,像這樣的系統(tǒng)利用 Simulink 進(jìn)行建模是最為方便的。而事件響應(yīng)系統(tǒng)通常利用一些自然語言或者邏輯表達(dá)式進(jìn)行描述,這樣的系統(tǒng)就需要利用 State
2、flow 來進(jìn)行建模。Stateflow 與Simulink 結(jié)合起來,可以創(chuàng)建確定性監(jiān)管控制系統(tǒng)。 利用 Stateflow 可視化的模型和直觀的仿真能力,可以清晰、 簡(jiǎn)潔地反映出復(fù)雜動(dòng)態(tài)邏輯關(guān)系。 Stateflow 的基礎(chǔ)是有限狀態(tài)機(jī)理論,它通過對(duì)狀態(tài)圖、 流程圖的創(chuàng)建, 對(duì)事件驅(qū)動(dòng)系統(tǒng)進(jìn)行建模和仿真。第一章第一章 創(chuàng)建狀態(tài)圖創(chuàng)建狀態(tài)圖Stateflow編輯器創(chuàng)建和編輯狀態(tài)圖StateflowStateflow編輯器編輯器創(chuàng)建 Simulink 模型1. 直接在 MATLAB 命令行窗體中鍵入指令 sfnew2. 打開 Simulink 庫瀏覽器, 在庫瀏覽器中找到 Stateflow
3、的模塊庫雙擊模型文件或者庫文件中的 Stateflow 圖塊打開 Stateflow 編輯器 執(zhí)行 Stateflow 編輯器 File 菜單下 的 Chart Properties 命令,打開屬性框創(chuàng)建和編輯狀態(tài)圖創(chuàng)建和編輯狀態(tài)圖插入圖形對(duì)象1 . 創(chuàng)建狀態(tài) 在圖 形對(duì)象面板的狀態(tài)圖標(biāo)上按下鼠標(biāo)左鍵并保持,將狀態(tài)Stateflow 編輯器的空白區(qū)域中Keyword : State Actions 就是狀態(tài)動(dòng)作。為數(shù)據(jù)對(duì)象進(jìn)行賦值或者進(jìn)行數(shù)據(jù)對(duì)象的運(yùn)算也可以通過狀態(tài)動(dòng)作進(jìn)行事件廣播以觸發(fā)其他系統(tǒng)的變化狀態(tài)動(dòng)作的關(guān)鍵字主要有三種:entry:當(dāng)狀態(tài)被激活時(shí)執(zhí)行相應(yīng)的動(dòng)作。exit:當(dāng)狀態(tài)退出活動(dòng)
4、狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作during:當(dāng)狀態(tài)保持其活動(dòng)狀態(tài)時(shí)執(zhí)行相應(yīng)的 動(dòng)作 在狀態(tài)上單擊鼠標(biāo)右鍵,在快捷菜單中選擇 Properties 命令, 可以通過狀態(tài)的屬性對(duì)話框進(jìn)一步定義狀態(tài)2 . 創(chuàng)建創(chuàng)建連接節(jié)點(diǎn)連接節(jié)點(diǎn) 連接節(jié)點(diǎn)作為轉(zhuǎn)移通路的判決點(diǎn)或匯合點(diǎn)連接節(jié)點(diǎn)作為轉(zhuǎn)移通路的判決點(diǎn)或匯合點(diǎn),也是在狀態(tài)圖中常用的圖形元素之一,也是在狀態(tài)圖中常用的圖形元素之一,特別是在流程圖中,特別是在流程圖中, 由于流程圖不能包含任何狀態(tài),由于流程圖不能包含任何狀態(tài), 因此只有依靠連接節(jié)點(diǎn)完成通路的連因此只有依靠連接節(jié)點(diǎn)完成通路的連接和判斷分支接和判斷分支,連接節(jié)點(diǎn)不是,連接節(jié)點(diǎn)不是記憶元件記憶元件。在圖形對(duì)象面
5、板的連接節(jié)點(diǎn)圖標(biāo) 上按下鼠標(biāo)左鍵并保持, 將狀態(tài)拖放到Stateflow 編輯器的空白區(qū)域中。節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,通過彈出的快捷菜單執(zhí)行 Properties 命令,進(jìn)入屬性框3. 創(chuàng)建轉(zhuǎn)移創(chuàng)建轉(zhuǎn)移 轉(zhuǎn)移是 Stateflow 框圖中最常見的圖形元素之一,無論是包含狀態(tài)的狀態(tài)圖中還是沒有狀態(tài)的流程圖中,幾乎都存在轉(zhuǎn)移。轉(zhuǎn)移描述的是有限狀態(tài)系統(tǒng)內(nèi)的邏輯流。轉(zhuǎn)移管理了當(dāng)系統(tǒng)從當(dāng)前狀態(tài)改變時(shí),這個(gè)系統(tǒng)可能發(fā)生的模式改變。當(dāng)轉(zhuǎn)移發(fā)生時(shí),源狀態(tài)變?yōu)榉腔顒?dòng)的狀態(tài), 目標(biāo)狀態(tài)變?yōu)榛顒?dòng)的狀態(tài)。轉(zhuǎn)移是帶有箭頭的線,這就使整個(gè)狀態(tài)圖或者流程圖成為了“有向圖”,狀態(tài)或者流程之間的轉(zhuǎn)換, 將直接受到轉(zhuǎn)移方向的約束。創(chuàng)
6、建轉(zhuǎn)移的具體步驟是:(1) 當(dāng)鼠標(biāo)光標(biāo)接近狀態(tài)的邊緣時(shí), 鼠標(biāo)光標(biāo)將變成十字形狀。(2) 按下鼠標(biāo)左鍵并保持, 將引出的轉(zhuǎn)移線拖放到目標(biāo)狀態(tài)的邊緣即可, 給轉(zhuǎn)移添加標(biāo)簽的方法:(1) 左鍵單擊選中相應(yīng)的轉(zhuǎn)移,此時(shí)轉(zhuǎn)移將顯示問號(hào);(2) 左鍵單擊出現(xiàn)的問號(hào), 則進(jìn)入文本編輯狀態(tài);(3) 在光標(biāo)處插入文本;(4) 單擊 Stateflow 編輯器中任意一處, 結(jié)束標(biāo)簽的插入。組成轉(zhuǎn)移標(biāo)簽的四個(gè)部分不一定完整地出現(xiàn)組成轉(zhuǎn)移標(biāo)簽的四個(gè)部分不一定完整地出現(xiàn),但是不論出現(xiàn)哪幾個(gè)部分但是不論出現(xiàn)哪幾個(gè)部分,標(biāo)簽的內(nèi)容必須標(biāo)簽的內(nèi)容必須按照上面指定的順序書寫。按照上面指定的順序書寫。條件動(dòng)作與轉(zhuǎn)移動(dòng)作兩者之間
7、的區(qū)別條件動(dòng)作與轉(zhuǎn)移動(dòng)作兩者之間的區(qū)別:條件動(dòng)作在條條件動(dòng)作在條件滿足的情況下就能夠執(zhí)行,而轉(zhuǎn)移動(dòng)作需要在整個(gè)件滿足的情況下就能夠執(zhí)行,而轉(zhuǎn)移動(dòng)作需要在整個(gè)轉(zhuǎn)移通路都有效的情況下,轉(zhuǎn)移通路都有效的情況下, 在執(zhí)行轉(zhuǎn)移的時(shí)候才執(zhí)行。在執(zhí)行轉(zhuǎn)移的時(shí)候才執(zhí)行。Stateflow 中都可以使用三類語法元素作為動(dòng)作:(1) 數(shù)學(xué)運(yùn)算表達(dá)式或者邏輯運(yùn)算表達(dá)式。(2) 調(diào)用函數(shù)。(3) 事件廣播。4. 默認(rèn)轉(zhuǎn)移:默認(rèn)轉(zhuǎn)移是一類特殊的轉(zhuǎn)移, 可以把它看做是狀態(tài)轉(zhuǎn)移的特例。 默認(rèn)轉(zhuǎn)移確定當(dāng)有限狀態(tài)機(jī)或者父層次狀態(tài)處于活動(dòng)狀態(tài)的時(shí)候,在其所有的子狀態(tài)中第一個(gè)被激活的狀態(tài)。根據(jù)有限狀態(tài)機(jī)的要求, 當(dāng)有限狀態(tài)系統(tǒng)被激
8、活時(shí), 必有相應(yīng)的確定的某個(gè)狀態(tài)被激活。而默認(rèn)轉(zhuǎn)移就定義了當(dāng)狀態(tài)機(jī)被激活或者層次模型中父層次狀態(tài)被激活時(shí), 具體哪個(gè)子狀態(tài)被激活。創(chuàng)建默認(rèn)轉(zhuǎn)移的方法如下:鼠標(biāo)單擊圖形對(duì)象面板中的默認(rèn)轉(zhuǎn)移圖標(biāo), 然后將默認(rèn)的轉(zhuǎn)移(注意鼠標(biāo)光標(biāo)的 變化)放置在狀態(tài)或者連接節(jié)點(diǎn)的邊緣, 就可以完成默認(rèn)轉(zhuǎn)移的創(chuàng)建了說明:Stateflow 的狀態(tài)圖中,同一層次上的狀態(tài)只有兩種工作模式,一種叫做異或(OR)模式,另 一種叫做并行(AND)模式。在異或模式下,同 一層次上的子狀態(tài)必須有一個(gè)子狀態(tài)具有默認(rèn)的轉(zhuǎn)移,同時(shí)該子狀態(tài)被稱為默認(rèn)狀態(tài)。 由于 Stateflow 是一種事件驅(qū)動(dòng)模型建模環(huán)境,不允許出現(xiàn)模型運(yùn)行的二義性,
9、因此,正確的使用默認(rèn)轉(zhuǎn)移就非常重要, 因?yàn)槟J(rèn)轉(zhuǎn)移就是用來改變狀態(tài)機(jī)或者父層次狀態(tài)被激活時(shí), 相應(yīng)的子狀態(tài)二義性的圖形元素在默認(rèn)轉(zhuǎn)移上添加標(biāo)簽的方法和在一般的轉(zhuǎn)移上添加標(biāo)簽的方法是一樣的,可以在默認(rèn)轉(zhuǎn)移的標(biāo)簽上加上事件和條件來進(jìn)行限制,也可以將動(dòng)作和默認(rèn)轉(zhuǎn)移相關(guān)聯(lián)。不過, 一個(gè)有限狀態(tài)系統(tǒng)必須確保能夠正確地被激活, 這一點(diǎn)在使用默認(rèn)轉(zhuǎn)移時(shí)非常重要, 因?yàn)闋顟B(tài)機(jī)的默認(rèn)轉(zhuǎn)移只有一次執(zhí)行的機(jī)會(huì)。如果沒有明確的子狀態(tài)能夠被激活,系統(tǒng)會(huì)報(bào)告二義性錯(cuò)誤5. 添加注釋添加注釋:如果需要在 Stateflow 的框圖中使用 LaTex 字符集, 則需要按照下列步驟完成:(1) 在已經(jīng)添加的文本上單擊鼠標(biāo)右鍵,
10、 這時(shí)將顯示快捷菜單;(2) 選擇快捷菜單中 Text Format 子菜單中的 LaTex Instructions 復(fù)選項(xiàng);(3) 用鼠標(biāo)單擊已經(jīng)添加的文本注釋, 重新進(jìn)入文本編輯模式;(4) 添加 LaTex 字符, 例如鍵入 y =itAealphaxsin(betaitt);(5) 在文本編輯區(qū)外單擊鼠標(biāo)完成注釋的添加,此時(shí)的注釋內(nèi) 容將變?yōu)閥 = Aeax sin( bt) ,如圖所示。編輯圖形對(duì)象外觀: 改變尺寸和位置單擊右鍵單擊右鍵在注釋上單擊鼠標(biāo)右鍵而出現(xiàn)的快捷菜單在注釋上單擊鼠標(biāo)右鍵而出現(xiàn)的快捷菜單。在在菜單中菜單中,共計(jì)有三個(gè)子菜單可以用來修改注釋共計(jì)有三個(gè)子菜單可以用來
11、修改注釋文本的外觀,文本的外觀, 分別為:分別為:Font Size: 設(shè)置注釋文本的尺寸。Text Format:設(shè)置注釋文本的基本格式,包 括粗體、 斜體和 LaTex 字符支持。Text Alignment:設(shè)置注釋文本的對(duì)齊方式, 包括左對(duì)齊、 居中和右對(duì)齊。第二章第二章 狀態(tài)圖的仿真狀態(tài)圖的仿真狀態(tài)圖的基本概念事件數(shù)據(jù)對(duì)象狀態(tài)圖的更新模式stateflow模型查看器狀態(tài)圖的基本概念狀態(tài)圖管理和維護(hù)著當(dāng)前模型中活動(dòng)的狀態(tài)。 一旦包含了狀態(tài)轉(zhuǎn)移的狀態(tài)圖處于活動(dòng)的狀態(tài),則狀態(tài)圖將一直處于這種活動(dòng)狀態(tài),直到整個(gè)模型仿真計(jì)算結(jié)束。 并且,只要狀態(tài)圖處于活動(dòng)狀態(tài), 則必定至少有一個(gè)狀態(tài)處于激活狀
12、態(tài)。狀態(tài)圖從非活動(dòng)狀態(tài)到活動(dòng)狀態(tài)以及狀態(tài)之間的切換, 都要由事件觸發(fā), 即在事件的驅(qū)動(dòng)之下,狀態(tài)圖才能仿真運(yùn)行。所謂 Stateflow 的事件觸發(fā), 就是事件驅(qū)動(dòng)的發(fā)生。 觸發(fā)可以由系統(tǒng)隱含發(fā)生, 也可以按照要求顯性地定義。在 Simulink 中, 顯性定義的事件就是某些過零信號(hào)的發(fā)生, 也就是說, 只有過零信號(hào)才能夠觸發(fā)狀態(tài)轉(zhuǎn)移的發(fā)生或者狀態(tài)機(jī)的激活。由這種觸發(fā)而引起的相應(yīng)的動(dòng)作執(zhí)行, 被稱為事件驅(qū)動(dòng)。事件:添加事件:執(zhí)行 Stateflow 圖形編輯器 Add 菜單下 Event 子菜單中的任何一個(gè)命令,例如執(zhí)行 Local 命令,則 Stateflow 將彈出如圖所示的對(duì)話框。Sco
13、pe 屬性:該屬性定義事件的作用類型。在 Add菜單下的 Event 子菜單中具有三個(gè)菜單命令,分別為 Local、Input from Simulink 和 Output to Simulink, 通過這三個(gè)菜單命令定義事件,得到的 Scope 屬性不一致。具有Local屬性的事件是在狀態(tài)圖內(nèi)部發(fā)揮作用。具有Input from Simulink 屬性的事件是從 Simulink框圖輸入到 Stateflow 中的,也就是 Stateflow 框圖的外部觸發(fā)事件。具有 Output to Simulink 屬性的事件是從Stateflow 框圖輸出到 Simulink 中的,即利用 Stat
14、eflow 定義的事件驅(qū)動(dòng)或者觸發(fā)其他 Stateflow 框圖或者子系統(tǒng)動(dòng)作。如果用戶設(shè)置事件的 Scope 屬性為 Input from Simulink 或者 Output to Simulink,則添加事件的對(duì)話框會(huì)發(fā)生變化,Trigger 屬性:Trigger 屬性總共有四個(gè)可能值, 分別為 Either、 Falling、 Rising 和 FunctionCall。在 Simulink 條件執(zhí)行子系統(tǒng)中, 特別是在使能或者觸發(fā)子系統(tǒng)中, 觸發(fā)子系統(tǒng)工作的觸發(fā)源就具有不同屬性。 觸發(fā)子系統(tǒng)的觸發(fā)源與這里的 Trigger 屬性的意義完全一樣, 分別為雙邊沿觸發(fā)、 下降沿觸發(fā)、 上升
15、沿觸發(fā)。 Function Call(函數(shù)調(diào)用)是一類比較特殊的觸發(fā)屬性創(chuàng)建事件實(shí)例: 運(yùn)行過程中, 單擊 Manual Switch 模塊向 Stateflow 框圖發(fā)出事件使用多個(gè)輸入事件:同一個(gè) Stateflow 的圖塊可以使用多個(gè)輸入事件。 但是, 不論用戶為 Stateflow 的圖塊定義了多少個(gè)輸入事件, 每個(gè) Stateflow 的圖塊都只能具有一個(gè)事件輸入端口 。因此,在向Stateflow 的圖塊增加不止一個(gè)輸入事件時(shí), 需要將不同的事件通過 Mux 塊組合成為輸入事件向量, 然后將組合后的輸入事件向量連接到 Stateflow 圖塊上。數(shù) 據(jù) 對(duì) 象:Stateflow
16、使用數(shù)據(jù)對(duì)象來管理維護(hù) Stateflow 框圖內(nèi)部的數(shù)據(jù)信息。在 Stateflow 中, 數(shù)據(jù)對(duì)象主要用于動(dòng)作或者條件中。用戶既可以限制數(shù)據(jù)對(duì)象在相應(yīng)的圖形對(duì)象內(nèi)部使用,也可以將數(shù)據(jù)對(duì)象作為 Stateflow 與 Simulink 模型之間的接口來使用。執(zhí)行 Stateflow 圖形編輯器的 Add 菜單中 Data 子菜單下的任何一個(gè)命令, 例如 Local,則 Stateflow 會(huì)打開如圖所示的對(duì)話框。Scope 屬性:Local、 Input、Output 與事件相同Constant:所定義的數(shù)據(jù)對(duì)象在 Stateflow 模型中為常量即保持靜態(tài),數(shù)據(jù)對(duì)象在Simulink/St
17、ateflow 模型運(yùn)行過程中其數(shù)值一般不發(fā)生變化,并且數(shù)據(jù)在模型中為只讀,不可寫的狀態(tài)。 Parameter:所定義的數(shù)據(jù)對(duì)象將通過 Stateflow 框圖的上層 Simulink 子系統(tǒng)封裝之后的參數(shù)獲取初值。也就是說當(dāng) Stateflow 的框圖位于某個(gè)封裝子系統(tǒng)內(nèi)部時(shí),Stateflow的 Parameter 類型數(shù)據(jù)對(duì)象可以直接獲取封裝子系統(tǒng)設(shè)定的參數(shù)。具有 Parameter 屬性的數(shù)據(jù)對(duì)象與具有Constant 屬性的數(shù)據(jù)對(duì)象類似,在整個(gè)仿真過程中,Stateflow 不能修改其數(shù)值。Data Store Memory: 所定義的數(shù)據(jù)對(duì)象與 Simulink 數(shù)據(jù)空間共享, 也
18、就是說, 該數(shù)據(jù)對(duì)象與 Simulink 工作空間中的某個(gè)數(shù)據(jù)對(duì)象相互綁定。 此時(shí)該數(shù)據(jù)對(duì)象的名稱必須與Simulink 工作空間中數(shù)據(jù)對(duì)象的名稱一致。 數(shù)據(jù)類型模式 (Data Type Mode)Inherited 類型的數(shù)據(jù)對(duì)象一般為 Stateflow 的輸入或者輸出數(shù)據(jù)對(duì)象, 它能夠通過與Simulink 模塊相連接的信號(hào)線來判斷具體的數(shù)據(jù)類型對(duì)象。Built-in 類型是 Stateflow 數(shù)據(jù)對(duì)象默認(rèn)的數(shù)據(jù)類型, 通常情況下, 都使用 Simulink 內(nèi)建的數(shù)據(jù)類型作為數(shù)據(jù)對(duì)象的數(shù)據(jù)類型。Expression 類型是指可以通過一個(gè)表達(dá)式來表示數(shù)據(jù)類型Fixed point 類
19、型用于模型的定點(diǎn)數(shù)據(jù)設(shè)置, 若選擇了該類型,則可以完成 Stateflow 模型數(shù)據(jù)的量化處理。狀態(tài)圖的更新模式不是所有的有限狀態(tài)系統(tǒng)都具有外部事件的定義, 有些模型就沒有針對(duì) Stateflow 模型定義任何輸入事件, 可是 Stateflow 的模型依然能夠正常地運(yùn)行。 那么對(duì)于這種沒有定義任何輸入事件的系統(tǒng), 它是如何運(yùn)行的呢? 這就是狀態(tài)圖的更新模式所發(fā)揮的作用。Stateflow 的框圖有三種更新模式, 分別為 Inherited、 Discrete 和 Continuous系統(tǒng)默認(rèn)使用 Inherited 更新模式,在這種更新模式下可能存在以下三種情況:(1) 有輸入事件定義。如果
20、 Stateflow 框圖定義了輸入事件,并且 Simulink 提供了相應(yīng)輸入事件, 則整個(gè)框圖就按照所定義的事件觸發(fā)來更新。 也就是說,在相應(yīng)類型的事件發(fā)生時(shí), Stateflow 框圖進(jìn)行相應(yīng)的工作, 例如狀態(tài)的轉(zhuǎn)移、 動(dòng)作的執(zhí)行等。(2) 未定義輸入事件但定義了輸入數(shù)據(jù)。如果 Stateflow 框圖沒有定義事件而定義了輸入數(shù)據(jù),則 Stateflow 框圖按照其連接的 Simulink 輸入信號(hào)中更新頻率最高的信號(hào)更新周期來更新框圖, 這相當(dāng)于輸入數(shù)據(jù)的采樣更新觸發(fā)了 Stateflow 框圖的執(zhí)行。(3) 既未定義輸入事件又未定義輸入數(shù)據(jù)。如果 Stateflow 框圖既沒有定義輸
21、入事件,又沒有定義輸入數(shù)據(jù),則 Stateflow 框圖繼承其父層次模型的更新周期。如果 Stateflow 框圖位于系統(tǒng)模型的頂層,則 Stateflow 框圖繼承模型的仿真周期作為自己的更新周期。Discrete 更新模式, 是將 Stateflow 框圖看做有固定周期的離散塊,在設(shè)置該更新模式時(shí), Stateflow 框圖屬性對(duì)話框中的 Sample Time 屬性需要設(shè)置具體的更新周期, 單位為秒。Continuous更新模式,則 Stateflow 框圖好比 Simulink 模型中的一個(gè)連續(xù)系統(tǒng)模塊, 此時(shí) Stateflow 的框圖將按照系統(tǒng)仿真步長(zhǎng)完成更新。注意:如果為框圖定義
22、了輸入事件,則框圖的更新模式就只能設(shè)置為 Inherited, 此時(shí) Stateflow框圖將嚴(yán)格按照事件的發(fā)生來驅(qū)動(dòng)有限狀態(tài)系統(tǒng)的運(yùn)行。 當(dāng)使用外部事件進(jìn)行觸發(fā)更新狀態(tài)圖時(shí),默認(rèn)地, 第一個(gè)事件的發(fā)生用來喚醒狀態(tài)圖(激活狀態(tài)圖 ),而不是進(jìn)行狀態(tài)轉(zhuǎn)移的執(zhí)行。如果需要改變此模式, 則需要設(shè)置 Stateflow框圖屬性中的 Execute (enter) Chart At Initialization 選項(xiàng)。選擇了該選項(xiàng), 則意味著當(dāng) 前的 Stateflow 框圖將在模型初始化階段就被激活, 這樣,在后續(xù)的事件觸發(fā)過程中, 就直接進(jìn)行狀態(tài)的 轉(zhuǎn)換了第三章第三章 流程圖流程圖轉(zhuǎn)移沖突流程圖的創(chuàng)
23、建圖形函數(shù)stateflow模型調(diào)試器概述:在 Stateflow 框圖中, 流程圖是比較特殊的一種。流程圖中不包含任何狀態(tài),它僅僅由連接節(jié)點(diǎn)和轉(zhuǎn)移組成。由于流程圖沒有任何狀態(tài),因此流程圖就不包含任何記憶元件(Stateflow 中只有狀態(tài)是記憶元件),所以,在一次更新之中,流程圖從檢測(cè)其默認(rèn)轉(zhuǎn)移開始, 到檢測(cè)完每一條有效的通路且到達(dá)不具備有效出口的轉(zhuǎn)移為止,在連續(xù)的兩次觸發(fā)之間 ,一直處于非活動(dòng)的狀態(tài)。轉(zhuǎn)移沖突:所謂轉(zhuǎn)移沖突, 就是在 Stateflow 框圖運(yùn)行的過程中可能在某一時(shí)刻同時(shí)存在幾個(gè)有效的轉(zhuǎn)移,那么此時(shí) Stateflow 將根據(jù)一些原則來處理這些沖突, 這就是轉(zhuǎn)移沖突的處理原
24、則。假設(shè)當(dāng)前事件假設(shè)當(dāng)前事件 E 發(fā)生并且條件發(fā)生并且條件 C 也滿足,也滿足,則四個(gè)轉(zhuǎn)移通路都是有效的,則四個(gè)轉(zhuǎn)移通路都是有效的, 即形成了即形成了轉(zhuǎn)移沖突。那么轉(zhuǎn)移沖突。那么 Stateflow 是如何處理這是如何處理這種情況呢?種情況呢? 原則:當(dāng)事件發(fā)生需要進(jìn)行轉(zhuǎn)移檢測(cè)時(shí), Stateflow 總是首先檢測(cè)具有最多限制的轉(zhuǎn)移,如果能夠滿足則執(zhí)行這個(gè)轉(zhuǎn)移,其他的有效轉(zhuǎn)移就統(tǒng)統(tǒng)忽略。(1)如果此時(shí)發(fā)生的事件是 E 且條件 C 也滿足, 即該轉(zhuǎn)移有效,則執(zhí)行這個(gè)轉(zhuǎn)移,其余的轉(zhuǎn)移就不再進(jìn)行檢測(cè)和執(zhí)行了(2)條件不滿足則檢測(cè)只有事件限制的轉(zhuǎn)移;條件 C 不滿足,此時(shí)發(fā)生的事件是 E, 即該轉(zhuǎn)移有
25、效,則執(zhí)行這個(gè)轉(zhuǎn)移,其余的轉(zhuǎn)移就不再進(jìn)行檢測(cè)和執(zhí)行了。 ( 3 )此時(shí)發(fā)生的事件不滿足,則接著檢測(cè)具有條件的轉(zhuǎn)移;如果此時(shí)條件 C 能夠滿足, 即該轉(zhuǎn)移有效,則執(zhí)行這個(gè)轉(zhuǎn)移,其余的轉(zhuǎn)移就不再進(jìn)行檢測(cè)和執(zhí)行了。(4)如果條件和事件都不匹配, 最后檢測(cè)的轉(zhuǎn)移就是那條無條件的轉(zhuǎn)移, 由于無條件的轉(zhuǎn)移是肯定可以執(zhí)行的總結(jié):轉(zhuǎn)移的檢測(cè)次序就是由上至下分別檢測(cè), 當(dāng)系統(tǒng)發(fā)現(xiàn)一條有效的轉(zhuǎn)移時(shí),就立即執(zhí)行,其他的轉(zhuǎn)移即使有效, 也都被忽略了。同限制級(jí)別的若干條轉(zhuǎn)移同時(shí)有效狀態(tài) Standby 向 High 狀態(tài)、 Medium 狀態(tài)和 Low 狀態(tài)的轉(zhuǎn)移都對(duì)使用條件進(jìn)行了限制。根據(jù)前面的介紹,這三個(gè)轉(zhuǎn)移由于都
26、僅僅使用條件進(jìn)行了限制, 因此它們具有相同的轉(zhuǎn)移檢測(cè)優(yōu)先級(jí)別。所以這個(gè)框圖在進(jìn)行仿真的時(shí)候,就會(huì)報(bào)告轉(zhuǎn)移沖突錯(cuò)誤如果轉(zhuǎn)移從狀態(tài)出發(fā),則從狀態(tài)的左上角開始,按順時(shí)針的方向決定轉(zhuǎn)移的優(yōu)先權(quán);如果轉(zhuǎn)移從連接節(jié)點(diǎn)出發(fā), 則從連接節(jié)點(diǎn)的 12 點(diǎn)方向開始, 按順時(shí)針的方向決定轉(zhuǎn)移的優(yōu)先權(quán)。幾何原則幾何原則:用戶自定義檢測(cè)次序:兩個(gè)步驟:(1)在 Stateflow 圖形編輯器中單擊右鍵,在彈出的菜單中選擇 Execution Order 子菜單下的 Enable User specified execution order for this chart命令,(2)用鼠標(biāo)右鍵單擊需要改變檢測(cè)次序的轉(zhuǎn)移,
27、例如要修改上圖所示模型的第一個(gè)轉(zhuǎn)移檢測(cè)次 序,則用右鍵單擊該轉(zhuǎn)移,在出現(xiàn)的快捷菜單 的 Execution Order 子菜單下選擇檢測(cè)次序。 由于這里從狀態(tài) A 到狀態(tài) B具有四個(gè)轉(zhuǎn)移, 因 此轉(zhuǎn)移執(zhí)行次序的選項(xiàng)為 14。 默認(rèn)地, 該 轉(zhuǎn)移檢測(cè)次序?yàn)?,可以將其修改為其他數(shù)值, 修改某一條轉(zhuǎn)移的檢測(cè)次序后,其他的轉(zhuǎn)移可 以根據(jù)用戶指定的次序以及 Stateflow 默認(rèn)的檢 測(cè)次序原則進(jìn)行重新排序。常用邏輯結(jié)構(gòu)模型:if(條件)動(dòng)作if(條件條件)動(dòng)作動(dòng)作 A else 動(dòng)作動(dòng)作 Bif(條件條件 1)動(dòng)作動(dòng)作 A else if(條件條件 2)動(dòng)作動(dòng)作 B else 動(dòng)作動(dòng)作 Cif(條
28、件 1)動(dòng)作 A if(條件 2) 動(dòng)作 B switch-case for 循環(huán) for(index = 0; index nloops; index +) Action;while 循環(huán)循環(huán)while(Condition)Action;do-while 循環(huán)循環(huán)doAction; while(Condition)流程圖回溯現(xiàn)象if(c1) act1; if(c2) act2; else if(c3) act3; else act4;分析:分析:假設(shè)假設(shè),條件條件 c1 為真,為真, 條件條件 c2 和條件和條件 c3 為假為假注意:在流程圖中, 僅存在轉(zhuǎn)移的檢測(cè), 而不存在轉(zhuǎn)移真正的執(zhí)行。
29、所以,在流程圖中, 所有的動(dòng)作都需要在條件動(dòng)作中完成, 即使定義了轉(zhuǎn)移動(dòng)作,在執(zhí)行流程圖的時(shí)候,轉(zhuǎn)移動(dòng)作也不會(huì)發(fā)揮任何作用。在流程圖中, 存在且僅存在一個(gè)終止節(jié)點(diǎn), 流程圖的更新執(zhí)行最終終止在流程圖的終止節(jié)點(diǎn)上。所有轉(zhuǎn)移通路都必須最終匯合到終止節(jié)點(diǎn)。為每一個(gè)分支節(jié)點(diǎn)提供無條件的轉(zhuǎn)移通路, 用于控制一些異常情況或者未預(yù)料到的情況。流程圖不能出現(xiàn)回溯現(xiàn)象。如果流程圖位于 Stateflow 的 Chart 層次, 則在連續(xù)兩次更新之間, 整個(gè) Stateflow 框圖處于非活動(dòng)的狀態(tài)。狀態(tài)中的流程圖該 Stateflow 框圖具有兩個(gè)狀態(tài): 狀態(tài) Normal 和狀態(tài) Inverse。在這兩個(gè)狀態(tài)
30、中都包含了流程圖。 它們包含的流程圖十分簡(jiǎn)單, 就是根據(jù)輸入數(shù)據(jù)進(jìn)行相應(yīng)的邏輯判斷, 然后決定具體的輸出。從框圖上看,這兩個(gè)流程圖的體系結(jié)構(gòu)完全一致, 有所區(qū)別的就是參數(shù),即處理的數(shù)據(jù)不同, 這里可以通過圖形函數(shù)的形式來完成模型的創(chuàng)建。創(chuàng)建圖形函數(shù)在 Stateflow 圖形編輯器的圖形對(duì)象工具欄上單擊圖形函數(shù)按鈕,在 Stateflow 圖形編輯器中任意的空白位置單擊鼠標(biāo)左鍵, 即完成了向現(xiàn)有模型增加圖形函數(shù)的工作。stateflowstateflow調(diào)試器狀態(tài)面板(StatusPane)控制面板(Control Pane)選項(xiàng)面板(Control Pane)顯示面板(Display Pan
31、e)狀態(tài)斷點(diǎn):State During:在執(zhí)行狀態(tài)的 During 動(dòng)作之前進(jìn)入調(diào)試模式State Entry:在執(zhí)行狀態(tài)的 Entry 動(dòng)作之前進(jìn)入調(diào)試模式。State Exit:在執(zhí)行狀態(tài)的 Exit 動(dòng)作之前進(jìn)入調(diào)試模式轉(zhuǎn)移斷點(diǎn):When Tested: 在轉(zhuǎn)移被檢測(cè)之前進(jìn)入調(diào)試模式。When Valid: 轉(zhuǎn)移經(jīng)過檢測(cè)是有效的,在執(zhí)行前進(jìn)入調(diào)試模式。事件的斷點(diǎn):Start of Broadcast: 在事件被廣播之前進(jìn)入調(diào)試模式End of Broadcast: 在事件廣播結(jié)束后進(jìn)入調(diào)試模式圖形函數(shù)的斷點(diǎn):Function Call: 在函數(shù)被調(diào)用之前進(jìn)入調(diào)試模式第四章第四章 有限狀態(tài)
32、系統(tǒng)有限狀態(tài)系統(tǒng)層次化建模層次化建模狀態(tài)動(dòng)作層次化建模歷史節(jié)點(diǎn)內(nèi)部轉(zhuǎn)移子狀態(tài)圖stateflow的查詢工具狀態(tài)動(dòng)作:entry: 當(dāng)事件發(fā)生,狀態(tài)被激活時(shí)執(zhí)行相應(yīng)的動(dòng)作exit: 當(dāng)事件發(fā)生,狀態(tài)退出活動(dòng)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作during: 當(dāng)事件發(fā)生, 狀態(tài)保持其活動(dòng)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作on event 動(dòng)作是指當(dāng)狀態(tài)處于活動(dòng)狀態(tài), 事件 event 發(fā)生,而狀態(tài)并不退出活動(dòng)狀態(tài)時(shí)所執(zhí)行的動(dòng)作。bind 動(dòng)作是指將事件或者數(shù)據(jù)對(duì)象與狀態(tài)綁定的動(dòng)作。被綁定的事件只能由狀態(tài)以及狀態(tài)的子狀態(tài)進(jìn)行廣播,而被綁定的數(shù)據(jù)對(duì)象只能由狀態(tài)以及狀態(tài)的子狀態(tài)中相應(yīng)的動(dòng)作進(jìn)行修改。 綁定的數(shù)據(jù)對(duì)象可以在其他狀態(tài)中被
33、訪問, 但是不能修改; 綁定的事件可以被所有狀態(tài)監(jiān)聽, 但是不能由其他狀態(tài)廣播。注意:在進(jìn)行狀態(tài)動(dòng)作的定義時(shí), 可以使用狀態(tài)動(dòng)作關(guān)鍵字的簡(jiǎn)寫方式, 也就是說,在定義狀態(tài)動(dòng)作時(shí)只要寫關(guān)鍵字的前兩個(gè)字符即可。 例如定義狀態(tài)的 entry 動(dòng)作, 只要在狀態(tài)中定義:en:data+;即可。 on event 動(dòng)作是 during 動(dòng)作的特例, 兩者的區(qū)別就是: on event 動(dòng)作需要有特定事件觸發(fā)才可能執(zhí)行; 而 during 動(dòng)作在有事件發(fā)生, 但又沒有使?fàn)顟B(tài)退出活動(dòng)狀態(tài)時(shí)就可以執(zhí)行。討論車載播放器 on event 事件相當(dāng)于 during 事件的子集, 即當(dāng) STEP_UP 事件發(fā)生時(shí),首
34、先執(zhí)行 during 動(dòng)作, 然后再來執(zhí)行 on STEP_UP 動(dòng)作。這樣,在發(fā)生 STEP_UP 事件時(shí), track數(shù)據(jù)對(duì)象每次累加了兩次。數(shù)據(jù)對(duì)象 data 與狀態(tài) A 進(jìn)行了綁定, 這樣在其他的地方就只能讀取 data,而不能修改數(shù)據(jù)對(duì)象 data。 在動(dòng)作中使用事件輸出事件廣播所謂事件廣播,其實(shí)就是在動(dòng)作中調(diào)用事件。 事件廣播主要用來在 Stateflow 中影響其他狀態(tài)圖或者條件執(zhí)行子系統(tǒng)的運(yùn)行。Simulink 的條件執(zhí)行子系統(tǒng)有使能子系統(tǒng)、 觸發(fā)子系統(tǒng)和函數(shù)調(diào)用子系統(tǒng), 利用事件廣播以及數(shù)據(jù)的輸出就可以在 Stateflow 中調(diào)用這些不同類型的子系統(tǒng), 完成復(fù)雜的工作。類型
35、為 Input from Simulink 的事件是不能夠通過狀態(tài)動(dòng)作、 轉(zhuǎn)移動(dòng)作或者條件動(dòng)作進(jìn)行廣播的。此外, 類型為 Local 的事件也可以進(jìn)行廣播, 這就是在第 6 章將要介紹的本地事件廣播。輸出狀態(tài)的活動(dòng)情況Stateflow 還可以將 Stateflow 狀態(tài)的活動(dòng)情況輸出到 Simulink。 利用 Stateflow 框圖的活動(dòng)情況可以觸發(fā)、 使能其他子系統(tǒng)或者 Stateflow 框圖運(yùn)行, 從而實(shí)現(xiàn)系統(tǒng)的同步協(xié)調(diào)工作。函數(shù)調(diào)用子系統(tǒng)在 Stateflow 的事件類型中,存在類型為函數(shù)調(diào)用(Function Call)的事件, 此類事件能夠觸發(fā)函 數(shù)調(diào)用子系統(tǒng)。函數(shù)調(diào)用子系統(tǒng)
36、是一類比較特殊的子系統(tǒng), 該類子系統(tǒng)在整個(gè)Simulink 模型內(nèi)部運(yùn)行起來就好比函數(shù)一樣, 需要通過其他的系統(tǒng)來調(diào)用才能夠執(zhí)行。當(dāng) Stateflow 框圖中的轉(zhuǎn)移動(dòng)作發(fā)出函數(shù)調(diào)用事件之后,系統(tǒng)首先執(zhí)行 Simulink 模型中的函數(shù)調(diào)用子系統(tǒng);當(dāng)函數(shù)調(diào)用子系統(tǒng)全部運(yùn)行完畢,并將新的計(jì)算結(jié)果提供給 Stateflow 的輸入數(shù)據(jù)對(duì)象后,Stateflow 才繼續(xù)激活相應(yīng)的目標(biāo)狀態(tài)。因此,在很多 Simulink 和 Stateflow 混合的系統(tǒng)模型中,都充分利用了這一“函數(shù)調(diào)用” 特性,利用 Stateflow 模型來控制 Simulink 子系統(tǒng)的運(yùn)行,合理完成數(shù)據(jù)的交互任務(wù)。綁定事件如
37、果將事件與狀態(tài)綁定, 則只有狀態(tài)內(nèi)的動(dòng)作(狀態(tài)動(dòng)作)或者子狀態(tài)的動(dòng)作(子狀態(tài)之間的轉(zhuǎn)移動(dòng)作和條件動(dòng)作)能夠調(diào)用該事件,實(shí)現(xiàn)事件的廣播。事件廣播可以是輸出事件的廣播, 也可以是本地事件的廣播。層次化建模層次化模型的構(gòu)成層次化狀態(tài)圖的轉(zhuǎn)移轉(zhuǎn)移原則:(1)子狀態(tài)的各種對(duì)象僅僅在父狀態(tài)活動(dòng)時(shí)才有可能執(zhí)行或者有效(2)當(dāng)存在直接從父狀態(tài)發(fā)出的轉(zhuǎn)移時(shí), 可以不用考慮具體哪一個(gè)子狀態(tài)處于活動(dòng)狀態(tài)(3)超轉(zhuǎn)移優(yōu)先于子狀態(tài)之間的轉(zhuǎn)移而被檢測(cè)。case1:假設(shè), 當(dāng)前 Super1 狀態(tài)處于活動(dòng)狀態(tài)同時(shí)其子狀態(tài) Sub2 也處于活動(dòng)狀態(tài),當(dāng)事件 E發(fā)生時(shí)case2:如果 Super2 狀態(tài)處于活動(dòng)狀態(tài), 同時(shí)其子
38、狀態(tài) Sub4 處于活動(dòng)狀態(tài),當(dāng)事件 E發(fā)生時(shí)歷史節(jié)點(diǎn):車載音響系統(tǒng)為例,每次打開車載音響時(shí),音響總是恢復(fù)前一次關(guān)閉音響時(shí)的狀態(tài),如果前一次關(guān)閉音響時(shí)正在收聽激光唱機(jī),則再次打開音響時(shí),音響總是會(huì)恢復(fù)打開激光唱機(jī),甚至從關(guān)閉音響時(shí)正在播放的音軌處繼續(xù)播放歌曲 。那么像這樣的系統(tǒng)用Stateflow 來進(jìn)行建模就需要使用 Stateflow 中的歷史節(jié)點(diǎn)。歷史節(jié)點(diǎn)是一種特殊的 Stateflow 圖形對(duì)象,它只能夠用于具有層次的狀態(tài)內(nèi)部在層次化的框圖子狀態(tài)之間如果存在超轉(zhuǎn)移, 則歷史節(jié)點(diǎn)也無法發(fā)揮作用歷史節(jié)點(diǎn)能夠影響默認(rèn)轉(zhuǎn)移的工作,使默認(rèn)轉(zhuǎn)移僅在首次激活系統(tǒng)時(shí)發(fā)揮作用,其余的時(shí)間就依賴于歷史節(jié)點(diǎn)
39、記錄的狀態(tài)來恢復(fù)子狀態(tài)的活動(dòng)情況內(nèi)部轉(zhuǎn)移:內(nèi)部轉(zhuǎn)移是一種特殊的轉(zhuǎn)移。就是指在狀態(tài)內(nèi)部的轉(zhuǎn)移,它從父狀態(tài)內(nèi)邊緣出發(fā), 終止于父狀態(tài)內(nèi)的子狀態(tài)或者連接節(jié)點(diǎn)邊緣上, 也可以終止于狀態(tài)的內(nèi)邊緣。內(nèi)部轉(zhuǎn)移能夠適當(dāng)?shù)販p小模型復(fù)雜度, 提高模型的執(zhí)行效率示例:討論關(guān)于自循環(huán)轉(zhuǎn)移的執(zhí)行(1)當(dāng)前狀態(tài) A 處于活動(dòng)狀態(tài), 事件 E 發(fā)生, 但是條件 C1 不滿足(2)事件 E 再次發(fā)生了,而且此時(shí)條件 C1 滿足(3)事件 E 第三次發(fā)生, 此時(shí)條件 C2 不滿足(1)當(dāng)前父狀態(tài) A 處于活動(dòng)狀態(tài),同時(shí)子狀態(tài)A1 處于活動(dòng)狀態(tài), 當(dāng)事件 R 發(fā)生時(shí)(2)如果當(dāng)前父狀態(tài) A 處于活動(dòng)狀態(tài),同時(shí)子狀態(tài) A2 處于活
40、動(dòng)狀態(tài),當(dāng)事件 R 發(fā)生層次化模型的轉(zhuǎn)移檢測(cè)優(yōu)先權(quán)轉(zhuǎn)移檢測(cè)的基本原則:(1) 轉(zhuǎn)移測(cè)試首先從最高層次的活動(dòng)狀態(tài)開始, 然后逐級(jí)向內(nèi)檢測(cè);(2) 外部轉(zhuǎn)移優(yōu)先于內(nèi)部轉(zhuǎn)移被檢測(cè);(3) 在同樣的層次上, 超轉(zhuǎn)移首先被檢測(cè)。 根據(jù)這些基本原則, 有以下的檢測(cè)順序:(1) 轉(zhuǎn)移的測(cè)試總是從活動(dòng)的父狀態(tài)開始。 向外的轉(zhuǎn)移, 即從父層次狀態(tài)外邊緣出發(fā)的轉(zhuǎn)移首先被測(cè)試, 這些轉(zhuǎn)移能夠使父狀態(tài)退出活動(dòng)轉(zhuǎn)移,所以它們首先被檢測(cè)。(2) 接著被檢測(cè)的是內(nèi)部轉(zhuǎn)移, 即從父層次狀態(tài)內(nèi)邊緣出發(fā)的轉(zhuǎn)移。(3)從活動(dòng)的子狀態(tài)開始檢測(cè)轉(zhuǎn)移。 從子狀態(tài)外邊緣出發(fā)穿越父狀態(tài)邊緣的轉(zhuǎn)移超轉(zhuǎn)移,首先被檢測(cè)。(4) 然后是父狀態(tài)內(nèi)部子
41、狀態(tài)之間的轉(zhuǎn)移被檢測(cè)。假設(shè)此時(shí)父狀態(tài) A 處于活動(dòng)狀態(tài)并且子狀態(tài) A1處于活動(dòng)狀態(tài),當(dāng)觸發(fā)發(fā)生時(shí),根據(jù)前面介紹的層次化狀態(tài)圖轉(zhuǎn)移檢測(cè)優(yōu)先權(quán)和轉(zhuǎn)移沖突檢測(cè)優(yōu)先權(quán),求系統(tǒng)處理的次序狀態(tài)動(dòng)作與狀態(tài)執(zhí)行的次狀態(tài)動(dòng)作與狀態(tài)執(zhí)行的次序序(1)當(dāng) Super 父狀態(tài)被首次激活時(shí)(2)當(dāng)父狀態(tài)處于活動(dòng)狀態(tài)而此時(shí) 發(fā)生了某個(gè)事件觸發(fā)時(shí)示例:討論示例:討論轉(zhuǎn)移檢測(cè)轉(zhuǎn)移檢測(cè)子狀態(tài)圖在創(chuàng)建層次化模型時(shí), 盡管使某個(gè)狀態(tài)包含了其他的狀態(tài)、 轉(zhuǎn)移以及連接節(jié)點(diǎn)等圖形對(duì)象而構(gòu)成了層次, 但是在用鼠標(biāo)移動(dòng)父狀態(tài)時(shí), 子狀態(tài)并不跟隨父狀態(tài)移動(dòng), 這對(duì)于編輯層次化的狀態(tài)圖很不方便,而且,當(dāng)子層次內(nèi)部的狀態(tài)變得復(fù)雜時(shí),框圖的編輯區(qū)域
42、是有限的。 為了解決這些問題,就引出了子狀態(tài)圖的方式。使用組合的狀態(tài)(1) 在需要組合的狀態(tài)上單擊鼠標(biāo)右鍵, 例如這里就需要右鍵單擊 PowerON 狀態(tài)。(2) 在彈出的快捷菜單中執(zhí)行 Make Contents 子菜單下的 Grouped 命令最便捷的方法是通過鼠標(biāo)雙擊來完成,利用鼠標(biāo)左鍵雙擊需要組合的狀態(tài),則狀態(tài)會(huì)變成組合模式,再次雙擊,則取消組合模式。創(chuàng)建子狀態(tài)圖ex11第五章第五章 有限狀態(tài)系統(tǒng)有限狀態(tài)系統(tǒng)并行機(jī)制并行機(jī)制并行機(jī)制本地事件廣播隱含事件時(shí)間邏輯并 行 機(jī) 制概述在有限狀態(tài)系統(tǒng)中, 狀態(tài)的行為可以按照其解析方式分為兩大類:互斥狀態(tài)(exclusive或者 OR)和并行狀態(tài)
43、(parallel 或者 AND)。 如果在層次化的狀態(tài)圖中包含了互斥的狀態(tài),也就意味著同一時(shí)刻在同一層次的狀態(tài)中僅有一個(gè)狀態(tài)處于活動(dòng)狀態(tài);若狀態(tài)被設(shè)置為并行狀態(tài),則位于同一層次下的所有狀態(tài)都在同一時(shí)刻處于活動(dòng)狀態(tài)。 在同一層次下,狀態(tài)要么是互斥的,要么是并行的, 不可能在同一層次下存在兩種模式共存的情況。狀態(tài) Slot 和狀態(tài) Player 的邊框是虛線,因此這兩個(gè)狀態(tài)就是處于并行狀態(tài)的 Stateflow 狀態(tài)其內(nèi)部包含的子狀態(tài) NoDisk 和HasDisk 以及 Stop 和 Play 狀態(tài)邊框是實(shí)線,因此子狀態(tài)之間是互斥的狀態(tài),子狀態(tài)在相應(yīng)的層次同一時(shí)刻只能有一個(gè)處于活動(dòng)狀態(tài)。當(dāng)狀態(tài)
44、處于并行時(shí), 并行的狀態(tài)并不是嚴(yán)格地同時(shí)被激活, 它們的執(zhí)行和激活也有一定的次序基本原則就是:在圖形編輯器中, 位置較高的狀態(tài)具有較高的執(zhí)行次序編號(hào)。處于同一水平線上的并行狀態(tài), 左邊的狀態(tài)具有較高的執(zhí)行次序編號(hào)。當(dāng)?shù)谝粋€(gè)事件發(fā)生時(shí),求系統(tǒng)首先激活整個(gè)狀態(tài)圖,依次激活相應(yīng)的狀態(tài)并執(zhí)行動(dòng)作當(dāng)再次發(fā)生事件 E 時(shí),求系統(tǒng)依次執(zhí)行相應(yīng)的轉(zhuǎn)移并執(zhí)行相應(yīng)的動(dòng)作圖形盒的應(yīng)用圖形盒(Box)是一種比較特別的 Stateflow 圖形對(duì)象, 它并不參與 Stateflow 的實(shí)際運(yùn)行,也不能看做是狀態(tài)。 從圖形盒上引出轉(zhuǎn)移或者將轉(zhuǎn)移的終點(diǎn)放置在圖形盒的邊緣上都是非法的。 不過,圖形盒能夠影響并行狀態(tài)的執(zhí)行次序
45、,在某些情況下可以將圖形盒作為框圖的組織形式。圖形盒(Box)功能:層次化建模應(yīng)用數(shù)據(jù)對(duì)象:創(chuàng)建在圖形盒內(nèi)部的本地?cái)?shù)據(jù)對(duì)象只能夠被圖形盒內(nèi)部包含的對(duì) 象使用影響并行狀態(tài)的執(zhí)行次序:圖形盒對(duì)象是所有圖形對(duì)象中位置最高的對(duì)象本地事件廣播定義本地事件:本地事件主要用于包含并行狀態(tài)的有限狀態(tài)系統(tǒng), 使不同的并行狀態(tài)之間進(jìn)行交互。廣播本地事件進(jìn)行本地事件廣播就是將事件的名稱寫在相應(yīng)的動(dòng)作中就可以了。那么監(jiān)聽這個(gè)事件的相應(yīng)動(dòng)作狀態(tài)轉(zhuǎn)移、動(dòng)作等就會(huì)在事件廣播的時(shí)刻完成工作。直接事件廣播直接事件廣播,就是將特定的事件發(fā)送給指定的狀態(tài),而不是出現(xiàn)一呼百應(yīng)的情況。直接事件廣播需要通過函數(shù) send 來實(shí)現(xiàn),它的語
46、法如下:send(event_name,state_name);受限事件廣播將定義在狀態(tài)內(nèi)部的事件叫做受限事件(Qualified Event),在動(dòng)作中實(shí)現(xiàn)受限事件廣播的方法是通過以下語法實(shí)現(xiàn)的:state_name.event_name;廣播的事件僅僅被定義該事件的狀態(tài)接收, 因?yàn)檫@個(gè)事件是定義在指定的狀態(tài)中的本地事件,在其他狀態(tài)中, 這個(gè)事件是沒有意義的。事件廣播的執(zhí)行次序事件廣播的執(zhí)行次序事件廣播很類似函數(shù)的調(diào)用,可以將廣播事件看做在動(dòng)作執(zhí)行的過程中調(diào)用了一個(gè)函數(shù)事件廣播很類似函數(shù)的調(diào)用,可以將廣播事件看做在動(dòng)作執(zhí)行的過程中調(diào)用了一個(gè)函數(shù),在函數(shù)執(zhí)行完畢退出之后在函數(shù)執(zhí)行完畢退出之后,
47、系統(tǒng)才繼續(xù)后面的工作。也就是說,當(dāng)事件被廣播后,系統(tǒng)將系統(tǒng)才繼續(xù)后面的工作。也就是說,當(dāng)事件被廣播后,系統(tǒng)將與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后,與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后, 才會(huì)繼續(xù)執(zhí)行廣播事件動(dòng)作之后需要執(zhí)行才會(huì)繼續(xù)執(zhí)行廣播事件動(dòng)作之后需要執(zhí)行的其他動(dòng)作。的其他動(dòng)作。一般事件廣播的執(zhí)行假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為 A1a 和 A2a, 當(dāng)事件 E1 發(fā)生時(shí)如果此時(shí)活動(dòng)的子狀態(tài)同樣為 A1a 和 A2a, 那么當(dāng)事件 E1 發(fā)生時(shí)直接事件廣播的執(zhí)行狀態(tài)圖的本地事件廣播能夠影響狀態(tài)圖內(nèi)部所有相關(guān)的對(duì)象,為了避免事件廣播引起一些不必要的動(dòng)作執(zhí)行,需要使用直接事件廣播, 將事件直接發(fā)送給狀態(tài)。 假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為 A1a 和 A2a,當(dāng)事件 E1 發(fā)生時(shí)受限事件廣播的執(zhí)行受限事件廣播的執(zhí)行假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為 A1a 和 A2a,當(dāng)事件 E1 發(fā)生時(shí)早期返回邏輯Stateflow 在處理狀態(tài)機(jī)工作時(shí)實(shí)際上是一種單線程的工作方式, 事件廣播會(huì)打斷當(dāng)前的工作流程,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黨章黨史國(guó)史國(guó)情知識(shí)競(jìng)賽題庫及答案(共180題)
- 飛機(jī)維修委托協(xié)議
- 《數(shù)據(jù)庫應(yīng)用技術(shù)》課件-第2章 MySQL的安裝與配置
- 陵園墓碑裝修合同模板
- 《Linux操作系統(tǒng)》課件-2.Linux基本命令操作
- 儲(chǔ)蓄存款積分兌換禮宣傳品采購 投標(biāo)方案(技術(shù)方案)
- 電子信息技術(shù)學(xué)習(xí)應(yīng)用測(cè)評(píng)試卷
- 三農(nóng)田水利工程技術(shù)手冊(cè)
- 北京市2025年度游戲設(shè)計(jì)行業(yè)勞動(dòng)合同參考模板
- 化妝品行業(yè)產(chǎn)品開發(fā)與營(yíng)銷策略
- 中醫(yī)培訓(xùn)課件:《放血療法》
- MOOC 人工智能基礎(chǔ)-國(guó)防科技大學(xué) 中國(guó)大學(xué)慕課答案
- 裝配式建筑預(yù)制構(gòu)件安裝-水平構(gòu)件安裝技術(shù)
- 部編版語文五年級(jí)下冊(cè)第四單元大單元整體教學(xué)設(shè)計(jì)
- 《廂式貨運(yùn)車系列型譜》
- 第二課-智能多面手-課件-六年級(jí)下冊(cè)信息科技河南大學(xué)版
- 浙江弘博新材料科技有限公司年產(chǎn) 10 萬噸增塑劑和配套 4 萬噸苯酐擴(kuò)建項(xiàng)目 環(huán)境影響報(bào)告書
- 境外安全管理培訓(xùn)(海外)課件
- 家鄉(xiāng)物產(chǎn)說課稿公開課
- 紙箱出廠檢驗(yàn)報(bào)告
- 廠房分布式光伏系統(tǒng)施工進(jìn)度計(jì)劃?rùn)M道圖
評(píng)論
0/150
提交評(píng)論