|
|
|
@ -241,7 +241,7 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
public void updateTask(int logicX, int logicY, short direction, int taskStatus) { |
|
|
|
public void taskCompleted(int logicX, int logicY, short direction, int taskStatus) { |
|
|
|
|
|
|
|
updatePosition(logicX, logicY, direction); |
|
|
|
// 查找当前分组任务
|
|
|
|
@ -257,11 +257,12 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (planTaskSequence.isAllCompleted()) { |
|
|
|
if (planTaskSequence != null && planTaskSequence.isAllCompleted()) { |
|
|
|
fireEvent(AgvEventType.PLAN_COMPLETE, this); |
|
|
|
this.runningDeviceTaskList.clear(); |
|
|
|
planTaskSequence = null; |
|
|
|
} |
|
|
|
LockSupport.unpark(connectorThread); |
|
|
|
} |
|
|
|
|
|
|
|
public void updatePosition(int logicX, int logicY, short direction) { |
|
|
|
@ -339,10 +340,14 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
) |
|
|
|
}); |
|
|
|
|
|
|
|
if (needCompute) { |
|
|
|
if (needCompute && this.runningDeviceTaskList.size() > 0) { |
|
|
|
int index = this.runningDeviceTaskList.size() - 1; |
|
|
|
PtrAgvDeviceTask task = this.runningDeviceTaskList.get(index); |
|
|
|
if (task.groupEndPoint != task.endPoint) { |
|
|
|
LockSupport.unpark(connectorThread); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新设备任务状态 暂时没有处理任务取消相关的状态 |
|
|
|
@ -489,18 +494,22 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
linkStore = (List<Map<String, Object>>) pointItem.dt.get("linkStore"); |
|
|
|
int d = -1; |
|
|
|
if (startPoint.logicX == pointItem.logicX && startPoint.logicY != pointItem.logicY) { |
|
|
|
d = pointItem.logicY > startPoint.logicY ? CDirection.db : CDirection.dt; |
|
|
|
d = pointItem.logicY >= startPoint.logicY ? CDirection.db : CDirection.dt; |
|
|
|
if ((d > direction && d - CDirection.dl != direction) || (d < direction && d + CDirection.dl != direction)) { |
|
|
|
throw new RuntimeException("方向错误"); |
|
|
|
} |
|
|
|
|
|
|
|
} else if (startPoint.logicY == pointItem.logicY && startPoint.logicX != pointItem.logicX) { |
|
|
|
d = pointItem.logicX > startPoint.logicX ? CDirection.dr : CDirection.dl; |
|
|
|
d = pointItem.logicX >= startPoint.logicX ? CDirection.dr : CDirection.dl; |
|
|
|
if ((d > direction && d - CDirection.dl != direction) || (d < direction && d + CDirection.dl != direction)) { |
|
|
|
throw new RuntimeException("方向错误"); |
|
|
|
} |
|
|
|
// distance += Math.abs(pointItem.getTransformationX() - startPoint.getTransformationX());
|
|
|
|
|
|
|
|
} else if (startPoint.logicY == pointItem.logicY && startPoint.logicX == pointItem.logicX) { |
|
|
|
d = direction; |
|
|
|
// distance += Math.abs(pointItem.getTransformationX() - startPoint.getTransformationX());
|
|
|
|
|
|
|
|
} else { |
|
|
|
throw new RuntimeException("无法识别的点位关系"); |
|
|
|
} |
|
|
|
@ -549,6 +558,25 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
|
|
|
|
} else if (plan.getPlanType().equals(PlanTaskType.LOAD.toString())) { |
|
|
|
|
|
|
|
if (deviceTaskList.isEmpty()) { |
|
|
|
PtrAgvDeviceTask deviceTask = new PtrAgvDeviceTask(); |
|
|
|
deviceTask.x = startPoint.logicX; |
|
|
|
deviceTask.y = startPoint.logicY; |
|
|
|
deviceTask.speed = speed; |
|
|
|
deviceTask.direction = direction; |
|
|
|
deviceTask.pickMode = 0; |
|
|
|
deviceTask.startPoint = startPoint; |
|
|
|
deviceTask.endPoint = startPoint; |
|
|
|
deviceTask.bizTaskId = plan.getBizTaskId(); |
|
|
|
deviceTask.movePlanTaskId = plan.getPlanTaskId(); |
|
|
|
deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); |
|
|
|
rotationPlanTaskIdSet.clear(); |
|
|
|
// 行走任务完成后,检查用的字段
|
|
|
|
deviceTask.checkLogicX = startPoint.logicX; |
|
|
|
deviceTask.checkLogicY = startPoint.logicY; |
|
|
|
deviceTaskList.add(deviceTask); |
|
|
|
linkStore = (List<Map<String, Object>>) startPoint.dt.get("linkStore"); |
|
|
|
} |
|
|
|
PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1); |
|
|
|
deviceTask.operationType = COperationType.transplantLoadAndUnload; |
|
|
|
deviceTask.pickMode = CPickMode.load; |
|
|
|
@ -594,6 +622,25 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
groupStartPoint = deviceTask.endPoint; |
|
|
|
|
|
|
|
} else if (plan.getPlanType().equals(PlanTaskType.UNLOAD.toString())) { |
|
|
|
if (deviceTaskList.isEmpty()) { |
|
|
|
PtrAgvDeviceTask deviceTask = new PtrAgvDeviceTask(); |
|
|
|
deviceTask.x = startPoint.logicX; |
|
|
|
deviceTask.y = startPoint.logicY; |
|
|
|
deviceTask.speed = speed; |
|
|
|
deviceTask.direction = direction; |
|
|
|
deviceTask.pickMode = 0; |
|
|
|
deviceTask.startPoint = startPoint; |
|
|
|
deviceTask.endPoint = startPoint; |
|
|
|
deviceTask.bizTaskId = plan.getBizTaskId(); |
|
|
|
deviceTask.movePlanTaskId = plan.getPlanTaskId(); |
|
|
|
deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); |
|
|
|
rotationPlanTaskIdSet.clear(); |
|
|
|
// 行走任务完成后,检查用的字段
|
|
|
|
deviceTask.checkLogicX = startPoint.logicX; |
|
|
|
deviceTask.checkLogicY = startPoint.logicY; |
|
|
|
deviceTaskList.add(deviceTask); |
|
|
|
linkStore = (List<Map<String, Object>>) startPoint.dt.get("linkStore"); |
|
|
|
} |
|
|
|
PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1); |
|
|
|
deviceTask.operationType = COperationType.transplantLoadAndUnload; |
|
|
|
deviceTask.pickMode = CPickMode.unload; |
|
|
|
@ -638,6 +685,24 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
groupStartPoint = deviceTask.endPoint; |
|
|
|
|
|
|
|
} else if (plan.getPlanType().equals(PlanTaskType.CHARGE.toString())) { |
|
|
|
if (deviceTaskList.isEmpty()) { |
|
|
|
PtrAgvDeviceTask deviceTask = new PtrAgvDeviceTask(); |
|
|
|
deviceTask.x = startPoint.logicX; |
|
|
|
deviceTask.y = startPoint.logicY; |
|
|
|
deviceTask.speed = speed; |
|
|
|
deviceTask.direction = direction; |
|
|
|
deviceTask.pickMode = 0; |
|
|
|
deviceTask.startPoint = startPoint; |
|
|
|
deviceTask.endPoint = startPoint; |
|
|
|
deviceTask.bizTaskId = plan.getBizTaskId(); |
|
|
|
deviceTask.movePlanTaskId = plan.getPlanTaskId(); |
|
|
|
deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); |
|
|
|
rotationPlanTaskIdSet.clear(); |
|
|
|
// 行走任务完成后,检查用的字段
|
|
|
|
deviceTask.checkLogicX = startPoint.logicX; |
|
|
|
deviceTask.checkLogicY = startPoint.logicY; |
|
|
|
deviceTaskList.add(deviceTask); |
|
|
|
} |
|
|
|
PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1); |
|
|
|
deviceTask.operationType = COperationType.charge; |
|
|
|
deviceTask.planTaskIdSet.add(plan.getPlanTaskId()); |
|
|
|
@ -657,7 +722,9 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (deviceTaskList.size() <= 0) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 标记任务分组结束
|
|
|
|
PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1); |
|
|
|
|