创建方式
1.元素对象
初始化时直接将小车放置在轨道上,如.MUs.AGV.create(track,具体位置),同时绑定一个全局变量,之后根据这个全局变量在操纵小车
2.AGV工作池
先定义使用的小车数量,再根据方法
var tbl:table
AGVPool.getAssignedAGVsTable(tbl)获取tbl
那么tbl里面的对象就是操作的小车了
运作方式
实际上无论哪种方式,均可以采用主动遍历查询的方式决定小车的执行策略(如触发器,观察器或者方法的自调用)或者是根据生产仿真的控件出发(抵达终点destCtrl或者相应对象的入口或者出口),期间waituntil是比较常见的方法
1.轨道
轨道触发分为传感器的方法或者是自动路由(AGV.destination := 目的地)
前者优势在于小车可以在抵达相应传感器时根据当前车间或者工厂状态时,调整小车的下一步运行状态,或者优势在于当物流系统调度比较复杂时,减少了冗余代码
顺便一提,轨道单轨和双轨的处理方式也存在区别,最直观的就是避障的话题。对于简单的物流系统而言,可以定制化避障系统,对于复杂的物流调度系统,需要考虑避障系统的建模成本,或者建议采用双轨道的评估方式,计算冲突轨道出现两辆车的次数(即冲突次数),来合理简化模型,而不是为了实现百分百建模而建模,陷入误区。
2.marker点
setRoute([Point]),设置路由点,当到达终点时,DestinationWasReached再做相应的操作,需要注意的是小车的方向@.backwards := true or false,可能会导致小车运行轨迹不平滑,需要人工调整
统计
小车物流的状态包含常见的工作状态,等待状态,返程状态等,需要手动更改driveHome,hasOrder等状态标识,对于统计显示图标chart,将AGV对象直接拖拽至对象,可以快速生成统计表格,节约时间
补充
实际上,一些小车调度系统也可以采用工人池的方式进行评估,并且通过设置禁行区域而达到避障效果。
另外AGV充放电策略也是一个考虑点,需要客户有实际的数据支撑,常规情况下可以根据AGV的实际使用率决定是否需要考虑充放电的问题。
PS:好久没更新,之后考虑讲解一些steffen bansow大佬的例子,就当空闲时间的self learning吧Orz