【问题标题】:The storage does not contain the agent - Anylogic存储不包含代理 - Anylogic
【发布时间】:2020-11-18 06:20:27
【问题描述】:

我正在使用 Anylogic 开发的项目遇到问题。 我想要一个货架存储块和一个货架拾取块来以编程方式选择一个托盘架,从数组列表中选择它。

特别是 rack store 是这样工作的: rack store block

机架拣选块给我一个错误,说第一个托盘架不包含代理,即使通过调试,它说该托盘架没有可用空间,而且其中的代理是正确的类型和要挑选的代理似乎正确定位在托盘架中。 机架拾取块如下:rack pick block

我在谈论该项目的信息是可见的here,我用以下代码打印了它们:

traceln(palletRackListKuka.get(0).getByIndex(0).agentInfo());
traceln("class is " + palletRackListKuka.get(0).randomAgent().getClass());
traceln("has space is " + palletRackListKuka.get(0).hasSpace());

我该如何解决这个问题?如果我不够清楚,请询问更多详细信息。

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    RackStore 和 RackPick 的工作方式是流经块的代理是存储和挑选的。

    因此,您的错误很可能是因为您在 RackPick 块中选择(以编程方式)的托盘架不是您在其通过时存储代理的托盘架之前的 RackStore 块。您的控制台语句仅显示托盘架具有所需类型的 一些 代理,而不是流经 RackPick 块的 代理。

    您可以将存储代理的托盘架添加为其中的一个额外字段(变量),然后在挑选它时引用它。

    编辑:为此,您已经为要存储的托盘架提供了一个表达式,因此请改为对您创建的函数进行函数调用(返回类型 PalletRack)它选择托盘架将其存储在您的IndustrialContainer代理内的PalletRack类型变量中。

    如果你想要“解耦”挑选(即,挑选什么是由外部以某种方式确定的),那是不同的,你必须有一些机制来实现

    • 选择您要选择的特定代理(例如从同一产品的 1000 个实例中),这通常与您的“存储/检索策略”相关;

    • 将该代理“注入”到 RackPick 块中以选择它(例如,通过 Enter 块)。

    有关此版本的信息,请参阅分发中心示例模型。

    【讨论】:

    • 我有 5 个托盘架(每个可以包含 3 个数据包)和机架存储块的 onEnter 每次有 3 个数据包通过时,我都会增加一个索引,这样我就可以执行 paletteRackListKuka.get(index) .我如何知道通过货架拣选的代理存储在哪里?我认为进入机架选择的前 3 个数据包将是通过机架存储的前 3 个数据包(所以我以与机架存储块中类似的方式增加索引的值),但似乎它不工作......我怎样才能将它所在的机架存储在数据包中?
    • 您有一个延迟块,因此首先进入 RackPick 的内容将取决于相关延迟。我将更新答案,详细说明如何存储参考。
    猜你喜欢
    • 2021-04-29
    • 2018-07-17
    • 2020-12-07
    • 2018-08-20
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2013-10-08
    相关资源
    最近更新 更多