MBSE建模學習之四:活動(Activity)及活動圖


     

活動(Activity

活動(Activity)是一種行為(Behavior)元素,它是行為元素的子類。首先活動是一個“類”(class)。SysML中,它也是一個模塊(block),所以它有“類”的特征,可以有屬性、方法,還可以有下層的“行為”元素,形成一個多層嵌套的行為模型。其次,活動是一個“行為”元素,有輸入參數和輸出參數。活動元素的特殊之處在于它可以包含各種可以說明一個行為過程的元素,包括“動作”(Action)、控制流(ControlFlow)和對象流(ObjectFlow),以及其它說明控制邏輯的節點。

活動可以用來說明系統的功能,活動以及它包含的子活動元素、活動中的動作元素,可以形成一個系統的功能結構樹。在進行系統的功能分析的時候,它是重要的說明元素。

作為一個行為元素,活動可以作為一個模塊(Block)的擁有行為,用于說明一個模塊的功能。此外,活動也可以作為其它行為元素的更具體的說明。如,對一個用例(UseCase)進行更詳細的說明,可以把活動元素作為用例的擁有行為(用例也是一種行為類BehavioredClassifier,可以擁有行為)進行說明;活動也可以作為狀態機中的狀態(State)的內部行為,或系統處于某個狀態時進行的工作;活動也可以作為狀態轉移(Transition)的影響(effect),說明狀態轉移時發生的行為。

在“智睿思維基于模型的軟件”(MBSES)中,你可以為一個模塊增加擁有行為的時候,增加一個活動元素。也可以直接在一個包中增加一個活動元素。

UML\SysML是面向對象的語言,活動是一個說明具體行為過程的元素。可以說活動和它的活動圖是用UML\SysML語言寫的一段系統運行過程的“程序”。這段“程序”要有運行的語境(Context),也就是活動的過程可以讀寫的變量的范圍。這個語境就是活動所屬的模塊。如果活動沒有所屬模塊,那它自己就是自己的語境。在活動的過程中,可以讀寫它的語境中的屬性(Property)、可以調用所屬語境的其它行為(通過一個調用行為動作)。當然也可以調用(通過一個“調用操作動作”)另外一個模塊的操作(Operation)、接收(Reception,但必須通過當前模塊的一個部件(part)屬性或引用(reference)屬性。這是面向對象語言的“封裝”性原則所規定的,這個原則使我們定義的系統模型中功能調用關系是清晰的、范圍可控的。

活動圖示例

下面以一個具體的人造衛星做霍曼轉移、變軌過程的活動圖來說明活動圖中元素及其作用和意義。

人造衛星從一個較低運行軌道轉移到一個較高的運行軌道,需要兩次發動機點火、加速的過程。如右圖所示,人造衛星從低軌道“1”送往較高軌道“3”,先在低軌道“1”上瞬間加速,進入一個橢圓形的轉移軌道“2”。衛星由此橢圓軌道的近地點開始,抵達遠地點后再瞬間加速,進入另一個圓軌道(3),此即為目標軌道。


MBSE建模學習之四:活動(Activity)及活動圖的圖1

                           

首先定義這個過程的活動元素為“執行霍曼轉移”,有一個類型為“轉移命令”的輸入參數(命令中包含執行時間點、目標轉移軌道高度),以及一個類型為“命令響應”的返回參數(返回命令是否合法的響應,這是一個“流”類型的返回參數)。定義的語法如下:

“執行霍曼轉移(當前命令: 轉移命令) :命令響應{流}”

對應的活動圖如下(來源于《SysML精粹》圖6.1,進行了中文翻譯。此圖使用“智睿思維基于模型的系統工程軟件--MBSES制作):

MBSE建模學習之四:活動(Activity)及活動圖的圖2



活動圖中有以下幾類節點,說明如下。

動作(Action

動作是活動中的基本功能執行單元,動作是最底層的功能單元,不能(或當前建模要求下不需要)再分解。每個動作也可以有輸入(輸入栓)和輸出(輸出栓),作為這個動作處理的數據和結果。

在活動圖中,通過控制流(ControlFlow)或對象流(ObjectFow)將動作串聯起來,表示動作執行的過程順序。

在控制流或對象流中傳遞的數據稱為“令牌”(Token)。這些令牌可以是一次一個數據的方式傳遞,也可能是按“流”的方式連續的傳遞(針對對象流)。

一個動作能夠執行的條件是:

1)動作所在的活動在執行;

2)動作中所有連進來的控制流上都有控制令牌到達。

3)所有輸入對象流上都有足夠數量的對象令牌到達,以滿足相應輸入栓的最低多重性要求(值栓除外,值栓不需要對象流)。

