Tutorial Task 1.2 - Make a Resource Act Like a List
购买adidas上京东官方旗舰店。
任务概览
到目前为止,您已为模型中的两个任务执行者构建了基本的运输任务序列。实际上,不使用流程流工具也能创建这一基础功能。然而,使用流程流工具的真正优势在于它能轻松创建自定义模型逻辑,特别是针对任务序列。
在本教程任务中,您将添加流程流逻辑,该逻辑会偶尔中断操作员正常的运输任务序列。您将设计一种逻辑,每当操作员移动超过100米时,就派他们去饮水处喝水。
上网淘巴领天猫淘宝优惠券,一年省好几千。为创建此逻辑,您将在流程流中为喝水休息任务序列构建一个额外部分。同时,请回想之前的教程:资源共享资产已与3D模型中的两个操作员关联。要创建喝水休息任务,您需要资源共享资产来跟踪操作员已移动的距离。因此,您需要修改该资源,使其功能更接近列表。列表可以跟踪和更新其条目的数据;您还可以构建查询,以提取符合特定条件的列表条目。
幸运的是,资源实际上拥有一个内部列表,您可以将其设置为具备与列表相同的功能。在本教程任务中,您将学习如何设置资源的内部列表,以跟踪操作员在仿真模型中移动的总距离以及自上次喝水休息以来移动的距离。您还将设计一个查询,使您的喝水休息任务序列能够提取自上次喝水休息后移动超过100米的任何操作员。
完成后,您的模型将类似于下图所示:

步骤 1使用资源的内部列表
既然您的基本运输任务序列已设置完成,接下来将创建一系列任务,这些任务会偶尔将操作员从正常的运输任务中抽调出来,派他们去喝水。您需要模拟操作员在移动超过100米后前往饮水处喝水的情景。
此时您可能已经注意到,列表和资源共享资产的功能有些相似。实际上,资源就是一种特殊类型的列表。您在此流程流中使用的资源实际上维护着一个可用操作员的内部列表。“获取资源”和“释放资源”活动会从这个列表中推送和拉取操作员。
在此步骤中,您需要向此内部列表添加一些字段,以便在后续步骤中实现喝水休息功能。您将添加两个字段:
- 最后一次饮水后的总行程- 您将添加一个字段,在操作员身上创建一个名为最后一次饮水后的总行程的标签。该标签将追踪操作员自上次饮水休息后已行进的距离。每当操作员完成饮水休息后,流程流将更新此标签。
- 总行程- 您还将添加一个字段,用于追踪操作员自仿真开始运行以来行进的总距离。在FlexSim中,所有操作员3D对象都会作为标准(默认)统计数据记录其总行进距离。因此,您需要在资源的列表中添加一个字段,以获取该统计数据的当前值。
要将这些字段添加到资源的内部列表:
- 点击资源:操作员共享资产以选中它。
- 在属性中,点击高级按钮以打开此资源的列表属性。
- 在字段选项卡中,点击添加按钮
以打开菜单。选择标签以向列表添加一个标签字段。 - 将标签字段的名称更改为lastDrinkTotalTravel。
- 点击添加按钮
以打开菜单。指向TaskExecuter,然后选择totalTravel。 - 您将使用默认设置,因此请确认它们与下图类似:

考虑保存您的仿真模型。
步骤2添加饮水休息任务序列
在此步骤中,您将在流程中添加更多活动。这些活动将控制饮水休息功能。完成后,您的流程将类似于下图所示:

