自动化立体仓库 - WCS系统
zjj
2023-11-28 770a7701c1473993c0e8148377c4f44dfec31e20
#接口+高度位变更为检测小车+扫码
1个文件已添加
10个文件已修改
230 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SiteController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/TaskOverParam.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/ServerBootstrap.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -8,6 +8,7 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.taskCreateParam;
import com.zy.asrs.service.*;
@@ -50,6 +51,23 @@
    public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
        add("ea1f0459efc02a79f046f982767939ae");
    }};
    @PostMapping("/toAgvTaskOver")
    public R getAgvTaskOver(@RequestHeader String appkey,
                           @RequestBody TaskOverParam param,
                           HttpServletRequest request){
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getWharfCode())){
            return R.error("码头[wharfCode]不能为空");
        }
        if (Cools.isEmpty(param.getStatus())){
            return R.error("完成标记[status]不能为空");
        }
        openService.getAgvTaskOver(param);
        return R.ok();
    }
    //创建任务
    @PostMapping("/taskCreate")
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -186,6 +186,7 @@
                    vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 空板信号
                    vo.setStaNo(staProtocol.getStaNo());                // 目标站
                    vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高");     //高低库位
                    vo.setCar(staProtocol.isCar() ? "有": "无");
                    return R.ok().add(vo);
                }
            }
src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -37,4 +37,5 @@
    //高低库位
    private String locType1 = "-";
    private String car = "-";
}
src/main/java/com/zy/asrs/entity/param/TaskOverParam.java
New file
@@ -0,0 +1,10 @@
package com.zy.asrs.entity.param;
import lombok.Data;
@Data
public class TaskOverParam {
    private String wharfCode;
    private Boolean status;
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,6 +1,7 @@
package com.zy.asrs.service;
import com.core.common.R;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.taskCreateParam;
@@ -12,4 +13,6 @@
    void taskCreate(taskCreateParam param);
    R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException;
    void getAgvTaskOver(TaskOverParam param);
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -8,11 +8,20 @@
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.ToWmsDTO;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.entity.param.taskCreateParam;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.TaskWrkService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -25,9 +34,14 @@
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
    private SlaveProperties slaveProperties;
    @Value("${wms.url}")
    private String wmsUrl;
    public ArrayList<String> wharfCode1 = new ArrayList<String>(){{
        add("J-1101"); add("J-1103"); add("J-1105"); add("J-1107"); add("J-1109"); add("J-1111");
    }};
    @Override
    public void taskCreate(taskCreateParam param) {
@@ -74,9 +88,8 @@
        ToWmsDTO toWmsDTO = new ToWmsDTO();
        Map<String, Object> map = new HashMap<>();
        map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2");
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(4);
        List<Integer> list = getInEnableRoadway();
        //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
        toWmsDTO.setWarehouseId("1688469798893297665");
        toWmsDTO.setContainerCode(param.getContainerCode());
@@ -105,4 +118,87 @@
        }
    }
    @Override
    public void getAgvTaskOver(TaskOverParam param) {
        Map<String,Integer> map = new HashMap<>();
        map.put("J-1101",102);map.put("J-1102",101);
        map.put("J-1103",106);map.put("J-1104",105);
        map.put("J-1105",110);map.put("J-1106",109);
        map.put("J-1107",114);map.put("J-1108",113);
        map.put("J-1109",118);map.put("J-1110",117);
        map.put("J-1111",122);map.put("J-1112",121);
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 获取入库站信息
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            StaProtocol staProtocol = devpThread.getStation().get(map.get(param.getWharfCode()));
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            Short workNo = staProtocol.getWorkNo();
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                if (inSta.getBackSta().equals(map.get(param.getWharfCode()))){
                    if (wharfCode1.contains(param.getWharfCode())){
                        if (!staProtocol.isLoading() && !staProtocol.isCar()){
                            //AGV出库完成以后
                        }
                    }else {
                        if (staProtocol.isLoading() && !staProtocol.isCar() && workNo == 0){
                            //AGV入库完成以后
                            staProtocol.setWorkNo((short) 9998);
                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (result) {
                            } else {
                                throw new RuntimeException("agv返回完成后,命令下发失败");
                            }
                        }
                    }
                }
            }
        }
    }
    public List<Integer> getInEnableRoadway(){
        int[] roadway = null;
        List<Integer> list = new ArrayList<>();
        Map<Integer,Integer> map = new HashMap<>();
        map.put(103,1);
        map.put(107,2);
        map.put(111,3);
        map.put(115,4);
        map.put(119,5);
        map.put(123,6);
        map.put(300,7);
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()){
                    list.add(map.get(inSta.getStaNo()));
                }
            }
        }
        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
        return list;
    }
}
src/main/java/com/zy/asrs/utils/Utils.java
@@ -23,14 +23,14 @@
        int[] wcsRow = getWcsRow(split[0]);
        int[] ints = null;
        if (split[3].equals("01")){
            ints = Arrays.copyOfRange(wcsRow, 0, wcsRow.length / 2);
            ints = Arrays.copyOfRange(wcsRow, 0, (wcsRow.length+2-1) / 2);
            if (split[4].equals("01")){
                ints = Arrays.copyOfRange(ints, wcsRow.length / 2,wcsRow.length-1);
            }else {
                ints = Arrays.copyOfRange(ints, 0, wcsRow.length / 2);
            }
        }else {
            ints = Arrays.copyOfRange(wcsRow, wcsRow.length / 2,wcsRow.length-1 );
            ints = Arrays.copyOfRange(wcsRow, (wcsRow.length+2-1) / 2,wcsRow.length-1 );
            if (split[4].equals("01")){
                ints = Arrays.copyOfRange(ints, 0, wcsRow.length / 2);
@@ -284,7 +284,7 @@
//        slaveProperties.setGroupCount(4);
//        Integer deepRow = getDeepRow(slaveProperties, 6);
//        System.out.println(deepRow);
        String wcsLocNo = getWcsLocNo("03-52-01-01-02");
        String wcsLocNo = getWcsLocNo("06-52-01-01-01");
        System.out.println(wcsLocNo);
    }
}
src/main/java/com/zy/core/ServerBootstrap.java
@@ -55,10 +55,10 @@
        for (Slave devp : slaveProperties.getDevp()) {
            MessageQueue.init(SlaveType.Devp, devp);
        }
