| | |
| | | import com.zy.core.enums.SlaveType; |
| | | import com.zy.core.model.DevpSlave; |
| | | import com.zy.core.model.Task; |
| | | import com.zy.core.model.command.LiftCommand; |
| | | import com.zy.core.model.protocol.StaProtocol; |
| | | import com.zy.core.properties.SlaveProperties; |
| | | import com.zy.core.DevpThread; |
| | |
| | | Map<Integer, StaProtocol> station = devpThread.getStation(); |
| | | for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) { |
| | | if (siteId.equals(entry.getKey())) { |
| | | StaProtocol staProtocol = entry.getValue(); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (workNo != null) { |
| | | staProtocol.setWorkNo(workNo); |
| | | } |
| | | if (staNo != null) { |
| | | staProtocol.setStaNo(staNo); |
| | | } |
| | | if (pakMk != null) { |
| | | staProtocol.setPakMk(pakMk.equals("Y")); |
| | | } |
| | | // StaProtocol staProtocol = entry.getValue(); |
| | | // if (staProtocol == null) { |
| | | // continue; |
| | | // } else { |
| | | // staProtocol = staProtocol.clone(); |
| | | // } |
| | | // if (workNo != null) { |
| | | // staProtocol.setWorkNo(workNo); |
| | | // } |
| | | // if (staNo != null) { |
| | | // staProtocol.setStaNo(staNo); |
| | | // } |
| | | // if (pakMk != null) { |
| | | // staProtocol.setPakMk(pakMk.equals("Y")); |
| | | // } |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setWorkNo(Integer.valueOf(workNo)); |
| | | command.setSourceStaNo(siteId); |
| | | command.setTargetStaNo(Integer.valueOf(staNo)); |
| | | |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, command)); |
| | | if (result) { |
| | | return R.ok(); |
| | | } else { |
| | |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); |
| | | } |
| | | |
| | | public String getCstateid$() { |
| | | KcztMapService service = SpringUtils.getBean(KcztMapService.class); |
| | | KcztMap kcztMap = service.selectOne(new EntityWrapper<KcztMap>().eq("cstateid", this.cstateid)); |
| | | if (!Cools.isEmpty(kcztMap)){ |
| | | return String.valueOf(kcztMap.getVname()); |
| | | } |
| | | return String.valueOf(this.cstateid); |
| | | } |
| | | // public String getCstateid$() { |
| | | // KcztMapService service = SpringUtils.getBean(KcztMapService.class); |
| | | // KcztMap kcztMap = service.selectOne(new EntityWrapper<KcztMap>().eq("cstateid", this.cstateid)); |
| | | // if (!Cools.isEmpty(kcztMap)){ |
| | | // return String.valueOf(kcztMap.getVname()); |
| | | // } |
| | | // return String.valueOf(this.cstateid); |
| | | // } |
| | | |
| | | public void sync(Object source) { |
| | | Synchro.Copy(source, this); |
| | |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.system.service.ConfigService; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 立体仓库WCS系统主流程业务 |
| | |
| | | continue; |
| | | } |
| | | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | if (Cools.isEmpty(barcode)){ |
| | | continue; |
| | | } |
| | | |
| | | if (staProtocol.isAutoing() |
| | | && staProtocol.isInEnable() |
| | | && !staProtocol.isEmptyMk() |
| | |
| | | && staProtocol.isPakMk()) { |
| | | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); |
| | | |
| | | String barcode = barcodeThread.getBarcode(); |
| | | |
| | | if (!Cools.isEmpty(barcode)) { |
| | | News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { |
| | | if ("NG".endsWith(barcode) || "No Read".equals(barcode) || "empty".equals(barcode)) { |
| | | News.info("" + mark + " - 2" + " - 扫码失败1 ===>> {}号条码扫描器检测条码信息:{},站点:{}", inSta.getBarcode(), barcode, inSta.getStaNo()); |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | |
| | | //过滤判断,防止拣料再入库货物,经过入库站再入库时,被退回到退库站 |
| | | WrkMast wrkMast1 = wrkMastMapper.selectPakInStepBarcode(barcode); |
| | | if (wrkMast1 != null) { |
| | | if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104) { |
| | | if (wrkMast1.getIoType() == 103 || wrkMast1.getIoType() == 107 || wrkMast1.getIoType() == 104|| wrkMast1.getIoType() == 53 || wrkMast1.getIoType() == 57 || wrkMast1.getIoType() == 54) { |
| | | continue; |
| | | } |
| | | } |
| | | if (wrkMast != null) { |
| | | News.error("" + mark + " - 4" + " - 工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | News.error("" + mark + " - 4" + " - 工作档中已存在该站状态为( 3.开始执行入库任务 )的数据,工作号={}", wrkMast.getWrkNo()); |
| | | |
| | | // led 异常显示 |
| | | if (ledThread != null) { |
| | |
| | | |
| | | barcodeThread.setBarcode(""); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, command)); |
| | | if (result) { |
| | | News.info("WCS--->PLC下发任务成功:{}",command.toString()); |
| | | } |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | |
| | | currentWrkMast.setWrkSts(3L);// 3.设备执行中 |
| | | currentWrkMast.setCrnStrTime(new Date()); |
| | | wrkMastService.updateById(currentWrkMast); |
| | | Thread.sleep(3000); // 延时3S |
| | | } else { |
| | | News.error("" + mark + " - 5" + " - 请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | |
| | |
| | | if (ledThread != null) { |
| | | String errorMsg = jsonObject.getString("msg"); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); |
| | | } |
| | | |
| | | //托盘退回 |
| | | // LiftCommand command = new LiftCommand(); |
| | | // command.setWorkNo(9998); |
| | | // command.setSourceStaNo(inSta.getStaNo()); |
| | | // command.setTargetStaNo(inSta.getBackSta()); |
| | | Integer back = 999; |
| | | |
| | | barcodeThread.setBarcode(""); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, back)); |
| | | if (!result) { |
| | | throw new CoolException("更新plc站点信息失败"); |
| | | } |
| | | } |
| | | |
| | |
| | | continue; |
| | | } |
| | | |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); |
| | | // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); |
| | | // if (wrkMast == null) { |
| | | // // 无拣料数据 |
| | | // continue; |
| | | // } |
| | | if (wrkMast == null) { |
| | | // 无拣料数据 |
| | | continue; |
| | | } |
| | | |
| | | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) |
| | | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | |
| | | param.setLocType1(locTypeDto.getLocType1()); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/pick/loc/v1") |
| | | .setPath("/rpc/pakin/loc/returnWarehouse") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | |
| | | continue; |
| | | } |
| | | |
| | | if(newWrkMast.getWrkSts() != 53 && newWrkMast.getWrkSts() != 57) { |
| | | if(newWrkMast.getIoType() != 53 && newWrkMast.getIoType() != 57) { |
| | | News.error("" + mark + " - 3" + " - 拣选盘点回库工作档类型异常!!! [plc编号:{}]", devp.getId()); |
| | | continue; |
| | | } |
| | | |
| | | if (wrkMast.getWrkSts() != 2) { |
| | | if (newWrkMast.getWrkSts() != 2) { |
| | | News.error("" + mark + " - 3" + " - 拣选盘点回库工作档状态异常!!! [plc编号:{}]", devp.getId()); |
| | | continue; |
| | | } |
| | |
| | | return; |
| | | } |
| | | |
| | | if (!staProtocol.isOutEnable()) { |
| | | return; |
| | | } |
| | | // if (!staProtocol.isOutEnable()) { |
| | | // return; |
| | | // } |
| | | |
| | | //检查是否有正在执行的任务 |
| | | List<WrkMast> workingWrkMast = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 3, 12)); |
| | |
| | | continue; |
| | | } |
| | | |
| | | if (liftProtocol.getWorkNo() <= 0) { |
| | | continue; |
| | | } |
| | | // if (liftProtocol.getWorkNo() <= 0) { |
| | | // continue; |
| | | // } |
| | | |
| | | if (liftProtocol.getMode() != 1) { |
| | | continue; |
| | |
| | | continue; |
| | | } |
| | | |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", liftProtocol.getWorkNo())); |
| | | if (wrkMast == null) { |
| | | continue; |
| | | } |
| | | // WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", liftProtocol.getWorkNo())); |
| | | // if (wrkMast == null) { |
| | | // continue; |
| | | // } |
| | | |
| | | if (wrkMast.getWrkSts() == 3) { |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | }else if (wrkMast.getWrkSts() == 12) { |
| | | wrkMast.setWrkSts(14L); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | }else { |
| | | News.error("未知的工作状态"); |
| | | List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", 3,12)); |
| | | for (WrkMast wrkMast : wrkMastList) { |
| | | if (wrkMast.getWrkSts() == 3) { |
| | | String locNo = wrkMast.getLocNo(); |
| | | Integer staNo = Utils.getStaNoByLocNo(locNo); |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | if (staProtocol.getWorkNo() <= 0 || !staProtocol.isLoading() || !staProtocol.isAutoing() || !Integer.valueOf(staProtocol.getWorkNo()).equals(wrkMast.getWrkNo())){ |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(4L); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | //wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | }else if (wrkMast.getWrkSts() == 12) { |
| | | Integer targetStaNo = wrkMast.getStaNo(); |
| | | StaProtocol staProtocol = devpThread.getStation().get(targetStaNo); |
| | | if (staProtocol.getWorkNo() <= 0 || !staProtocol.isLoading() || !staProtocol.isAutoing() || !Integer.valueOf(staProtocol.getWorkNo()).equals(wrkMast.getWrkNo())){ |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(14L); |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | //wrkMast.setIoTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | }else { |
| | | News.error("未知的工作状态"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); |
| | | // 命令集合 |
| | | List<LedCommand> commands = new ArrayList<>(); |
| | | // // 工作档集合 |
| | | // List<WrkMast> wrkMasts = new ArrayList<>(); |
| | | List<Integer> workNoList = new ArrayList<>(); |
| | | for (Integer staNo : led.getStaArr()) { |
| | | // 获取叉车站点 |
| | |
| | | String barcode = null; |
| | | |
| | | // 获取工作档数据 |
| | | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); |
| | | // if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",staProtocol.getWorkNo()).in("io_type",101,103,104,107)); |
| | | if (null == wrkMast) { |
| | | List<WrkMastLog> wrkMastLogs = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>() |
| | | .eq("wrk_no", staProtocol.getWorkNo()) |
| | |
| | | ledCommand.setLocNo(locNo); |
| | | ledCommand.setStaNo(targetStaNo); |
| | | ledCommand.setBarcode(barcode); |
| | | // ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); |
| | | |
| | | // 修改开始:处理多个wrkDetl,不合并 |
| | | if (ioType != 110 && ioType != 10) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo); |
| | | |
| | | if (!wrkDetls.isEmpty()) { |
| | | WrkDetl wrkDetl = wrkDetls.get(0); |
| | | double anfme = 0D; |
| | | double weight = 0D; |
| | | for (WrkDetl detl : wrkDetls) { |
| | | anfme += detl.getAnfme(); |
| | | weight += detl.getWeight(); |
| | | wrkDetl.setAnfme(anfme); |
| | | wrkDetl.setWeight(weight); |
| | | } |
| | | |
| | | // 获取库存信息 |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | .eq("loc_no", wrkMast.getSourceLocNo())); |
| | | double totalAnfme = 0D; |
| | | double totalWeight = 0D; |
| | | for (LocDetl locDetl : locDetls) { |
| | | totalAnfme += locDetl.getAnfme(); |
| | | totalWeight += locDetl.getWeight(); |
| | | // totalWeight += locDetl.getWeight(); |
| | | } |
| | | wrkDetl.setStockNum(totalAnfme); |
| | | wrkDetl.setStockNum2(totalWeight); |
| | | |
| | | ledCommand.getMatDtos().add(new MatDto( |
| | | wrkDetl.getMatnr() |
| | | , wrkDetl.getMaktx() |
| | | , wrkDetl.getAnfme() |
| | | , wrkDetl.getWeight() |
| | | , wrkDetl.getStockNum() |
| | | , wrkDetl.getStockNum2() |
| | | , wrkDetl.getSpecs() |
| | | , wrkDetl.getSku() |
| | | , wrkDetl.getZpallet() |
| | | , wrkDetl.getModel() |
| | | , wrkDetl.getSupp() |
| | | , wrkDetl.getKpCstmrName() |
| | | , wrkDetl.getOrderNo() |
| | | , wrkDetl.getCstateid$() |
| | | )); |
| | | |
| | | }else { |
| | | // 为每个WrkDetl创建独立的MatDto |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | // 注意:这里使用每个wrkDetl的原始数据,不合并 |
| | | ledCommand.getMatDtos().add(new MatDto( |
| | | wrkDetl.getMatnr() |
| | | , wrkDetl.getMaktx() |
| | | , wrkDetl.getAnfme() // 使用单个物料的数量,不累加 |
| | | , wrkDetl.getWeight() // 使用单个物料的重量,不累加 |
| | | , totalAnfme // 库存总数(这个是正常的) |
| | | , totalWeight // 库存总重量(这个是正常的) |
| | | , wrkDetl.getSpecs() |
| | | , wrkDetl.getSku() |
| | | , wrkDetl.getZpallet() |
| | | , wrkDetl.getModel() |
| | | , wrkDetl.getSupp() |
| | | , wrkDetl.getKpCstmrName() |
| | | , wrkDetl.getOrderNo() |
| | | , wrkDetl.getBatch() |
| | | // , wrkDetl.getCstateid$() |
| | | )); |
| | | } |
| | | } else { |
| | | List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo); |
| | | if(!wrkDetlLogs.isEmpty()) { |
| | | WrkDetlLog wrkDetlLog = wrkDetlLogs.get(0); |
| | | |
| | | double anfme = 0D; |
| | | double weight = 0D; |
| | | for (WrkDetlLog detl : wrkDetlLogs) { |
| | | anfme += detl.getAnfme(); |
| | | weight += detl.getWeight(); |
| | | wrkDetlLog.setAnfme(anfme); |
| | | wrkDetlLog.setWeight(weight); |
| | | } |
| | | |
| | | if (!wrkDetlLogs.isEmpty()) { |
| | | // 获取库存信息 |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | .eq("loc_no", sourceLocNo)); |
| | | double totalAnfme = 0D; |
| | |
| | | totalAnfme += locDetl.getAnfme(); |
| | | totalWeight += locDetl.getWeight(); |
| | | } |
| | | wrkDetlLog.setStockNum(totalAnfme); |
| | | wrkDetlLog.setStockNum2(totalWeight); |
| | | |
| | | ledCommand.getMatDtos().add(new MatDto( |
| | | wrkDetlLog.getMatnr() |
| | | , wrkDetlLog.getMaktx() |
| | | , wrkDetlLog.getAnfme() |
| | | , wrkDetlLog.getWeight() |
| | | , wrkDetlLog.getStockNum() |
| | | , wrkDetlLog.getStockNum2() |
| | | , wrkDetlLog.getSpecs() |
| | | , wrkDetlLog.getSku() |
| | | , wrkDetlLog.getZpallet() |
| | | , wrkDetlLog.getModel() |
| | | , wrkDetlLog.getSupp() |
| | | , wrkDetlLog.getKpCstmrName() |
| | | , wrkDetlLog.getOrderNo() |
| | | , wrkDetlLog.getCstateid$() |
| | | )); |
| | | // 为每个WrkDetlLog创建独立的MatDto |
| | | for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { |
| | | // 注意:这里使用每个wrkDetlLog的原始数据,不合并 |
| | | ledCommand.getMatDtos().add(new MatDto( |
| | | wrkDetlLog.getMatnr() |
| | | , wrkDetlLog.getMaktx() |
| | | , wrkDetlLog.getAnfme() // 使用单个物料的数量,不累加 |
| | | , wrkDetlLog.getWeight() // 使用单个物料的重量,不累加 |
| | | , totalAnfme // 库存总数 |
| | | , totalWeight // 库存总重量 |
| | | , wrkDetlLog.getSpecs() |
| | | , wrkDetlLog.getSku() |
| | | , wrkDetlLog.getZpallet() |
| | | , wrkDetlLog.getModel() |
| | | , wrkDetlLog.getSupp() |
| | | , wrkDetlLog.getKpCstmrName() |
| | | , wrkDetlLog.getOrderNo() |
| | | , wrkDetlLog.getBatch() |
| | | // , wrkDetlLog.getCstateid$() |
| | | )); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | // 修改结束 |
| | | |
| | | commands.add(ledCommand); |
| | | } |
| | | Set<Integer> workNos = new HashSet<>(workNoList); |
| | |
| | | if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { |
| | | continue; |
| | | } |
| | | // 命令下发 ------------------------------------------------------------------------------- |
| | | // if (!commands.isEmpty()) { |
| | | // if (led.getId() < 7) { |
| | | // if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { |
| | | // News.error(""+mark+" - 2"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | // continue; |
| | | // } else { |
| | | // ledThread.setLedMk(false); |
| | | // } |
| | | // } else { |
| | | // if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { |
| | | // News.error(""+mark+" - 3"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | // continue; |
| | | // } else { |
| | | // ledThread.setLedMk(false); |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | |
| | | // 命令下发 ------------------------------------------------------------------------------- |
| | | if (!commands.isEmpty()) { |
| | | if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { |
| | | News.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); |
| | |
| | | for (Integer staNo : led.getStaArr()) { |
| | | // 获取叉车站点 |
| | | StaProtocol staProtocol = devpThread.getStation().get(staNo); |
| | | StaProtocol staProtocol1 = devpThread.getStation().get(122); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } |
| | | if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) { |
| | | if (staProtocol1 == null) { |
| | | continue; |
| | | } |
| | | if ((staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) || (staProtocol1.getWorkNo() != 0 || staProtocol1.isLoading())) { |
| | | reset = false; |
| | | break; |
| | | } |
| | |
| | | if (reset && !ledThread.isLedMk()) { |
| | | ledThread.setLedMk(true); |
| | | if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { |
| | | News.error("" + mark + " - 1" + " - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | News.error("" + mark + " - 1" + " - {}号LED命令下发失败--->复位!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | } else { |
| | | |
| | | } |
| | |
| | | } |
| | | News.infoNoLog("" + mark + " - 0" + " - 执行完成:其他 ===>> LED显示器复位,显示默认信息"); |
| | | } |
| | | } |
| | | |
| | | public void ledExecuteIn(Integer mark) { |
| | | for (LedSlave led : slaveProperties.getLed()) { |
| | | // 命令集合 |
| | | List<LedCommand> commands = new ArrayList<>(); |
| | | List<Integer> workNoList = new ArrayList<>(); |
| | | |
| | | // 入库工作档 - 这里可能需要添加更多查询条件,确保只获取该LED对应的工作档 |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("wrk_sts", 3) |
| | | .in("io_type", 1, 53, 54, 57) |
| | | // 可能需要添加LED关联条件,例如站点编号等 |
| | | ); |
| | | |
| | | if (wrkMast == null) { |
| | | continue; // 没有工作档,继续处理下一个LED |
| | | } |
| | | |
| | | Integer wrkNo = wrkMast.getWrkNo(); |
| | | Integer ioType = wrkMast.getIoType(); |
| | | String sourceLocNo = wrkMast.getSourceLocNo(); |
| | | String locNo = wrkMast.getLocNo(); |
| | | Integer targetStaNo = wrkMast.getStaNo(); |
| | | String barcode = wrkMast.getBarcode(); |
| | | |
| | | workNoList.add(wrkNo); |
| | | |
| | | // 组装命令 |
| | | LedCommand ledCommand = new LedCommand(); |
| | | ledCommand.setWorkNo(wrkNo); |
| | | ledCommand.setIoType(ioType); |
| | | |
| | | // 入库模式 - 修复了case 54和57的描述 |
| | | switch (ioType) { |
| | | case 1: |
| | | ledCommand.setTitle("全板入库"); |
| | | break; |
| | | case 53: |
| | | ledCommand.setTitle("拣料入库"); |
| | | break; |
| | | case 54: |
| | | ledCommand.setTitle("并板入库"); // 修正:应该是并板入库,不是盘点入库 |
| | | break; |
| | | case 57: |
| | | ledCommand.setTitle("盘点入库"); // 修正:应该是盘点入库,不是并板入库 |
| | | break; |
| | | default: |
| | | // 可选的错误处理 |
| | | continue; // 跳过不支持的ioType |
| | | } |
| | | |
| | | ledCommand.setSourceLocNo(sourceLocNo); |
| | | ledCommand.setLocNo(locNo); |
| | | ledCommand.setStaNo(targetStaNo); |
| | | ledCommand.setBarcode(barcode); |
| | | |
| | | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo); |
| | | |
| | | // 即使wrkDetls为空,也应该处理LED命令(可能某些入库类型不需要物料明细) |
| | | if (!wrkDetls.isEmpty()) { |
| | | // 获取库存信息 |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | .eq("loc_no", sourceLocNo)); // 使用sourceLocNo而不是wrkMast.getSourceLocNo() |
| | | double totalAnfme = 0D; |
| | | double totalWeight = 0D; |
| | | for (LocDetl locDetl : locDetls) { |
| | | totalAnfme += locDetl.getAnfme(); |
| | | totalWeight += locDetl.getWeight(); // 如果数据库有weight字段,应该加上 |
| | | } |
| | | |
| | | // 为每个WrkDetl创建独立的MatDto |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | ledCommand.getMatDtos().add(new MatDto( |
| | | wrkDetl.getMatnr(), |
| | | wrkDetl.getMaktx(), |
| | | wrkDetl.getAnfme(), // 使用单个物料的数量 |
| | | wrkDetl.getWeight(), // 使用单个物料的重量 |
| | | totalAnfme, // 库存总数 |
| | | totalWeight, // 库存总重量 |
| | | wrkDetl.getSpecs(), |
| | | wrkDetl.getSku(), |
| | | wrkDetl.getZpallet(), |
| | | wrkDetl.getModel(), |
| | | wrkDetl.getSupp(), |
| | | wrkDetl.getKpCstmrName(), |
| | | wrkDetl.getOrderNo(), |
| | | wrkDetl.getBatch() |
| | | )); |
| | | } |
| | | } |
| | | |
| | | // 即使没有物料明细,也应该添加LED命令(某些入库类型可能不需要显示物料) |
| | | commands.add(ledCommand); |
| | | |
| | | Set<Integer> workNos = new HashSet<>(workNoList); |
| | | // 获取LED线程 |
| | | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); |
| | | |
| | | if (ledThread == null) { |
| | | News.error("未找到LED线程:[id:{}]", led.getId()); |
| | | continue; |
| | | } |
| | | |
| | | // 相同工作号集合则过滤 |
| | | if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { |
| | | continue; |
| | | } |
| | | |
| | | // 命令下发 ------------------------------------------------------------------------------- |
| | | if (!commands.isEmpty()) { |
| | | if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { |
| | | News.error("{}号LED命令下发失败--->入库!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); |
| | | continue; |
| | | } else { |
| | | ledThread.setLedMk(false); |
| | | } |
| | | } |
| | | |
| | | try { |
| | | // 修改主档led标记 |
| | | // 注意:这里只需要更新当前工作档,不需要循环 |
| | | WrkMast wrkMastToUpdate = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); |
| | | if (wrkMastToUpdate != null) { |
| | | wrkMastToUpdate.setOveMk("Y"); |
| | | wrkMastToUpdate.setModiTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMastToUpdate) == 0) { |
| | | News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败"); |
| | | throw new CoolException("更新工作档失败"); |
| | | } |
| | | } |
| | | |
| | | // 更新线程当前工作号集合 |
| | | ledThread.setWorkNos(workNos); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | private String specs; |
| | | |
| | | // 物料数量 |
| | | private Double count; |
| | | private Double anfme; |
| | | |
| | | // 库位数量 |
| | | private Double total; |
| | |
| | | //单号 |
| | | private String orderNo; |
| | | |
| | | private String cstateid; |
| | | //批号 |
| | | private String batch; |
| | | |
| | | // private String cstateid; |
| | | |
| | | public MatDto() { |
| | | } |
| | | |
| | | public MatDto(String matNo, String maktx, Double count, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String cstateid) { |
| | | public MatDto(String matNo, String maktx, Double anfme, Double weight, Double total, Double totalWeight, String specs, String sku, String barcode, String model, String supp, String kpCstmrName, String orderNo, String batch) { |
| | | this.matnr = matNo; |
| | | this.maktx = maktx; |
| | | this.maknx = maktx; |
| | | this.specs = specs; |
| | | this.count = count; |
| | | this.anfme = anfme; |
| | | this.weight = weight; |
| | | this.total = total; |
| | | this.totalWeight = totalWeight; |
| | |
| | | this.supp = supp; |
| | | this.kpCstmrName = kpCstmrName; |
| | | this.orderNo = orderNo; |
| | | this.cstateid = cstateid; |
| | | this.batch = batch; |
| | | // this.cstateid = cstateid; |
| | | } |
| | | } |
| | |
| | | // mainService.recCrnErr(3); |
| | | // 出库 ===>> 工作档信息写入led显示器 |
| | | mainService.ledExecute(4); |
| | | // 入库 ===>> 工作档信息写入led显示器 |
| | | mainService.ledExecuteIn(6); |
| | | // 其他 ===>> LED显示器复位,显示默认信息 |
| | | mainService.ledReset(5); |
| | | |
| | |
| | | if (!command.isEmptyMk()) { |
| | | for (MatDto matDto : command.getMatDtos()) { |
| | | //去掉小数点 |
| | | String strQty = matDto.getCount().toString(); |
| | | String strQty = matDto.getAnfme().toString(); |
| | | int idx = strQty.lastIndexOf("."); |
| | | if(idx >= 0){ |
| | | strQty.substring(0,idx); |
| | |
| | | if (!command.isEmptyMk()) { |
| | | for (MatDto matDto : command.getMatDtos()) { |
| | | sb.append("物料编码:").append(matDto.getMatnr()).append("\n"); |
| | | sb.append("数量:").append(matDto.getCount()).append("\n"); |
| | | sb.append("数量:").append(matDto.getAnfme()).append("\n"); |
| | | sb.append("规格:").append(matDto.getSpecs()).append("\n"); |
| | | } |
| | | } |
| | |
| | | add(100);add(101);add(102);add(103);add(104); |
| | | add(105);add(106);add(107);add(108);add(109); |
| | | add(110);add(111);add(112);add(113);add(114); |
| | | add(115);add(116);add(117);add(118);add(119);add(120); |
| | | add(115);add(116);add(117);add(118);add(119);add(120);add(122); |
| | | }}; |
| | | |
| | | public static final ArrayList<Integer> barcode1 = new ArrayList<Integer>() {{ |
| | |
| | | break; |
| | | case 3: |
| | | writeIoMode((Integer) task.getData()); |
| | | case 4: |
| | | writeBack((Integer) task.getData()); |
| | | default: |
| | | break; |
| | | } |
| | |
| | | private void read() throws InterruptedException { |
| | | ArrayList<Integer> staNos = getStaNo(); |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 13)); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB301.0", (short) (staNoSize * 14)); |
| | | if (result.IsSuccess) { |
| | | for (int i = 0; i < staNoSize; i++) { |
| | | Integer siteId = staNos.get(i); // 站点编号 |
| | |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setSiteId(siteId); |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13))); // 工作号 |
| | | staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13) + 4)); // 目标站 |
| | | staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 8));//库位高度 |
| | | staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 10)); // 报警 |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14))); // 工作号 |
| | | staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 14) + 4)); // 目标站 |
| | | staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 8));//库位高度 |
| | | staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 14) + 10)); // 报警 |
| | | |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 13) + 12, 1); |
| | | boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 14) + 12, 1); |
| | | staProtocol.setAutoing(status[0]); // 自动 |
| | | staProtocol.setLoading(status[1]); // 有物 |
| | | staProtocol.setInEnable(status[2]); // 可入 |
| | | staProtocol.setOutEnable(status[3]);// 可出 |
| | | staProtocol.setEmptyMk(status[4]); // 空板信号 |
| | | staProtocol.setFullPlt(status[5]); // 满托盘 |
| | | |
| | | |
| | | |
| | | //122 提升机单独读取 |
| | | if (siteId == 122){ |
| | | staProtocol.setSiteId(siteId); |
| | | OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10); |
| | | OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.306", (short) 1); |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6)); //工作号 |
| | | staProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0) == 1); //自动 |
| | | boolean[] booleans = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1); |
| | | staProtocol.setLoading(booleans[1]); //1 有物 0 无物 |
| | | } |
| | | |
| | | if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { |
| | | staProtocol.setPakMk(true); |
| | |
| | | |
| | | //任务信息反馈 |
| | | Thread.sleep(200); |
| | | OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.400", (short) 10); |
| | | OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB301.308", (short) 10); |
| | | if (result3.IsSuccess) { |
| | | liftProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0)); // 模式 |
| | | liftProtocol.setDeviceStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 2)); // 设备状态 |
| | | liftProtocol.setTaskStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4)); // 完成信号 |
| | | liftProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6)); // 工作号 |
| | | liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 10)); // 出入库模式 |
| | | liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8)); // 出入库模式 |
| | | } |
| | | |
| | | //温湿度信息反馈 |
| | | Thread.sleep(200); |
| | | ArrayList<Integer> temperatureList = getTemperature(); |
| | | OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.300", (short) (temperatureList.size() * 4)); |
| | | OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB301.300", (short) (temperatureList.size() * 4)); |
| | | if (result4.IsSuccess) { |
| | | for (int i = 0; i < temperatureList.size(); i++) { |
| | | Integer deviceId = temperatureList.get(i); // 编号 |
| | |
| | | Thread.sleep(200); |
| | | ArrayList<Integer> barcodeList = getBarcode(); |
| | | int barcodeSize = barcodeList.size(); |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB103.0", (short) (barcodeSize * 8)); |
| | | OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB4.0", (short) (barcodeSize * 8)); |
| | | if (result2.IsSuccess) { |
| | | for (int i = 0; i < barcodeSize; i++) { |
| | | String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); |
| | |
| | | deviceDataLogTime = System.currentTimeMillis(); |
| | | } |
| | | |
| | | if (result.IsSuccess && result2.IsSuccess) { |
| | | if (result.IsSuccess && result2.IsSuccess && result3.IsSuccess && result4.IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); |
| | | } 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())); |
| | |
| | | array[1] = liftCommand.getSourceStaNo(); |
| | | array[2] = liftCommand.getTargetStaNo(); |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB100.0", array); |
| | | OperateResult write = siemensS7Net.Write("DB300.0", array); |
| | | |
| | | if (!write.IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(liftCommand))); |
| | |
| | | short[] array = new short[1]; |
| | | array[0] = ioMode.shortValue(); |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB100.12", array); |
| | | OperateResult write = siemensS7Net.Write("DB300.12", array); |
| | | |
| | | if (!write.IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入出入库模式数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), ioMode)); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 写入命令 |
| | | */ |
| | | private void writeBack(Integer back) { |
| | | if (null == back) { |
| | | return; |
| | | } |
| | | short[] array = new short[1]; |
| | | array[0] = back.shortValue(); |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB300.14", array); |
| | | |
| | | if (!write.IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入托盘退回数据失败。输送线plc编号={1},站点数据={2}", DateUtils.convert(new Date()), slave.getId(), back)); |
| | | News.error("SiemensDevp"+" - 4"+" - 写入托盘退回数据失败。输送线plc编号={},站点数据={}", slave.getId(), back); |
| | | } else { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 托盘退回命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), back)); |
| | | News.info("SiemensDevp"+" - 5"+" - 托盘退回命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), back); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置入库标记 |
| | | */ |
| | | @Override |
| | |
| | | name: @pom.build.finalName@ |
| | | datasource: |
| | | driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver |
| | | url: jdbc:sqlserver://127.0.0.1:1433;databasename=shhtgcasrs |
| | | url: jdbc:sqlserver://127.0.0.1:52840;databasename=shhtgcasrs |
| | | username: sa |
| | | password: sa@123 |
| | | mvc: |
| | |
| | | # 输送线1 |
| | | devp[0]: |
| | | id: 1 |
| | | ip: 172.17.60.100 |
| | | ip: 172.168.61.123 |
| | | port: 102 |
| | | rack: 0 |
| | | slot: 0 |
| | | # 入库口1 |
| | | inSta[0]: |
| | | staNo: 1009 |
| | | staNo: 101 |
| | | barcode: ${wcs-slave.barcode[0].id} |
| | | backSta: 1008 |
| | | backSta: 100 |
| | | led: ${wcs-slave.led[0].id} |
| | | # 空板入库口1 |
| | | emptyInSta[0]: |
| | | staNo: 1076 |
| | | staNo: 101 |
| | | barcode: ${wcs-slave.barcode[0].id} |
| | | backSta: 1075 |
| | | backSta: 100 |
| | | led: ${wcs-slave.led[0].id} |
| | | # 拣料入库口1 |
| | | pickSta[0]: |
| | | staNo: 1059 |
| | | staNo: 101 |
| | | barcode: ${wcs-slave.barcode[0].id} |
| | | backSta: 1059 |
| | | backSta: 100 |
| | | led: ${wcs-slave.led[0].id} |
| | | # 出库口1 |
| | | outSta[0]: |
| | | staNo: 102 |
| | | staNo: 101 |
| | | led: ${wcs-slave.led[0].id} |
| | | # 条码扫描仪1 |
| | | barcode[0]: |
| | | id: 1 |
| | | ip: 10.10.10.121 |
| | | ip: 172.168.61.127 |
| | | port: 51236 |
| | | # LED1 |
| | | led[0]: |
| | | id: 1 |
| | | ip: 127.0.0.1 |
| | | ip: 172.168.61.201 |
| | | port: 5005 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | staArr: 1009 |
| | | staArr: 101 |
| | | crnId: 1 |
| | |
| | | select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC |
| | | </select> |
| | | <select id="selectPakInStepBarcode" resultMap="BaseResultMap"> |
| | | select top 1 * from dbo.asr_wrk_mast where barcode = #{barcode} |
| | | select top 1 * from dbo.asr_wrk_mast where barcode = #{barcode} |
| | | </select> |
| | | |
| | | <select id="selectPakInStep11" resultMap="BaseResultMap"> |
| | |
| | | mapInfo = {"mapName":"YTFLWCS","rackCount":16,"crnCount":4,"stbCount":16,"hpPosition":0,"minBayNo":2,"floors":1,"racks":[{"type":"rack","id":"rack23","top":558,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack26","top":631,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack25","top":612,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack24","top":577,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack19","top":469,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack22","top":539,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack21","top":519,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack20","top":488,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack4","top":122,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack5","top":141,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack111","top":49,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack15","top":376,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack18","top":449,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack17","top":430,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack16","top":396,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack11","top":287,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack14","top":357,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack13","top":337,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack12","top":307,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack7","top":193,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack10","top":268,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack9","top":249,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack8","top":212,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31},{"type":"rack","id":"rack2","top":83,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack3","top":103,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61},{"type":"rack","id":"rack6","top":174,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}],"crns":[{"type":"track","id":"lb_track8","text":"","top":76,"left":1327,"width":1,"height":93},{"type":"track","id":"lb_track7","text":"","top":75,"left":596,"width":733,"height":1},{"type":"track","id":"lb_track1","text":"","top":604,"left":593,"width":733,"height":1},{"type":"track","id":"lb_track2","text":"","top":513,"left":595,"width":733,"height":1},{"type":"crane","id":"crn-5","text":"5","top":507,"left":731,"width":67,"height":13},{"type":"crane","id":"crn-6","text":"6","top":597,"left":731,"width":67,"height":13},{"type":"crane","id":"crn-1","text":"1","top":162,"left":730,"width":67,"height":13},{"type":"track","id":"lb_track3","text":"","top":424,"left":593,"width":733,"height":1},{"type":"crane","id":"crn-2","text":"2","top":234,"left":741,"width":67,"height":13},{"type":"track","id":"lb_track4","text":"","top":333,"left":593,"width":733,"height":1},{"type":"crane","id":"crn-3","text":"3","top":325,"left":730,"width":67,"height":13},{"type":"track","id":"lb_track5","text":"","top":241,"left":595,"width":733,"height":1},{"type":"track","id":"lb_track6","text":"","top":168,"left":596,"width":733,"height":1},{"type":"crane","id":"crn-4","text":"4","top":417,"left":730,"width":67,"height":13}],"areas":[{"type":"Control_floor","id":"tabControl_floor1","text":"楼层","top":41,"left":80,"width":1269,"height":781,"floors":[{"type":"floor","id":"page_floor1","text":"1F","top":4,"left":22,"width":1243,"height":773,"stns":[{"type":"stn","id":"site-1064","text":"1064","top":720,"left":769,"width":59,"height":20},{"type":"stn","id":"site-2003","text":"2003","top":456,"left":309,"width":37,"height":20},{"type":"stn","id":"site-2002","text":"2002","top":455,"left":221,"width":37,"height":20},{"type":"stn","id":"site-1004","text":"1004","top":334,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1002","text":"1002","top":291,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1006","text":"1006","top":312,"left":296,"width":37,"height":20},{"type":"stn","id":"site-1007","text":"1007","top":312,"left":258,"width":37,"height":20},{"type":"stn","id":"site-1003","text":"1003","top":312,"left":220,"width":37,"height":20},{"type":"stn","id":"site-1075","text":"1075","top":723,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1076","text":"1076","top":701,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1077","text":"1077","top":679,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1078","text":"1078","top":657,"left":406,"width":71,"height":20},{"type":"stn","id":"site-1079","text":"1079","top":598,"left":406,"width":71,"height":57},{"type":"stn","id":"site-1047","text":"1047","top":578,"left":405,"width":93,"height":17},{"type":"stn","id":"site-1081","text":"1081","top":417,"left":405,"width":71,"height":158},{"type":"stn","id":"site-1034","text":"1034","top":398,"left":405,"width":95,"height":17},{"type":"stn","id":"site-1083","text":"1083","top":320,"left":405,"width":71,"height":75},{"type":"stn","id":"site-1084","text":"1084","top":198,"left":405,"width":71,"height":121},{"type":"stn","id":"site-1059","text":"1059","top":700,"left":480,"width":161,"height":20},{"type":"stn","id":"site-1018","text":"1018","top":178,"left":405,"width":95,"height":17},{"type":"stn","id":"site-1086","text":"1086","top":146,"left":406,"width":71,"height":30},{"type":"stn","id":"site-1087","text":"1087","top":125,"left":406,"width":71,"height":19},{"type":"stn","id":"site-1088","text":"1088","top":105,"left":406,"width":71,"height":19},{"type":"stn","id":"site-1074","text":"1074","top":678,"left":1141,"width":59,"height":20},{"type":"stn","id":"site-1073","text":"1073","top":657,"left":1141,"width":59,"height":20},{"type":"stn","id":"site-1071","text":"1071","top":678,"left":1017,"width":59,"height":20},{"type":"stn","id":"site-1072","text":"1072","top":657,"left":1079,"width":59,"height":20},{"type":"stn","id":"site-1070","text":"1070","top":657,"left":1017,"width":59,"height":20},{"type":"stn","id":"site-1069","text":"1069","top":657,"left":955,"width":59,"height":20},{"type":"stn","id":"site-1068","text":"1068","top":678,"left":893,"width":59,"height":20},{"type":"stn","id":"site-1067","text":"1067","top":657,"left":893,"width":59,"height":20},{"type":"stn","id":"site-1066","text":"1066","top":657,"left":831,"width":59,"height":20},{"type":"stn","id":"site-1065","text":"1065","top":700,"left":707,"width":59,"height":20},{"type":"stn","id":"site-1063","text":"1063","top":700,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1062","text":"1062","top":678,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1061","text":"1061","top":657,"left":769,"width":59,"height":20},{"type":"stn","id":"site-1058","text":"1058","top":721,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1057","text":"1057","top":700,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1056","text":"1056","top":678,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1060","text":"1060","top":657,"left":707,"width":59,"height":20},{"type":"stn","id":"site-1055","text":"1055","top":657,"left":645,"width":59,"height":20},{"type":"stn","id":"site-1054","text":"1054","top":657,"left":574,"width":67,"height":20},{"type":"stn","id":"site-1053","text":"1053","top":657,"left":479,"width":91,"height":20},{"type":"stn","id":"site-1052","text":"1052","top":614,"left":573,"width":67,"height":17},{"type":"stn","id":"site-1051","text":"1051","top":597,"left":502,"width":67,"height":58},{"type":"stn","id":"site-1049","text":"1049","top":577,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1048","text":"1048","top":578,"left":501,"width":67,"height":17},{"type":"stn","id":"site-1045","text":"1045","top":523,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1044","text":"1044","top":506,"left":501,"width":67,"height":69},{"type":"stn","id":"site-1042","text":"1042","top":488,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1041","text":"1041","top":466,"left":501,"width":67,"height":39},{"type":"stn","id":"site-1039","text":"1039","top":433,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1038","text":"1038","top":418,"left":501,"width":67,"height":45},{"type":"stn","id":"site-1036","text":"1036","top":397,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1035","text":"1035","top":398,"left":501,"width":67,"height":17},{"type":"stn","id":"site-1032","text":"1032","top":342,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1031","text":"1031","top":322,"left":501,"width":67,"height":73},{"type":"stn","id":"site-1029","text":"1029","top":308,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1028","text":"1028","top":280,"left":501,"width":67,"height":40},{"type":"stn","id":"site-1026","text":"1026","top":250,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1025","text":"1025","top":248,"left":501,"width":67,"height":29},{"type":"stn","id":"site-1023","text":"1023","top":212,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1022","text":"1022","top":198,"left":501,"width":67,"height":48},{"type":"stn","id":"site-1020","text":"1020","top":177,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1019","text":"1019","top":178,"left":502,"width":67,"height":17},{"type":"stn","id":"site-1016","text":"1016","top":142,"left":571,"width":67,"height":17},{"type":"stn","id":"site-1015","text":"1015","top":129,"left":502,"width":67,"height":46},{"type":"stn","id":"site-1012","text":"1012","top":105,"left":502,"width":67,"height":23},{"type":"stn","id":"site-1008","text":"1008","top":82,"left":337,"width":67,"height":21},{"type":"stn","id":"site-1009","text":"1009","top":82,"left":406,"width":95,"height":21},{"type":"stn","id":"site-1010","text":"1010","top":82,"left":502,"width":67,"height":21},{"type":"stn","id":"site-1013","text":"1013","top":105,"left":571,"width":67,"height":17}]}]}]} |
| | | mapInfo = |
| | | {"mapName":"YTFLWCS","rackCount":16,"crnCount":4,"stbCount":16,"hpPosition":0,"minBayNo":2,"floors":1, |
| | | "racks":[ |
| | | // {"type":"rack","id":"rack23","top":558,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack26","top":631,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack25","top":612,"left":642,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack24","top":577,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack19","top":469,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack22","top":539,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack21","top":519,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack20","top":488,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack4","top":122,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61}, |
| | | // {"type":"rack","id":"rack5","top":141,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61}, |
| | | // {"type":"rack","id":"rack111","top":49,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61}, |
| | | // {"type":"rack","id":"rack15","top":376,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack18","top":449,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack17","top":430,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack16","top":396,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack11","top":287,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack14","top":357,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack13","top":337,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack12","top":307,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack7","top":193,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack10","top":268,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack9","top":249,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack8","top":212,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31}, |
| | | // {"type":"rack","id":"rack2","top":83,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61}, |
| | | // {"type":"rack","id":"rack3","top":103,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":61}, |
| | | // {"type":"rack","id":"rack6","top":174,"left":641,"width":667,"height":18,"minBayNo":2,"maxBayNo":31} |
| | | ], |
| | | "crns":[ |
| | | // {"type":"track","id":"lb_track8","text":"","top":76,"left":1327,"width":1,"height":93}, |
| | | // {"type":"track","id":"lb_track7","text":"","top":75,"left":596,"width":733,"height":1}, |
| | | // {"type":"track","id":"lb_track1","text":"","top":604,"left":593,"width":733,"height":1}, |
| | | // {"type":"track","id":"lb_track2","text":"","top":513,"left":595,"width":733,"height":1}, |
| | | // {"type":"crane","id":"crn-5","text":"5","top":507,"left":731,"width":67,"height":13}, |
| | | // {"type":"crane","id":"crn-6","text":"6","top":597,"left":731,"width":67,"height":13}, |
| | | // {"type":"crane","id":"crn-1","text":"1","top":162,"left":730,"width":67,"height":13}, |
| | | // {"type":"track","id":"lb_track3","text":"","top":424,"left":593,"width":733,"height":1}, |
| | | // {"type":"crane","id":"crn-2","text":"2","top":234,"left":741,"width":67,"height":13}, |
| | | // {"type":"track","id":"lb_track4","text":"","top":333,"left":593,"width":733,"height":1}, |
| | | // {"type":"crane","id":"crn-3","text":"3","top":325,"left":730,"width":67,"height":13}, |
| | | // {"type":"track","id":"lb_track5","text":"","top":241,"left":595,"width":733,"height":1}, |
| | | // {"type":"track","id":"lb_track6","text":"","top":168,"left":596,"width":733,"height":1}, |
| | | // {"type":"crane","id":"crn-4","text":"4","top":417,"left":730,"width":67,"height":13} |
| | | ], |
| | | "areas":[{"type":"Control_floor","id":"tabControl_floor1","text":"楼层","top":41,"left":80,"width":1269,"height":781, |
| | | "floors":[{"type":"floor","id":"page_floor1","text":"1F","top":4,"left":22,"width":1243,"height":773, |
| | | "stns":[ |
| | | // {"type":"stn","id":"site-1064","text":"1064","top":720,"left":769,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-2003","text":"2003","top":456,"left":309,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-2002","text":"2002","top":455,"left":221,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1004","text":"1004","top":334,"left":296,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1002","text":"1002","top":291,"left":296,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1006","text":"1006","top":312,"left":296,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1007","text":"1007","top":312,"left":258,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1003","text":"1003","top":312,"left":220,"width":37,"height":20}, |
| | | // {"type":"stn","id":"site-1075","text":"1075","top":723,"left":406,"width":71,"height":20}, |
| | | // {"type":"stn","id":"site-1076","text":"1076","top":701,"left":406,"width":71,"height":20}, |
| | | // {"type":"stn","id":"site-1077","text":"1077","top":679,"left":406,"width":71,"height":20}, |
| | | // {"type":"stn","id":"site-1078","text":"1078","top":657,"left":406,"width":71,"height":20}, |
| | | // {"type":"stn","id":"site-1079","text":"1079","top":598,"left":406,"width":71,"height":57}, |
| | | // {"type":"stn","id":"site-1047","text":"1047","top":578,"left":405,"width":93,"height":17}, |
| | | // {"type":"stn","id":"site-1081","text":"1081","top":417,"left":405,"width":71,"height":158}, |
| | | // {"type":"stn","id":"site-1034","text":"1034","top":398,"left":405,"width":95,"height":17}, |
| | | // {"type":"stn","id":"site-1083","text":"1083","top":320,"left":405,"width":71,"height":75}, |
| | | // {"type":"stn","id":"site-1084","text":"1084","top":198,"left":405,"width":71,"height":121}, |
| | | // {"type":"stn","id":"site-1059","text":"1059","top":700,"left":480,"width":161,"height":20}, |
| | | // {"type":"stn","id":"site-1018","text":"1018","top":178,"left":405,"width":95,"height":17}, |
| | | // {"type":"stn","id":"site-1086","text":"1086","top":146,"left":406,"width":71,"height":30}, |
| | | // {"type":"stn","id":"site-1087","text":"1087","top":125,"left":406,"width":71,"height":19}, |
| | | // {"type":"stn","id":"site-1088","text":"1088","top":105,"left":406,"width":71,"height":19}, |
| | | // {"type":"stn","id":"site-1074","text":"1074","top":678,"left":1141,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1073","text":"1073","top":657,"left":1141,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1071","text":"1071","top":678,"left":1017,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1072","text":"1072","top":657,"left":1079,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1070","text":"1070","top":657,"left":1017,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-100","text":"100","top":657,"left":1017,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-101","text":"101","top":657,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-103","text":"103","top":630,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-105","text":"105","top":603,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-107","text":"107","top":576,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-109","text":"109","top":549,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-111","text":"111","top":522,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-113","text":"113","top":495,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-115","text":"115","top":468,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-117","text":"117","top":441,"left":955,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-119","text":"119","top":414,"left":955,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1068","text":"1068","top":678,"left":893,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-122","text":"122","top":657,"left":893,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-102","text":"102","top":657,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-104","text":"104","top":630,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-106","text":"106","top":603,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-108","text":"108","top":576,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-110","text":"110","top":549,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-112","text":"112","top":522,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-114","text":"114","top":495,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-116","text":"116","top":468,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-118","text":"118","top":441,"left":831,"width":59,"height":20}, |
| | | {"type":"stn","id":"site-120","text":"120","top":414,"left":831,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1065","text":"1065","top":700,"left":707,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1063","text":"1063","top":700,"left":769,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1062","text":"1062","top":678,"left":769,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1061","text":"1061","top":657,"left":769,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1058","text":"1058","top":721,"left":645,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1057","text":"1057","top":700,"left":645,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1056","text":"1056","top":678,"left":645,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1060","text":"1060","top":657,"left":707,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1055","text":"1055","top":657,"left":645,"width":59,"height":20}, |
| | | // {"type":"stn","id":"site-1054","text":"1054","top":657,"left":574,"width":67,"height":20}, |
| | | // {"type":"stn","id":"site-1053","text":"1053","top":657,"left":479,"width":91,"height":20}, |
| | | // {"type":"stn","id":"site-1052","text":"1052","top":614,"left":573,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1051","text":"1051","top":597,"left":502,"width":67,"height":58}, |
| | | // {"type":"stn","id":"site-1049","text":"1049","top":577,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1048","text":"1048","top":578,"left":501,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1045","text":"1045","top":523,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1044","text":"1044","top":506,"left":501,"width":67,"height":69}, |
| | | // {"type":"stn","id":"site-1042","text":"1042","top":488,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1041","text":"1041","top":466,"left":501,"width":67,"height":39}, |
| | | // {"type":"stn","id":"site-1039","text":"1039","top":433,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1038","text":"1038","top":418,"left":501,"width":67,"height":45}, |
| | | // {"type":"stn","id":"site-1036","text":"1036","top":397,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1035","text":"1035","top":398,"left":501,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1032","text":"1032","top":342,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1031","text":"1031","top":322,"left":501,"width":67,"height":73}, |
| | | // {"type":"stn","id":"site-1029","text":"1029","top":308,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1028","text":"1028","top":280,"left":501,"width":67,"height":40}, |
| | | // {"type":"stn","id":"site-1026","text":"1026","top":250,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1025","text":"1025","top":248,"left":501,"width":67,"height":29}, |
| | | // {"type":"stn","id":"site-1023","text":"1023","top":212,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1022","text":"1022","top":198,"left":501,"width":67,"height":48}, |
| | | // {"type":"stn","id":"site-1020","text":"1020","top":177,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1019","text":"1019","top":178,"left":502,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1016","text":"1016","top":142,"left":571,"width":67,"height":17}, |
| | | // {"type":"stn","id":"site-1015","text":"1015","top":129,"left":502,"width":67,"height":46}, |
| | | // {"type":"stn","id":"site-1012","text":"1012","top":105,"left":502,"width":67,"height":23}, |
| | | // {"type":"stn","id":"site-1008","text":"1008","top":82,"left":337,"width":67,"height":21}, |
| | | // {"type":"stn","id":"site-1009","text":"1009","top":82,"left":406,"width":95,"height":21}, |
| | | // {"type":"stn","id":"site-1010","text":"1010","top":82,"left":502,"width":67,"height":21}, |
| | | // {"type":"stn","id":"site-1013","text":"1013","top":105,"left":571,"width":67,"height":17} |
| | | ]}]}]} |