自动化立体仓库 - WCS系统
zjj
2023-11-23 86e5cfe90f800ba197c466fdd659c65873a813e1
#堆垛机出入库
10个文件已修改
178 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/CrnController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrk.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/taskCreateParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/CrnCommand.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/deviceOperate/crnOperate.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -2,6 +2,7 @@
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
@@ -22,6 +23,7 @@
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.VersionUtils;
import com.zy.common.utils.HttpHandler;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
@@ -37,8 +39,10 @@
import com.zy.core.properties.SystemProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -51,6 +55,11 @@
@Slf4j
@RestController
public class CrnController {
    @Value("${wms.url}")
    private String wmsUrl;
    @Value("${wms.movePath}")
    private String movePath;
@@ -586,14 +595,6 @@
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
//        command.setAckFinish((short) 0);  // 任务完成确认位
//        command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式
//        command.setSourcePosX(param.getSourceRow());     // 源库位排
//        command.setSourcePosY(param.getSourceBay());     // 源库位列
//        command.setSourcePosZ(param.getSourceLev());     // 源库位层
//        command.setDestinationPosX(param.getRow());     // 目标库位排
//        command.setDestinationPosY(param.getBay());     // 目标库位列
//        command.setDestinationPosZ(param.getLev());     // 目标库位层
        command.setAuto((short)1);
        return crnControl2(command)?R.ok():R.error();
@@ -605,37 +606,68 @@
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
//        command.setAckFinish((short) 0);  // 任务完成确认位
//        command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式
//        command.setSourcePosX(param.getSourceRow());     // 源库位排
//        command.setSourcePosY(param.getSourceBay());     // 源库位列
//        command.setSourcePosZ(param.getSourceLev());     // 源库位层
//        command.setDestinationPosX(param.getRow());     // 目标库位排
//        command.setDestinationPosY(param.getBay());     // 目标库位列
//        command.setDestinationPosZ(param.getLev());     // 目标库位层
        command.setAuto((short)2);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "切换手动模式")
    @PostMapping("/crn/operator/hand")
    public R onlineWrk1(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setAuto((short)3);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "申请完成任务")
    @PostMapping("/crn/operator/onlineWrk1")
    public R onlineWrk2(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk1((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "申请取消任务")
    @PostMapping("/crn/operator/onlineWrk2")
    public R onlineWrk3(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk2((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "清除联机任务")
    @PostMapping("/crn/operator/onlineWrk3")
    public R onlineWrk4(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
        command.setOnlineWrk3((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    @ManagerAuth(memo = "恢复联机任务")
    @PostMapping("/crn/operator/onlineWrk4")
    public R crnHand(CrnOperatorParam param){
        short[] array = new short[9];
        CrnCommand command = new CrnCommand();
        command.setCrnNo(param.getCrnNo()); // 堆垛机编号
        command.setTaskNo((short) 0); // 工作号
//        command.setAckFinish((short) 0);  // 任务完成确认位
//        command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式
//        command.setSourcePosX(param.getSourceRow());     // 源库位排
//        command.setSourcePosY(param.getSourceBay());     // 源库位列
//        command.setSourcePosZ(param.getSourceLev());     // 源库位层
//        command.setDestinationPosX(param.getRow());     // 目标库位排
//        command.setDestinationPosY(param.getBay());     // 目标库位列
//        command.setDestinationPosZ(param.getLev());     // 目标库位层
        command.setAuto((short)3);
        command.setOnlineWrk4((short)1);
        return crnControl2(command)?R.ok():R.error();
    }
    private boolean crnControl2(CrnCommand command){
        if (command.getCrnNo() == null) {
            throw new CoolException("请选择堆垛机");
src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.models.auth.In;
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.SpringUtils;
import com.zy.asrs.service.BasWrkIotypeService;
@@ -78,7 +80,7 @@
     */
    @ApiModelProperty(value= "优先级")
    @TableField("io_pri")
    private Double ioPri;
    private Integer ioPri;
    /**
     * 起点
@@ -180,7 +182,7 @@
    public TaskWrk() {}
    public TaskWrk(String taskNo,Integer status,Integer wrkNo,Date createTime,Integer ioType,Double ioPri,String startPoint,String targetPoint,Long modiUser,Date modiTime,String memo,String barcode,Date assignTime,Date executeTime,Date completeTime,Date cancelTime,Integer wrkSts) {
    public TaskWrk(String taskNo,Integer status,Integer wrkNo,Date createTime,Integer ioType,Integer ioPri,String startPoint,String targetPoint,Long modiUser,Date modiTime,String memo,String barcode,Date assignTime,Date executeTime,Date completeTime,Date cancelTime,Integer wrkSts) {
        this.taskNo = taskNo;
        this.status = status;
        this.wrkNo = wrkNo;
src/main/java/com/zy/asrs/entity/param/taskCreateParam.java
@@ -15,7 +15,7 @@
    private String startPoint;
    //优先级
    private Double taskPriority;
    private Integer taskPriority;
    //终点
    private String targetPoint;
@@ -35,7 +35,7 @@
        this.taskNo = param.getTaskNo();
        this.ioType = convertParamIoType(param.getTaskType());
        this.barcode = param.getContainerCode();
        this.taskPriority = (double) param.getTaskPriority();
        this.taskPriority = param.getTaskPriority();
        this.startPoint = param.getSourceLocationCode();
        this.targetPoint = param.getTargetLocationCode();
        this.emptyContainer = param.getEmptyContainer();
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,5 +1,6 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.taskCreateParam;
public interface OpenService {
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -92,7 +92,7 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                    // 查询工作档
                    TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staProtocol.getSiteId().toString());
                    if (taskWrk == null) {
@@ -109,7 +109,7 @@
                        }
                        //  判断堆垛机状态等待确认
                        if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(taskWrk.getWrkNo().shortValue())
                                && crnProtocol.getTaskFinish() == 1
                                && crnProtocol.getTaskFinish() == 0
                                && crnProtocol.forkPosType == CrnForkPosType.HOME) {
                            // 命令下发区 --------------------------------------------------------------------------
@@ -447,7 +447,7 @@
                    continue;
                }
                // 入库 + 库位转移  ==> 4.入库完成
                if (taskWrk.getWrkSts() == 3 || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 2)) {
                if (taskWrk.getWrkSts() == 3 || (taskWrk.getWrkSts() == 12 && taskWrk.getIoType() == 3)) {
                    taskWrk.setWrkSts(4);
                } else {
                    continue;
src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -75,6 +75,15 @@
    //联机模式
    private Short auto = 0;
    //申请完成任务
    private Short onlineWrk1 = 0;
    //申请取消任务
    private Short onlineWrk2 = 0;
    //清除联机任务
    private Short onlineWrk3 = 0;
    //恢复联机任务
    private Short onlineWrk4 = 0;
    // 任务确认 0:未确认 1:已确认
    private Short command = 0;
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -392,7 +392,7 @@
        }
        command.setCrnNo(slave.getId());
        short[] array = new short[12];
        short[] array = new short[10];
        if (Cools.isEmpty(command.getAckFinish())) {
            array[0] = 5;
        } else {
@@ -429,9 +429,7 @@
//        }
        array[8] = command.getDestinationPosY();
        array[9] = command.getCommand();
        if (!Cools.isEmpty(command.getAuto())){
            array[10] = command.getAuto();
        }
        // 作业信息
@@ -527,9 +525,27 @@
            log.error("堆垛机写入命令为空");
            return false;
        }
        OperateResult result = new OperateResult();
        short[] array = new short[1];
        array[0] = command.getAuto();
        OperateResult result = siemensNet.Write("DB100.20", array);
        if(command.getAuto() !=0){
            array[0] = command.getAuto();
            result = siemensNet.Write("DB103.0", array);
        }else if (command.getOnlineWrk1() != 0){
            array[0] = command.getOnlineWrk1();
            result = siemensNet.Write("DB103.2", array);
        }else if (command.getOnlineWrk2() !=0){
            array[0] = command.getOnlineWrk2();
            result = siemensNet.Write("DB103.4", array);
        }else if (command.getOnlineWrk3() != 0){
            array[0] = command.getOnlineWrk3();
            result = siemensNet.Write("DB103.6", array);
        }else if (command.getOnlineWrk4() != 0){
            array[0] = command.getOnlineWrk4();
            result = siemensNet.Write("DB103.8", array);
        }
        //更新命令日志
        CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -246,23 +246,23 @@
//
//            }
        //RGV台车位置
        Thread.sleep(200);
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB100.0",(short)4);
        if (result3.IsSuccess) {
            for (int i = 0; i < 2; i++) {
                Integer siteId = i==0 ? 112 : 212; // 站点编号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2)));
//                String aa = staProtocol.getNearbySta();
//                System.out.println(siteId + "===>>" + staProtocol.getNearbySta());
            }
        }
//        //RGV台车位置
//        Thread.sleep(200);
//        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB100.0",(short)4);
//        if (result3.IsSuccess) {
//            for (int i = 0; i < 2; i++) {
//                Integer siteId = i==0 ? 1 : 2; // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2)));
////                String aa = staProtocol.getNearbySta();
////                System.out.println(siteId + "===>>" + staProtocol.getNearbySta());
//            }
//        }
//        OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0");
//        if (result2.IsSuccess) {
src/main/resources/application.yml
@@ -39,7 +39,7 @@
  # 是否开启上报
  start: true
  # WMS系统ip
  url: 10.12.20.12:5001
  url: 10.32.53.195:8080
  # 入库任务申请接口
  inboundTaskApplyPath: api/InterFace/get_InterFace_TestStorage
  # 任务状态反馈接口
src/main/webapp/views/deviceOperate/crnOperate.html
@@ -85,12 +85,12 @@
                            <el-button @click="requestOperate('auto')" type="warning">联机</el-button>
                            <el-button @click="requestOperate('semiAutomatic')" type="warning">半自动</el-button>
                            <el-button @click="requestOperate('hand')" type="warning">手动</el-button>
                            <el-button @click="requestOperate('restoreOnlineWrk')" type="warning">恢复联机任务</el-button>
                            <el-button @click="requestOperate('cancelOnlineWrk')" type="warning">取消联机任务</el-button>
                            <el-button @click="requestOperate('finishWrk')" type="warning">申请完成任务</el-button>
                            <el-button @click="requestOperate('onlineWrk4')" type="warning">恢复联机任务</el-button>
                            <el-button @click="requestOperate('onlineWrk3')" type="warning">清除联机任务</el-button>
                            <el-button @click="requestOperate('onlineWrk1')" type="warning">申请完成任务</el-button>
                            <br/>
                            <br/>
                            <el-button @click="requestOperate('cancelWrk')" type="warning">申请取消任务</el-button>
                            <el-button @click="requestOperate('onlineWrk2')" type="warning">申请取消任务</el-button>
                        </div>
                    </div>
                </el-card>