From b4ff04d7dd22f0e48bf386cd422e885aef08fed7 Mon Sep 17 00:00:00 2001 From: ZengTao <2773468879@qq.com> Date: 星期四, 22 五月 2025 15:03:10 +0800 Subject: [PATCH] OPC通讯修改为S7通讯 --- hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java | 188 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 150 insertions(+), 38 deletions(-) diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java index 3471b59..2a79d53 100644 --- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java +++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; import com.mes.common.config.Const; import com.mes.engineering.entity.Engineering; import com.mes.engineering.mapper.EngineeringMapper; @@ -10,13 +11,19 @@ import com.mes.opctask.entity.LoadGlassDeviceTaskHistory; import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService; import com.mes.opctask.service.LoadGlassDeviceTaskService; +import com.mes.pp.entity.OptimizeProject; +import com.mes.pp.service.OptimizeProjectService; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; +import com.mes.s7.entity.S7DataSP; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.entity.vo.UpPattenUsageVO; import com.mes.uppattenusage.mapper.UpPattenUsageMapper; import lombok.extern.slf4j.Slf4j; 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; import org.springframework.util.CollectionUtils; @@ -47,6 +54,16 @@ private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService; @Resource private UpPattenUsageMapper upPattenUsageMapper; + @Resource + private OptimizeProjectService optimizeProjectService; + + @Autowired + @Qualifier("s7SerializerSPOne") + private S7Serializer s7SerializerSPOne; + + @Autowired + @Qualifier("s7SerializerSPTwo") + private S7Serializer s7SerializerSPTwo; private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102); private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104); @@ -58,40 +75,82 @@ private static final String LOAD_GLASS_DEVICE_TWO_TASK = "load_glass_device_two_task"; - //璁惧id 涓婄墖浣嶄俊鎭� 浠诲姟琛ㄤ笉涓�鑷� 鍘嗗彶浠诲姟琛ㄥ叕鐢ㄤ竴寮� 鏂板浠诲姟/浠诲姟缁撴潫锛屽悗浼氬湪鍘嗗彶琛ㄤ腑鏂板涓�鏉¤褰曞苟鍦ㄧ粨鏉熷悗鏇存柊浠诲姟 涓�涓换鍔″嵆鍙� //瀹氭椂浠诲姟鎵弿涓婄墖浣嶆湁娌℃湁鍘熺墖 //1銆佹槸鍚︽湁鍦ㄦ墽琛岀殑浠诲姟 //2銆�1鍙蜂笂鐗囦綅鏄惁鏈夊師鐗囷紝鍘熺墖灏哄鏄惁鍜屼笂鐗囧緟涓婄墖鐨勫昂瀵镐竴鑷� //3銆�1鍙锋棤鍘熺墖锛屼笖娌℃湁鏋跺瓙锛�2鍙蜂笂鐗囦綅灏哄鏄惁鍜屽甫涓婄墖灏哄涓�鑷� //4銆佷笉涓�鑷村彲鑳藉嚭鐜扮幓鐠冪牬鎹熷鑷寸殑涓婁竴鏋跺師鐗囨暟閲忎笉澶� + @Scheduled(fixedDelay = 5000) public void opcLoadGlassOne() { opcLoadGlassChild(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE); } + @Scheduled(fixedDelay = 5000) public void opcLoadGlassTwo() { opcLoadGlassChild(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE); } - + @Scheduled(fixedDelay = 5000) public void opcLoadGlassOneFinish() { opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE); } + @Scheduled(fixedDelay = 5000) public void opcLoadGlassTwoFinish() { opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE); } + /** + * 瀹氭椂浠诲姟鎵爜宸插畬鎴愪笂鐗囩殑宸ョ▼锛屽皢宸ョ▼鐘舵�佹敼涓哄凡瀹屾垚锛屽悓姝p琛ㄧ殑宸ョ▼琛紝鐘舵�佹敼涓�300 + */ + @Scheduled(fixedDelay = 5000) + public void updateEngineerState() { + log.info("淇敼宸插畬鎴愬伐绋嬬姸鎬佷换鍔″紑濮嬫墽琛�"); + List<Engineering> engineerings = engineeringMapper.selectList(new LambdaQueryWrapper<Engineering>().eq(Engineering::getState, Const.ENGINEERING_RUNNING)); + for (Engineering engineering : engineerings) { + Integer count = upPattenUsageMapper.selectCount(new LambdaQueryWrapper<UpPattenUsage>() + .eq(UpPattenUsage::getEngineeringId, engineering.getEngineerId()).ne(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS)); + if (count == 0) { + engineeringMapper.update(null, new LambdaUpdateWrapper<Engineering>().set(Engineering::getState, Const.ENGINEERING_SUCCESS) + .eq(Engineering::getEngineerId, engineering.getEngineerId())); + optimizeProjectService.update(null, new LambdaUpdateWrapper<OptimizeProject>().set(OptimizeProject::getState, 300) + .eq(OptimizeProject::getProjectNo, engineering.getEngineerId())); + } + } + } + private void opcLoadGlassChild(String tableName, Integer deviceId) { + S7DataSP s7DataSP = new S7DataSP(); + if (tableName.equals(LOAD_GLASS_DEVICE_ONE_TASK)) { + s7DataSP = s7SerializerSPOne.read(S7DataSP.class); + } else { + s7DataSP = s7SerializerSPTwo.read(S7DataSP.class); + } Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>() .eq(Engineering::getState, Const.ENGINEERING_RUNNING).eq(Engineering::getStationCell, deviceId)); if (null == engineering) { log.info("{}涓婄墖绾匡紝娌℃湁宸ョ▼浠诲姟", deviceId); + return; } //浠诲姟鏆傚仠 - LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName); - if ("1".equals(task.getTaskState())) { - log.info("鏈夋鍦ㄦ墽琛岀殑涓婄墖浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�"); + S7DataSP task=new S7DataSP(); + if(LOAD_GLASS_ONE_DEVICE.equals(deviceId)){ + s7SerializerSPOne.read(S7DataSP.class); + }else{ + s7SerializerSPTwo.read(S7DataSP.class); + } +// LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName); + ; + if ("0".equals(s7DataSP.getInkageState().toString())) { + log.info("{}涓婄墖绾匡紝澶勪簬绂荤嚎鐘舵�侊細{}锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId, s7DataSP.getInkageState().toString()); +// if (0 == task.getInkageState()) { +// log.info("{}涓婄墖绾匡紝澶勪簬绂荤嚎鐘舵�侊細{}锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId, task.getInkageState()); + return; + } + if (s7DataSP.getTaskRunning().toString().equals(Const.ENGINEERING_RUNNING)) { +// if (task.getTaskRunning().equals(Const.ENGINEERING_RUNNING)) { + log.info("{}涓婄墖绾匡紝鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId); return; } List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId()); @@ -104,12 +163,12 @@ Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream() .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber)); log.info("鑾峰彇褰撳墠闇�瑕佷笂鐗囩殑鍘熺墖鏁版嵁"); - List<UpPattenUsageVO> usageVOS = upListMap.get(0); + List<UpPattenUsageVO> usageVOS = upListMap.get("1"); // 鑾峰彇1鍙蜂笂鐗囦綅鏄湁鏋跺瓙涓旀湁鐜荤拑 List<Integer> loadStation = LOAD_GLASS_DEVICE_ONE_TASK.equals(tableName) ? LOAD_STATION_01 : LOAD_STATION_02; List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>() .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1") - .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) + .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL) .eq(RawGlassStorageDetails::getDeviceId, deviceId)); if (CollectionUtils.isEmpty(loadStationList)) { log.info("褰撳墠涓婄墖绾胯矾涓や釜涓婄墖浣嶉兘娌℃湁鍘熺墖淇℃伅锛岀粨鏉熸湰娆′笂鐗囦换鍔★紝绛夊緟浠撳偍璋冨害浠诲姟"); @@ -118,18 +177,29 @@ RawGlassStorageDetails oneLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(0))).findFirst().orElse(null); if (null == oneLoadStation) { RawGlassStorageDetails twoLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(1))).findFirst().orElse(null); - if (!compareRawSize(usageVOS.get(0), oneLoadStation)) { + if (!compareRawSize(usageVOS.get(0), twoLoadStation)) { log.info("浜屽彿涓婄墖浣嶆湁鏋跺瓙锛屽師鐗囨暟閲忎负0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�"); return; } int number = Math.min(twoLoadStation.getRemainQuantity(), usageVOS.size()); //鐢熸垚涓婄墖浠诲姟 - task.setTotalCount(number); - task.setTaskRunning(Const.ENGINEERING_RUNNING); - task.setRawGlassWidth((int) usageVOS.get(0).getWidth()); - task.setRawGlassHeight((int) usageVOS.get(0).getHeight()); - task.setSlot(loadStation.get(1)); - loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + task.setTotalCount((short)number); + task.setTaskRunning(Boolean.TRUE); + task.setRawGlassWidth((short) usageVOS.get(0).getWidth()); + task.setRawGlassHeight((short) usageVOS.get(0).getHeight()); + task.setSlot(loadStation.get(1).shortValue()); +// loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + S7DataSP s7DataSPWrite = new S7DataSP(); + s7DataSPWrite.setTotalCount((short) number); + s7DataSPWrite.setTaskRunning(Boolean.TRUE); + s7DataSPWrite.setRawGlassWidth((short) usageVOS.get(0).getWidth()); + s7DataSPWrite.setRawGlassHeight((short) usageVOS.get(0).getHeight()); + s7DataSPWrite.setSlot(loadStation.get(1).shortValue()); + if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) { + s7SerializerSPOne.write(s7DataSPWrite); + } else { + s7SerializerSPTwo.write(s7DataSPWrite); + } saveHistoryTask(task, deviceId); return; } @@ -140,43 +210,85 @@ } //鐢熸垚涓婄墖浠诲姟 int number = Math.min(oneLoadStation.getRemainQuantity(), usageVOS.size()); - task.setTotalCount(number); - task.setTaskRunning(Const.ENGINEERING_RUNNING); - task.setRawGlassWidth((int) usageVOS.get(0).getWidth()); - task.setRawGlassHeight((int) usageVOS.get(0).getHeight()); - task.setSlot(loadStation.get(0)); - loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + task.setTotalCount((short)number); + task.setTaskRunning(Boolean.TRUE); + task.setRawGlassWidth((short) usageVOS.get(0).getWidth()); + task.setRawGlassHeight((short) usageVOS.get(0).getHeight()); + task.setSlot(loadStation.get(0).shortValue()); +// loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + S7DataSP s7DataSPWrite = new S7DataSP(); + s7DataSPWrite.setTotalCount((short) number); + s7DataSPWrite.setTaskRunning(Boolean.TRUE); + s7DataSPWrite.setRawGlassWidth((short) usageVOS.get(0).getWidth()); + s7DataSPWrite.setRawGlassHeight((short) usageVOS.get(0).getHeight()); + s7DataSPWrite.setSlot(loadStation.get(0).shortValue()); + if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) { + s7SerializerSPOne.write(s7DataSPWrite); + } else { + s7SerializerSPTwo.write(s7DataSPWrite); + } saveHistoryTask(task, deviceId); } private void opcLoadGlassFinishChid(String tableName, Integer deviceId) { - LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName); - if (task.getTaskState() <= 1) { - log.info("鏃犱换鍔℃垨浠诲姟姝e湪鎵ц涓�"); + S7DataSP s7DataSP = new S7DataSP(); + if (tableName.equals(LOAD_GLASS_DEVICE_ONE_TASK)) { + s7DataSP = s7SerializerSPOne.read(S7DataSP.class); + } else { + s7DataSP = s7SerializerSPTwo.read(S7DataSP.class); + } +// LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName); + if (s7DataSP.getTaskRunning().toString().equals(Const.ENGINEERING_NEW)) { +// if (task.getTaskRunning().equals(Const.ENGINEERING_NEW)) { + log.info("鏃犱换鍔�,缁撴潫"); + return; + } + if (Integer.parseInt(s7DataSP.getTaskState().toString()) <= 1) { +// if (task.getTaskState() <= 1) { + log.info("浠诲姟姝e湪鎵ц,缁撴潫"); return; } //鑾峰彇浠诲姟瀹屾垚鎯呭喌 // 宸插畬鎴愭暟閲� 鐮存崯鏁伴噺 - Integer finishCount = task.getFinishCount(); - Integer damageCount = task.getDamageCount(); + Integer finishCount = Integer.parseInt(s7DataSP.getFinishCount().toString()); + Integer damageCount = Integer.parseInt(s7DataSP.getDamageCount().toString()); + Integer slot = Integer.parseInt(s7DataSP.getSlot().toString()); +// Integer finishCount = task.getFinishCount(); +// Integer damageCount = task.getDamageCount(); //鏇存柊褰撳墠鏋跺瓙涓婄殑鍘熺墖鍓╀綑鎯呭喌 rawGlassStorageDetailsService.update(new UpdateWrapper<RawGlassStorageDetails>() .inSql("slot", "select slot from raw_glass_storage_station where enable_state = 1") - .eq("slot", task.getSlot()) +// .eq("slot", task.getSlot()) + .eq("slot", slot) .eq("state", Const.RAW_GLASS_STATE_IN) - .set("remain_quantity", "remain_quantity - " + (finishCount + damageCount))); + .setSql("remain_quantity = remain_quantity - " + (finishCount + damageCount))); //鏇存柊宸ョ▼涓嬬殑鍘熺墖鏁伴噺 todo:sql寰呬紭鍖� - upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>() - .inSql(UpPattenUsage::getId, " SELECT id FROM up_patten_usage ORDER BY id ASC LIMIT 10") - .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS)); - //todo:浠诲姟琛ㄦ暟鎹儏鍐� - task.setTaskRunning(0); - task.setTotalCount(0); - task.setRawGlassWidth(0); - task.setRawGlassHeight(0); - task.setSlot(0); - loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + + if (finishCount > 0) { + List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount); + upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>() + .in(UpPattenUsage::getId, ids) + .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS)); + } + //浠诲姟琛ㄦ暟鎹儏鍐� +// task.setTaskRunning(0); +// task.setTotalCount(0); +// task.setRawGlassWidth(0); +// task.setRawGlassHeight(0); +// task.setSlot(0); +// loadGlassDeviceTaskService.updateTaskMessage(tableName, task); + S7DataSP s7DataSPWrite = new S7DataSP(); + s7DataSPWrite.setTaskRunning(Boolean.FALSE); + s7DataSPWrite.setTotalCount((short) 0); + s7DataSPWrite.setRawGlassWidth((short) 0); + s7DataSPWrite.setRawGlassHeight((short) 0); + s7DataSPWrite.setSlot((short) 0); + if (LOAD_GLASS_ONE_DEVICE.equals(deviceId)) { + s7SerializerSPOne.write(s7DataSPWrite); + } else { + s7SerializerSPTwo.write(s7DataSPWrite); + } loadGlassDeviceTaskHistoryService.update(new LambdaUpdateWrapper<LoadGlassDeviceTaskHistory>() .set(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS) .eq(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) @@ -184,7 +296,7 @@ ); } - private boolean saveHistoryTask(LoadGlassDeviceTask task, Integer deviceId) { + private boolean saveHistoryTask(S7DataSP task, Integer deviceId) { LoadGlassDeviceTaskHistory taskHistory = new LoadGlassDeviceTaskHistory(); BeanUtils.copyProperties(task, taskHistory); taskHistory.setStation(deviceId); -- Gitblit v1.8.0