Tutorial Task 3.1 - 如何使用子流程与数组构建3D物流仿真模型
购买adidas上京东官方旗舰店。
任务概述
在这个教程任务中,你将构建一个简单的3D模型,其中操作员一次运输多个物品。完成后,你的仿真模型将类似于下图所示的方式运行:
为了创建这种逻辑,你需要学习两个重要概念:数组和子流程。以下部分将简要介绍这些概念,并提供相关资料的链接以供进一步了解。
在标签中使用数组
在FlexSim中,术语数组指的是一个可以包含多个值(如果需要)的数据结构。数组中的每个元素通常由一个索引标识,这是一个指示该值在数组中位置的数字。
在这个3D模型中,你将使用一个包含数组值的标签。当操作员准备好拾取物品进行运输时,流程中的一个“从列表中拉取”活动将从列表中拉取2-5个流动物品(每个代表一个需要运输的物品)。这些流动物品的引用将存储在一个名为GroupOfItems的标签中,该标签包含一个数组值。每个流动物品的引用将被分配一个唯一的索引,从1开始。每个索引将根据流动物品从列表中拉取的顺序分配。
下图展示了GroupOfItems数组可能包含的内容示例:
在这个例子中,GroupOfItems数组包含对五个流动物品的引用。在这个例子中,数组有1-5个索引,因为“从列表中拉取”活动一次最多从列表中拉取5个物品。每个索引都有一个特定的值,在这个例子中,这是对3D模型中一个唯一流动物品的引用。
如果你想引用数组中的某个流动物品,你需要使用其特定的索引。当你调用该索引时,它将返回其当前值。使用前面图片中的例子,FlexScript表达式token.GroupOfItems[2]将返回对3D模型中名为Box11的流动物品的引用。表达式token.GroupOfItems[4]将返回对3D模型中名为Box17的流动物品的引用。
另一个在处理数组时你会发现有用的FlexScript表达式是.length。这个表达式将返回一个值,指示特定数组中有多少个元素。继续使用前面图片中的例子,FlexScript表达式token.GroupOfItems.length将返回值5,因为这个数组中有5个元素。
使用子流程
子流程(通常简称为子流程)是一个独立的流程或一组活动,当它被流程中的另一个活动或事件触发时开始运行。可以将子流程视为自包含的逻辑块,当它们在仿真模型或主流程中被特定事件触发时执行。
子流程可以减少在整个流程中多个位置重复创建特定流程活动块的需要。换句话说,它可以帮助你减少流程中的冗余,使其更高效、更有条理。
在这第一个教程任务中,你将创建一个用于装载和卸载流动物品的子流程。由于操作员将一次装载和卸载多个流动物品,你将创建子流程来处理装载和卸载逻辑。无需为每个流动物品的装载和卸载创建一长串活动,每个流动物品将自行运行子流程。你只需要为装载过程创建一个简单的活动块,为卸载过程创建一个活动块。请参阅子流程以获取关于子流程相关关键概念的更深入解释。
步骤 1构建3D模型
在此步骤中,你将为本教程构建一个基本的3D模型。你将添加两个平面,一个用于装载,另一个用于卸载。你将向这两个平面添加各种3D对象,并添加一个操作员来处理运输任务。在最后几个步骤中,你还将创建一些3D对象组。
完成后,你的模型应类似于下图:
构建此模型:
- 确保你的3D模型窗口已打开并处于活动状态。从库中,将两个平面(位于视觉下)拖入模型。
- 单击第一个平面以选中它。在快速属性中,将其重命名为装载区。
- 单击颜色选择器将其打开。选择浅红色。
-
将X尺寸
更改为7.00,并将Y尺寸更改为7.00。
- 单击第二个平面以选中它。在快速属性中,将其重命名为目的地1。
- 单击颜色选择器将其打开。选择浅橙色。
-
将X尺寸
更改为13.00,并将Y尺寸更改为7.00。
-
从库中,将以下3D对象拖入模型并放置在装载区平面上:
- 一个发生器
- 一个队列
- 重命名对象如下:
-
从库中,将以下3D对象拖入模型并放置在目的地1平面上:
- 一个队列
- 一个处理器
- 一个吸收器
-
在以下对象之间创建端口连接(A连接):
- 从主发生器到主队列
- 从Queue1到Processor1
- 从Processor1到Sink1
- 从库中,将一个操作员拖入模型,将其放置在两个平面之间。
- 右键单击Operator1打开菜单。指向对象组并选择添加到新组以打开新的组属性窗口。
- 在窗口顶部的名称框中,将组名更改为操作员组。关闭窗口。
- 右键单击Queue1打开菜单。指向对象组并选择添加到新组以打开新的组属性窗口。
- 在窗口顶部的名称框中,将组名更改为目的地组。关闭窗口。
- 单击发生器以在右侧显示其属性。在发生器部分下,勾选在时间0到达框。
- 在到达间隔时间框中,输入5。
| 对象 | 新名称 |
|---|---|
| Source1 | 主发生器 |
| Queue1 | 主队列 |
检查以确保你的模型看起来与本步骤开头显示的图像相似。
步骤 2向流程添加活动
在此步骤中,你将向流程添加活动和共享资产。这些活动最终将控制3D模型的运输逻辑。完成后,你的流程应类似于下图:
目前,你只需将这些活动添加到流程中并连接它们。你将在后续步骤中编辑属性以添加逻辑。
添加并连接这些活动:
- 在主工具栏上,单击流程按钮打开菜单。选择添加通用流程以创建新流程。
- 在流程处于活动状态时,在属性中,将流程名称更改为运输任务。
- 向流程添加5个容器形状(位于显示下)。
-
重命名形状如下:
- 共享资产
- 主队列推送物品到列表
- 操作员任务
- 装载子流程
- 卸载子流程
- 在属性中,使用颜色选择器将装载子流程形状的颜色更改为红色。
- 重复上一步骤,将卸载子流程形状的颜色更改为橙色。
-
在共享资产形状中,添加以下共享资产:
- 一个列表
- 一个资源
- 重命名共享资产如下:
-
在主队列推送物品到列表形状中,添加以下活动以创建一个堆叠块:
- 一个事件触发源(位于令牌创建下)
- 一个推送到列表(位于共享资产下)
- 一个吸收器(位于基础下)
- 重命名活动如下:
-
在操作员任务形状中,添加以下活动以创建一个堆叠块:
- 一个计划源(位于令牌创建下)
- 一个获取资源(位于共享资产下)
- 一个分配标签(位于基础下)
-
在操作员任务形状中,添加以下活动以创建另一个堆叠块:
- 一个行进(位于任务序列下)
- 一个从列表拉取(位于共享资产下)
- 2个运行子流程活动(位于子流程下)
- 重命名活动如下:
-
在装载子流程形状中,添加以下活动以创建另一个堆叠块:
- 一个开始(位于子流程下)
- 一个装载(位于任务序列下)
- 一个结束(位于子流程下)
- 重命名活动如下:
-
在卸载子流程形状中,添加以下活动以创建另一个堆叠块:
- 一个开始(位于子流程下)
- 一个分配标签(位于基础下)
- 一个卸载(位于任务序列下)
- 一个结束(位于子流程下)
- 重命名活动如下:
-
在以下活动之间创建连接器:
- 从分配标签:主队列到前往主队列
- 从运行子流程:卸载循环回到前往主队列
- 右键单击运行子流程:装载活动以打开菜单。选择编辑活动视觉效果以打开属性窗口。
- 打开背景颜色选择器并选择浅红色。
- 重复此过程,将装载子流程形状中所有活动的颜色更改为浅红色。
- 右键单击运行子流程:卸载活动以打开菜单。选择编辑活动视觉效果以打开属性窗口。
- 打开背景颜色选择器并选择浅橙色。
- 重复此过程,将卸载子流程形状中所有活动的颜色更改为浅橙色。
| 共享资产 | 新名称 |
|---|---|
| 列表 | 列表:待运输物品 |
| 资源 | 资源:操作员 |
| 活动 | 新名称 |
|---|---|
| 源 | 源:物品进入主队列 |
| 推送到列表 | 推送到列表:待运输物品 |
| 吸收器 | 吸收器:物品已推送 |
| 活动 | 新名称 |
|---|---|
| 源 | 源:为操作员创建令牌 |
| 获取 | 获取操作员 |
| 分配标签 | 分配标签:主队列 |
| 行进 | 行进到主队列 |
| 从列表拉取 | 从列表拉取:待运输物品 |
| 运行子流程(第一个) | 运行子流程:装载 |
| 运行子流程(第二个) | 运行子流程:卸载 |
| 活动 | 新名称 |
|---|---|
| 开始 | 开始装载子流程 |
| 装载 | 在主队列装载物品 |
| 结束 | 结束装载子流程 |
| 活动 | 新名称 |
|---|---|
| 开始 | 开始卸载子流程 |
| 分配标签 | 分配标签:目的地 |
| 卸载 | 在目的地卸载物品 |
| 完成 | 完成卸载子流程 |
检查以确保您的流程流看起来与本步骤开头显示的图像相似。
步骤 3创建推送到列表逻辑
在此步骤中,您将编辑“主队列推送任务到列表”形状中活动的属性。简而言之,当流程项进入队列时,它将被推送到一个列表,并在该列表中无限期等待,直到可以被运输。
以下是每个活动和共享资产将如何运作的概述:
| 活动 | 说明 |
|---|---|
| 列表:待运输物品 | 此列表将存储对主队列中所有准备运输到目的地队列的流程项的引用。您暂时将使用默认设置。 |
| 资源:操作员 | 您将把此共享活动链接到3D模型中的操作员组,以便可以为此运输任务获取该组中的操作员。 |
| 源:物品进入主队列 | 事件触发源是一个事件监听活动,它将监听3D模型中的事件。当流程项进入Queue3时,此活动将创建一个令牌并将其释放到下一个下游活动。您将为此令牌分配一个名为流程项的标签,该标签将包含对触发事件的特定流程项的引用。 |
| 推送到列表:待运输物品 | 此活动将把队列中的所有流程项推送到“待运输物品”列表。当物品被推送到列表时,它们将使用流程项标签保留对特定流程项的引用。 |
| 接收器:物品已推送 | 此活动从流程流中移除令牌。您将使用其默认设置。 |
要创建此功能:
- 单击资源:操作员共享资产以选择它。在属性中,单击引用框旁边的箭头以打开菜单。指向组,然后选择操作员。
-
单击源:物品进入主队列活动以选择它。单击感叹号按钮
以进入采样模式。
- 在3D模型中,单击主队列以打开菜单。选择主队列:进入时。
- 在属性中,在标签分配表中,单击标签名称列下进入物品行上的单元格。输入流程项。
- 单击操作列下进入物品行上的单元格以打开菜单。选择分配。
-
单击推送到列表:待运输物品活动以选择它。单击感叹号按钮
以进入采样模式。
- 单击列表:待运输物品共享资产以选择它。一条蓝线现在将此活动链接到共享资产。
- 在属性中,单击推送值框旁边的箭头以打开菜单。指向令牌标签,然后选择流程项。
考虑保存您的仿真模型。
步骤 4添加操作员任务逻辑
以下是每个活动和共享资产将如何运作的概述:
| 活动 | 说明 |
|---|---|
| 源:为操作员创建令牌 | 当仿真开始时,此活动将为操作员组中的每个操作员创建一个令牌。您将设置此活动引用您将在本教程步骤中设置的NumberOfOperators流程流变量。此活动将通过引用仿真开始时组中有多少操作员来确定要创建多少令牌。 |
| 获取操作员 | 此活动将尝试获取一个资源(一名操作员)来处理运输任务。如果没有操作员可以处理该任务,令牌将在此活动处等待,直到操作员可用。如果有操作员可以处理该任务,令牌将获取该资源并将令牌释放到下一个下游对象。当资源被获取时,您将为令牌分配一个名为操作员的标签,该标签将包含对获取的特定操作员的引用。 |
| 分配标签:主队列 | 此活动将创建一个名为主队列的标签,该标签将包含对3D模型中主队列对象的引用。 |
| 前往主队列 | 此活动将告诉操作员前往主队列。您将使用在分配标签活动中创建的主队列标签。 |
要创建此功能:
- 单击流程流中的空白区域以确保未选择任何内容。在快速属性中,单击更多属性按钮。
-
在变量选项卡上,单击添加按钮
以创建新变量。
- 在名称框中,将变量名称更改为NumberOfOperators。
- 确认类型菜单设置为数字。
- 在默认值框中,删除当前值并输入Group("Operators").length。
- 单击确定按钮以关闭窗口并保存更改。
- 单击源:为操作员创建令牌活动以选择它。在属性的到达表中,单击数量列下的单元格。选中该单元格后,单击表下方到达1:数量框旁边的箭头以打开菜单。指向流程流变量,然后选择NumberOfOperators。
-
单击获取操作员活动以选择它。单击活动旁边的感叹号按钮
以进入采样模式。
- 单击资源:操作员共享资产以选择它。一条蓝线现在将此活动链接到共享资产。
- 在分配到标签框中,删除当前文本并输入token.Operator。
-
单击分配标签:主队列以选择它。在属性中,单击添加按钮
以添加新标签。
- 在名称框中,输入主队列。
-
在值框旁边,单击采样器按钮
以进入采样模式。
- 在3D模型中,单击主队列以打开菜单。选择装载/主队列。
- 单击前往主队列活动以选择它。在属性中,单击执行者/任务序列框旁边的箭头以打开菜单。指向令牌标签,然后选择操作员。
- 单击目的地框旁边的箭头以打开菜单。指向令牌标签,然后选择主队列。
考虑保存您的仿真模型。
步骤 5设置装载子流程
在此步骤中,您将为操作员设置装载逻辑。您将从列表中拉取一定数量的物品,然后告诉操作员在主队列装载该数量的物品。您将使用包含数组的标签和专用于装载物品的子流程来完成所有这些操作。
以下是每个活动和共享资产将如何运作的概述:
| 活动 | 说明 |
|---|---|
| 从列表拉取:待运输物品 | 此活动将从“待运输物品”列表中拉取最多5个流程项。您将为令牌分配一个名为物品组的标签,该标签将包含一个数组,其中包含对从列表中拉取的每个流程项的引用。 |
| 运行子流程:装载 | 此活动将创建子令牌并将它们发送到装载子流程。您将设置此活动的逻辑,以便为上一个活动中从列表拉取的每个物品创建一个子令牌。您还将在子令牌上名为我的物品的标签中放置对每个单独流程项的引用。 |
| 开始装载子流程 | 每个子流程都需要以开始活动开始。当运行子流程活动将子令牌发送到子流程时,它总是将它们发送到此活动。您将使用此活动的默认设置。 |
| 在主队列装载物品 | 当每个子令牌到达此活动时,它将告诉操作员要装载哪些流程项以及从哪个位置装载。您将使用操作员标签来指示哪个操作员应执行此任务,并且您将使用每个子令牌上的我的物品标签来告诉操作员它应该从主队列装载哪些物品。 |
| 完成装载子流程 | 每个子流程都需要以完成活动结束。运行子流程活动上的父令牌将在该活动处等待,直到其所有子令牌都到达完成活动。您将使用此活动的默认设置。 |
要创建此功能:
-
单击从列表拉取:待运输物品活动以选择它。单击活动旁边的感叹号按钮
以进入采样模式。
- 单击列表:待运输物品共享资产以选择它。一条蓝线现在将此活动链接到共享资产。
- 在请求数量框中,输入5.00。
- 在要求数量框中,输入2.00。
- 确认选中分配到选项。在此选项下方的框中,输入token.GroupOfItems。
-
单击运行子流程:装载活动以选择它。单击活动旁边的感叹号按钮
以进入采样模式。
- 在装载子流程形状中,单击开始装载子流程活动以对其进行采样。
- 在属性中,单击数量框旁边的箭头以打开菜单。选择数组大小以打开选择列表选项窗口。
- 在选择列表选项窗口中,单击数组框旁边的箭头以打开菜单。指向标签,然后选择token.GroupOfItems。当您在选择列表选项外单击时,它将自动为您生成正确的表达式。
-
单击添加按钮
用于添加标签。
- 在名称框中,输入MyItem。
- 单击值框旁边的箭头以打开菜单。指向数组,然后选择来自标签数组的值以打开选取列表选项窗口。
- 在选取列表选项窗口中,单击标签框旁边的箭头以打开菜单。选择GroupOfItems。
- 单击索引框旁边的箭头以打开菜单。选择creationRank。当您在选取列表选项外单击时,它将自动为您生成正确的表达式。
- 在加载子流程形状中,单击在 MainQueue 处装载物品活动以选中它。在快速属性中,单击执行器 / 任务序列框旁边的箭头以打开菜单。指向令牌标签,然后选择Operator。
- 单击物品框旁边的箭头以打开菜单。指向令牌标签,然后选择MyItem。
请考虑保存您的仿真模型。
步骤 6设置卸载子流程
在此步骤中,您将为操作员设置卸载逻辑。卸载子流程的工作方式与加载子流程类似,只是操作员将在指定的目的地卸载物品。
以下是每个活动和共享资产将如何运作的概述:
| 活动 | 说明 |
|---|---|
| 运行子流程:卸载 | 此活动将创建子令牌并将其发送到卸载子流程。此活动的设置将与"运行子流程:加载"活动相同。此活动将为从前一活动的列表中提取的每个物品创建一个子令牌。您还将在子令牌上名为MyItem的标签中放置每个单独流物品的引用。 |
| 开始卸载子流程 | 每个子流程都需要以开始活动开始。当"运行子流程"活动将子令牌发送到子流程时,它总是将它们发送到此活动。您将使用此活动的默认设置。 |
| 分配标签:目的地 | 此活动将在子令牌上创建一个标签,设置其目的地。目前,您将在 3D 模型中采样 Queue1,将其设置为所有令牌的目的地。 |
| 在目的地卸载物品 | 当每个子令牌到达此活动时,它将告诉操作员要卸载哪些流物品以及从哪个位置装载它们。您将使用Operator标签来指示哪个操作员应执行此任务,并且您将使用每个子令牌上的MyItem标签来告诉操作员应从 MainQueue 装载哪些物品。您在前一活动中设置的Destination标签将告诉操作员在 3D 模型中的 Queue1 处卸载物品。 |
| 完成卸载子流程 | 每个子流程都需要以完成活动结束。"运行子流程"活动上的父令牌将在该活动处等待,直到其所有子令牌都到达完成活动。您将使用此活动的默认设置。 |
要创建此功能:
-
单击运行子流程:卸载活动以选中它。单击活动旁边的感叹号按钮
进入采样模式。
- 在卸载子流程形状中,单击开始卸载子流程活动以采样它。
- 在属性中,单击数量框旁边的箭头以打开菜单。选择数组大小以打开选取列表选项窗口。
- 在选取列表选项窗口中,单击数组框旁边的箭头以打开菜单。指向标签,然后选择token.GroupOfItems。当您在选取列表选项外单击时,它将自动为您生成正确的表达式。
-
单击添加按钮
以添加标签。
- 在名称框中,输入MyItem。
- 单击值框旁边的箭头以打开菜单。指向数组,然后选择来自标签数组的值以打开选取列表选项窗口。
- 在选取列表选项窗口中,单击标签框旁边的箭头以打开菜单。选择GroupOfItems。
- 单击索引框旁边的箭头以打开菜单。选择creationRank。当您在选取列表选项外单击时,它将自动为您生成正确的表达式。
-
单击分配标签:目的地活动以选中它。在属性中,单击添加按钮
以添加标签。
- 在名称框中,输入Destination。
-
在值框旁边,单击采样器按钮
进入采样模式。
- 在 3D 模型中,单击Queue1以打开菜单。选择Destination1/Queue1以采样它。
- 在卸载子流程形状中,单击在目的地卸载物品活动以选中它。在快速属性中,单击执行器 / 任务序列框旁边的箭头以打开菜单。指向令牌标签,然后选择Operator。
- 单击物品框旁边的箭头以打开菜单。指向令牌标签,然后选择MyItem。
- 单击站点框旁边的箭头以打开菜单。指向令牌标签,然后选择Destination。
请考虑保存您的仿真模型。
步骤 7运行模型
重置并运行模型:
在您观看时,操作员将在 MainQueue 处装载多个物品,然后在 Queue1 处卸载所有物品。如果您愿意,可以增加两个队列之间的距离,看看这会如何影响操作员的效率。
结论
在本教程任务中,您回顾了如何使用列表为操作员分配任务,并简单了解了数组和子流程的工作原理。在下一个教程中,当您添加额外的目的地时,您将学习如何为模型增加一些复杂性。您将构建逻辑,根据模型中某些变化的条件和约束,改变操作员卸载流物品的位置。继续到教程任务 3.2 - 添加条件任务。
返回任务逻辑教程:Tutorial 3 - FlexSim高级教程目录


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