自动化立体仓库 - WCS系统
#
lsh
2024-03-07 389ed5b1fb5585e66c95e3891ff8b40e02fe1995
#
7个文件已修改
177 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/BasDevp.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -214,6 +214,22 @@
    @TableField("cart_pos")
    private Integer cartPos;
    @ApiModelProperty(value= "")
    @TableField("agv_start_pick")
    private Integer agvStartPick;
    @ApiModelProperty(value= "")
    @TableField("agv_target_pick")
    private Integer agvTargetPick;
    @ApiModelProperty(value= "")
    @TableField("agv_start_place")
    private Integer agvStartPlace;
    @ApiModelProperty(value= "")
    @TableField("agv_target_place")
    private Integer agvTargetPlace;
    public String getIoTime$(){
        if (Cools.isEmpty(this.ioTime)){
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1132,7 +1132,38 @@
        }
    }
    //自动完成任务
    //agv取放货任务完成
    public synchronized void autoCompleteAGV() {
        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
        for (BasDevp basDevp:basDevps){
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            if (basDevp.getWrkNo()!=0){
                if (basDevp.getAgvTargetPick()!=0){//取货
                    staProtocol.setAgvTypeSign((short)0);
                    staProtocol.setStaNo(basDevp.getDevNo().shortValue());
                    MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
                }else if (basDevp.getAgvTargetPlace()!=0){
                    staProtocol.setAgvTypeSign((short)1);
                    staProtocol.setStaNo(basDevp.getDevNo().shortValue());
                    MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol));
                }
            }else {
                if (basDevp.getAgvTargetPick()!=0){
                    basDevp.setAgvStartPick(0);
                    basDevpService.updateById(basDevp);
                }else if (basDevp.getAgvTargetPlace()!=0){
                    basDevp.setAgvStartPlace(0);
                    basDevpService.updateById(basDevp);
                }
            }
        }
    }
    public synchronized void autoCompleteTask() {
        List<TaskWrk> taskWrks = taskWrkMapper.selectWorkingTask();
        for (TaskWrk taskWrk : taskWrks) {
src/main/java/com/zy/core/MainProcess.java
@@ -71,7 +71,9 @@
                    //自动派发任务
   //                 mainService.autoDistribute();
                    //自动完成任务
                    //mainService.autoCompleteTask();
//                    mainService.autoCompleteTask();
                    //agv取放货完成
                    mainService.autoCompleteAGV();
                } catch (Exception e) {
                    e.printStackTrace();
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -105,6 +105,12 @@
    private Boolean upcontactErr = false; //顶升电机接触器故障
    private Short agvStartPick; //允许取货
    private Short agvStartPlace; //允许放货
    private Short agvTypeSign; //允许放货
    private List<Integer> alarm;
@@ -152,6 +158,8 @@
        basDevp.setLocType3((short) 0);  // 轻重类型{0:未知,1:轻库位,2:重库位}
        basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2);
        basDevp.setInQty(inQty !=null ?(int)inQty : 0);
        basDevp.setAgvStartPick(agvStartPick.intValue());
        basDevp.setAgvStartPlace(agvStartPlace.intValue());
        return basDevp;
    }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -125,6 +125,11 @@
                        write((StaProtocol)task.getData());
                        read();
                        break;
                    // 写数据 ID+目标站
                    case 4:
                        writeAgvOk((StaProtocol)task.getData());
                        read();
                        break;
                   /* case 3:
                        write2((StaProtocol)task.getData());
                        read();
@@ -229,6 +234,34 @@
            }
        }
        OperateResultExOne<byte[]> resultAgvAndPlc = siemensS7Net.Read("DB102.0", (short) 30);
        if (resultAgvAndPlc.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                int sign =(i+2)/2-1;
                if ((i+2)%2!=0){
                    Integer siteId = staNos.get(i); // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
                    if (null == staProtocol) {
                        staProtocol = new StaProtocol();
                        staProtocol.setSiteId(siteId);
                        station.put(siteId, staProtocol);
                    }
                    staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4));     // 允许取货
                    staProtocol.setAgvStartPlace((short)0);   // 允许放货
                    continue;
                }
                Integer siteId = staNos.get(i); // 站点编号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6));     // 允许取货
                staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2));   // 允许放货
            }
        }
        if (slave.getId() == 1) {
            //条码
@@ -324,6 +357,83 @@
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        if (staProtocol.getAgvTypeSign()==0){  //0取货
            switch (staProtocol.getSiteId()){
                case 100:
                    index=32;
                    break;
                case 101:
                    index=34;
                    break;
                case 102:
                    index=38;
                    break;
                case 103:
                    index=40;
                    break;
                case 104:
                    index=44;
                    break;
                case 105:
                    index=46;
                    break;
                case 106:
                    index=50;
                    break;
                case 107:
                    index=52;
                    break;
                default:
                    return;
            }
        }else {
            switch (staProtocol.getSiteId()){
                case 100:
                    index=30;
                    break;
                case 102:
                    index=36;
                    break;
                case 104:
                    index=42;
                    break;
                case 106:
                    index=48;
                    break;
                default:
                    return;
            }
        }
        OperateResult write = null;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB102." + index, true);    // 任务完成
            if(write.IsSuccess){
                writeCount=6;
            }else {
                writeCount++;
                log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }while (writeCount<5);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            log.error("写入输送线取放货完成站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            log.info("输送线取放货完成命令下发码垛完成  给输送线写任务完成 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    private void write(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
src/main/resources/application.yml
@@ -50,7 +50,7 @@
  #url: 10.32.53.195:8080
  # WMS系统ip
#  url: 10.210.157.109:8090
  url: 10.210.157.11:8080/wms
  url: localhost:8080/wms
  # 入库任务申请接口
  #inboundTaskApplyPath: api/InterFace/inboundTaskApply
#  inboundTaskApplyPath: apis/inboundTaskApply
src/main/resources/mapper/BasDevpMapper.xml
@@ -41,6 +41,10 @@
        <result column="max_wt" property="maxWt" />
        <result column="gross_wt" property="grossWt" />
        <result column="cart_pos" property="cartPos" />
        <result column="agv_start_pick" property="agvStartPick" />
        <result column="agv_target_pick" property="agvTargetPick" />
        <result column="agv_start_place" property="agvStartPlace" />
        <result column="agv_target_place" property="agvTargetPlace" />
    </resultMap>