Stateflow教程學(xué)習(xí)教案課件_第1頁
Stateflow教程學(xué)習(xí)教案課件_第2頁
Stateflow教程學(xué)習(xí)教案課件_第3頁
Stateflow教程學(xué)習(xí)教案課件_第4頁
Stateflow教程學(xué)習(xí)教案課件_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1Stateflow教程會(huì)計(jì)學(xué)1Stateflow教程Stateflow概述:

Stateflow是集成于Simulink中的圖形化設(shè)計(jì)與開發(fā)工具,主要用于針對(duì)控制系統(tǒng)中的復(fù)雜控制邏輯進(jìn)行建模與仿真,Stateflow適用于針對(duì)事件響應(yīng)系統(tǒng)(ReactiveSystem)進(jìn)行建模和仿真。與事件響應(yīng)系統(tǒng)相對(duì)應(yīng)的就是動(dòng)態(tài)變換系統(tǒng)(DynamicTransformationalSystem)。動(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)就需要利用Stateflow來進(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)行建模和仿真。第1頁/共68頁Stateflow概述:Statefl第一章創(chuàng)建狀態(tài)圖Stateflow編輯器創(chuàng)建和編輯狀態(tài)圖第2頁/共68頁第一章創(chuàng)建狀態(tài)圖Stateflow編輯器第2頁/共6Stateflow編輯器創(chuàng)建Simulink模型1.直接在MATLAB命令行窗體中鍵入指令sfnew2.打開Simulink庫瀏覽器,在庫瀏覽器中找到Stateflow的模塊庫第3頁/共68頁Stateflow編輯器創(chuàng)建Simulink模型第3頁/雙擊模型文件或者庫文件中的Stateflow圖塊打開Stateflow編輯器

執(zhí)行Stateflow編輯器File菜單下的ChartProperties命令,打開屬性框第4頁/共68頁雙擊模型文件或者庫文件中的Stateflow圖塊打開S創(chuàng)建和編輯狀態(tài)圖插入圖形對(duì)象1.創(chuàng)建狀態(tài)在圖形對(duì)象面板的狀態(tài)圖標(biāo)上按下鼠標(biāo)左鍵并保持,將狀態(tài)Stateflow編輯器的空白區(qū)域中Keyword:StateActions就是狀態(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)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作during:當(dāng)狀態(tài)保持其活動(dòng)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作第5頁/共68頁創(chuàng)建和編輯狀態(tài)圖插入圖形對(duì)象Keyword:State在狀態(tài)上單擊鼠標(biāo)右鍵,在快捷菜單中選擇Properties命令,可以通過狀態(tài)的屬性對(duì)話框進(jìn)一步定義狀態(tài)2.創(chuàng)建連接節(jié)點(diǎn)

連接節(jié)點(diǎn)作為轉(zhuǎn)移通路的判決點(diǎn)或匯合點(diǎn),也是在狀態(tài)圖中常用的圖形元素之一,特別是在流程圖中,由于流程圖不能包含任何狀態(tài),因此只有依靠連接節(jié)點(diǎn)完成通路的連接和判斷分支,連接節(jié)點(diǎn)不是記憶元件。第6頁/共68頁在狀態(tài)上單擊鼠標(biāo)右鍵,在快捷菜單中選擇Pro在圖形對(duì)象面板的連接節(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)移轉(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)移方向的約束。第7頁/共68頁在圖形對(duì)象面板的連接節(jié)點(diǎn)圖標(biāo)上按下鼠標(biāo)左鍵并保持,將狀態(tài)創(chuàng)建轉(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)的邊緣即可,第8頁/共68頁創(chuàng)建轉(zhuǎn)移的具體步驟是:第8頁/共68頁給轉(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),但是不論出現(xiàn)哪幾個(gè)部分,標(biāo)簽的內(nèi)容必須按照上面指定的順序書寫。條件動(dòng)作與轉(zhuǎn)移動(dòng)作兩者之間的區(qū)別:條件動(dòng)作在條件滿足的情況下就能夠執(zhí)行,而轉(zhuǎn)移動(dòng)作需要在整個(gè)轉(zhuǎn)移通路都有效的情況下,在執(zhí)行轉(zhuǎn)移的時(shí)候才執(zhí)行。第9頁/共68頁給轉(zhuǎn)移添加標(biāo)簽的方法:組成轉(zhuǎn)移標(biāo)簽的四個(gè)部分不一定完整地出現(xiàn)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)被激活時(shí),必有相應(yīng)的確定的某個(gè)狀態(tài)被激活。而默認(rèn)轉(zhuǎn)移就定義了當(dāng)狀態(tài)機(jī)被激活或者層次模型中父層次狀態(tài)被激活時(shí),具體哪個(gè)子狀態(tài)被激活。第10頁/共68頁Stateflow中都可以使用三類語法元素作為動(dòng)作:第10創(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)行的二義性,因此,正確的使用默認(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ò)誤第11頁/共68頁創(chuàng)建默認(rèn)轉(zhuǎn)移的方法如下:第11頁/共68頁5.添加注釋:如果需要在Stateflow的框圖中使用LaTex字符集,則需要按照下列步驟完成:(1)在已經(jīng)添加的文本上單擊鼠標(biāo)右鍵,這時(shí)將顯示快捷菜單;(2)選擇快捷菜單中TextFormat子菜單中的LaTexInstructions復(fù)選項(xiàng);(3)用鼠標(biāo)單擊已經(jīng)添加的文本注釋,重新進(jìn)入文本編輯模式;(4)添加LaTex字符,例如鍵入y={\itAe}^{\alphax}sin(\beta\itt);(5)在文本編輯區(qū)外單擊鼠標(biāo)完成注釋的添加,此時(shí)的注釋內(nèi)容將變?yōu)閥=Aeaxsin(bt),如圖所示。第12頁/共68頁5.添加注釋:如果需要在Stateflow的框圖中使用編輯圖形對(duì)象外觀:

