从两个深托盘架中挑选前件 [英] Pick front item from a two deep pallet rack

查看:143
本文介绍了从两个深托盘架中挑选前件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要在一个带有RackStore块的单个托盘架中存储两个深处的代理商.当我使用rackStore从机架上取走物品时,它会先尝试从后面取走代理商,然后出现以下错误,因为前面还有其他代理商,因此无法将其提起.

I'm am storing agents two deep in a single pallet rack with a rackStore block. When I take items out of the rack with rackStore it tries the take the agents at the back first and I get the error below saying it couldn't be picked as there are other agents in front of it.

有人知道我该如何从前面挑选?

Anyone know how I can pick from the front instead?

推荐答案

这在AnyLogic软件中是一个很大的失败,这是他们必须紧急解决的问题.由于涉及到深处,因此您必须手动控制所有内容.

This is big fail in the AnyLogic Software and it is something they have to fix urgently. Since when it comes to deep positions, you have to control everything manually.

我将为您提供一个示例,该示例对于解决特定问题绝对不是最佳选择,这只是您了解如何将其扩展到其他方面的一个步骤.因为即使这应该是一个非常简单的问题,但事实并非如此.这仅适用于2个深度为2层,高度为1层,并具有唯一行的机架.

I will give you an example that is definitely not optimal on how to solve your particular question and it will be just a step for you to understand how to extend it to something more than this. Because even though this should be a very easy question, it is not. This will work only 2 racks with 2 levels deep, 1 level of height, and a unique row.

这是您需要的结构:

So this is the structure you would need:

由于我不知道您的产品在货架上停留了多长时间,因此我会假设一些事情,那就是在这次活动中,我将决定是否每隔5秒钟从货架上取一个产品(这是绝对任意).

Since I have no idea how long your products stay on the rack, I will assume something, which is that with the event, I will make the decision on wether getting or not a product from the rack every 5 seconds (this is absolutely arbitrary).

您将需要一个自定义代理来存储深度位置.我给代理商Box打了个电话,然后会有大量的Box.不在图中,我也将代理添加到自定义填充框中.框代理将具有2个变量:deep和position将存储代理在机架中的位置和深度(如果需要,还需要水平和行)有一个更复杂的机架)

You will need a custom agent to store the deep position. I call the agent Box and I will have a population of boxes. Not in the picture that I also add agents to the custom population boxes.The box agent will have 2 variables: deep and position which will store the position and deep level of the agent in the rack (you will need also level and row if you have a more complex rack)

现在,该事件每5秒循环运行一次,我将执行以下操作:(如果有等待的箱子,有可用资源并且没有叉车将产品移至托盘架,它将激活)之所以必须这样做,是因为在箱子已经放在托盘架中之前,我不知道叉车将箱子放在哪里.然后,我使用findFirst函数检查一个盒子是否不在另一个盒子的后面,如果一切正常,则发送一个盒子以供选择.

Now on the event, which runs cyclically every 5 seconds, I have the following action: (it activates if there is a box waiting, if there is a resource available and if there is no forklift moving a product to the pallet rack) I have to do this because I cannot know where the forklift is going to put the box until the box is already in the pallet rack. Then I check if a box is not behind another with the findFirst function and if everything ok, a box is sent to be picked.

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出口上,我需要存储位置,因此在出口时"操作中,此代码将有所帮助(您检查是否在同一位置有另一个盒子,如果有,则更新deep变量.然后存储新代理的位置值和deep)

On the rackStore exit I need to store the positions so in the "on exit" action, this code will help (you check if there is another box in the same position, and if there is, you update the value of the deep variable. Then you store the value of the position and deep of the new agent)

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

最后在架子上,选择退出"操作,一旦拣选并交付了产品,您就可以更新其后面的盒子的深层价值(如果有的话)

Finally on the rackPick on exit action, once the product is picked and delivered, you update the deep value of the box that was behind it (if any)

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

我知道所有这些看起来都有些疯狂,但是在使用深层次时,您必须自己创建所有逻辑...

I know all this looks a bit crazy, but you have to create all the logic yourself when it comes to using deep levels...

这篇关于从两个深托盘架中挑选前件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