自动化立体仓库 - WCS系统
#
pang.jiabao
2024-06-17 e5c9788832373a622555fdc799c402fc0b3f5a01
#
5个文件已修改
168 ■■■■■ 已修改文件
src/main/java/com/zy/core/MainProcess.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/mapper/WrkMastMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/impl/MainServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java
@@ -70,7 +70,7 @@
                    // 堆垛机异常信息记录
                    mainService.recCrnErr(7);
                    // 入库  ===>> 空栈板初始化入库,叉车入库站放货
//                    mainService.storeEmptyPlt(8);
                    mainService.storeEmptyPlt(8);
                    // 出库  ===>> 工作档信息写入led显示器
                    mainService.ledExecute(9);
                    // 其他  ===>> LED显示器复位,显示默认信息
@@ -78,6 +78,12 @@
                    mainService.outOfDevp(11);
                    // 生成106出库任务
                    mainService.generateOutbound();
                    // 生成106到105转移任务
                    mainService.autoMoveLoc();
//                    if (i>10){
//                        //空托盘自动出库
//                        mainService.autoEmptyOut();
src/main/java/com/zy/mapper/WrkMastMapper.java
@@ -112,4 +112,10 @@
    WrkMast selectPickStep2(@Param("barcode")String barcode);
    WrkMast selectByWrkNo(@Param("wrkNo")Integer wrkNo);
    /**
     * 获取一条到104站点的出库任务
     * @return 工作主档
     */
    WrkMast selectBy104();
}
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -693,6 +693,9 @@
                        // 更新工作档状态为14失败
                        wrkMast.setWrkSts(14L);
                        if (wrkMast.getStaNo() == 104 && wrkMast.getWrkSts() == 12L) {
                            wrkMast.setWrkSts(16L);
                        }
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
@@ -1101,6 +1104,9 @@
                    if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                        break;
//                        return;
                    }
                    if(crnStn.getStaNo() == 105) {
                        continue;
                    }
                    News.warnNoLog(""+mark+" - 2"+" - 12"+" - 命令下发 : 工作号={},源排={},源列={},源层={},目标排={},目标列={},目标层={}",wrkMast.getWrkNo().shortValue()
@@ -2992,4 +2998,124 @@
        }
    }
    /**
     * 判断106站点状态,有物+有任务号,则生成移库任务
     */
    public synchronized void generateOutbound() {
        WrkMast wrkMast = wrkMastMapper.selectBy104();
        if (wrkMast == null) {
            return;
        }
        BasCrnp basCrnp = basCrnpService.selectById(1);
        if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) {
            return;
        }
        CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 1);
        CrnProtocol crnProtocol = crnThread.getCrnProtocol();
        if (crnProtocol == null) {
            return;
        }
        // 堆垛机控制过滤
        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
            return;
        }
        // 已经存在吊车执行任务时,则过滤
        if (wrkMastMapper.selectWorking(1) != null) {
            return;
        }
        LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
        // 1.堆垛机开始移动
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(1); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
//                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
        crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排
        crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列
        crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层
        crnCommand.setDestinationPosX((short) 3);     // 目标库位排
        crnCommand.setDestinationPosY((short) 3);     // 目标库位列
        crnCommand.setDestinationPosZ((short) 1);     // 目标库位层
        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //库位类型
        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
            News.error("到106站点堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
        } else {
            // 修改工作档状态 11.生成出库ID => 12.吊车出库中
            Date now = new Date();
            wrkMast.setWrkSts(12L);
            wrkMast.setCrnStrTime(now);
            wrkMast.setModiTime(now);
            if (wrkMastMapper.updateById(wrkMast) == 0) {
                News.error("到106站点修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
            }
        }
    }
    public synchronized void autoMoveLoc() {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_sts", 16L));
        // 判断源站点情况 有任务号,有物,自动
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol106 = devpThread.getStation().get(106);
        StaProtocol staProtocol105 = devpThread.getStation().get(105);
        if (staProtocol106 == null) {
            return;
        } else {
            staProtocol106 = staProtocol106.clone();
        }
        if (staProtocol105 == null) {
            return;
        } else {
            staProtocol105 = staProtocol105.clone();
        }
        // 判断出库站点情况
        // 获取堆垛机信息 并 判断是否可入出
        CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, 2);
        CrnProtocol crnProtocol = crnThread.getCrnProtocol();
        if (crnProtocol == null) {
            return;
        }
        BasCrnp basCrnp = basCrnpService.selectById(2);
        if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) {
            return;
        }
        // 堆垛机控制过滤
        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
            return;
        }
        // 已经存在吊车执行任务时,则过滤
        if (wrkMastMapper.selectWorking(2) != null) {
            return;
        }
        // 命令下发区 --------------------------------------------------------------------------
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(2); // 堆垛机编号
        crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
        crnCommand.setSourcePosX((short) 6);     // 源库位排
        crnCommand.setSourcePosY((short) 3);     // 源库位列
        crnCommand.setSourcePosZ((short) 1);     // 源库位层
        crnCommand.setDestinationPosX((short) 7);     // 目标库位排
        crnCommand.setDestinationPosY((short) 28);     // 目标库位列
        crnCommand.setDestinationPosZ((short) 1);     // 目标库位层
        crnCommand.setTraySize(true);     //库位类型
        if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
            News.error("106移库2号堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
        }
//        else {
//            wrkMast.setCrnNo(2);
//            wrkMastMapper.updateById(wrkMast);
//        }
        News.infoNoLog("106移库2号堆垛机入出库作业下发:库位移转完成");
    }
}
src/main/resources/application.yml
@@ -81,6 +81,12 @@
      row: 3
      bay: 31
      lev: 6
    crnOutStn[2]:
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 106
      row: 3
      bay: 3
      lev: 1
  # 堆垛机2
  crn[1]:
    id: 2
@@ -121,7 +127,7 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 105
      row: 7
      bay: 28
      bay: 27
      lev: 1
  # 输送线1
@@ -143,12 +149,17 @@
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 102
      led: ${wcs-slave.led[1].id}
#    # 空板入库口
#    emptyInSta[0]:
#      staNo: 101
#      barcode: ${wcs-slave.barcode[0].id}
#      backSta: 100
#      led: ${wcs-slave.led[0].id}
    # 空板入库口1
    emptyInSta[0]:
      staNo: 101
      barcode: ${wcs-slave.barcode[0].id}
      backSta: 100
      led: ${wcs-slave.led[0].id}
    emptyInSta[1]:
      staNo: 103
      barcode: ${wcs-slave.barcode[1].id}
      backSta: 102
      led: ${wcs-slave.led[1].id}
    # 出库口1
    outSta[0]:
      staNo: 100
src/main/resources/mapper/WrkMastMapper.xml
@@ -192,4 +192,7 @@
        select * from asr_wrk_mast
        where wrk_no = #{wrkNo}
    </select>
    <select id="selectBy104" resultType="com.zy.entity.WrkMast">
        select top 1 * from asr_wrk_mast awm where awm.sta_no = 104 and awm.wrk_sts = 11 order by awm.appe_time
    </select>
</mapper>