c9d334e61ff33aa2f90b71e34d5a7a0340765bfe..f37003093c6256e7349558faad0532e8b1d0029c
9 天以前 野心家
#ZH
f37003 对比 | 目录
9 天以前 野心家
#ZH
7c05f9 对比 | 目录
9 天以前 野心家
#ZH
8e19e6 对比 | 目录
9 天以前 野心家
#ZH
880794 对比 | 目录
9 天以前 野心家
#ZH
a1a63f 对比 | 目录
9 天以前 野心家
#ZH
54a422 对比 | 目录
7个文件已修改
398 ■■■■ 已修改文件
pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CarryParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/cache/TaskProtocolCache.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -61,12 +61,12 @@
<!--        </dependency>-->
        <!-- 显式排除slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
            <scope>provided</scope> <!-- 或直接删除该依赖 -->
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.slf4j</groupId>-->
<!--            <artifactId>slf4j-simple</artifactId>-->
<!--            <version>1.7.30</version>-->
<!--            <scope>provided</scope> &lt;!&ndash; 或直接删除该依赖 &ndash;&gt;-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.dameng</groupId>
            <artifactId>DmJdbcDriver8</artifactId>
src/main/java/com/zy/asrs/entity/param/CarryParam.java
@@ -51,7 +51,6 @@
//            String locNo = String.format("%02d", ) +
//                    String.format("%03d", split[3]) +
//                    String.format("%02d", split[4]);
            split[3] = split[3]+1;
            return split[2]+"0"+split[3]+split[4];
        } else {
            return point;
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -200,6 +200,25 @@
                            continue;
                        }
                        String barcode = barcodeThread.getBarcode();
                        int signI = 0;
                        while (signI<6){
                            Thread.sleep(200);
                            signI = signI +1;
                            // 获取条码扫描仪信息
                            if (Cools.isEmpty(barcode) || barcode.equals("000000")) {
                                devpThread.setErrorDev(staProtocol.getSiteId(), "循环次数:"+signI+";扫码值:"+barcode);
                                BarcodeThread barcodeThreadO = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                                if (barcodeThreadO == null) {
                                    continue;
                                }
                                barcode = barcodeThreadO.getBarcode();
                            } else {
                                break;
                            }
                        }
                        if (!Cools.isEmpty(barcode) && !barcode.equals("99999999") && !barcode.equals("000000")) {
                            // 请求wms接口,获取工作号和目标库位
                            ToWmsDTO toWmsDTO = new ToWmsDTO(staProtocol.getSiteId(),staProtocol.getGrossWt(),barcode, workNo == 9998? 0 : 1);
@@ -293,7 +312,7 @@
                                staProtocol.setWorkNo(9999);
                                staProtocol.setStaNo(inSta.getBackSta());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                devpThread.setErrorDev(staProtocol.getSiteId(), jsonObject.getString("msg"));
                                devpThread.setErrorDev(staProtocol.getSiteId(), jsonObject.getString("message"));
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            }
                        } else {
@@ -1664,6 +1683,8 @@
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther(rgvSlave)){
                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
                                    System.out.println("空闲就近跳过==="+rgvSlave.getId()+"===");
                                    sign=true;
                                }
                            }
@@ -1675,6 +1696,8 @@
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
                                                if (rgvSuper.getStaNo().equals(outStaNo)){
                                                    System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"===");
                                                    sign=false;
                                                    break;
                                                }
@@ -1696,6 +1719,9 @@
                                        if (taskWrk != null) {
                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk);
                                                System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                            }
                                        }
@@ -1717,6 +1743,9 @@
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
@@ -1734,12 +1763,16 @@
                        if (!sign && staList.size()==1){
                            if (rgvOtherIDLEOther2(rgvSlave)){
                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
                                    System.out.println("运行就近跳过==="+rgvSlave.getId()+"===");
                                    sign=true;
                                }
                            }
                        }
                        if (!sign) {
                        if (!sign && staList.size()>1) {
                            for (Integer staNoNow : rangeList) {
                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                    if (rgvStn.getStaNo().equals(staNoNow)) {
@@ -1747,6 +1780,9 @@
                                        if (taskWrk != null) {
                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
                                            }
                                        }
@@ -1757,7 +1793,34 @@
                                    break;
                                }
                            }
                        }else if (!sign && staList.size()==1){
                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
                                for (Integer staNoNow : rangeList) {
                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
                                        if (rgvStn.getStaNo().equals(staNoNow)) {
                                            TaskWrk taskWrk = deviceDetection(rgvStn);
                                            if (taskWrk != null) {
                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                }
                                            }
                                            break;
                                        }
                                    }
                                    if (sign) {
                                        break;
                                    }
                                }
                            }
                        }
                        if (!sign && staList.size()>1) {
                            //  半边区域内取货任务
                            for (Integer staNoNow : rangeList) {
@@ -1768,6 +1831,9 @@
                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk);
                                                    System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
                                                    break;
                                                }
