From 7f1d6410a61bc5a221619f4a7a8f5dcc86eb27b0 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期四, 19 六月 2025 08:28:31 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/enums/CrnTaskModeType.java | 2 src/main/java/com/zy/core/thread/SiemensCrnThread.java | 114 +++++++++++++++++++ src/main/webapp/views/crn.html | 4 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 85 ++++++------- src/main/java/com/zy/core/MainProcess.java | 3 src/main/java/com/zy/asrs/controller/CrnController.java | 92 +++++++------- src/main/java/com/zy/core/model/command/CrnCommand.java | 2 7 files changed, 207 insertions(+), 95 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java index 4d02d12..5425e8f 100644 --- a/src/main/java/com/zy/asrs/controller/CrnController.java +++ b/src/main/java/com/zy/asrs/controller/CrnController.java @@ -307,58 +307,60 @@ return crnControl(command)?R.ok():R.error(); } - @ManagerAuth(memo = "鍥炲師鐐�") - @PostMapping("/operator/bacOrigin") - public R crnBacOrigin(CrnOperatorParam param){ - CrnCommand command = new CrnCommand(); - command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� - command.setTaskNo((short) 0); // 宸ヤ綔鍙� - command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� - command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡 - command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 - command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 - command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 - command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� - command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� - command.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞� - return crnControl(command)?R.ok():R.error(); - } - - @ManagerAuth(memo = "鍙嶅師鐐�") - @PostMapping("/operator/reverseOrigin") - public R reverseOrigin(CrnOperatorParam param){ - CrnCommand command = new CrnCommand(); - command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� - command.setTaskNo((short) 0); // 宸ヤ綔鍙� - command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� - command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡 - command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 - command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 - command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 - command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� - command.setDestinationPosY((short) 34); // 鐩爣搴撲綅鍒� - command.setDestinationPosZ((short) 5); // 鐩爣搴撲綅灞� - return crnControl(command)?R.ok():R.error(); - } - -// @ManagerAuth(memo = "鍧愭爣绉诲姩") -// @PostMapping("/operator/coorMove") -// public R crnCoorMove(CrnOperatorParam param){ +// @ManagerAuth(memo = "鍥炲師鐐�") +// @PostMapping("/operator/bacOrigin") +// public R crnBacOrigin(CrnOperatorParam param){ // CrnCommand command = new CrnCommand(); // command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� // command.setTaskNo((short) 0); // 宸ヤ綔鍙� // command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� -// command.setTaskMode(CrnTaskModeType.OFFSET_MOVE); // 浠诲姟妯″紡 -// command.setSourcePosX(param.getSourceRow()); // 婧愬簱浣嶆帓 -// command.setSourcePosY(param.getSourceBay()); // 婧愬簱浣嶅垪 -// command.setSourcePosZ(param.getSourceLev()); // 婧愬簱浣嶅眰 -// command.setDestinationPosX(param.getRow()); // 鐩爣搴撲綅鎺� -// command.setDestinationPosY(param.getBay()); // 鐩爣搴撲綅鍒� -// command.setDestinationPosZ(param.getLev()); // 鐩爣搴撲綅灞� -// staNoProcess(param, command); +// command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡 +// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 +// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 +// command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� +// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� +// command.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞� // return crnControl(command)?R.ok():R.error(); // } +// @ManagerAuth(memo = "鍙嶅師鐐�") +// @PostMapping("/operator/reverseOrigin") +// public R reverseOrigin(CrnOperatorParam param){ +// CrnCommand command = new CrnCommand(); +// command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� +// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +// command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡 +// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 +// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 +// command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� +// command.setDestinationPosY((short) 34); // 鐩爣搴撲綅鍒� +// command.setDestinationPosZ((short) 5); // 鐩爣搴撲綅灞� +// return crnControl(command)?R.ok():R.error(); +// } + + @ManagerAuth(memo = "鍧愭爣绉诲姩") + @PostMapping("/operator/crnMove") + public R crnCoorMove(CrnOperatorParam param){ + CrnCommand command = new CrnCommand(); + command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� + command.setTaskNo((short) 9999); // 宸ヤ綔鍙� + command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + command.setTaskMode(CrnTaskModeType.CRN_MOVE); // 浠诲姟妯″紡 + command.setSourcePosX(param.getSourceRow()); // 婧愬簱浣嶆帓 + command.setSourcePosY(param.getSourceBay()); // 婧愬簱浣嶅垪 + command.setSourcePosZ(param.getSourceLev()); // 婧愬簱浣嶅眰 + command.setDestinationPosX(param.getRow()); // 鐩爣搴撲綅鎺� + command.setDestinationPosY(param.getBay()); // 鐩爣搴撲綅鍒� + command.setDestinationPosZ(param.getLev()); // 鐩爣搴撲綅灞� + staNoProcess(param, command); + + boolean offer = MessageQueue.offer(SlaveType.Crn, param.getCrnNo(), new Task(4, command)); + return offer?R.ok():R.error(); + } + @ManagerAuth(memo = "浠诲姟瀹屾垚") @PostMapping("/operator/taskComplete") public R crnTaskComplete(CrnOperatorParam param){ diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index da110a0..1b5cb24 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -631,59 +631,52 @@ } /** - * 鍥炲師鐐癸紝鍫嗗灈鏈烘病鏈夋墽琛屼腑浠诲姟锛岃澶囧瓨鍦ㄥ叆搴撲换鍔℃椂鍙洖鍘熺偣 + * 鍫嗗灈鏈烘棤浠诲姟涓ゅ垎閽燂紝鍥炲叆搴撳彛寰呮満 */ - public synchronized void crnRebackHp(CrnProtocol crnProtocol, CrnThread crnThread) { -// for (CrnSlave crn : slaveProperties.getCrn()) { -// // 鑾峰彇鍫嗗灈鏈轰俊鎭� -// CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); -// CrnProtocol crnProtocol = crnThread.getCrnProtocol(); -// if (crnProtocol == null) { -// continue; -// } -// BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); -// if (basCrnp == null) { -// log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId()); -// continue; -// } - if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { - if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { - return; + public synchronized void crnMove() { + for (CrnSlave crn : slaveProperties.getCrn()) { + // 鑾峰彇鍫嗗灈鏈轰俊鎭� + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { + continue; + } + BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); + if (basCrnp == null) { + log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId()); + continue; } - // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12 - if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) { - return; - } + if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + if (crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { + continue; + } - //鍫嗗灈鏈烘湁鎵ц涓换鍔★紝杩囨护3,4,11,12 - if (wrkMastMapper.selectCrnWorking(crnProtocol.getCrnNo()) != null) { - return; - } + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .eq("crn_no", crn.getId())); + if (!wrkMasts.isEmpty()) { + continue; + } - //杈撻�佺嚎娌℃湁鍏ュ簱浠诲姟锛岃繃婊�2 - if (wrkMastMapper.selectDevWorking(crnProtocol.getCrnNo()) == null) { - return; + News.info("鍫嗗灈鏈烘棤浠诲姟鑷姩鍥炲叆搴撳彛寰呮満==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満"); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.CRN_MOVE); // 浠诲姟妯″紡: 鍫嗗灈鏈虹Щ鍔� + crnCommand.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY((short) 1); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ((short) 1); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(4, crnCommand))) { + News.error("鍫嗗灈鏈虹Щ鍔ㄥ懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); + } + crnThread.setBackHpFlag(true); } - News.info("鍫嗗灈鏈哄彫鍥炲師鐐�==>>" + crnProtocol.getCrnNo() + "鍙峰爢鍨涙満鏈夊叆搴撲换鍔�,鍙洖鍘熺偣"); - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - CrnCommand crnCommand = new CrnCommand(); - crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� - crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙� - 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, crnProtocol.getCrnNo(), new Task(2, crnCommand))) { - News.error("鍫嗗灈鏈哄洖鍘熺偣鍛戒护涓嬪彂澶辫触锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); - } - crnThread.setBackHpFlag(true); } -// } } /** diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 5e631af..2e8e653 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -73,6 +73,9 @@ // RGV ===>> 鎵ц瀵筊GV宸ヤ綔妗g殑瀹屾垚鎿嶄綔 mainService.rgvFinished(12); + //鍫嗗灈鏈烘棤浠诲姟涓ゅ垎閽燂紝鍥炲叆搴撳彛寰呮満 + mainService.crnMove(); + } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/com/zy/core/enums/CrnTaskModeType.java b/src/main/java/com/zy/core/enums/CrnTaskModeType.java index be4761d..d30399d 100644 --- a/src/main/java/com/zy/core/enums/CrnTaskModeType.java +++ b/src/main/java/com/zy/core/enums/CrnTaskModeType.java @@ -9,7 +9,7 @@ X_MOVE(4), // 绔欎綅绉昏浆 Y_MOVE(5), // 绔欎綅绉昏浆 XY_MOVE(6), // 绔欎綅绉昏浆 - GO_ORIGIN(7), // 鍥炲師鐐� + CRN_MOVE(7), // 鍫嗗灈鏈虹Щ鍔╔YZ BACK_ORIGIN(8), // 鍥炲弽鍘熺偣 CLEAR(9), // 娓呴敊 ; diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java index c777ecb..01343c8 100644 --- a/src/main/java/com/zy/core/model/command/CrnCommand.java +++ b/src/main/java/com/zy/core/model/command/CrnCommand.java @@ -32,7 +32,7 @@ * 4 = 绔欎綅绉昏浆 婧愬拰鐩爣閮藉彂 * 5 = 鍥炲師鐐� 涓嶇敤鍙� * 6 = 鍘诲弽鍘熺偣 鐩爣鍙� - * 7 = 鍧愭爣绉昏 鐩爣鍙� + * 7 = 鍧愭爣绉昏 鍙栬揣鍙� * 90 = 璁剧疆鏃堕棿 * 99 = 鍙栨秷褰撳墠浠诲姟 */ diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java index 654042f..e55b359 100644 --- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java +++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java @@ -92,6 +92,9 @@ command.setDestinationPosZ((short)0); // 鐩爣搴撲綅灞� write(command); break; + case 4://鍫嗗灈鏈虹Щ鍔� + writeMove((CrnCommand) task.getData()); + break; default: break; } @@ -349,6 +352,117 @@ } } + /** + * 鍐欏叆鏁版嵁 + */ + private boolean writeMove(CrnCommand command) throws InterruptedException { + if (null == command) { + News.error("SiemensCrn"+" - 6"+" - 鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); + return false; + } + + int writeAck = 0; + do { + OperateResult resultAck = siemensNet.Write("DB100.0", (short) 0); + if (resultAck.IsSuccess){ + Thread.sleep(200); + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 2); + short ack = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); + if (ack != 0) { + writeAck++; + }else { + News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), "ack澶嶄綅瀹屾垚"); + break; + } + } + }while (writeAck <5); + +// convertRow(command); + 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.getSourceStaNo(); +// array[10] = command.getDestinationStaNo(); + array[9] = command.getCommand(); + + OperateResult result = null; + int idx = 0; + do { + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 4); + if (resultRead.IsSuccess) { + short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); + if(taskNo == 0) { + result = siemensNet.Write("DB100.0", array); + }else { + break; + } + } + idx++; + Thread.sleep(500L); + } while (idx < 5); + + if (command.getAckFinish() == 0) { + short commandFinish = 1; + int i = 0; + do { + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 4); + OperateResultExOne<byte[]> resultReadConfirm = siemensNet.Read("DB100.22", (short) 2); + if (resultRead.IsSuccess && resultReadConfirm.IsSuccess) { + short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); + short confirm = siemensNet.getByteTransform().TransInt16(resultReadConfirm.Content, 0); + if(taskNo != 0 && confirm == 0) { + result = siemensNet.Write("DB100.22", commandFinish); + } + } + i++; + Thread.sleep(500L); + } while (i < 5); + } + + try { + // 鏃ュ織璁板綍 + BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); + BasCrnOpt basCrnOpt = new BasCrnOpt( + command.getTaskNo().intValue(), // 浠诲姟鍙� + command.getCrnNo(), // 鍫嗗灈鏈篬闈炵┖] + new Date(), // 涓嬪彂鏃堕棿 + command.getTaskModeType().toString(), // 妯″紡 + command.getSourcePosX().intValue(), // 婧愭帓 + command.getSourcePosY().intValue(), // 婧愬垪 + command.getSourcePosZ().intValue(), // 婧愬眰 + null, // 婧愮珯 + command.getDestinationPosX().intValue(), // 鐩爣鎺� + command.getDestinationPosY().intValue(), // 鐩爣鍒� + command.getDestinationPosZ().intValue(), // 鐩爣灞� + null, // 鐩爣绔� + null, // 鍝嶅簲缁撴灉 + null, // 淇敼鏃堕棿 + null // 淇敼浜哄憳 + ); + bean.insert(basCrnOpt); + } catch (Exception ignore) {} + + if (result != null && result.IsSuccess) { + Thread.sleep(200); + this.readStatus(); + News.info("SiemensCrn"+" - 7"+" - 鍫嗗灈鏈哄懡浠や笅鍙慬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; + } else { + OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + News.error("SiemensCrn"+" - 8"+" - 鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + return false; + } + } + @Override public void close() { diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html index 06f3328..427ac8c 100644 --- a/src/main/webapp/views/crn.html +++ b/src/main/webapp/views/crn.html @@ -219,7 +219,7 @@ <button class="item" onclick="siteMove()">绔欏埌绔�</button> <!-- <button class="item" onclick="bacOrigin()">鍥炲師鐐�</button>--> <!-- <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>--> - <!-- <button class="item" onclick="coorMove()">鍧愭爣绉昏</button>--> + <button class="item" onclick="coorMove()">鍫嗗灈鏈虹Щ鍔�</button> <button class="item" onclick="taskComplete()">浠诲姟瀹屾垚</button> <!-- <button class="item" onclick="pause()">鏆傚仠</button>--> <!-- <button class="item" onclick="boot()">鍚姩</button>--> @@ -432,7 +432,7 @@ // 鍧愭爣绉诲姩 function coorMove() { - http.post(baseUrl+"/crn/operator/coorMove", getReqParam(), function (res) { + http.post(baseUrl+"/crn/operator/crnMove", getReqParam(), function (res) { layer.msg(res.msg); }); } -- Gitblit v1.9.1