| | |
| | | import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | | import com.mes.tools.S7control; |
| | | import com.mes.utils.RedisUtil; |
| | | import io.swagger.models.auth.In; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | return; |
| | | } |
| | | if (redisUtil.getCacheObject("temperingSwitch")) { |
| | | // if(true){ |
| | | //是否有正在钢化的玻璃 |
| | | List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>() |
| | | .selectAll(TemperingGlassInfo.class) |
| | |
| | | if (CollectionUtils.isNotEmpty(temperingOccupySlotList)) { |
| | | loop: |
| | | for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) { |
| | | List<GlassInfo> glassInfoList = glassInfoService.list( |
| | | List<GlassInfo> glassInfos = glassInfoService.list( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getTemperingLayoutId, temperingOccupySlot.getTemperingLayoutId()) |
| | | .eq(GlassInfo::getEngineerId, temperingOccupySlot.getEngineerId()) |
| | | .eq(GlassInfo::getTemperingLayoutId, temperingOccupySlot.getTemperingLayoutId()) |
| | | .notInSql(GlassInfo::getGlassId, "select glass_id from damage where type=8 and engineer_id='" |
| | | + temperingOccupySlot.getEngineerId() + "' and tempering_layout_id = '" + temperingOccupySlot.getTemperingLayoutId() + "'") |
| | | .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence) |
| | | ); |
| | | List<BigStorageCageDetails> glassInfoLists = new ArrayList<>(); |
| | | glassInfoList.forEach(glassInfo -> { |
| | | BigStorageCageDetails details = new BigStorageCageDetails(); |
| | | BeanUtils.copyProperties(glassInfo, details); |
| | | details.setSlot(1); |
| | | glassInfoLists.add(details); |
| | | }); |
| | | List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getEngineerId, temperingOccupySlot.getEngineerId()) |
| | | .eq(BigStorageCageDetails::getTemperingLayoutId, temperingOccupySlot.getTemperingLayoutId()) |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence) |
| | | ); |
| | | // if (glassInfoLists.size() == bigStorageCageDetailsList.size()) { |
| | | computeOutMoreGlassInfo(glassInfoLists, Boolean.TRUE, 2); |
| | | computeOutMoreGlassInfo(bigStorageCageDetailsList, Boolean.TRUE, 3); |
| | | int allTrainNumber = allTask.stream() |
| | | .map(BigStorageCageOutTask::getTrainNumber) |
| | | .collect(Collectors.toSet()) |
| | | .size(); |
| | | int allTrainSlot = allTask.stream() |
| | | .map(BigStorageCageOutTask::getStartSlot) |
| | | .collect(Collectors.toSet()) |
| | | .size(); |
| | | int notallTrainNumber = notAllTask.stream() |
| | | .map(BigStorageCageOutTask::getTrainNumber) |
| | | .collect(Collectors.toSet()) |
| | | .size(); |
| | | int notallTrainSlot = notAllTask.stream() |
| | | .map(BigStorageCageOutTask::getStartSlot) |
| | | .collect(Collectors.toSet()) |
| | | .size(); |
| | | // if (allTrainNumber < notallTrainNumber || (allTrainNumber == notallTrainNumber && allTrainSlot < notallTrainSlot)) { |
| | | List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId()); |
| | | for (int i = 0; i < slotSequenceList.size() - 1; i++) { |
| | | SlotSequenceDTO first = slotSequenceList.get(i); |
| | | SlotSequenceDTO second = slotSequenceList.get(i + 1); |
| | | int slotWidth = first.getRemainWidth() - glassGap; |
| | | List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getSlot, second.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderBy(Boolean.TRUE, !sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); |
| | | if (CollectionUtils.isNotEmpty(list)) { |
| | | List<BigStorageCageOutTask> outTasks = new ArrayList<>(); |
| | | int serialNumber = 1; |
| | | for (BigStorageCageDetails item : list) { |
| | | int maxlength=(int)Math.max(item.getWidth(), item.getHeight()); |
| | | if (slotWidth > maxlength) { |
| | | slotWidth = slotWidth - maxlength- glassGap; |
| | | outTasks.add(new BigStorageCageOutTask(item.getGlassId(), second.getSlot(), first.getSlot(), |
| | | item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | } else { |
| | | outTasks.add(new BigStorageCageOutTask(item.getGlassId(), second.getSlot(), second.getSlot(), |
| | | item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | } |
| | | } |
| | | List<String> glassList = outTasks.stream() |
| | | .filter(item -> !item.getStartSlot().equals(item.getEndSlot())) |
| | | .map(BigStorageCageOutTask::getGlassId) |
| | | .collect(Collectors.toList()); |
| | | if(glassList.size()>0){ |
| | | //新增调度任务 |
| | | bigStorageCageOutTaskService.saveBatch(outTasks); |
| | | //更新理片笼详情表调度的后的玻璃位置信息:生成任务后先将玻璃格子位置进行调整,玻璃状态改为调度中,新增调度完成任务,处理调度完成后玻璃状态改为100. |
| | | // List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList()); |
| | | Map<Integer, List<GlassInfo>> listMap = glassInfos.stream().collect(Collectors.groupingBy(item -> item.getSlot())); |
| | | for (Map.Entry<Integer, List<GlassInfo>> entry : listMap.entrySet()) { |
| | | List<GlassInfo> valueList = entry.getValue(); |
| | | List<String> glassIds = valueList.stream().map(GlassInfo::getGlassId).collect(Collectors.toList()); |
| | | List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list( |
| | | new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .in(BigStorageCageDetails::getGlassId, glassIds) |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence) |
| | | ); |
| | | //当一格玻璃都到齐时 |
| | | if (bigStorageCageDetailsList.size() == valueList.size()) { |
| | | long distinctSlotCount = bigStorageCageDetailsList.stream() |
| | | .map(BigStorageCageDetails::getSlot) |
| | | .distinct() |
| | | .count(); |
| | | //当玻璃不在同一格时 |
| | | if (distinctSlotCount > 1) { |
| | | BigStorageCageDetails maxSequenceDetail = bigStorageCageDetailsList.stream() |
| | | .max(Comparator.comparingInt(BigStorageCageDetails::getTemperingFeedSequence)) |
| | | .orElse(null); // 如果没有元素,返回 null |
| | | int maxSlot = maxSequenceDetail.getSlot(); |
| | | int serialNumber = 1; |
| | | for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList |
| | | ) { |
| | | if (bigStorageCageDetails.getSlot() != maxSlot) { |
| | | bigStorageCageOutTaskService.save(new BigStorageCageOutTask(bigStorageCageDetails.getGlassId(), bigStorageCageDetails.getSlot(), maxSlot, |
| | | bigStorageCageDetails.getWidth() * 10, bigStorageCageDetails.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING) |
| | | .set(BigStorageCageBaseInfo::getSlot, first.getSlot()).in(BigStorageCageDetails::getGlassId, glassList) |
| | | .ne(BigStorageCageDetails::getState,Const.GLASS_STATE_OUT)); |
| | | |
| | | .set(BigStorageCageBaseInfo::getSlot, maxSlot).eq(BigStorageCageDetails::getGlassId, bigStorageCageDetails.getGlassId()) |
| | | .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)); |
| | | //两次更新笼子的剩余尺寸:第一次防止有玻璃继续进调度后的笼子,第二次更新:计算格子的实际尺寸 |
| | | // 仅更新调度后的格子信息:起始格子完成后更新:防止调度出片过程中有新玻璃进入, |
| | | updateSlotRemainBySlots(Arrays.asList(second.getSlot())); |
| | | break loop; |
| | | List<Integer> updateSlots = new ArrayList<>(); |
| | | updateSlots.add(bigStorageCageDetails.getSlot()); |
| | | updateSlotRemainBySlots(updateSlots); |
| | | } |
| | | |
| | | } |
| | | break loop; |
| | | } |
| | | } |
| | | } |
| | | // List<GlassInfo> glassInfoList = glassInfoService.list( |
| | | // new LambdaQueryWrapper<GlassInfo>() |
| | | // .eq(GlassInfo::getTemperingLayoutId, temperingOccupySlot.getTemperingLayoutId()) |
| | | // .eq(GlassInfo::getEngineerId, temperingOccupySlot.getEngineerId()) |
| | | // .notInSql(GlassInfo::getGlassId, "select glass_id from damage where type=8 and engineer_id='" |
| | | // + temperingOccupySlot.getEngineerId() + "' and tempering_layout_id = '" + temperingOccupySlot.getTemperingLayoutId() + "'") |
| | | // ); |
| | | // List<BigStorageCageDetails> glassInfoLists = new ArrayList<>(); |
| | | // glassInfoList.forEach(glassInfo -> { |
| | | // BigStorageCageDetails details = new BigStorageCageDetails(); |
| | | // BeanUtils.copyProperties(glassInfo, details); |
| | | // details.setSlot(1); |
| | | // glassInfoLists.add(details); |
| | | // }); |
| | | // List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsService.list( |
| | | // new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getEngineerId, temperingOccupySlot.getEngineerId()) |
| | | // .eq(BigStorageCageDetails::getTemperingLayoutId, temperingOccupySlot.getTemperingLayoutId()) |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence) |
| | | // ); |
| | | //// if (glassInfoLists.size() == bigStorageCageDetailsList.size()) { |
| | | // computeOutMoreGlassInfo(glassInfoLists, Boolean.TRUE, 2); |
| | | // computeOutMoreGlassInfo(bigStorageCageDetailsList, Boolean.TRUE, 3); |
| | | // int allTrainNumber = allTask.stream() |
| | | // .map(BigStorageCageOutTask::getTrainNumber) |
| | | // .collect(Collectors.toSet()) |
| | | // .size(); |
| | | // int allTrainSlot = allTask.stream() |
| | | // .map(BigStorageCageOutTask::getStartSlot) |
| | | // .collect(Collectors.toSet()) |
| | | // .size(); |
| | | // int notallTrainNumber = notAllTask.stream() |
| | | // .map(BigStorageCageOutTask::getTrainNumber) |
| | | // .collect(Collectors.toSet()) |
| | | // .size(); |
| | | // int notallTrainSlot = notAllTask.stream() |
| | | // .map(BigStorageCageOutTask::getStartSlot) |
| | | // .collect(Collectors.toSet()) |
| | | // .size(); |
| | | //// if (allTrainNumber < notallTrainNumber || (allTrainNumber == notallTrainNumber && allTrainSlot < notallTrainSlot)) { |
| | | // List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId()); |
| | | // for (int i = 0; i < slotSequenceList.size() - 1; i++) { |
| | | // SlotSequenceDTO first = slotSequenceList.get(i); |
| | | // SlotSequenceDTO second = slotSequenceList.get(i + 1); |
| | | // int slotWidth = first.getRemainWidth() - glassGap; |
| | | // List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getSlot, second.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .orderBy(Boolean.TRUE, !sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); |
| | | // if (CollectionUtils.isNotEmpty(list)) { |
| | | // List<BigStorageCageOutTask> outTasks = new ArrayList<>(); |
| | | // int serialNumber = 1; |
| | | // for (BigStorageCageDetails item : list) { |
| | | // int maxlength = (int) Math.max(item.getWidth(), item.getHeight()); |
| | | // if (slotWidth > maxlength) { |
| | | // slotWidth = slotWidth - maxlength - glassGap; |
| | | // outTasks.add(new BigStorageCageOutTask(item.getGlassId(), second.getSlot(), first.getSlot(), |
| | | // item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | // } else { |
| | | // outTasks.add(new BigStorageCageOutTask(item.getGlassId(), second.getSlot(), second.getSlot(), |
| | | // item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date())); |
| | | // } |
| | | // } |
| | | // List<String> glassList = outTasks.stream() |
| | | // .filter(item -> !item.getStartSlot().equals(item.getEndSlot())) |
| | | // .map(BigStorageCageOutTask::getGlassId) |
| | | // .collect(Collectors.toList()); |
| | | // if (glassList.size() > 0) { |
| | | // //新增调度任务 |
| | | // bigStorageCageOutTaskService.saveBatch(outTasks); |
| | | // //更新理片笼详情表调度的后的玻璃位置信息:生成任务后先将玻璃格子位置进行调整,玻璃状态改为调度中,新增调度完成任务,处理调度完成后玻璃状态改为100. |
| | | //// List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList()); |
| | | // |
| | | // bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING) |
| | | // .set(BigStorageCageBaseInfo::getSlot, first.getSlot()).in(BigStorageCageDetails::getGlassId, glassList) |
| | | // .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)); |
| | | // |
| | | // //两次更新笼子的剩余尺寸:第一次防止有玻璃继续进调度后的笼子,第二次更新:计算格子的实际尺寸 |
| | | // // 仅更新调度后的格子信息:起始格子完成后更新:防止调度出片过程中有新玻璃进入, |
| | | // updateSlotRemainBySlots(Arrays.asList(second.getSlot())); |
| | | // break loop; |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | |
| | | String d05ToMES = plcParameterObject.getPlcParameter("D05Request").getValue(); |
| | | String mesD03Address = plcParameterObject.getPlcParameter("MESToD03").getAddress(); |
| | | String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress(); |
| | | String carRequest = plcParameterObject.getPlcParameter("CarRequest").getValue(); |
| | | String carResponse = plcParameterObject.getPlcParameter("CarResponse").getAddress(); |
| | | if (!REQUEST_WORD.equals(d01ToMES)) { |
| | | log.info("地址:{}写入0", mesD01Address); |
| | | S7object.getinstance().plccontrol.writeWord(mesD01Address, 0); |
| | |
| | | log.info("地址:{}写入0", mesD05Address); |
| | | S7object.getinstance().plccontrol.writeWord(mesD05Address, 0); |
| | | } |
| | | if (!REQUEST_WORD.equals(carRequest)) { |
| | | log.info("地址:{}写入0", carResponse); |
| | | S7object.getinstance().plccontrol.writeWord(carResponse, 0); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 进片状态修改 |
| | |
| | | String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress(); |
| | | List<String> glassIds1 = new ArrayList<>(); |
| | | List<String> glassIds2 = new ArrayList<>(); |
| | | List<String> glassIdsCar = new ArrayList<>(); |
| | | for (int i = 1; i <= 6; i++) { |
| | | String line1GlassId = plcParameterObject.getPlcParameter("D03ID" + i).getValue(); |
| | | if (StringUtils.isNotEmpty(line1GlassId)) { |
| | |
| | | String line2GlassId = plcParameterObject.getPlcParameter("D05ID" + i).getValue(); |
| | | if (StringUtils.isNotEmpty(line2GlassId)) { |
| | | glassIds2.add(line2GlassId); |
| | | } |
| | | String carGlassId = plcParameterObject.getPlcParameter("E01ID" + i).getValue(); |
| | | if (StringUtils.isNotEmpty(carGlassId)) { |
| | | glassIdsCar.add(carGlassId); |
| | | } |
| | | } |
| | | List<BigStorageCageFeedTask> bigStorageCageFeedTasks1 = bigStorageCageFeedTaskService.list( |
| | |
| | | .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_CAR) |
| | | ); |
| | | } |
| | | String carRequest = plcParameterObject.getPlcParameter("CarRequest").getValue(); |
| | | log.info("大车当前玻璃id{}",glassIdsCar); |
| | | if (CollectionUtils.isNotEmpty(glassIdsCar) && REQUEST_WORD.equals(carRequest)) { |
| | | List<BigStorageCageFeedTask> bigStorageCageFeedTasks = bigStorageCageFeedTaskService.list( |
| | | new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .in(BigStorageCageFeedTask::getGlassId, glassIdsCar) |
| | | .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) |
| | | .eq(BigStorageCageFeedTask::getTargetSlot, 0) |
| | | ); |
| | | computeTargetByLineCar(bigStorageCageFeedTasks.get(0).getLine()); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 按照玻璃id判断玻璃状态及卧转立是否可直接启动 |
| | | */ |
| | | public Boolean judgeGlassTypeStatus(String glassId, Integer line, String mesAddress) { |
| | | //预排格子 |
| | | computeSlot(glassId); |
| | | //判断此玻璃是在笼内或已生成进片任务 |
| | | BigStorageCageFeedTask bigStorageCageFeedTask = bigStorageCageFeedTaskService.getOne( |
| | | new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | |
| | | return flag; |
| | | } |
| | | |
| | | public void computeSlot(String glassId) { |
| | | GlassInfo glassInfo = glassInfoService.getOne( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getGlassId, glassId) |
| | | ); |
| | | if (glassInfo.getSlot() == null) { |
| | | List<GlassInfo> glassInfos = glassInfoService.list( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId()) |
| | | .eq(GlassInfo::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence) |
| | | ); |
| | | List<BigStorageCageDetails> glassInfoLists = new ArrayList<>(); |
| | | glassInfos.forEach(item -> { |
| | | BigStorageCageDetails details = new BigStorageCageDetails(); |
| | | BeanUtils.copyProperties(item, details); |
| | | details.setSlot(1); |
| | | glassInfoLists.add(details); |
| | | }); |
| | | computeOutMoreGlassInfo(glassInfoLists, Boolean.TRUE, 2); |
| | | for (BigStorageCageOutTask bigStorageCageOutTask : allTask |
| | | ) { |
| | | glassInfoService.update( |
| | | new LambdaUpdateWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getGlassId, bigStorageCageOutTask.getGlassId()) |
| | | .set(GlassInfo::getSlot, bigStorageCageOutTask.getTrainNumber()) |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 添加任务信息 |
| | | */ |
| | |
| | | * 计算任务表进片线路的目标格子,并启动任务 |
| | | */ |
| | | public boolean computeTargetByLine(Integer line) { |
| | | sendTaskListToPLC(new ArrayList<>(), line); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 计算任务表进片线路的目标格子,并启动任务 |
| | | */ |
| | | public boolean computeTargetByLineCar(Integer line) { |
| | | //1、获取任务表中的所有玻璃(指定线路且已经进卧转立完成) |
| | | List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() |
| | | .eq(BigStorageCageFeedTask::getLine, line) |
| | |
| | | .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); |
| | | for (BigStorageCageFeedTask e : taskList) { |
| | | //替换玻璃id |
| | | // queryAndChangeGlass(e.getGlassId()); |
| | | queryAndChangeGlass(e.getGlassId()); |
| | | GlassInfo info = glassInfoService.getOne( |
| | | new LambdaQueryWrapper<GlassInfo>() |
| | | .eq(GlassInfo::getGlassId, e.getGlassId()) |
| | |
| | | bigStorageCageDetailsService.save(cageDetails); |
| | | |
| | | } |
| | | sendTaskListToPLC(taskList, line); |
| | | sendTaskListToPLCCar(taskList); |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private void sendTaskListToPLCCar(List<BigStorageCageFeedTask> taskList) { |
| | | S7control s7control = S7object.getinstance().plccontrol; |
| | | PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject; |
| | | List<String> returnData = new ArrayList<>(); |
| | | for (int i = 1; i <= taskList.size(); i++) { |
| | | s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine()); |
| | | s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot()); |
| | | returnData.add(taskList.get(i - 1).getGlassId()); |
| | | log.info("向plc发送第{}片玻璃已完成,起始位置是{},目标位置是", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot()); |
| | | } |
| | | String carRequest = plcMesObject.getPlcParameter("CarRequest").getValue(); |
| | | String CarResponse = plcMesObject.getPlcParameter("CarResponse").getAddress(); |
| | | while (REQUEST_WORD.equals(carRequest)) { |
| | | s7control.writeWord(CarResponse, 1); |
| | | carRequest = plcMesObject.getPlcParameter("CarRequest").getValue(); |
| | | } |
| | | } |
| | | |
| | | private void sendTaskListToPLC(List<BigStorageCageFeedTask> taskList, Integer line) { |
| | |
| | | String mesD05Address = plcMesObject.getPlcParameter("MESToD05").getAddress(); |
| | | String outLine = line.equals(Const.A09_OUT_TARGET_POSITION) ? mesD03Address : mesD05Address; |
| | | List<String> returnData = new ArrayList<>(); |
| | | |
| | | for (int i = 1; i <= taskList.size(); i++) { |
| | | s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine()); |
| | | s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot()); |
| | | returnData.add(taskList.get(i - 1).getGlassId()); |
| | | log.info("向plc发送第{}片玻璃已完成,起始位置是{},目标位置是", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot()); |
| | | } |
| | | returnData.add("glassid"); |
| | | // for (int i = 1; i <= taskList.size(); i++) { |
| | | // s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine()); |
| | | // s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot()); |
| | | // returnData.add(taskList.get(i - 1).getGlassId()); |
| | | // log.info("向plc发送第{}片玻璃已完成,起始位置是{},目标位置是", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot()); |
| | | // } |
| | | // int returnData = 1; |
| | | int count = 1; |
| | | |
| | |
| | | returnData = glassIds2; |
| | | } |
| | | // returnData = s7control.readWord(outLine, 1).get(0); |
| | | log.info("已向plc第{}次发送进片任务确认,地址为:{},写入的内容为{},读到的请求为{}", count++, outLine, 2, returnData); |
| | | log.info("已向plc第{}次发送进片卧转立,地址为:{},写入的内容为{},读到的请求为{}", count++, outLine, 2, returnData); |
| | | } |
| | | // while (returnData != 0) { |
| | | // s7control.writeWord(outLine, 2); |
| | |
| | | }); |
| | | } |
| | | //过滤不存在玻璃的格子 将宽度重置为原始宽度5000 |
| | | Set<Integer> remainSlotList = slotRemainMap.keySet(); |
| | | List<Integer> remainSlotList = new ArrayList<>(slotRemainMap.keySet()); |
| | | slotList.removeAll(remainSlotList); |
| | | if (CollectionUtils.isNotEmpty(slotList)) { |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth) |