自动化立体仓库 - WCS系统
#
zjj
2024-11-09 983d8a5fdeace0591da69902f95b475ee7f724a0
#
7个文件已修改
204 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/CombParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastSta.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/CombParam.java
@@ -40,6 +40,7 @@
        private Double anfme;
        private Double weight;
        private String memo;
    }
src/main/java/com/zy/asrs/entity/WrkMastSta.java
@@ -158,9 +158,14 @@
    @ApiModelProperty(value= "")
    @TableField("weight2")
    private Double weight2;
    @ApiModelProperty(value= "")
    private String memo;
    @ApiModelProperty(value= "")
    private String memo2;
    public WrkMastSta() {}
    public WrkMastSta(Long wrkNo,Integer wrkStart,Integer wrkEnd,Integer staStart,Integer staEnd,Date createTime,Date updateTime,Integer type,Integer wrkSts,Integer lineNumber,Integer wrkType,Date bignTime,Integer wrkCrn) {
    public WrkMastSta(Long wrkNo,Integer wrkStart,Integer wrkEnd,Integer staStart,Integer staEnd,Date createTime,Date updateTime,Integer type,Integer wrkSts,Integer lineNumber,Integer wrkType,Date bignTime,Integer wrkCrn,String memo,String memo2) {
        this.wrkNo = wrkNo;
        this.wrkStart = wrkStart;
        this.wrkEnd = wrkEnd;
@@ -174,6 +179,8 @@
        this.wrkType = wrkType;
        this.bignTime = bignTime;
        this.wrkCrn = wrkCrn;
        this.memo = memo;
        this.memo = memo2;
    }
//    WrkMastSta wrkMastSta = new WrkMastSta(
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2537,10 +2537,13 @@
                String batch2 = "";
                short type = 0;
                short type2 = 0;
                short anfme = 1;
                short anfme2 = 1;
                short anfme = 4;
                short anfme2 = 4;
                Double weight = 0d;
                Double weight2 = 0d;
                Double weight11 = 0d;
                String memo = "";
                String memo2 = "";
                List<RgvSlave.Sta> inStn1 = rgvSlave.getInStn();
                if (rgvProtocol.getColumnNumber()>4){
@@ -2587,6 +2590,42 @@
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2103);
                        } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 2) {
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2002);
                        } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 4) {
                            if (staProtocol.getStaNoEnd() == 3007 || staProtocol.getStaNoEnd() == 3012){
                                sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2103);
                            } else if (staProtocol.getStaNoEnd() == 2001 ){
                                sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2002);
                            } else {
                                log.error("4007站点,桶型4,非法目标站!!!!!!"+staProtocol.getStaNoEnd().toString());
                                continue;
                            }
                            workNo1 = commonService.getWorkNo(3);
                            Date now = new Date();
                            // 保存工作档
                            WrkMast wrkMast = new WrkMast();
                            wrkMast.setWrkNo(workNo1);
                            wrkMast.setIoTime(now);
                            wrkMast.setWrkSts(101L); // 工作状态:101.初始
                            wrkMast.setIoType(199); // 入出库状态: 199.转移
                            wrkMast.setIoPri(15D);
                            wrkMast.setCrnNo(0);
                            wrkMast.setSourceStaNo(4007); // 源站
                            wrkMast.setStaNo(staProtocol.getStaNoEnd().intValue()); // 目标站
                            wrkMast.setFullPlt("N"); // 满板
                            wrkMast.setPicking("N"); // 拣料
                            wrkMast.setExitMk("N"); // 退出
                            wrkMast.setEmptyMk("Y"); // 空板
                            wrkMast.setBarcode("KB888888"); // 托盘码
                            wrkMast.setLinkMis("N");
                            wrkMast.setCtnNo("Y");  // 入库阻塞库位移转标记
                            wrkMast.setAppeTime(now);
                            wrkMast.setModiTime(now);
                            int res = wrkMastMapper.insert(wrkMast);
                            if (res == 0) {
//                                throw new CoolException("");
                                log.error("4007站点,桶型4,保存工作档主档失败!!!!!!"+now.toString());
                                continue;
                            }
                        } else if (inStn.getSourceStaNo() == 2102 && staProtocol.isFullPlt()) {
                            sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2301);
                        } else {
@@ -2604,14 +2643,15 @@
                        if (inStn.getSourcePlcId() == 4 || inStn.getSourcePlcId() ==5){ //灌装站需要获取输送线物料代码
                            matnr = staProtocol.getMatnr();
                            batch = staProtocol.getBatch();
                            anfme = staProtocol.getAnfme().shortValue();
                            anfme2 = staProtocol.getAnfme2().shortValue();
                            weight = staProtocol.getWeight1();
                            weight2 = staProtocol.getWeight2();
                            anfme = Cools.isEmpty(staProtocol.getAnfme()) ? anfme:staProtocol.getAnfme().shortValue();
                            weight11 = staProtocol.getWeight1();
                            weight = weight11;
                            String memoBool = staProtocol.isBan()? "存在":"不存在";
                            memo = memoBool+"半桶";
                        }
                        devpThread.setPakMk(inStn.getSourceStaNo(),false);
                        break;
                    }
                }
