From cf9211f711be85c8e0c1c739d01c8694d2cf5c51 Mon Sep 17 00:00:00 2001
From: skyouc <958836976@qq.com>
Date: 星期一, 13 四月 2026 16:23:04 +0800
Subject: [PATCH] 屏蔽预调度任务

---
 src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java |   76 ++++++++++++++++++++++++++++++++------
 1 files changed, 64 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
index ea6e8c9..03e0b3d 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -69,6 +69,7 @@
 
     private List<ZyStationStatusEntity> statusList;
     private List<StationObjModel> barcodeOriginList;
+    private List<StationObjModel> inStationOriginList;
     private SiemensS7Net siemensNet;
     private DeviceConfig deviceConfig;
     private RedisUtil redisUtil;
@@ -126,13 +127,14 @@
                 statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
             }
             barcodeOriginList = basDevp.getBarcodeStationList$();
+            inStationOriginList = sortStationObjModelsByStationId(basDevp.getInStationList$());
         }
 
         if (siemensNet == null) {
             return statusList;
         }
 
-        OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) (statusList.size() * 10));
+        OperateResultExOne<byte[]> result = siemensNet.Read("DB100.10", (short) (statusList.size() * 10));
         if (result.IsSuccess) {
             byte[] taskBufferRaw = readTaskBufferRaw();
             for (int i = 0; i < statusList.size(); i++) {
@@ -151,6 +153,7 @@
                 boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, i * 10 + 7, 1);
                 statusEntity.setEnableIn(status2[1]);//鍚姩鍏ュ簱
                 statusEntity.setRunBlock(status2[2]);//閲嶆柊瑙勫垝璺嚎
+                statusEntity.setInBarcodeError(status2[3]);//鍏ュ簱鏉$爜绔欏紓甯�
 
                 Integer palletHeight = null;
                 if (status[7]) {
@@ -212,31 +215,30 @@
                 boolean[] status1 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2, 1);
                 boolean[] status2 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2 + 1, 1);
 
-                if(status1[0]){
+                if(status1[0] || status2[0]){
                     sb.append("宸﹁秴瀹芥姤璀�;");
                 }
-                if(status1[1]) {
+                if(status1[1] || status2[1]) {
                     sb.append("鍙宠秴瀹芥姤璀�;");
                 }
-                if(status1[2]) {
+                if(status1[2] || status2[2]) {
                     sb.append("鍓嶈秴闀挎姤璀�;");
                 }
-                if(status1[3]) {
+                if(status1[3] || status2[3]) {
                     sb.append("鍚庤秴闀挎姤璀�;");
                 }
-                if(status1[4]) {
+                if(status1[4] || status2[4]) {
                     sb.append("瓒呴珮鎶ヨ;");
                 }
-                if(status1[5]) {
+                if(status1[5] || status2[5]) {
                     sb.append("鏈夎揣鎶ヨ锛岀┖鎵樺叆搴撴椂妫�娴嬫墭鐩樹笂鏈夋棤璐х墿;");
                 }
-                if(status1[6]) {
+                if(status1[6] || status2[6]) {
                     sb.append("閲嶉噺寮傚父鎶ヨ;");
                 }
-                if(status1[7]) {
+                if(status1[7] || status2[7]) {
                     sb.append("鎵爜寮傚父;");
                 }
-
                 applyAlarmMessage(barcodeEntity, sb.toString());
             }
         }
@@ -253,6 +255,19 @@
 
                 String alarmMsg = buildConveyorCommonAlarmMessage(status1, status2, status3, status4);
                 applyAlarmMessage(statusEntity, mergeAlarmMessages(statusEntity.getErrorMsg(), alarmMsg));
+            }
+        }
+
+        // 鍑哄叆搴撴ā寮�
+        OperateResultExOne<byte[]> result6 = siemensNet.Read("DB167.2", (short) (inStationOriginList.size() * 2));
+        if (result6.IsSuccess) {
+            for (int i = 0; i < inStationOriginList.size(); i++) {
+                ZyStationStatusEntity inStationEntity = findStatusEntityByInStationIdx(i);
+                if (inStationEntity == null) {
+                    continue;
+                }
+                Integer ioMode = normalizeIoMode((int) siemensNet.getByteTransform().TransInt16(result6.Content, i * 2));
+                inStationEntity.setIoMode(ioMode);
             }
         }
 
@@ -288,7 +303,7 @@
             return commandResponse;
         }
 
-        int taskBaseOffset = stationIdx * TASK_AREA_LENGTH + (useTaskWriteIdx * TASK_AREA_SLOT_SIZE);
+        int taskBaseOffset = (stationIdx + 1) *  TASK_AREA_LENGTH + (useTaskWriteIdx * TASK_AREA_SLOT_SIZE);
 
         OperateResult writeTaskNo = siemensNet.Write("DB13." + taskBaseOffset, command.getTaskNo());
         if (!writeTaskNo.IsSuccess) {
@@ -331,7 +346,7 @@
             return commandResponse;
         }
 
-        int slotBaseOffset = stationIdx * TASK_AREA_LENGTH + slotIdx * TASK_AREA_SLOT_SIZE;
+        int slotBaseOffset = (stationIdx + 1) * TASK_AREA_LENGTH + slotIdx * TASK_AREA_SLOT_SIZE;
         CommandResponse clearTaskNo = sendOriginCommand("DB13." + slotBaseOffset, new short[]{0, 0});
         if (clearTaskNo == null || !Boolean.TRUE.equals(clearTaskNo.getResult())) {
             commandResponse.setMessage(clearTaskNo == null ? "娓呯┖浠诲姟鍙峰け璐�" : clearTaskNo.getMessage());
@@ -385,6 +400,17 @@
                 break;
             }
         }
+
+        for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
+            if(zyStationStatusEntity.getStationId().equals(stationId)) {
+                return zyStationStatusEntity;
+            }
+        }
+        return null;
+    }
+
+    private ZyStationStatusEntity findStatusEntityByInStationIdx(Integer idx) {
+        Integer stationId = findInStationIdByOrder(inStationOriginList, idx);
 
         for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
             if(zyStationStatusEntity.getStationId().equals(stationId)) {
@@ -480,6 +506,32 @@
         return current + append;
     }
 
+    static Integer normalizeIoMode(Integer rawMode) {
+        if (rawMode == null) {
+            return null;
+        }
+        if (rawMode == 1 || rawMode == 2) {
+            return rawMode;
+        }
+        return null;
+    }
+
+    static Integer findInStationIdByOrder(List<StationObjModel> inStationOriginList, Integer orderIdx) {
+        if (inStationOriginList == null || orderIdx == null || orderIdx < 0 || orderIdx >= inStationOriginList.size()) {
+            return null;
+        }
+        StationObjModel stationObjModel = inStationOriginList.get(orderIdx);
+        return stationObjModel == null ? null : stationObjModel.getStationId();
+    }
+
+    static List<StationObjModel> sortStationObjModelsByStationId(List<StationObjModel> stationObjModels) {
+        if (stationObjModels == null) {
+            return Collections.emptyList();
+        }
+        stationObjModels.sort(Comparator.comparing(StationObjModel::getStationId, Comparator.nullsLast(Integer::compareTo)));
+        return stationObjModels;
+    }
+
     private static void appendConveyorCommonAlarmMessages(StringBuilder sb, boolean[] status, int startIdx) {
         if (status == null) {
             return;

--
Gitblit v1.9.1