#
lsh
2024-06-22 c2144e00a981be9093c2b1fe257881203d800810
#
7个文件已修改
432 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 239 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/ServerBootstrap.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/DevpSlave.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4582,67 +4582,55 @@
    }
    /**
     *  JarWrkMastExecute任务创建   //未完成
     *  开门、入硫化罐
     *  JarWrkMastExecute任务创建   //完成
     */
    public synchronized void jarWrkMastExecuteGenerate() {
    public synchronized void jarWrkMastExecuteGenerate(Integer sign) {
        for (JarSlave jarSlave : slaveProperties.getJar()) {
            try{
                if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){
                    continue;
                }
                List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{
                    add(0);
                    add(2);
                }});
                for (BasJarMast basJarMast : basJarMastList){
                    // 获取硫化罐信息
                    JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId());
                    JarProtocol jarProtocol = jarThread.getJarProtocol();
                    if (jarProtocol == null) {
                        break;
                    }
                    if (jarProtocol.modeType != JarModeType.AUTO){
                        break;
                    }
                    JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId());
                    JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol();
                    if (jarOtherProtocol == null) {
                        break;
                    }
                // 获取硫化罐信息
                JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId());
                JarProtocol jarProtocol = jarThread.getJarProtocol();
                if (jarProtocol == null) {
                    break;
                }
                if (jarProtocol.modeType != JarModeType.AUTO){
                    break;
                }
                JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId());
                JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol();
                if (jarOtherProtocol == null) {
                    break;
                }
//                    if (jarOtherProtocol.modeType != JarModeType.AUTO){
//                        continue;
//                    }
                    BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
                    if (Cools.isEmpty(basJar)){
                        log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                        break;
                    }
                    //门作业  无
                    //自动、空闲、右门关闭、   Other左门关闭
                    if (jarProtocol.isAutoing() && !jarProtocol.isRightDoor() && jarProtocol.jarErr==0
                            && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0
                            && !jarOtherProtocol.isLeftDoor() && jarOtherProtocol.leftDoorOpen==0  && jarOtherProtocol.leftDoorClose==0){
                        if (jarProtocol.statusType == JarStatusType.IDLE && !jarProtocol.isLeftDoor() && basJarMast.getStatus()==0){
                            //生成开门任务 OpenTheDoor
                            if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),1,1})){
                                log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                            }
                            return;
                        } else if (jarProtocol.statusType == JarStatusType.MOVING && jarProtocol.isLeftDoor()){
                            //生成入硫化罐任务
                            if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),5,1})){
                                log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                            }
                            return;
                        } else if (jarProtocol.statusType == JarStatusType.IDLE && jarProtocol.isLeftDoor()){
                            log.error("JarWrkMastExecute任务创建===>执行异常===》硫化罐空闲但是门未关===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
                    }
                BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
                if (Cools.isEmpty(basJar)){
                    log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                    break;
                }
                //门作业  无
                //自动、空闲、右门关闭、   Other左门关闭
                if (jarProtocol.isAutoing() && jarProtocol.jarErr==0
                        && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0){
                    switch (sign){
                        case 0:
                        case 2:
                            if (jarWrkMastExecuteGenerate1(jarSlave,sign)){
                                break;
                            }
                        case 3:
//                            if (jarWrkMastExecuteGenerate2(jarSlave,sign)){
//                                break;
//                            }
                    }
                }
            } catch (Exception e){
                log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage());
@@ -4651,10 +4639,147 @@
    }
    /**
     *  JarWrkMastExecute任务创建   //完成
     *  开门任务
     *  生成入硫化罐任务
     */
    public synchronized boolean jarWrkMastExecuteGenerate1(JarSlave jarSlave,Integer sign) {
        try{
            if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){
                return false;
            }
            List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{
                add(0);
                add(2);
            }});
            for (BasJarMast basJarMast : basJarMastList){
                // 获取硫化罐信息
                JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId());
                JarProtocol jarProtocol = jarThread.getJarProtocol();
                if (jarProtocol == null) {
                    return false;
                }
                if (jarProtocol.modeType != JarModeType.AUTO){
                    return false;
                }
                JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId());
                JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol();
                if (jarOtherProtocol == null) {
                    return false;
                }
