绘制简单的活动图
活动图描述了架构系统的功能流行为。您可以在系统设计的早期阶段使用活动图来详细阐述最终系统目标。要了解活动图的概念,请参阅System Composer 概念。
活动描述系统行为,它通过受控动作序列对从输入到输出的令牌流进行建模。活动图包含动作节点,这些节点的引脚由流线连接。使用活动来概念化系统、通过操作或决策可视化功能流,以及了解系统组件如何相互交互。
本主题将向您介绍如何查看活动图的各个部分,以及如何创建各个节点。您将学习如何:
在活动图中开始令牌流。您将使用一个初始节点和一个控制流。
在活动图中表示动作。
创建一个具有 MATLAB® 函数行为的动作节点。
创建一个包含嵌套活动的动作节点。
使用不带 MATLAB 函数的 MATLAB 动作节点来初始化对象令牌。
使用控制节点来操作令牌流。
使用分叉节点在两个控制流中复制控制令牌。
使用决策节点将输入令牌路由到其中一个输出流。
使用控制节点创建循环。
使用令牌并通过流程终止节点和活动终止节点终止活动。
您可以使用分配编辑器将活动图的元素分配到 System Composer™ 架构模型的元素中,从而更全面地描述您的功能架构设计。有关详细信息,请参阅移动机器人的设计架构和活动图。
打开模型活动图
本示例演示了如何绘制一个简单的活动图。
open("ShoppingProcessActivity.slx");
活动图中的令牌流
令牌是在活动图中流动的对象。令牌可以表示结构体和整数等数据,也可以简单地传递控制信号。对象令牌表示一个对象,如一段数据。控制令牌表示无数据载体的控制或触发事件。
要开始活动,请使用 Initial Node 将控制令牌放置在单个流出流上。

活动图中的流连接两个节点。虚线表示控制流。实线表示对象流。对象流中的令牌包含操作所作用的令牌数据。您可以使用对象流来路由输入或输出令牌,以便在对象节点之间传输信息或实体物品。控制流中的令牌触发操作的执行。您可以使用控制流来建模从一个 Action Node 到另一个动作节点的控制转移。
点击初始节点的右侧,然后拖动以生成控制流。然后,使用矩形框选取要实例化的动作节点。控制流将控制令牌传输到动作节点,并开始执行。
编写活动图动作节点
在活动图中,您可以使用 Action Node 生成令牌和读取令牌。动作节点是活动图中的一个关键构建块。动作节点表示要执行的动作。动作节点消耗输入令牌,并在引脚上产生输出令牌。使用 MATLAB 函数或嵌套活动图来描述动作节点的行为。
您可以通过点击并拖动左侧调色板或工具条中建模选项卡中的动作节点
图标,将其拖放到画布上的任意位置,从而在活动图中添加一个动作节点。

编写带有 MATLAB 函数行为的动作节点
具有 MATLAB 函数行为的活动图的第一个动作节点决定了开始动作的控制令牌如何在动作节点输出引脚上生成对象令牌。引脚充当对象令牌的缓冲区,引导令牌进入或离开动作节点。引脚的方向性代表输入或输出。您可以通过对象流连接引脚。使用引脚将对象令牌路由到 Action Node 或从动作节点路由对象令牌。引脚还可用于在执行前或执行过程中存储对象令牌。您只能在对象流中使用引脚。
要实现 MATLAB 函数的行为,在属性检查器中,将行为类型设置为 MATLAB。然后,在 MATLAB 函数名称文本框中,输入函数的名称。

要在 MATLAB 编辑器中查看 PlaceOrder.m 函数文件,请双击 Place Order 动作节点。
function item = PlaceOrder() items = {'Apple', 'Banana', 'Cherry', 'Date'}; item = randi(4,1); ordered_item = items{item}; fprintf('You selected: %s\n', ordered_item); end
PlaceOrder 函数会从待排序的列表中随机选取一个项目。 函数不包含输入参量,只有一个输出参量。输出参量 item 对应于动作节点的输出引脚。
要在动作节点上创建引脚,请在动作节点的边缘暂停,然后点击蓝色引脚。选择创建输入引脚还是输出引脚。

类型定义流经引脚的令牌内容。类型具有维度、单位、复杂度、最小值、最大值和描述。值类型令牌是分配给单个值的类型。组合类型令牌等效于包含不同值和数据类型字段的总线结构。MATLAB 类类型令牌引用路径上的 MATLAB 类,该类定义具有属性和方法的复杂对象。您可以使用内置的 MATLAB 类或定义自己的 MATLAB 类。
您可以在 Types Editor 中选择引脚并查看其类型,以查看具有预期尺寸 1 的对应 Item 类型。

注意
当您将维度设置为 3 时,类型编辑器会自动将维度解释为列向量 [1,3]。
将动作节点引脚与 MATLAB 函数参量匹配
当函数文件 MATLAB 中的输入和输出参量与动作节点上的输入和输出引脚相匹配时,您可以使用链接的函数 MATLAB 来控制动作节点的预期行为。
在动作节点上,在属性检查器中,选择行为类型作为 MATLAB,然后链接到路径上的 MATLAB 函数文件。
右键点击动作节点,从上下文菜单中选择菜单选项将动作引脚匹配到 MATLAB 函数参量。
动作节点上的输入和输出引脚的名称和编号与链接的 MATLAB 函数中的输入和输出参量的名称和编号相匹配。
使用嵌套活动描述动作
您可以在活动图中将动作节点表示为嵌套活动。您使用嵌套活动描述的操作只能按顺序执行,无法同时执行多个实例。
当一个动作开始时,该动作的一个实例将执行,如果收到新的令牌,它们将在输入引脚中等待。输入引脚是一个队列。输入引脚的属性检查器中的令牌多重性参数决定了队列的大小。

要实现嵌套活动,在属性检查器中,将行为类型设置为活动。然后,要编写嵌套活动,请双击动作节点。
参数节点将令牌路由到嵌套的活动图中或从中路由出来。创建引脚时,会在嵌套活动中创建相应的参数节点。使用参数节点定义令牌如何进入或离开嵌套的活动。参数节点有输入和输出两种类型。

嵌套活动 Authorize Payment 根据串联连接的动作节点 Enter Card Details 和 Authenticate Details 上的 MATLAB 函数行为正常执行。
使用 MATLAB 动作节点(不带 MATLAB 函数)初始化对象令牌
当您编写活动图并在动作节点上的对象引脚之间连接流线以描述动作序列时,可以使用不带任何 MATLAB 函数的 MATLAB 动作。
注意
对于未定义 MATLAB 函数的动作节点,将在输出引脚上创建一个默认令牌,其所有属性均设置为 0。
行为类型设置为 MATLAB 的 Cancel Order 动作节点没有定义的 MATLAB 函数名称。您还可以指定输出引脚类型,以初始化下一个动作节点的对象令牌类型。
使用动作节点生成控制流
要从动作节点生成控制流,请点击节点侧面,然后将其拖动到其他节点。

使用控制节点操作令牌流
控制节点是令牌通过系统的逻辑流的路由。使用控制节点和流来路由令牌。控制节点可用于初始化、拆分、合并和终止令牌流。
使用分支节点拆分控制流
当作为分叉节点实现时,Join or Fork Node 节点在每个输出流上复制一个输入控制令牌。

控制流将控制令牌传输到两个不同的动作节点,并开始执行。
使用决策节点创建条件流
A Decision or Merge Node 在作为决策节点实现时,根据决策条件的评估结果将输入令牌路由到特定的输出流。使用决策节点来操作令牌流,以演示此场景:当电池电量足以让机器人沿计算出的路径行驶时,机器人即可沿路径行驶。当库存

要访问流中流转的令牌,请使用内置关键字 token。当表达式 token==1 的计算结果为 true 时,令牌将继续执行 Fulfill Order 动作节点。否则,令牌将被路由到 Cancel Order 动作节点。
使用终止节点终止流程和活动
您可以使用 Flow Final Node 终止一个对象或控件,但不能终止整个活动。您可以使用 Activity Final Node 来终止传入的令牌和父活动。

该流程完成一个周期后,活动将通过活动终止节点结束。
仿真和验证活动图
现在您已经知道如何为移动机器人绘制跟随路径的活动图,可以仿真活动图以可视化令牌流。有关详细信息,请参阅仿真、可视化和验证活动图。
另请参阅
函数
工具
模块
- Initial Node | Action Node | Pin | Parameter Node | Decision or Merge Node | Join or Fork Node | Flow Final Node | Activity Final Node