| src/main/java/com/zy/asrs/controller/RgvController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/LedThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/console.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/rgv.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -11,8 +11,10 @@ import com.zy.asrs.domain.vo.RgvStateTableVo; import com.zy.asrs.entity.BasRgv; import com.zy.asrs.entity.BasRgvErr; import com.zy.asrs.entity.BasRgvMap; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.BasRgvErrMapper; import com.zy.asrs.mapper.BasRgvMapMapper; import com.zy.asrs.service.BasRgvService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; @@ -62,7 +64,8 @@ private MainServiceImpl mainService; @Autowired private LocMastService locMastService; @Autowired private BasRgvMapMapper basRgvMapMapper; @ManagerAuth(memo = "解锁小车") @PostMapping("/lock") public R lock(CrnOperatorParam param){ @@ -88,13 +91,14 @@ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) continue; BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); vo.setStatusType(rgvProtocol.modeType.desc); // 模式状态 vo.setStatus(String.valueOf(rgvProtocol.getMode())); // 状态 vo.setWorkNo1(rgvProtocol.getTaskNo1()); // 工位1任务号 vo.setStatus1(rgvProtocol.getStatusType1().desc); // 工位1状态 vo.setLoading1(rgvProtocol.getLoaded1() ? "有物" : "无物"); // 工位1有物 vo.setRgvPos(rgvProtocol.getRgvPos()); vo.setRgvPos(basRgvMap != null?basRgvMap.getNowRoute():0); vo.setRgvPos1(rgvProtocol.getRgvPosI2()); vo.setWalkPos(Objects.equals(rgvProtocol.getWalkPos(), 1) ? "在定位" : "不在定位"); vo.setPakMk(rgvThread.isPakMk() ? "无锁" : "锁定"); src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1079,7 +1079,7 @@ //mark - 3 - .... this.locToLoc(crn, crnProtocol,mark); //预调度 this.crnRebackHp(crnProtocol, crnThread); // this.crnRebackHp(crnProtocol, crnThread); } // News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成"); @@ -1102,6 +1102,9 @@ case 5: x =18; break; } if(crnProtocol.getCrnNo() != 5){ return; } // 已经存在吊车执行任务时,则过滤3,12 if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { return; @@ -2351,6 +2354,9 @@ if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); } // if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { // News.error("{}号LED显示默认命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); // } } } } @@ -2954,52 +2960,18 @@ log.error("{}号RGV尚未在数据库进行维护!2", rgvSlave.getRgvNo()); continue; } // 只有当RGV空闲、自动,工位一无物//rgv可用 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && !rgvProtocol.isLoaded1ing() //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 && rgvProtocol.getTaskNo1()==0 && !rgvProtocol.isLoaded2ing() && rgvProtocol.getTaskNo2()==0 &&rgvThread.isPakMk() ) { BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); Integer rgvNoOther = basRgvMap.getRgvNoOther((int) rgvProtocol.getRgvNo()); RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNoOther); RgvProtocol rgvProtocolOther = rgvThreadOther.getRgvProtocol(); if (rgvProtocolOther == null) { Integer site = rgvProtocol.getRgvNo() == 1 ? rgvProtocol.getRgvPosI1() : rgvProtocol.getRgvPosI2(); if (site == 0) { continue; }else { rgvProtocolOther = rgvProtocolOther.clone(); } if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE && rgvProtocolOther.getModeType() == RgvModeType.AUTO && !rgvProtocolOther.isLoaded1ing() && rgvProtocolOther.getTaskNo1()==0 && !rgvProtocolOther.isLoaded2ing() && rgvProtocolOther.getTaskNo2()==0 &&rgvThreadOther.isPakMk() ){ //对工作档进行判断 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); if (rgvProtocol.getTaskNo1() >0 && rgvProtocol.getTaskNo1()<=9000){ WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2366"); }else if (rgvProtocol.getTaskNo1() == 0){ rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2366"); rgvSlave.setNowRoute(site); // 更新小车当前位置站点号 if (!basRgvMapService.updateById(rgvSlave)) { log.error("小车更新地图失败"); } } } } }catch (Exception e){ log.error("4109行执行小车初始化任务下发失败"); log.error("4109行"+e); log.error("小车更新地图失败"); } } @@ -3330,6 +3302,7 @@ } BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号 basRgvMapService.updateById(basRgvMap); Integer workNo = 0; if(rgvProtocol.getTaskNo2() > 9999|| rgvProtocol.getTaskNo1() > 9999){ workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1() : rgvProtocol.getTaskNo2(); @@ -3396,6 +3369,7 @@ } BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号 basRgvMapService.updateById(basRgvMap); Integer workNo = 0; if(basRgv.getPakToCrn().equals("1")){ workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1():rgvProtocol.getTaskNo2(); //正常情况出库放货优先工位1放 @@ -3491,11 +3465,11 @@ basRgvService.updateById(basRgv); rgvThread.setPakMk(true); } List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo()); if(wrkMastStaPakingNum.size() <1){ basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复 basRgvService.updateById(basRgv); } // List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo()); // if(wrkMastStaPakingNum.size() <1){ // basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复 // basRgvService.updateById(basRgv); // } } } src/main/java/com/zy/core/thread/LedThread.java
@@ -106,7 +106,6 @@ private void reset() { commandList = null; stringBuffer.delete(0, stringBuffer.length()); } src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -448,6 +448,8 @@ OperateResultExOne<byte[]> result4 = null;//1054-1079 OperateResultExOne<byte[]> result5 = null;//1080-1110 OperateResultExOne<byte[]> resultErr = null; OperateResultExOne<byte[]> resultAlarm = null; if(staNoSize == 102){ result1 = siemensS7Net.Read("DB100.0", (short) (2768));//1001-1028 result2 = siemensS7Net.Read("DB101.0", (short) (1268));//1029-1037 @@ -455,11 +457,13 @@ result4 = siemensS7Net.Read("DB103.0", (short) (2824));//1054-1079 result5 = siemensS7Net.Read("DB102.0", (short) (3428));//1080-1110 resultErr = siemensS7Net.Read("DB3.0", (short) (536)); // resultAlarm = siemensS7Net.Read("DB800.0", (short) (220)); }else{ result1 = siemensS7Net.Read("DB200.0", (short) (3000));//2001-2030 result2 = siemensS7Net.Read("DB201.0", (short) (720));//2031-2037 result3 = siemensS7Net.Read("DB400.0", (short) (600));//4001-4006 resultErr = siemensS7Net.Read("DB3.0", (short) (354)); // resultAlarm = siemensS7Net.Read("DB800.0", (short) (126)); } @@ -562,6 +566,25 @@ staProtocol.setInEnable(status1[2]); // 可入 staProtocol.setOutEnable(status1[2]);// 可出 staProtocol.setErr(status1[6]); // boolean[] statusAlarm = siemensS7Net.getByteTransform().TransBool(resultAlarm.Content, 2*i, 1); // //报警 // staProtocol.setPassTimeOut(statusAlarm[0]); // staProtocol.setObjectNoIdError(statusAlarm[1]); // staProtocol.setIdNoObjectError(statusAlarm[2]); // staProtocol.setLmfrError(statusAlarm[3]); // staProtocol.setLiftError(statusAlarm[4]); // staProtocol.setDlfrError(statusAlarm[5]); // staProtocol.setDmfrError(statusAlarm[6]); // staProtocol.setVfdError(statusAlarm[7]); // staProtocol.setSrvError(statusAlarm[8]); // staProtocol.setRes1(statusAlarm[9]); // staProtocol.setRes2(statusAlarm[10]); // staProtocol.setRes3(statusAlarm[11]); // staProtocol.setCommunicationTimeOut(statusAlarm[12]); // staProtocol.setParameterIncompleteError(statusAlarm[13]); // staProtocol.setDataNotClear(statusAlarm[14]); // staProtocol.setSetParameterError(statusAlarm[15]); //报警 staProtocol.setPassTimeOut(statusErr[0]); @@ -669,7 +692,7 @@ OperateResultExOne<byte[]> reasultBarcode3 = siemensS7Net.Read("DB102.2780", (short) 4);//1103 OperateResultExOne<byte[]> reasultBarcode4 = siemensS7Net.Read("DB201.344", (short) 4);//2037 OperateResultExOne<byte[]> reasultBarcode5 = siemensS7Net.Read("DB400.112", (short) 4);//4001 OperateResultExOne<byte[]> reasultBarcode6 = siemensS7Net.Read("DB201.716", (short) 4);//4001 OperateResultExOne<byte[]> reasultBarcode6 = siemensS7Net.Read("DB201.716", (short) 4);//2033 if(barcodeList.get(0) == 0){ if(reasultBarcode1.IsSuccess){ src/main/webapp/views/console.html
@@ -56,8 +56,8 @@ <span class="machine-put-flag">入库</span> <span class="machine-take-flag">出库</span> <span class="machine-stock-move-flag">库到库</span> <span class="machine-site-move-flag">站到站</span> <span class="machine-p-move-flag">PToP</span> <!-- <span class="machine-site-move-flag">站到站</span>--> <!-- <span class="machine-p-move-flag">PToP</span>--> <span class="machine-error-flag">异常</span> <span class="machine-auto-flag">自动</span> <span class="machine-unauto-flag">非自动/手动</span> @@ -689,11 +689,16 @@ } } // 小车偏移动画 function carAnimate(id, target) { // debugger var targetTop = 0; if (id === 1 || id === '1' || id === '2' || id === 2 || id === '3' || id === 3 ||id === '4' || id === 4) { // 确保 target 是有效的站点 if (target === -1) { console.log("站点无效,跳过动画"); return; // 跳过无效站点 } // 计算目标站点的 top 值 switch (target) { case 1004: targetTop += 84; @@ -732,7 +737,7 @@ targetTop += 128; break; case 2009: targetTop += 19.; targetTop += 190; break; case 2012: targetTop += 240; @@ -756,15 +761,23 @@ targetTop += 580; break; default: return; } } else { return; return; // 无效的站点,跳过 } $("#site-" + id).animate({top: targetTop + 'px'}, 0); // 获取当前站点位置 var currentTop = $("#site-" + id).position().top; // 计算两个站点之间的距离 var distance = Math.abs(targetTop - currentTop); // 计算动画时间,距离越远时间越长,最小时间为500ms,最大为2000ms var duration = Math.max(500, Math.min(distance / 2, 2000)); // 执行动画,平滑地移动到目标位置 $("#site-" + id).animate({ top: targetTop + 'px' }, duration); } // 检查 URL 中是否包含 fullscreen=true 参数 function checkFullscreen() { const urlParams = new URLSearchParams(window.location.search); src/main/webapp/views/rgv.html
@@ -120,7 +120,7 @@ <th>工位1工作号</th> <th>工位2工作号</th> <th>状态</th> <th>走行目标站</th> <th>走行目标点位</th> <th>工位1目标站</th> <th>工位2目标站</th> <!-- <th>源库位</th>--> @@ -341,7 +341,7 @@ setVal(tr.children("td").eq(2), table[i-1].workNo1); setVal(tr.children("td").eq(3), table[i-1].status1); setVal(tr.children("td").eq(4), table[i-1].loading1); setVal(tr.children("td").eq(5), table[i-1].rgvPos1); setVal(tr.children("td").eq(5), table[i-1].rgvPos); // setVal(tr.children("td").eq(6), table[i-1].walkPos); // setVal(tr.children("td").eq(8), table[i-1].workNo2); // setVal(tr.children("td").eq(9), table[i-1].status2);