主要内容

使用序列图描述系统行为

一个序列图是一种行为图,它将架构的结构元素之间的交互表示为一个消息交换序列。您可以使用序列图来描述静态系统的各个部分是如何交互的。

您可以通过访问体系结构视图库来使用System Composer™中的序列图。序列图与体系结构模型集成。有关如何通过架构模型创建和使用序列图的更多信息,请参见在架构模型中使用序列图

在本例中,您将分两个阶段学习序列图的基本术语和功能。

  • 使用包含触发器和约束的消息标签添加生命线和消息来表示交互。

  • 包含带有约束的片段和操作数,以进一步指定交互的行为。

序列图中的生命线表示体系结构中的组件。消息表示源生命线和目标生命线之间的一条路径上的通信。消息的路径必须包含来自体系结构模型的至少两个端口和一个连接器。使用嵌套消息时,由于要导航的层次结构,路径会更加复杂。

此图显示了交通灯架构模型和对应的序列图,该序列图描述了一个操作场景。交通灯模型描述了一个骑自行车的交通灯,行人十字路口按钮被按下,灯的变化使行人可以通过。

请注意

交通灯示例使用来自statflow的块®.如果没有statflow许可证,可以打开并模拟模型,但只能进行基本更改,例如修改块参数。

具有生命线、操作数、消息和片段的体系结构模型和序列图。

打开模型

此示例显示了一个交通灯示例,其中包含描述行人过十字路口的序列图。使用这个例子来构造您自己的序列图。

添加生命线和消息

  1. 通过导航到打开建筑视图库建模>体系结构视图

  2. 要创建一个新的序列图,单击>序列图

  3. 一个新的序列图叫做SequenceDiagram1在View Browser中创建,而序列图标签变得活跃。下元素的属性,重命名序列图抑制

  4. 选择组件>添加的生命线添加一条生命线。将创建一个没有名称的新生命线,并由虚线表示。

    在序列图中创建的新生命线。

  5. 单击向下箭头并选择.的当行人按下十字路口按钮时,生命线就会检测到。使用命名的向下箭头添加另外四条生命线轮询器开关控制器,lampController.的轮询器救生索检查人行横道按钮是否被按下,开关处理信号,控制器确定行人灯和交通灯应该显示的颜色,以及lampController改变交通灯的颜色。

    一个包含五条生命线的序列图。

  6. 画一条线从生命线的轮询器生命线。开始类型西南框,该框将在您键入时自动填写。文本填好后,选择西南

    一个序列图,在源和轮询器生命线之间有一条消息。

    switchout港口和西南在模型中连接端口时,将从switchout港口的西南端口在序列图中。

  7. 消息标签有一个触发器和一个约束。触发器确定消息是否发生,约束确定消息是否有效。对于信号消息,触发器称为边缘

    您可以输入一个条件,该条件指定带有方向和表达式的触发边。您还可以选择在消息中添加方括号内的约束。约束条件由MATLAB组成®作用于目标生命线的输入的布尔表达式。

    方向(signalPort (+ | -) positiveReal) [booleanExpression]

    边缘有三个方向:

    • 穿越—边表达式是上升或下降到零以上。

    • 不断上升的—边缘表达式从严格小于零上升到等于或大于零的值。

    • 下降—边缘表达式从严格小于零降到等于或小于零的值。

    单击消息并双击出现的空消息标签。输入这个条件和约束。

    上升(sw-1) (sw = = 1)

    该消息将在西南信号从下方升起1值为1或以上。方括号中的约束表示如果西南不等于1,则该消息无效。

    请注意

    消息标签只支持目标元素。万博1manbetx在这个例子中,switchout是源元素,不能包含。

    在源和轮询器生命线之间带有消息条件的序列图。

    信号的名字西南是端口上用于状态流图行为的有效输入数据。的轮询器具有状态图行为的组件具有西南符号窗格。

    在“符号”窗格中显示sw值的状态图行为。

    请注意

    信号名称也可以是端口上的数据接口上的数据元素。输入选项卡自动完成端口和数据元素名称。有关更多信息,请参见使用序列图表示系统交互

    在这个例子中,当西南信号就1时,人行横道的按钮已按下,并有消息通知轮询器生命线是公认的。

  8. 除了信号事件外,序列图还支持消息事件。万博1manbetx创建一条消息,从轮询器生命线的开关生命线。开始键入switchEvent盒子,直到switchEvent可供选择。

    轮询器和交换机生命线之间消息的消息结束的选定消息事件切换事件。

    由于体系结构模型中存在一个现有连接,因此从源端口创建消息switchEvent

  9. 单击该消息并双击出现的空消息标签。输入表示端口和约束的条件。

    switchEvent [switchEvent = = 1]

    带有消息约束和消息事件切换事件条件的序列图。

    当消息switchEvent接收,其值为1,则消息已发生且有效。

