src/main/java/com/zy/asrs/entity/BasDevp.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/StaProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/BasDevpMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -214,6 +214,22 @@ @TableField("cart_pos") private Integer cartPos; @ApiModelProperty(value= "") @TableField("agv_start_pick") private Integer agvStartPick; @ApiModelProperty(value= "") @TableField("agv_target_pick") private Integer agvTargetPick; @ApiModelProperty(value= "") @TableField("agv_start_place") private Integer agvStartPlace; @ApiModelProperty(value= "") @TableField("agv_target_place") private Integer agvTargetPlace; public String getIoTime$(){ if (Cools.isEmpty(this.ioTime)){ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1132,7 +1132,38 @@ } } //自动完成任务 //agv取放货任务完成 public synchronized void autoCompleteAGV() { List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>()); for (BasDevp basDevp:basDevps){ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } if (basDevp.getWrkNo()!=0){ if (basDevp.getAgvTargetPick()!=0){//取货 staProtocol.setAgvTypeSign((short)0); staProtocol.setStaNo(basDevp.getDevNo().shortValue()); MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); }else if (basDevp.getAgvTargetPlace()!=0){ staProtocol.setAgvTypeSign((short)1); staProtocol.setStaNo(basDevp.getDevNo().shortValue()); MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol)); } }else { if (basDevp.getAgvTargetPick()!=0){ basDevp.setAgvStartPick(0); basDevpService.updateById(basDevp); }else if (basDevp.getAgvTargetPlace()!=0){ basDevp.setAgvStartPlace(0); basDevpService.updateById(basDevp); } } } } public synchronized void autoCompleteTask() { List<TaskWrk> taskWrks = taskWrkMapper.selectWorkingTask(); for (TaskWrk taskWrk : taskWrks) { src/main/java/com/zy/core/MainProcess.java
@@ -71,7 +71,9 @@ //自动派发任务 // mainService.autoDistribute(); //自动完成任务 //mainService.autoCompleteTask(); // mainService.autoCompleteTask(); //agv取放货完成 mainService.autoCompleteAGV(); } catch (Exception e) { e.printStackTrace(); src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -105,6 +105,12 @@ private Boolean upcontactErr = false; //顶升电机接触器故障 private Short agvStartPick; //允许取货 private Short agvStartPlace; //允许放货 private Short agvTypeSign; //允许放货 private List<Integer> alarm; @@ -152,6 +158,8 @@ basDevp.setLocType3((short) 0); // 轻重类型{0:未知,1:轻库位,2:重库位} basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2); basDevp.setInQty(inQty !=null ?(int)inQty : 0); basDevp.setAgvStartPick(agvStartPick.intValue()); basDevp.setAgvStartPlace(agvStartPlace.intValue()); return basDevp; } src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -125,6 +125,11 @@ write((StaProtocol)task.getData()); read(); break; // 写数据 ID+目标站 case 4: writeAgvOk((StaProtocol)task.getData()); read(); break; /* case 3: write2((StaProtocol)task.getData()); read(); @@ -229,6 +234,34 @@ } } OperateResultExOne<byte[]> resultAgvAndPlc = siemensS7Net.Read("DB102.0", (short) 30); if (resultAgvAndPlc.IsSuccess) { for (int i = 0; i < staNoSize; i++) { int sign =(i+2)/2-1; if ((i+2)%2!=0){ Integer siteId = staNos.get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4)); // 允许取货 staProtocol.setAgvStartPlace((short)0); // 允许放货 continue; } Integer siteId = staNos.get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6)); // 允许取货 staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2)); // 允许放货 } } if (slave.getId() == 1) { //条码 @@ -324,6 +357,83 @@ /** * 写入 ID+目标站 =====> 单站点写入 */ private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); if (staProtocol.getAgvTypeSign()==0){ //0取货 switch (staProtocol.getSiteId()){ case 100: index=32; break; case 101: index=34; break; case 102: index=38; break; case 103: index=40; break; case 104: index=44; break; case 105: index=46; break; case 106: index=50; break; case 107: index=52; break; default: return; } }else { switch (staProtocol.getSiteId()){ case 100: index=30; break; case 102: index=36; break; case 104: index=42; break; case 106: index=48; break; default: return; } } OperateResult write = null; //任务下发次数 int writeCount = 0; do { write = siemensS7Net.Write("DB102." + index, true); // 任务完成 if(write.IsSuccess){ writeCount=6; }else { writeCount++; log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } }while (writeCount<5); if (!write.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); log.error("写入输送线取放货完成站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); log.info("输送线取放货完成命令下发码垛完成 给输送线写任务完成 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); } } private void write(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; src/main/resources/application.yml
@@ -50,7 +50,7 @@ #url: 10.32.53.195:8080 # WMS系统ip # url: 10.210.157.109:8090 url: 10.210.157.11:8080/wms url: localhost:8080/wms # 入库任务申请接口 #inboundTaskApplyPath: api/InterFace/inboundTaskApply # inboundTaskApplyPath: apis/inboundTaskApply src/main/resources/mapper/BasDevpMapper.xml
@@ -41,6 +41,10 @@ <result column="max_wt" property="maxWt" /> <result column="gross_wt" property="grossWt" /> <result column="cart_pos" property="cartPos" /> <result column="agv_start_pick" property="agvStartPick" /> <result column="agv_target_pick" property="agvTargetPick" /> <result column="agv_start_place" property="agvStartPlace" /> <result column="agv_target_place" property="agvTargetPlace" /> </resultMap>