




已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
stateflow教程 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)通常利用一些自然語(yǔ)言或者邏輯表達(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)行建模和仿真 第一章創(chuàng)建狀態(tài)圖 Stateflow編輯器創(chuàng)建和編輯狀態(tài)圖 Stateflow編輯器 創(chuàng)建Simulink模型1 直接在MATLAB命令行窗體中鍵入指令sfnew2 打開Simulink庫(kù)瀏覽器 在庫(kù)瀏覽器中找到Stateflow的模塊庫(kù) 雙擊模型文件或者庫(kù)文件中的Stateflow圖塊打開Stateflow編輯器 執(zhí)行Stateflow編輯器File菜單下的ChartProperties命令 打開屬性框 創(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)作 在狀態(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)不是記憶元件 在圖形對(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)移方向的約束 創(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)的邊緣即可 給轉(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í)行 Stateflow中都可以使用三類語(yǔ)法元素作為動(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)被激活 創(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ò)誤 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 如圖所示 編輯圖形對(duì)象外觀 改變尺寸和位置 單擊右鍵 單擊右鍵 在注釋上單擊鼠標(biāo)右鍵而出現(xiàn)的快捷菜單 在菜單中 共計(jì)有三個(gè)子菜單可以用來修改注釋文本的外觀 分別為 FontSize 設(shè)置注釋文本的尺寸 TextFormat 設(shè)置注釋文本的基本格式 包括粗體 斜體和LaTex字符支持 TextAlignment 設(shè)置注釋文本的對(duì)齊方式 包括左對(duì)齊 居中和右對(duì)齊 第二章狀態(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)處于激活狀態(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ì)話框 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)作 如果用戶設(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ā)屬性 創(chuàng)建事件實(shí)例 運(yùn)行過程中 單擊ManualSwitch模塊向Stateflow框圖發(fā)出事件 使用多個(gè)輸入事件 同一個(gè)Stateflow的圖塊可以使用多個(gè)輸入事件 但是 不論用戶為Stateflow的圖塊定義了多少個(gè)輸入事件 每個(gè)Stateflow的圖塊都只能具有一個(gè)事件輸入端口 因此 在向Stateflow的圖塊增加不止一個(gè)輸入事件時(shí) 需要將不同的事件通過Mux塊組合成為輸入事件向量 然后將組合后的輸入事件向量連接到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ì)象的名稱一致 數(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ù)的量化處理 狀態(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 有輸入事件定義 如果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)完成更新 注意 如果為框圖定義了輸入事件 則框圖的更新模式就只能設(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)換了 第三章流程圖 轉(zhuǎn)移沖突流程圖的創(chuàng)建圖形函數(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)移沖突的處理原則 假設(shè)當(dāng)前事件E發(fā)生并且條件C也滿足 則四個(gè)轉(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)移有效 則執(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)移由于都僅僅使用條件進(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圖形編輯器中單擊右鍵 在彈出的菜單中選擇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)行重新排序 常用邏輯結(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 if 條件1 動(dòng)作Aif 條件2 動(dòng)作B switch case for循環(huán)for index 0 index nloops index Action while循環(huán) while Condition Action do while循環(huán) do Action while Condition 流程圖回溯現(xiàn)象 if c1 act1 if c2 act2 elseif c3 act3 else act4 分析 假設(shè) 條件c1為真 條件c2和條件c3為假 注意 在流程圖中 僅存在轉(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) 狀態(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)建 創(chuàng)建圖形函數(shù) stateflow調(diào)試器 狀態(tài)面板 StatusPane 控制面板 ControlPane 選項(xiàng)面板 ControlPane 顯示面板 DisplayPane 狀態(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)試模式 第四章有限狀態(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)作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í)行 討論車載播放器 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 在動(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章將要介紹的本地事件廣播 輸出狀態(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)用 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ù) 綁定事件如果將事件與狀態(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í)其子狀態(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)記錄的狀態(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處于活動(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)部子狀態(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í)行的次序 1 當(dāng)Super父狀態(tài)被首次激活時(shí) 2 當(dāng)父狀態(tài)處于活動(dòng)狀態(tài)而此時(shí)發(fā)生了某個(gè)事件觸發(fā)時(shí) 示例 討論 轉(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ū)域是有限的 為了解決這些問題 就引出了子狀態(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 第五章有限狀態(tài)系統(tǒng) 并行機(jī)制 并行機(jī)制本地事件廣播隱含事件時(shí)間邏輯 并行機(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) 當(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)作 圖形盒的應(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ì)象 本地事件廣播 定義本地事件 本地事件主要用于包含并行狀態(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) 它的語(yǔ)法如下 send event name state name 受限事件廣播將定義在狀態(tài)內(nèi)部的事件叫做受限事件 QualifiedEvent 在動(dòng)作中實(shí)現(xiàn)受限事件廣播的方法是通過以下語(yǔ)法實(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)作 一般事件廣播的執(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í)行 假設(shè)當(dāng)前處于活動(dòng)的子狀態(tài)為A1a和A2a 當(dāng)事件E1發(fā)生時(shí) 早期返回邏輯 Stateflow在處理狀態(tài)機(jī)工作時(shí)實(shí)際上是一種單線程的工作方式 事件廣播會(huì)打斷當(dāng)前的工作流程 而且只有在廣播事件相關(guān)的工作全部結(jié)束之后 才繼續(xù)處理原來的后續(xù)工作 在這種處理方式下 事件廣播對(duì)原有的工作流程有時(shí)可能會(huì)造成一些影響 并且產(chǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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年地區(qū)事業(yè)單位招聘面試真題試卷:社會(huì)學(xué)與社會(huì)政策
- 2025年P(guān)ETS一級(jí)試卷:英語(yǔ)詞匯記憶技巧與方法
- 2025年耐高溫超輕硅酸鈣隔熱保濕材料項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 現(xiàn)任高管在職證明及職責(zé)描述(5篇)
- 2025年安全工程師考試模擬試卷:安全生產(chǎn)管理實(shí)務(wù)案例分析
- 2025年環(huán)保袋項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 農(nóng)民生物技術(shù)利用推廣合作協(xié)議
- 2025年全球石油市場(chǎng)供需分析及價(jià)格波動(dòng)對(duì)全球地緣政治影響報(bào)告
- 2025年定制木門項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 農(nóng)業(yè)生物技術(shù)助力種業(yè)高效生產(chǎn):2025年創(chuàng)新技術(shù)與應(yīng)用策略報(bào)告
- 化工工藝學(xué)期末復(fù)習(xí)題答案
- 二手龍門吊購(gòu)銷合同范本
- 罰款分期付款申請(qǐng)書
- 2023-2024學(xué)年江蘇省江都市小學(xué)語(yǔ)文三年級(jí)期末評(píng)估考試題詳細(xì)參考答案解析
- 醫(yī)院物業(yè)服務(wù)招標(biāo)綜合評(píng)分表
- 軟件工程導(dǎo)論(第六版)張海藩-牟永敏課后習(xí)題答案
- 干式變壓器溫控器試驗(yàn)報(bào)告
- PSS的生產(chǎn)工藝及原理課件
- 物體打擊應(yīng)急演練總結(jié)
- 環(huán)境保護(hù)局水質(zhì)自動(dòng)在線監(jiān)測(cè)儀、站房及3年運(yùn)營(yíng)維護(hù)服務(wù)招投標(biāo)書范本
- 天然氣管道工程管道焊接施工方案
評(píng)論
0/150
提交評(píng)論