如果一個動作沒有任何輸入的控制流及對象流,則當所在活動開始執行的時候,這個動作就開始執行。

活動圖中的具體動作節點類型有40多種,每一類動作節點有具體的用途。常用的動作類型如下:

1)不透明動作(OpaqueAction

不透明動作是用某種語言(包括自然語言,或某種編程語言)描述的一個功能。不透明動作一般用一個動詞短語描述一個功能。如圖中的“生成合法命令狀態響應”節點用自然語言說明一個系統將執行的一個功能;“:{C}當前軌道半徑=當前高度+地球.半徑”節點用C語言的賦值語句說明了這個節點將執行的數據處理功能。

2)調用行為動作(CallBehaviorAction)、調用操作動作(CallOperationAction

“調用行為動作”表示對另外一個行為元素(可能是另外一個具體的活動、交互或狀態機)的調用。調用操作動作表示對一個模塊的實例的操作的調用。這兩個“調用動作”在節點中一般會顯示顯示一個叉的符號。如圖中的“vc: 驗證命令”和“ma: 測量高度”動作就是兩個調用行為動作。

活動的分解,就是通過在一個活動的活動圖中定義“調用行為動作”調用下層的活動來實現的。在節點中,它的文本表示語法是:

“動作名稱:被調用的行為名稱”

MBSES軟件中,通過節點的右鍵菜單“設置行為元素”來設置調用的對應的行為。在進行活動圖的仿真時,遇到調用行為節點將會打開對應行為元素代表的圖,并繼續執行。

“調用操作動作”有一個“目標”輸入栓,這個“目標”栓的實例,就是將被調用的操作所在的實例。

這兩個調用動作節點,要求其它輸入栓和輸出栓應該和被調用的行為或操作的參數對應。

3)發送信號動作(SendSignalAction

發送信號動作表示動作將生成一個某種類型的信號,并發送到指定的“目標”輸入栓對象。信號的類型是在模型中某個地方定義的信號(Signal)元素。向一個對象發送信號,相當于調用了對象中和信號類型對應的“接收”(Reception)。“接收”和操作類似,只不過接收的名稱和接收的信號類型相同,參數和接收類型的屬性對應。對“接收”的調用都是“異步”的,意味著發送信號動作不會等待被調用“接收”對應的行為執行完,而是立即執行下一個動作。

發送信號的其它輸入栓應該和信號類型的屬性對應,從而作為生成信號屬性的數據。

如果沒有定義“目標”栓,則發送信號動作將把信號發送到當前圖中對應的“接收信號動作”(接收事件動作,而且事件類型是一個信號,見下一節)。上面示例圖中,“軌道半徑更新”發送信號動作沒有規定“目標”栓,則信號發送到當前圖中的“軌道半徑更新”接收事件動作。

4)接收事件動作(AcceptEventAction)

接收事件動作的觸發,除了上述動作執行的條件之外,還有一個條件就是接收事件動作的觸發器事件發生。一個接收事件動作可以有多個觸發器(Trigger),每個觸發器有一個觸發事件。觸發器的事件類型有“調用事件”(當前語境對象的某個操作被調用時發生)、“信號事件”(當語境對象接收到某個類型的信號時發生)、“變動事件”(當這個事件定義的表達式的值從“false”變為“true”的時候發生)、“時間事件”(見下節說明)、“任何接收事件”(當接收到一個包含任何除信號之外的其它“對象”的消息的時候發生。通常由一個SendObjectAction –“發送對象動作”引發)。

根據接收事件的類型不同,接收事件動作顯示的語法不一樣。當接收事件是一個“調用事件”的時候,顯示操作的定義;當接收事件是一個“信號接收事件”的時候,顯示信號類型的名稱(如示例圖中的“軌道半徑更新”接收事件動作);當接收事件是“變動事件”時,顯示“when 表達式”;當前信號類型是“時間事件”的時候,顯示“at 時間點”,或“after 時間點”;當接收事件類型是“任何接收事件”時,顯示“all”。