@@ -2655,7 +2695,43 @@
                                sta2 = Utils.getRgvStaNo(rgvSlave.getId(),2103);
                            } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 2) {
                                sta2 = Utils.getRgvStaNo(rgvSlave.getId(),2002);
                            }else if (inStn.getSourceStaNo() == 2102 && staProtocol.isFullPlt()) {
                            } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 4) {
                                if (staProtocol.getStaNoEnd() == 3007 || staProtocol.getStaNoEnd() == 3012){
                                    sta2 = Utils.getRgvStaNo(rgvSlave.getId(),2103);
                                } else if (staProtocol.getStaNoEnd() == 2001 ){
                                    sta2 = Utils.getRgvStaNo(rgvSlave.getId(),2002);
                                } else {
                                    log.error("4007站点,桶型4,非法目标站!!!!!!"+staProtocol.getStaNoEnd().toString());
                                    continue;
                                }
                                workNo2 = commonService.getWorkNo(3);
                                Date now = new Date();
                                // 保存工作档
                                WrkMast wrkMast = new WrkMast();
                                wrkMast.setWrkNo(workNo2);
                                wrkMast.setIoTime(now);
                                wrkMast.setWrkSts(101L); // 工作状态:101.初始
                                wrkMast.setIoType(199); // 入出库状态: 199.转移
                                wrkMast.setIoPri(15D);
                                wrkMast.setCrnNo(0);
                                wrkMast.setSourceStaNo(4007); // 源站
                                wrkMast.setStaNo(staProtocol.getStaNoEnd().intValue()); // 目标站
                                wrkMast.setFullPlt("N"); // 满板
                                wrkMast.setPicking("N"); // 拣料
                                wrkMast.setExitMk("N"); // 退出
                                wrkMast.setEmptyMk("Y"); // 空板
                                wrkMast.setBarcode("KB888888"); // 托盘码
                                wrkMast.setLinkMis("N");
                                wrkMast.setCtnNo("Y");  // 入库阻塞库位移转标记
                                wrkMast.setAppeTime(now);
                                wrkMast.setModiTime(now);
                                int res = wrkMastMapper.insert(wrkMast);
                                if (res == 0) {
//                                throw new CoolException("");
                                    log.error("4007站点,桶型4,保存工作档主档失败!!!!!!"+now.toString());
                                    continue;
                                }
                            } else if (inStn.getSourceStaNo() == 2102 && staProtocol.isFullPlt()) {
                                sta2 = Utils.getRgvStaNo(rgvSlave.getId(),2301);
                            } else {
                                sta2 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getStaNo());
@@ -2673,6 +2749,11 @@
                            if (inStn.getSourcePlcId() == 4){
                                matnr2 = staProtocol.getMatnr();
                                batch2 = staProtocol.getBatch();
                                anfme2 = Cools.isEmpty(staProtocol.getAnfme2()) ? anfme2:staProtocol.getAnfme2().shortValue();
                                weight11 = staProtocol.getWeight1();
                                weight2 = weight11;
                                String memoBool = staProtocol.isBan()? "存在":"不存在";
                                memo2 = memoBool+"半桶";
                            }
                            devpThread.setPakMk(inStn.getSourceStaNo(),false);
                            break;
