*
L
11 小时以前 1dacf2305187f5c2fb44f03b6b754c46cb73ba25
*
5个文件已修改
157 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -348,22 +348,31 @@
            if (rgvProtocol == null) {
                continue;
            }
            RingThroughParam ringThroughParam = new RingThroughParam();
            try {
                if (rgvProtocol.getRgvPos() == null || rgvProtocol.getModeType() == null || rgvProtocol.getStatusType() == null) {
                    log.warn("环穿位置信息存在空字段,跳过该RGV: rgvNo={}", rgv.getId());
                    continue;
                }
                RingThroughParam ringThroughParam = new RingThroughParam();
            ringThroughParam.setIndex(rgv.getId());
                ringThroughParam.setIndex(rgv.getId());
//            ringThroughParam.setIndex(i);
//            double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183));
//            double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue());
            double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.RgvPos.doubleValue());
                double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.getRgvPos().doubleValue());
            ringThroughParam.setValueX(doubles[0]);
            ringThroughParam.setValueY(doubles[1]);
            ringThroughParam.setModeColor(rgvProtocol.modeType.color);
            ringThroughParam.setStatusColor(rgvProtocol.statusType.color);
            if (rgvProtocol.getModeType() == RgvModeType.AUTO){
                ringThroughParam.setAnimation(2);
                ringThroughParam.setValueX(doubles[0]);
                ringThroughParam.setValueY(doubles[1]);
                ringThroughParam.setModeColor(rgvProtocol.getModeType().color);
                ringThroughParam.setStatusColor(rgvProtocol.getStatusType().color);
                if (rgvProtocol.getModeType() == RgvModeType.AUTO){
                    ringThroughParam.setAnimation(2);
                }
                result.add(ringThroughParam);
            } catch (Exception e) {
                // 单台RGV数据异常不影响其它RGV绘制
                log.error("环穿位置信息处理异常,跳过该RGV: rgvNo={}", rgv.getId(), e);
            }
            result.add(ringThroughParam);
        }
        return R.ok().add(result);
    }
@@ -593,4 +602,4 @@
        return R.error("初始化失败!!!");
    }
}
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -100,7 +100,7 @@
    public synchronized int[][] getStePositionNearby(Integer siteNo) {
        try {
            List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
            if (basDevpPositions.isEmpty()) {
            if (basDevpPositions == null || basDevpPositions.isEmpty()) {
                log.error("获取所有站点信息异常");
                return null;
            }
@@ -114,8 +114,11 @@
            List<List<Long>> rgvPositionList = new ArrayList<>();
            for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                if (rgvThread == null) {
                    continue;
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
                    continue;
                }
                List<Long> rgvPosition = new ArrayList<>();
@@ -123,17 +126,31 @@
                rgvPosition.add(rgvProtocol.getRgvPos());
                rgvPositionList.add(rgvPosition);
            }
            if (rgvPositionList.isEmpty()) {
                return null;
            }
            Integer rgvNo = SortTheExecutionOfTheCarUtil.LatelyAndGreaterThan(rgvPositionList, sitePosition, perimeter);
            if (rgvNo == -1) {
                log.info("更新小车排序信息异常={}", rgvNo);
                return null;
            }
            List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
            if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
                return null;
            }
            int[][] ints = new int[basCircularShuttleList.size()][2];
            for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
                if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
                    continue;
                }
                if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
                    continue;
                }
                ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
            }
            if (basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
            if (basCircularShuttleList.get(0) != null
                    && basCircularShuttleList.get(0).getRgvNo() != null
                    && basCircularShuttleList.get(0).getRgvNo().equals(rgvNo)) {
                return ints;
            }
//            String[] oldList = new String[ints.length];
@@ -145,7 +162,7 @@
        } catch (Exception e) {
            log.error("自动更新小车排序信息失败,异常:" + e);
            log.error("自动更新小车排序信息失败(getStePositionNearby), siteNo={}", siteNo, e);
        }
        return null;
