自动化立体仓库 - WCS系统
#
zjj
2024-04-23 01a2d01abeadef5488a100ddf58a22dbcf7b95d6
#
4个文件已修改
112 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -5,13 +5,17 @@
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.List;
@Mapper
@Repository
public interface WrkMastMapper extends BaseMapper<WrkMast> {
    WrkMast selectByLocNo(@Param("sourceLocNo") String staNo);
    WrkMast selectCrn5Task2(@Param("sourceLocNo") Integer sourceStaNo);
    WrkMast selectByLocNo( @Param("sourceLocNo") String staNo);
    WrkMast selectByLocNo1(@Param("sourceLocNo") String sourceLocNo);
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2410,4 +2410,105 @@
    }
    public synchronized void crn5InTask(){
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            if (crnSlave.getId() != 5){
                continue;
            }
            // 获取堆垛机信息
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
            if (crnProtocol == null) {
                continue;
            }
            BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crnSlave.getId());
                continue;
            }
            // 只有当堆垛机空闲 并且 无任务时才继续执行
            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
                Crn5InTaskSta(crnSlave,crnProtocol);
            }
        }
    }
    public void Crn5InTaskSta(CrnSlave slave, CrnProtocol crnProtocol){
        // 遍历堆垛机出库站
        for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
            // 获取堆垛机出库站信息
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            if (staProtocol.isAutoing()
                    && staProtocol.isLoading()
                    && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                // 查询工作档
                WrkMast wrkMast = wrkMastMapper.selectCrn5Task2(staProtocol.getSiteId());
                if (wrkMast == null) {
                    continue;
                }
                // 查询站点详细信息
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    continue;
                }
                // 获取库位信息
                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                if (locMast == null) {
                    log.error("查询库存无数据--库位号{}", wrkMast.getLocNo());
                    continue;
                }
                if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
                    log.error("入库操作库位状态不符合--状态, 库位号={},库位状态={}", wrkMast.getLocNo(), locMast.getLocSts());
                    continue;
                }
                // 堆垛机控制过滤
                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable()
                        && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) {
                    // 命令下发区 --------------------------------------------------------------------------
                    CrnCommand crnCommand = new CrnCommand();
                    crnCommand.setCrnNo(slave.getId()); // 堆垛机编号
                    crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号
                    crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                    crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转
                    crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排
                    crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列
                    crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层
                    crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排
                    crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
                    crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层
                    crnCommand.setLocType1(locMast.getLocType1().shortValue());     // 货物类型
                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                        log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                    } else {
                        // 修改工作档状态 2.设备上走 => 3.吊车入库中
                        Date now = new Date();
                        wrkMast.setWrkSts(3L);
                        wrkMast.setCrnStrTime(now);
                        wrkMast.setModiTime(now);
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                        }
                    }
                }
            }
        }
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -56,6 +56,8 @@
                    mainService.crnStnToOutStn();
                    // 入出库  ===>>  堆垛机入出库作业下发
                    mainService.crnIoExecute();
                    //空桶库入库
                    mainService.crn5InTask();
                    // 入库  ===>> 执行对工作档的完成操作
                    mainService.storeFinished();
src/main/resources/mapper/WrkMastMapper.xml
@@ -207,4 +207,7 @@
    <select id="selectByWrkNo" resultMap="BaseResultMap">
        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} 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=2 and io_type=1 and crn_no=5 and source_sta_no=#{sourceLocNo} order by io_pri desc,io_time,wrk_no ASC
    </select>
</mapper>