全球FlexSim系统仿真中文论坛

标题: 2019年第四期远程培训之库内倒箱 [打印本页]

作者: shiny0801    时间: 2019-5-10 17:46
标题: 2019年第四期远程培训之库内倒箱
在自动化立体库的仿真项目中,如果要出库的货物外侧有货物阻挡,则需要堆垛机先把阻挡的货物移到别的巷道再进行出库作业。模型布局如图所示:
[attach]4910[/attach]
建模步骤如下:
1.     创建一个货架,勾选Floor Storage(平置货架)。该货架作为整个立库的第一层。
注意:本demo只示意立库为一层时的做法,如果实际应用中涉及到多层可复制该货架修改z轴坐标并在逻辑中加入立库层——即第几个货架的判断。
2.     由于布局中货架位于堆垛机右侧,而货架默认列从左开始为第一列,故旋转货架Z轴180度,使货物入库从右侧开始放置。
3.     使用PF产生初始库存,50个item。
4.     出库item为随机选择
5.     在PF的出库逻辑线中,如果经过判断要出库的item外侧有其他item阻挡,则堆垛机先去装载需要挪出的物料,load之后逻辑判断该物料需要放置到哪一层(即哪一个巷道),判断逻辑为从第一层开始循环并在爆仓时进行弹窗提醒,若找到能存放的level则把level存在item的level标签上进行记录,如下图:
[attach]4911[/attach]
6.     有了上面第五点对于level的判断,我们在货架的放置到列触发器中写如下代码:
int cellcap = 1;
int nrofbays = rackgetnrofbays(current);
if(!objectexists(item.labels["level"]))
{
   for (int index= 1; index  <= nrofbays; index ++) {
           if(rackgetbaycontent(current, index ) < cellcap * rackgetnroflevels(current,index ))
                    returnindex ;
   }
}
else//倒库
{
   int ii =1;
   while(rackgetcellcontent(current,ii,item.level)>0)
   {
           ii++;
   }
   return ii;
}
return 1;
在货架的放置到层触发器中写如下代码:
int cellcap = 1;
int nroflevels = rackgetnroflevels(current,baynumber);
if(!objectexists(item.labels["level"]))
{
   for (int index= 1; index  <= nroflevels ; index ++){
           if(rackgetcellcontent(current, baynumber, index ) < cellcap)
                    returnindex ;
   }
}
else//倒库
{
   returnitem.level;
}
return 1;
注意:货架的这两个触发器的触发顺序是先触发放置到列,再触发放置到层。所以我先把放置到的层的编号在PF中unload之前确定下来,以便在放置到列中可以调用到。
7 a5 j5 x9 g! @5 H1 y' }) J

作者: Htenghui    时间: 2019-5-10 19:14
谢谢徐老师
作者: dthghjc    时间: 2019-5-13 09:04
谢谢分享
作者: 沈瑞祥    时间: 2019-5-23 16:37
谢谢徐春琦老师!
作者: JackKup0926    时间: 2019-5-29 13:49
謝謝老師分享




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3