|  |  | 
 |  |  |     </dependencies> | 
 |  |  |  | 
 |  |  |     <build> | 
 |  |  |         <finalName>fnwcs</finalName> | 
 |  |  |         <finalName>tlfwcs</finalName> | 
 |  |  |         <plugins> | 
 |  |  |             <plugin> | 
 |  |  |                 <groupId>org.springframework.boot</groupId> | 
 
 |  |  | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | import com.zy.core.cache.SlaveConnection; | 
 |  |  | import com.zy.core.enums.*; | 
 |  |  | import com.zy.core.enums.DevpType.DevpWorkType; | 
 |  |  | import com.zy.core.model.CrnSlave; | 
 |  |  | import com.zy.core.model.DevpSlave; | 
 |  |  | import com.zy.core.model.LedSlave; | 
 |  |  | 
 |  |  |             for (DevpSlave.Sta inSta : devp.getInSta()) { | 
 |  |  |                 // 获取条码扫描仪信息 | 
 |  |  |                 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); | 
 |  |  |                 if (barcodeThread == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 String barcode = barcodeThread.getBarcode(); | 
 |  |  | //                barcode="ILY0127 0001"; | 
 |  |  |                 if(!Cools.isEmpty(barcode)) { | 
 |  |  |                     log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); | 
 |  |  |                     if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 获取入库站信息 | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 //staProtocol.setPakMk(true); | 
 |  |  | //                // 入出库模式判断 | 
 |  |  | //                if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 Short workNo = staProtocol.getWorkNo(); | 
 |  |  |                 // 尺寸检测异常 | 
 |  |  |                 boolean back = false; | 
 |  |  |                 String errMsg = "异常:"; | 
 |  |  |                 if (staProtocol.isFrontErr()) { | 
 |  |  |                     errMsg = errMsg+"前超限;"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isBackErr()) { | 
 |  |  |                     errMsg = errMsg+"后超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isHighErr()) { | 
 |  |  |                     errMsg = errMsg+"高超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isLeftErr()) { | 
 |  |  |                     errMsg = errMsg+"左超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isRightErr()) { | 
 |  |  |                     errMsg = errMsg+"右超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isWeightErr()) { | 
 |  |  |                     errMsg = errMsg+"超重"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isBarcodeErr()) { | 
 |  |  |                     errMsg = errMsg+"扫码失败"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 // 退回 | 
 |  |  |                 if (back) { | 
 |  |  |                     // led 异常显示 | 
 |  |  |                     LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); | 
 |  |  |                     if (ledThread != null) { | 
 |  |  |                         MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 String barcode = barcodeThread.getBarcode(); | 
 |  |  |                 if (!Cools.isEmpty(barcode)&&!barcode.equals("00000000")) { | 
 |  |  |                     log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); | 
 |  |  |                     if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     // led 异常显示 | 
 |  |  | //                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); | 
 |  |  | //                    if (ledThread != null) { | 
 |  |  | //                        String errorMsg = "扫码失败,请重试"; | 
 |  |  | //                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); | 
 |  |  | //                    } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() | 
 |  |  |                         && staProtocol.isInEnable() | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) | 
 |  |  |                         && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() >= 9992 && staProtocol.getWorkNo() <= 9999) | 
 |  |  |                         && staProtocol.isPakMk()){// && !Cools.isEmpty(barcode)) { | 
 |  |  |  | 
 |  |  | //                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
 |  |  | 
 |  |  | //                    } | 
 |  |  |  | 
 |  |  |                     // 判断重复工作档 | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode.substring(0,6)); | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); | 
 |  |  |                     if (wrkMast != null) { | 
 |  |  |                         News.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  | //                    // 获取入库通知档 | 
 |  |  | //                    List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); | 
 |  |  | //                    if (waitPakins.isEmpty()) { | 
 |  |  | //                        log.error("无此入库条码数据。条码号={}", barcode); | 
 |  |  | //                        continue; | 
 |  |  | //                    } | 
 |  |  |                     // 获取入库通知档 | 
 |  |  |                     List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); | 
 |  |  |                     if (waitPakins.isEmpty()) { | 
 |  |  |                         log.error("无此入库条码数据。条码号={}", barcode); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     try { | 
 |  |  |                         String pack =null;//pack码 | 
 |  |  |                         if(barcode.length()>6){ | 
 |  |  |                             pack=barcode.substring(6); | 
 |  |  |                             if(pack.equals("00000000000000000000")){ | 
 |  |  |                                 News.error("没有获得Pack码",pack); | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //String pack="MJY0136 0400"; | 
 |  |  |                         barcode=barcode.substring(0,6);//托盘码 | 
 |  |  |                         if(barcode.equals("000000")){ | 
 |  |  |                             News.error("没有获得条码",barcode); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol); | 
 |  |  |                         locTypeDto.setLocType1((short)1); | 
 |  |  |                         SearchLocParam param = new SearchLocParam(); | 
 |  |  | 
 |  |  |                         param.setIoType(1); | 
 |  |  |                         param.setSourceStaNo(inSta.getStaNo()); | 
 |  |  |                         param.setLocType1(locTypeDto.getLocType1()); | 
 |  |  |                         param.setPackNo(pack); | 
 |  |  | //                        param.setPackNo(pack); | 
 |  |  |                         String response = new HttpHandler.Builder() | 
 |  |  |                                 .setUri(wmsUrl) | 
 |  |  |                                 .setPath("/rpc/pakin/loc/v1") | 
 |  |  | 
 |  |  |                         } else if (jsonObject.getInteger("code").equals(700) && (!barcodeThread.getBarcode().equals("NG"))){ | 
 |  |  |                             StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
 |  |  |                             barcodeThread.setBarcode(""); | 
 |  |  |                             staProtocol.setWorkNo((short)9999); | 
 |  |  |                             staProtocol.setStaNo((short)201); | 
 |  |  |                             staProtocol.setWorkNo((short)9991); | 
 |  |  |                             staProtocol.setStaNo(inSta.getBackSta().shortValue()); | 
 |  |  |                             devpThread.setPakMk(staProtocol.getSiteId(), true); | 
 |  |  |                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                             News.error("url:{};request:{};response:{}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response); | 
 |  |  |                         }else { | 
 |  |  |                             StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
 |  |  |                             barcodeThread.setBarcode(""); | 
 |  |  |                             staProtocol.setWorkNo((short)9999); | 
 |  |  |                             staProtocol.setStaNo((short)201); | 
 |  |  |                             staProtocol.setWorkNo((short)9991); | 
 |  |  |                             staProtocol.setStaNo(inSta.getBackSta().shortValue()); | 
 |  |  |                             devpThread.setPakMk(staProtocol.getSiteId(), true); | 
 |  |  |                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                             News.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response); | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | //                        // 检索库位 | 
 |  |  | //                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol); | 
 |  |  | //                        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); | 
 |  |  | //                        StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos, locTypeDto, 0); | 
 |  |  | //                        // 工作号 | 
 |  |  | //                        int workNo = startupDto.getWorkNo(); | 
 |  |  | //                        // 插入工作明细档 | 
 |  |  | //                        wrkDetlService.createWorkDetail(workNo, waitPakins, barcode); | 
 |  |  | // | 
 |  |  | //                        // 插入工作主档 | 
 |  |  | //                        wrkMast = new WrkMast(); | 
 |  |  | //                        wrkMast.setWrkNo(workNo); | 
 |  |  | //                        wrkMast.setIoTime(new Date()); | 
 |  |  | //                        wrkMast.setWrkSts(2L); // 工作状态:2.设备上走 | 
 |  |  | //                        wrkMast.setIoType(1); // 入出库状态:1.入库 | 
 |  |  | //                        wrkMast.setIoPri(10D); // 优先级:10 | 
 |  |  | //                        wrkMast.setCrnNo(startupDto.getCrnNo()); | 
 |  |  | //                        wrkMast.setSourceStaNo(startupDto.getSourceStaNo()); | 
 |  |  | //                        wrkMast.setStaNo(startupDto.getStaNo()); | 
 |  |  | //                        wrkMast.setLocNo(startupDto.getLocNo()); | 
 |  |  | //                        wrkMast.setBarcode(barcode); // 托盘码 | 
 |  |  | //                        wrkMast.setFullPlt("Y"); // 满板:Y | 
 |  |  | //                        wrkMast.setPicking("N"); // 拣料 | 
 |  |  | //                        wrkMast.setExitMk("N"); // 退出 | 
 |  |  | //                        wrkMast.setEmptyMk("N"); // 空板 | 
 |  |  | //                        wrkMast.setLinkMis("N"); | 
 |  |  | //                        // 操作人员数据 | 
 |  |  | //                        wrkMast.setAppeTime(new Date()); | 
 |  |  | //                        wrkMast.setModiTime(new Date()); | 
 |  |  | //                        Integer insert = wrkMastMapper.insert(wrkMast); | 
 |  |  | //                        if (insert == 0) { | 
 |  |  | //                            throw new CoolException("保存工作档失败"); | 
 |  |  | //                        } | 
 |  |  | //                        // 更新目标库位状态 | 
 |  |  | //                        LocMast locMast = locMastService.selectById(startupDto.getLocNo()); | 
 |  |  | //                        locMast.setLocSts("S"); // S.入库预约 | 
 |  |  | //                        locMast.setModiTime(new Date()); | 
 |  |  | //                        if (!locMastService.updateById(locMast)){ | 
 |  |  | //                            throw new CoolException("改变库位状态失败"); | 
 |  |  | //                        } | 
 |  |  | //                        // 将入库通知档修改为已启动 | 
 |  |  | //                        if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) { | 
 |  |  | //                            throw new CoolException("修改入库通知档状态为已启动失败"); | 
 |  |  | //                        } | 
 |  |  | // | 
 |  |  | //                        // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  | // | 
 |  |  | //                        // 更新站点信息 且 下发plc命令 | 
 |  |  | //                        barcodeThread.setBarcode(""); | 
 |  |  | //                        staProtocol.setWorkNo((short) workNo); | 
 |  |  | //                        staProtocol.setStaNo(startupDto.getStaNo().shortValue()); | 
 |  |  | //                        devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  | //                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  | //                        if (!result) { | 
 |  |  | //                            throw new CoolException("更新plc站点信息失败"); | 
 |  |  | //                        } | 
 |  |  |  | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         News.error("扫码入库报错,错误信息",e); | 
 |  |  |                         e.printStackTrace(); | 
 |  |  | 
 |  |  |      * 库位移转 | 
 |  |  |      */ | 
 |  |  |     public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){ | 
 |  |  |         log.info("开始移库任务程序"); | 
 |  |  | //        log.info("开始移库任务程序"); | 
 |  |  |         //获取所有移库任务 | 
 |  |  |         List<WrkMast> wrkMasts=wrkMastMapper.selectLocMoves(slave.getId()); | 
 |  |  |         // 获取工作档信息 | 
 |  |  | 
 |  |  |      * 出库  ===>> 工作档信息写入led显示器 | 
 |  |  |      */ | 
 |  |  |     @Async | 
 |  |  |     public void ledExecute() { | 
 |  |  |     public synchronized void ledExecute() { | 
 |  |  |         for (LedSlave led : slaveProperties.getLed()) { | 
 |  |  |             // 获取输送线plc线程 | 
 |  |  |             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); | 
 |  |  | 
 |  |  |             for (Integer staNo : led.getStaArr()) { | 
 |  |  |                 // 获取叉车站点 | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
 |  |  |                 if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { | 
 |  |  |                 if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo()) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 // 获取工作档数据 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); | 
 |  |  |                 if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } | 
 |  |  |                 if (null == wrkMast) { continue; } | 
 |  |  |                 wrkMasts.add(wrkMast); | 
 |  |  |                 // 组装命令 | 
 |  |  |                 LedCommand ledCommand = new LedCommand(); | 
 |  |  |                 ledCommand.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                 ledCommand.setIoType(wrkMast.getIoType()); | 
 |  |  |                 // 出库模式 | 
 |  |  |                 switch (wrkMast.getIoType()) { | 
 |  |  |                     case 1: | 
 |  |  |                         ledCommand.setTitle("全板入库"); | 
 |  |  |                         break; | 
 |  |  |                     case 10: | 
 |  |  |                         ledCommand.setTitle("空板入库"); | 
 |  |  |                         break; | 
 |  |  |                     case 101: | 
 |  |  |                         ledCommand.setTitle("全板出库"); | 
 |  |  |                         break; | 
 |  |  | 
 |  |  |                         ledCommand.setEmptyMk(true); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  |                         log.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); | 
 |  |  |                         News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); | 
 |  |  |                         break; | 
 |  |  |                 } | 
 |  |  |                 ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); | 
 |  |  |                 ledCommand.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                 if (wrkMast.getIoType() != 110) { | 
 |  |  |                 ledCommand.setBarcode(wrkMast.getBarcode()); | 
 |  |  |                 if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { | 
 |  |  |                     List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); | 
 |  |  |  | 
 |  |  |                     wrkDetls.forEach(wrkDetl -> { | 
 |  |  |                         Double total = 0.0; | 
 |  |  |                         EntityWrapper<LocDetl> wrapper = new EntityWrapper<>(); | 
 |  |  |                         LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr())); | 
 |  |  |                         if (Cools.isEmpty(locDetl)) { | 
 |  |  |                             total = wrkDetl.getAnfme(); | 
 |  |  |                         } else { | 
 |  |  |                             total = locDetl.getAnfme(); | 
 |  |  |                         } | 
 |  |  |                         if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) { | 
 |  |  |                             ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
 |  |  |                         } | 
 |  |  |                         if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { | 
 |  |  |                             ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
 |  |  |                         } | 
 |  |  |                         if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) { | 
 |  |  |                             ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |                 commands.add(ledCommand); | 
 |  |  |             } | 
 |  |  |             if(Cools.isEmpty(wrkMasts)){ | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); | 
 |  |  |             // 获取LED线程 | 
 |  |  | 
 |  |  |             // 命令下发 ------------------------------------------------------------------------------- | 
 |  |  |             if (!commands.isEmpty()) { | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { | 
 |  |  |                     log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     News.error("{}号LED显示内容命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     ledThread.setLedMk(false); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  | 
 |  |  |             // 获取led线程 | 
 |  |  |             LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); | 
 |  |  |             // led显示默认内容 | 
 |  |  |             if (reset && !ledThread.isLedMk()) { | 
 |  |  |                 ledThread.setLedMk(true); | 
 |  |  |             if (reset) { | 
 |  |  |                 if (ledThread == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { | 
 |  |  |                     log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                 } else { | 
 |  |  |  | 
 |  |  |                     News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 
 |  |  | 
 |  |  | public class MatDto { | 
 |  |  |  | 
 |  |  |     // 物料编号 | 
 |  |  |     private String matNo; | 
 |  |  |     private String matnr; | 
 |  |  |  | 
 |  |  |     // 物料名称 | 
 |  |  |     private String maknx; | 
 |  |  |  | 
 |  |  |     private String batch; | 
 |  |  |  | 
 |  |  |     private String specs; | 
 |  |  |  | 
 |  |  |     // 客户信息 | 
 |  |  |     private String manu; | 
 |  |  |  | 
 |  |  |     // 备注 | 
 |  |  |     private String memo; | 
 |  |  |  | 
 |  |  |     // 物料数量 | 
 |  |  |     private Double count; | 
 |  |  |  | 
 |  |  |     private Double total; | 
 |  |  |  | 
 |  |  |     public MatDto() { | 
 |  |  |     } | 
 |  |  |     public MatDto(String matnr, String maknx, String batch, String specs, String manu, String memo, Double count, Double total) { | 
 |  |  |         this.matnr = matnr; | 
 |  |  |         this.maknx = maknx; | 
 |  |  |         this.batch = batch; | 
 |  |  |         this.specs = specs; | 
 |  |  |         this.manu = manu; | 
 |  |  |         this.memo = memo; | 
 |  |  |         this.count = count; | 
 |  |  |         this.total = total; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public MatDto(String matNo, String maknx, Double count) { | 
 |  |  |         this.matNo = matNo; | 
 |  |  |         this.matnr = matNo; | 
 |  |  |         this.maknx = maknx; | 
 |  |  |         this.count = count; | 
 |  |  |     } | 
 |  |  |     public MatDto(String matNo, String maknx, Double count,String specs) { | 
 |  |  |         this.specs = specs; | 
 |  |  |         this.matnr = matNo; | 
 |  |  |         this.maknx = maknx; | 
 |  |  |         this.count = count; | 
 |  |  |     } | 
 |  |  |     public MatDto(String matNo, String maknx, Double count,Double total,String specs) { | 
 |  |  |         this.specs = specs; | 
 |  |  |         this.matnr = matNo; | 
 |  |  |         this.maknx = maknx; | 
 |  |  |         this.count = count; | 
 |  |  |         this.total = total; | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |                     // 入库  ===>> 空栈板初始化入库,叉车入库站放货 | 
 |  |  |                     mainService.storeEmptyPlt(); | 
 |  |  |                     // 出库  ===>> 工作档信息写入led显示器 | 
 |  |  | //                    mainService.ledExecute(); | 
 |  |  |                     mainService.ledExecute(); | 
 |  |  |                     // 其他  ===>> LED显示器复位,显示默认信息 | 
 |  |  | //                    mainService.ledReset(); | 
 |  |  |                     mainService.ledReset(); | 
 |  |  | //                    mainService.outOfDevp(); | 
 |  |  |  | 
 |  |  |                     //启动、完成、暂停测试系统测试 | 
 |  |  |                     mainService.packTest1(); | 
 |  |  | //                    mainService.packTest1(); | 
 |  |  | //                    //火警,给堆垛机发送火警警报 | 
 |  |  |                     mainService.fierCrn(); | 
 |  |  | //                    mainService.fierCrn(); | 
 |  |  |  | 
 |  |  |                     //103站点有物下发pack码 | 
 |  |  |                     mainService.packDevp(); | 
 |  |  | //                    mainService.packDevp(); | 
 |  |  |  | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         private Integer barcode; | 
 |  |  |  | 
 |  |  |         private Integer backSta; | 
 |  |  |  | 
 |  |  |         private Integer led; | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private boolean emptyMk = false; | 
 |  |  |  | 
 |  |  |     private Integer ioType; | 
 |  |  |     private String barcode; | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     // 入库暂存数 | 
 |  |  |     private Short inQty; | 
 |  |  |  | 
 |  |  |     // 外形检测 ------------------------------------------------------------------------ | 
 |  |  |  | 
 |  |  |     // 前超限 | 
 |  |  |     private boolean frontErr; | 
 |  |  |  | 
 |  |  |     // 后超限 | 
 |  |  |     private boolean backErr; | 
 |  |  |  | 
 |  |  |     // 高超限 | 
 |  |  |     private boolean highErr; | 
 |  |  |  | 
 |  |  |     // 左超限 | 
 |  |  |     private boolean leftErr; | 
 |  |  |  | 
 |  |  |     // 右超限 | 
 |  |  |     private boolean rightErr; | 
 |  |  |  | 
 |  |  |     // 超重 | 
 |  |  |     private boolean weightErr; | 
 |  |  |  | 
 |  |  |     // 扫码失败 | 
 |  |  |     private boolean barcodeErr; | 
 |  |  |  | 
 |  |  |     //出入库模式 | 
 |  |  |     private Short outInModel; | 
 |  |  |  | 
 |  |  |     public BasDevp toSqlModel(){ | 
 |  |  |         BasDevp basDevp = new BasDevp(); | 
 |  |  |         basDevp.setDevNo(siteId); | 
 
 |  |  | 
 |  |  |     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); | 
 |  |  |     private short heartBeatVal = 1; | 
 |  |  |     public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ | 
 |  |  |         add(101);add(102);add(103);add(104); | 
 |  |  |         add(201);add(202);add(203);add(204);add(205);add(206); | 
 |  |  |         add(207);add(208);add(209);add(210);add(211);add(212); | 
 |  |  |         add(213);add(105);add(1000); | 
 |  |  |         add(101); | 
 |  |  |         add(102); | 
 |  |  |         add(103); | 
 |  |  |         add(104); | 
 |  |  |         add(201); | 
 |  |  |         add(202); | 
 |  |  |         add(203); | 
 |  |  |         add(204); | 
 |  |  |         add(205); | 
 |  |  |         add(206); | 
 |  |  |     }}; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 条码数量 | 
 |  |  |      */ | 
 |  |  |     private int barcodeSize = 2; | 
 |  |  |     private int barcodeSize = 1; | 
 |  |  |     public IoModeType ioMode = IoModeType.NONE; | 
 |  |  |  | 
 |  |  |     public int[][] startSignal = new int[48][3]; | 
 |  |  | 
 |  |  |                         break; | 
 |  |  |                     // 写数据 ID+目标站 | 
 |  |  |                     case 2: | 
 |  |  |                         write((StaProtocol)task.getData()); | 
 |  |  |                         write((StaProtocol) task.getData()); | 
 |  |  |                         break; | 
 |  |  |                     // 写数据 103站点写入PACK码 | 
 |  |  |                     case 4: | 
 |  |  |                         write103((String)task.getData()); | 
 |  |  |                         break; | 
 |  |  | //                    case 4: | 
 |  |  | //                        write103((String)task.getData()); | 
 |  |  | //                        break; | 
 |  |  |                     // 火警信号 | 
 |  |  |                     case 5: | 
 |  |  |                         StaProtocol staProtocol2 = (StaProtocol)task.getData(); | 
 |  |  |                         siemensS7Net.Write("DB108.0" + staProtocol2.getSiteId(), staProtocol2.getStaNo()==1); | 
 |  |  |                         break; | 
 |  |  | //                    case 5: | 
 |  |  | //                        StaProtocol staProtocol2 = (StaProtocol)task.getData(); | 
 |  |  | //                        siemensS7Net.Write("DB108.0" + staProtocol2.getSiteId(), staProtocol2.getStaNo()==1); | 
 |  |  | //                        break; | 
 |  |  |                     //测试库出库,库位状态改为8 | 
 |  |  |                     case 6: | 
 |  |  |                         String data = task.getData()+""; | 
 |  |  |                         Byte coun=8; | 
 |  |  |                         siemensS7Net.Write("DB38.0" + data, coun); | 
 |  |  |                         break; | 
 |  |  | //                    case 6: | 
 |  |  | //                        String data = task.getData()+""; | 
 |  |  | //                        Byte coun=8; | 
 |  |  | //                        siemensS7Net.Write("DB38.0" + data, coun); | 
 |  |  | //                        break; | 
 |  |  |                     //复位测试信号 | 
 |  |  |                     case 3: | 
 |  |  |                         StaProtocol staProtocol = (StaProtocol) task.getData(); | 
 |  |  |                         siemensS7Net.Write("DB102.0" + staProtocol.getSiteId(), staProtocol.getStaNo()); | 
 |  |  |                         break; | 
 |  |  | //                    case 3: | 
 |  |  | //                        StaProtocol staProtocol = (StaProtocol) task.getData(); | 
 |  |  | //                        siemensS7Net.Write("DB102.0" + staProtocol.getSiteId(), staProtocol.getStaNo()); | 
 |  |  | //                        break; | 
 |  |  |                     default: | 
 |  |  |                         break; | 
 |  |  |     } | 
 |  |  |     // 心跳 | 
 |  |  |                 } | 
 |  |  |                 // 心跳 | 
 |  |  | //                heartbeat(); | 
 |  |  |                 Thread.sleep(400); | 
 |  |  | } catch (Exception e) { | 
 |  |  |         e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | @Override | 
 |  |  | public boolean connect() { | 
 |  |  |     @Override | 
 |  |  |     public boolean connect() { | 
 |  |  |         boolean result = false; | 
 |  |  |         siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); | 
 |  |  |         siemensS7Net.setRack(slave.getRack().byteValue()); | 
 |  |  |         siemensS7Net.setSlot(slave.getSlot().byteValue()); | 
 |  |  |         OperateResult connect = siemensS7Net.ConnectServer(); | 
 |  |  |         if(connect.IsSuccess){ | 
 |  |  |         result = true; | 
 |  |  |         OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); | 
 |  |  |         log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |         if (connect.IsSuccess) { | 
 |  |  |             result = true; | 
 |  |  |             OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); | 
 |  |  |             log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |         } else { | 
 |  |  |         OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); | 
 |  |  |         log.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |             OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); | 
 |  |  |             log.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); | 
 |  |  |         } | 
 |  |  |         siemensS7Net.ConnectClose(); | 
 |  |  |         return result; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 读取状态 ====> 整块plc | 
 |  |  |  */ | 
 |  |  | private void read() throws InterruptedException { | 
 |  |  |     /** | 
 |  |  |      * 读取状态 ====> 整块plc | 
 |  |  |      */ | 
 |  |  |     private void read() throws InterruptedException { | 
 |  |  | //        // 更新入出库模式 | 
 |  |  | //        updateIoMode(); | 
 |  |  |         int staNoSize = staNos.size(); | 
 |  |  |         OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*4)); | 
 |  |  |         OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize * 4)); | 
 |  |  |         if (result.IsSuccess) { | 
 |  |  |             for (int i = 0; i < staNoSize; i++) { | 
 |  |  |                 Integer siteId = staNos.get(i); // 站点编号 | 
 |  |  | 
 |  |  |                     staProtocol.setSiteId(siteId); | 
 |  |  |                     station.put(siteId, staProtocol); | 
 |  |  |                 } | 
 |  |  |                 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4));     // 工作号 | 
 |  |  |                 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4));     // 工作号 | 
 |  |  |  | 
 |  |  |                 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4 + 2));   // 目标站 | 
 |  |  |                 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2));   // 目标站 | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | //        Thread.sleep(200); | 
 |  |  | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |         Thread.sleep(200); | 
 |  |  |         OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) (staNoSize*2)); | 
 |  |  |         OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) (staNoSize * 2)); | 
 |  |  |         if (result1.IsSuccess) { | 
 |  |  |             for (int i = 0; i < staNoSize; i++) { | 
 |  |  |                 Integer siteId = staNos.get(i); // 站点编号 | 
 |  |  |                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1); | 
 |  |  |                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i * 2, 1); | 
 |  |  |                 StaProtocol staProtocol = station.get(siteId); | 
 |  |  |                 staProtocol.setAutoing(status[0]);  // 自动 | 
 |  |  |                 staProtocol.setLoading(status[1]);  // 有物 | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Thread.sleep(200); | 
 |  |  |         OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190",(short)(26)); | 
 |  |  |         OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB100.216",(short)(6)); | 
 |  |  |         OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190", (short) 8); | 
 |  |  | //        OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB100.216",(short)(6)); | 
 |  |  |         if (result2.IsSuccess) { | 
 |  |  |                 String barcode =siemensS7Net.getByteTransform().TransString(result2.Content,0,26, "UTF-8"); | 
 |  |  |             String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, 0, 8, "UTF-8"); | 
 |  |  | //                String barcode=new String(result2.Content,i*12,12); | 
 |  |  |                 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1); | 
 |  |  |                 if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { | 
 |  |  |                     barcodeThread.setBarcode(barcode); | 
 |  |  |                 } | 
 |  |  |         } | 
 |  |  |         if (result5.IsSuccess) { | 
 |  |  |             String barcode =siemensS7Net.getByteTransform().TransString(result5.Content,0,6, "UTF-8"); | 
 |  |  | //                String barcode=new String(result2.Content,i*12,12); | 
 |  |  |             BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode,  2); | 
 |  |  |             if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { | 
 |  |  |             BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 1); | 
 |  |  |             if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { | 
 |  |  |                 barcodeThread.setBarcode(barcode); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | //        if (result5.IsSuccess) { | 
 |  |  | //            String barcode =siemensS7Net.getByteTransform().TransString(result5.Content,0,6, "UTF-8"); | 
 |  |  | ////                String barcode=new String(result2.Content,i*12,12); | 
 |  |  | //            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode,  2); | 
 |  |  | //            if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { | 
 |  |  | //                barcodeThread.setBarcode(barcode); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         Thread.sleep(200); | 
 |  |  |         //测试柜状态获取 | 
 |  |  | 
 |  |  |         OperateResultExOne<byte[]> result6 = siemensS7Net.Read("DB102.0", (short) 96); | 
 |  |  |         //消防报警 | 
 |  |  |         OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB108.0", (short) 48); | 
 |  |  |         if(result3.IsSuccess) { | 
 |  |  |             for(int i=0; i<48; i++){ | 
 |  |  |         if (result3.IsSuccess) { | 
 |  |  |             for (int i = 0; i < 48; i++) { | 
 |  |  |                 startSignal[i][0] = siemensS7Net.getByteTransform().TransByte(result3.Content, i);//测试柜状态 | 
 |  |  |                 startSignal[i][1] = siemensS7Net.getByteTransform().TransBool(result4.Content, i)?1:0;//消防状态 | 
 |  |  |                 startSignal[i][2] = siemensS7Net.getByteTransform().TransInt16(result6.Content, i*2);//启动按钮状态 | 
 |  |  |                 startSignal[i][1] = siemensS7Net.getByteTransform().TransBool(result4.Content, i) ? 1 : 0;//消防状态 | 
 |  |  |                 startSignal[i][2] = siemensS7Net.getByteTransform().TransInt16(result6.Content, i * 2);//启动按钮状态 | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | //        OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); | 
 |  |  | //        if (result2.IsSuccess) { | 
 |  |  | //            this.ioMode = IoModeType.get(result2.Content); | 
 |  |  | //        } | 
 |  |  |         OperateResultExOne<byte[]> result202 = siemensS7Net.Read("DB101.806", (short) 8); | 
 |  |  |         if (result202.IsSuccess) { | 
 |  |  |             //出入库模式 | 
 |  |  |             boolean[] status = siemensS7Net.getByteTransform().TransBool(result202.Content, 0, 1); | 
 |  |  |             StaProtocol staProtocol = station.get(202); | 
 |  |  |             staProtocol.setFrontErr(status[0]); | 
 |  |  |             staProtocol.setBackErr(status[1]); | 
 |  |  |             staProtocol.setHighErr(status[2]); | 
 |  |  |             staProtocol.setLeftErr(status[3]); | 
 |  |  |             staProtocol.setRightErr(status[4]); | 
 |  |  |             staProtocol.setWeightErr(status[5]); | 
 |  |  |             staProtocol.setBarcodeErr(status[6]); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (result.IsSuccess && result1.IsSuccess) { | 
 |  |  |  | 
 |  |  |             OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); | 
 |  |  |             OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); | 
 |  |  |  | 
 |  |  |             // 根据实时信息更新数据库 | 
 |  |  |             try { | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 写入 pack码 =====> 单站点写入 | 
 |  |  |      */ | 
 |  |  |     private void write103(String packNo){ | 
 |  |  |         try{ | 
 |  |  |     private void write103(String packNo) { | 
 |  |  |         try { | 
 |  |  |  | 
 |  |  |             OperateResult write = siemensS7Net.Write("DB109.0", packNo); | 
 |  |  |             if (!write.IsSuccess) { | 
 |  |  | 
 |  |  |                 log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(packNo)); | 
 |  |  |             } else { | 
 |  |  |                 OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(packNo))); | 
 |  |  |                 log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(packNo)); | 
 |  |  |                 log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(packNo)); | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("103站点写入数据失败,输送线线程write103"); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |         int idCount = 0; | 
 |  |  |         boolean idFlag = false; | 
 |  |  |         OperateResult write; | 
 |  |  |         while(idCount < 5){ | 
 |  |  |         while (idCount < 5) { | 
 |  |  |  | 
 |  |  |             write = siemensS7Net.Write("DB100." + index*4, array);    // 写 | 
 |  |  |             if(write.IsSuccess){ | 
 |  |  |             write = siemensS7Net.Write("DB100." + index * 4, array);    // 写 | 
 |  |  |             if (write.IsSuccess) { | 
 |  |  |                 Thread.sleep(200); | 
 |  |  |                 OperateResultExOne<byte[]> readId = siemensS7Net.Read("DB100." + index*4, (short) (staNoSize*2)); | 
 |  |  |                   if(readId.IsSuccess){ | 
 |  |  |                     if(staProtocol.getWorkNo()!=0&&staProtocol.getWorkNo()!=9999){ | 
 |  |  |                         if(!staProtocol.isInEnable()&&(staProtocol.getSiteId()==201||staProtocol.getSiteId()==206)){ | 
 |  |  |                 OperateResultExOne<byte[]> readId = siemensS7Net.Read("DB100." + index * 4, (short) (staNoSize * 2)); | 
 |  |  |                 if (readId.IsSuccess) { | 
 |  |  |                     if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() != 9999) { | 
 |  |  |                         if (!staProtocol.isInEnable() && (staProtocol.getSiteId() == 201 || staProtocol.getSiteId() == 206)) { | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     short workNo = siemensS7Net.getByteTransform().TransInt16(readId.Content, 0); | 
 |  |  |                     if(staProtocol.getWorkNo().equals(workNo)){ | 
 |  |  |                     if (staProtocol.getWorkNo().equals(workNo)) { | 
 |  |  |                         //工作号写入成功 | 
 |  |  |                         idFlag = true; | 
 |  |  |                         break; | 
 |  |  |                     } else {//返回结果是成功了,但是真实值不相同 | 
 |  |  |                         idCount++; | 
 |  |  |                         OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线工作号后返回成功,但是读取工作号值不一致。输送线plc编号={1},站点数据={2},写入次数={3}", | 
 |  |  |                                 slave.getId(), JSON.toJSON(staProtocol),idCount)); | 
 |  |  |                                 slave.getId(), JSON.toJSON(staProtocol), idCount)); | 
 |  |  |                         log.error("写入输送线工作号后返回成功,但是读取工作号值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), idCount); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 idCount++; | 
 |  |  |                 OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线工作号失败。输送线plc编号={1},站点数据={2},写入次数={3}", | 
 |  |  |                         slave.getId(), JSON.toJSON(staProtocol),idCount)); | 
 |  |  |                         slave.getId(), JSON.toJSON(staProtocol), idCount)); | 
 |  |  |                 log.error("写入输送线工作号失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), idCount); | 
 |  |  |             } | 
 |  |  |             Thread.sleep(200); | 
 |  |  |         } | 
 |  |  |         //写ID尝试了5次还是失败了 | 
 |  |  |         if(!idFlag){ | 
 |  |  |         if (!idFlag) { | 
 |  |  |             staProtocol = station.get(staProtocol.getSiteId()); | 
 |  |  |             if (staProtocol.getWorkNo() == 9999 && staProtocol.getStaNo() ==0) { | 
 |  |  |             if (staProtocol.getWorkNo() == 9999 && staProtocol.getStaNo() == 0) { | 
 |  |  |                 staProtocol.setPakMk(true); | 
 |  |  |             } | 
 |  |  |             OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线工作号尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); | 
 |  |  | 
 |  |  | //        OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo());    // 目标站 | 
 |  |  |  | 
 |  |  |         OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); | 
 |  |  |         log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}",  slave.getId(), JSON.toJSON(staProtocol)); | 
 |  |  |         log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}", slave.getId(), JSON.toJSON(staProtocol)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 更新入出库模式 | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 心跳 | 
 |  |  |      */ | 
 |  |  |     private void heartbeat(){ | 
 |  |  |     private void heartbeat() { | 
 |  |  |         if (heartBeatVal == 1) { | 
 |  |  |             heartBeatVal = 2; | 
 |  |  |         } else { | 
 |  |  | 
 |  |  |     public static void main(String[] args) { | 
 |  |  |         System.out.println(staNos.indexOf(129)); | 
 |  |  |         System.out.println(staNos.size()); | 
 |  |  |         for (int i = 0; i<staNos.size(); i++) { | 
 |  |  |         for (int i = 0; i < staNos.size(); i++) { | 
 |  |  | //            System.out.println(i*2); | 
 |  |  | //            System.out.println(i*2 + 200); | 
 |  |  | //            System.out.println(i); | 
 |  |  |         } | 
 |  |  |         int index = staNos.indexOf(128); | 
 |  |  |         System.out.println(index*2); | 
 |  |  |         System.out.println(index*2 + 200); | 
 |  |  |         System.out.println(index * 2); | 
 |  |  |         System.out.println(index * 2 + 200); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    public static void main(String[] args) throws Exception { | 
 
 |  |  | 
 |  |  |     name: @pom.build.finalName@ | 
 |  |  |   datasource: | 
 |  |  |     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver | 
 |  |  |     url: jdbc:sqlserver://10.12.55.200:1433;databasename=zjfnasrs | 
 |  |  |     #url: jdbc:sqlserver://127.0.0.1:1433;databasename=zjfnasrs | 
 |  |  | #    url: jdbc:sqlserver://10.12.55.200:1433;databasename=zjfnasrs | 
 |  |  |     url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxtlfasrs | 
 |  |  |     username: sa | 
 |  |  |     password: sa@123 | 
 |  |  |   mvc: | 
 |  |  | 
 |  |  |       row: 2 | 
 |  |  |       bay: 0 | 
 |  |  |       lev: 1 | 
 |  |  |   # 堆垛机2 | 
 |  |  |   crn[1]: | 
 |  |  |     id: 2 | 
 |  |  |     ip: 10.12.55.60 | 
 |  |  |     port: 8888 | 
 |  |  |     rack: 0 | 
 |  |  |     slot: 0 | 
 |  |  |     # 偏移量,当堆垛机站点列号=1时,偏移量=2 | 
 |  |  |     offset: 2 | 
 |  |  |     demo: false | 
 |  |  |     # 堆垛机入库站点 | 
 |  |  |     crnInStn[0]: | 
 |  |  |       devpPlcId: ${wcs-slave.devp[0].id} | 
 |  |  |       staNo: 209 | 
 |  |  |       row: 3 | 
 |  |  |       bay: 0 | 
 |  |  |       lev: 1 | 
 |  |  |     # 堆垛机出库站点 | 
 |  |  |     crnOutStn[0]: | 
 |  |  |       devpPlcId: ${wcs-slave.devp[0].id} | 
 |  |  |       staNo: 210 | 
 |  |  |       row: 4 | 
 |  |  |       bay: 0 | 
 |  |  |       lev: 1 | 
 |  |  |  | 
 |  |  |   # 输送线 | 
 |  |  |   devp[0]: | 
 |  |  | 
 |  |  |     slot: 0 | 
 |  |  |     # 入库口1 | 
 |  |  |     inSta[0]: | 
 |  |  |       staNo: 201 | 
 |  |  |       staNo: 101 | 
 |  |  |       barcode: ${wcs-slave.barcode[0].id} | 
 |  |  |     # 入库口2 | 
 |  |  |     inSta[1]: | 
 |  |  |       staNo: 206 | 
 |  |  |       barcode: ${wcs-slave.barcode[1].id} | 
 |  |  |       backSta: 100 | 
 |  |  |       led: ${wcs-slave.led[0].id} | 
 |  |  |     # 空板入库口1 | 
 |  |  |     emptyInSta[0]: | 
 |  |  |       staNo: 201 | 
 |  |  | 
 |  |  |     id: 1 | 
 |  |  |     ip: 172.28.15.235 | 
 |  |  |     port: 51236 | 
 |  |  |   # 条码扫描仪2 | 
 |  |  |   barcode[1]: | 
 |  |  |     id: 2 | 
 |  |  |     ip: 172.28.15.235 | 
 |  |  |     port: 51236 | 
 |  |  | #   # LED1 | 
 |  |  | #  led[0]: | 
 |  |  | #    id: 1 | 
 |  |  | #    ip: 10.10.10.60 | 
 |  |  | #    port: 5005 | 
 |  |  | #    devpPlcId: ${wcs-slave.devp[0].id} | 
 |  |  | #    staArr: 110 | 
 |  |  | #  # 条码扫描仪2 | 
 |  |  | #  barcode[1]: | 
 |  |  | #    id: 2 | 
 |  |  | #    ip: 172.28.15.235 | 
 |  |  | #    port: 51236 | 
 |  |  |    # LED1 | 
 |  |  |   led[0]: | 
 |  |  |     id: 1 | 
 |  |  |     ip: 10.10.10.60 | 
 |  |  |     port: 5005 | 
 |  |  |     devpPlcId: ${wcs-slave.devp[0].id} | 
 |  |  |     staArr: 101 | 
 |  |  |     # LED2 | 
 |  |  |   led[1]: | 
 |  |  |     id: 1 | 
 |  |  |     ip: 10.10.10.60 | 
 |  |  |     port: 5005 | 
 |  |  |     devpPlcId: ${wcs-slave.devp[0].id} | 
 |  |  |     staArr: 110 | 
 |  |  | # | 
 |  |  | #  #socket | 
 |  |  | #  socket[0]: | 
 
 |  |  | 
 |  |  | var baseUrl = "/fnwcs"; | 
 |  |  | var baseUrl = "/tlfwcs"; | 
 |  |  |  | 
 |  |  | // 赋值 | 
 |  |  | function setVal(el, val) { | 
 
 |  |  | 
 |  |  |     "floors": 1, | 
 |  |  |     "racks": [{ | 
 |  |  |         "type": "rack", | 
 |  |  |         "id": "rack4", | 
 |  |  |         "top": 260, | 
 |  |  |         "left": 196, | 
 |  |  |         "width": 765, | 
 |  |  |         "height": 23, | 
 |  |  |         "minBayNo": 1, | 
 |  |  |         "maxBayNo": 24 | 
 |  |  |     }, { | 
 |  |  |         "type": "rack", | 
 |  |  |         "id": "rack1", | 
 |  |  |         "top": 95, | 
 |  |  |         "top": 260, | 
 |  |  |         "left": 167, | 
 |  |  |         "width": 794, | 
 |  |  |         "height": 23, | 
 |  |  |         "minBayNo": 1, | 
 |  |  |         "maxBayNo": 25 | 
 |  |  |         "maxBayNo": 14 | 
 |  |  |     }, { | 
 |  |  |         "type": "rack", | 
 |  |  |         "id": "rack2", | 
 |  |  |         "top": 152, | 
 |  |  |         "left": 167, | 
 |  |  |         "width": 794, | 
 |  |  |         "height": 23, | 
 |  |  |         "minBayNo": 1, | 
 |  |  |         "maxBayNo": 25 | 
 |  |  |     }, { | 
 |  |  |         "type": "rack", | 
 |  |  |         "id": "rack3", | 
 |  |  |         "top": 200, | 
 |  |  |         "left": 167, | 
 |  |  |         "width": 794, | 
 |  |  |         "height": 23, | 
 |  |  |         "minBayNo": 1, | 
 |  |  |         "maxBayNo": 25 | 
 |  |  |     }], | 
 |  |  |         "maxBayNo": 14 | 
 |  |  |     },{ | 
 |  |  |         "type": "rack", | 
 |  |  |         "id": "rack3", | 
 |  |  |         "top": 177, | 
 |  |  |         "left": 167, | 
 |  |  |         "width": 794, | 
 |  |  |         "height": 23, | 
 |  |  |         "minBayNo": 1, | 
 |  |  |         "maxBayNo": 14 | 
 |  |  |     },], | 
 |  |  |     "rackDescs": [{ | 
 |  |  |         "type": "rackDescs", | 
 |  |  |         "id": "lb_desc1", | 
 |  |  |         "text": "#4", | 
 |  |  |         "top": 93, | 
 |  |  |         "text": "#3", | 
 |  |  |         "top": 177, | 
 |  |  |         "left": 129, | 
 |  |  |         "width": 30, | 
 |  |  |         "height": 23 | 
 |  |  | 
 |  |  |         "top": 259, | 
 |  |  |         "left": 129, | 
 |  |  |         "width": 33, | 
 |  |  |         "height": 23 | 
 |  |  |     }, { | 
 |  |  |         "type": "rackDescs", | 
 |  |  |         "id": "lb_desc16", | 
 |  |  |         "text": "#一楼机械臂位置==》", | 
 |  |  |         "top": 40, | 
 |  |  |         "left": 750, | 
 |  |  |         "width": 270, | 
 |  |  |         "height": 23 | 
 |  |  |     }], | 
 |  |  |     "crns": [{ | 
 |  |  | 
 |  |  |         "height": 22 | 
 |  |  |     }, { | 
 |  |  |         "type": "track", | 
 |  |  |         "id": "lb_track4", | 
 |  |  |         "text": "", | 
 |  |  |         "top": 136, | 
 |  |  |         "left": 180, | 
 |  |  |         "width": 830, | 
 |  |  |         "height": 2 | 
 |  |  |     }, { | 
 |  |  |         "type": "track", | 
 |  |  |         "id": "lb_track5", | 
 |  |  |         "text": "", | 
 |  |  |         "top": 243, | 
 |  |  |         "left": 180, | 
 |  |  |         "width": 830, | 
 |  |  |         "height": 2 | 
 |  |  |     }, { | 
 |  |  |         "type": "crane", | 
 |  |  |         "id": "crn-2", | 
 |  |  |         "text": "2", | 
 |  |  |         "top": 127, | 
 |  |  |         "left": 441, | 
 |  |  |         "width": 93, | 
 |  |  |         "height": 22 | 
 |  |  |     }], | 
 |  |  |     "areas": [{ | 
 |  |  |         "type": "Control_floor", | 
 |  |  | 
 |  |  |             "width": 1412, | 
 |  |  |             "height": 505, | 
 |  |  |             "stns": [{ | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-212", | 
 |  |  |                 "text": "212", | 
 |  |  |                 "top": 119, | 
 |  |  |                 "left": 1122, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-105", | 
 |  |  |                 "text": "105", | 
 |  |  |                 "top": 47, | 
 |  |  |                 "left": 1188, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-0", | 
 |  |  |                 "text": "升降", | 
 |  |  |                 "top": 70, | 
 |  |  |                 "left": 1203, | 
 |  |  |                 "width": 35, | 
 |  |  |                 "height": 49, | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-101", | 
 |  |  |                 "text": "101", | 
 |  |  |                 "top": 119, | 
 |  |  |                 "left": 1188, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-211", | 
 |  |  |                 "text": "211", | 
 |  |  |                 "top": 95, | 
 |  |  |                 "left": 1122, | 
 |  |  |                 "width": 60, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-207", | 
 |  |  |                 "text": "207", | 
 |  |  |                 "top": 119, | 
 |  |  |                 "left": 1041, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 32 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-205", | 
 |  |  |                 "text": "205", | 
 |  |  |                 "top": 176, | 
 |  |  |                 "left": 1041, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-206", | 
 |  |  |                 "text": "206", | 
 |  |  |                 "top": 152, | 
 |  |  |                 "left": 1041, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-202", | 
 |  |  |                 "text": "202", | 
 |  |  | 
 |  |  |                 "top": 200, | 
 |  |  |                 "left": 1041, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-209", | 
 |  |  |                 "text": "209", | 
 |  |  |                 "top": 152, | 
 |  |  |                 "left": 960, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-210", | 
 |  |  |                 "text": "210", | 
 |  |  |                 "top": 95, | 
 |  |  |                 "left": 960, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-208", | 
 |  |  |                 "text": "208", | 
 |  |  |                 "top": 95, | 
 |  |  |                 "left": 1041, | 
 |  |  |                 "width": 80, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-213", | 
 |  |  |                 "text": "213", | 
 |  |  |                 "top": 119, | 
 |  |  |                 "left": 1254, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-104", | 
 |  |  |                 "text": "104", | 
 |  |  |                 "top": 23, | 
 |  |  |                 "left": 1122, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-102", | 
 |  |  |                 "text": "102", | 
 |  |  |                 "top": 47, | 
 |  |  |                 "left": 1122, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }, { | 
 |  |  |                 "type": "stn", | 
 |  |  |                 "id": "site-103", | 
 |  |  |                 "text": "103", | 
 |  |  |                 "top": 47, | 
 |  |  |                 "left": 1056, | 
 |  |  |                 "width": 65, | 
 |  |  |                 "height": 23 | 
 |  |  |             }] | 
 |  |  |         }] | 
 
 |  |  | 
 |  |  |     <!-- 货架 + 堆垛机 + 入库站点 --> | 
 |  |  |     <div class="main-part"> | 
 |  |  |     </div> | 
 |  |  |     <div class="" > | 
 |  |  |         <div id="loc-0100105" class="loc" style="top:400px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-5</div> | 
 |  |  |         <div id="loc-0100205" class="loc" style="top:400px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-5</div> | 
 |  |  |         <div id="loc-0100305" class="loc" style="top:400px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-5</div> | 
 |  |  |         <div id="loc-0100405" class="loc" style="top:400px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-5</div> | 
 |  |  |         <div id="loc-0100505" class="loc" style="top:400px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-5</div> | 
 |  |  |         <div id="loc-0100605" class="loc" style="top:400px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-5</div> | 
 |  |  |         <div id="loc-0100705" class="loc" style="top:400px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-5</div> | 
 |  |  |         <div id="loc-0100805" class="loc" style="top:400px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-5</div> | 
 |  |  |         <div id="loc-0100905" class="loc" style="top:400px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-5</div> | 
 |  |  |         <div id="loc-0101005" class="loc" style="top:400px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-5</div> | 
 |  |  |         <div id="loc-0101105" class="loc" style="top:400px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-5</div> | 
 |  |  |         <div id="loc-0101205" class="loc" style="top:400px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-5</div> | 
 |  |  |         <div id="loc-0101305" class="loc" style="top:400px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-5</div> | 
 |  |  |         <div id="loc-0101405" class="loc" style="top:400px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-5</div> | 
 |  |  |         <div id="loc-0101505" class="loc" style="top:400px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-5</div> | 
 |  |  |         <div id="loc-0101605" class="loc" style="top:400px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-5</div> | 
 |  |  |         <div id="loc-0101705" class="loc" style="top:400px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-5</div> | 
 |  |  |         <div id="loc-0101805" class="loc" style="top:400px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-5</div> | 
 |  |  |         <div id="loc-0101905" class="loc" style="top:400px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-5</div> | 
 |  |  |         <div id="loc-0102005" class="loc" style="top:400px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-5</div> | 
 |  |  |         <div id="loc-0102105" class="loc" style="top:400px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-5</div> | 
 |  |  |         <div id="loc-0102205" class="loc" style="top:400px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-5</div> | 
 |  |  |         <div id="loc-0102305" class="loc" style="top:400px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-5</div> | 
 |  |  |         <div id="loc-0102405" class="loc" style="top:400px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-5</div> | 
 |  |  |     </div> | 
 |  |  | <!--    <div class="" >--> | 
 |  |  | <!--        <div id="loc-0100105" class="loc" style="top:400px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-5</div>--> | 
 |  |  | <!--        <div id="loc-0100205" class="loc" style="top:400px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-5</div>--> | 
 |  |  | <!--        <div id="loc-0100305" class="loc" style="top:400px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-5</div>--> | 
 |  |  | <!--        <div id="loc-0100405" class="loc" style="top:400px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-5</div>--> | 
 |  |  | <!--        <div id="loc-0100505" class="loc" style="top:400px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-5</div>--> | 
 |  |  | <!--        <div id="loc-0100605" class="loc" style="top:400px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-5</div>--> | 
 |  |  | <!--        <div id="loc-0100705" class="loc" style="top:400px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-5</div>--> | 
 |  |  | <!--        <div id="loc-0100805" class="loc" style="top:400px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-5</div>--> | 
 |  |  | <!--        <div id="loc-0100905" class="loc" style="top:400px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-5</div>--> | 
 |  |  | <!--        <div id="loc-0101005" class="loc" style="top:400px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-5</div>--> | 
 |  |  | <!--        <div id="loc-0101105" class="loc" style="top:400px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-5</div>--> | 
 |  |  | <!--        <div id="loc-0101205" class="loc" style="top:400px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-5</div>--> | 
 |  |  | <!--        <div id="loc-0101305" class="loc" style="top:400px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-5</div>--> | 
 |  |  | <!--        <div id="loc-0101405" class="loc" style="top:400px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-5</div>--> | 
 |  |  | <!--        <div id="loc-0101505" class="loc" style="top:400px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-5</div>--> | 
 |  |  | <!--        <div id="loc-0101605" class="loc" style="top:400px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-5</div>--> | 
 |  |  | <!--        <div id="loc-0101705" class="loc" style="top:400px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-5</div>--> | 
 |  |  | <!--        <div id="loc-0101805" class="loc" style="top:400px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-5</div>--> | 
 |  |  | <!--        <div id="loc-0101905" class="loc" style="top:400px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-5</div>--> | 
 |  |  | <!--        <div id="loc-0102005" class="loc" style="top:400px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-5</div>--> | 
 |  |  | <!--        <div id="loc-0102105" class="loc" style="top:400px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-5</div>--> | 
 |  |  | <!--        <div id="loc-0102205" class="loc" style="top:400px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-5</div>--> | 
 |  |  | <!--        <div id="loc-0102305" class="loc" style="top:400px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-5</div>--> | 
 |  |  | <!--        <div id="loc-0102405" class="loc" style="top:400px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-5</div>--> | 
 |  |  | <!--    </div>--> | 
 |  |  |  | 
 |  |  | <!--    <div class="">--> | 
 |  |  | <!--        <div id="loc-0100104" class="loc" style="top:424px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-4</div>--> | 
 |  |  | <!--        <div id="loc-0100204" class="loc" style="top:424px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-4</div>--> | 
 |  |  | <!--        <div id="loc-0100304" class="loc" style="top:424px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-4</div>--> | 
 |  |  | <!--        <div id="loc-0100404" class="loc" style="top:424px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-4</div>--> | 
 |  |  | <!--        <div id="loc-0100504" class="loc" style="top:424px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-4</div>--> | 
 |  |  | <!--        <div id="loc-0100604" class="loc" style="top:424px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-4</div>--> | 
 |  |  | <!--        <div id="loc-0100704" class="loc" style="top:424px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-4</div>--> | 
 |  |  | <!--        <div id="loc-0100804" class="loc" style="top:424px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-4</div>--> | 
 |  |  | <!--        <div id="loc-0100904" class="loc" style="top:424px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-4</div>--> | 
 |  |  | <!--        <div id="loc-0101004" class="loc" style="top:424px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-4</div>--> | 
 |  |  | <!--        <div id="loc-0101104" class="loc" style="top:424px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-4</div>--> | 
 |  |  | <!--        <div id="loc-0101204" class="loc" style="top:424px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-4</div>--> | 
 |  |  | <!--        <div id="loc-0101304" class="loc" style="top:424px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-4</div>--> | 
 |  |  | <!--        <div id="loc-0101404" class="loc" style="top:424px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-4</div>--> | 
 |  |  | <!--        <div id="loc-0101504" class="loc" style="top:424px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-4</div>--> | 
 |  |  | <!--        <div id="loc-0101604" class="loc" style="top:424px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-4</div>--> | 
 |  |  | <!--        <div id="loc-0101704" class="loc" style="top:424px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-4</div>--> | 
 |  |  | <!--        <div id="loc-0101804" class="loc" style="top:424px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-4</div>--> | 
 |  |  | <!--        <div id="loc-0101904" class="loc" style="top:424px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-4</div>--> | 
 |  |  | <!--        <div id="loc-0102004" class="loc" style="top:424px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-4</div>--> | 
 |  |  | <!--        <div id="loc-0102104" class="loc" style="top:424px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-4</div>--> | 
 |  |  | <!--        <div id="loc-0102204" class="loc" style="top:424px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-4</div>--> | 
 |  |  | <!--        <div id="loc-0102304" class="loc" style="top:424px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-4</div>--> | 
 |  |  | <!--        <div id="loc-0102404" class="loc" style="top:424px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-4</div>--> | 
 |  |  | <!--    </div>--> | 
 |  |  | <!--    <div class="">--> | 
 |  |  | <!--        <div id="loc-0100103" class="loc" style="top:448px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-3</div>--> | 
 |  |  | <!--        <div id="loc-0100203" class="loc" style="top:448px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-3</div>--> | 
 |  |  | <!--        <div id="loc-0100303" class="loc" style="top:448px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-3</div>--> | 
 |  |  | <!--        <div id="loc-0100403" class="loc" style="top:448px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-3</div>--> | 
 |  |  | <!--        <div id="loc-0100503" class="loc" style="top:448px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-3</div>--> | 
 |  |  | <!--        <div id="loc-0100603" class="loc" style="top:448px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-3</div>--> | 
 |  |  | <!--        <div id="loc-0100703" class="loc" style="top:448px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-3</div>--> | 
 |  |  | <!--        <div id="loc-0100803" class="loc" style="top:448px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-3</div>--> | 
 |  |  | <!--        <div id="loc-0100903" class="loc" style="top:448px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-3</div>--> | 
 |  |  | <!--        <div id="loc-0101003" class="loc" style="top:448px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-3</div>--> | 
 |  |  | <!--        <div id="loc-0101103" class="loc" style="top:448px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-3</div>--> | 
 |  |  | <!--        <div id="loc-0101203" class="loc" style="top:448px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-3</div>--> | 
 |  |  | <!--        <div id="loc-0101303" class="loc" style="top:448px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-3</div>--> | 
 |  |  | <!--        <div id="loc-0101403" class="loc" style="top:448px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-3</div>--> | 
 |  |  | <!--        <div id="loc-0101503" class="loc" style="top:448px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-3</div>--> | 
 |  |  | <!--        <div id="loc-0101603" class="loc" style="top:448px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-3</div>--> | 
 |  |  | <!--        <div id="loc-0101703" class="loc" style="top:448px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-3</div>--> | 
 |  |  | <!--        <div id="loc-0101803" class="loc" style="top:448px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-3</div>--> | 
 |  |  | <!--        <div id="loc-0101903" class="loc" style="top:448px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-3</div>--> | 
 |  |  | <!--        <div id="loc-0102003" class="loc" style="top:448px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-3</div>--> | 
 |  |  | <!--        <div id="loc-0102103" class="loc" style="top:448px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-3</div>--> | 
 |  |  | <!--        <div id="loc-0102203" class="loc" style="top:448px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-3</div>--> | 
 |  |  | <!--        <div id="loc-0102303" class="loc" style="top:448px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-3</div>--> | 
 |  |  | <!--        <div id="loc-0102403" class="loc" style="top:448px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-3</div>--> | 
 |  |  | <!--    </div>--> | 
 |  |  |     <div class=""> | 
 |  |  |         <div id="loc-0100104" class="loc" style="top:424px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-4</div> | 
 |  |  |         <div id="loc-0100204" class="loc" style="top:424px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-4</div> | 
 |  |  |         <div id="loc-0100304" class="loc" style="top:424px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-4</div> | 
 |  |  |         <div id="loc-0100404" class="loc" style="top:424px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-4</div> | 
 |  |  |         <div id="loc-0100504" class="loc" style="top:424px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-4</div> | 
 |  |  |         <div id="loc-0100604" class="loc" style="top:424px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-4</div> | 
 |  |  |         <div id="loc-0100704" class="loc" style="top:424px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-4</div> | 
 |  |  |         <div id="loc-0100804" class="loc" style="top:424px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-4</div> | 
 |  |  |         <div id="loc-0100904" class="loc" style="top:424px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-4</div> | 
 |  |  |         <div id="loc-0101004" class="loc" style="top:424px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-4</div> | 
 |  |  |         <div id="loc-0101104" class="loc" style="top:424px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-4</div> | 
 |  |  |         <div id="loc-0101204" class="loc" style="top:424px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-4</div> | 
 |  |  |         <div id="loc-0101304" class="loc" style="top:424px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-4</div> | 
 |  |  |         <div id="loc-0101404" class="loc" style="top:424px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-4</div> | 
 |  |  |         <div id="loc-0101504" class="loc" style="top:424px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-4</div> | 
 |  |  |         <div id="loc-0101604" class="loc" style="top:424px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-4</div> | 
 |  |  |         <div id="loc-0101704" class="loc" style="top:424px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-4</div> | 
 |  |  |         <div id="loc-0101804" class="loc" style="top:424px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-4</div> | 
 |  |  |         <div id="loc-0101904" class="loc" style="top:424px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-4</div> | 
 |  |  |         <div id="loc-0102004" class="loc" style="top:424px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-4</div> | 
 |  |  |         <div id="loc-0102104" class="loc" style="top:424px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-4</div> | 
 |  |  |         <div id="loc-0102204" class="loc" style="top:424px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-4</div> | 
 |  |  |         <div id="loc-0102304" class="loc" style="top:424px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-4</div> | 
 |  |  |         <div id="loc-0102404" class="loc" style="top:424px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-4</div> | 
 |  |  |         <div id="loc-0100102" class="loc" style="top:372px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-2</div> | 
 |  |  |         <div id="loc-0100202" class="loc" style="top:372px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-2</div> | 
 |  |  |         <div id="loc-0100302" class="loc" style="top:372px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-2</div> | 
 |  |  |         <div id="loc-0100402" class="loc" style="top:372px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-2</div> | 
 |  |  |         <div id="loc-0100502" class="loc" style="top:372px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-2</div> | 
 |  |  |         <div id="loc-0100602" class="loc" style="top:372px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-2</div> | 
 |  |  |         <div id="loc-0100702" class="loc" style="top:372px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-2</div> | 
 |  |  |         <div id="loc-0100802" class="loc" style="top:372px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-2</div> | 
 |  |  |         <div id="loc-0100902" class="loc" style="top:372px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-2</div> | 
 |  |  |         <div id="loc-0101002" class="loc" style="top:372px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-2</div> | 
 |  |  |         <div id="loc-0101102" class="loc" style="top:372px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-2</div> | 
 |  |  |         <div id="loc-0101202" class="loc" style="top:372px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-2</div> | 
 |  |  |         <div id="loc-0101302" class="loc" style="top:372px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-2</div> | 
 |  |  |         <div id="loc-0101402" class="loc" style="top:372px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-2</div> | 
 |  |  | <!--        <div id="loc-0101502" class="loc" style="top:472px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-2</div>--> | 
 |  |  | <!--        <div id="loc-0101602" class="loc" style="top:472px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-2</div>--> | 
 |  |  | <!--        <div id="loc-0101702" class="loc" style="top:472px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-2</div>--> | 
 |  |  | <!--        <div id="loc-0101802" class="loc" style="top:472px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-2</div>--> | 
 |  |  | <!--        <div id="loc-0101902" class="loc" style="top:472px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-2</div>--> | 
 |  |  | <!--        <div id="loc-0102002" class="loc" style="top:472px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-2</div>--> | 
 |  |  | <!--        <div id="loc-0102102" class="loc" style="top:472px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-2</div>--> | 
 |  |  | <!--        <div id="loc-0102202" class="loc" style="top:472px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-2</div>--> | 
 |  |  | <!--        <div id="loc-0102302" class="loc" style="top:472px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-2</div>--> | 
 |  |  | <!--        <div id="loc-0102402" class="loc" style="top:472px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-2</div>--> | 
 |  |  |     </div> | 
 |  |  |     <div class=""> | 
 |  |  |         <div id="loc-0100103" class="loc" style="top:448px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-3</div> | 
 |  |  |         <div id="loc-0100203" class="loc" style="top:448px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-3</div> | 
 |  |  |         <div id="loc-0100303" class="loc" style="top:448px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-3</div> | 
 |  |  |         <div id="loc-0100403" class="loc" style="top:448px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-3</div> | 
 |  |  |         <div id="loc-0100503" class="loc" style="top:448px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-3</div> | 
 |  |  |         <div id="loc-0100603" class="loc" style="top:448px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-3</div> | 
 |  |  |         <div id="loc-0100703" class="loc" style="top:448px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-3</div> | 
 |  |  |         <div id="loc-0100803" class="loc" style="top:448px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-3</div> | 
 |  |  |         <div id="loc-0100903" class="loc" style="top:448px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-3</div> | 
 |  |  |         <div id="loc-0101003" class="loc" style="top:448px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-3</div> | 
 |  |  |         <div id="loc-0101103" class="loc" style="top:448px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-3</div> | 
 |  |  |         <div id="loc-0101203" class="loc" style="top:448px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-3</div> | 
 |  |  |         <div id="loc-0101303" class="loc" style="top:448px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-3</div> | 
 |  |  |         <div id="loc-0101403" class="loc" style="top:448px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-3</div> | 
 |  |  |         <div id="loc-0101503" class="loc" style="top:448px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-3</div> | 
 |  |  |         <div id="loc-0101603" class="loc" style="top:448px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-3</div> | 
 |  |  |         <div id="loc-0101703" class="loc" style="top:448px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-3</div> | 
 |  |  |         <div id="loc-0101803" class="loc" style="top:448px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-3</div> | 
 |  |  |         <div id="loc-0101903" class="loc" style="top:448px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-3</div> | 
 |  |  |         <div id="loc-0102003" class="loc" style="top:448px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-3</div> | 
 |  |  |         <div id="loc-0102103" class="loc" style="top:448px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-3</div> | 
 |  |  |         <div id="loc-0102203" class="loc" style="top:448px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-3</div> | 
 |  |  |         <div id="loc-0102303" class="loc" style="top:448px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-3</div> | 
 |  |  |         <div id="loc-0102403" class="loc" style="top:448px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-3</div> | 
 |  |  |     </div> | 
 |  |  |     <div class=""> | 
 |  |  |         <div id="loc-0100102" class="loc" style="top:472px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-2</div> | 
 |  |  |         <div id="loc-0100202" class="loc" style="top:472px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-2</div> | 
 |  |  |         <div id="loc-0100302" class="loc" style="top:472px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-2</div> | 
 |  |  |         <div id="loc-0100402" class="loc" style="top:472px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-2</div> | 
 |  |  |         <div id="loc-0100502" class="loc" style="top:472px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-2</div> | 
 |  |  |         <div id="loc-0100602" class="loc" style="top:472px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-2</div> | 
 |  |  |         <div id="loc-0100702" class="loc" style="top:472px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-2</div> | 
 |  |  |         <div id="loc-0100802" class="loc" style="top:472px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-2</div> | 
 |  |  |         <div id="loc-0100902" class="loc" style="top:472px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-2</div> | 
 |  |  |         <div id="loc-0101002" class="loc" style="top:472px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-2</div> | 
 |  |  |         <div id="loc-0101102" class="loc" style="top:472px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-2</div> | 
 |  |  |         <div id="loc-0101202" class="loc" style="top:472px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-2</div> | 
 |  |  |         <div id="loc-0101302" class="loc" style="top:472px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-2</div> | 
 |  |  |         <div id="loc-0101402" class="loc" style="top:472px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-2</div> | 
 |  |  |         <div id="loc-0101502" class="loc" style="top:472px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-2</div> | 
 |  |  |         <div id="loc-0101602" class="loc" style="top:472px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-2</div> | 
 |  |  |         <div id="loc-0101702" class="loc" style="top:472px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-2</div> | 
 |  |  |         <div id="loc-0101802" class="loc" style="top:472px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-2</div> | 
 |  |  |         <div id="loc-0101902" class="loc" style="top:472px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-2</div> | 
 |  |  |         <div id="loc-0102002" class="loc" style="top:472px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-2</div> | 
 |  |  |         <div id="loc-0102102" class="loc" style="top:472px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-2</div> | 
 |  |  |         <div id="loc-0102202" class="loc" style="top:472px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-2</div> | 
 |  |  |         <div id="loc-0102302" class="loc" style="top:472px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-2</div> | 
 |  |  |         <div id="loc-0102402" class="loc" style="top:472px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-2</div> | 
 |  |  |     </div> | 
 |  |  |     <div class=""> | 
 |  |  |         <div id="loc-0100101" class="loc" style="top:496px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-1</div> | 
 |  |  |         <div id="loc-0100201" class="loc" style="top:496px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-1</div> | 
 |  |  |         <div id="loc-0100301" class="loc" style="top:496px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-1</div> | 
 |  |  |         <div id="loc-0100401" class="loc" style="top:496px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-1</div> | 
 |  |  |         <div id="loc-0100501" class="loc" style="top:496px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-1</div> | 
 |  |  |         <div id="loc-0100601" class="loc" style="top:496px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-1</div> | 
 |  |  |         <div id="loc-0100701" class="loc" style="top:496px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-1</div> | 
 |  |  |         <div id="loc-0100801" class="loc" style="top:496px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-1</div> | 
 |  |  |         <div id="loc-0100901" class="loc" style="top:496px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-1</div> | 
 |  |  |         <div id="loc-0101001" class="loc" style="top:496px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-1</div> | 
 |  |  |         <div id="loc-0101101" class="loc" style="top:496px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-1</div> | 
 |  |  |         <div id="loc-0101201" class="loc" style="top:496px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-1</div> | 
 |  |  |         <div id="loc-0101301" class="loc" style="top:496px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-1</div> | 
 |  |  |         <div id="loc-0101401" class="loc" style="top:496px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-1</div> | 
 |  |  |         <div id="loc-0101501" class="loc" style="top:496px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-1</div> | 
 |  |  |         <div id="loc-0101601" class="loc" style="top:496px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-1</div> | 
 |  |  |         <div id="loc-0101701" class="loc" style="top:496px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-1</div> | 
 |  |  |         <div id="loc-0101801" class="loc" style="top:496px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-1</div> | 
 |  |  |         <div id="loc-0101901" class="loc" style="top:496px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-1</div> | 
 |  |  |         <div id="loc-0102001" class="loc" style="top:496px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-1</div> | 
 |  |  |         <div id="loc-0102101" class="loc" style="top:496px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-1</div> | 
 |  |  |         <div id="loc-0102201" class="loc" style="top:496px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-1</div> | 
 |  |  |         <div id="loc-0102301" class="loc" style="top:496px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-1</div> | 
 |  |  |         <div id="loc-0102401" class="loc" style="top:496px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-1</div> | 
 |  |  |         <div id="loc-0100101" class="loc" style="top:396px; left:200px; width:70px; height: 22px;line-height: 22px;">1-1-1</div> | 
 |  |  |         <div id="loc-0100201" class="loc" style="top:396px; left:272px; width:70px; height: 22px;line-height: 22px;">1-2-1</div> | 
 |  |  |         <div id="loc-0100301" class="loc" style="top:396px; left:344px; width:70px; height: 22px;line-height: 22px;">1-3-1</div> | 
 |  |  |         <div id="loc-0100401" class="loc" style="top:396px; left:416px; width:70px; height: 22px;line-height: 22px;">1-4-1</div> | 
 |  |  |         <div id="loc-0100501" class="loc" style="top:396px; left:488px; width:70px; height: 22px;line-height: 22px;">1-5-1</div> | 
 |  |  |         <div id="loc-0100601" class="loc" style="top:396px; left:560px; width:70px; height: 22px;line-height: 22px;">1-6-1</div> | 
 |  |  |         <div id="loc-0100701" class="loc" style="top:396px; left:632px; width:70px; height: 22px;line-height: 22px;">1-7-1</div> | 
 |  |  |         <div id="loc-0100801" class="loc" style="top:396px; left:704px; width:70px; height: 22px;line-height: 22px;">1-8-1</div> | 
 |  |  |         <div id="loc-0100901" class="loc" style="top:396px; left:776px; width:70px; height: 22px;line-height: 22px;">1-9-1</div> | 
 |  |  |         <div id="loc-0101001" class="loc" style="top:396px; left:848px; width:70px; height: 22px;line-height: 22px;">1-10-1</div> | 
 |  |  |         <div id="loc-0101101" class="loc" style="top:396px; left:920px; width:70px; height: 22px;line-height: 22px;">1-11-1</div> | 
 |  |  |         <div id="loc-0101201" class="loc" style="top:396px; left:992px; width:70px; height: 22px;line-height: 22px;">1-12-1</div> | 
 |  |  |         <div id="loc-0101301" class="loc" style="top:396px; left:1064px; width:70px; height: 22px;line-height: 22px;">1-13-1</div> | 
 |  |  |         <div id="loc-0101401" class="loc" style="top:396px; left:1136px; width:70px; height: 22px;line-height: 22px;">1-14-1</div> | 
 |  |  | <!--        <div id="loc-0101501" class="loc" style="top:496px; left:1208px; width:70px; height: 22px;line-height: 22px;">1-15-1</div>--> | 
 |  |  | <!--        <div id="loc-0101601" class="loc" style="top:496px; left:1280px; width:70px; height: 22px;line-height: 22px;">1-16-1</div>--> | 
 |  |  | <!--        <div id="loc-0101701" class="loc" style="top:496px; left:1352px; width:70px; height: 22px;line-height: 22px;">1-17-1</div>--> | 
 |  |  | <!--        <div id="loc-0101801" class="loc" style="top:496px; left:1424px; width:70px; height: 22px;line-height: 22px;">1-18-1</div>--> | 
 |  |  | <!--        <div id="loc-0101901" class="loc" style="top:496px; left:1496px; width:70px; height: 22px;line-height: 22px;">1-19-1</div>--> | 
 |  |  | <!--        <div id="loc-0102001" class="loc" style="top:496px; left:1568px; width:70px; height: 22px;line-height: 22px;">1-20-1</div>--> | 
 |  |  | <!--        <div id="loc-0102101" class="loc" style="top:496px; left:1640px; width:70px; height: 22px;line-height: 22px;">1-21-1</div>--> | 
 |  |  | <!--        <div id="loc-0102201" class="loc" style="top:496px; left:1712px; width:70px; height: 22px;line-height: 22px;">1-22-1</div>--> | 
 |  |  | <!--        <div id="loc-0102301" class="loc" style="top:496px; left:1784px; width:70px; height: 22px;line-height: 22px;">1-23-1</div>--> | 
 |  |  | <!--        <div id="loc-0102401" class="loc" style="top:496px; left:1856px; width:70px; height: 22px;line-height: 22px;">1-24-1</div>--> | 
 |  |  |  | 
 |  |  |         <div class="rackDescs" id="lb_desc11" style="top:530px; left:1450px; width:150px;height: 23px;line-height: 23px">1排货架侧视图</div> | 
 |  |  |         <div class="rackDescs" id="lb_desc11" style="top:430px; left:850px; width:150px;height: 23px;line-height: 23px">1排货架侧视图</div> | 
 |  |  |     </div> | 
 |  |  |  | 
 |  |  |     <div class="button item-group"> | 
 |  |  |         <span class="site machine-auto-flag" style="color:#FFFFFF; top:550px; left:300px">空库位</span> | 
 |  |  |         <span class="site machine-stock-move-flag" style="color:#FFFFFF; top:550px; left:364px">在库待测</span> | 
 |  |  |         <span class="site machine-site-move-flag" style="color:#FFFFFF; top:550px; left:442px">在库测试中</span> | 
 |  |  |         <span class="site machine-take-flag" style="color:#FFFFFF; top:550px; left:534px">测试成功OK</span> | 
 |  |  |         <span class="site machine-put-flag" style="color:#FFFFFF; top:550px; left:626px">测试失败NG</span> | 
 |  |  |         <span class="site machine-error-flag" style="color:#FFFFFF; top:550px; left:716px">异常报警</span> | 
 |  |  |         <span class="site machine-auto-flag" style="color:#FFFFFF; top:450px; left:300px">空库位</span> | 
 |  |  |         <span class="site machine-stock-move-flag" style="color:#FFFFFF; top:450px; left:364px">在库待测</span> | 
 |  |  |         <span class="site machine-site-move-flag" style="color:#FFFFFF; top:450px; left:442px">在库测试中</span> | 
 |  |  |         <span class="site machine-take-flag" style="color:#FFFFFF; top:450px; left:534px">测试成功OK</span> | 
 |  |  |         <span class="site machine-put-flag" style="color:#FFFFFF; top:450px; left:626px">测试失败NG</span> | 
 |  |  |         <span class="site machine-error-flag" style="color:#FFFFFF; top:450px; left:716px">异常报警</span> | 
 |  |  |     </div> | 
 |  |  |  | 
 |  |  |     <div id="body"> | 
 
 |  |  | 
 |  |  |                     <!--            <span> </span>--> | 
 |  |  |                     <input id="crn1" disabled="disabled"> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="crn-command-item"> | 
 |  |  |                     <label>2#</label> | 
 |  |  |                     <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)"> - </button> | 
 |  |  |                     <!--            <span> </span>--> | 
 |  |  |                     <input id="crn2" disabled="disabled"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <!-- 堆垛机状态位信息 --> | 
 |  |  |             <div class="crn-state"> | 
 |  |  | 
 |  |  |                     <span class="select-title">堆垛机号</span> | 
 |  |  |                     <div class="select-container"> | 
 |  |  |                         <label><input type="radio" name="crnSelect" value="1" checked> 1号堆垛机</label> | 
 |  |  |                         <label><input type="radio" name="crnSelect" value="2"> 2号堆垛机</label> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <!-- 源站/源库位 选择 --> |