如何让立体库拆盘机的空托盘堆的调度“万无一失”
自动库中,托盘是重要的物理载体,也是核心的数据索引;
在自动化较高的项目中,空托盘往往不下线,自动码盘&拆盘,形成一个“自循环”体;
目的是为了给入出库作业,自动在线上供应载体;
所以常见的流程是这样的:
1.出库完成后,剩下空托盘,自动回收至码盘机,码盘机码满后(一般放8片[数字吉利] ),自动退出来入库;
2.入库的时候,拆盘机会自动一片接一片的供应到入库位置上(一般入库位置紧挨着码盘机),一旦拆盘机的托盘片都拆完了,就要让堆垛机自动出库补充;
当然,如果真的在拆盘机空的时候,才补充,时机上也太晚了; 所以常见的做法,是要放1个或多个拆盘机的缓存位(一般缓存位也紧挨着拆盘机),码盘机一空,缓存位马上补充,缓存位一空,堆垛机自动出库补充;这样就是常见的套路;
作为一个软件调度系统,该如何做严谨的设计呢?
最直接的做法:
侦测缓存位,一旦缓存位空了,就触发让堆垛机出一个空托盘堆;
但是,如果触发成功了,堆垛机也开始正在调度一个托盘过来了,那么缓存位也不会立刻就会补上,可能有1分钟的时间差;
所以,调度一个空托盘堆出来,至少要判断:
1.缓存位空了;
2.没有正在来缓存位的托盘任务;
如下图:CP1103 是拆盘机位置,CC1101是码盘机缓存位;
(缺图)
上面只是考虑拆盘机相关的状态和任务;
还有一个关键点,要考虑堆垛机状态;比如 某个拆盘机缓存位需要空托盘堆,如果我们调度逻辑仅仅是先进先出,那么有一个大风险;
假如按照先进先出,应该出3号堆垛机的某个托盘,结果这时候3号机是故障的,一旦给3号机分配了任务,它是不能马上动作的,但是你这时候又不能再给其他堆垛机出库,否者会导致最终空托盘堆多出一个出来,这样后果很严重,因为多出的托盘就会“孤魂野鬼般”的线体上打转无法进入缓存位;当然你可以说,如果再给其他堆垛机分配任务,就把事先在3号机分配的任务取消掉;方法固然可以,但是复杂了;
所以,调度堆垛机的时候,要考虑堆垛机状态,不能使用有异常的堆垛机;
仅仅考虑使用正常的堆垛机就够了吗?
不够,如果这个堆垛机正在工作,无论出库还是入库,你最好还是不要用这个堆垛机,因为你保不准它当前这个动作做完之前,会不会出现故障;
所以,你不但要考虑要调度正常的堆垛机,最好还要考虑当前正常空闲的堆垛机,这个安全系数更高;
当然,这样做也有个弊端,如果在调度的那个时刻,库里面的堆垛机都在忙碌,岂不是没有堆垛机可用;
这里有两种方法:
1.如果都在忙碌,就随便找一台使用,等他把手上这个任务结束了,在穿插做这个空托盘堆出库的任务;
2. 如果都在忙碌,就不调了,等过半分钟(时间可以设置)再试试,看看有没有空闲的;如果不行在等半分钟后再试;
考虑了拆盘机缓存位 和 堆垛机 的情况后,是不是就够了呢?
不全够,你还要考虑 从 堆垛机 到 拆盘机缓存位 的半路上的关键节点是否堵住,如果堵住,那么及时分配了堆垛务,但是走到咽喉那里就会死在那里,进退两难,你说再从其他堆垛机调度一个过来,这个方法也不可取,因为线体上多一个,一旦那个位置通了,这个空托盘堆仍然会孤魂野鬼般的在线体死循环;而且你如何线体拥堵,再调一个补充,实现起来也不容易;
那么最常见的关键节点是什么呢? 堆垛机出库站台;
所以我们在调度的时候,最好使用出库站台没东西的;
甚至,这个关键节点,是和缓存位串行的,也就是该节点是所有堆垛机出库后到达缓存位都要经过的;如果这种情况,你就别调度了,等什么时候关键节点通了,你在调度;
因为提前调度可能导致堆垛机出库后,托盘在关键节点前面停止,增加了线体的拥堵;
所以,调度逻辑总结如下:
1.拆盘机缓存位空闲(这是必要条件);
2.如果已经生成了到达该缓存位的任务,就不能重复生成其他任务;
3.所选的出库堆垛机必须是无故障的;
4.所选的出库堆垛机最好是空闲的;
5.所选的出库堆垛机对应的出库站台最好是空着的,最大的可能性保障出库畅通;
6. 不同堆垛机到缓存位之间的各自的咽喉位置要考虑是畅通的((这个最好做成路径约束配置,类似地图导航,哪里拥堵,就最好绕道)
如果到缓存位前有咽喉位置,最好等这个位置空了,再调度,以免增加线体的拥堵
当然,以上只是一些常识,不同位置的拆盘机,有的时候要区别对待;总之,拆盘机的供应调度把握一点:类似狙击手,一旦出击,要万物一失;如果控制不好,要么多调,要么任务生成了,不能及时出来;
No comment