#
vincentlu
2025-04-02 cedb12de87ac799582eed01f66c2f6b698585a69
#
3个文件已修改
2个文件已添加
109 ■■■■ 已修改文件
zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/ReadyReleaseToConveyorSta.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-common/src/main/java/com/zy/acs/common/domain/protocol/action/ReadyTakeFromConveyorSta.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-common/src/main/java/com/zy/acs/common/enums/AgvActionCmdType.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {