src/main/java/com/zy/asrs/controller/BasCrnpController.java
@@ -113,9 +113,10 @@ public R query(String condition) { EntityWrapper<BasCrnp> wrapper = new EntityWrapper<>(); wrapper.like("crn_no", condition); Page<BasCrnp> page = basCrnpService.selectPage(new Page<>(0, 10), wrapper); // Page<BasCrnp> page = basCrnpService.selectPage(new Page<>(0, 10), wrapper); List<BasCrnp> basCrnpList = basCrnpService.selectList(wrapper); List<Map<String, Object>> result = new ArrayList<>(); for (BasCrnp basCrnp : page.getRecords()){ for (BasCrnp basCrnp : basCrnpList){ Map<String, Object> map = new HashMap<>(); map.put("id", basCrnp.getCrnNo()); map.put("value", basCrnp.getCrnNo()); src/main/java/com/zy/asrs/controller/BasDevpController.java
@@ -109,9 +109,10 @@ public R query(String condition) { EntityWrapper<BasDevp> wrapper = new EntityWrapper<>(); wrapper.like("dev_no", condition); Page<BasDevp> page = basDevpService.selectPage(new Page<>(0, 10), wrapper); // Page<BasDevp> page = basDevpService.selectPage(new Page<>(0, 10), wrapper); List<BasDevp> basDevps = basDevpService.selectList(wrapper); List<Map<String, Object>> result = new ArrayList<>(); for (BasDevp basDevp : page.getRecords()){ for (BasDevp basDevp : basDevps){ Map<String, Object> map = new HashMap<>(); map.put("id", basDevp.getDevNo()); map.put("value", basDevp.getDevNo()); src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java
@@ -129,9 +129,11 @@ public R query(String condition) { EntityWrapper<BasWrkIotype> wrapper = new EntityWrapper<>(); wrapper.like("io_desc", condition); Page<BasWrkIotype> page = basWrkIotypeService.selectPage(new Page<>(0, 20), wrapper); // Page<BasWrkIotype> page = basWrkIotypeService.selectPage(new Page<>(0, 20), wrapper); List<BasWrkIotype> basWrkIotypeList = basWrkIotypeService.selectList(wrapper); List<Map<String, Object>> result = new ArrayList<>(); for (BasWrkIotype basWrkIotype : page.getRecords()){ for (BasWrkIotype basWrkIotype : basWrkIotypeList){ Map<String, Object> map = new HashMap<>(); map.put("id", basWrkIotype.getIoType()); map.put("value", basWrkIotype.getIoDesc()); src/main/java/com/zy/asrs/controller/DeviceErrorController.java
@@ -12,11 +12,13 @@ import com.core.common.Cools; import com.core.common.R; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; @Slf4j @RestController public class DeviceErrorController extends BaseController { @@ -60,10 +62,10 @@ continue; } if (entry.getKey().equals("id")) { id = Long.getLong(val); id = (long) Integer.parseInt(val); } else if (entry.getKey().equals("device")) { device = val; } else if (entry.getKey().equals("deviceId")) { } else if (entry.getKey().equals("device_id")) { deviceId = Integer.valueOf(val); } } @@ -72,6 +74,7 @@ page1.setTotal(deviceErrorService.selectDeviceErrorListTotal(id,device,deviceId)); return R.ok(page1); } catch (Exception e) { log.error("异常" + e); return R.error("异常" + e); } } src/main/java/com/zy/asrs/controller/StaDescController.java
@@ -44,7 +44,11 @@ wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } wrapper.orderAsc(Collections.singleton("crn_no")); return R.ok(staDescService.selectPage(new Page<>(curr, limit), wrapper)); // return R.ok(staDescService.selectPage(new Page<>(curr, limit), wrapper)); List<StaDesc> staDescList = staDescService.selectList(wrapper); Page<StaDesc> page = new Page<StaDesc>(0, 10).setRecords(staDescList); page.setTotal(staDescList.size()); return R.ok(page); } private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ src/main/java/com/zy/asrs/controller/WrkLastnoController.java
@@ -41,7 +41,11 @@ EntityWrapper<WrkLastno> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} return R.ok(wrkLastnoService.selectPage(new Page<>(curr, limit), wrapper)); // return R.ok(wrkLastnoService.selectPage(new Page<>(curr, limit), wrapper)); List<WrkLastno> wrkLastnoList = wrkLastnoService.selectList(wrapper); Page<WrkLastno> page = new Page<WrkLastno>(0, 10).setRecords(wrkLastnoList); page.setTotal(wrkLastnoList.size()); return R.ok(page); } private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -98,7 +98,8 @@ private Double weight; @ApiModelProperty(value= "长度") private Double length; @TableField("man_length") private Double manLength; @ApiModelProperty(value= "体积") private Double volume; src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -103,6 +103,15 @@ @Value("${wms.rgvOpen}") private boolean rgvOpen; @Value("${constant-parameters.trackEntireLength}") private Long trackEntireLength; @Value("${constant-parameters.trackBenchmark}") private Long trackBenchmark; @Value("${constant-parameters.trackProportion}") private Long trackProportion; public void generateStoreWrkFile() throws IOException, InterruptedException { try { src/main/java/com/zy/asrs/utils/CompleteRouteUtils.java
New file @@ -0,0 +1,19 @@ package com.zy.asrs.utils; import com.zy.core.enums.RouteCollectCountType; import java.util.ArrayList; import java.util.List; import static java.util.stream.Collectors.toList; /** * Created by Monkey D. Luffy on 2023/7/18 */ public class CompleteRouteUtils { public static void main(String[] arge){ } } src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -448,127 +448,4 @@ System.out.println(integer); } } public static short RgvPosSta(Integer rgvId,Short posId){ switch (rgvId){ case 1: return RgvPosStaOne(posId); case 2: return RgvPosStaTwo(posId); default: return 1; } } public static short RgvPosStaOne(Short posId){ switch (posId.intValue()){ case 1: case 2: return 102; case 3: case 4: return 122; case 5: case 6: return 105; case 7: case 8: case 9: return 118; case 10: case 11: return 119; case 12: case 13: case 14: return 110; case 15: return 120; case 16: case 17: case 18: return 111; case 19: return 121; case 20: case 21: case 22: return 113; case 23: case 24: return 123; case 25: return 114; case 26: case 27: return 1142; case 28: return 116; default: return 1142; } } public static short RgvPosStaTwo(Short posId){ switch (posId.intValue()){ case 1: return 116; case 28: case 2: return 1142; case 3: case 4: return 114; case 5: return 123; case 6: case 7: case 8: return 113; case 9: case 10: return 121; case 11: case 12: case 13: case 14: return 120; case 15: case 16: return 110; case 17: case 18: return 119; case 19: return 108; case 20: case 21: case 22: return 107; case 23: case 24: return 105; case 25: case 26: case 27: return 104; default: return 104; } } public static Integer CrnStaEnd(Integer endSta,Integer souSta) { switch (souSta) { case 100: case 103: case 106: case 109: case 112: case 115: return souSta + 1; default: return endSta; } } } src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -21,109 +21,41 @@ private Short ackFinish1 = 0; // 工位1任务号 private Short taskNo1 = 0; private Short taskNo = 0; /** * 任务模式: * 0 = 无 * 1 = 取货 * 2 = 放货 * 3 = 取放货 * 3 = 行走 */ private Short taskMode1 = 0; private Short taskMode = 0; @JSONField(serialize = false) private RgvTaskModeType taskModeType1; private RgvTaskModeType taskModeType; /* 工位1源站 */ private Short sourceStaNo1 = 0; * 作业点 * */ private Long destinationStaNo = 0L; /* 工位1目标站 */ private Short destinationStaNo1 = 0; ////////////////////// 工位2定义 ////////////////////////////////////////////////// // 工位1任务完成确认位 private Short ackFinish2 = 0; // 工位2任务号 private Short taskNo2 = 0; private Short ackFinish = 0; /** * 任务模式: * 0 = 无 * 1 = 取货 * 2 = 放货 * 3 = 取放货 */ private Short taskMode2 = 0; @JSONField(serialize = false) private RgvTaskModeType taskModeType2; /* 工位1源站 */ private Short sourceStaNo2 = 0; /* 工位1目标站 */ private Short destinationStaNo2 = 0; /////////////////////////////////////////////////////////////////////////////////////// /** * 任务模式: * 0 = 未确认 * 1 = 工位1任务确认 * 2 = 工位2任务确认 * 3 = 工位1、2任务同时确认 */ private Short command = 0; public void setTaskMode1(Short taskMode1){ this.taskMode1 = taskMode1; this.taskModeType1 = RgvTaskModeType.get(taskModeType1); public void setTaskMode(Short taskMode){ this.taskMode = taskMode; this.taskModeType = RgvTaskModeType.get(taskModeType); } public void setTaskMode1(RgvTaskModeType type1) { this.taskModeType1 = type1; this.taskMode1 = RgvTaskModeType.get(type1).id.shortValue(); public void setTaskMode(RgvTaskModeType type) { this.taskModeType = type; this.taskMode = RgvTaskModeType.get(type).id.shortValue(); } public void setTaskMode2(Short taskMode2){ this.taskMode2 = taskMode2; this.taskModeType2 = RgvTaskModeType.get(taskModeType2); } public void setTaskMode2(RgvTaskModeType type2) { this.taskModeType2 = type2; this.taskMode2 = RgvTaskModeType.get(type2).id.shortValue(); } public static void main(String[] args) { Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(date); System.out.println(cal.get(Calendar.YEAR)); //默认从0-11 System.out.println(cal.get(Calendar.MONTH)+1); System.out.println(cal.get(Calendar.DATE)); int hour = cal.get(Calendar.HOUR_OF_DAY); System.out.println("时"); System.out.println(hour); int minute = cal.get(Calendar.MINUTE); System.out.println("分"); System.out.println(minute); int second = cal.get(Calendar.SECOND); System.out.println("秒"); System.out.println(second); int mm = cal.get(Calendar.DAY_OF_WEEK) - 1; // 星期:0(日)~6(六) System.out.println("礼拜"); System.out.println(mm); } } src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -36,33 +36,19 @@ public RgvStatusType statusType; /** * 工位1任务号 * 任务号 */ public Short taskNo1 = 0; /** * RGV工位1当前状态 * 0:空闲,无任务 * 11:取货中 * 12:放货中 * 10:任务完成等待WCS确认 */ public Short status1; /** * 状态枚举 */ public RgvStatusType statusType1; public Short taskNo = 0; /** * 工位1有物 */ public Short loaded1;//0 无物;1 有物 public Short loaded;//0 无物;1 有物 /** * RGV当前位置 */ public Short RgvPos; public Long RgvPos; /** * 走行在定位 @@ -71,51 +57,10 @@ */ public Short walkPos; ////////////////////// 工位2定义 ////////////////////////////////////////////////// /** * 工位2任务号 */ public Short taskNo2 = 0; /** * RGV工位2当前状态 * 0:空闲,无任务 * 11:取货中 * 12:放货中 * 10:任务完成等待WCS确认 */ public Short status2; /** * 状态枚举 */ public RgvStatusType statusType2; /** * 工位2有物 */ public Short loaded2; //0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 /////////////////////////////////////////////////////////////////////////////////////// /** * 异常码 */ public Short alarm; /** * 心跳指令 1-2每秒切换一次 */ public Short heart; private Short temp1; private Short temp2; private Short temp3; private Short temp4; private Short temp5; /** * X行走行速度m/min @@ -123,12 +68,12 @@ private Float xSpeed; /** * 堆垛机累计走行距离km * 累计走行距离km */ public Float xDistance; /** * 堆垛机累计走行时长h * 累计走行时长h */ public Float xDuration; @@ -152,40 +97,11 @@ this.status = RgvStatusType.get(type).id.shortValue(); } public void setStatus1(Short status1){ this.status1 = status1; this.statusType1 = RgvStatusType.get(status1); } public void setStatus1(RgvStatusType type1){ this.statusType1 = type1; this.status1 = RgvStatusType.get(type1).id.shortValue(); } public void setStatus2(Short status2){ this.status2 = status2; this.statusType2 = RgvStatusType.get(status2); } public void setStatus2(RgvStatusType type2){ this.statusType2 = type2; this.status2 = RgvStatusType.get(type2).id.shortValue(); } /** * 最近一次入出库类型 * I:入库 * O:出库 */ private String lastIo = "I"; public BasRgv toSqlModel(BasRgv basRgv){ if (alarm!=null) { basRgv.setRgvErr(alarm.longValue()); } basRgv.setWrkNo1(taskNo1.intValue()); basRgv.setWrkNo2(taskNo2.intValue()); basRgv.setWrkNo1(taskNo.intValue()); return basRgv; } src/main/java/com/zy/core/thread/RgvThread.java
@@ -72,14 +72,6 @@ case 2: write((RgvCommand) task.getData()); break; //工位1写入数据 case 4: write1((RgvCommand) task.getData()); break; //工位2写入数据 case 5: write2((RgvCommand) task.getData()); break; // 复位 case 3: RgvCommand command = (RgvCommand) task.getData(); @@ -87,44 +79,19 @@ command = new RgvCommand(); } command.setRgvNo(slave.getId()); // RGV编号 command.setTaskNo1((short) 0); // 工作号 command.setAckFinish1((short) 1); // 任务完成确认位 command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 command.setSourceStaNo1((short)0); // 源站 command.setDestinationStaNo1((short)0); // 目标站 command.setTaskNo2((short) 0); // 工作号 command.setAckFinish2((short) 1); // 任务完成确认位 command.setTaskMode2(RgvTaskModeType.NONE); // 任务模式 command.setSourceStaNo2((short)0); // 源站 command.setDestinationStaNo2((short)0); // 目标站 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 1); // 任务完成确认位 command.setTaskMode(RgvTaskModeType.NONE); // 任务模式 command.setDestinationStaNo(0L); // 目标站 command.setCommand((short)0); write(command); break; // 回原点 避让 case 9: RgvCommand commandAvoidanceXY = (RgvCommand) task.getData(); if (null == commandAvoidanceXY) { commandAvoidanceXY = new RgvCommand(); } commandAvoidanceXY.setRgvNo(slave.getId()); // RGV编号 commandAvoidanceXY.setTaskNo1((short) 32222); // 工作号 commandAvoidanceXY.setAckFinish1((short) 1); // 任务完成确认位 commandAvoidanceXY.setTaskMode1(RgvTaskModeType.X_MOVE); // 任务模式 commandAvoidanceXY.setSourceStaNo1((short)0); // 源站 commandAvoidanceXY.setDestinationStaNo1(slave.getId()==1? (short) 101:(short)116); // 目标站 commandAvoidanceXY.setTaskNo2((short) 0); // 工作号 commandAvoidanceXY.setAckFinish2((short) 1); // 任务完成确认位 commandAvoidanceXY.setTaskMode2(RgvTaskModeType.X_MOVE); // 任务模式 commandAvoidanceXY.setSourceStaNo2((short)0); // 源站 commandAvoidanceXY.setDestinationStaNo2(slave.getId()==1? (short) 101:(short)117); // 目标站 commandAvoidanceXY.setCommand((short)0); write(commandAvoidanceXY); break; default: break; } Thread.sleep(500); } catch (Exception e) { log.error("RGV线程异常!!!"+e.getMessage()); // e.printStackTrace(); } @@ -140,14 +107,8 @@ } rgvProtocol.setMode((short) -1); rgvProtocol.setStatus((short)-1); rgvProtocol.setTaskNo1((short)0); rgvProtocol.setStatus1((short)-1); rgvProtocol.setLoaded1((short)0); rgvProtocol.setWalkPos((short)0); rgvProtocol.setRgvPos((short)0); rgvProtocol.setTaskNo2((short)0); rgvProtocol.setStatus2((short)-1); rgvProtocol.setLoaded2((short)0); rgvProtocol.setRgvPos(0L); rgvProtocol.setAlarm((short)0); rgvProtocol.setxSpeed((short) 0); rgvProtocol.setxDistance((short) 0); @@ -187,47 +148,21 @@ } rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0)); rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2)); rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4)); rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 6)); rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 8)); rgvProtocol.setRgvPos(RouteUtils.RgvPosSta(slave.getId(),siemensNet.getByteTransform().TransInt16(result.Content, 10))); rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12)); rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 14)); rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16)); rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 18)); rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 10)); rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); rgvProtocol.setHeart(siemensNet.getByteTransform().TransInt16(result.Content, 22)); rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24)); rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26)); rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28)); rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30)); rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32)); // rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28)); // rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40)); // rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // 工位1复位信号 if (rgvProtocol.getStatusType1().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType1().equals(RgvStatusType.FETCHWAITING)) { if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType().equals(RgvStatusType.FETCHWAITING)) { if (resetFlag1) { RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setAckFinish1((short)1); if (write(rgvCommand)) { resetFlag1 = false; } } } // 工位2复位信号 if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING) || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) { if (resetFlag2) { RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setAckFinish2((short)1); if (write(rgvCommand)) { resetFlag2 = false; } } } @@ -257,7 +192,7 @@ } /** * 工位1、2同时写入数据 * 写入数据 */ private boolean write(RgvCommand command) throws InterruptedException { if (null == command) { @@ -268,19 +203,13 @@ command.setRgvNo(slave.getId()); short[] array = new short[11]; array[0] = command.getAckFinish1(); array[1] = command.getTaskNo1(); array[2] = command.getTaskMode1(); array[3] = command.getSourceStaNo1(); array[4] = command.getDestinationStaNo1(); array[5] = command.getAckFinish2(); array[6] = command.getTaskNo2(); array[7] = command.getTaskMode2(); array[8] = command.getSourceStaNo2(); array[9] = command.getDestinationStaNo2(); array[1] = command.getTaskNo(); array[2] = command.getTaskMode(); // array[4] = command.getDestinationStaNo(); array[10] = command.getCommand(); OperateResult result = siemensNet.Write("DB100.0", array); if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) { if (command.getAckFinish1() == 0) { short commandFinish = 3; //工位1、2任务同时写入 Thread.sleep(100L); result = siemensNet.Write("DB100.20", commandFinish); @@ -290,15 +219,15 @@ // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getTaskNo1().intValue(), command.getTaskNo2().intValue(), command.getTaskNo().intValue(), command.getTaskNo().intValue(), command.getRgvNo(), new Date(), command.getTaskModeType1().toString(), command.getSourceStaNo1().intValue(), command.getDestinationStaNo1().intValue(), command.getSourceStaNo2().intValue(), command.getDestinationStaNo2().intValue(), command.getTaskModeType().toString(), null, null, null, command.getDestinationStaNo().intValue(), null, new Date(), null @@ -319,146 +248,9 @@ } } /** * 工位1写入数据 */ private boolean write1(RgvCommand command) throws InterruptedException { if (null == command) { log.error("RGV写入命令为空"); return false; } // siemensNet.Write("DB100.20", command.getCommand()); command.setRgvNo(slave.getId()); short[] array = new short[5]; array[0] = command.getAckFinish1(); array[1] = command.getTaskNo1(); array[2] = command.getTaskMode1();//任务模式 array[3] = command.getSourceStaNo1(); array[4] = command.getDestinationStaNo1(); // siemensNet.Write("DB100.20", 0); OperateResult result = siemensNet.Write("DB100.0", array); if (command.getAckFinish1() == 0) { short commandFinish = 1; //工位1任务写入 Thread.sleep(100L); result = siemensNet.Write("DB100.20", commandFinish); } try { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getTaskNo1().intValue(), command.getTaskNo2().intValue(), command.getRgvNo(), new Date(), command.getTaskModeType1().toString(), command.getSourceStaNo1().intValue(), command.getDestinationStaNo1().intValue(), command.getSourceStaNo2().intValue(), command.getDestinationStaNo2().intValue(), null, new Date(), null ); bean.insert(basRgvOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { Thread.sleep(200); this.readStatus(); log.info("RGV 工位1命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位1命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); return true; } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc工位1数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); log.error("写入RGV plc工位1数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } } /** * 工位2写入数据 */ private boolean write2(RgvCommand command) throws InterruptedException { if (null == command) { log.error("RGV写入命令为空"); return false; } command.setRgvNo(slave.getId()); short[] array = new short[6]; array[0] = command.getAckFinish2();//任务完成确认位 array[1] = command.getTaskNo2();//任务号 array[2] = command.getTaskMode2();//任务模式 array[3] = command.getSourceStaNo2();//源站 array[4] = command.getDestinationStaNo2();//目标站 array[5] = command.getCommand();//任务下发确认 OperateResult result = siemensNet.Write("DB100.10", array); if (command.getAckFinish2() == 0) { short commandFinish = 2; //工位2任务写入 Thread.sleep(100L); result = siemensNet.Write("DB100.20", commandFinish); } try { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getTaskNo1().intValue(), command.getTaskNo2().intValue(), command.getRgvNo(), new Date(), command.getTaskModeType1().toString(), command.getSourceStaNo1().intValue(), command.getDestinationStaNo1().intValue(), command.getSourceStaNo2().intValue(), command.getDestinationStaNo2().intValue(), null, new Date(), null ); bean.insert(basRgvOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { Thread.sleep(200); this.readStatus(); log.info("RGV 工位2命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 工位2命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); return true; } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc工位2数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); log.error("写入RGV plc工位2数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } } @Override public void close() { siemensNet.ConnectClose(); } /******************************************************************************************/ /**************************************** 测试专用 *****************************************/ /*****************************************************************************************/ public static void main(String[] args) throws InterruptedException { RgvSlave slave = new RgvSlave(); slave.setId(1); slave.setIp("192.168.6.9"); slave.setRack(0); slave.setSlot(0); RgvThread rgvThread = new RgvThread(slave); rgvThread.connect(); rgvThread.readStatus(); System.out.println(JSON.toJSONString(rgvThread.rgvProtocol)); Thread.sleep(3000L); } } src/main/resources/application.yml
@@ -47,6 +47,14 @@ licensePath: license.lic publicKeysStorePath: publicCerts.keystore constant-parameters: # 轨道总长 trackEntireLength: 1737000 # 轨道基准点 trackBenchmark: 1 # 轨道转换为米比例 trackProportion: 10000 wms: # 是否开启上报 start: true src/main/resources/mapper/ApiConfigMapper.xml
@@ -17,10 +17,10 @@ <sql id="batchSeq"> <if test="id != null and id != 0"> and a.ID = #{id} and ID = #{id} </if> <if test="url != null and url != ''"> and a.URL = #{url} and URL = #{url} </if> </sql> src/main/resources/mapper/DeviceErrorMapper.xml
@@ -13,13 +13,13 @@ <sql id="batchSeq"> <if test="id != null and id != 0"> and a.ID = #{id} and ID = #{id} </if> <if test="device != null and device != ''"> and a.DEVICE = #{device} and DEVICE = #{device} </if> <if test="deviceId != null and deviceId != 0"> and a.DEVICE_ID = #{deviceId} and DEVICE_ID = #{deviceId} </if> </sql> src/main/resources/mapper/LocDetlMapper.xml
@@ -27,7 +27,7 @@ <result column="ITEM_NUM" property="itemNum" /> <result column="SAFE_QTY" property="safeQty" /> <result column="WEIGHT" property="weight" /> <result column="LENGTH" property="length" /> <result column="MAN_LENGTH" property="manLength" /> <result column="VOLUME" property="volume" /> <result column="THREE_CODE" property="threeCode" /> <result column="SUPP" property="supp" /> src/main/resources/mapper/LocMastMapper.xml
@@ -63,31 +63,29 @@ </sql> <select id="selectLocMastListSix" resultMap="BaseResultMap"> SELECT * FROM "SOURCE"."sys_role" SELECT * FROM "SOURCE"."asr_loc_mast" WHERE 1=1 <include refid="batchSeq"></include> ORDER BY ID DESC LIMIT #{pageSize} OFFSET ((#{pageNumber} - 1) * #{pageSize}); </select> <select id="selectLocMastListTotalSix" resultType="Long"> SELECT count(1) FROM "SOURCE"."sys_role" SELECT count(1) FROM "SOURCE"."asr_loc_mast" WHERE 1=1 <include refid="batchSeq"></include> </select> <select id="selectLocMastList" resultMap="BaseResultMap"> SELECT * FROM "SOURCE"."sys_role" SELECT * FROM "SOURCE"."asr_loc_mast" WHERE 1=1 <if test="locNo != null and locNo != ''"> and LOC_NO like '%' + #{locNo} + '%' </if> ORDER BY ID DESC LIMIT #{pageSize} OFFSET ((#{pageNumber} - 1) * #{pageSize}); </select> <select id="selectLocMastListTotal" resultType="Long"> SELECT count(1) FROM "SOURCE"."sys_role" SELECT count(1) FROM "SOURCE"."asr_loc_mast" WHERE 1=1 <if test="locNo != null and locNo != ''"> and LOC_NO like '%' + #{locNo} + '%'