@@ -2720,15 +2801,11 @@
                        command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 任务模式: all取放货
                    }
                    command.setCommand(false);
                    rgvTaskSave(command);
                    rgvTaskSave(command,memo,memo2);
                    MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command));
                    log.info("rgv任务下发:"+JSON.toJSONString(command));
                }
            }
        }
    }
@@ -2771,10 +2848,15 @@
                            WrkMast wrkMast = wrkMastService.selectByworkNo(rgvProtocol.getTaskNo1());
                            if (Cools.isEmpty(wrkMast)){
                                log.error("完成{}号车工位一任务未找到对应rgv任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                            }else {
                            } else {
                                if (wrkMast.getIoType() == 110 || wrkMast.getIoType() == 101){
                                    Date date = new Date();
                                    wrkMast.setWrkSts(14L);
                                    wrkMast.setModiTime(date);
                                    wrkMastService.updateById(wrkMast);
                                } else if (wrkMast.getIoType()==199){
                                    Date date = new Date();
                                    wrkMast.setWrkSts(105L);
                                    wrkMast.setModiTime(date);
                                    wrkMastService.updateById(wrkMast);
                                }
@@ -3050,6 +3132,11 @@
                                wrkMast.setWrkSts(14L);
                                wrkMast.setModiTime(date);
                                wrkMastService.updateById(wrkMast);
                            } else if (wrkMast.getIoType()==199 && wrkMast.getStaNo()==2001){
                                Date date = new Date();
                                wrkMast.setWrkSts(105L);
                                wrkMast.setModiTime(date);
                                wrkMastService.updateById(wrkMast);
                            }
                        }
@@ -3114,7 +3201,7 @@
        }
    }
    public boolean rgvTaskSave(RgvCommand command){
    public boolean rgvTaskSave(RgvCommand command,String memo,String memo2){
//        Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", command.getRgvNo()).eq("wrk_no", command.getTaskNo1());
        if (command.getTaskNo1() > 0){
            List<WrkMastSta> wrkMastSta1 = wrkMastStaService.selectBywrkNoHistoricalTasks(command.getRgvNo(),command.getTaskNo1());
@@ -3159,6 +3246,8 @@
        wrkMastSta.setAnfme2(command.getAnfme2().intValue());
        wrkMastSta.setWeight(command.getWeight());
        wrkMastSta.setWeight2(command.getWeight2());
        wrkMastSta.setMemo(memo);
        wrkMastSta.setMemo2(memo2);
        return wrkMastStaService.insert(wrkMastSta);
    }
@@ -3305,6 +3394,7 @@
    public void CreateComb(String barcode,Integer code,Integer wrkNo,String batch,DevpSlave.Sta inSta) throws IOException {
        Double anfme = 0d;
        Double weight = 0d;
        String memo = "";
        WrkMastSta wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkNo));
        if (Cools.isEmpty(wrkMastSta)){
@@ -3320,12 +3410,14 @@
                anfme = wrkMastSta.getAnfme2().doubleValue();
                code = wrkMastSta.getMatnr2();
                weight = wrkMastSta.getWeight2();
                memo = wrkMastSta.getMemo2();
            }
        }else {
            batch = wrkMastSta.getBatch();
            anfme = wrkMastSta.getAnfme().doubleValue();
            code = wrkMastSta.getMatnr1();
            weight = wrkMastSta.getWeight();
            memo = wrkMastSta.getMemo();
        }
        MatnrCode matnrCode = matnrCodeService.selectByCode(code);
        if (Cools.isEmpty(matnrCode)){
@@ -3338,6 +3430,8 @@
        combMat.setMatnr(matnrCode.getMatnr());
        combMat.setBatch(batch);
        combMat.setAnfme(anfme);
        combMat.setWeight(weight);
        combMat.setMemo(memo);
        combMats.add(combMat);
        combParam.setCombMats(combMats);
@@ -3354,12 +3448,8 @@
        }else {
            log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/mobile/comb/auth", JSON.toJSONString(combParam), response);
//            log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
            //条码为空或者不符合,退库到
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
            if (ledThread != null) {
                String errorMsg = "扫码失败,请重试";
                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
            }
            //条码为空或者不符合,退库信号下发
            boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(3, null));
        }
    }
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -20,6 +20,8 @@
    // ----------------------------------------------------------------
    // 目标站
    private Short staNo;
    //目标站
    private Short staNoEnd;
    // ----------------------------------------------------------------
    // 物料代码