//        // 初始化条码扫描仪mq
//        for (Slave barcode : slaveProperties.getBarcode()) {
//            MessageQueue.init(SlaveType.Barcode, barcode);
//        }
        // 初始化条码扫描仪mq
        for (Slave barcode : slaveProperties.getBarcode()) {
            MessageQueue.init(SlaveType.Barcode, barcode);
        }
//        // 初始化Led灯mq
//        for (Slave led : slaveProperties.getLed()) {
//            MessageQueue.init(SlaveType.Led, led);
@@ -88,13 +88,13 @@
            new Thread((Runnable) devpThread).start();
            SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread);
        }
//        // 初始化条码扫描仪线程
//        log.info("初始化条码扫描仪线程...................................................");
//        for (Slave barcode : slaveProperties.getBarcode()) {
//            BarcodeThread barcodeThread = new BarcodeThread(barcode);
////            new Thread(barcodeThread).start();
//            SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread);
//        }
        // 初始化条码扫描仪线程
        log.info("初始化条码扫描仪线程...................................................");
        for (Slave barcode : slaveProperties.getBarcode()) {
            BarcodeThread barcodeThread = new BarcodeThread(barcode);
//            new Thread(barcodeThread).start();
            SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread);
        }
//        // 初始化LED线程
//        log.info("初始化LED线程...................................................");
//        for (LedSlave led : slaveProperties.getLed()) {
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -42,11 +42,14 @@
    private boolean fullPlt;
    // 高
    private boolean high;
    private boolean high = false;
    // 低
    private boolean low;
    //agv
    private boolean car;
    // 锁定标记
    private boolean pakMk = true;
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -223,7 +223,7 @@
                staProtocol.setOutEnable(status[3]);// 可出
                staProtocol.setEmptyMk(status[4]);  // 空板信号
                staProtocol.setFullPlt(status[5]);  // 满托盘
                staProtocol.setHigh(status[6]);     // 高库位
                staProtocol.setCar(status[6]);     // 是否有车
                staProtocol.setLow(status[7]);      // 低库位
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
@@ -239,7 +239,7 @@
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.102",(short)60);
            if (result2.IsSuccess) {
                for (int i = 0; i < 6; i++) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*10,8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                    if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
src/main/resources/application-prod.yml
@@ -233,23 +233,23 @@
      scale: ${wcs-slave.scale[0].id}
      staNo: 111
      backSta: 110
      barcode: ${wcs-slave.barcode[0].id}
      barcode: ${wcs-slave.barcode[2].id}
    inSta[3]: #入库口1
      scale: ${wcs-slave.scale[0].id}
      staNo: 115
      backSta: 114
      barcode: ${wcs-slave.barcode[0].id}
      barcode: ${wcs-slave.barcode[3].id}
    inSta[4]: #入库口2
      scale: ${wcs-slave.scale[1].id}
      staNo: 119
      backSta: 118
      barcode: ${wcs-slave.barcode[1].id}
      barcode: ${wcs-slave.barcode[4].id}
      #slot: 0
    inSta[5]: #入库口1
      scale: ${wcs-slave.scale[0].id}
      staNo: 123
      backSta: 122
      barcode: ${wcs-slave.barcode[0].id}
      barcode: ${wcs-slave.barcode[5].id}
    outSta[0]: #出库口1
      staNo: 100
    outSta[1]: #出库口2
@@ -284,21 +284,21 @@
      #slot: 0
    outSta[0]: #出库口1
      staNo: 307
  devp[3]: #输送线
    id: 4
    ip: 10.10.10.30
    rack: 0
    slot: 0
    port: 102
    emptyInSta[0]: #空板入库口1
      staNo: 406
    inSta[0]: #入库口1
      scale: ${wcs-slave.scale[1].id}
      staNo: 406
      barcode: ${wcs-slave.barcode[1].id}
      #slot: 0
    outSta[0]: #出库口1
      staNo: 407
#  devp[3]: #输送线
#    id: 4
#    ip: 10.10.10.30
#    rack: 0
#    slot: 0
#    port: 102
#    emptyInSta[0]: #空板入库口1
#      staNo: 406
#    inSta[0]: #入库口1
#      scale: ${wcs-slave.scale[1].id}
#      staNo: 406
#      barcode: ${wcs-slave.barcode[1].id}
#      #slot: 0
#    outSta[0]: #出库口1
#      staNo: 407
  scale[0]: #磅秤
    port: 5005
    ip: 10.10.10.201
@@ -309,9 +309,25 @@
    id: 2
  barcode[0]: #条码扫描仪
    port: 51236
    ip: 10.10.10.52
    ip: 172.17.91.39
    id: 1
  barcode[1]:
    port: 51236
    ip: 10.10.10.52
    ip: 172.17.91.40
    id: 2
  barcode[2]:
    port: 51236
    ip: 172.17.91.41
    id: 3
  barcode[3]:
    port: 51236
    ip: 172.17.91.42
    id: 4
  barcode[4]:
    port: 51236
    ip: 172.17.91.43
    id: 5
  barcode[5]:
    port: 51236
    ip: 172.17.91.44
    id: 6