改變尺寸和位置單擊右鍵單擊右鍵在注釋上單擊鼠標(biāo)右鍵而出現(xiàn)的快捷菜單。在菜單中,共計(jì)有三個(gè)子菜單可以用來修改注釋文本的外觀,分別為:FontSize:設(shè)置注釋文本的尺寸。TextFormat:設(shè)置注釋文本的基本格式,包括粗體、斜體和LaTex字符支持。TextAlignment:設(shè)置注釋文本的對(duì)齊方式,包括左對(duì)齊、居中和右對(duì)齊。第13頁/共68頁編輯圖形對(duì)象外觀:改變尺寸和位置單擊右鍵單擊右鍵在注釋上單第二章狀態(tài)圖的仿真狀態(tài)圖的基本概念事件數(shù)據(jù)對(duì)象狀態(tài)圖的更新模式stateflow模型查看器第14頁/共68頁第二章狀態(tài)圖的仿真狀態(tài)圖的基本概念第14頁/共68頁狀態(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)處于激活狀態(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)。第15頁/共68頁狀態(tài)圖的基本概念狀態(tài)圖管理和維護(hù)著當(dāng)前模型中活動(dòng)的狀態(tài)。一事件:添加事件:執(zhí)行Stateflow圖形編輯器Add菜單下Event子菜單中的任何一個(gè)命令,例如執(zhí)行Local命令,則Stateflow將彈出如圖所示的對(duì)話框。Scope屬性:該屬性定義事件的作用類型。在Add菜單下的Event子菜單中具有三個(gè)菜單命令,分別為L(zhǎng)ocal、InputfromSimulink和OutputtoSimulink,通過這三個(gè)菜單命令定義事件,得到的Scope屬性不一致。具有Local屬性的事件是在狀態(tài)圖內(nèi)部發(fā)揮作用。具有InputfromSimulink屬性的事件是從Simulink框圖輸入到Stateflow中的,也就是Stateflow框圖的外部觸發(fā)事件。具有OutputtoSimulink屬性的事件是從Stateflow框圖輸出到Simulink中的,即利用Stateflow定義的事件驅(qū)動(dòng)或者觸發(fā)其他Stateflow框圖或者子系統(tǒng)動(dòng)作。第16頁/共68頁事件:添加事件:Scope屬性:該屬性定義事件的作用類型。如果用戶設(shè)置事件的Scope屬性為InputfromSimulink或者OutputtoSimulink,則添加事件的對(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ā)、上升沿觸發(fā)。FunctionCall(函數(shù)調(diào)用)是一類比較特殊的觸發(fā)屬性第17頁/共68頁如果用戶設(shè)置事件的Scope屬性為Inputfrom創(chuàng)建事件實(shí)例:

運(yùn)行過程中,單擊ManualSwitch模塊向Stateflow框圖發(fā)出事件第18頁/共68頁創(chuàng)建事件實(shí)例:運(yùn)行過程中,單擊ManualSwitc使用多個(gè)輸入事件:同一個(gè)Stateflow的圖塊可以使用多個(gè)輸入事件。但是,不論用戶為Stateflow的圖塊定義了多少個(gè)輸入事件,每個(gè)Stateflow的圖塊都只能具有一個(gè)事件輸入端口。因此,在向Stateflow的圖塊增加不止一個(gè)輸入事件時(shí),需要將不同的事件通過Mux塊組合成為輸入事件向量,然后將組合后的輸入事件向量連接到Stateflow圖塊上。第19頁/共68頁使用多個(gè)輸入事件:同一個(gè)Stateflow的圖塊可以使用數(shù)據(jù)對(duì)象:Stateflow使用數(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/Stateflow模型運(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ù)值。DataStoreMemory:所定義的數(shù)據(jù)對(duì)象與Simulink數(shù)據(jù)空間共享,也就是說,該數(shù)據(jù)對(duì)象與Simulink工作空間中的某個(gè)數(shù)據(jù)對(duì)象相互綁定。此時(shí)該數(shù)據(jù)對(duì)象的名稱必須與Simulink工作空間中數(shù)據(jù)對(duì)象的名稱一致。第20頁/共68頁數(shù)據(jù)對(duì)象:Stateflow使用數(shù)據(jù)對(duì)象來管理維護(hù)數(shù)據(jù)類型模式(DataTypeMode)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ù)類型Fixedpoint類型用于模型的定點(diǎn)數(shù)據(jù)設(shè)置,若選擇了該類型,則可以完成Stateflow模型數(shù)據(jù)的量化處理。第21頁/共68頁數(shù)據(jù)類型模式(DataTypeMode)第21頁/共6狀態(tài)圖的更新模式不是所有的有限狀態(tài)系統(tǒng)都具有外部事件的定義,有些模型就沒有針對(duì)Stateflow模型定義任何輸入事件,可是Stateflow的模型依然能夠正常地運(yùn)行。那么對(duì)于這種沒有定義任何輸入事件的系統(tǒng),它是如何運(yùn)行的呢?這就是狀態(tài)圖的更新模式所發(fā)揮的作用。Stateflow的框圖有三種更新模式,分別為Inherited、Discrete和Continuous第22頁/共68頁狀態(tài)圖的更新模式不是所有的有限狀態(tài)系統(tǒng)都具有外部事件的定義,系統(tǒng)默認(rèn)使用Inherited更新模式,在這種更新模式下可能存在以下三種情況:(1)有輸入事件定義。如果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框圖既沒有定義輸入事件,又沒有定義輸入數(shù)據(jù),則Stateflow框圖繼承其父層次模型的更新周期。如果Stateflow框圖位于系統(tǒng)模型的頂層,則Stateflow框圖繼承模型的仿真周期作為自己的更新周期。Discrete更新模式,是將Stateflow框圖看做有固定周期的離散塊,在設(shè)置該更新模式時(shí),Stateflow框圖屬性對(duì)話框中的SampleTime屬性需要設(shè)置具體的更新周期,單位為秒。Continuous更新模式,則Stateflow框圖好比Simulink模型中的一個(gè)連續(xù)系統(tǒng)模塊,此時(shí)Stateflow的框圖將按照系統(tǒng)仿真步長(zhǎng)完成更新。第23頁/共68頁系統(tǒng)默認(rèn)使用Inherited更新模式,在這種更新模式下注意:如果為框圖定義了輸入事件,則框圖的更新模式就只能設(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)ChartAtInitialization選項(xiàng)。選擇了該選項(xiàng),則意味著當(dāng)前的Stateflow框圖將在模型初始化階段就被激活,這樣,在后續(xù)的事件觸發(fā)過程中,就直接進(jìn)行狀態(tài)的轉(zhuǎn)換了第24頁/共68頁注意:如果為框圖定義了輸入事件,則框圖的更新模式就只能設(shè)置為第三章流程圖轉(zhuǎn)移沖突流程圖的創(chuàng)建圖形函數(shù)stateflow模型調(diào)試器第25頁/共68頁第三章流程圖轉(zhuǎn)移沖突第25頁/共68頁概述:在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)移沖突的處理原則。假設(shè)當(dāng)前事件E發(fā)生并且條件C也滿足,則四個(gè)轉(zhuǎn)移通路都是有效的,即形成了轉(zhuǎn)移沖突。那么Stateflow是如何處理這種情況呢?第26頁/共68頁概述:在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)移有效,則執(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)移即使有效,也都被忽略了。第27頁/共68頁原則:當(dāng)事件發(fā)生需要進(jìn)行轉(zhuǎn)移檢測(cè)時(shí),Stateflow總同限制級(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)移由于都僅僅使用條件進(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)。幾何原則:第28頁/共68頁同限制級(jí)別的若干條轉(zhuǎn)移同時(shí)有效狀態(tài)Standby向Hi用戶自定義檢測(cè)次序:兩個(gè)步驟:(1)在Stateflow圖形編輯器中單擊右鍵,在彈出的菜單中選擇ExecutionOrder子菜單下的Enable'Userspecifiedexecutionorder'forthischart…命令,(2)用鼠標(biāo)右鍵單擊需要改變檢測(cè)次序的轉(zhuǎn)移,例如要修改上圖所示模型的第一個(gè)轉(zhuǎn)移檢測(cè)次序,則用右鍵單擊該轉(zhuǎn)移,在出現(xiàn)的快捷菜單的ExecutionOrder子菜單下選擇檢測(cè)次序。由于這里從狀態(tài)A到狀態(tài)B具有四個(gè)轉(zhuǎn)移,因此轉(zhuǎn)移執(zhí)行次序的選項(xiàng)為1~4。默認(rèn)地,該轉(zhuǎn)移檢測(cè)次序?yàn)?,可以將其修改為其他數(shù)值,修改某一條轉(zhuǎn)移的檢測(cè)次序后,其他的轉(zhuǎn)移可以根據(jù)用戶指定的次序以及Stateflow默認(rèn)的檢測(cè)次序原則進(jìn)行重新排序。第29頁/共68頁用戶自定義檢測(cè)次序:兩個(gè)步驟:(2)用鼠標(biāo)右鍵單擊需要改變檢常用邏輯結(jié)構(gòu)模型:if(條件){動(dòng)作}if(條件){動(dòng)作A}else{動(dòng)作B}if(條件1){動(dòng)作A}elseif(條件2){動(dòng)作B}else{動(dòng)作C}第30頁/共68頁常用邏輯結(jié)構(gòu)模型:if(條件){動(dòng)作}if(條件){動(dòng)作Aif(條件1){動(dòng)作Aif(條件2){動(dòng)作B}}switch-case第31頁/共68頁if(條件1){動(dòng)作Aif(條件2){動(dòng)作B}for循環(huán)for(index=0;index<nloops;index++){Action;}while循環(huán)while(Condition){Action;}do-while循環(huán)do{Action;}while(Condition)第32頁/共68頁for循環(huán)for(index=0;ind流程圖回溯現(xiàn)象if(c1){act1;if(c2){act2;}elseif(c3){act3;}}else{act4;}分析:假設(shè),條件c1為真,條件c2和條件c3為假第33頁/共68頁流程圖回溯現(xiàn)象if(c1)分析:假設(shè),條件c1為真,第注意:在流程圖中,僅存在轉(zhuǎn)移的檢測(cè),而不存在轉(zhuǎn)移真正的執(zhí)行。所以,在流程圖中,所有的動(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)。第34頁/共68頁注意:在流程圖中,僅存在轉(zhuǎn)移的檢測(cè),而不存在轉(zhuǎn)移真正的執(zhí)狀態(tài)中的流程圖該Stateflow框圖具有兩個(gè)狀態(tài):狀態(tài)Normal和狀態(tài)Inverse。在這兩個(gè)狀態(tài)中都包含了流程圖。它們包含的流程圖十分簡(jiǎn)單,就是根據(jù)輸入數(shù)據(jù)進(jìn)行相應(yīng)的邏輯判斷,然后決定具體的輸出。從框圖上看,這兩個(gè)流程圖的體系結(jié)構(gòu)完全一致,有所區(qū)別的就是參數(shù),即處理的數(shù)據(jù)不同,這里可以通過圖形函數(shù)的形式來完成模型的創(chuàng)建。第35頁/共68頁狀態(tài)中的流程圖該Stateflow框圖具有兩個(gè)狀態(tài):狀創(chuàng)建圖形函數(shù)在Stateflow圖形編輯器的圖形對(duì)象工具欄上單擊圖形函數(shù)按鈕,在Stateflow圖形編輯器中任意的空白位置單擊鼠標(biāo)左鍵,即完成了向現(xiàn)有模型增加圖形函數(shù)的工作。第36頁/共68頁創(chuàng)建圖形函數(shù)在Stateflow圖形編輯器的圖形對(duì)象工具stateflow調(diào)試器狀態(tài)面板(StatusPane)控制面板(ControlPane)選項(xiàng)面板(ControlPane)顯示面板(DisplayPane)第37頁/共68頁stateflow調(diào)試器狀態(tài)面板(StatusPane)第3狀態(tài)斷點(diǎn):StateDuring:在執(zhí)行狀態(tài)的During動(dòng)作之前進(jìn)入調(diào)試模式StateEntry:在執(zhí)行狀態(tài)的Entry動(dòng)作之前進(jìn)入調(diào)試模式。StateExit:在執(zhí)行狀態(tài)的Exit動(dòng)作之前進(jìn)入調(diào)試模式轉(zhuǎn)移斷點(diǎn):WhenTested:在轉(zhuǎn)移被檢測(cè)之前進(jìn)入調(diào)試模式。WhenValid:轉(zhuǎn)移經(jīng)過檢測(cè)是有效的,在執(zhí)行前進(jìn)入調(diào)試模式。事件的斷點(diǎn):StartofBroadcast:在事件被廣播之前進(jìn)入調(diào)試模式EndofBroadcast:在事件廣播結(jié)束后進(jìn)入調(diào)試模式圖形函數(shù)的斷點(diǎn):FunctionCall:在函數(shù)被調(diào)用之前進(jìn)入調(diào)試模式第38頁/共68頁狀態(tài)斷點(diǎn):第38頁/共68頁第四章有限狀態(tài)系統(tǒng)—層次化建模狀態(tài)動(dòng)作層次化建模歷史節(jié)點(diǎn)內(nèi)部轉(zhuǎn)移子狀態(tài)圖stateflow的查詢工具第39頁/共68頁第四章有限狀態(tài)系統(tǒng)—層次化建模狀態(tài)動(dòng)作第39頁/共68狀態(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)作onevent動(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)中被訪問,但是不能修改;綁定的事件可以被所有狀態(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++;即可。onevent動(dòng)作是during動(dòng)作的特例,兩者的區(qū)別就是:onevent動(dòng)作需要有特定事件觸發(fā)才可能執(zhí)行;而during動(dòng)作在有事件發(fā)生,但又沒有使?fàn)顟B(tài)退出活動(dòng)狀態(tài)時(shí)就可以執(zhí)行。第40頁/共68頁狀態(tài)動(dòng)作:entry:當(dāng)事件發(fā)生,狀態(tài)被激活時(shí)執(zhí)行相應(yīng)的動(dòng)討論車載播放器onevent事件相當(dāng)于during事件的子集,即當(dāng)STEP_UP事件發(fā)生時(shí),首先執(zhí)行during動(dòng)作,然后再來執(zhí)行onSTEP_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。第41頁/共68頁討論車載播放器onevent事件相當(dāng)于during在動(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ù)雜的工作。類型為InputfromSimulink的事件是不能夠通過狀態(tài)動(dòng)作、轉(zhuǎn)移動(dòng)作或者條件動(dòng)作進(jìn)行廣播的。此外,類型為L(zhǎng)ocal的事件也可以進(jìn)行廣播,這就是在第6章將要介紹的本地事件廣播。第42頁/共68頁在動(dòng)作中使用事件輸出事件廣播第42頁/共68頁輸出狀態(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)工作。第43頁/共68頁輸出狀態(tài)的活動(dòng)情況第43頁/共68頁函數(shù)調(diào)用子系統(tǒng)在Stateflow的事件類型中,存在類型為函數(shù)調(diào)用(FunctionCall)的事件,此類事件能夠觸發(fā)函數(shù)調(diào)用子系統(tǒng)。函數(shù)調(diào)用子系統(tǒng)是一類比較特殊的子系統(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ù)。第44頁/共68頁函數(shù)調(diào)用子系統(tǒng)當(dāng)Stateflow框圖中的轉(zhuǎn)移動(dòng)作發(fā)出第綁定事件如果將事件與狀態(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)事件的廣播。事件廣播可以是輸出事件的廣播,也可以是本地事件的廣播。第45頁/共68頁綁定事件第45頁/共68頁層次化建模層次化模型的構(gòu)成第46頁/共68頁層次化建模層次化模型的構(gòu)成第46頁/共68頁層次化狀態(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í)其子狀態(tài)Sub4處于活動(dòng)狀態(tài),當(dāng)事件E發(fā)生時(shí)第47頁/共68頁層次化狀態(tài)圖的轉(zhuǎn)移case1:假設(shè),當(dāng)前Super1狀歷史節(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)記錄的狀態(tài)來恢復(fù)子狀態(tài)的活動(dòng)情況第48頁/共68頁歷史節(jié)點(diǎn):歷史節(jié)點(diǎn)是一種特殊的Stateflow圖形對(duì)象內(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í)行效率第49頁/共68頁內(nèi)部轉(zhuǎn)移:內(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處于活動(dòng)狀態(tài),當(dāng)事件R發(fā)生第50頁/共68頁示例:討論(1)當(dāng)前狀態(tài)A處于活動(dòng)狀態(tài),(2)事件E層次化模型的轉(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)部子狀態(tài)之間的轉(zhuǎn)移被檢測(cè)。第51頁/共68頁層次化模型的轉(zhuǎn)移檢測(cè)優(yōu)先權(quán)轉(zhuǎn)移檢測(cè)的基本原則:第51頁/共6假設(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í)行的次序(1)當(dāng)Super父狀態(tài)被首次激活時(shí)(2)當(dāng)父狀態(tài)處于活動(dòng)狀態(tài)而此時(shí)發(fā)生了某個(gè)事件觸發(fā)時(shí)示例:討論轉(zhuǎn)移檢測(cè)第52頁/共68頁假設(shè)此時(shí)父狀態(tài)A處于活動(dòng)狀態(tài)并且子狀態(tài)A1狀態(tài)動(dòng)作與狀子狀態(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ū)域是有限的。為了解決這些問題,就引出了子狀態(tài)圖的方式。使用組合的狀態(tài)(1)在需要組合的狀態(tài)上單擊鼠標(biāo)右鍵,例如這里就需要右鍵單擊PowerON狀態(tài)。(2)在彈出的快捷菜單中執(zhí)行MakeContents子菜單下的Grouped命令最便捷的方法是通過鼠標(biāo)雙擊來完成,利用鼠標(biāo)左鍵雙擊需要組合的狀態(tài),則狀態(tài)會(huì)變成組合模式,再次雙擊,則取消組合模式。創(chuàng)建子狀態(tài)圖ex11第53頁/共68頁子狀態(tài)圖在創(chuàng)建層次化模型時(shí),盡管使某個(gè)狀態(tài)包含了其他的狀態(tài)第五章有限狀態(tài)系統(tǒng)—并行機(jī)制并行機(jī)制本地事件廣播隱含事件時(shí)間邏輯第54頁/共68頁第五章有限狀態(tài)系統(tǒng)—并行機(jī)制并行機(jī)制第54頁/共68頁并行機(jī)制概述在有限狀態(tài)系統(tǒng)中,狀態(tài)的行為可以按照其解析方式分為兩大類:互斥狀態(tài)(exclusive或者OR)和并行狀態(tài)(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)。第55頁/共68頁并行機(jī)制概述狀態(tài)Slot和狀態(tài)Player其內(nèi)當(dāng)狀態(tài)處于并行時(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)作第56頁/共68頁當(dāng)狀態(tài)處于并行時(shí),并行的狀態(tài)并不是嚴(yán)格地同時(shí)被激活,它們圖形盒的應(yīng)用圖形盒(Box)是一種比較特別的Stateflow圖形對(duì)象,它并不參與Stateflow的實(shí)際運(yùn)行,也不能看做是狀態(tài)。從圖形盒上引出轉(zhuǎn)移或者將轉(zhuǎn)移的終點(diǎn)放置在圖形盒的邊緣上都是非法的。不過,圖形盒能夠影響并行狀態(tài)的執(zhí)行次序,在某些情況下可以將圖形盒作為框圖的組織形式。圖形盒(Box)功能:層次化建模應(yīng)用數(shù)據(jù)對(duì)象:創(chuàng)建在圖形盒內(nèi)部的本地?cái)?shù)據(jù)對(duì)象只能夠被圖形盒內(nèi)部包含的對(duì)象使用影響并行狀態(tài)的執(zhí)行次序:圖形盒對(duì)象是所有圖形對(duì)象中位置最高的對(duì)象第57頁/共68頁圖形盒的應(yīng)用圖形盒(Box)是一種比較特別的Statefl本地事件廣播定義本地事件:本地事件主要用于包含并行狀態(tài)的有限狀態(tài)系統(tǒng),使不同的并行狀態(tài)之間進(jìn)行交互。第58頁/共68頁本地事件廣播定義本地事件:第58頁/共68頁廣播本地事件進(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),它的語法如下:send(event_name,state_name);第59頁/共68頁廣播本地事件第59頁/共68頁受限事件廣播將定義在狀態(tài)內(nèi)部的事件叫做受限事件(QualifiedEvent),在動(dòng)作中實(shí)現(xiàn)受限事件廣播的方法是通過以下語法實(shí)現(xiàn)的:state_name.event_name;廣播的事件僅僅被定義該事件的狀態(tài)接收,因?yàn)檫@個(gè)事件是定義在指定的狀態(tài)中的本地事件,在其他狀態(tài)中,這個(gè)事件是沒有意義的。事件廣播的執(zhí)行次序事件廣播很類似函數(shù)的調(diào)用,可以將廣播事件看做在動(dòng)作執(zhí)行的過程中調(diào)用了一個(gè)函數(shù),在函數(shù)執(zhí)行完畢退出之后,系統(tǒng)才繼續(xù)后面的工作。也就是說,當(dāng)事件被廣播后,系統(tǒng)將與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后,才會(huì)繼續(xù)執(zhí)行廣播事件動(dòng)作之后需要執(zhí)行的其他動(dòng)作。第60頁/共68頁受限事件廣播事件廣播的執(zhí)行次序事件廣播很類似函數(shù)的調(diào)用,可以一般事件廣播的執(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í)第61頁/共68頁一般事件廣播的執(zhí)行假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為A1a和A直接事件廣播的執(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í)行假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為A1a和A2a,當(dāng)事件E1發(fā)生時(shí)第62頁/共68頁直接事件廣播的執(zhí)行假設(shè)當(dāng)前處于活動(dòng)受限事件廣播的執(zhí)行假設(shè)當(dāng)前早期返回邏輯Stateflow在處理狀態(tài)機(jī)工作時(shí)實(shí)際上是一種單線程的工作方式,事件廣播會(huì)打斷當(dāng)前的工作流程,而且只有在廣播事件相關(guān)的工作全部結(jié)束之后,才繼續(xù)處理原來的后續(xù)工作。在這種處理方式下,事件廣播對(duì)原有的工作流程有時(shí)可能會(huì)造成一些影響,并且產(chǎn)生一些沖突現(xiàn)象。針對(duì)不同的動(dòng)作類型,Stateflow解決的原則略有不同,這里總結(jié)如下:Entry動(dòng)作:如果與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后,狀態(tài)已經(jīng)不再處于活動(dòng)狀態(tài),則所有剩余的entry動(dòng)作以及進(jìn)入狀態(tài)之后的相應(yīng)處理就不運(yùn)行了。Exit動(dòng)作:如果與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后,狀態(tài)已經(jīng)不再處于活動(dòng)狀態(tài),則所有剩余的exit動(dòng)作以及退出源狀態(tài)進(jìn)入目標(biāo)狀態(tài)之間的轉(zhuǎn)移就不運(yùn)行了。During動(dòng)作:如果與事件廣播相關(guān)的所有動(dòng)作都執(zhí)行完畢之后,狀態(tài)已經(jīng)不再處于活動(dòng)狀態(tài),則所有剩余的during動(dòng)作就不運(yùn)行了。條件動(dòng)作:如果與事件廣播相關(guān)的動(dòng)作都執(zhí)行完畢之后,轉(zhuǎn)移流程的源狀態(tài)或者流程圖的父層次狀態(tài)不再處于活動(dòng)狀態(tài),則所有剩余的未執(zhí)行或未檢測(cè)流程就不再被檢測(cè)執(zhí)行了。轉(zhuǎn)移動(dòng)作:如果與事件廣播相關(guān)的動(dòng)作都執(zhí)行完畢之后,轉(zhuǎn)移通路的父層次狀態(tài)不再處于活動(dòng)狀態(tài),或者父層次狀態(tài)中另外一個(gè)子狀態(tài)被激活了,則所有剩余的未執(zhí)行的轉(zhuǎn)移動(dòng)作就不再執(zhí)行了。當(dāng)前活動(dòng)的狀態(tài)為A,在事件E發(fā)生時(shí)第63頁/共68頁早期返回邏輯Stateflow在處理狀態(tài)機(jī)工作時(shí)實(shí)際上是一簡(jiǎn)化并行狀態(tài)圖的設(shè)計(jì)隱含事件隱含事件(ImplicitEvents),就是在Stateflow模型運(yùn)行過程中,狀態(tài)圖或者狀態(tài)發(fā)生了某些變化時(shí),系統(tǒng)將其作為某些類型事件來處理的事件。隱含事件之所以隱含是因?yàn)樵谑褂眠@些類型的事件時(shí),用戶不需要在數(shù)據(jù)字典中明顯地定義事件就可以直接被Stateflow使用。隱含事件類型:狀態(tài)圖被喚醒。狀態(tài)被激活,進(jìn)入活動(dòng)狀態(tài)狀態(tài)退出活動(dòng)狀態(tài)數(shù)據(jù)對(duì)象的數(shù)值發(fā)生了變化。Stateflow中,是通過若干關(guān)鍵字來定義這些隱含事件的,這些關(guān)鍵字包括:change或chg:數(shù)據(jù)對(duì)象發(fā)生變化時(shí)發(fā)生相應(yīng)的事件。enter或en:進(jìn)入某個(gè)狀態(tài)時(shí)發(fā)生相應(yīng)的事件。exit或ex:退出某個(gè)狀態(tài)時(shí)發(fā)生相應(yīng)的事件。tick:與wakeup效果一致。wakeup:當(dāng)狀態(tài)圖被喚醒時(shí)發(fā)生相應(yīng)的事件。第64頁/共68頁簡(jiǎn)化并行狀態(tài)圖的設(shè)計(jì)隱含事件第64頁/共68頁在使用隱含事件時(shí)要利用相應(yīng)的關(guān)鍵字以及具體的對(duì)象,其基本語法為:event(object_name)Stateflow還定義了隱含條件,它需要通過關(guān)鍵字in來定義:[in(state_name)],in函數(shù)內(nèi)定義的state_name狀態(tài)當(dāng)前處于激活的狀態(tài),則該條件為真,否則為假第65頁/共68頁在使用隱含事件時(shí)要利用相應(yīng)的關(guān)鍵字以及具體的對(duì)象,其基本語法時(shí)間邏輯時(shí)間邏輯(TemporalLogic)是在Stateflow模型中根據(jù)某些事件的發(fā)生次數(shù)來進(jìn)行判斷的邏輯運(yùn)算,這類運(yùn)算得到的結(jié)果為邏輯量,非真即假??梢詫r(shí)間邏輯當(dāng)作事件或者條件應(yīng)用于系統(tǒng)的轉(zhuǎn)移中。時(shí)間邏輯對(duì)建立那些需要統(tǒng)計(jì)某些信號(hào)次數(shù)并且信號(hào)次數(shù)達(dá)到一定數(shù)量才進(jìn)行狀態(tài)切換的系統(tǒng)非常有用。時(shí)間邏輯定義關(guān)鍵字:after(n,Event):當(dāng)事件Event發(fā)生了n次以后,after運(yùn)算得到的結(jié)果都是邏輯真before(n,Event):當(dāng)事件Event發(fā)生n次以前before運(yùn)算符得到的結(jié)果都是邏輯真at(n,Event):當(dāng)事件Event第n次發(fā)生時(shí),at運(yùn)算得到的結(jié)果是邏輯真every(n,Event):當(dāng)事件Event每發(fā)生n次時(shí),every運(yùn)算得到的結(jié)果是邏輯真第66頁/共68頁時(shí)間邏輯第66頁/共68頁時(shí)間邏輯應(yīng)用時(shí)間邏輯可以作為條件或者事件應(yīng)用在轉(zhuǎn)移標(biāo)簽中;時(shí)間邏輯是不能用于默認(rèn)轉(zhuǎn)移或者流程圖中的轉(zhuǎn)移的。如果將時(shí)間邏輯用于控制轉(zhuǎn)移,則轉(zhuǎn)移的源狀態(tài)就是時(shí)間邏輯的相關(guān)狀態(tài)(AssociateState);如果將時(shí)間邏輯用于狀態(tài)動(dòng)作,則包含狀態(tài)動(dòng)作的狀態(tài)就是時(shí)間邏輯的相關(guān)狀態(tài)(AssociateState)。第67頁/共68頁時(shí)間邏輯應(yīng)用時(shí)間邏輯是不能用于默認(rèn)轉(zhuǎn)移或者流程圖中的轉(zhuǎn)移的。會(huì)計(jì)學(xué)69Stateflow教程會(huì)計(jì)學(xué)1Stateflow教程Stateflow概述:

Stateflow是集成于Simulink中的圖形化設(shè)計(jì)與開發(fā)工具,主要用于針對(duì)控制系統(tǒng)中的復(fù)雜控制邏輯進(jìn)行建模與仿真,Stateflow適用于針對(duì)事件響應(yīng)系統(tǒng)(ReactiveSystem)進(jìn)行建模和仿真。與事件響應(yīng)系統(tǒng)相對(duì)應(yīng)的就是動(dòng)態(tài)變換系統(tǒng)(DynamicTransformationalSystem)。動(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)就需要利用Stateflow來進(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)行建模和仿真。第1頁/共68頁Stateflow概述:Statefl第一章創(chuàng)建狀態(tài)圖Stateflow編輯器創(chuàng)建和編輯狀態(tài)圖第2頁/共68頁第一章創(chuàng)建狀態(tài)圖Stateflow編輯器第2頁/共6Stateflow編輯器創(chuàng)建Simulink模型1.直接在MATLAB命令行窗體中鍵入指令sfnew2.打開Simulink庫瀏覽器,在庫瀏覽器中找到Stateflow的模塊庫第3頁/共68頁Stateflow編輯器創(chuàng)建Simulink模型第3頁/雙擊模型文件或者庫文件中的Stateflow圖塊打開Stateflow編輯器

