From 7d06cea49f39ab2bc9177833d0ab2a04bd53e3eb Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期三, 22 十一月 2023 13:42:27 +0800 Subject: [PATCH] #联机 --- src/main/java/com/zy/core/thread/SiemensCrnThread.java | 96 ++++++++++++++++++++++++-------- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 13 ++-- src/main/resources/application-prod.yml | 8 +- src/main/java/com/zy/asrs/controller/CrnController.java | 34 +++++++++++ src/main/java/com/zy/core/model/command/CrnCommand.java | 6 +- 5 files changed, 119 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java index 35a377a..3690e3c 100644 --- a/src/main/java/com/zy/asrs/controller/CrnController.java +++ b/src/main/java/com/zy/asrs/controller/CrnController.java @@ -596,8 +596,40 @@ // command.setDestinationPosZ(param.getLev()); // 鐩爣搴撲綅灞� command.setAuto((short)1); - return crnControl(command)?R.ok():R.error(); + return crnControl2(command)?R.ok():R.error(); } + private boolean crnControl2(CrnCommand command){ + if (command.getCrnNo() == null) { + throw new CoolException("璇烽�夋嫨鍫嗗灈鏈�"); + } + for (CrnSlave crn : slaveProperties.getCrn()) { + // 鑾峰彇鍫嗗灈鏈轰俊鎭� + if (command.getCrnNo().equals(crn.getId())) { + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); + if (crnThread == null) { + throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ嚎"); + } + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { + throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ嚎"); + } + // 绌洪棽鍒ゆ柇 +// if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) { + if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(4, command))) { + return true; + } else { + throw new CoolException("鍛戒护涓嬪彂澶辫触"); + } +// } else { +// throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ┖闂茬姸鎬�"); +// } + } + } + return false; + } + + + private boolean crnControl(CrnCommand command){ 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 f4f8dde..1905621 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -232,12 +232,13 @@ crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 婧愬簱浣嶆帓 - crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 婧愬簱浣嶅垪 - crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getRowShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鎺� - crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鍒� - crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅灞� + crnCommand.setSourcePosX(crnStn.getBay().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosY(crnStn.getLev().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setSourcePosZ(crnStn.getRow().shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setDestinationPosX(Utils.getBayShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosY(Utils.getLevShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅灞� + crnCommand.setDestinationPosZ(Utils.getRowShort(taskWrk.getTargetPoint())); // 鐩爣搴撲綅鎺� + crnCommand.setCommand((short)1); if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); } else { 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 088dc7a..8eedc95 100644 --- a/src/main/java/com/zy/core/model/command/CrnCommand.java +++ b/src/main/java/com/zy/core/model/command/CrnCommand.java @@ -42,13 +42,13 @@ @JSONField(serialize = false) private CrnTaskModeType taskModeType; - // 婧愪綅缃帓鍙� + // 婧愪綅缃垪鍙� private Short sourcePosX = 0; - // 婧愪綅缃垪鍙� + // 婧愪綅缃眰鍙� private Short sourcePosY = 0; - // 婧愪綅缃眰鍙� + // 婧愪綅缃帓鍙� private Short sourcePosZ = 0; // 婧愮珯 diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java index 5d068f5..52bf8d0 100644 --- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java +++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java @@ -96,6 +96,9 @@ command.setDestinationPosZ((short)0); // 鐩爣搴撲綅灞� write(command); break; + case 4: + writeAuto((CrnCommand) task.getData()); + break; default: break; } @@ -384,47 +387,48 @@ log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); return false; } - if (command.getTaskNo() == 0 && command.getAckFinish() == 0) { + if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) { command.setTaskNo((short) 9999); } command.setCrnNo(slave.getId()); short[] array = new short[12]; - if (command.getAckFinish() == 0) { + if (Cools.isEmpty(command.getAckFinish())) { array[0] = 5; } else { - array[0] = 0; + array[0] = command.getAckFinish(); } array[1] = command.getTaskNo(); array[2] = command.getTaskMode(); - array[3] = command.getDestinationPosZ(); - if (rowOne.contains(command.getSourcePosX())){ - array[4] = (short)1; - }else if (rowTwo.contains(command.getSourcePosX())){ - array[4] = (short)2; - }else if (rowThree.contains(command.getSourcePosX())){ - array[4] = (short)3; - }else if (rowFour.contains(command.getSourcePosX())){ - array[4] = (short)4; - }else { + array[3] = command.getSourcePosZ(); +// if (rowOne.contains(command.getSourcePosX())){ +// array[4] = (short)1; +// }else if (rowTwo.contains(command.getSourcePosX())){ +// array[4] = (short)2; +// }else if (rowThree.contains(command.getSourcePosX())){ +// array[4] = (short)3; +// }else if (rowFour.contains(command.getSourcePosX())){ +// array[4] = (short)4; +// }else { array[4] = command.getSourcePosX(); - } +// } array[5] = command.getDestinationPosY(); array[6] = command.getDestinationPosZ(); - if (rowOne.contains(command.getDestinationPosX())){ - array[7] = (short)1; - }else if (rowTwo.contains(command.getDestinationPosX())){ - array[7] = (short)2; - }else if (rowThree.contains(command.getDestinationPosX())){ - array[7] = (short)3; - }else if (rowFour.contains(command.getDestinationPosX())){ - array[7] = (short)4; - }else { +// if (rowOne.contains(command.getDestinationPosX())){ +// array[7] = (short)1; +// }else if (rowTwo.contains(command.getDestinationPosX())){ +// array[7] = (short)2; +// }else if (rowThree.contains(command.getDestinationPosX())){ +// array[7] = (short)3; +// }else if (rowFour.contains(command.getDestinationPosX())){ +// array[7] = (short)4; +// }else { array[7] = command.getDestinationPosX(); - } +// } array[8] = command.getDestinationPosY(); + array[9] = command.getCommand(); if (!Cools.isEmpty(command.getAuto())){ array[10] = command.getAuto(); } @@ -503,6 +507,50 @@ } } + private boolean writeAuto(CrnCommand command){ + if (null == command) { + log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); + return false; + } + short[] array = new short[1]; + array[0] = command.getAuto(); + OperateResult result = siemensNet.Write("DB100.20", array); + + //鏇存柊鍛戒护鏃ュ織 + CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class); + CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class); + CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId()); + CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class); + commandInfoLog.setId(null); + + if (result.IsSuccess) { + log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command)); + OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); + + //鏇存柊鎸囦护鏃ュ織 + commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛"); + commandInfoLogService.insert(commandInfoLog); + + //鏇存柊浠诲姟姝ュ簭 + TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class); + TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue()); + if (taskWrk != null) { + taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭 + taskWrkService.updateById(taskWrk); + } + + return true; + } else { + OutputQueue.CRN.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("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + + //鏇存柊鎸囦护鏃ュ織 + commandInfoLog.setDeviceLog("鎸囦护涓嬪彂澶辫触"); + commandInfoLogService.insert(commandInfoLog); + return false; + } + } + @Override public void close() { siemensNet.ConnectClose(); diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 0252ae0..3dd2b98 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -107,14 +107,14 @@ offset: 2 #鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2 port: 102 crnOutStn[0]: #鍫嗗灈鏈哄嚭搴撶珯鐐� - staNo: 103 - row: 3 + staNo: 112 + row: 12 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} crnInStn[0]: #鍫嗗灈鏈哄叆搴撶珯鐐�1 - staNo: 100 - row: 4 + staNo: 115 + row: 13 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} -- Gitblit v1.9.1