zy-asrs-flow/src/app.jsx
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -28,13 +28,17 @@ import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol; import com.zy.asrs.wcs.rcs.service.DeviceService; import com.zy.asrs.wcs.rcs.thread.*; import com.zy.asrs.wcs.rcs.thread.DevpThread; import com.zy.asrs.wcs.rcs.thread.LedThread; import com.zy.asrs.wcs.rcs.thread.LiftThread; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; import com.zy.asrs.wcs.system.entity.Dict; import com.zy.asrs.wcs.system.service.DictService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** @@ -89,6 +93,71 @@ @Autowired private ShuttleStandbyService shuttleStandbyService; private boolean isInEnable(DevpThread devpThread, Integer staNo) { if (staNo == null) { return false; } // 获取入库站信息 switch (staNo) { case 1011: case 1012: devpThread.getStation().get(1012).isInEnable(); break; case 1021: case 1022: case 1023: devpThread.getStation().get(1022).isInEnable(); break; case 1031: case 1032: devpThread.getStation().get(1032).isInEnable(); break; case 1025: case 1026: devpThread.getStation().get(1025).isInEnable(); break; case 1013: case 1014: case 1015: devpThread.getStation().get(1014).isInEnable(); break; } return false; } private boolean isOutEnable(DevpThread devpThread, Integer staNo) { if (staNo == null) { return false; } // 获取入库站信息 switch (staNo) { case 1011: case 1012: devpThread.getStation().get(1012).isOutEnable(); break; case 1021: case 1022: case 1023: devpThread.getStation().get(1022).isOutEnable(); break; case 1031: case 1032: devpThread.getStation().get(1032).isOutEnable(); break; case 1025: case 1026: devpThread.getStation().get(1025).isOutEnable(); break; case 1013: case 1014: case 1015: devpThread.getStation().get(1014).isOutEnable(); break; } return false; } /** * 组托 * 入库站,根据条码扫描生成入库工作档,工作状态 2 @@ -104,7 +173,7 @@ // 遍历入库口 for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) { BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString()); if(basConveyorSta == null) { if (basConveyorSta == null) { continue; } @@ -160,7 +229,7 @@ // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk() ) { @@ -197,7 +266,7 @@ if (task1 != null) { News.error("工作档已存在,工作号={}", task1.getTaskNo()); if (staProtocol.getWorkNo().intValue() != Integer.parseInt(task1.getTaskNo())) { devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getOriginSite())); devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getDestSite())); devpThread.setPakMk(staProtocol.getSiteId(), false); News.info("输送线入库命令下发,任务数据={}", JSON.toJSON(task1)); } @@ -262,7 +331,7 @@ // } redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + inSta.getStaNo(), "in", 10); }else { } else { String msg = jsonObject.getString("msg"); HashMap<String, String> hashMap = new HashMap<>(); hashMap.put("msg", msg); @@ -339,10 +408,10 @@ mapNode.setXBase(object.getInteger("refx")); mapNode.setYBase(object.getInteger("refy")); if(mapNode.getValue() == MapNodeType.CONVEYOR.id) { if (mapNode.getValue() == MapNodeType.CONVEYOR.id) { //输送线,判断小车是否可走 if (object.containsKey("conveyorHasGo")) { if(object.getBoolean("conveyorHasGo")) { if (object.getBoolean("conveyorHasGo")) { //小车可走 mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id); } @@ -436,7 +505,7 @@ ArrayList<MapNode> headNodes = new ArrayList<>(); ArrayList<MapNode> footerNodes = new ArrayList<>(); for (int i = 0; i < row+2; i++) { for (int i = 0; i < row + 2; i++) { headNodes.add(mapNode.clone()); footerNodes.add(mapNode.clone()); } @@ -473,7 +542,7 @@ // 遍历入库口 for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) { BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString()); if(basConveyorSta == null) { if (basConveyorSta == null) { continue; } @@ -485,94 +554,93 @@ } else { staProtocol = staProtocol.clone(); } int workNo = staProtocol.getWorkNo().intValue(); int workNo = 0; // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && (workNo >= 0) // && staProtocol.isPakMk() ) { if ((staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1023 || staProtocol.getSiteId() == 1026 || staProtocol.getSiteId() == 1032) && staProtocol.isAutoing() && staProtocol.isLoading()) { workNo = staProtocol.getFinishWorkNo().intValue(); } else if ((staProtocol.getSiteId() == 1012) && staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) { workNo = staProtocol.getWorkNo().intValue(); } else { continue; } Task task = taskService.getOne(new LambdaQueryWrapper<Task>() .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts) .eq(Task::getTaskNo, workNo)); if (task != null) { if (!Cools.isEmpty(task.getLiftNo())) { if (task.getLiftNo() > 0) { task.setLiftNo(0); task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { News.info("{}任务更新释放提升机失败", task.getTaskNo()); } } } //获取距离目标位置最近的可换层提升机(可能不空闲) LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true); if (liftThread == null) { continue; } Device transferLiftDevice = liftThread.getDevice(); //获取小车待机库位 ==> 进提升机 ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc())) .eq(ShuttleStandby::getStatus, 1)); //穿梭车进提升机库位号 String liftLocNoTo = shuttleStandbyTo.getDeviceLoc(); //穿梭车进提升机待机位库位号 输送线位置 String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc(); //不走提升机 if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) { standbyLocNoTo = staProtocol.getLocNo(); } if (Cools.isEmpty(task.getShuttleNo())) { //分配小车 //调度空闲车去取货待机位 Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo); if (shuttleDevice == null) { News.info("{}任务未找到空闲穿梭车", task.getTaskNo()); continue; } task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//保存穿梭车号 Task task = taskService.getOne(new LambdaQueryWrapper<Task>() .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts) .eq(Task::getTaskNo, workNo)); if (task != null) { if (!Cools.isEmpty(task.getLiftNo())) { if (task.getLiftNo() > 0) { task.setLiftNo(0); task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { News.info("{}任务更新穿梭车号失败", task.getTaskNo()); News.info("{}任务更新释放提升机失败", task.getTaskNo()); } continue; } //判断小车是否到达取货待机位置 String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId()); if (shuttleLocNo == null) { continue; } if (!standbyLocNoTo.equals(shuttleLocNo)) { continue; } // generate motion list List<Motion> motionList = analyzeService.generateMotion(task); if (motionList.isEmpty()) { continue; } motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); // 更新工作主档 task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 工作状态 task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { News.error("更新工作档失败!!! [工作号:{}]", task.getTaskNo()); } break; } //获取距离目标位置最近的可换层提升机(可能不空闲) LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true); if (liftThread == null) { continue; } Device transferLiftDevice = liftThread.getDevice(); //获取小车待机库位 ==> 进提升机 ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId()) .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc())) .eq(ShuttleStandby::getStatus, 1)); //穿梭车进提升机库位号 String liftLocNoTo = shuttleStandbyTo.getDeviceLoc(); //穿梭车进提升机待机位库位号 输送线位置 String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc(); //不走提升机 if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) { standbyLocNoTo = staProtocol.getLocNo(); } if (Cools.isEmpty(task.getShuttleNo())) { //分配小车 //调度空闲车去取货待机位 Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo); if (shuttleDevice == null) { News.info("{}任务未找到空闲穿梭车", task.getTaskNo()); continue; } task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//保存穿梭车号 task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { News.info("{}任务更新穿梭车号失败", task.getTaskNo()); } continue; } //判断小车是否到达取货待机位置 String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId()); if (shuttleLocNo == null) { continue; } if (!standbyLocNoTo.equals(shuttleLocNo)) { continue; } // generate motion list List<Motion> motionList = analyzeService.generateMotion(task); if (motionList.isEmpty()) { continue; } motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId()); // 更新工作主档 task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 工作状态 task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { News.error("更新工作档失败!!! [工作号:{}]", task.getTaskNo()); } break; } } } @@ -678,7 +746,7 @@ } BasConveyor basConveyor = basConveyorService.getById(destStaObj.getConveyorId()); if(basConveyor == null) { if (basConveyor == null) { continue; } @@ -1069,8 +1137,8 @@ staProtocol = staProtocol.clone(); } String taskNo = "0"; if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001 ){ if (0 != staProtocol.getWorkNo()){ if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001) { if (0 != staProtocol.getWorkNo()) { Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, 9).eq(Motion::getTemp, staProtocol.getWorkNo())); // 获取工作档数据 Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo())); @@ -1092,7 +1160,7 @@ HashMap<String, Object> param = new HashMap<>(); param.put("taskNo", taskNo); param.put("sta",staNo); param.put("sta", staNo); String response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath("/rpc/led/getTask") @@ -1174,7 +1242,9 @@ for (Integer staNo : staArr) { // 获取叉车站点 StaProtocol staProtocol = devpThread.getStation().get(staNo); if (staProtocol == null) { continue; } if (staProtocol == null) { continue; } if (staProtocol.getWorkNo() != 0) { reset = false; break; zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -74,7 +74,7 @@ } } ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScriptPath, maps, startStr, targetStr, mapDirection); ProcessBuilder processBuilder = new ProcessBuilder("python3", pythonScriptPath, maps, startStr, targetStr, mapDirection); processBuilder.redirectErrorStream(true); try { zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateUtils.java
@@ -380,7 +380,7 @@ second.add(new int[]{node.getX(), node.getY()}); } ProcessBuilder processBuilder = new ProcessBuilder("python", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second)); ProcessBuilder processBuilder = new ProcessBuilder("python3", pythonCalcSimilarity, JSON.toJSONString(first), JSON.toJSONString(second)); processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/ServerBootstrap.java
@@ -88,6 +88,7 @@ Constructor<?> constructor = clazz.getConstructor(Device.class, RedisUtil.class); Object instance = constructor.newInstance(device, redisUtil); new Thread((Runnable) instance).start(); SlaveConnection.put(SlaveType.findInstance(type.getFlag()), device.getId().intValue(), (ThreadHandler) instance); } catch (Exception e) { e.printStackTrace(); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/FyxcDevpThread.java
@@ -47,11 +47,31 @@ public static ArrayList<BasConveyorSta> stationList = new ArrayList<>(); public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ add(1012);add(1014);add(1015);add(1022); add(1023);add(1025);add(1026);add(1031); add(1012); add(1014); add(1015); add(1022); add(1023); add(1025); add(1026); add(1031); add(1032); }}; public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ add(1011); add(1012); add(1013); add(1014); add(1015); add(1021); add(1022); add(1023); add(1024); add(1025); add(1026); add(1031); add(1032); }}; /** @@ -84,7 +104,7 @@ BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>() .eq(BasConveyor::getDeviceId, device.getId()) .eq(BasConveyor::getHostId, device.getHostId())); if(basConveyor != null) { if (basConveyor != null) { List<BasConveyorSta> stations = basConveyorStaService.list(new LambdaQueryWrapper<BasConveyorSta>() .eq(BasConveyorSta::getConveyorId, basConveyor.getId()) .eq(BasConveyorSta::getHostId, device.getHostId())); @@ -128,14 +148,14 @@ if (siteId == 1015) { staProtocol.setLocNo("1200301"); }else if (siteId == 1026) { } else if (siteId == 1026) { staProtocol.setLocNo("1200305"); } station.put(siteId, staProtocol); } Thread.sleep(300); boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*26, 2); boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 26, 2); staProtocol.setAutoing(status[0]); // 自动 staProtocol.setIdle(status[1]); //空闲 staProtocol.setLoading(status[2]); // 有物 @@ -151,15 +171,15 @@ staProtocol.setOutEnable(status[14]);// 可出 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*26+2)); // 工作号 staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*26+6)); //已完成工作号 staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*26+10,12, "UTF-8").trim()); //条码 staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i*26+22)); //重量 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2)); // 工作号 staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4)); // 目标站 staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 6)); //已完成工作号 staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content, i * 26 + 10, 12, "UTF-8").trim()); //条码 staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 26 + 22)); //重量 // staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 工作模式 staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10)); // 工作号 staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 12)); // 目标站 //staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10)); // 工作号 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); @@ -170,7 +190,7 @@ OperateResultExOne<byte[]> resultBarcode = siemensS7Net.Read("DB100.166", (short) 9); if (resultBarcode.IsSuccess) { //条码数据 String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content,0,9, "UTF-8");// 条码 String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content, 0, 9, "UTF-8");// 条码 BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class); DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class); BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, 31002)); @@ -187,7 +207,7 @@ if (!Cools.isEmpty(result) && result.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), device.getId())); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), device.getId())); // 根据实时信息更新数据库 try { @@ -224,12 +244,12 @@ siemensS7Net.setRack(device.getRack().byteValue()); siemensS7Net.setSlot(device.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ if (connect.IsSuccess) { result = true; OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); News.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort()); } else { OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); News.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort()); } // siemensS7Net.ConnectClose(); @@ -246,44 +266,45 @@ int index = staNos1.indexOf(siteId); index += 1; OperateResult write = siemensS7Net.Write("DB83." + (index *8+6),(int) workNo); // 工作号 OperateResult write = siemensS7Net.Write("DB83." + (index * 8 + 6), (int) workNo); // 工作号 if (!write.IsSuccess) { StaProtocol staProtocol = station.get(siteId); if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) { staProtocol.setPakMk(true); } OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", device.getId(), JSON.toJSON(staProtocol))); log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", device.getId(), JSON.toJSON(staProtocol)); } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(workNo))); log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(workNo)); log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(workNo)); return true; } return false; } @Override public boolean writeStaNo(int siteId,short staNo) { public boolean writeStaNo(int siteId, short staNo) { int index = staNos1.indexOf(siteId); index += 1; OperateResult write = siemensS7Net.Write("DB101." + (index * 8 + 4),(int) staNo); // 目标站 OperateResult write = siemensS7Net.Write("DB101." + (index * 8 + 4), (int) staNo); // 目标站 if (!write.IsSuccess) { StaProtocol staProtocol = station.get(siteId); if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) { staProtocol.setPakMk(true); } OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", device.getId(), JSON.toJSON(staProtocol))); log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", device.getId(), JSON.toJSON(staProtocol)); } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(staNo))); log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(staNo)); log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(staNo)); return true; } return false; } @Override public boolean writeWorkSta(int siteId, short workNo, short staNo) { @@ -294,37 +315,42 @@ array[0] = workNo; array[1] = staNo; String workNoAddress = "DB83." + (index * 8 + 6); String staNoAddress = "DB83." + (index * 8 + 4); String workNoAddress = "DB83." + (index * 8 + 6); OperateResult write1 = null; // 工作号 OperateResult write2 = null; // 目标站 //任务下发次数 int writeCount = 0; do { write1 = siemensS7Net.Write(workNoAddress, workNo); // 工作号 write1 = siemensS7Net.Write(workNoAddress, workNo); // 工作号 write2 = siemensS7Net.Write(staNoAddress, staNo); if ((write1.IsSuccess && write2.IsSuccess)) { OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8); if (readResult.IsSuccess) { int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); if (workNo == workNo2 && staNo == staNo2) { //任务命令写入成功 log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); return true; } else {//返回结果是成功了,但是真实值不相同 writeCount++; log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); } } else { writeCount++; log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); } }else { log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); return true; // OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26)); // //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8); // if (readResult.IsSuccess) { // int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); // 工作号 // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // 目标站 // // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); // //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); // if (workNo == workNo2 && staNo == staNo2) { // //任务命令写入成功 // log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); // return true; // } else {//返回结果是成功了,但是真实值不相同 // writeCount++; // log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); // } // } else { // writeCount++; // log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},{},写入次数={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); // } } else { writeCount++; } }while (writeCount < 5) ; } while (writeCount < 5); // StaProtocol staProtocol = station.get(siteId); // if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { // staProtocol.setPakMk(true); @@ -380,7 +406,7 @@ @Override public boolean switchWorkMode(int siteId, int workMode) { WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId); if(workModeTypeDto == null) { if (workModeTypeDto == null) { return false; } zy-asrs-wcs/src/main/resources/application.yml
@@ -20,7 +20,7 @@ # password: zy@123 url: jdbc:mysql://127.0.0.1:3306/fyxcasrs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: root password: zhangchao # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs # username: sa @@ -63,5 +63,5 @@ config: token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2 pythonCalcPath: D:\\path\\cpu.py pythonCalcSimilarity: D:\\path\\similarity.py pythonCalcPath: /Users/zhangc/workspace/zoneyang/cpu.py pythonCalcSimilarity: /Users/zhangc/workspace/zoneyang/similarity.py