@@ -159,12 +176,23 @@
            boolean sign = false;
            Integer rgvNo = 0;
            List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<BasCircularShuttle>().orderBy("rgv_id", true));
            if (basCircularShuttleList == null || basCircularShuttleList.isEmpty()) {
                return;
            }
            for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
                if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
                    sign = true;
                    continue;
                }
                if (basCircularShuttle.getStatus() != 0){
                    sign = true;
                    continue;
                }
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
                if (rgvThread == null) {
                    sign = true;
                    continue;
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    sign = true;
@@ -178,6 +206,12 @@
            if (sign && rgvNo != 0) {
                int[][] ints = new int[basCircularShuttleList.size()][2];
                for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
                    if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null || basCircularShuttle.getRgvId() == null) {
                        continue;
                    }
                    if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > basCircularShuttleList.size()) {
                        continue;
                    }
                    ints[basCircularShuttle.getRgvNo() - 1] = new int[]{basCircularShuttle.getRgvNo(), basCircularShuttle.getRgvId()};
                }
//                String[] oldList = new String[ints.length];
@@ -192,14 +226,23 @@
//                log.info("更新小车排序信息:原始小车号rgvNo={},小车重新排序信息={},小车原始排序信息={}",rgvNo,Arrays.toString(newList),Arrays.toString(oldList));
                for (BasCircularShuttle basCircularShuttle : basCircularShuttleList) {
                    if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
                        continue;
                    }
                    if (basCircularShuttle.getRgvNo() < 1 || basCircularShuttle.getRgvNo() > rgvList.length) {
                        continue;
                    }
                    int[] rgv = rgvList[basCircularShuttle.getRgvNo() - 1];
                    if (rgv == null || rgv.length < 2) {
                        continue;
                    }
                    basCircularShuttle.setRgvId(rgv[1]);
                    basCircularShuttleService.updateById(basCircularShuttle);
                }
            }
        } catch (Exception e) {
            log.error("自动更新小车排序信息失败,异常:" + e);
            log.error("自动更新小车排序信息失败(updateStePosition)", e);
        }
    }
@@ -219,13 +262,22 @@
            }
            BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_id", 1));
            if (basCircularShuttle == null || basCircularShuttle.getRgvNo() == null) {
                return;
            }
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
            if (rgvThread == null) {
                return;
            }
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
            if (rgvProtocol == null || rgvProtocol.getRgvPos() == null) {
                return;
            }
            List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
            List<BasDevpPosition> basDevpPositionDevRegion = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("dev_region", true));
            if (basDevpPositions == null || basDevpPositions.isEmpty() || basDevpPositionDevRegion == null || basDevpPositionDevRegion.isEmpty()) {
                return;
            }
            Integer devNo = SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPositions, rgvProtocol.getRgvPos(), perimeter);
            BasDevpPosition[] basDevpPositionsList = SortTheExecutionOfTheCarUtil.devpNoSort(basDevpPositions, devNo);
            BasDevpPosition[] basDevpPositionsListUN = SortTheExecutionOfTheCarUtil.devpNoSortUN(basDevpPositionsList);
