初学者在刚开始学习AGV模块的时候,一般都会遇到这样的情况:放1台AGV到模型里跑是没有问题的,但是多放1台AGV或者更多时,AGV就会锁死Deadlocks?
下面关于这个问题进行解答。
AGV为什么会锁死
在解释什么是“Deadlocks”锁死之前,首先要了解Flexsim中AGV的行进机制,在用户手册上的解释原文是AGV networks have a sophisticated look-ahead mechanism that can avoid crashes by determining if the next control point on the path is available or not. If it is not available, the AGV will wait at its current control point.
意思就是说,AGV具有复杂的前瞻机制,在启动之前,总会先确认路径上的下一个控制点是否可以前往避免崩溃。如果下一个控制点不可用,AGV就会在当前控制点等待;如果下一个控制点一直不可用,AGV就会锁死。
在读懂下面这张图之前,我们需要了解几个关键词:
- Allocation: AGV行驶到或占据控制点(ControlPoint)或者区域(ControlArea)时,该控制点或者区域将由当前的AGV进行分配。换句话说,这个控制点或者区域就属于当前的AGV了,其他AGV就不能再获取到它。
- Deallocation:有分配逻辑就有解除分配逻辑。解除分配有两种类型:“Deallocate At Next Control Point"和"Deallocation when Past Current”。选择的界面就在控制点的属性界面上,如下图所示。
我们通过一个视频来解释,什么是"Deallocate At Next Control Point"和"Deallocation when Past Current"。【我把视频上传到B站了】
两种控制点类型的不同运动形态.mp4
视频中有两个模型,左边模型控制点类型为"Deallocation when Past Current",右边模型控制点类型为"Deallocate At Next Control Point",两个模型的行驶路径上都有5个控制点:左边的模型,第1辆AGV(后面简称AGV1)经过第2个控制点(后面简称控制点2)后,第2辆AGV(后面简称AGV2)就会立刻跟上;右边的模型,AGV1经过控制点2后,AGV2不会立刻跟上,等待AGV1经过控制点3后,AGV2才开始运动。
通过上面的视频就可以解释AGV锁死的最主要原因是:当前AGV在前往下一个控制点(简称控制点A)时,控制点A处于被分配状态【Allocation】,使得AGV无法行使到控制点A ,导致AGV锁死。
因此,如果想要避免AGV出现锁死的现象,可以考虑以下两种方法:
1、把最大分配额【Max Allocations】从【1】改成【大于1的值就行】;
2、多增加几个控制点,防止锁死。