zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/ReadyReleaseToConveyorSta.java
New file @@ -0,0 +1,33 @@ package com.zy.acs.common.domain.protocol.action; import com.zy.acs.common.domain.protocol.IActionBody; import com.zy.acs.common.utils.Utils; import com.zy.acs.framework.common.RadixTools; import lombok.Data; import java.io.Serializable; /** * 准备往输送线放货 * 属性值:方向,左1 右2 * Created by vincent on 2023/3/23 */ @Data public class ReadyReleaseToConveyorSta implements IActionBody, Serializable { private static final long serialVersionUID = 6496283344148393737L; @Override public byte[] writeToBytes() { return Utils.reverse(RadixTools.shortToByte(this.height)); } @Override public void readFromBytes(byte[] messageBodyBytes) { } // 取货高度 private Short height; } zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/ReadyTakeFromConveyorSta.java
New file @@ -0,0 +1,33 @@ package com.zy.acs.common.domain.protocol.action; import com.zy.acs.common.domain.protocol.IActionBody; import com.zy.acs.common.utils.Utils; import com.zy.acs.framework.common.RadixTools; import lombok.Data; import java.io.Serializable; /** * 准备从输送线取货 * 属性值:方向,左1 右2 * Created by vincent on 2023/3/23 */ @Data public class ReadyTakeFromConveyorSta implements IActionBody, Serializable { private static final long serialVersionUID = 2178106700498872411L; @Override public byte[] writeToBytes() { return Utils.reverse(RadixTools.shortToByte(this.height)); } @Override public void readFromBytes(byte[] messageBodyBytes) { } // 取货高度 private Short height; } zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java
@@ -4,8 +4,7 @@ import com.zy.acs.common.domain.protocol.action.*; /** * 直行后退分巷道 * * 动作码枚举 * */ public enum AgvActionCmdType { @@ -30,6 +29,10 @@ READY_RELEASE_FROM_SHELVES_LOC(0x78, "准备往货架放货", ReadyReleaseToShelvesLoc.class), READY_TAKE_FROM_CONVEYOR_STA(0x79, "准备从输送线取货", ReadyTakeFromConveyorSta.class), READY_RELEASE_FROM_CONVEYOR_STA(0x7A, "准备往输送线放货", ReadyReleaseToConveyorSta.class), FINISH_PATH(0xFF, "整个路径结束", FinishPathAction.class), ; zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -859,6 +859,7 @@ // 作业点动作 AgvDirectionType agvDirectionType; Double staWorkDirection; AgvBackpackType backpackType = AgvBackpackType.query(segment.getBackpack()); switch (Objects.requireNonNull(TaskPosDto.queryPosType(segment.getPosType()))) { case ORI_LOC: @@ -974,18 +975,18 @@ lastDirection = oriStaWorkDirection; } // 计算货叉工作方向 agvDirectionType = mapService.calculateAgvWorkDirectionByStation(oriSta, lastCode); staWorkDirection = mapService.calculateAgvWorkDirectionByStation(oriStaWorkDirection, lastDirection); actionList.add(new Action( null, // 编号 task.getBusId(), // 总线 task.getId(), // 任务 null, // 动作号 null, // 优先级 ActionTypeType.ReadyTakeFromShelvesLoc.desc, // 名称 (double) agvDirectionType.val, // 属性值 ActionTypeType.ReadyTakeFromConveyorSta.desc, // 名称 staWorkDirection, // 属性值 lastCode.getData(), // 地面码 String.valueOf(oriSta.getOffset()), // 动作参数 ActionTypeType.ReadyTakeFromShelvesLoc.val(), // 动作类型 ActionTypeType.ReadyTakeFromConveyorSta.val(), // 动作类型 actionPrepareSts, // 动作进度 agvId, // AGV now // 工作时间 @@ -1053,18 +1054,18 @@ now // 工作时间 )); // 计算货叉工作方向 agvDirectionType = mapService.calculateAgvWorkDirectionByStation(destSta, lastCode); staWorkDirection = mapService.calculateAgvWorkDirectionByStation(destStaWorkDirection, lastDirection); actionList.add(new Action( null, // 编号 task.getBusId(), // 总线 task.getId(), // 任务 null, // 动作号 null, // 优先级 ActionTypeType.ReadyReleaseToShelvesLoc.desc, // 名称 (double) agvDirectionType.val, // 属性值 ActionTypeType.ReadyReleaseToConveyorSta.desc, // 名称 staWorkDirection, // 属性值 lastCode.getData(), // 地面码 String.valueOf(destSta.getOffset()), // 动作参数 ActionTypeType.ReadyReleaseToShelvesLoc.val(), // 动作类型 ActionTypeType.ReadyReleaseToConveyorSta.val(), // 动作类型 actionPrepareSts, // 动作进度 agvId, // AGV now // 工作时间 @@ -1241,7 +1242,6 @@ String agvNo = agvService.getAgvNo(actionList.get(0).getAgvId()); AgvAction agvAction = new AgvAction(agvNo, actionGroupId); for (Action action : actionList) { switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) { case TurnCorner: agvAction.add(new AgvActionItem<>(TurnCornerAction.class) @@ -1275,6 +1275,13 @@ .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams()))) ); break; case ReadyTakeFromConveyorSta: agvAction.add(new AgvActionItem<>(ReadyTakeFromConveyorSta.class) .setVal(action.getVal().intValue()) .setQrCode(action.getCode()) .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams()))) ); break; case ReadyTakeFromAgvSite: agvAction.add(new AgvActionItem<>(ReadyTakeFromAgvSite.class) .setVal(action.getVal().intValue()) @@ -1289,6 +1296,13 @@ .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams()))) ); break; case ReadyReleaseToConveyorSta: agvAction.add(new AgvActionItem<>(ReadyReleaseToConveyorSta.class) .setVal(action.getVal().intValue()) .setQrCode(action.getCode()) .bodySync(body -> body.setHeight((short) Double.parseDouble(action.getParams()))) ); break; case ReadyReleaseToAgvSite: agvAction.add(new AgvActionItem<>(ReadyReleaseToAgvSite.class) .setVal(action.getVal().intValue()) zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -177,8 +177,8 @@ return Double.parseDouble(sta.getAngle()); } public AgvDirectionType calculateAgvWorkDirectionByStation(Sta sta, Code code) { return AgvDirectionType.FORWARD; public Double calculateAgvWorkDirectionByStation(Double staWorkDirection, Double lastDirection) { return Math.abs(staWorkDirection - lastDirection) + 90.0D; } public double calculateDistance(double x1, double y1, double x2, double y2) {