zjj
2023-11-22 7d06cea49f39ab2bc9177833d0ab2a04bd53e3eb
#联机
5个文件已修改
157 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/CrnController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/CrnCommand.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -596,8 +596,40 @@
//        command.setDestinationPosZ(param.getLev());     // 目标库位层
        command.setAuto((short)1);
        return crnControl(command)?R.ok():R.error();
        return crnControl2(command)?R.ok():R.error();
    }
    private boolean crnControl2(CrnCommand command){
        if (command.getCrnNo() == null) {
            throw new CoolException("请选择堆垛机");
        }
        for (CrnSlave crn : slaveProperties.getCrn()) {
            // 获取堆垛机信息
            if (command.getCrnNo().equals(crn.getId())) {
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                if (crnThread == null) {
                    throw new CoolException("堆垛机不在线");
                }
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    throw new CoolException("堆垛机不在线");
                }
                // 空闲判断
//                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
                if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(4, command))) {
                    return true;
                } else {
                    throw new CoolException("命令下发失败");
                }
//                } else {
//                    throw new CoolException("堆垛机不在空闲状态");
//                }
            }
        }
        return false;
    }
    private boolean crnControl(CrnCommand command){
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -232,12 +232,13 @@
            crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 工作号
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
            crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
            crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
            crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
            crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
            crnCommand.setSourcePosX(crnStn.getBay().shortValue());     // 源库位列
            crnCommand.setSourcePosY(crnStn.getLev().shortValue());     // 源库位层
            crnCommand.setSourcePosZ(crnStn.getRow().shortValue());     // 源库位排
            crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
            crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
            crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint()));     // 目标库位排
            crnCommand.setCommand((short)1);
            if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -42,13 +42,13 @@
    @JSONField(serialize = false)
    private CrnTaskModeType taskModeType;
    // 源位置排号
    // 源位置列号
    private Short sourcePosX = 0;
    // 源位置列号
    // 源位置层号
    private Short sourcePosY = 0;
    // 源位置层号
    // 源位置排号
    private Short sourcePosZ = 0;
    // 源站
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -96,6 +96,9 @@
                        command.setDestinationPosZ((short)0);     // 目标库位层
                        write(command);
                        break;
                    case 4:
                        writeAuto((CrnCommand) task.getData());
                        break;
                    default:
                        break;
                }
@@ -384,47 +387,48 @@
            log.error("堆垛机写入命令为空");
            return false;
        }
        if (command.getTaskNo() == 0 && command.getAckFinish() == 0) {
        if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) {
            command.setTaskNo((short) 9999);
        }
        command.setCrnNo(slave.getId());
        short[] array = new short[12];
        if (command.getAckFinish() == 0) {
        if (Cools.isEmpty(command.getAckFinish())) {
            array[0] = 5;
        } else {
            array[0] = 0;
            array[0] = command.getAckFinish();
        }
        array[1] = command.getTaskNo();
        array[2] = command.getTaskMode();
        array[3] = command.getDestinationPosZ();
        if (rowOne.contains(command.getSourcePosX())){
            array[4] = (short)1;
        }else if (rowTwo.contains(command.getSourcePosX())){
            array[4] = (short)2;
        }else if (rowThree.contains(command.getSourcePosX())){
            array[4] = (short)3;
        }else if (rowFour.contains(command.getSourcePosX())){
            array[4] = (short)4;
        }else {
        array[3] = command.getSourcePosZ();
//        if (rowOne.contains(command.getSourcePosX())){
//            array[4] = (short)1;
//        }else if (rowTwo.contains(command.getSourcePosX())){
//            array[4] = (short)2;
//        }else if (rowThree.contains(command.getSourcePosX())){
//            array[4] = (short)3;
//        }else if (rowFour.contains(command.getSourcePosX())){
//            array[4] = (short)4;
//        }else {
            array[4] = command.getSourcePosX();
        }
//        }
        array[5] = command.getDestinationPosY();
        array[6] = command.getDestinationPosZ();
        if (rowOne.contains(command.getDestinationPosX())){
            array[7] = (short)1;
        }else if (rowTwo.contains(command.getDestinationPosX())){
            array[7] = (short)2;
        }else if (rowThree.contains(command.getDestinationPosX())){
            array[7] = (short)3;
        }else if (rowFour.contains(command.getDestinationPosX())){
            array[7] = (short)4;
        }else {
//        if (rowOne.contains(command.getDestinationPosX())){
//            array[7] = (short)1;
//        }else if (rowTwo.contains(command.getDestinationPosX())){
//            array[7] = (short)2;
//        }else if (rowThree.contains(command.getDestinationPosX())){
//            array[7] = (short)3;
//        }else if (rowFour.contains(command.getDestinationPosX())){
//            array[7] = (short)4;
//        }else {
            array[7] = command.getDestinationPosX();
        }
//        }
        array[8] = command.getDestinationPosY();
        array[9] = command.getCommand();
        if (!Cools.isEmpty(command.getAuto())){
            array[10] = command.getAuto();
        }
@@ -503,6 +507,50 @@
        }
    }
    private boolean writeAuto(CrnCommand command){
        if (null == command) {
            log.error("堆垛机写入命令为空");
            return false;
        }
        short[] array = new short[1];
        array[0] = command.getAuto();
        OperateResult result = siemensNet.Write("DB100.20", array);
        //更新命令日志
        CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
        CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
        CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId());
        CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
        commandInfoLog.setId(null);
        if (result.IsSuccess) {
            log.warn("堆垛机命令下发[id:{},时间:{}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command));
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
            //更新指令日志
            commandInfoLog.setDeviceLog("指令下发成功");
            commandInfoLogService.insert(commandInfoLog);
            //更新任务步序
            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
            TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue());
            if (taskWrk != null) {
                taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//更新指令步序
                taskWrkService.updateById(taskWrk);
            }
            return true;
        } else {
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            log.error("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
            //更新指令日志
            commandInfoLog.setDeviceLog("指令下发失败");
            commandInfoLogService.insert(commandInfoLog);
            return false;
        }
    }
    @Override
    public void close() {
        siemensNet.ConnectClose();
src/main/resources/application-prod.yml
@@ -107,14 +107,14 @@
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]:  #堆垛机出库站点
      staNo: 103
      row: 3
      staNo: 112
      row: 12
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnInStn[0]:  #堆垛机入库站点1
      staNo: 100
      row: 4
      staNo: 115
      row: 13
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}