5)等待時間動作(Action)

當一個接收事件動作只有一個類型是時間事件的觸發器時,這個動作非正式的稱為“等待時間動作”,它的節點用一個沙漏的形狀來表示。

等待時間動作的時間事件,有兩種時間表示方法。一種是絕對時間,用“at 具體時間”來表示;另外一種是相對時間,用“after 多少時間”表示。等待時間動作只能有一個輸出的結果栓。當時間事件發生時,發生時間值被放到這個結果輸出栓上。如示例圖中的“at 當前命令.執行時間”,表示時間到達命令中的執行時間點的時候,時間事件觸發器觸發,才會執行下一步的“進入轉移軌道:點火推進器”動作。

6)控制操作(ControlOperator)

控制操作是一個構造型,它用于一個行為(一個具體活動、交互或狀態機),表示這個行為具有一個復雜的邏輯,能夠接收或返回一個“控制值類型”(ControlValueKind)的參數。“?控制操作?”會用于一個“調用行為動作”,表示調用的行為是對控制值類型數據的處理。“控制值類型”是一種特殊性數據,可以取值“使能”(enable)或“使不能”(disable)。一般情況下,當一個動作接收到“控制值類型”的參數的時候,根據值參數值動作進入可以執行狀態或不能執行(停止執行)狀態。但是一個具有“?控制操作?”構造型的調用行為動作收到“控制值類型”參數,不是停止這個調用行為動作執行,而是它會處理這個參數,而且可能根據具體邏輯返回一個“控制值類型”參數,然后傳遞給其它動作來控制其它動作的執行。

除了以上常用的動作類型,UML標準中還定義了其它30多種動作,這些動作主要是某些特殊類型對象的創建、讀取、刪除、銷毀等操作。

控制流(ControlFlow)和對象流(ObjectFlow

控制流和對象流把動作和控制節點連接起來,表示動作發生的順序和條件。在UML標準中,控制流和對象流都是“活動邊”(ActivityEdge)的子類型;換句話說,它們都是控制邊,控制邊有的特征,它們都有。

控制流表示控制令牌數據的傳遞。在MBSES軟件中,控制流用虛線表示。控制流直接把動作、控制節點連接起來。當一個動作連入的控制流有控制令牌到達的時候,這個動作才“可以”執行。控制流中的令牌可以理解為對“動作”的一次調用命令。一個動作所有的連入控制流是“與”的關系,也就是如果一個動作有多個連入的控制流,要所有控制流都有令牌到達動作才能夠執行。所以,當我們表示一個循環執行的動作的時候,不能把這個動作輸出的控制流又連回到這個動作,而應該在連入自己之前,和別的連入控制流(首次執行連入的控制流)用一個“合并”節點合并為一個連入的控制流。如上述活動圖中“軌道半徑更新”接收信號事件動作前后的合并節點和決定節點。

對象流中傳輸的是數據或其它定義的類型(如水流、電流等任何定義的“模塊”類型或值類型)的實例對象,或者活動參數代表的對象。對象流中的“對象”令牌是動作執行中處理的內容,類似是“動作”的輸入、輸出參數。在MBSES軟件中對象流用實線表示。

對象流必須通過“栓”(Pin)連到動作上,除非對象流中間用一個“對象節點”的方式簡化兩端的栓表示法。

控制流或對象流的“守衛條件”指這個邊能執行的條件;例如上述活動圖中驗證命令之后的“決定節點”的兩個輸出邊,“[命令是否合法=]”和“[命令是否合法=]”表示兩個輸出對象流路徑的執行條件。

活動邊“概率”屬性表示這條邊能夠走過的概率;“權重”表示當這個邊上需要的最小令牌數量條件,當這條活動邊上通過的令牌數量滿足這個權重條件的時候才會通過。當對象流上流過的對象是“流”的時候,可以定義活動邊上對象通過的“比率”值,這個值應該是一個單位時間內通過的對象數量。如“0.2kg/s”。當通過的每個對象之間的時間間隔為0,則是“連續”;否則是“離散”。

對象節點(ObjectNode

對象節點對動作之間傳輸的對象進行定義。對象節點的類型可以是“模塊”(Block)或其它數據類型。它可以代表一種數據,也可以代表我們的模型中定義的任何物質。

對象節點一般是作為一個動作(Action)的“輸入栓”(InputPin)或“輸出栓”(OutputPin)。“輸入栓”(InputPin)或“輸出栓”類似動作的輸入、輸出參數。

“值栓”(ValuePin)是一種特殊的輸入栓,它不需要對象流傳入,它的值是用定義的表達式計算的。當動作符合執行條件的時候(其它輸入控制流都有控制令牌到達、其它輸入栓都有對象流到達或滿足最小令牌數條件),動作就從這個“值栓”的表達式中計算一個值作為輸入。

對象節點本身不代表傳輸的對象,它是對傳輸對象的形態進行定義。傳輸的對象是對象節點類型的實例,每個實例稱為一個“令牌”。在活動執行過程中,有很多個“令牌”通過連接對象節點的對象流。但并不是一有“令牌”對象到達,動作就一定執行。例如處理視頻播放功能的一個動作,要等到視頻數據“緩沖”到一定量才執行。對象節點的“下限”屬性就是定義動作執行一次需要的最小數據量。如果對象節點不能“緩沖”,則應用“非緩存”(?nobuffer?)構造型。

“接收令牌數上限”是指當到達的令牌數量超過這個值之后,不再接收令牌。因為動作一次執行不一定把到達的令牌全部拿走(消費),消費不完令牌會積累,積累到一定量的時候,就拒絕上一環節的動作發送新的令牌。例如當調用一個http協議的服務的時候,如果post的數據量超過這個http服務接收的“最大令牌數量”時,這個服務將拒絕新的post請求,以防服務崩潰。

“覆蓋”(?overwrite?)表示新到達的令牌超出對象節點規定的上限時,覆蓋已有令牌而不是拒絕接收。

“可選”(?optional?)表示對象數據對于動作的執行時可選的,也就是“下限”是0

應用了“控制”(?control?)構造型,說明傳輸的數據類型是“控制值”類型(見控制操作一節說明)。

如果用了“流”(?stream?)構造型,說明對象是一種“流”類型。此時,可以進一步定義“流”的參數:比率(rate)、離散或連續的。

“排序”是對象節點中的令牌是按什么順序被動作節點消費或傳送到下一個節點的。有四種順序可選:“無序”、“有序”、“先進先出”(FIFO)和“先進后出”(LIFO)。

“包含狀態”是指令牌對象的取值范圍,只能在“包含狀態”定義的幾種狀態中取值。這幾種狀態應該是對象節點類型的狀態機中定義的狀態。

除了動作上的栓,還有以下類型的對象節點:

“活動參數節點”(ActivityParameterNode:對應活動的一個輸入或輸出參數。在示例圖中,“當前命令:轉移命令”是活動參數節點(一般放在活動圖左邊);“:命令響應”是輸出的活動參數節點(一般放在活動圖下邊緣,或右邊緣);

“中心緩存節點”(CentralBufferNode:作為緩存作用的對象節點。

“數據存儲節點”(DataStoreNode:數據存儲節點中的令牌對象被輸出活動邊拿走后,仍然會保留一份值相等的令牌對象,永遠拿不完。而“中心緩存節點”中的令牌對象被取走后就沒有了。但是“數據存儲節點”中存儲的對象按ID保存,相同ID的對象僅存儲一份。

控制節點(ControlNode

控制節點的類型主要有以下幾種:

“決定節點”(DecisionNode:最少一個、最多兩個輸入的活動邊,最少一個輸出的活動邊。如果有兩個輸入的活動邊,則其中一個必須是對象流,這個輸入對象流的數據用于決定節點輸出的對象流活動邊守衛條件的判斷。在示例圖中有兩個“決定節點”。

“合并節點”(MergeNode:合并節點只能有一條輸出活動邊、多條輸入的活動邊。當任何一條輸入活動邊有令牌到達,則轉發到輸出的活動邊。在示例圖中有兩個“合并節點”。

“分支節點”(ForkNode):分支節點只有一個輸入的活動邊、多條輸出的活動邊。分支節點的輸出活動邊是“并行”的,相當于把一條輸入活動邊的令牌數據分發到全部輸出活動邊。分支節點可用于并行流程的建模。在示例圖中,開始節點下面是一個“分支節點”,分出來的兩個控制流并行發生,說明驗證命令、點火推進器的那個分支,和測量高度、計算軌道半徑的那個分支是并行的。

“集合節點”(JoinNode):集合節點有多個輸入活動邊、僅僅一個輸出活動邊。只有所有輸入活動邊有令牌到達的時候,輸出活動邊才有令牌輸出。這個和“合并節點”是不同的,合并節點輸入邊是“或”的關系,集合節點是“與”的關系。集合節點一般和分支節點聯合使用,將分支節點分出去的多個并行流程匯聚到一個流程。

“初始節點”(InitialNode)、“活動終止”(FinalNode)、“流終止”(FlowFinalNode)節點:表示一個活動圖的開始和結束節點,以及僅僅一個流的終止。

結構化活動節點(StructuredActivityNode

結構化活動節點是表示一類復雜過程的節點。結構化活動節點中包含一系列動作節點,“循環節點”、“條件節點”類似編程語言里面的“循環語句”、“條件語句”。

“循環節點”中的“設置”(setupPart)中的動作相等于循環語句中初始化循環變量的作用,“測試”(test)中的動作起判斷循環條件的作用,“循環體”(bodyPart)中動作在每次循環中執行。

“條件節點”中有多組“子句”(clause)。只有當一個子句的“測試”(test)中的動作返回“true”值時,子句的“主體”(body)中的動作才能執行。

“序列節點”中包含多個動作子節點,這些動作之間不必畫出節點之間的控制流,每個動作將會按序列依次執行。

這三類結構化活動節點示例如下(此圖使用“智睿思維基于模型的系統工程軟件--MBSES”制作):


 

MBSE建模學習之四:活動(Activity)及活動圖的圖3


活動分區(ActivityPartition

活動分區是具有相同特征的活動節點和活動邊的一個分組。活動分區的邊框用虛線表示。活動分區和結構化活動節點是完全不同的概念(雖然都是用虛線邊框)。結構化活動節點本身是一個“動作”(Action),它可以有自己的輸出、輸出栓。但是活動分區只是一個分組或關系(如分配活動分區)。

活動分區可以代表一個模塊(更通用的說可以是一個具有行為的類目,Classifier)、一個實例(InstanceSpecification)或一個屬性(Property)。分區中的動作是這個模塊、或者實例的類、屬性的類的活動行為被調用的動作。也可以說是一個局部的活動圖,這個局部的活動圖的“語境”是大活動圖語境(大活動圖所屬的模塊)的部件。

不過活動分區具體代表什么元素,UML標準中并沒有明確定義,也可以是其它元素。用戶可以根據需要定義。在SysML標準中,定義專用的活動分區“分配活動分區”,可以為這個分區指定指定任意的元素(一般還是一個結構元素,如“部件”),表示分區中的活動元素分配到這個指定的元素。這一般應用到將代表功能的“動作”分配到結構元素“部件”。

多個活動分區水平或垂直并列的使用,用水平線或垂直線分隔,這種表示法通俗的稱為“泳道”(swimlane),這樣的圖稱為“泳道圖”(可以給圖增加構造型?泳道圖?)。

“可中斷活動分區”是一類特殊的活動分區,分區中增加了一個表示動作流程中斷的“中斷控制流”,這個控制流一般是某個事件引發(例如下面示例圖中,用戶關閉車鑰匙,發送了一個“關閉鑰匙”信號,引發“關閉鑰匙”接收事件,然后觸發中斷,結束整個活動)。

如下圖是一個“SUV提供動力”的活動圖圖(具有?泳道圖?構造型)(來源于SysML1.6標準附錄DD.38此圖使用“智睿思維基于模型的系統工程軟件--MBSES”制作),圖中通過表示分配關系的分配活動分區“泳道”,將相應動作功能分配給SUV相應的部件。


 

MBSE建模學習之四:活動(Activity)及活動圖的圖4

文章來源:智睿思維MBSE

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1