添加片段和操作数

您可以使用片段来描述更复杂的序列,比如替代。根据片段的类型,片段有一个或多个操作数。操作数可以包含消息和额外的片段。您可以使用任何生命线的输入将操作数的前置条件表示为MATLAB布尔表达式。

要访问片段菜单:

  1. 单击并拖动以选择两个消息。

    在序列图中以蓝色高亮显示的方式选择了两个消息。

  2. 在省略号(…)上暂停,这似乎是访问操作栏。

    序列图的右下方显示了一个省略号。

  3. 复合片段列表出现了:

    • Alt片段

    • 选择片段

    • 循环片段

    • Seq片段

    • 严格的片段

    • Par片段

    选择Alt片段

    Alt片段在复合片段列表中被选中。

  4. Alt片段片段使用包含所选消息的单个操作数添加到序列图中。

    alt片段出现在序列图中。

  5. 选择要输入操作数条件的片段。为输入数据选择一个完全限定的名称,并使用约束条件关系。

    开关/抑制= = 0

    约束是确定操作数何时是活动的先决条件。该约束指定抑制标志设置为0.因此,在这个十字路口可以使用人行横道灯。

    Alt片段显示一个操作数条件。

    只有当约束条件为真时,操作数中的消息才能被执行。

  6. 的下面突出显示第一个操作数Alt片段片段并选择片段>添加操作数>插入后,.添加第二个操作数。

    向第二个操作数添加约束条件关系。对象中的第二个操作数Alt片段代表了一个片段elseif消息将被执行的条件。

    开关/抑制= = 1

    这个条件表示抑制标志设置为1.因此,人行横道不受该十字路口的步行信号控制。

    在第二个操作数中创建一个带有消息标签的消息。

    第二个Alt Fragment操作数显示一个约束条件。

    对于第一个可选操作数,自抑制标志设置为0,第一个消息控制器生命线被识别时pedRequest消息被激活。然后,当switchPed信息值是1,lampController生命线会使人行交通灯变绿。

    对于第二个可选操作数,由于抑制标志设置为1,开关绕过了控制器,信息switchPed值为2直接到lampcontroller.的switchPed信息的价值2不影响交通信号。

交通信号灯序列图的例子

这个交通灯的例子包含了描述行人过十字路口的序列图。模型描述了这些步骤:

  1. 交通信号由红转黄再转绿。

  2. 当按下人行横道按钮时,如果交通信号是绿色的,则交通信号在一定时间内由黄转红。

  3. 行人过马路时,行人信号处于激活状态。

打开包含序列图的System Composer模型。

模型= systemcomposer.openModel (“TLExample”);

打开架构视图库以查看序列图。

openViews(模型)

此示例中的序列图表示体系结构模型中的操作场景。

1.PressDetection顺序图:行人按人行横道按钮和信号西南上升到1.的轮询器生命线被激活了switchEvent消息发生在开关生命线,改变交通信号,让行人通过。

2.SignalSequence顺序图:行人按人行横道按钮,信号西南上升到1.经过一些中介事件后lampController生命线传送一个触发信号ped灯生命线改变行人交通灯的颜色红色的(停止)绿色(走),让行人通过。

3.PedestrianCross序列图:首先交通值是3.,表示交通灯颜色为绿色。交通灯从黄色变成环状(2)变为红色(1)转为绿色(3.)一次又一次。当人行横道按钮被按下时控制器生命线识别有效的pedRequest交通灯由黄色变为黄色(2)变为红色(1),以便行人通过。然后,继续主循环。

4.抑制序列图:抑制标志标志确定是否设置了人行横道按钮供行人按下以控制十字路口和十字路口的交通灯信号。当抑制被设置为0,则交叉按钮存在。当抑制被设置为1,则交叉点按钮不存在。的switchEvent值是1,表示行人想要穿过马路。一旦switchEvent值设置为1,如果抑制0,控制器生命线认识到pedRequest信息,开始改变行人灯的颜色。此外,switchPed值是1,交通灯将由黄色变为红色。否则,如果抑制1,switchPed值是2,因此交通灯将继续正常运行,而不是改为红色专门让行人通过。

模拟体系结构模型

您可以在设置这些变量之后执行模型。

createWorkSpaceVar (“SwitchInputs”,[0 11 18],[-1 1 -1]);createWorkSpaceVar (“inhibitFlag”1 0);

相关的话题