自动化立体仓库 - WCS系统
*
lsh
2025-01-13 24e33bb02f9789d5618e12c5e0e70372831c36c7
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -6,7 +6,6 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.service.BasCircularShuttleService;
import com.zy.asrs.service.BasDevpPositionService;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.SortTheExecutionOfTheCarUtil;
import com.zy.asrs.utils.TimeCalculatorUtils;
@@ -29,7 +28,7 @@
/**
 * 立体仓库WCS系统主流程业务
 * Created by vincent on 2020/8/6
 * Created by IX on 2024/10/01
 */
@Slf4j
@Service("mainService")
@@ -38,8 +37,6 @@
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private BasRgvServiceImpl basRgvService;
    @Autowired
@@ -59,29 +56,10 @@
    private Long rgvCount;
    @Value("${constant-parameters.rgvDate}")
    private Double rgvDate;
    /**
     * 站点任务检测  更新小车位置信息
     */
    public synchronized void updateStePositionNearby1() {
        for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            try{
                double finalVelocity = 0.0;     // 最终速度 (m/s)
                double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed/60, 2)) / (2 * acceleration);
                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", 111));
                if (distance*proportion > ((SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(),rgvProtocol.getRgvPos(),perimeter) + (rgvProtocol.instantaneousSpeed/60)*proportion*0.1))){
//                        continue ;
                }
            } catch (Exception e){
            }
        }
    }
    public synchronized void updateStePositionNearby() {
        try{
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L));
@@ -132,17 +110,17 @@
            for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){
                ints[basCircularShuttle.getRgvNo()-1] = new int[]{basCircularShuttle.getRgvNo(),basCircularShuttle.getRgvId()};
            }
            String[] oldList = new String[ints.length];
            for (int[] rgv : ints){
                oldList[rgv[0]-1] = Arrays.toString(rgv);
            }
//            String[] oldList = new String[ints.length];
//            for (int[] rgv : ints){
//                oldList[rgv[0]-1] = Arrays.toString(rgv);
//            }
            int[][] rgvList = SortTheExecutionOfTheCarUtil.ReorderSteId(ints, rgvNo);
            String[] newList = new String[rgvList.length];
            for (int[] rgv : rgvList){
                newList[rgv[0]-1] = Arrays.toString(rgv);
            }
//            String[] newList = new String[rgvList.length];
//            for (int[] rgv : rgvList){
//                newList[rgv[0]-1] = Arrays.toString(rgv);
//            }
            log.info("更新小车排序信息:原始小车号rgvNo={},小车重新排序信息={},小车原始排序信息={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
//            log.info("更新小车排序信息:原始小车号rgvNo={},小车重新排序信息={},小车原始排序信息={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
            for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){
                int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
                basCircularShuttle.setRgvId(rgv[1]);
@@ -153,6 +131,7 @@
            log.error("自动更新小车排序信息失败,异常:"+e);
        }
    }
    /**
     * 站点任务检测  更新小车位置信息
     */
@@ -178,17 +157,17 @@
                for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){
                    ints[basCircularShuttle.getRgvNo()-1] = new int[]{basCircularShuttle.getRgvNo(),basCircularShuttle.getRgvId()};
                }
                String[] oldList = new String[ints.length];
                for (int[] rgv : ints){
                    oldList[rgv[0]-1] = Arrays.toString(rgv);
                }
//                String[] oldList = new String[ints.length];
//                for (int[] rgv : ints){
//                    oldList[rgv[0]-1] = Arrays.toString(rgv);
//                }
                int[][] rgvList = SortTheExecutionOfTheCarUtil.ReorderSteId(ints, rgvNo);
                String[] newList = new String[rgvList.length];
                for (int[] rgv : rgvList){
                    newList[rgv[0]-1] = Arrays.toString(rgv);
                }
//                String[] newList = new String[rgvList.length];
//                for (int[] rgv : rgvList){
//                    newList[rgv[0]-1] = Arrays.toString(rgv);
//                }
                log.info("更新小车排序信息:原始小车号rgvNo={},小车重新排序信息={},小车原始排序信息={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
//                log.info("更新小车排序信息:原始小车号rgvNo={},小车重新排序信息={},小车原始排序信息={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
                for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){
                    int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
                    basCircularShuttle.setRgvId(rgv[1]);
@@ -200,6 +179,7 @@
            log.error("自动更新小车排序信息失败,异常:"+e);
        }
    }
    /**
     * 站点任务检测  下发小车取放任务
     */
@@ -266,8 +246,7 @@
            for (WrkMast wrkMast: wrkMastList){
                while (rgvId <= rgvCount){
                    rgvId++;
                    log.info("存在任务,RGV号={},任务数据={}", rgvId, JSON.toJSON(wrkMast));
//                    log.info("存在任务,RGV号={},任务数据={}", rgvId, JSON.toJSON(wrkMast));
                    if (rgvId > rgvCount){
                        break runRgv;
                    }
@@ -320,9 +299,10 @@
                            log.error("更新小车任务失败,任务号:"+wrkMast.getWrkNo());
                        }
                        break runRgv;
                    } else {
                        break runRgv;
                    }
//                    else {
//                        break runRgv;
//                    }
                }
            }
        }
@@ -350,7 +330,7 @@
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
                        && rgvProtocol.getTaskNo1()!=0
                ) {
                    log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
//                    log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()));
                    if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)){
                        log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMast);
@@ -374,18 +354,18 @@
    /*
     * 小车复位
     * */
    public synchronized boolean rgvComplete(Integer rgvId){
    public synchronized boolean rgvComplete(Integer rgvNo) {
        try{
            //  命令下发区 --------------------------------------------------------------------------
            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) {
                log.error("RGV命令下发失败,RGV号={}",rgvId);
            if (!MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(3, new RgvCommand()))) {
                log.error("RGV命令下发失败,RGV号={}", rgvNo);
                return false;
            } else {
                log.info("RGV命令下发成功,RGV号={}",rgvId);
                log.info("RGV命令下发成功,RGV号={}", rgvNo);
                return true;
            }
        }catch (Exception e){
            log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId);
            log.error("RGV命令下发失败,RGV号={}。异常:" + e, rgvNo);
            return false;
        }
    }