这篇博文描述了AnyLogic中的简单起重机场模拟。我在 AnyLogic 中开发了这个模型用于演示目的。我已经发表了一系列关于 AnyLogic 仿真建模的博文。下面是其中一些的列表。
这篇文章考虑了一个用于存储加工零件的堆场。我不会考虑缓冲区本身的填充率。我也不会为单个零件跟踪建模。也就是说,存储容量是一个黑匣子,重点是评估堆场起重机的吞吐能力。这假定了一个指定的材料流矩阵,描述了进出缓冲区的输入和输出速率。
起重机场仿真模型概述
下面的屏幕截图显示了 AnyLogic 起重机场仿真模型的主要组成部分。堆场有两个入口输送机和三个出口输送机。它由一台水平堆场起重机操作。
这是一个简单的模型,可以在 1 小时内构建。正如本文介绍中所述,单个零件跟踪不是模型的一部分。这意味着一部分被存放在缓冲区中,在那里它被销毁。这是上述逻辑块部分的生产-上架过程。从院子里取回是作为一个单独的过程实施的,使用同一个院子起重机。这是上述逻辑块部分中的检索 – 发送过程。院子里的部分住宅没有建模。不考虑填充率。重点是评估堆场起重机的最大可能吞吐量。
实施存储槽和传送带分配
在这个起重机场模拟模型中,必须做出两个分配决策:
- 对于到达其中一个入口输送机的零件,必须决定该零件应存放在院子的哪个位置
- 对于必须交付到下游流程的零件,即必须取回的零件,必须决定该零件应放置在哪个传送带上
将零件分配到存放位置以进行存放
从生产-上架过程开始:这是在以下逻辑块序列中实现的。
部件由源(自定义类部件的代理)创建。这个新部件位于一个入口传送带上,使用逻辑块传送_a和传送_b。每个入口传送带的概率为 50%。
接下来,调用一个小的自定义函数(allocation_01 / allocation_02)。该函数简单地决定零件应该存储在哪个节点(1 到 7),称为“bay”。它通过设置变量targetbay_01 / targetbay_02 来做到这一点。然后,AnyLogic 抓住起重机并执行传输到指定节点内的随机吸引子。
从院子里取回零件并将它们分配给传送带
对于从堆场取回零件的建模,必须指定要从中取回零件的sourcebay(源节点)和放置零件的targetconveyor。为了使这更容易,我将这两个变量放在自定义部件代理类中。
sourcebay和targetconveyor也是主模型本身的变量。但是,它们仅用作临时存储器。在检索源中的新代理到达时,将调用selection()函数。
选择函数设置临时的sourcebay和targetconveyor占位符。然后将这些变量的值写入 . 源湾和 . 新到达的部分代理(对象实例)的targetconveyor属性。下面的屏幕截图显示了选择功能。
从上面的选择功能代码截图可以看出,检索位置是完全随机的。目标输送机则始终是离起重机最近的输送机。
在 AnyLogic 中运行起重机场仿真
AnyLogic 以 2D 和 3D 形式可视化其标记。下面的屏幕截图显示了运行时仿真模型的 2D 快照。
经过一小时的模拟后,9 个零件已装运(在其中一个出口传送带的末端取回并交付),9 个零件已被收起。下面是经过一小时模拟后相关模块的截图。
如果我想优先于检索,或者实现一些与任务优先级相关的其他逻辑,我也可以使用 JAVA 函数来做到这一点。
结束语及相关内容
我提出了一个简单的起重机场仿真模型,没有单独的零件跟踪。这种模型适用于例如评估设备吞吐量。在这种情况下,重点是水平堆场起重机的吞吐量。
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply