yuliang 6 months ago
parent
commit
cb3f925206
  1. 4
      servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java
  2. 79
      servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

4
servo/src/main/java/com/galaxis/rcs/ptr/AmrMessageHandler.java

@ -422,7 +422,7 @@ public class AmrMessageHandler {
private void handleTaskCompletedMessage(PtrAgvItem agvItem, AmrTaskCompletedMessage message) { private void handleTaskCompletedMessage(PtrAgvItem agvItem, AmrTaskCompletedMessage message) {
agvItem.updateTask(message.CurX, message.CurY, message.CurDirection, 4); agvItem.taskCompleted(message.CurX, message.CurY, message.CurDirection, 4);
} }
private void handleLandmarkMessage(PtrAgvItem agvItem, AmrLandmarkMessage message) { private void handleLandmarkMessage(PtrAgvItem agvItem, AmrLandmarkMessage message) {
@ -494,7 +494,7 @@ public class AmrMessageHandler {
// agvItem.logicY = completedMessage.Info.CurLogicY; // agvItem.logicY = completedMessage.Info.CurLogicY;
// // agvStatusAndInfo.orientation = landmarkMessage.content.CurOrientation; // // agvStatusAndInfo.orientation = landmarkMessage.content.CurOrientation;
// agvItem.direction = taskCompleted.content.Info.CurDirection; // agvItem.direction = taskCompleted.content.Info.CurDirection;
agvItem.updateTask(completedMessage.Info.CurLogicX, completedMessage.Info.CurLogicY, taskCompleted.content.Info.CurDirection, 4); // agvItem.updateTask(completedMessage.Info.CurLogicX, completedMessage.Info.CurLogicY, taskCompleted.content.Info.CurDirection, 4);
agvItem.updatePosition(completedMessage.Info.CurLogicX, completedMessage.Info.CurLogicY, taskCompleted.content.Info.CurDirection); agvItem.updatePosition(completedMessage.Info.CurLogicX, completedMessage.Info.CurLogicY, taskCompleted.content.Info.CurDirection);
break; break;
case 8: case 8:

79
servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

@ -241,7 +241,7 @@ public abstract class PtrAgvItem extends ExecutorItem {
return true; 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); 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); fireEvent(AgvEventType.PLAN_COMPLETE, this);
this.runningDeviceTaskList.clear(); this.runningDeviceTaskList.clear();
planTaskSequence = null; planTaskSequence = null;
} }
LockSupport.unpark(connectorThread);
} }
public void updatePosition(int logicX, int logicY, short direction) { 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); LockSupport.unpark(connectorThread);
} }
} }
}
/** /**
* 更新设备任务状态 暂时没有处理任务取消相关的状态 * 更新设备任务状态 暂时没有处理任务取消相关的状态
@ -489,18 +494,22 @@ public abstract class PtrAgvItem extends ExecutorItem {
linkStore = (List<Map<String, Object>>) pointItem.dt.get("linkStore"); linkStore = (List<Map<String, Object>>) pointItem.dt.get("linkStore");
int d = -1; int d = -1;
if (startPoint.logicX == pointItem.logicX && startPoint.logicY != pointItem.logicY) { 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)) { if ((d > direction && d - CDirection.dl != direction) || (d < direction && d + CDirection.dl != direction)) {
throw new RuntimeException("方向错误"); throw new RuntimeException("方向错误");
} }
} else if (startPoint.logicY == pointItem.logicY && startPoint.logicX != pointItem.logicX) { } 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)) { if ((d > direction && d - CDirection.dl != direction) || (d < direction && d + CDirection.dl != direction)) {
throw new RuntimeException("方向错误"); throw new RuntimeException("方向错误");
} }
// distance += Math.abs(pointItem.getTransformationX() - startPoint.getTransformationX()); // 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 { } else {
throw new RuntimeException("无法识别的点位关系"); throw new RuntimeException("无法识别的点位关系");
} }
@ -549,6 +558,25 @@ public abstract class PtrAgvItem extends ExecutorItem {
} else if (plan.getPlanType().equals(PlanTaskType.LOAD.toString())) { } 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); PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1);
deviceTask.operationType = COperationType.transplantLoadAndUnload; deviceTask.operationType = COperationType.transplantLoadAndUnload;
deviceTask.pickMode = CPickMode.load; deviceTask.pickMode = CPickMode.load;
@ -594,6 +622,25 @@ public abstract class PtrAgvItem extends ExecutorItem {
groupStartPoint = deviceTask.endPoint; groupStartPoint = deviceTask.endPoint;
} else if (plan.getPlanType().equals(PlanTaskType.UNLOAD.toString())) { } 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); PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1);
deviceTask.operationType = COperationType.transplantLoadAndUnload; deviceTask.operationType = COperationType.transplantLoadAndUnload;
deviceTask.pickMode = CPickMode.unload; deviceTask.pickMode = CPickMode.unload;
@ -638,6 +685,24 @@ public abstract class PtrAgvItem extends ExecutorItem {
groupStartPoint = deviceTask.endPoint; groupStartPoint = deviceTask.endPoint;
} else if (plan.getPlanType().equals(PlanTaskType.CHARGE.toString())) { } 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); PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1);
deviceTask.operationType = COperationType.charge; deviceTask.operationType = COperationType.charge;
deviceTask.planTaskIdSet.add(plan.getPlanTaskId()); 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); PtrAgvDeviceTask deviceTask = deviceTaskList.get(deviceTaskList.size() - 1);

Loading…
Cancel
Save