目前,您只需将这些活动添加到流程中并连接它们。您将在后续步骤中编辑属性以添加功能。
要添加并连接这些活动:
- 确保流程已打开并处于活动状态。
- 在库中的显示组下,向新流程添加一个额外的容器形状。
- 为清晰起见,将流程形状重命名为饮水休息。
- 向饮水休息形状添加一个计划源。
- 在饮水休息形状中,添加以下活动以创建一个堆叠块:
- 一个获取资源活动(位于共享资产)
- A创建任务序列(位于任务序列)
- A移动活动 (位于任务序列)
- A延迟活动 (位于任务序列)
- An分配标签活动 (位于基础)
- A完成任务序列(位于任务序列下)
- 一个释放资源活动(位于共享资产下)
- 创建一个从计划源到获取资源的连接线。(将鼠标悬停在活动底部中间位置,直到鼠标变为连接线
图标。点击并拖动连接线,直到其吸附到另一个活动上。) - 创建一个从释放资源活动末尾循环返回至获取资源活动的连接线。
- 为清晰起见,请按以下方式重命名活动:
| 活动 | 新名称 |
|---|---|
| 来源 | 来源:开始模拟 |
| 获取 | 获取:获取口渴的操作员 |
| 创建任务序列 | 创建任务序列 |
| 移动 | 前往饮水机 |
| 延迟 | 延迟:饮水 |
| 分配标签 | 分配标签:lastDrinkTotalTravel |
| 完成任务序列 | 完成任务序列 |
| 释放 | 释放操作员 |
请考虑保存您的模拟模型。
步骤 3编辑活动属性
在此步骤中,您将编辑流程图中“饮水休息”部分的活动属性,以创建一个简单的运输任务序列。以下是该部分各活动功能的概述:
| 活动 | 说明 |
|---|---|
| 开始模拟 | 这个“计划源”活动会在模拟开始时立即创建一个令牌,随后将此令牌发送至“获取:让操作员口渴”活动。创建此令牌后,该活动将不再生成任何额外令牌。这个唯一的令牌将在其他活动中持续循环,直至模拟结束。 |
| 获取:让操作员口渴 | 此活动将检查资源内部列表,找出自上次饮水休息后移动超过100米的操作员。当列表中有操作员符合该条件时,活动将获取该操作员。若操作员不符合条件,则会在列表中创建待处理订单。您需要在令牌上创建一个名为thirstyOperator的标签,以追踪哪位操作员被分配进行饮水休息。 |
| 创建任务序列 | 此活动将一系列任务设置为一个任务序列,由被分配的操作员执行。 |
| 前往饮水机 | 引导操作员前往饮水机。 |
| 延迟:饮水 | 此任务将模拟操作员从饮水机饮水所需的时间长度。 |
| 分配标签:lastDrinkTotalTravel | 此活动将记录操作员上次从饮水机饮水的时间。 |
| 结束任务序列 | 此活动标记任务序列的完成。 |
| 释放操作员 | 释放操作员,使其能够处理其他运输任务序列。 |
要编辑这些活动属性:
- 点击计划源活动以选中它。您将使用此活动的默认属性,请确认设置与下图匹配:
- 接着获取:获取口渴的操作员活动,
点击感叹号按钮
进入采样模式。 - 点击资源:操作员在流程图中 进行采样。将出现一条蓝色线条,显示该资源现已链接。
- 在获取:获取口渴操作员活动的属性中,将分配给标签框
更改为
token.thirstyOperator。 - 在查询框中,删除当前文本并输入
WHERE totalTravel - lastDrinkTotalTravel > 100。 - 点击创建任务序列选择该活动。 在属性面板中,点击执行者 / 任务序列框旁边的箭头以打开菜单。指向令牌标签并选择thirstyOperator。这将把我们正在创建的任务序列分配给先前获取的操作员。其他设置保持默认值不变。您会注意到,此活动在令牌上创建了一个名为taskSequence的新标签。此序列中的所有任务都将通过此标签分配给该序列。
- 在前往饮水器活动的属性中,确保执行者 / 任务序列的默认值为token.taskSequence。
- 在目的地框旁边,点击采样器按钮
进入采样模式。 - 点击3D模型中的饮水器形状以打开菜单。从菜单中选择饮水器。
- 对延迟:饮水活动重复此步骤。然后,更改延迟时间设置为
30.00。 - 在分配标签: 上次饮水总行程活动的属性中,点击分配标签至框旁边的箭头以打开菜单。指向令牌标签并选择口渴操作员。
- 点击添加按钮
以添加新标签。 - 在名称框中,输入
lastDrinkTotalTravel。 - 在值框中,输入
getvarnum(token.thirstyOperator, "totaltraveldist")。 - 我们可以将完成任务序列保持其默认设置。确保任务序列框显示为token.taskSequence这标志着要执行的任务序列的结束。
- 在释放操作员活动的属性中,点击分配给资源框旁边的箭头以打开菜单。指向令牌标签并选择thirstyOperator。





考虑保存你的仿真模型。
步骤 4为操作员添加标签
在这一步中,你将添加lastDrinkTotalTravel标签到操作员,并将其初始值设为0。你需要这样做才能使逻辑正常工作。除非你将初始值设为0,否则在计算操作员上次喝水以来经过的时间时,此标签将返回NULL值。如果发生这种情况,获取:获取口渴操作员活动将无法成功从资源的内部列表中拉取操作员。
要添加这些标签:
- 重置模型。
- 点击操作员以在右侧显示其属性。
- 在标签部分下,点击添加按钮
以打开菜单。选择添加数字标签。 - 双击标签名称框中,删除当前文本 并输入lastDrinkTotalTravel。
- 确认标签的初始值已设置为
0。 - 勾选自动重置标签复选框。
- 对第二个操作员重复此过程。
考虑保存您的模型。
步骤 5运行仿真模型
在此步骤中,您将运行仿真模型以确保其功能正常。 运行模型前:
- 在流程图中,点击资源:操作员共享资产以选中它。在属性中,点击查看条目按钮以查看资源的内部 列表。
- 在仿真控制面板上,点击重置和运行按钮。
请注意,以下模型正以 10.00 的速度运行:

当模型运行时,请注意,当操作员移动超过 100 米时,他们会去 饮水机喝水。在他们第一次喝水后,资源的列表开始 追踪他们自上次喝水以来的移动量。
结论
现在您已经看到了资源和列表的一些不同可能用途。在 下一个教程任务中,您将学习如何使用最后一种类型的共享资产:区域。 继续进入教程任务 1.3 - 添加区域以 收集数据。


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