| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; |
| | | import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.base.entity.HollowBigStorageCageBaseInfo; |
| | |
| | | import com.mes.hollowqueue.service.HollowGlassQueueInfoService; |
| | | import com.mes.hollowtask.entity.HollowBigStorageCageHistoryTask; |
| | | import com.mes.hollowtask.service.HollowBigStorageCageHistoryTaskService; |
| | | import com.mes.s7.entity.S7DataZKDLPOne; |
| | | import com.mes.s7.entity.S7DataZKDLPTwo; |
| | | import com.mes.s7.entity.S7DataZKExtra; |
| | | import com.mes.sysconfig.service.SysConfigService; |
| | | import com.mes.temperingglass.entity.TemperingGlassInfo; |
| | | import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | @Resource |
| | | private SysConfigService sysConfigService; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerZKDLPOne") |
| | | private S7Serializer s7SerializerZKDLPOne; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerZKDLPTwo") |
| | | private S7Serializer s7SerializerZKDLPTwo; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerZKQ2") |
| | | private S7Serializer s7SerializerZKQ2; |
| | | |
| | | @Autowired |
| | | @Qualifier("CMJ1ModbusTcp") |
| | | ModbusTcp CMJ1ModbusTcp; |
| | | |
| | | private static final String BIG_STORAGE_CAGE_IN_TWO_TASK = "big_storage_cage_in_two_task"; |
| | | private static final String BIG_STORAGE_CAGE_OUT_TWO_TASK = "big_storage_cage_out_two_task"; |
| | | |
| | | private static final List<Integer> ONE_LINE_FIRST = Arrays.asList(930, 931, 932); |
| | | private static final List<Integer> TWO_LINE_FIRST = Arrays.asList(931, 930, 932); |
| | | |
| | | /** |
| | | * 直通格子 |
| | | */ |
| | |
| | | @Resource |
| | | private RedisUtil redisUtil; |
| | | |
| | | // @Value("${mes.slotWidth}") |
| | | // private Integer slotWidth; |
| | | // |
| | | // @Value("${mes.glassGap}") |
| | | // private Integer glassGap; |
| | | // |
| | | // @Value("${mes.carWidth}") |
| | | // private Integer carWidth; |
| | | // |
| | | // @Value("${mes.outCarMaxSize}") |
| | | // private Integer outCarMaxSize; |
| | | // |
| | | // @Value("${mes.slotMaxHeight}") |
| | | // private Integer slotMaxHeight; |
| | | // @Value("${mes.slotMaxthickness}") |
| | | // private Integer slotMaxthickness; |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void inBigStorageTask() throws Exception { |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl"); |
| | | if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { |
| | | public void inBigStorageTask() { |
| | | S7DataZKDLPOne s7DataZKDLPOne = s7SerializerZKDLPOne.read(S7DataZKDLPOne.class); |
| | | log.info("进片任务读取s7DataZKDLPOne:{}", s7DataZKDLPOne); |
| | | Boolean inkageEntity = s7DataZKDLPOne.getMesControl(); |
| | | if (!inkageEntity) { |
| | | log.info("当前为非联机状态,结束进片任务"); |
| | | return; |
| | | } |
| | | ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2A.DLP2A.RequestMes"); |
| | | if (!"1".equals(requestEntity.getValue() + "")) { |
| | | Integer requestEntity = s7DataZKDLPOne.getRequestMes(); |
| | | if (1 != requestEntity) { |
| | | log.info("当前未收到进片请求,结束进片任务"); |
| | | return; |
| | | } |
| | | ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP2A.DLP2A.MesReply"); |
| | | if ("1".equals(mesReplyEntity.getValue() + "")) { |
| | | Integer mesReplyEntity = s7DataZKDLPOne.getMesReply(); |
| | | if (1 == mesReplyEntity) { |
| | | log.info("有正在执行的任务,结束进片任务"); |
| | | return; |
| | | } |
| | | |
| | | List<BigStorageCageTask> inTaskList = new ArrayList(); |
| | | ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP2A.DLP2A.FROM1"); |
| | | Integer from = s7DataZKDLPOne.getFrom1(); |
| | | List<String> glassIdList = new ArrayList<>(); |
| | | List<String> requestWords = s7DataZKDLPOne.getIds(); |
| | | for (int i = 1; i <= 6; i++) { |
| | | ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP2A.DLP2A.DI" + i); |
| | | if (null != requestWord.getValue()) { |
| | | String requestWord = requestWords.get(i - 1); |
| | | if (null != requestWord && !requestWord.isEmpty()) { |
| | | BigStorageCageTask task = new BigStorageCageTask(); |
| | | task.setGlassId(requestWord.getValue() + ""); |
| | | task.setStartSlot(Integer.parseInt(fromOpcUa.getValue() + "")); |
| | | task.setGlassId(requestWord); |
| | | task.setStartSlot(from); |
| | | inTaskList.add(task); |
| | | glassIdList.add(requestWord.getValue() + ""); |
| | | glassIdList.add(requestWord); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | if (entry.getValue() > 1) { |
| | | log.info("进片玻璃{}存在相同,结束本次任务", entry.getKey()); |
| | | //向plc发送报警:同一车进片玻璃存在相同 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.alarmSignal", 2)); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(2); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | return; |
| | | } |
| | | } |
| | |
| | | if (CollectionUtil.isNotEmpty(detailsList)) { |
| | | log.info("理片笼存在相同的进片玻璃{},结束本次任务", detailsList); |
| | | //向plc发送报警:理片笼存在相同的进片玻璃 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.alarmSignal", 4)); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(4); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | return; |
| | | } |
| | | List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); |
| | |
| | | if (glassInfoList.size() != inTaskList.size()) { |
| | | log.info("进片任务数量{}与玻璃数量{}不匹配,结束本次进片", inTaskList.size(), glassInfoList.size()); |
| | | //向plc发送报警:进片任务数量与系统查询到的玻璃数量不匹配 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.alarmSignal", 8)); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(8); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | return; |
| | | } |
| | | |
| | | Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH); |
| | | Integer slotMaxThickness = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_MAX_THICKNESS); |
| | | //按照玻璃厚度分组,判断剩余格子是否可以存放 |
| | | Map<Double, Long> thickCountMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getThickness, Collectors.counting())); |
| | | for (Map.Entry<Double, Long> entry : thickCountMap.entrySet()) { |
| | | int count = hollowBigStorageCageService.count(new LambdaQueryWrapper<HollowBigStorageCage>() |
| | | .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth) |
| | | .le(HollowBigStorageCage::getMinThickness, entry.getKey()) |
| | | .ge(HollowBigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | | log.info("笼内格子剩余数量不足,结束本次进片"); |
| | | //向plc发送报警:笼内格子剩余数量不足 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.alarmSignal", 16)); |
| | | return; |
| | | if (glassInfoList.get(0).getThickness() < slotMaxThickness) { |
| | | for (Map.Entry<Double, Long> entry : thickCountMap.entrySet()) { |
| | | int count = hollowBigStorageCageService.count(new LambdaQueryWrapper<HollowBigStorageCage>() |
| | | .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth) |
| | | .le(HollowBigStorageCage::getMinThickness, entry.getKey()) |
| | | .ge(HollowBigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | | log.info("笼内格子剩余数量不足,结束本次进片"); |
| | | //向plc发送报警:笼内格子剩余数量不足 |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | //超大尺寸 |
| | |
| | | if (count > 0) { |
| | | log.info("直通片台存在玻璃,结束本次进片"); |
| | | //向plc发送报警:直通片台存在玻璃,无法继续直通 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.alarmSignal", 64)); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(64); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | return; |
| | | } |
| | | } |
| | |
| | | |
| | | Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP); |
| | | try { |
| | | log.info("开始计算目标格子,玻璃id有:{}", inTaskList); |
| | | if (slotMaxHeight > Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight()) && glassInfoList.get(0).getThickness() < slotMaxthickness) { |
| | | for (BigStorageCageTask task : inTaskList) { |
| | | GlassInfo info = glassListMap.get(task.getGlassId()).get(0); |
| | | HollowBigStorageDTO bigStorageDTO = hollowGlassRelationInfoService.queryHollowTargetSlot(info.getFlowCardId(), |
| | | HollowBigStorageDTO bigStorageDTO = hollowGlassRelationInfoService.queryHollowTargetSlot(info.getFlowCardId(), info.getGlassType(), |
| | | info.getWidth(), info.getHeight(), info.getTotalLayer(), info.getLayer()); |
| | | // 临时更新格子的剩余尺寸:防止相邻玻璃进同一格子造成剩余尺寸不足,玻璃越界的情况,任务完成后再次更新大理片笼表剩余宽度(按照笼内玻璃数量更新大理片笼剩余尺寸) |
| | | hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>() |
| | |
| | | .eq(HollowBigStorageCage::getSlot, bigStorageDTO.getSlot())); |
| | | task.setTargetSlot(bigStorageDTO.getSlot()); |
| | | task.setGlassId(info.getGlassId()); |
| | | bigStorageCageTaskService.updateTaskMessage(BIG_STORAGE_CAGE_IN_TWO_TASK, task); |
| | | //存放历史任务 |
| | | HollowBigStorageCageHistoryTask historyTask = new HollowBigStorageCageHistoryTask(); |
| | | BeanUtils.copyProperties(task, historyTask); |
| | |
| | | } else { |
| | | BigStorageCageTask task = inTaskList.get(0); |
| | | task.setTargetSlot(THROUGH_SLOT); |
| | | bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_two_task", task); |
| | | //存放历史任务 |
| | | HollowBigStorageCageHistoryTask historyTask = new HollowBigStorageCageHistoryTask(); |
| | | BeanUtils.copyProperties(task, historyTask); |
| | |
| | | } |
| | | } catch (Exception exception) { |
| | | log.info("进片任务执行中发生异常:{}", exception); |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | | .set(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_TAKE) |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_NEW)); |
| | | |
| | | hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() |
| | | .set(HollowGlassRelationInfo::getGlassId, null) |
| | | .set(HollowGlassRelationInfo::getTemperingLayoutId, null) |
| | |
| | | .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW) |
| | | .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) |
| | | ); |
| | | //将格子尺寸恢复 |
| | | hollowBigStorageCageService.resetCage(); |
| | | return; |
| | | } |
| | | //历史数据入库 |
| | | hollowBigStorageCageHistoryTaskService.saveBatch(historyTasks); |
| | | //向opc发送启动信号 |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | for (int i = 1; i <= inTaskList.size(); i++) { |
| | | list.add(generateReadWriteEntity("DLP2A.DLP2A.TO" + i, inTaskList.get(i - 1).getTargetSlot())); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | for (int i = 0; i < inTaskList.size() && i < 6; i++) { |
| | | Integer value = inTaskList.get(i).getTargetSlot(); |
| | | switch (i) { |
| | | case 0: |
| | | s7DataZKDLPOne.setTo1(value); |
| | | break; |
| | | case 1: |
| | | s7DataZKDLPOne.setTo2(value); |
| | | break; |
| | | case 2: |
| | | s7DataZKDLPOne.setTo3(value); |
| | | break; |
| | | case 3: |
| | | s7DataZKDLPOne.setTo4(value); |
| | | break; |
| | | case 4: |
| | | s7DataZKDLPOne.setTo5(value); |
| | | break; |
| | | case 5: |
| | | s7DataZKDLPOne.setTo6(value); |
| | | break; |
| | | } |
| | | } |
| | | list.add(generateReadWriteEntity("DLP2A.DLP2A.MesReply", 1)); |
| | | miloService.writeToOpcWord(list); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setMesReply(1); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void outBigStorageTask() throws Exception { |
| | | Date startDate = new Date(); |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl"); |
| | | if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { |
| | | S7DataZKDLPTwo s7DataZKDLPTwo = s7SerializerZKDLPTwo.read(S7DataZKDLPTwo.class); |
| | | log.info("出片任务读取s7DataZKDLPTwo:{}", s7DataZKDLPTwo); |
| | | Boolean inkageEntity = s7DataZKDLPTwo.getMesControl(); |
| | | if (!inkageEntity) { |
| | | log.info("当前为非联机状态,结束进片任务"); |
| | | return; |
| | | } |
| | | ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2B.DLP2B.RequestMes"); |
| | | if (!"1".equals(requestEntity.getValue() + "")) { |
| | | Integer requestEntity = s7DataZKDLPTwo.getRequestMes(); |
| | | if (1 != requestEntity) { |
| | | log.info("当前未收到出片请求,结束出片任务"); |
| | | return; |
| | | } |
| | | //获取出片任务表 |
| | | List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage(BIG_STORAGE_CAGE_OUT_TWO_TASK); |
| | | List<BigStorageCageTask> outTaskList = getOutTaskList(s7DataZKDLPTwo); |
| | | if (CollectionUtil.isNotEmpty(outTaskList)) { |
| | | log.info("有正在执行的出片任务,结束本次出片任务"); |
| | | return; |
| | | } |
| | | |
| | | //获取所有空闲的线路信息 |
| | | HashMap<Integer, Boolean> map = new HashMap<>(); |
| | | //获取空闲且领取任务的数据信息,没有任务直接走玻璃调度 |
| | | HashMap<Integer, ReadWriteEntity> map = new HashMap<>(); |
| | | ReadWriteEntity oneEntity = miloService.readFromOpcUa("CMJ1.CMJ1.isFree"); |
| | | ReadWriteEntity twoEntity = miloService.readFromOpcUa("ZKQ2.ZKQ2.isFree"); |
| | | ReadWriteEntity threeEntity = miloService.readFromOpcUa("ZKQ2.ZKQ2.isFree03"); |
| | | map.put(930, oneEntity); |
| | | map.put(931, twoEntity); |
| | | map.put(932, threeEntity); |
| | | try { |
| | | if (CMJ1ModbusTcp.checkConnected()) { |
| | | Boolean oneState = CMJ1ModbusTcp.readUInt16(42027 - 40001) != 0; |
| | | map.put(930, oneState); |
| | | } else { |
| | | map.put(930, Boolean.FALSE); |
| | | } |
| | | } catch (Exception e) { |
| | | //nothing |
| | | log.info("一线空闲状态获取异常"); |
| | | } |
| | | try { |
| | | S7DataZKExtra s7DataZKExtra = s7SerializerZKQ2.read(S7DataZKExtra.class); |
| | | log.info("中空额外读取{}", s7DataZKExtra); |
| | | map.put(931, s7DataZKExtra.getIsFree()); |
| | | map.put(932, s7DataZKExtra.getIsFree03()); |
| | | } catch (Exception e) { |
| | | //nothing |
| | | log.info("二/三线线空闲状态获取异常"); |
| | | } |
| | | List<Integer> resultList = new ArrayList<>(); |
| | | if (redisUtil.getCacheObject("priorityHollowSwitch")) { |
| | | resultList = TWO_LINE_FIRST; |
| | | } else { |
| | | resultList = ONE_LINE_FIRST; |
| | | } |
| | | |
| | | HollowGlassOutRelationInfo hollowGlassOutRelationInfo = null; |
| | | int cell = -1; |
| | | for (int i = 930; i <= 932; i++) { |
| | | for (Integer i : resultList) { |
| | | if (null == hollowGlassOutRelationInfo) { |
| | | ReadWriteEntity entity = map.get(i); |
| | | Boolean entity = map.get(i); |
| | | cell = i; |
| | | if (null != entity.getValue() && ("1".equals(entity.getValue() + "") || Boolean.parseBoolean(entity.getValue() + ""))) { |
| | | if (null != entity && entity) { |
| | | hollowGlassOutRelationInfo = hollowGlassOutRelationInfoService |
| | | .getOne(new LambdaQueryWrapper<HollowGlassOutRelationInfo>() |
| | | .eq(HollowGlassOutRelationInfo::getCell, cell) |
| | |
| | | break; |
| | | } |
| | | } |
| | | for (int i = 930; i <= 932; i++) { |
| | | for (Integer i : resultList) { |
| | | if (null == hollowGlassOutRelationInfo) { |
| | | cell = i; |
| | | hollowGlassOutRelationInfo = hollowGlassOutRelationInfoService |
| | |
| | | // 获取当前中空任务未完成出片的玻璃信息 |
| | | List<HollowGlassQueueInfo> unFinishHollowQueueList = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>() |
| | | .eq(HollowGlassQueueInfo::getFlowCardId, hollowGlassOutRelationInfo.getFlowCardId()) |
| | | .eq(HollowGlassQueueInfo::getCell, cell) |
| | | .eq(HollowGlassQueueInfo::getCell, hollowGlassOutRelationInfo.getCell()) |
| | | .eq(HollowGlassQueueInfo::getState, Const.TEMPERING_NEW) |
| | | .orderByAsc(HollowGlassQueueInfo::getHollowSequence)); |
| | | if (CollectionUtil.isNotEmpty(unFinishHollowQueueList)) { |
| | |
| | | .set(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_SUCCESS)); |
| | | } |
| | | } |
| | | // redisUtil.setCacheObject("dispatchHollowSwitch",true); |
| | | //是否存在需要内部调度的格子:执行内部调度任务 |
| | | if (redisUtil.getCacheObject("dispatchHollowSwitch")) { |
| | | //todo:获取笼内单格已经到齐的玻璃格子信息 |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void finishInBigStorageTask() throws Exception { |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl"); |
| | | if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { |
| | | S7DataZKDLPOne s7DataZKDLPOne = s7SerializerZKDLPOne.read(S7DataZKDLPOne.class); |
| | | Boolean inkageEntity = s7DataZKDLPOne.getMesControl(); |
| | | if (true != inkageEntity) { |
| | | log.info("当前为非联机状态,结束完成进片任务"); |
| | | return; |
| | | } |
| | | //获取进片任务表 |
| | | List<BigStorageCageTask> inTaskList = new ArrayList(); |
| | | List<String> glassIdList = new ArrayList<>(); |
| | | ReadWriteEntity toWord = miloService.readFromOpcUa("DLP2A.DLP2A.TO1"); |
| | | if ("0".equals(toWord.getValue() + "")) { |
| | | String toWord = s7DataZKDLPOne.getTo1().toString(); |
| | | if ("0".equals(toWord)) { |
| | | log.info("完成任务已执行,结束本次完成进片任务"); |
| | | return; |
| | | } |
| | | for (int i = 1; i <= 6; i++) { |
| | | ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP2A.DLP2A.DI" + i); |
| | | ReadWriteEntity statetWord = miloService.readFromOpcUa("DLP2A.DLP2A.STATE" + i); |
| | | ReadWriteEntity toOpcUa = miloService.readFromOpcUa("DLP2A.DLP2A.TO" + i); |
| | | ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP2A.DLP2A.FROM" + i); |
| | | String requestWord = ""; |
| | | String statetWord = ""; |
| | | String toOpcUa = ""; |
| | | String fromOpcUa = ""; |
| | | switch (i) { |
| | | case 1: |
| | | requestWord = s7DataZKDLPOne.getId1(); |
| | | statetWord = s7DataZKDLPOne.getState1().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo1().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom1().toString(); |
| | | break; |
| | | case 2: |
| | | requestWord = s7DataZKDLPOne.getId2(); |
| | | statetWord = s7DataZKDLPOne.getState2().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo2().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom2().toString(); |
| | | break; |
| | | case 3: |
| | | requestWord = s7DataZKDLPOne.getId3(); |
| | | statetWord = s7DataZKDLPOne.getState3().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo3().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom3().toString(); |
| | | break; |
| | | case 4: |
| | | requestWord = s7DataZKDLPOne.getId4(); |
| | | statetWord = s7DataZKDLPOne.getState4().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo4().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom4().toString(); |
| | | break; |
| | | case 5: |
| | | requestWord = s7DataZKDLPOne.getId5(); |
| | | statetWord = s7DataZKDLPOne.getState5().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo5().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom5().toString(); |
| | | break; |
| | | case 6: |
| | | requestWord = s7DataZKDLPOne.getId6(); |
| | | statetWord = s7DataZKDLPOne.getState6().toString(); |
| | | toOpcUa = s7DataZKDLPOne.getTo6().toString(); |
| | | fromOpcUa = s7DataZKDLPOne.getFrom6().toString(); |
| | | break; |
| | | } |
| | | |
| | | if (null != requestWord.getValue()) { |
| | | // if (null != requestWord.getValue()) { |
| | | if (null != requestWord && !requestWord.isEmpty()) { |
| | | BigStorageCageTask task = new BigStorageCageTask(); |
| | | task.setGlassId(requestWord.getValue() + ""); |
| | | task.setTargetSlot(Integer.parseInt(toOpcUa.getValue() + "")); |
| | | task.setTaskState(Integer.parseInt(statetWord.getValue() + "")); |
| | | task.setStartSlot(Integer.parseInt(fromOpcUa.getValue() + "")); |
| | | task.setGlassId(requestWord); |
| | | task.setTargetSlot(Integer.parseInt(toOpcUa)); |
| | | task.setTaskState(Integer.parseInt(statetWord)); |
| | | task.setStartSlot(Integer.parseInt(fromOpcUa)); |
| | | inTaskList.add(task); |
| | | glassIdList.add(requestWord.getValue() + ""); |
| | | glassIdList.add(requestWord); |
| | | continue; |
| | | } |
| | | } |
| | |
| | | .eq(HollowBigStorageCageHistoryTask::getGlassId, item.getGlassId())); |
| | | item.setTargetSlot(0); |
| | | //清空任务表数据 |
| | | bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", item); |
| | | // bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", item); |
| | | } |
| | | //清空启动状态 |
| | | //向opc发送启动信号 |
| | | //向opc发送启动信号 |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | for (int i = 1; i <= 6; i++) { |
| | | list.add(generateReadWriteEntity("DLP2A.DLP2A.TO" + i, 0)); |
| | | } |
| | | list.add(generateReadWriteEntity("DLP2A.DLP2A.MesReply", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setTo1(0); |
| | | s7DataZKDLPOne.setTo2(0); |
| | | s7DataZKDLPOne.setTo3(0); |
| | | s7DataZKDLPOne.setTo4(0); |
| | | s7DataZKDLPOne.setTo5(0); |
| | | s7DataZKDLPOne.setTo6(0); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setMesReply(0); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void finishOutBigStorageTask() throws Exception { |
| | | ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl"); |
| | | if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { |
| | | S7DataZKDLPTwo s7DataZKDLPTwo = s7SerializerZKDLPTwo.read(S7DataZKDLPTwo.class); |
| | | Boolean inkageEntity = s7DataZKDLPTwo.getMesControl(); |
| | | if (true != inkageEntity) { |
| | | log.info("当前为非联机状态,结束完成出片任务"); |
| | | return; |
| | | } |
| | | //获取进片任务表 |
| | | List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage(BIG_STORAGE_CAGE_OUT_TWO_TASK); |
| | | //获取出片任务表 |
| | | List<BigStorageCageTask> outTaskList = getOutTaskList(s7DataZKDLPTwo); |
| | | if (CollectionUtil.isEmpty(outTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | log.info("当前大车无出片玻璃,结束完成出片任务"); |
| | | return; |
| | | } |
| | | List<BigStorageCageTask> unFinishTaskList = outTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); |
| | |
| | | taskMap.forEach((e1, v) -> { |
| | | if (e1 == 2) { |
| | | //进片完成 |
| | | log.info("3、获取进片已完成的玻璃信息id:{}", v); |
| | | log.info("3、获取出片已完成的玻璃信息id:{}", v); |
| | | List<Integer> outSuccessGlassSlot = new ArrayList<>(); |
| | | if (finalTaskType.equals(Const.BIG_STORAGE_AFTER_OUT)) { |
| | | outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getStartSlot).collect(Collectors.toList()); |
| | |
| | | List<Integer> slotList = storageCageDTOList.stream().map(UpdateHollowBigStorageCageDTO::getTargetSlot).distinct().collect(Collectors.toList()); |
| | | hollowBigStorageCageDetailsService.updateDeviceIdBySlot(slotList); |
| | | } |
| | | log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); |
| | | log.info("4、大理片笼出片状态已完成已完成的玻璃信息id:{}", v); |
| | | updateSlotRemainBySlots(outSuccessGlassSlot); |
| | | } else if (e1 == 3) { |
| | | //破损处理 |
| | |
| | | } |
| | | |
| | | // 重置任务表数据 |
| | | bigStorageCageTaskService.updateOutTaskMessage(BIG_STORAGE_CAGE_OUT_TWO_TASK); |
| | | |
| | | resetOutTask(); |
| | | //清空启动状态 |
| | | //向opc发送启动信号 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2B.DLP2B.MesReply", 0)); |
| | | s7DataZKDLPTwo = new S7DataZKDLPTwo(); |
| | | s7DataZKDLPTwo.setMesReply(0); |
| | | s7SerializerZKDLPTwo.write(s7DataZKDLPTwo); |
| | | } |
| | | |
| | | private void dealDamageInTask(List<BigStorageCageTask> damageTaskList) { |
| | |
| | | List<String> glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | | .set(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .ne(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT) |
| | | .notIn(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | .in(HollowBigStorageCageDetails::getGlassId, glassList)); |
| | | |
| | | } else { |
| | |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | | .set(HollowBigStorageCageDetails::getSlot, item.getStartSlot()) |
| | | .set(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .ne(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT) |
| | | .notIn(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | .eq(HollowBigStorageCageDetails::getGlassId, item.getGlassId())); |
| | | } |
| | | } |
| | |
| | | |
| | | if (null == storageCage) { |
| | | //向plc发送报警:直通片台存在玻璃,无法继续直通 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 16)); |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 16)); |
| | | S7DataZKDLPOne s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | Assert.isFalse(storageCage == null, "任务调度没有多余格子,结束调度任务"); |
| | | } |
| | | |
| | |
| | | for (T t : baseInfoList) { |
| | | bigStorageCageTaskList.add(new BigStorageCageTask(t.getGlassId(), t.getSlot(), targetSlot, 0)); |
| | | } |
| | | while (bigStorageCageTaskList.size() < 6) { |
| | | bigStorageCageTaskList.add(new BigStorageCageTask("", 0, 0, 0)); |
| | | } |
| | | //清空任务表数据 |
| | | bigStorageCageTaskService.removeAll(tableName); |
| | | bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList); |
| | | resetOutTask(); |
| | | log.info("生成出片任务数据{}", bigStorageCageTaskList); |
| | | S7DataZKDLPTwo s7DataZKDLPTwo = new S7DataZKDLPTwo(); |
| | | for (int i = 0; i < bigStorageCageTaskList.size() && i < 6; i++) { |
| | | String glassId = bigStorageCageTaskList.get(i).getGlassId(); |
| | | Integer startSlot = bigStorageCageTaskList.get(i).getStartSlot(); |
| | | Integer target = bigStorageCageTaskList.get(i).getTargetSlot(); |
| | | if (startSlot > 0) { |
| | | switch (i) { |
| | | case 0: |
| | | s7DataZKDLPTwo.setId1(glassId); |
| | | s7DataZKDLPTwo.setFrom1(startSlot); |
| | | s7DataZKDLPTwo.setTo1(target); |
| | | break; |
| | | case 1: |
| | | s7DataZKDLPTwo.setId2(glassId); |
| | | s7DataZKDLPTwo.setFrom2(startSlot); |
| | | s7DataZKDLPTwo.setTo2(target); |
| | | break; |
| | | case 2: |
| | | s7DataZKDLPTwo.setId3(glassId); |
| | | s7DataZKDLPTwo.setFrom3(startSlot); |
| | | s7DataZKDLPTwo.setTo3(target); |
| | | break; |
| | | case 3: |
| | | s7DataZKDLPTwo.setId4(glassId); |
| | | s7DataZKDLPTwo.setFrom4(startSlot); |
| | | s7DataZKDLPTwo.setTo4(target); |
| | | break; |
| | | case 4: |
| | | s7DataZKDLPTwo.setId5(glassId); |
| | | s7DataZKDLPTwo.setFrom5(startSlot); |
| | | s7DataZKDLPTwo.setTo5(target); |
| | | break; |
| | | case 5: |
| | | s7DataZKDLPTwo.setId6(glassId); |
| | | s7DataZKDLPTwo.setFrom6(startSlot); |
| | | s7DataZKDLPTwo.setTo6(target); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | s7SerializerZKDLPTwo.write(s7DataZKDLPTwo); |
| | | log.info("出片任务写入数据{}", s7DataZKDLPTwo); |
| | | S7DataZKDLPTwo s7DataZKDLPTwo1 = s7SerializerZKDLPTwo.read(S7DataZKDLPTwo.class); |
| | | log.info("写入出片任务后读取数据{}", s7DataZKDLPTwo1); |
| | | List<HollowBigStorageCageHistoryTask> historyList = bigStorageCageTaskList.stream().filter(e -> StringUtils.isNotBlank(e.getGlassId())).map(e -> { |
| | | HollowBigStorageCageHistoryTask history = new HollowBigStorageCageHistoryTask(); |
| | | BeanUtils.copyProperties(e, history); |
| | |
| | | history.setTaskType(taskType); |
| | | return history; |
| | | }).collect(Collectors.toList()); |
| | | log.info("历史任务保存{}", historyList); |
| | | hollowBigStorageCageHistoryTaskService.saveBatch(historyList); |
| | | log.info("将出片玻璃{}玻璃状态改为出片中", glassIds); |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | | .set(HollowBigStorageCageDetails::getState, state) |
| | | .set(Const.BIG_STORAGE_AFTER_DISPATCH.equals(taskType), HollowBigStorageCageDetails::getSlot, targetSlot) |
| | | .ne(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT) |
| | | .notIn(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE) |
| | | .in(HollowBigStorageCageDetails::getGlassId, glassIds)); |
| | | try { |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP2B.DLP2B.MesReply", 1)); |
| | | s7DataZKDLPTwo = new S7DataZKDLPTwo(); |
| | | s7DataZKDLPTwo.setMesReply(1); |
| | | s7SerializerZKDLPTwo.write(s7DataZKDLPTwo); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH); |
| | | if (CollectionUtils.isNotEmpty(inSlotGlassList)) { |
| | | //存在 将格子内的玻璃分别进行更新 |
| | | // List<HollowBigStorageCage> hollowBigStorageCageList = hollowBigStorageCageService.list(new LambdaQueryWrapper<HollowBigStorageCage>() |
| | | // .lt(HollowBigStorageCage::getRemainWidth, 0).in(HollowBigStorageCage::getSlot, slotList)); |
| | | // List<Integer> resultSlotList = hollowBigStorageCageList.stream().map(HollowBigStorageCage::getSlot).collect(Collectors.toList()); |
| | | slotRemainMap = inSlotGlassList.stream() |
| | | .collect(Collectors.groupingBy(HollowBigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap))); |
| | | slotRemainMap.forEach((e, v) -> { |
| | |
| | | .value(value) |
| | | .build(); |
| | | } |
| | | |
| | | //读取出片地址 |
| | | private List<BigStorageCageTask> getOutTaskList(S7DataZKDLPTwo s7DataZKDLPTwo) { |
| | | List<BigStorageCageTask> outTaskList = new ArrayList<>(); |
| | | List<String> glassIds = s7DataZKDLPTwo.getIds(); |
| | | List<Integer> startSlots = s7DataZKDLPTwo.getFroms(); |
| | | List<Integer> endSlots = s7DataZKDLPTwo.getTos(); |
| | | List<Integer> states = s7DataZKDLPTwo.getStates(); |
| | | for (int i = 0; i < 6; i++) { |
| | | if (glassIds.get(i) != null && !glassIds.get(i).isEmpty()) { |
| | | BigStorageCageTask bigStorageCageTask = new BigStorageCageTask(); |
| | | bigStorageCageTask.setGlassId(glassIds.get(i)); |
| | | bigStorageCageTask.setStartSlot(startSlots.get(i)); |
| | | bigStorageCageTask.setTargetSlot(endSlots.get(i)); |
| | | bigStorageCageTask.setTaskState(states.get(i)); |
| | | outTaskList.add(bigStorageCageTask); |
| | | } |
| | | } |
| | | return outTaskList; |
| | | } |
| | | |
| | | //重置任务表 |
| | | private void resetOutTask() { |
| | | S7DataZKDLPTwo s7DataZKDLPTwo = new S7DataZKDLPTwo(); |
| | | s7DataZKDLPTwo.setId1(""); |
| | | s7DataZKDLPTwo.setId2(""); |
| | | s7DataZKDLPTwo.setId3(""); |
| | | s7DataZKDLPTwo.setId4(""); |
| | | s7DataZKDLPTwo.setId5(""); |
| | | s7DataZKDLPTwo.setId6(""); |
| | | s7DataZKDLPTwo.setFrom1(0); |
| | | s7DataZKDLPTwo.setFrom2(0); |
| | | s7DataZKDLPTwo.setFrom3(0); |
| | | s7DataZKDLPTwo.setFrom4(0); |
| | | s7DataZKDLPTwo.setFrom5(0); |
| | | s7DataZKDLPTwo.setFrom6(0); |
| | | s7DataZKDLPTwo.setTo1(0); |
| | | s7DataZKDLPTwo.setTo2(0); |
| | | s7DataZKDLPTwo.setTo3(0); |
| | | s7DataZKDLPTwo.setTo4(0); |
| | | s7DataZKDLPTwo.setTo5(0); |
| | | s7DataZKDLPTwo.setTo6(0); |
| | | s7DataZKDLPTwo.setState1(0); |
| | | s7DataZKDLPTwo.setState2(0); |
| | | s7DataZKDLPTwo.setState3(0); |
| | | s7DataZKDLPTwo.setState4(0); |
| | | s7DataZKDLPTwo.setState5(0); |
| | | s7DataZKDLPTwo.setState6(0); |
| | | s7SerializerZKDLPTwo.write(s7DataZKDLPTwo); |
| | | } |
| | | } |