src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -155,4 +155,32 @@
        }
    }
    /**
     * 查询是否有可执行任务
     */
    public TaskProtocol getNowPosRunTask2() {
//        lock.readLock().lock(); // 加读锁
        try {
            for (TaskProtocol task : cache.values()) {
                if (task.getTaskStatus()==1) {
                    return task;
                }
            }
            for (TaskProtocol task : cache.values()) {
                if (task.getTaskStatus()==2) {
                    return task;
                }
            }
            for (TaskProtocol task : cache.values()) {
                if (task.getTaskStatus()==3) {
                    return task;
                }
            }
            return null; // 返回副本
        } finally {
//            lock.readLock().unlock(); // 释放读锁
        }
    }
}
src/main/java/com/zy/core/thread/RgvThread.java
@@ -94,7 +94,7 @@
        new Thread(this::taskIssued).start();
        // 启动漫游线程
//        new Thread(this::taskWalkIssued).start();
        new Thread(this::taskWalkIssued).start();
//        new Thread(this::taskWalkIssued2).start();
        // 启动任务完成线程
@@ -104,6 +104,7 @@
    private void rgvConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectRgv){
                    try {
                        connectRgv = this.connect();
@@ -249,40 +250,40 @@
    /**
     * 漫游
     */
//    private void taskWalkIssued() {
//        while (true) {
//            try {
//                // 休眠 1 秒
//                Thread.sleep(100);
//
//                if (!deviceDetection()) {
//                    continue;
//                }
//                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                if (rgvTaskProtocol == null) {
//                    initRgv();
//                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
//                }
//                if (rgvTaskProtocol.getAvoid() != 1) {
//                    continue;
//                }
//                TaskProtocol issued = new TaskProtocol();
//                issued.setTaskNo(32222L);
//                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
//                issued.setTaskStatus(1);
//                issued.setDirection(true);
//                write(issued);
//                rgvTaskProtocol.setAvoid(0);
//
//                Thread.sleep(200);
//                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
//
//            } catch (Exception e) {
//                log.error("RGV行走任务下发线程异常!!!" + e.getMessage());
////                e.printStackTrace();
//            }
//        }
//    }
    private void taskWalkIssued() {
        while (true) {
            try {
                // 休眠 1 秒
                Thread.sleep(100);
                if (!deviceDetection()) {
                    continue;
                }
                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                if (rgvTaskProtocol == null) {
                    initRgv();
                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                }
                if (rgvTaskProtocol.getAvoid() != 1) {
                    continue;
                }
                TaskProtocol issued = new TaskProtocol();
                issued.setTaskNo(32222L);
                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
                issued.setTaskStatus(1);
                issued.setDirection(true);
                write(issued);
                rgvTaskProtocol.setAvoid(0);
                Thread.sleep(200);
                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
            } catch (Exception e) {
                log.error("RGV行走任务下发线程异常!!!" + e.getMessage());
//                e.printStackTrace();
            }
        }
    }
    /**
     * 任务下发
@@ -308,7 +309,9 @@
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
                    RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                    if (!errorRgv.equals("无")){
                        RgvErrCache.updateRgvErr(slave.getId(),errorRgv);
                    }
                    continue;
                }
@@ -333,20 +336,6 @@
                    continue;
                }
                if (rgvTaskProtocol.getAvoid() != 0) {
                    if (rgvTaskProtocol.getAvoid() == 1) {
                        TaskProtocol issued = new TaskProtocol();
                        issued.setTaskNo(32222L);
                        issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
                        issued.setTaskStatus(1);
                        issued.setDirection(true);
                        write(issued);
                        RgvErrCache.updateRgvErr(slave.getId());
                        rgvTaskProtocol.setAvoid(0);
//                        try{Thread.sleep(50L);} catch (Exception e){}
                        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
                    }
                    rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50;
                    rgvRun.setRgvNo(slave.getOtherId());
                    RgvRunCache.updateRgvStatus(rgvRun);
@@ -494,7 +483,7 @@
            return false;
        }
        if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
            errorRgv = slave.getId()+"号小车非空闲";
            errorRgv = "无";
            return false;
        }
        if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) {
@@ -534,6 +523,10 @@
    public boolean otherRgvAvoid(Long targetPosition) {
        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
        long onePos = Math.abs(targetPosition - rgvProtocol.getRgvPos());
        if (onePos<50){
            return true;
        }
        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
@@ -596,6 +589,66 @@
                            return false;
                        }
                    }
                    TaskProtocol nowPosRunTask2 = taskProtocolCacheOther.getNowPosRunTask2();
                    if (!Cools.isEmpty(nowPosRunTask2)){
                        boolean signNowPosRun = true;
                        boolean signNowPosA = true;
                        if (targetPosition - rgvProtocol.getRgvPos()>0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()>0){
                                if (rgvProtocol.getRgvPos()>rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        } else if (targetPosition - rgvProtocol.getRgvPos()<0){
                            if (nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos()<0){
                                if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
                                    signNowPosA = false;
                                    signNowPosRun = false;
                                }
                            }
                        }
                        if (signNowPosA){
                            if (nowPosRunTask2.getTaskStatus()==3){
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, nowPosRunTask2.getTargetPositionStaNoPlcId());
                                        StaProtocol staProtocol = devpThread.getStation().get(nowPosRunTask2.getTargetPositionStaNo());
                                        if (staProtocol == null ) {
                                            signNowPosRun =false;
                                        }
                                        if (signNowPosRun){
                                            // 判断是否满足入库条件
                                            if (staProtocol.isAutoing() && !staProtocol.isLoading()
                                            ){
                                                errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                                return false;
                                            }
                                        }
                                        signNowPosRun =false;
                                    }
                                }
                            } else {
                                long twoPos = Math.abs(nowPosRunTask2.getTargetPosition() - rgvProtocolOther.getRgvPos());
                                if (twoPos<100){
                                    errorRgv = slave.getOtherId()+"号RGV等待作业...";
                                    return false;
                                }
                                if (Math.abs(onePos - twoPos)>100){
                                    if (onePos-50>twoPos+50){
                                        signNowPosRun =false;
                                    }
                                }
                            }
                        }
                        if (signNowPosRun){
                            errorRgv = slave.getOtherId()+"号RGV等待作业...";
                            return false;
                        }
                    }
                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
                    if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) {
                        log.error("RGV行走超出范围!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -50,6 +50,8 @@
        add(1008);add(1009);add(1010);add(1011);add(1012);add(1013);add(1014);add(1015);
        add(1016);add(1017);add(1018);add(1019);add(1020);add(1021);add(1022);add(1023);
    }};
    private boolean connectDev = false;
    /**
     * 条码数量
@@ -82,36 +84,53 @@
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        connect();
        while (true) {
        connectDev = connect();
        while(!connectDev){
            try {
                int step = 1;
                Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
                if (task != null) {
                    step = task.getStep();
                }
                switch (step) {
                    // 读数据
                    case 1:
                        read();
                        break;
                    // 写数据 ID+目标站
                    case 2:
                        write((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
                // 心跳
//                heartbeat();
                Thread.sleep(400);
            } catch (Exception e) {
                e.printStackTrace();
            }
                connectDev = this.connect();
                Thread.sleep(100);
            } catch (Exception e){
            }
        }
        // 启动线程自动重连
        new Thread(this::devConnect).start();
        new Thread(this::readStatusDev).start();
        new Thread(this::writeStatusDev).start();
    }
    private void devConnect() {
        while (true) {
            try {
                Thread.sleep(1000);
                if(!connectDev){
                    try {
                        connectDev = this.connect();
                        Thread.sleep(100);
                    } catch (Exception e){
                    }
                }
            } catch (Exception e) {
                log.info("dev连接失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//                log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("dev", slave.getId(), "rgv连接失败"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
                initSite();
//                e.printStackTrace();
            }
        }
    }
    /**
     * 初始化站点状态
     */
@@ -161,6 +180,61 @@
        return result;
    }
    private void writeStatusDev() {
        while (true) {
            try {
                int step = 1;
                Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
                if (task != null) {
                    step = task.getStep();
                }
                switch (step) {
                    // 读数据
                    case 1:
//                        read();
                        break;
                    // 写数据 ID+目标站
                    case 2:
                        write((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
                // 心跳
//                heartbeat();
                Thread.sleep(200);
            } catch (Exception e) {
//                e.printStackTrace();
            }
        }
    }
    private void readStatusDev() {
        while (true) {
            try {
                Thread.sleep(50);
//                System.out.println("读线程"+ slave.getId());
                read();
            } catch (Exception e) {
                log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                try{
                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
                    deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据读取线程异常"+e.getMessage());
                } catch (Exception e2){
//                    log.error("e2:"+e2.getMessage());
                }
                initSite();
//                e.printStackTrace();
            }
        }
    }
    /**
     * 读取状态 ====> 整块plc
     */
@@ -191,7 +265,7 @@
                staProtocol.setInEnable(status[2]); // 可入
//                staProtocol.setInEnable(true); // 可入
                staProtocol.setOutEnable(status[3]);// 可出
                staProtocol.setOutEnable(true);// 可出
//                staProtocol.setOutEnable(true);// 可出
                staProtocol.setEmptyMk(status[4]);  // 空板信号
                staProtocol.setFullPlt(status[5]);  // 满托盘
                staProtocol.setHigh(status[6]);     // 高库位
@@ -212,7 +286,7 @@
        }
        //条码
        Thread.sleep(200);
//        Thread.sleep(50);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB400.100.0",(short) (barcodeSize*8));
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeSize; i++) {
@@ -225,7 +299,7 @@
        }
        //条码
        Thread.sleep(200);
//        Thread.sleep(50);
        int[] staW = new int[]{1004,1014,1020};
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB400.148.0",(short) (staW.length*4));
src/main/resources/application-prod.yml
@@ -280,7 +280,7 @@
    id: 2
    ip: 27.172.2.122
    port: 5005
    staNo: 1022
    staNo: 1020
    devpPlcId: 1
  crn[0]: #堆垛机1
    ip: 27.172.2.10