//                    if (jarOtherProtocol.modeType != JarModeType.AUTO){
//                        continue;
//                    }
                BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
                if (Cools.isEmpty(basJar)){
                    log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                    return false;
                }
                //门作业  无
                //自动、空闲、右门关闭、   Other左门关闭
                if (jarProtocol.isAutoing() && !jarProtocol.isRightDoor() && jarProtocol.jarErr==0
                        && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0
                        && !jarOtherProtocol.isLeftDoor() && jarOtherProtocol.leftDoorOpen==0  && jarOtherProtocol.leftDoorClose==0){
                    if (jarProtocol.statusType == JarStatusType.IDLE && !jarProtocol.isLeftDoor() && basJarMast.getStatus()==0){
                        //生成开门任务 OpenTheDoor
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),1,1})){
                            log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
                        return true;
                    } else if (jarProtocol.statusType == JarStatusType.MOVING && jarProtocol.isLeftDoor()){
                        //生成入硫化罐任务
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),5,1})){
                            log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
                        return true;
                    } else if (jarProtocol.statusType == JarStatusType.IDLE && jarProtocol.isLeftDoor()){
                        log.error("JarWrkMastExecute任务创建===>执行异常===》硫化罐空闲但是门未关===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                    }
                }
                return false;
            }
        } catch (Exception e){
            log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage());
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务创建   //未完成
     *  关入料门、开出料门、关出料门
     */
    public synchronized boolean jarWrkMastExecuteGenerate2(JarSlave jarSlave,Integer sign) {
        try{
            if (wrkMastExecuteService.getWrkMastByJarIdCount(jarSlave.getId())!=0){
                return false;
            }
            List<BasJarMast> basJarMastList = basJarMastService.getJarMastByJarIdAndStatusList(jarSlave.getId(), new ArrayList<Integer>() {{
                add(0);
                add(2);
            }});
            for (BasJarMast basJarMast : basJarMastList){
                // 获取硫化罐信息
                JarThread jarThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getId());
                JarProtocol jarProtocol = jarThread.getJarProtocol();
                if (jarProtocol == null) {
                    return false;
                }
                if (jarProtocol.modeType != JarModeType.AUTO){
                    return false;
                }
                JarThread jarOtherThread = (JarThread) SlaveConnection.get(SlaveType.Jar, jarSlave.getJarOtherId());
                JarProtocol jarOtherProtocol = jarOtherThread.getJarProtocol();
                if (jarOtherProtocol == null) {
                    return false;
                }
//                    if (jarOtherProtocol.modeType != JarModeType.AUTO){
//                        continue;
//                    }
                BasJar basJar = basJarMapper.selectById(jarProtocol.getJarNo());
                if (Cools.isEmpty(basJar)){
                    log.error("{}号硫化罐查询设备档案无信息!!!",jarProtocol.getJarNo());
                    return false;
                }
                //门作业  无
                //自动、空闲、右门关闭、   Other左门关闭
                if (jarProtocol.isAutoing() && !jarProtocol.isRightDoor() && jarProtocol.jarErr==0
                        && jarProtocol.leftDoorOpen==0  && jarProtocol.leftDoorClose==0 && jarProtocol.rightDoorOpen==0  && jarProtocol.rightDoorClose==0
                        && !jarOtherProtocol.isLeftDoor() && jarOtherProtocol.leftDoorOpen==0  && jarOtherProtocol.leftDoorClose==0){
                    if (jarProtocol.statusType == JarStatusType.IDLE && !jarProtocol.isLeftDoor() && basJarMast.getStatus()==0){
                        //生成开门任务 OpenTheDoor
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),1,1})){
                            log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
                        return true;
                    } else if (jarProtocol.statusType == JarStatusType.MOVING && jarProtocol.isLeftDoor()){
                        //生成入硫化罐任务
                        if (!jarWrkMastExecuteGenerateExecute(basJar,basJarMast,new int[]{basJar.getEnterSteNo(),basJar.getEnterRgvId(),5,1})){
                            log.error("JarWrkMastExecute任务创建===>执行异常===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                        }
                        return true;
                    } else if (jarProtocol.statusType == JarStatusType.IDLE && jarProtocol.isLeftDoor()){
                        log.error("JarWrkMastExecute任务创建===>执行异常===》硫化罐空闲但是门未关===》异常数据:BasJar:"+ JSON.toJSONString(basJar)+";BasJarMast:"+JSON.toJSONString(basJarMast));
                    }
                }
                return false;
            }
        } catch (Exception e){
            log.error("{}号硫化罐JarWrkMastExecute任务创建异常,异常原因={}",jarSlave.getId(),e.getMessage());
        }
        return false;
    }
    /**
     *  JarWrkMastExecute任务创建===>执行   //未完成
     */
    public synchronized boolean jarWrkMastExecuteGenerateExecute(BasJar basJar,BasJarMast basJarMast,int[] digit) {
        try{
        try {
            WrkMastExecute wrkMastExecute = new WrkMastExecute(basJarMast);
            wrkMastExecute.setJarId(digit[3]==2? basJar.getBurial():basJar.getJarNo());
            wrkMastExecute.setSteId(digit[0]);//穿梭板ID
@@ -4662,20 +4787,8 @@
            wrkMastExecute.setIoType(digit[2]);//任务类型 0: 未知  1: 开进料门  2: 关进料门  3: 开出料门  4: 关出料门  5: 入硫化罐  6: 入冷却槽  7: 穿梭车进冷却槽  8: 穿梭车离开冷却槽  9: 出冷却槽
            wrkMastExecute.setType(digit[3]);//设备  0: 未知  1: 硫化罐  2: 冷却槽  3: 硫化罐==>冷却槽
            return wrkMastExecuteService.insert(wrkMastExecute);
        }catch (Exception e){
        } catch (Exception e) {
            log.error("JarWrkMastExecute任务创建===>执行异常===》异常原因:"+e.getMessage());
        }
        return false;
    }
    /*
     * 开门任务创建
     * */
    public synchronized boolean jarWrkMastExecuteGenerate2(){
        try{
        } catch (Exception e){
            log.error("{}号硫化罐OpenTheDoorGenerate==》JarWrkMastExecute任务创建异常,异常原因={}",null,e.getMessage());
        }
        return false;
    }
src/main/java/com/zy/core/MainProcess.java
@@ -36,6 +36,9 @@
        thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    k++; if (k>10) k=0;
                    i++; if (i>5) i=0;
                    j++; if (j>5) j=0;
                    // 间隔
                    Thread.sleep(1000);
@@ -76,10 +79,6 @@
                        mainService.storeFinishedTwo();
                    }
                    i++;
                    if (i>5){
                        i=0;
                    }