執(zhí)行Stateflow編輯器File菜單下的ChartProperties命令,打開屬性框第4頁/共68頁雙擊模型文件或者庫文件中的Stateflow圖塊打開S創(chuàng)建和編輯狀態(tài)圖插入圖形對(duì)象1.創(chuàng)建狀態(tài)在圖形對(duì)象面板的狀態(tài)圖標(biāo)上按下鼠標(biāo)左鍵并保持,將狀態(tài)Stateflow編輯器的空白區(qū)域中Keyword:StateActions就是狀態(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)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作during:當(dāng)狀態(tài)保持其活動(dòng)狀態(tài)時(shí)執(zhí)行相應(yīng)的動(dòng)作第5頁/共68頁創(chuàng)建和編輯狀態(tài)圖插入圖形對(duì)象Keyword:State在狀態(tài)上單擊鼠標(biāo)右鍵,在快捷菜單中選擇Properties命令,可以通過狀態(tài)的屬性對(duì)話框進(jìn)一步定義狀態(tài)2.創(chuàng)建連接節(jié)點(diǎn)

連接節(jié)點(diǎn)作為轉(zhuǎn)移通路的判決點(diǎn)或匯合點(diǎn),也是在狀態(tài)圖中常用的圖形元素之一,特別是在流程圖中,由于流程圖不能包含任何狀態(tài),因此只有依靠連接節(jié)點(diǎn)完成通路的連接和判斷分支,連接節(jié)點(diǎn)不是記憶元件。第6頁/共68頁在狀態(tài)上單擊鼠標(biāo)右鍵,在快捷菜單中選擇Pro在圖形對(duì)象面板的連接節(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)移轉(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)移方向的約束。第7頁/共68頁在圖形對(duì)象面板的連接節(jié)點(diǎn)圖標(biāo)上按下鼠標(biāo)左鍵并保持,將狀態(tài)創(chuàng)建轉(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)的邊緣即可,第8頁/共68頁創(chuàng)建轉(zhuǎn)移的具體步驟是:第8頁/共68頁給轉(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),但是不論出現(xiàn)哪幾個(gè)部分,標(biāo)簽的內(nèi)容必須按照上面指定的順序書寫。條件動(dòng)作與轉(zhuǎn)移動(dòng)作兩者之間的區(qū)別:條件動(dòng)作在條件滿足的情況下就能夠執(zhí)行,而轉(zhuǎn)移動(dòng)作需要在整個(gè)轉(zhuǎn)移通路都有效的情況下,在執(zhí)行轉(zhuǎn)移的時(shí)候才執(zhí)行。第9頁/共68頁給轉(zhuǎn)移添加標(biāo)簽的方法:組成轉(zhuǎn)移標(biāo)簽的四個(gè)部分不一定完整地出現(xiàn)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)被激活時(shí),必有相應(yīng)的確定的某個(gè)狀態(tài)被激活。而默認(rèn)轉(zhuǎn)移就定義了當(dāng)狀態(tài)機(jī)被激活或者層次模型中父層次狀態(tài)被激活時(shí),具體哪個(gè)子狀態(tài)被激活。第10頁/共68頁Stateflow中都可以使用三類語法元素作為動(dòng)作:第10創(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)行的二義性,因此,正確的使用默認(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ò)誤第11頁/共68頁創(chuàng)建默認(rèn)轉(zhuǎn)移的方法如下:第11頁/共68頁5.添加注釋:如果需要在Stateflow的框圖中使用LaTex字符集,則需要按照下列步驟完成:(1)在已經(jīng)添加的文本上單擊鼠標(biāo)右鍵,這時(shí)將顯示快捷菜單;(2)選擇快捷菜單中TextFormat子菜單中的LaTexInstructions復(fù)選項(xiàng);(3)用鼠標(biāo)單擊已經(jīng)添加的文本注釋,重新進(jìn)入文本編輯模式;(4)添加LaTex字符,例如鍵入y={\itAe}^{\alphax}sin(\beta\itt);(5)在文本編輯區(qū)外單擊鼠標(biāo)完成注釋的添加,此時(shí)的注釋內(nèi)容將變?yōu)閥=Aeaxsin(bt),如圖所示。第12頁/共68頁5.添加注釋:如果需要在Stateflow的框圖中使用編輯圖形對(duì)象外觀:

