从两个深托盘架中挑选前面的物品

时间:2018-05-04 14:10:16

标签: anylogic

我正在将代理商存储在一个带有rackStore块的单个托盘货架中。当我使用rackStore将物品带出机架时,它首先尝试将代理放在后面,我得到下面的错误,说它无法被挑选,因为它前面还有其他代理。

任何人都知道如何从前方挑选?

enter image description here

1 个答案:

答案 0 :(得分:1)

这在AnyLogic软件中是一个很大的失败,它是他们必须紧急解决的问题。从深度位置来看,你必须手动控制所有东西。

我将举例说明如何解决您的特定问题绝对不是最佳选择,这只是您了解如何将其扩展到更多内容的一个步骤。因为即使这应该是一个非常简单的问题,但事实并非如此。这只能使用2个深层,1个高度和一个独特行的机架。

所以这就是你需要的结构: new structure

由于我不知道您的产品在机架上停留了多长时间,我会假设一些事情,就是事件,我将决定是否每隔5秒从机架上获取一个产品(这是绝对武断的。)

您需要一个自定义代理来存储深层位置。我打电话给代理商Box,我将有一大堆盒子。不在图片中我也将代理添加到自定义填充框中。框代理将有2个变量:深度和位置,它将存储代理在机架中的位置和深层(如果您还需要级别和行有一个更复杂的机架)

source

现在,在每5秒循环运行的事件中,我有以下操作:(如果有一个盒子在等待,如果有可用资源并且没有叉车将产品移动到托盘架,它会激活我必须这样做是因为我不知道叉车将盒子放在哪里,直到盒子已经放在托盘架上。然后我用findFirst函数检查一个盒子是否在另一个盒子后面,如果一切正常,就会发送一个盒子来挑选。

if(wait.size()>0 && resourcePool.idle()>0 && rackStore.size()==0){
    Box bx=findFirst(wait,b->b.deep==0);

    if(bx!=null)
        wait.free(bx);
}

在rackStore出口我需要存储位置,所以在“退出”操作中,这段代码会有帮助(你检查是否有另一个盒子在同一位置,如果有,你更新的值深度变量。然后存储新代理的位置和深度值

Box box=findFirst(wait,b->b.position==position);
if(box!=null){
    box.deep++;
}
agent.deep=0;
agent.position=position;

最后在rackPick退出操作上,一旦产品被挑选并交付,您将更新其后面的框的深度值(如果有的话)

Box bx2=findFirst(wait,b->b.position==agent.position);
if(bx2!=null){
    bx2.deep--;
}

我知道这一切看起来有点疯狂,但在使用深层次时你必须自己创造所有逻辑...