< 上一個課程 | 下一個課程 >

第 9 課:指定高層次行為並模擬模型

在本課中,您將使用狀態圖指定控制系統元件的高層次行為,並模擬完整的模型。
在起始設計中,您已使用狀態圖來指定 ControlSystem 的行為。由於 ControlSystem 的結構現在已按照其元件指定,所以您需要新增每個元件區塊的狀態圖以反映其行為,並且需要修改 ControlSystem 狀態圖以反映其協同行為。

:

  1. 若要新增感應器的狀態圖,請在瀏覽器中,選取感應器區塊,並選取新增 > 圖表 > 狀態圖
  2. 使用「狀態」工具 「狀態」工具,新增名稱為 idlereading 的兩個狀態。
  3. 使用「預設轉移」工具 「預設轉移」工具,在 idle 狀態新增預設轉移。
  4. 使用「轉移」工具 「轉移」工具,新增從 idle 狀態到 reading 狀態的轉移。在出現在轉移上的位置保留元中,新增名稱為 evRead 的事件。
  5. 新增從 reading 狀態回到 idle 狀態的轉移。
在接收 evRead 事件時,「感應器」部分從 idle 狀態轉移到 reading 狀態。然後,將溫度值從 ControlSystem(稱作 cs)轉移到其溫度屬性,並回到 idle。 Sensor 狀態圖應該類似於以下範例。
Sensor 狀態圖
註: reading 狀態右上角的符號 符號 指出狀態在「進入動作」或「結束動作」欄位中有文字。如果您按一下該符號,它會在狀態符號上的「回應」區段中顯示和隱藏文字。範例顯示「回應」區段中的文字。

在此分析層次上,Actuator 部分在指令指示時開啟或關閉額定熱量。熱量委派給 ControlSystem,並流向 SystemUnderControl

  1. 若要新增掣動器的狀態圖,請在瀏覽器中,選取「掣動器」區塊,並選取新增 > 圖表 > 狀態圖
  2. 使用「狀態」工具新增三個狀態,名稱分別是 idleheating_onheating_off
  3. 新增預設轉移為 idle 狀態。
  4. 使用「條件連接器」工具 「條件連接器」工具,將條件連接器新增至圖表。
  5. 新增轉移,從 idle 到條件,從條件到 heating_on,並從條件到 heating_off
  6. 新增轉移,從 heating_on 到 idle,並從 heating_off 到 idle。
  7. 按兩下從 idle 至條件的轉移。在「功能」視窗中,將觸發程式設定為 tm(750)。 按一下確定
  8. 按兩下轉移,從條件到 heating_on。 在「功能」視窗中,將 Guard 設定為 heat_data,並輸入 cs->setHeat(rating); 作為動作碼。 按一下確定
  9. 按兩下轉移,從條件到 heating_off。 在「功能」視窗中,將 Guard 設定為 else,並輸入 cs->setHeat(0.0); 作為動作碼。 按一下確定
「掣動器」的已完成狀態圖必須類似下面的範例:
掣動器狀態圖 - 已完成
註: 當您使用「特性」視窗來指定轉移的觸發程式、保護和動作時,Rhapsody® 會自動新增方括弧和正斜線字元等轉移語法元素。或者,當您直接將文字輸入到圖上的轉移位置保留元中時,您需要自行輸入這些字元。
若要建立控制器狀態圖,「控制器」僅需要回應作業模式中的變更,其中在待命模式中,必須停用加熱程式,而在標準模式中,必須啟用加熱程式。 稍後,隨著設計的演進,控制器需要控制演算法。
  1. 選取瀏覽器中的控制器區塊,並新增 > 新圖表 > 狀態圖
  2. 使用「狀態」工具,在圖表中新增兩個狀態,名稱分別是 controllingstandingby
  3. 新增預設轉移為 controlling 狀態。
  4. 新增轉移,從 controlling 到 standingby,並將事件位置保留元設定為叫作 evStandby 的新事件。
  5. 新增轉移,從 standingby 到 controlling,並設定叫作 evNormal 的新事件。
  6. 按兩下 controlling 狀態以開啟「特性」視窗。在動作項目上新增下列文字行:setHeat_data(ENABLED);
  7. 按一下確定
  8. 按兩下 standingby 狀態。在動作項目上新增下列文字行:setHeat_data(DISABLED);
  9. 按一下確定
已修訂的控制器狀態圖必須類似下列類似:
Controller 狀態圖 - 已修訂

更新 ControlSystem 狀態圖

現在,必須變更在 ControlSystem 起始狀態圖中指定的行為,以反映其組件提供的行為。具體地說,溫度傳送要由 Sensor 元件執行,因此 ControlSystem 必須將溫度流程委派給其 Sensor。同樣地,Controller 現在命令其 Actuator 產生委派回 ControlSystem 的熱量流程。ControlSystem 還必須將模式變更事件委派給 Controller。

  1. 若要清除圖表繪圖區,請選取視窗 > 全部關閉
  2. 在瀏覽器中,開啟 ControlSystem 的狀態圖。
  3. 在畫面元素周圍繪製選取框,並將它們作為一個群組向下移動到圖表框架底端,以容許 On 狀態延長約 50%。
  4. 按住 Alt 鍵,將 On 狀態符號向下展開約 50% 高,向右展開約 50% 寬。
  5. 使用「And 線條」工具,按一下 On 狀態左邊以錨定 "and" 線條,沿 On 狀態水平繪製以建立另一個垂直區段。按一下 On 狀態右側以完成該線條。移動「And 線條」,以便它剛好位於 Standby 狀態下方。
  6. 按兩下上方區段中的空白區域,以開啟該區段(狀態)的「特性」視窗。將「名稱:」設定為 delegating_mode。按一下確定。對下方區段執行相同的作業,並將其名稱設定為 delegating_temperature。將每個區段的「顯示選項」設定為「名稱」。
  7. 將 Standby 狀態移至右側,以將它放置在 On 狀態右邊緣附近。
  8. 若要刪除兩個 evMode 轉移,請用滑鼠右鍵按一下這些轉移,然後選取從模型刪除
  9. 使用傳送動作工具 ,在 Normal 與 Standby 狀態之間新增兩個垂直間隔的傳送動作。遵循下列步驟來定義傳送動作:
    1. 按兩下上方傳送動作以開啟「特性」視窗。設定 Target: itsController;設定 Event: evStandby。按一下確定
    2. 新增從 Normal 狀態到上方傳送動作的轉移,以及從傳送動作到 Standby 狀態的另一個轉移。
    3. 用滑鼠右鍵按一下轉出 Normal 的轉移,然後選取觸發程式 > evMode
    4. 按兩下下方傳送動作以開啟其「特性」視窗。設定 Target: con;設定 Event: evNormal。按一下確定
    5. 繪製從 Standby 狀態到下方傳送動作的轉移,以及從傳送動作到 Normal 狀態的另一個轉移。不需要考量傳送動作符號的方向。僅需考慮轉移的方向。
    6. 用滑鼠右鍵按一下轉出 Standby 的轉移,然後選取觸發程式 > evMode
  10. 將「狀態」新增至 delegating_temperature 區段左側;將它命名為 idle。
  11. 將「傳送動作」新增至區段右側。設定 Target: sen;設定 Event: evRead。按一下確定
  12. 連接從 idle 狀態到傳送動作的轉移。用滑鼠右鍵按一下轉移,然後選取觸發程式 > chTemperature
  13. 連接從傳送動作到 idle 狀態的轉移。

完成的狀態圖應該類似於以下範例。

ControlSystem 狀態圖 - 已完成

完整模型模擬

若要產生和建置完整模型模擬的配置,請執行下列動作:

  1. 選取模擬 > 完整建置
  2. 檢閱「輸出」視窗中的「建置」頁面,以找出「建置已完成」訊息。
  3. 將會顯示一個 DOS 視窗,其中含有指出該模型「正在執行」的訊息。
  4. 按一下 Go Idle 按鈕 Go Idle 按鈕,開始模擬。模擬會自動停止,以容許您設定動畫狀態圖和其他構件來觀察執行。
  5. 選取工具 > 模擬的狀態圖,並選取 ControlSystem 狀態圖 Context[0]->cs 實例。展開該狀態圖以顯示檢測畫面元素。
  6. 選取工具 > 模擬的狀態圖,並選取 Controller 狀態圖 Context[0]->cs->con 實例。
  7. 選取工具 > 模擬的狀態圖,並選取 Actuator 狀態圖 Context[0]->cs->act 實例。您可能還要選取工具 > 模擬的狀態圖,並選取 Sensor 狀態圖 Context[0]->cs->sen 實例,但是模擬作業不需要此圖。
  8. 並排視窗以排列這些狀態圖。請注意,您可以將縮放係數減少為 75%,並且仍然可以閱讀圖表上大部分的資訊。
  9. 按一下「模擬」控制台上的執行按鈕 執行按鈕,以回復動畫並使用「控制器」狀態圖上的面板按鈕電源和模式,以推動元件層次的系統行為。 您可能需要按兩次「電源」按鈕,才能開啟 ControlSystem。
  10. 您可以從瀏覽器開啟元件實例的「特性」視窗,來觀察溫度和熱量屬性的值。例如,在瀏覽器中,找出 SystemUnderControl 區塊的實例 Context[0]->s。按兩下該實例,並固定「特性」視窗,如以下範例所示:
    Context[0]->s 實例的「特性」視窗

課程回顧

本指導教學的最後一課將列出您可以用來將您在模型中定義的規格移交給軟體工程師的技術。
在這一課,您學到下列各項:
  • 在兩個狀態圖中定義高層次行為
  • 新增轉移
  • 在類別區段中顯示和隱藏文字
  • 修改先前建立的狀態圖
  • 執行完整模型模擬
< 上一個課程 | 下一個課程 >

意見回饋