改變尺寸和位置單擊右鍵單擊右鍵在注釋上單擊鼠標(biāo)右鍵而出現(xiàn)的快捷菜單。在菜單中,共計(jì)有三個(gè)子菜單可以用來修改注釋文本的外觀,分別為:FontSize:設(shè)置注釋文本的尺寸。TextFormat:設(shè)置注釋文本的基本格式,包括粗體、斜體和LaTex字符支持。TextAlignment:設(shè)置注釋文本的對(duì)齊方式,包括左對(duì)齊、居中和右對(duì)齊。第13頁/共68頁編輯圖形對(duì)象外觀:改變尺寸和位置單擊右鍵單擊右鍵在注釋上單第二章狀態(tài)圖的仿真狀態(tài)圖的基本概念事件數(shù)據(jù)對(duì)象狀態(tài)圖的更新模式stateflow模型查看器第14頁/共68頁第二章狀態(tài)圖的仿真狀態(tài)圖的基本概念第14頁/共68頁狀態(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)處于激活狀態(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)。第15頁/共68頁狀態(tài)圖的基本概念狀態(tài)圖管理和維護(hù)著當(dāng)前模型中活動(dòng)的狀態(tài)。一事件:添加事件:執(zhí)行Stateflow圖形編輯器Add菜單下Event子菜單中的任何一個(gè)命令,例如執(zhí)行Local命令,則Stateflow將彈出如圖所示的對(duì)話框。Scope屬性:該屬性定義事件的作用類型。在Add菜單下的Event子菜單中具有三個(gè)菜單命令,分別為L(zhǎng)ocal、InputfromSimulink和OutputtoSimulink,通過這三個(gè)菜單命令定義事件,得到的Scope屬性不一致。具有Local屬性的事件是在狀態(tài)圖內(nèi)部發(fā)揮作用。具有InputfromSimulink屬性的事件是從Simulink框圖輸入到Stateflow中的,也就是Stateflow框圖的外部觸發(fā)事件。具有OutputtoSimulink屬性的事件是從Stateflow框圖輸出到Simulink中的,即利用Stateflow定義的事件驅(qū)動(dòng)或者觸發(fā)其他Stateflow框圖或者子系統(tǒng)動(dòng)作。第16頁/共68頁事件:添加事件:Scope屬性:該屬性定義事件的作用類型。如果用戶設(shè)置事件的Scope屬性為InputfromSimulink或者OutputtoSimulink,則添加事件的對(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ā)、上升沿觸發(fā)。FunctionCall(函數(shù)調(diào)用)是一類比較特殊的觸發(fā)屬性第17頁/共68頁如果用戶設(shè)置事件的Scope屬性為Inputfrom創(chuàng)建事件實(shí)例:

