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

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

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

建立元件區塊的狀態圖

若要新增 Sensor 的狀態圖,請執行下列動作:

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

在此分析層次,Actuator 組件在得到命令時,會打開或關閉額定的熱量。熱量委派給 ControlSystem 並流到 SystemUnderControl。

若要新增 Actuator 的狀態圖,請執行下列動作:
  1. 在瀏覽器中選取 Actuator 區塊,然後選取新增 > 圖表 > 狀態圖
  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 的轉移。在「特性」視窗中,將「保護:」設定為 heat_data,並輸入 cs->setHeat(rating); 作為「動作」的程式碼。按一下確定
  9. 按兩下從條件至 heating_off 的轉移。在「特性」視窗中,將「保護:」設定為 else,並輸入 cs->setHeat(0.0); 作為「動作」的程式碼。按一下確定
Actuator 的完成狀態圖應該類似於以下範例。
Actuator 狀態圖 - 已完成
註: 當您使用「特性」視窗來指定轉移的觸發程式、保護和動作時,Rhapsody® 會自動新增方括弧和正斜線字元等轉移語法元素。或者,當您直接將文字輸入到圖上的轉移位置保留元中時,您需要自行輸入這些字元。

建立 Controller 狀態圖

此時,在設計中,Controller 僅需回應作業模式的變更,在待命模式中,它必須停用加熱器,而在正常模式中,它必須啟用加熱器。稍後,隨著設計發展,Controller 需要控制演算法。
  1. 在瀏覽器中選取 Controller 區塊,然後選取新增 > 新建圖表 > 狀態圖
  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 狀態圖應該類似於以下範例。
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. 按一下「模擬」控制台上的 Go 按鈕 Go 按鈕 以回復動畫,並使用 Controller 狀態圖上的畫面按鈕(「電源」和「模式」),以驅動元件層次的系統行為。您可能需要按兩次「電源」按鈕,才能開啟 ControlSystem。
  10. 您可以從瀏覽器開啟元件實例的「特性」視窗,來觀察溫度和熱量屬性的值。例如,在瀏覽器中,找出 SystemUnderControl 區塊的實例 Context[0]->s。按兩下該實例,並固定「特性」視窗,如以下範例所示:
    Context[0]->s 實例的「特性」視窗

課程回顧

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

回饋