src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -1,16 +1,20 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.annotations.ManagerAuth; import com.core.common.Arith; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.domain.enums.CrnStatusType; import com.zy.asrs.domain.enums.SiteStatusType; import com.zy.asrs.domain.param.SystemSwitchParam; import com.zy.asrs.domain.vo.*; import com.zy.asrs.entity.BasCrnError; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; @@ -54,6 +58,8 @@ private BasDevpService basDevpService; @Autowired private LocMastMapper locMastMapper; @Autowired private BasCrnErrorMapper basCrnErrorMapper; @PostMapping("/system/running/status") @ManagerAuth(memo = "系统运行状态") @@ -130,7 +136,7 @@ /** * 堆垛机状态判断 */ if (crn.getId() == 1 && crnProtocol.getAlarm() > 0) { if (crnProtocol.getAlarm() > 0) { vo.setCrnStatus(CrnStatusType.MACHINE_ERROR); } else { if (crnProtocol.getTaskNo()>0) { @@ -246,6 +252,13 @@ CrnProtocol crnProtocol = crnThread.getCrnProtocol(); vo.setCrnNo(crnNo); vo.setWorkNo(crnProtocol.getTaskNo()); vo.setCrnStatus(crnProtocol.getStatusType().desc); if (crnProtocol.getAlarm() > 0) { BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm()); vo.setError(crnError == null ? "未知异常" : crnError.getErrName()); } if (crnProtocol.getTaskNo() > 0) { WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); if (wrkMast != null) { @@ -281,15 +294,16 @@ @GetMapping("/barcode/output/site") public R crnOutput(){ // StringBuilder str = new StringBuilder(); // String s; // int i = 0; // while((s = OutputQueue.CRN.poll()) != null && i <=32) { // str.append("\n").append(s); // i++; // } // return R.ok().add(str.toString()); return R.ok().add(JSON.toJSONString(new ArrayList<>(OutputQueue.BARCODE))); ArrayList<JSONObject> jsonObjects = new ArrayList<>(OutputQueue.BARCODE); jsonObjects.sort(new Comparator<JSONObject>() { @Override public int compare(JSONObject o1, JSONObject o2) { Date o1Time = DateUtils.convert(o1.getString("time"), DateUtils.yyyyMMddHHmmss_F); Date o2Time = DateUtils.convert(o2.getString("time"), DateUtils.yyyyMMddHHmmss_F); return (int) (o2Time.getTime() - o1Time.getTime()); } }); return R.ok().add(JSON.toJSONString(jsonObjects)); } } src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -129,7 +129,7 @@ @ApiModelProperty(value= "条形码") private String barcode; @ApiModelProperty(value= "") @ApiModelProperty(value= "入库暂存数") @TableField("in_qty") private Integer inQty; src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -74,4 +74,17 @@ WrkMast selectWorkingPakout(); /** * 堆垛机是否存在出库任务 * @param crnNo * @return */ WrkMast selectCrnWorking(@Param("crnNo")Integer crnNo); /** * 输送线是否存在入库任务 * @param crnNo * @return */ WrkMast selectDevWorking(@Param("crnNo")Integer crnNo); } src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -13,4 +13,6 @@ List<WrkMast> selectToBeHistoryData(); int getOutToStn182(Integer devpNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -89,6 +89,8 @@ private BasCrnErrorMapper basCrnErrorMapper; @Value("${wms.url}") private String wmsUrl; @Value("${crnBackHp.enable}") private boolean crnBackHp; /** * 组托 @@ -105,14 +107,14 @@ continue; } String barcode = barcodeThread.getBarcode(); // if(!Cools.isEmpty(barcode)) { // log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); // if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { // continue; // } // } else { // continue; // } 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()); @@ -123,8 +125,8 @@ staProtocol = staProtocol.clone(); } // 入出库模式判断 if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // // 入出库模式判断 // if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() @@ -132,18 +134,18 @@ && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()){// && !Cools.isEmpty(barcode)) { if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); //条码为空或者不符合,退库到172站点 staProtocol.setWorkNo((short)9999); staProtocol.setStaNo((short)172); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { throw new CoolException("更新plc站点信息失败"); } continue; } // if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { // log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); // //条码为空或者不符合,退库到172站点 // staProtocol.setWorkNo((short)9999); // staProtocol.setStaNo((short)172); // devpThread.setPakMk(staProtocol.getSiteId(), false); // boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // if (!result) { // throw new CoolException("更新plc站点信息失败"); // } // continue; // } // 判断重复工作档 WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); @@ -278,8 +280,8 @@ staProtocol = staProtocol.clone(); } // 入出库模式判断 if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // // 入出库模式判断 // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() @@ -328,14 +330,14 @@ continue; } String barcode = barcodeThread.getBarcode(); // if(!Cools.isEmpty(barcode)) { // log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); // if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { // continue; // } // } else { // continue; // } if(!Cools.isEmpty(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { continue; } // 获取拣料入库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -346,23 +348,23 @@ staProtocol = staProtocol.clone(); } // 入出库模式判断 if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // // 入出库模式判断 // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); //条码为空或者不符合,退库到172站点 staProtocol.setWorkNo((short)9999); staProtocol.setStaNo((short)172); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { throw new CoolException("更新plc站点信息失败"); } continue; } // if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { // log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); // //条码为空或者不符合,退库到172站点 // staProtocol.setWorkNo((short)9999); // staProtocol.setStaNo((short)172); // devpThread.setPakMk(staProtocol.getSiteId(), false); // boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // if (!result) { // throw new CoolException("更新plc站点信息失败"); // } // continue; // } WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); if (wrkMast == null) { @@ -549,7 +551,57 @@ } // 库位移转 this.locToLoc(crn, crnProtocol); if (crnBackHp) { //堆垛机没有执行中任务,设备存在入库任务时叫回原点 this.crnRebackHp(crn, crnProtocol); } } } /** * 回原点,堆垛机没有执行中任务,设备存在入库任务时叫回原点 * @param slave * @param crnProtocol */ public void crnRebackHp(CrnSlave slave, CrnProtocol crnProtocol){ // 堆垛机控制过滤 if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0 || crnProtocol.getModeType() != CrnModeType.AUTO) { return; } // 已经存在吊车执行任务时,则过滤 if (wrkMastMapper.selectWorking(slave.getId()) != null) { return; } //堆垛机有执行中任务,过滤 if (wrkMastMapper.selectCrnWorking(slave.getId()) != null) { return; } //输送线没有入库任务,过滤 if (wrkMastMapper.selectDevWorking(slave.getId()) == null) { return; } // 命令下发区 -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 crnCommand.setTaskNo((short) 1); // 工作号 crnCommand.setAckFinish((short) 0); // 任务完成确认位 crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 回原点 crnCommand.setSourcePosX((short) 0); // 源库位排 crnCommand.setSourcePosY((short) 0); // 源库位列 crnCommand.setSourcePosZ((short) 0); // 源库位层 crnCommand.setDestinationPosX((short) 0); // 目标库位排 crnCommand.setDestinationPosY((short) 0); // 目标库位列 crnCommand.setDestinationPosZ((short) 0); // 目标库位层 if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) { log.error("堆垛机回原点命令下发失败,堆垛机号={},任务数据={}", slave.getId(), JSON.toJSON(crnCommand)); } else { } } /** @@ -711,8 +763,8 @@ staProtocol = staProtocol.clone(); } // 入出库模式判断 if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } // // 入出库模式判断 // if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } // 查询站点详细信息 @@ -835,7 +887,7 @@ } // 已经存在吊车执行任务时,则过滤 if (wrkMastMapper.selectLocMoving(slave.getId()) != null) { if (wrkMastMapper.selectWorking(slave.getId()) != null) { return; } @@ -1042,8 +1094,8 @@ staProtocol = staProtocol.clone(); } // 入出库模式判断 if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // // 入出库模式判断 // if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; } // 站点条件判断 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -27,4 +27,8 @@ return this.baseMapper.selectToBeHistoryData(); } @Override public int getOutToStn182(Integer devpNo) { return selectCount(new EntityWrapper<WrkMast>().eq("sta_no", devpNo).in("wrk_sts",11,12)); } } src/main/java/com/zy/core/MainProcess.java
@@ -42,7 +42,7 @@ // 演示 mainService.crnDemoOfLocMove1(); // 入出库模式切换函数 mainService.ioConvert(); // mainService.ioConvert(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile(); // 组托 mainService.generateStoreWrkFile0(); // WMS入库 src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -49,6 +49,8 @@ // 锁定标记 private boolean pakMk = true; // 入库暂存数 private Short inQty; public BasDevp toSqlModel(){ BasDevp basDevp = new BasDevp(); @@ -62,6 +64,7 @@ basDevp.setLocType2((short) 0); // 宽窄类型{0:未知,1:窄库位,2:宽库位} basDevp.setLocType3((short) 0); // 轻重类型{0:未知,1:轻库位,2:重库位} basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2); basDevp.setInQty(inQty !=null ?(int)inQty : 0); return basDevp; } src/main/java/com/zy/core/thread/LedThread.java
@@ -100,14 +100,21 @@ page.newLine("目标站:"+command.getStaNo()); if (!command.isEmptyMk()) { for (MatDto matDto : command.getMatDtos()) { page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】"); //去掉小数点 String strQty = matDto.getCount().toString(); int idx = strQty.lastIndexOf("."); if(idx >= 0){ strQty.substring(0,idx); } page.newLine(matDto.getMaknx() + "[数量" + strQty +"]"); // page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】"); } } page.newLine("\n"); } // 设置字体 page.setFont(new Font("宋体",Font.PLAIN,12)); page.setFont(new Font("宋体",Font.PLAIN,10)); // 设置文本颜色 page.setForeground(Color.red); // 设置显示特技为快速打出 @@ -198,6 +205,13 @@ public static void main(String[] args) throws Exception { String strQty = "1234"; int index = strQty.lastIndexOf("."); if(index>=0) { strQty=strQty.substring(0, index); } System.out.println("2==>>"+strQty); Bx5GEnv.initial(3000); Bx5GScreenClient screen = new Bx5GScreenClient("my"); DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]); src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -229,6 +229,55 @@ log.error("堆垛机写入命令为空"); return false; } // OperateResult result = null; // try{ // Integer exeCount=0; // do{ // command.setCrnNo(slave.getId()); // short[] array = new short[10]; // array[0] = command.getAckFinish(); // array[1] = command.getTaskNo(); // array[2] = command.getTaskMode(); // array[3] = command.getSourcePosX(); // array[4] = command.getSourcePosY(); // array[5] = command.getSourcePosZ(); // array[6] = command.getDestinationPosX(); // array[7] = command.getDestinationPosY(); // array[8] = command.getDestinationPosZ(); // array[9] = command.getCommand(); // result = melsecMcNet.Write("D0", array); // if(result.IsSuccess) { // if (command.getAckFinish() == 0) { // short commandFinish = 1; // result = melsecMcNet.Write("D9", commandFinish); // if(result.IsSuccess){ // //写任务确认返回成功后,查询确认一次 // Thread.sleep(200); // OperateResultExOne<byte[]> result1 = melsecMcNet.Read("D9", (short)2); // if(result1.IsSuccess){ // short commandVal = melsecMcNet.getByteTransform().TransInt16(result1.Content,2); // if(commandVal==1){ // break; // } else { // exeCount++; // } // } else{ // exeCount++; // } // }else{ // exeCount++; // } // } // }else{ // exeCount++; // } // Thread.sleep(200); // }while(exeCount>3); // }catch (Exception e){ // // } command.setCrnNo(slave.getId()); short[] array = new short[10]; array[0] = command.getAckFinish(); @@ -271,7 +320,7 @@ bean.insert(basCrnOpt); } catch (Exception ignore) {} if (result.IsSuccess) { if (result != null && result.IsSuccess) { log.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); return true; src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -9,6 +9,7 @@ import com.core.common.SpringUtils; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -48,11 +49,15 @@ add(150);add(151);add(152);add(153);add(154);add(155);add(156);add(157);add(158);add(159); add(160);add(161);add(162);add(163);add(164);add(165);add(166);add(167);add(168);add(169); add(170);add(171);add(172);add(173);add(174);add(175);add(176);add(177);add(178);add(179); add(180);add(181);add(182);add(183);add(184);add(185);add(186);add(187);add(188);add(189); add(190);add(191);add(192); add(180);add(181);add(182); add(183);add(184);add(185);add(186);add(187);add(188);add(189);add(190);add(191);add(192); }}; public IoModeType ioMode = IoModeType.NONE; /** * 182站堆垛机执行中出库数量 */ public int PRE_COUNT=0; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; @@ -114,11 +119,11 @@ * 读取状态 ====> 整块plc */ private void read() throws InterruptedException { // 更新入出库模式 updateIoMode(); // // 更新入出库模式 // updateIoMode(); OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 186); if (result.IsSuccess) { for (int i = 0; i < 83; i++) { for (int i = 0; i < 93; i++) { Integer siteId = staNos.get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { @@ -132,7 +137,7 @@ Thread.sleep(200); OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 186); if (result0.IsSuccess) { for (int i = 0; i < 83; i++) { for (int i = 0; i < 93; i++) { Integer siteId = staNos.get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { @@ -146,7 +151,7 @@ Thread.sleep(200); OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB102.0", (short) 186); if (result1.IsSuccess) { for (int i = 0; i < 83; i++) { for (int i = 0; i < 93; i++) { Integer siteId = staNos.get(i); // 站点编号 boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1); StaProtocol staProtocol = station.get(siteId); @@ -165,10 +170,44 @@ } } OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); if (result2.IsSuccess) { this.ioMode = IoModeType.get(result2.Content); Thread.sleep(200); OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB300.0", (short) 10); if (result3.IsSuccess) { // Integer siteId = staNos.get(i); // 站点编号 Integer siteId = 0; for (int i = 0; i < 5; i++) { switch (i){ case 0: siteId = 100; break; case 1: siteId = 102; break; case 2: siteId = 104; break; case 3: siteId = 106; break; case 4: siteId = 108; break; } StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } short value = siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2); staProtocol.setInQty(value); // 入库暂存数 } } // OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); // if (result2.IsSuccess) { // this.ioMode = IoModeType.get(result2.Content); // } if (result.IsSuccess && result0.IsSuccess && result1.IsSuccess) { @@ -181,15 +220,36 @@ StaProtocol staProtocol = station.get(siteId); basDevps.add(staProtocol.toSqlModel()); } BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); if (!basDevpService.updateBatchById(basDevps)) { if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { throw new Exception("更新数据库数据失败"); } } catch (Exception e) { e.printStackTrace(); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [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("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } //出库到182站堆垛机任务数据发送给PLC try{ WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class); if(null != wrkMastService){ int count = wrkMastService.getOutToStn182(182); if(count != PRE_COUNT){ OperateResult write = siemensS7Net.Write("DB300.2",(short)count); if (write.IsSuccess) { PRE_COUNT = count; } else { log.error("更新堆垛机出库到182站任务数量错误,任务数量==>>" + count); } } } }catch (Exception e) { e.printStackTrace(); log.error("更新堆垛机出库到182站任务数量失败"); } } 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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); src/main/resources/application.yml
@@ -11,8 +11,8 @@ # url: jdbc:sqlserver://47.97.1.152:51433;databasename=xgmasrs # username: sa # password: Zoneyung@zy56$ # url: jdbc:sqlserver://10.10.10.238:1433;databasename=xgmasrs url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs url: jdbc:sqlserver://10.10.10.238:1433;databasename=xgmasrs # url: jdbc:sqlserver://localhost:1433;databasename=xgmasrs username: sa password: sa@123 mvc: @@ -40,6 +40,10 @@ wms: url: 10.10.10.238:8080/xgmwms # url: localhost:8082/xgmwms #堆垛机没有执行中任务,输送有入库任务,叫回原点 crnBackHp: enable: true # 下位机配置 wcs-slave: @@ -170,6 +174,7 @@ inSta[0]: staNo: 176 barcode: ${wcs-slave.barcode[0].id} # 入库口2 inSta[1]: staNo: 180 barcode: ${wcs-slave.barcode[1].id} src/main/resources/mapper/WrkMastMapper.xml
@@ -121,7 +121,7 @@ <!-- 入库任务 --> <select id="selectWorkingPakin" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 order by io_time,wrk_no select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4) and io_type != 11 and source_sta_no = 180 order by io_time,wrk_no </select> <!-- 出库任务 --> @@ -136,8 +136,16 @@ where wrk_no > 0) )) and io_type != 11 and source_sta_no = 180 order by io_time,wrk_no </select> <select id="selectCrnWorking" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts in (3,4,11,12) and crn_no=#{crnNo} order by io_time,wrk_no </select> <select id="selectDevWorking" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts=2 and crn_no=#{crnNo} order by io_time,wrk_no </select> </mapper> src/main/webapp/static/css/car_vue.css
New file @@ -0,0 +1,14 @@ body { background-color: #6CA7A8; } .title { margin-top: 10px; font-size: 20px; text-align: center; } .bg-orgin { color: white; background-color: #FF5722; } src/main/webapp/static/css/console.css
@@ -12,17 +12,35 @@ } .head { height: 10%; width: 20%; padding-top: 1%; padding-left: 1%; width: 100%; color: #FFFFFF; } .head-left { height: 100%; width: 20%; display: inline-block; } .head-right { height: 100%; width: 30%; display: inline-block; float: right; } .head h1 { margin-top: 2%; margin-left: 2%; font-weight: 400; letter-spacing:3px; } .head h6 { margin-left: 2%; font-weight: 400; } img { float: right; margin-top: 10px; margin-right: 10px; } #body { width: 100%; @@ -293,16 +311,23 @@ width: 80px; } .site-row-5 { .site-row-4 { top: 71px; left: 448px; } .site-row-4 .site { width: 80px; } .site-row-5 { top: 71px; left: 530px; } .site-row-5 .site { width: 80px; } .site-row-6 { top: 71px; left: 530px; left: 612px; } .site-row-6 .site { width: 80px; @@ -313,7 +338,7 @@ .main-part { position: absolute; top: 20px; left: 612px; left: 694px; } .main-part .lane { margin-top: 30px; src/main/webapp/static/css/crn.css
@@ -1,12 +1,11 @@ body { background-color: #f1f1f1; background-color: #6CA7A8; } .button-window { float: left; width: 100%; height: 100%; padding: 10px; background-color: #6CA7A8; border-radius: 5px; box-shadow: 0 0 3px rgba(0 0 0 .3); } src/main/webapp/static/css/index.css
@@ -30,19 +30,53 @@ } .sidebar { width: 7%; width: 8%; height: 40%; line-height: 90px; position: fixed; top: 50%; transform: translateY(-50%); } /* Effect 1: Brackets */ .cl-effect-1 a::before, .cl-effect-1 a::after { display: inline-block; opacity: 0; -webkit-transition: -webkit-transform 0.3s, opacity 0.2s; -moz-transition: -moz-transform 0.3s, opacity 0.2s; transition: transform 0.3s, opacity 0.2s; } .cl-effect-1 a::before { margin-right: 10px; content: '['; -webkit-transform: translateX(20px); -moz-transform: translateX(20px); transform: translateX(20px); } .cl-effect-1 a::after { margin-left: 10px; content: ']'; -webkit-transform: translateX(-20px); -moz-transform: translateX(-20px); transform: translateX(-20px); } .cl-effect-1 a:hover::before, .cl-effect-1 a:hover::after, .cl-effect-1 a:focus::before, .cl-effect-1 a:focus::after { opacity: 1; -webkit-transform: translateX(0px); -moz-transform: translateX(0px); transform: translateX(0px); } /* Effect 1: Brackets 👆*/ .sidebar ul { font-size: 20px; font-weight: 5c00; padding-left: 15%; font-weight: 500; padding-left: 5%; } .sidebar a { src/main/webapp/static/css/pipeline.css
@@ -1,6 +1,6 @@ body { /*padding: 10px;*/ background-color: #f1f1f1; background-color: #6CA7A8; } main { background-color: #fff; @@ -14,7 +14,6 @@ width: 100%; height: 100%; padding: 10px; background-color: #6CA7A8; border-radius: 5px; box-shadow: 0 0 3px rgba(0 0 0 .3); } src/main/webapp/static/images/zy-logo.png
src/main/webapp/views/console.html
@@ -17,8 +17,13 @@ <body> <div id="root"> <div class="head"> <h1>自动仓库WCS监控图</h1> <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6> <div class="head-left"> <h1>自动仓库WCS监控图</h1> <h6>AUTOMATIC WAREHOUSE WCS MONITORING DIAGRAM</h6> </div> <div class="head-right"> <img src="../static/images/zy-logo.png" alt="中扬" height="44" width="80" > </div> </div> <!--第1列(宽度 70px) --> <div class="site-row site-row-1"> @@ -50,8 +55,8 @@ </div> <!-- 第4列(宽度 70px 140px) --> <!--<!– 第5列(宽度 70px) –>--> <div class="site-row site-row-5"> <!--<!– 第4列(宽度 70px) –>--> <div class="site-row site-row-4"> <div id="site-163" class="site" style="height: 28.5px;line-height: 28.5px">163</div> <div id="site-162" class="site" style="height: 28.5px;line-height: 28.5px">162</div> <div id="site-161" class="site" style="height: 71px;line-height: 71px">161</div> @@ -67,8 +72,8 @@ <div id="site-151" class="site" style="height: 28.5px;line-height: 28.5px">151</div> <div id="site-150" class="site" style="height: 28.5px;line-height: 28.5px">150</div> </div> <!--<!– 第6列(宽度 70px) –>--> <div class="site-row site-row-6"> <!--<!– 第5列(宽度 70px) –>--> <div class="site-row site-row-5"> <div id="site-120" class="site" style="height: 28.5px;line-height: 28.5px">120</div> <div id="site-121" class="site" style="height: 28.5px;line-height: 28.5px">121</div> <div id="site-122" class="site" style="height: 71px;line-height: 71px">122</div> @@ -84,6 +89,19 @@ <div id="site-132" class="site" style="height: 28.5px;line-height: 28.5px">132</div> <div id="site-133" class="site" style="height: 28.5px;line-height: 28.5px">133</div> </div> <!--<!– 第6列(宽度 70px) –>--> <div class="site-row site-row-6"> <div id="site-183" class="site">183</div> <div id="site-184" class="site" style="margin-top: 21px">184</div> <div id="site-185" class="site" style="margin-top: 73px">185</div> <div id="site-186" class="site" style="margin-top: 21px">186</div> <div id="site-187" class="site" style="margin-top: 73px">187</div> <div id="site-188" class="site" style="margin-top: 21px">188</div> <div id="site-189" class="site" style="margin-top: 73px">189</div> <div id="site-190" class="site" style="margin-top: 21px">190</div> <div id="site-191" class="site" style="margin-top: 73px">191</div> <div id="site-192" class="site" style="margin-top: 21px">192</div> </div> <!-- 货架 + 堆垛机 + 入库站点 --> <div class="main-part"> @@ -91,10 +109,10 @@ <div class="lane"> <!-- 货架 --> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -130,10 +148,10 @@ </div> <div class="stock-group"> <div id="site-100" class="site" style="">100</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -175,10 +193,10 @@ <!-- 货架 --> <div class="stock-group"> <div id="site-101" class="site" style="">101</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -213,10 +231,10 @@ <span class="row-no">3#</span> </div> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -257,10 +275,10 @@ <!-- 货架 --> <div class="stock-group"> <div class="site" style="background-color: rgb(108,167,168)"></div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -296,10 +314,10 @@ </div> <div class="stock-group"> <div id="site-102" class="site" style="">102</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -341,10 +359,10 @@ <!-- 货架 --> <div class="stock-group"> <div id="site-103" class="site" style="">103</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -380,10 +398,10 @@ </div> <div class="stock-group"> <div class="site" style="background-color: rgb(108,167,168)"></div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -423,10 +441,10 @@ <span class="row-no"></span> <!-- 货架 --> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -462,10 +480,10 @@ </div> <div class="stock-group"> <div id="site-104" class="site" style="">104</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -507,10 +525,10 @@ <!-- 货架 --> <div class="stock-group"> <div id="site-105" class="site" style="">105</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -545,10 +563,10 @@ <span class="row-no">11#</span> </div> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -588,10 +606,10 @@ <span class="row-no"></span> <!-- 货架 --> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -627,10 +645,10 @@ </div> <div class="stock-group"> <div id="site-106" class="site" style="">106</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -672,10 +690,10 @@ <!-- 货架 --> <div class="stock-group"> <div id="site-107" class="site" style="">107</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -710,10 +728,10 @@ <span class="row-no">15#</span> </div> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -753,10 +771,10 @@ <span class="row-no"></span> <!-- 货架 --> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -792,10 +810,10 @@ </div> <div class="stock-group"> <div id="site-108" class="site" style="">108</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -837,10 +855,10 @@ <!-- 货架 --> <div class="stock-group"> <div id="site-109" class="site" style="">109</div> <button class="item">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -875,10 +893,10 @@ <span class="row-no">19#</span> </div> <div class="stock-group"> <button class="item" style="margin-left: 82px">2</button> <button class="item">4</button> <button class="item">6</button> <button class="item">8</button> <button class="item" style="margin-left: 82px"> 2 </button> <button class="item"> 4 </button> <button class="item"> 6 </button> <button class="item"> 8 </button> <button class="item">10</button> <button class="item">12</button> <button class="item">14</button> @@ -955,7 +973,7 @@ <div class="body-head">输送线状态</div> <div class="state states"> <span>运输线总数</span> <span class="line-ss">48</span> <span class="line-ss">58</span> </div> <div class="button"><span>所有状态</span></div> <div class="button item-group"> @@ -1485,8 +1503,11 @@ for (var i = 0; i < crns.length; i++){ var crnEl = $("#crn-"+crns[i].crnId); crnEl.attr("class", "machine " + crns[i].crnStatus); var unit = ($('.item').eq(0).width()+4)/2; crnEl.animate({left: (crns[i].bay * unit + 25) +'px'}, 1000); var unit = ($('.item').eq(0).width()+13)/2; if (crns[i].bay < 0) { crns[i].bay = 0 } crnEl.animate({left: (crns[i].bay * unit) +'px'}, 1000); } } else if (res.code === 403){ parent.location.href = baseUrl+"/login"; @@ -1496,7 +1517,6 @@ } }); } // 扫码器实时数据获取 function getBarcodeInfo(){ $.ajax({ src/main/webapp/views/crn.html
@@ -122,10 +122,10 @@ <th>走行速度(m/min)</th> <th>升降速度(m/min)</th> <th>叉牙速度(m/min)</th> <th>走行距离(m)</th> <th>升降距离(m)</th> <th>走行时长(s)</th> <th>升降时长(s)</th> <th>走行距离(Km)</th> <th>升降距离(Km)</th> <th>走行时长(H)</th> <th>升降时长(H)</th> </tr> </thead> <tbody> src/main/webapp/views/index.html
@@ -12,12 +12,15 @@ <!-- <li class="right">注销<a id="about" class="nav-unselect" onclick="logout()" href="#"></a></li>--> <!-- </div>--> <div class="sidebar"> <ul> <ul class="cl-effect-1"> <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li> <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li> <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li> </ul> </div> <!--<div style="z-index: 999; position: absolute; top: 250px; left: 900px; width: 200px; height: 200px; opacity: 0.5;background-color: #0000FF">--> <!--</div>--> <!-- 主体内容 --> <iframe id="content" src="console.html"></iframe> <footer class="footer">