運(yùn)行過程中,單擊ManualSwitch模塊向Stateflow框圖發(fā)出事件第18頁/共68頁創(chuàng)建事件實(shí)例:運(yùn)行過程中,單擊ManualSwitc使用多個(gè)輸入事件:同一個(gè)Stateflow的圖塊可以使用多個(gè)輸入事件。但是,不論用戶為Stateflow的圖塊定義了多少個(gè)輸入事件,每個(gè)Stateflow的圖塊都只能具有一個(gè)事件輸入端口。因此,在向Stateflow的圖塊增加不止一個(gè)輸入事件時(shí),需要將不同的事件通過Mux塊組合成為輸入事件向量,然后將組合后的輸入事件向量連接到Stateflow圖塊上。第19頁/共68頁使用多個(gè)輸入事件:同一個(gè)Stateflow的圖塊可以使用數(shù)據(jù)對(duì)象:Stateflow使用數(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/Stateflow模型運(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ù)值。DataStoreMemory:所定義的數(shù)據(jù)對(duì)象與Simulink數(shù)據(jù)空間共享,也就是說,該數(shù)據(jù)對(duì)象與Simulink工作空間中的某個(gè)數(shù)據(jù)對(duì)象相互綁定。此時(shí)該數(shù)據(jù)對(duì)象的名稱必須與Simulink工作空間中數(shù)據(jù)對(duì)象的名稱一致。第20頁/共68頁數(shù)據(jù)對(duì)象:Stateflow使用數(shù)據(jù)對(duì)象來管理維護(hù)數(shù)據(jù)類型模式(DataTypeMode)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ù)類型Fixedpoint類型用于模型的定點(diǎn)數(shù)據(jù)設(shè)置,若選擇了該類型,則可以完成Stateflow模型數(shù)據(jù)的量化處理。第21頁/共68頁數(shù)據(jù)類型模式(DataTypeMode)第21頁/共6狀態(tài)圖的更新模式不是所有的有限狀態(tài)系統(tǒng)都具有外部事件的定義,有些模型就沒有針對(duì)Stateflow模型定義任何輸入事件,可是Stateflow的模型依然能夠正常地運(yùn)行。那么對(duì)于這種沒有定義任何輸入事件的系統(tǒng),它是如何運(yùn)行的呢?這就是狀態(tài)圖的更新模式所發(fā)揮的作用。Stateflow的框圖有三種更新模式,分別為Inherited、Discrete和Continuous第22頁/共68頁狀態(tài)圖的更新模式不是所有的有限狀態(tài)系統(tǒng)都具有外部事件的定義,系統(tǒng)默認(rèn)使用Inherited更新模式,在這種更新模式下可能存在以下三種情況:(1)有輸入事件定義。如果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框圖既沒有定義輸入事件,又沒有定義輸入數(shù)據(jù),則Stateflow框圖繼承其父層次模型的更新周期。如果Stateflow框圖位于系統(tǒng)模型的頂層,則Stateflow框圖繼承模型的仿真周期作為自己的更新周期。Discrete更新模式,是將Stateflow框圖看做有固定周期的離散塊,在設(shè)置該更新模式時(shí),Stateflow框圖屬性對(duì)話框中的SampleTime屬性需要設(shè)置具體的更新周期,單位為秒。Continuous更新模式,則Stateflow框圖好比Simulink模型中的一個(gè)連續(xù)系統(tǒng)模塊,此時(shí)Stateflow的框圖將按照系統(tǒng)仿真步長(zhǎng)完成更新。第23頁/共68頁系統(tǒng)默認(rèn)使用Inherited更新模式,在這種更新模式下注意:如果為框圖定義了輸入事件,則框圖的更新模式就只能設(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)ChartAtInitialization選項(xiàng)。選擇了該選項(xiàng),則意味著當(dāng)前的Stateflow框圖將在模型初始化階段就被激活,這樣,在后續(xù)的事件觸發(fā)過程中,就直接進(jìn)行狀態(tài)的轉(zhuǎn)換了第24頁/共68頁注意:如果為框圖定義了輸入事件,則框圖的更新模式就只能設(shè)置為第三章流程圖轉(zhuǎn)移沖突流程圖的創(chuàng)建圖形函數(shù)stateflow模型調(diào)試器第25頁/共68頁第三章流程圖轉(zhuǎn)移沖突第25頁/共68頁概述:在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)移沖突的處理原則。假設(shè)當(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論