@@ -27,8 +29,11 @@
    private String batch;
    private Double anfme;
    private Double anfme2;
    private Double weight1;
    private Double weight2;
    private Double weight1 = 0.0;
    private Double weight2 = 0.0;
    private Double weight3 = 0.0;
    private Double weight4 = 0.0;
    private boolean ban = false;
    // ----------------------------------------------------------------
    // 自动
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -254,6 +254,14 @@
                        }
                        break;
                    // 写数据 ID+目标站  2106特供
                    case 3:
                        switch (slave.getId()){
                            case 2:
                                write2106((StaProtocol)task.getData());break;
                        }
                        break;
                    default:
                        break;
                }
@@ -608,7 +616,7 @@
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*30));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*38));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -617,12 +625,18 @@
                Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 4);
                short amount =  siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 8);
                String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+10, 20, "UTF-8");
                short staEnd = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 30);
                short ban = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 32);
                Integer w1 = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 34);
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setSiteId(siteId);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
@@ -631,6 +645,13 @@
                staProtocol.setTongType(tongType);
                staProtocol.setBatch(batch);
                staProtocol.setAmount(amount);
                int i1 = w1 / 100;
                staProtocol.setWeight1((double) i1);
//                staProtocol.setWeight2(w2);
//                staProtocol.setWeight3(w3);
//                staProtocol.setWeight4(w4);
                staProtocol.setStaNoEnd(staEnd);
                staProtocol.setBan(ban == 1);
                staProtocol.setLow(true);
@@ -674,7 +695,7 @@
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*28));
        result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*34));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -683,12 +704,17 @@
                Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 2);
                short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 6);
                String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+8, 20, "UTF-8");
                short ban = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 28);
                Integer w1 = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 30);
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setSiteId(siteId);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
@@ -697,7 +723,9 @@
                staProtocol.setAmount(amount);
                staProtocol.setBatch(batch);
                staProtocol.setLow(true);
                int i1 = w1 / 100;
                staProtocol.setWeight1((double) i1);
                staProtocol.setBan(ban == 1);
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
@@ -785,6 +813,21 @@
            log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write2106(StaProtocol staProtocol) throws InterruptedException {
        OperateResult write = siemensS7Net.Write("DB100.210", (short) 2);    // 条码重复回退
        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));
        }
    }
    /**
     * 心跳
src/main/resources/mapper/WrkMastMapper.xml
@@ -205,7 +205,7 @@
    </select>
    <select id="selectByWrkNo" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} and (wrk_sts = 13 or wrk_sts = 2) order by io_pri desc,io_time,wrk_no asc
        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} and (wrk_sts = 13 or wrk_sts = 2 or io_type = 199) order by io_pri desc,io_time,wrk_no asc
    </select>
    <select id="selectCrn5Task2" resultMap="BaseResultMap">
        select * from dbo.asr_wrk_mast where wrk_sts=1 and io_type=1 and crn_no=5 order by io_pri desc,io_time,wrk_no ASC
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -26,6 +26,8 @@
        <result column="batch2" property="batch2"/>
        <result column="anfme" property="anfme"/>
        <result column="anfme2" property="anfme2"/>
        <result column="memo" property="memo"/>
        <result column="memo2" property="memo2"/>
    </resultMap>
    <select id="selectByRgvNoandWrkNo" resultMap="BaseResultMap">