src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/ToAgvDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/ToWmsDTO.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/CrnSlave.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/DevpSlave.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-prod.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,27 +1,30 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.taskCreateParam; import com.zy.asrs.service.*; import com.zy.common.utils.HttpHandler; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @RestController @@ -38,6 +41,9 @@ private TaskWrkController taskWrkController; @Autowired private BasDevpService basDevpService; @Value("${wms.url}") private String wmsUrl; private static final boolean auth = true; @@ -110,7 +116,7 @@ @PostMapping("/targetWharfApply") public R targetWharfApply(@RequestHeader String appkey, @RequestBody WMSAndAGVInterfaceParam param, HttpServletRequest request) { HttpServletRequest request) throws IOException { if (Cools.isEmpty(param)){ return R.error("参数为空!"); } else if (Cools.isEmpty(param.getTaskNo())){ @@ -122,12 +128,35 @@ } else if (Cools.isEmpty(param.getFreeWharfs()) || param.getFreeWharfs().size()==0){ return R.error("空闲的入库码头(AGV)为空!"); } TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo()); ToWmsDTO toWmsDTO = new ToWmsDTO(); Map<String, Object> map = new HashMap<>(); map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2"); List<Integer> list = new ArrayList<>(); list.add(1); list.add(4); //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo()); toWmsDTO.setWarehouseId("1688469798893297665"); toWmsDTO.setContainerCode(param.getContainerCode()); toWmsDTO.setApplyType("TUNNEL"); toWmsDTO.setCanInboundTunnels(list); String response = new HttpHandler.Builder() .setHeaders(map) .setUri(wmsUrl) .setPath("wcsManager/wcsInterface/inboundTaskApply") .setJson(JSON.toJSONString(toWmsDTO)) .build() .doPost(); if (Cools.isEmpty(taskWrk)){ return R.error("未查询到任务,任务号:"+param.getTaskNo()); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { //解析 return R.ok(jsonObject.get("data")); }else { return R.error((String) jsonObject.get("msg")); } return R.ok(taskWrk.getStartPoint()); } //AGV请求动作接口 @@ -135,6 +164,7 @@ public R agvTaskRequest(@RequestHeader String appkey, @RequestBody WMSAndAGVInterfaceParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)){ return R.error("参数为空!"); } else if (Cools.isEmpty(param.getRequestType())){ src/main/java/com/zy/asrs/entity/ToAgvDTO.java
New file @@ -0,0 +1,21 @@ package com.zy.asrs.entity; import lombok.Data; import java.util.Date; @Data public class ToAgvDTO { private String taskNo; private String warehouseId; private String warehouseCode; private String taskType; private String taskPriority; private String containerCode; private String containerTypeCode; private String emptyContainer; private Date createTime; private Integer taskTunnel; private String targetLocationCode; } src/main/java/com/zy/asrs/entity/ToWmsDTO.java
New file @@ -0,0 +1,13 @@ package com.zy.asrs.entity; import lombok.Data; import java.util.List; @Data public class ToWmsDTO { private String warehouseId; private String containerCode; private String applyType; private List<Integer> canInboundTunnels; } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -16,14 +16,18 @@ import com.zy.common.utils.HttpHandler; import com.zy.core.CrnThread; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.LedThread; import com.zy.core.thread.SiemensDevpThread; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; @@ -76,6 +80,86 @@ @Value("${wms.movePath}") private String movePath; public void generateStoreWrkFile() { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && !staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (workNo >= 0) && staProtocol.isPakMk()) { // 尺寸检测异常 boolean back = false; String errMsg = ""; if (staProtocol.isFrontErr()) { errMsg = "前超限"; back = true; } if (!back && staProtocol.isBackErr()) { errMsg = "后超限"; back = true; } if (!back && staProtocol.isHighErr()) { errMsg = "高超限"; back = true; } if (!back && staProtocol.isLeftErr()) { errMsg = "左超限"; back = true; } if (!back && staProtocol.isRightErr()) { errMsg = "右超限"; back = true; } if (!back && staProtocol.isWeightErr()) { errMsg = "超重"; back = true; } if (!back && staProtocol.isBarcodeErr()) { errMsg = "扫码失败"; back = true; } // 退回 if (back) { // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); staProtocol.setWorkNo(workNo); staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); continue; } // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); if(!Cools.isEmpty(barcode)) { } } } } } /** * 堆垛机站出库到出库站 */ src/main/java/com/zy/core/MainProcess.java
@@ -46,7 +46,7 @@ // 演示 // mainService.crnDemoOfLocMove1(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 // mainService.generateStoreWrkFile(); // 组托 mainService.generateStoreWrkFile(); // 组托 // 出库 ===>> 堆垛机出库站到出库站 mainService.crnStnToOutStn(); // 入出库 ===>> 堆垛机入出库作业下发 src/main/java/com/zy/core/model/CrnSlave.java
@@ -46,6 +46,9 @@ // 层 private Integer lev; //退回站点 private Integer backSta; } } src/main/java/com/zy/core/model/DevpSlave.java
@@ -35,6 +35,8 @@ private Integer barcode; private Integer scale; private Integer backSta; } } src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -59,6 +59,30 @@ //指令ID private Integer commandId; // 外形检测 ------------------------------------------------------------------------ // 前超限 private boolean frontErr; // 后超限 private boolean backErr; // 高超限 private boolean highErr; // 左超限 private boolean leftErr; // 右超限 private boolean rightErr; // 超重 private boolean weightErr; // 扫码失败 private boolean barcodeErr; public BasDevp toSqlModel(){ BasDevp basDevp = new BasDevp(); basDevp.setDevNo(siteId); src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -232,19 +232,121 @@ } } // //条码 // Thread.sleep(200); // OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.160",(short)4); // if (result2.IsSuccess) { // for (int i = 0; i < barcodeSize; i++) { // String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); // if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { // barcodeThread.setBarcode(barcode); // } // } // // } //条码 Thread.sleep(200); OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.100",(short)31); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); } } } if (slave.getId() == 1){ // 外形检测 - 102 Thread.sleep(100); OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.150", (short)1); if (result4.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1); StaProtocol staProtocol = station.get(103); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } // 外形检测 - 107 Thread.sleep(50); OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB101.154", (short)1); if (result5.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result5.Content, 0, 1); StaProtocol staProtocol = station.get(107); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } // 外形检测 - 111 Thread.sleep(50); OperateResultExOne<byte[]> result6 = siemensS7Net.Read("DB101.158", (short)1); if (result6.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result6.Content, 0, 1); StaProtocol staProtocol = station.get(111); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } // 外形检测 - 115 Thread.sleep(50); OperateResultExOne<byte[]> result7 = siemensS7Net.Read("DB101.162", (short)1); if (result7.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result7.Content, 0, 1); StaProtocol staProtocol = station.get(115); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } // 外形检测 - 119 Thread.sleep(50); OperateResultExOne<byte[]> result8 = siemensS7Net.Read("DB101.166", (short)1); if (result8.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result8.Content, 0, 1); StaProtocol staProtocol = station.get(119); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } // 外形检测 - 123 Thread.sleep(50); OperateResultExOne<byte[]> result9 = siemensS7Net.Read("DB101.170", (short)1); if (result9.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result9.Content, 0, 1); StaProtocol staProtocol = station.get(123); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } } else if (slave.getId() == 3) { // 外形检测 - 111 Thread.sleep(50); OperateResultExOne<byte[]> result10 = siemensS7Net.Read("DB101.26", (short)1); if (result10.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result10.Content, 0, 1); StaProtocol staProtocol = station.get(301); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } } // //RGV台车位置 // Thread.sleep(200); src/main/resources/application-prod.yml
@@ -21,6 +21,7 @@ row: 3 bay: 1 lev: 1 backSta: 102 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 200 @@ -53,6 +54,7 @@ row: 6 bay: 1 lev: 1 backSta: 106 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 206 @@ -85,6 +87,7 @@ row: 9 bay: 1 lev: 1 backSta: 110 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 212 @@ -117,6 +120,7 @@ row: 13 bay: 1 lev: 1 backSta: 114 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 218 @@ -149,6 +153,7 @@ row: 17 bay: 1 lev: 1 backSta: 118 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 224 @@ -181,6 +186,7 @@ row: 21 bay: 1 lev: 1 backSta: 122 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点 staNo: 230 @@ -201,7 +207,7 @@ port: 102 slot: 0 emptyInSta[0]: #空板入库口0 staNo: 101 staNo: 103 emptyInSta[1]: #空板入库口1 staNo: 105 emptyInSta[2]: #空板入库口2 @@ -214,42 +220,48 @@ staNo: 121 inSta[0]: #入库口1 scale: ${wcs-slave.scale[0].id} staNo: 101 staNo: 103 backSta: 102 barcode: ${wcs-slave.barcode[0].id} inSta[1]: #入库口2 scale: ${wcs-slave.scale[1].id} staNo: 105 staNo: 107 backSta: 106 barcode: ${wcs-slave.barcode[1].id} #slot: 0 inSta[2]: #入库口1 scale: ${wcs-slave.scale[0].id} staNo: 109 staNo: 111 backSta: 110 barcode: ${wcs-slave.barcode[0].id} inSta[3]: #入库口1 scale: ${wcs-slave.scale[0].id} staNo: 113 staNo: 115 backSta: 114 barcode: ${wcs-slave.barcode[0].id} inSta[4]: #入库口2 scale: ${wcs-slave.scale[1].id} staNo: 117 staNo: 119 backSta: 118 barcode: ${wcs-slave.barcode[1].id} #slot: 0 inSta[5]: #入库口1 scale: ${wcs-slave.scale[0].id} staNo: 121 staNo: 123 backSta: 122 barcode: ${wcs-slave.barcode[0].id} outSta[0]: #出库口1 staNo: 102 staNo: 100 outSta[1]: #出库口2 staNo: 106 staNo: 104 outSta[2]: #出库口2 staNo: 110 staNo: 108 outSta[3]: #出库口1 staNo: 114 staNo: 112 outSta[4]: #出库口2 staNo: 118 staNo: 116 outSta[5]: #出库口2 staNo: 122 staNo: 120 devp[1]: #输送线 id: 2 ip: 172.17.91.45 @@ -266,8 +278,9 @@ staNo: 306 inSta[0]: #入库口1 scale: ${wcs-slave.scale[1].id} staNo: 306 staNo: 301 barcode: ${wcs-slave.barcode[1].id} backSta: 300 #slot: 0 outSta[0]: #出库口1 staNo: 307