Tutorial Task 3.1 - Build a Basic Sub Flow
任务概述
在本教程任务中,您将学习在流程流工具中构建子流程的一些基础知识。子流程是一个独立的流程流,当它在不同的流程流中被另一个活动或事件触发时开始运行。您可以将子流程视为自包含的逻辑块,当它们在仿真模型或通用流程流中被特定事件触发时,这些逻辑块将被执行。
子流程可以减少在整个流程流中多个位置创建特定流程流活动块的需求。您可以使用子流程来执行计算,或模拟在主流程流中被特定活动或事件触发的更复杂过程。有关子流程相关关键概念的更多信息,请参见流程流子流程部分。
在本教程中,您将构建一个内部子流程,以动态确定处理器的处理时间。完成后,您的3D模型和流程流将类似于下图:

子流程的基本组成部分
当“创建令牌”或“运行子流程”活动将令牌发送到子流程的“开始”活动时,子流程开始。子流程在流经子流程中的所有活动并到达“完成”活动时结束。
父令牌和子令牌
当“创建令牌”或“运行子流程”活动将令牌发送到子流程时,通常会创建一个新令牌。根据您独特的模型逻辑需求,您需要决定子流程中新创建的令牌与主流程流中创建它的令牌应具有何种关系。有三种基本选项:
- 独立令牌- 创建的令牌与原始令牌没有关联。一旦令牌创建了独立令牌,它将移动到主流程流中的下一个下游活动。如果需要,独立令牌可以复制原始令牌的标签。
- 子令牌- 创建的令牌将是原始令牌的子令牌。主流程流中的原始令牌将成为父令牌子令牌可能具有对父令牌上标签的读取或写入权限。
- 同级令牌- 创建的令牌将成为原始令牌的同级令牌。换句话说,它们将与原始令牌拥有相同的父令牌。
在本教程任务中,您将主要处理子令牌和父令牌。子流程中的子令牌需要能够访问主流程中父令牌上的标签。
步骤 1构建 3D 模型
在此步骤中,您将构建一个基本的 3D 模型。完成后,您的 3D 模型应类似于下图:

构建此模型的步骤如下:
- 从库中拖拽以下对象,并按从左到右的顺序放置到模型中:
- 1源
- 1队列
- 1处理器
- 1接收器
- 移动对象,使其布局大致与本步骤开头的图片所示一致。
- 为清晰起见,请按如下方式重命名对象:
- 创建端口连接(A连接)从:
- 源到队列
- 队列到处理器
- 处理器到接收器
| 对象 | 新名称 |
|---|---|
| Source1 | 源 |
| Queue1 | 队列 |
| Processor1 | 处理器 |
| Sink1 | 接收器 |
检查以确保您的模型看起来与本小节开头显示的图像相似。
步骤 2向流程流添加活动
在此步骤中,您将向一个通用流程流添加活动,以构建一个将改变处理器处理时间的流程流。
完成后,您的流程流应看起来类似于以下图像:

目前,您只需将这些活动添加到流程流中并连接它们。您将在后续步骤中编辑属性以添加功能。
要添加并连接这些活动:
- 在主工具栏上,点击流程流按钮以打开菜单。选择通用流程流。
- 在属性面板的流程流名称框中,删除当前文本并将流程流重命名为处理时间。
- 在库中的显示组下,向新流程流添加 3 个容器形状。
- 为求清晰,请将这三个流程形状重命名如下:
- 快速处理时间
- 慢速处理时间
- 覆盖处理时间
- 从库中,将以下活动添加到快速
处理时间形状中:
- 一个计划源活动(位于令牌创建下)
- 一个分配标签活动(位于基础下)
- 3个运行子流程活动(位于子流程下)
- 为求清晰,请将这些活动重命名为:
- 创建一个从源到分配标签活动。(将鼠标悬停在活动底部中间位置,直到鼠标变为连接器
图标。点击并拖动连接器,直到它吸附到另一个活动上。) - 将分配标签和运行子流程活动连接成一个堆叠块。
- 从库中,将以下活动添加到慢处理时间形状中:
- 一个分配标签活动(位于基础类别下)
- 2个运行子流程活动(位于子流程类别下)
- 为清晰起见,将这些活动重命名为:
- 从快处理时间形状中的堆叠块末端创建一个连接器,连接到处理缓慢形状。
- 创建一个从运行子流程: 慢速时间 2活动末端循环至分配标签:设置为 快速活动的连接器。
- 从库中,将以下活动添加到覆盖
处理时间形状以创建堆叠块:
- 一个开始活动(位于子 流程下)
- 一个等待事件活动(位于基础下)
- 一个结束活动(位于子流程下)
- 为清晰起见,将这些活动重命名为:
| 活动 | 新名称 |
|---|---|
| 源 | 源:启动模拟 |
| 分配标签 | 分配标签:设置为快速 |
| 第一个运行子流程 | 运行子流程:快速时间 1 |
| 第二个运行子流程 | 运行子流程:快速时间 2 |
| 第三个运行子流程 | 运行子流程:快速时间 3 |

| 活动 | 新名称 |
|---|---|
| 分配标签 | 分配标签:设为慢 |
| 第一个运行子流程 | 运行子流程:慢时间 1 |
| 第二个运行子流程 | 运行子流程:慢时间 2 |

| 活动 | 新名称 |
|---|---|
| 开始 | 开始子流程 |
| 等待事件 | 等待事件:处理时间 |
| 结束 | 结束并覆盖处理时间 |
请考虑保存您的仿真模型。
步骤 3编辑活动属性
在此步骤中,您将编辑流程图中各活动的属性。以下是对每个活动功能的概述:
| 活动 | 说明 |
|---|---|
| 来源:开始模拟 | 此计划来源活动将在模拟开始时创建一个令牌,并将其发送到分配标签活动。创建该令牌后,它不会再创建任何额外的令牌。该令牌将仅在模拟结束前持续在其他活动中循环。您将使用此活动的默认属性。 |
| 分配标签活动 | 两个分配标签活动都将创建并设置一个名为processTime的标签,该标签将在子流程控制处理器的处理时间时被引用。第一个分配标签活动将标签设置为2,第二个活动将设置为10。 |
| 运行子流程活动 | 运行子流程活动将在开始子流程活动中创建一个子令牌。父令牌将保留在运行子流程活动中,直到子令牌到达子流程的末尾。当子令牌完成子流程时,令牌将移动到下一个下游活动。 |
| 开始子流程 | 所有子流程都需要以开始活动开头,该活动接收由运行子流程活动创建的子令牌。然后,它将子令牌释放到下一个活动。 |
| 等待事件:处理时间 | 等待事件活动是事件监听活动。这意味着令牌将在此活动处等待,直到被监听的事件发生。该活动将监听处理器的处理时间事件。当处理器准备好开始处理时间时,令牌将被释放到完成活动。您还将设置此活动以覆盖处理时间。 |
| 完成并覆盖处理时间 | 完成活动将为处理器提供处理时间返回值。提供此返回值后,它将销毁子令牌,并通知运行子流程活动中的父令牌子令牌已完成子流程。 |
要编辑这些属性:
- 在属性中,为分配标签:设置为快速活动,单击添加按钮
以添加新标签。 - 在新标签的名称框中,删除现有文本并输入
processTime。 - 在值框中,输入
2.00以表示2个仿真时间单位。 - 对分配标签:设置为慢速重复这些步骤,但这次将值框更改为
10以表示10个仿真时间单位。 - 单击运行子流程:快速时间1活动以选择它。
- 点击感叹号按钮
在此活动旁边以进入采样模式。将出现一条蓝线,显示活动现已链接。 - 点击启动子流程活动以对其进行采样。
- 对所有运行子流程活动重复上述步骤。
- 点击等待事件:处理时间活动以选择它。点击感叹号按钮
在此活动旁边以进入采样模式。 - 在3D模型中,点击处理器以打开菜单。从菜单中选择处理器:处理时间以采样此事件。处理器的名称现在将出现在活动旁边,显示它们已链接。
- 在等待事件:处理时间活动的属性中,勾选将覆盖返回值复选框。
- 点击完成并覆盖处理时间活动以选择它。
- 在属性中,点击返回值框以打开菜单。指向令牌标签, 然后选择processTime。


考虑保存您的仿真模型。
步骤4运行模型
重置并运行模型。

您会注意到,Source在时间0创建一个令牌,然后该令牌进入“设置为快速时间”活动,其processTime标签被设置为2。接着,令牌移动到第一个“快速时间1”活动,在那里创建了一个子令牌,并停留在子流程中的“等待处理时间”活动处。
一旦模型中的处理器接收到一个项目,“等待事件”就会释放令牌,并且处理时间被覆盖。随后,子令牌被销毁,父令牌移动到下一个“运行子流程”活动,重新开始子流程。每当有项目进入处理器,这一过程就会持续。一旦令牌完成“慢速时间2”,它将返回顶部,再次重复该模式。
如果您暂停仿真并点击子流程中的一个令牌,您会看到一条蓝线显示令牌之间的父子连接:

不仅逻辑无需任何编码就能轻松创建,您还可以直观地看到处理器在其设定的处理时间中的位置。这可以作为一个有价值的调试工具,或者对于收集统计数据很有用。可以单独或集体为活动或区域收集统计数据,以记录处理器在任何给定状态下花费的时间。
结论
在下一个教程任务中,您将学习通过添加多个完成活动来构建子流程的另一种方法。请继续教程任务3.2 - 添加多个完成活动。


微信扫一扫,打赏作者吧~