@@ -355,14 +407,20 @@
                            }
                            BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", rgvNo));
                            if (basCircularShuttle == null) {
                                continue;
                            }
                            if (basCircularShuttle.getStatus() != 0){
                                continue ;
                            }
                            long rgvId = basCircularShuttle.getRgvId();
                            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getRgvNo());
                            if (rgvThread == null) {
                                continue;
                            }
                            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                            if (rgvProtocol == null) {
                            if (rgvProtocol == null || rgvProtocol.getRgvNo() == null || rgvProtocol.getRgvPos() == null) {
                                continue;
                            }
@@ -377,6 +435,9 @@
                                    && rgvProtocol.getRgvPosInt() != 0
                                    && rgvProtocol.getAlarm() == 0) {
                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
                                if (basDevpPosition == null || basDevpPosition.getPlcPosition() == null) {
                                    continue;
                                }
                                if (basDevpPosition.getPlcPosition()>rgvProtocol.getRgvPos()){
                                    if (basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos()>taskRunPerimeter){
                                        if (!rgvNoM.contains(rgvProtocol.getRgvNo())){
@@ -479,6 +540,9 @@
                    continue;
                }
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
                if (rgvThread == null) {
                    continue;
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    continue;
@@ -507,6 +571,9 @@
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                if (rgvThread == null) {
                    continue;
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    continue;
@@ -596,6 +663,9 @@
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                if (rgvThread == null) {
                    continue;
                }
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    continue;
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -76,6 +76,12 @@
            List<WcsRgvListParam> wcsRgvListParamList = new ArrayList<>();
            List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<>());
            List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position",true));
            if (wrkMastList == null) {
                wrkMastList = new ArrayList<>();
            }
            if (basDevpPositions == null) {
                basDevpPositions = new ArrayList<>();
            }
            for (WrkMast wrkMast : wrkMastList){
                WcsTaskListParam wcsTaskListParam = new WcsTaskListParam(wrkMast);
@@ -94,11 +100,19 @@
                WcsRgvListParam wcsRgvListParam = new WcsRgvListParam();
                wcsRgvListParam.setRgvNo(rgv.getId().toString());
                wcsRgvListParam.setTaskNo(Cools.isEmpty(rgvProtocol.getTaskNo1()) ? null:rgvProtocol.getTaskNo1().toString());
                if (rgvProtocol.getStatusType() == null || rgvProtocol.getStatusType().id == null) {
                    continue;
                }
                wcsRgvListParam.setStatus(rgvProtocol.statusType.id);
                wcsRgvListParam.setCurrPos(rgvProtocol.RgvPos);
                wcsRgvListParam.setCurrSta(SortTheExecutionOfTheCarUtil.LatelyAndLessThanWcs(basDevpPositions,rgvProtocol.getRgvPos(),perimeter).toString());
                if (rgvProtocol.getRgvPos() != null && !basDevpPositions.isEmpty()) {
                    Integer currSta = SortTheExecutionOfTheCarUtil.LatelyAndLessThanWcs(basDevpPositions, rgvProtocol.getRgvPos(), perimeter);
                    wcsRgvListParam.setCurrSta(currSta == null ? null : currSta.toString());
                } else {
                    wcsRgvListParam.setCurrSta(null);
                }
                List<String> arrayList = new ArrayList<>();
                if (rgvProtocol.getAlarm()!=0){
                if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm()!=0){
                    arrayList.add(rgvProtocol.getAlarm$());
                }
                wcsRgvListParam.setError(arrayList);
@@ -109,6 +123,7 @@
            wcsDataSynchronizationParam.setTimestamp(timestamp);
            return R.ok().add(wcsDataSynchronizationParam);
        } catch (Exception e){
            log.error("wcsTaskStatus接口异常, timestamp={}", timestamp, e);
            return R.error("异常").add("异常信息:"+e);
        }
    }
src/main/java/com/zy/core/thread/RgvThread.java
@@ -55,7 +55,7 @@
     * 工位2复位信号
     */
    private boolean resetFlag2 = false;
    private boolean connectRgv = false;
    private volatile boolean connectRgv = false;
    private boolean alarmChangeSign = false;
    public RgvThread(RgvSlave slave) {
@@ -65,7 +65,8 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        connectRgv = this.connect();
        // 线程启动即给协议体完整默认值
        initRgv();
        // 启动线程自动重连
        new Thread(this::rgvConnect).start();
@@ -157,6 +158,9 @@
                        // 根据实时信息更新数据库
                        BasCircularShuttleService basCircularShuttleService = SpringUtils.getBean(BasCircularShuttleService.class);
                        BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no",  slave.getId()));
                        if (basCircularShuttle == null) {
                            continue;
                        }
                        if (basCircularShuttle.getStatus() != 0){
                            continue;
                        }
@@ -225,6 +229,9 @@
        rgvProtocol.setStatus2((short)-1);
        rgvProtocol.setLoaded2((short)0);
        rgvProtocol.setAlarm((short)0);
        rgvProtocol.setAlarmList(new ArrayList<>());
        rgvProtocol.setInstantaneousSpeed(0D);
        rgvProtocol.setEndStaM((short)0);
        rgvProtocol.setxSpeed((short) 0);
        rgvProtocol.setxDistance((short) 0);
        rgvProtocol.setxDuration((short) 0);
@@ -352,8 +359,11 @@
    private void rgvOpt(RgvCommand command) {
        try{
            BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
            BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosInt(), command);
            log.info(rgvProtocol.getRgvNo()+"号小车写入命令定位值:"+rgvProtocol.getRgvPosInt());
            int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
            int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
            int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosInt();
            BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
            log.info(rgvNo+"号小车写入命令定位值:"+rgvPos);
            basRgvOptService.insert(basRgvOpt);
        }catch (Exception e){
            log.error("RGV写入命令保存失败!!");
@@ -362,7 +372,10 @@
    private void rgvOpt(Long command) {
        try{
            BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
            BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol.getTaskNo1().intValue(), rgvProtocol.getRgvNo(), rgvProtocol.getRgvPosI(), command);
            int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
            int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
            int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosI();
            BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
            basRgvOptService.insert(basRgvOpt);
        }catch (Exception e){
            log.error("RGV写入命令保存失败!!");
src/main/resources/license.lic
Binary files differ