//                    // 异常信息记录
//                    mainService.recErr();
@@ -97,7 +96,7 @@
                    /************************************JAR调度************************************/
                    //开门、入硫化罐
                    mainService.jarWrkMastExecuteGenerate();
                    mainService.jarWrkMastExecuteGenerate(k);
                    //Jar任务创建  //完成
                    mainService.jarMastGenerate();
src/main/java/com/zy/core/ServerBootstrap.java
@@ -57,10 +57,10 @@
        for (Slave crn : slaveProperties.getCrn()) {
            MessageQueue.init(SlaveType.Crn, crn);
        }
        // 初始化RGVmq
        for (Slave rgv : slaveProperties.getRgv()) {
            MessageQueue.init(SlaveType.Rgv, rgv);
        }
//        // 初始化RGVmq
//        for (Slave rgv : slaveProperties.getRgv()) {
//            MessageQueue.init(SlaveType.Rgv, rgv);
//        }
        // 初始化输送线mq
        for (Slave devp : slaveProperties.getDevp()) {
            MessageQueue.init(SlaveType.Devp, devp);
@@ -101,13 +101,13 @@
            map.put(crnThread, thread);
            SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
        }
        // 初始化穿梭车线程
        log.info("初始化RGV线程...................................................");
        for (RgvSlave rgv : slaveProperties.getRgv()) {
            RgvThread rgvThread = new RgvThread(rgv);
            new Thread((Runnable) rgvThread).start();
            SlaveConnection.put(SlaveType.Rgv, rgv.getId(), rgvThread);
        }
//        // 初始化穿梭车线程
//        log.info("初始化RGV线程...................................................");
//        for (RgvSlave rgv : slaveProperties.getRgv()) {
//            RgvThread rgvThread = new RgvThread(rgv);
//            new Thread((Runnable) rgvThread).start();
//            SlaveConnection.put(SlaveType.Rgv, rgv.getId(), rgvThread);
//        }
        // 初始化输送线线程
        log.info("初始化输送线线程...................................................");
        for (DevpSlave devp : slaveProperties.getDevp()) {
src/main/java/com/zy/core/model/DevpSlave.java
@@ -40,6 +40,10 @@
    private List<Sta> inRgvSta = new ArrayList<>();
    private List<Rgv> enterRgv = new ArrayList<>();
    private List<Rgv> endRgv = new ArrayList<>();
    @Data
    public static class Sta {
@@ -51,4 +55,34 @@
    }
    @Data
    public static class Rgv {
        private Integer rgvNo;//RGV编号
        private Integer steNo;//Ste编号
        private Integer jarNo;//Jar编号
        private Integer jarRegin;//区域
        private Integer burial;//冷却
        private List<Site> staNoEnter = new ArrayList<>();//入库站点
        private List<Site> staNoEnd = new ArrayList<>();//出库站点
    }
    @Data
    public static class Site {
        private Integer devpPlcId;//RGV编号
        private Integer staNo;//RGV编号
        private Integer row;//点位
    }
}
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -78,6 +78,15 @@
    // 扫码失败
    private boolean barcodeErr;
    private short endRow;//小车目标位
    private short nowRow;//小车当前位
    private boolean RGV1;//小车无货空闲
    private boolean RGV2;//小车输送线取货到位
    private boolean RGV3;//小车运行中
    private boolean RGV4;//小车改左侧货物目标站
    private boolean RGV5;//小车改右侧货物目标站
    private boolean RGV6;//上位机清除平移车资料
    public BasDevp toSqlModel(){
        BasDevp basDevp = new BasDevp();
        basDevp.setDevNo(siteId);
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -289,20 +289,33 @@
                staProtocol.setBarcodeErr(status[6]);// 扫码失败
            }
        }
//        Thread.sleep(200);
//        OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 186);
//        if (result0.IsSuccess) {
//            for (int i = 0; i < 93; i++) {
//                Integer siteId = staNos.get(i); // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result0.Content, i*2));   // 目标站
//            }
//        }
        if (slave.getId()==2){
            Thread.sleep(200);
            int[] staNosRgv = {623,624,625,626};
            for (int i = 0; i < staNosRgv.length; i++) {
                OperateResultExOne<byte[]> resultRgv = siemensS7Net.Read("DB100."+(1800+i*6), (short) 5);
                if (resultRgv.IsSuccess) {
                    Integer siteId = staNosRgv[i]; // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
                    if (null == staProtocol) {
                        staProtocol = new StaProtocol();
                        staProtocol.setSiteId(siteId);
                        station.put(siteId, staProtocol);
                    }
                    staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 0));     // 小车目标位
                    staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 2));   // 目标站
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, 4, 1);
                    staProtocol.setRGV1(status[0]);  // 自动
                    staProtocol.setRGV2(status[1]);  // 有物
                    staProtocol.setRGV3(status[2]); // 可入
                    staProtocol.setRGV4(status[3]);// 可出
                    staProtocol.setRGV5(status[4]);  // 空板信号
                    staProtocol.setRGV6(status[5]);  // 满托盘
                }
            }
        }
//        Thread.sleep(200);
//        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.100", (short) (staNoSize * 2));
//        if (result1.IsSuccess) {
src/main/resources/application.yml
@@ -234,34 +234,6 @@
      row: 25
      bay: 1
      lev: 1
  # RGV穿梭车1
  rgv[0]:
    id: 1
    ip: 192.168.18.77
    port: 502
    rack: 0
    slot: 0
    #RGV入库源站点
    rgvInSStn[0]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 100
    rgvInSStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 101
    #RGV出库源站点
    rgvOutSStn[0]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 110
    rgvOutSStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 112
    #RGV目标站点
    rgvDestStn[0]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 102
    rgvDestStn[1]:
      devpPlcId: ${wcs-slave.devp[1].id}
      staNo: 103
  # 输送线
  devp[0]:
@@ -307,6 +279,56 @@
    # 空板入库口1(临时)
    emptyInSta[0]:
      staNo: 511
    # 入硫化罐RGV
    enterRgv[0]:
      rgvNo: 623
      steNo: 1
      jarRegin: 1
      burial: 1
      staNoEnter[0]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 113
        row: 1
      staNoEnter[1]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 114
        row: 3
    # 入硫化罐RGV
    enterRgv[1]:
      rgvNo: 624
      steNo: 1
      jarRegin: 1
      burial: 1
      staNoEnter[0]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 113
        row: 1
      staNoEnter[1]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 114
        row: 3
    # 出硫化罐RGV
    endRgv[0]:
      rgvNo: 625
      steNo: 1
      jarNo: 1
      jarRegin: 1
      burial: 1
      staNoEnd[0]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 114
        row: 1
    # 出硫化罐RGV
    endRgv[1]:
      rgvNo: 626
      steNo: 1
      jarNo: 1
      jarRegin: 1
      burial: 1
      staNoEnd[0]:
        devpPlcId: ${wcs-slave.devp[1].id}
        staNo: 114
        row: 1
  # 条码扫描仪
  barcode[0]: