#
lty
2025-09-25 8478a159d79bf9ca5da04ab18562f2d7cdddb05c
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -261,8 +261,9 @@
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = null;
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.0", (short) (2764));
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.0", (short) (1264));
        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.0", (short) (2764));//1001-1028
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.0", (short) (1264));//1029-1037
        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB104.0", (short) (1264));//1042-1053
        if (result1.IsSuccess && result2.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
@@ -275,8 +276,10 @@
                }
                if(siteId < 1029){
                    result = result1;
                }else{
                }else if(siteId < 1042){
                    result = result2;
                }else if(siteId < 1054){
                    result = result3;
                }
                // 获取该站点对应的偏移量
                Integer offset = siteOffsetMap.get(siteId);
@@ -287,20 +290,16 @@
                Integer offset3 = getOffsetBySiteId2(siteId);
                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2));     // 工作号
                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, offset + offset2 + 12));   // 目标站
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, offset + offset2 + 12));   // 目标站
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, offset + offset3, 2);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setAutoing(!status[0]);  // 自动
                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result.Content, offset + offset3 - 4, 3);
                staProtocol.setLoading(status1[0]);  // 有物
                if(staProtocol.isLoading()){
                    staProtocol.setInEnable(false); // 可入
                    staProtocol.setOutEnable(false);// 可出
                }else{
                    staProtocol.setInEnable(true); // 可入
                    staProtocol.setOutEnable(true);// 可出
                }
                staProtocol.setLoading(!status1[0]);  // 有物
                staProtocol.setInEnable(true); // 可入
                staProtocol.setOutEnable(true);// 可出
//                staProtocol.setInEnable(status1[1]); // 可入
//                staProtocol.setOutEnable(status1[3]);// 可出
//                staProtocol.setEmptyMk(status[4]);  // 空板信号
@@ -313,22 +312,41 @@
                }
            }
        }
//        BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
        //RGV小车1
        BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
//        RGV小车1
//        Thread.sleep(100);
//        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB50.200",(short)10);
//        OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.",(short)27);
//        if (result3.IsSuccess) {
//            BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result3.Content, 0));
//            if (!Cools.isEmpty(basRgvMap)){
//                Integer siteId = 1;
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                Integer siteId1 = 1;
//                Integer siteId2 = 2;
//                StaProtocol staProtocol1 = station.get(siteId1);
//                StaProtocol staProtocol2 = station.get(siteId1);
//
//                if (null == staProtocol1) {
//                    staProtocol1 = new StaProtocol();
//                    staProtocol1.setSiteId(siteId1);
//                    station.put(siteId1, staProtocol1);
//                }
//                staProtocol.setAutoing(true);
//                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8)));
//                if (null == staProtocol2) {
//                    staProtocol2 = new StaProtocol();
//                    staProtocol2.setSiteId(siteId2);
//                    station.put(siteId2, staProtocol2);
//
//                }
//                String pos = String.valueOf(getRgvPosI(siemensS7Net.getByteTransform().TransInt32(result.Content, 4)));
//                staProtocol1.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 2);
//                staProtocol2.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) == 2);
//                staProtocol1.setNearbySta(pos);
//                staProtocol1.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, 8));
//                staProtocol2.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, 8));
//                staProtocol1.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 16));
//                staProtocol2.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 20));
//                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result.Content, 24, 2);
//                staProtocol1.setLoading(status1[0]);
//                staProtocol2.setLoading(status1[1]);
//                //                staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8)));
//            }
//        }
        //RGV小车2
@@ -509,11 +527,11 @@
            if(siteId > 1028){
                write = siemensS7Net.Write("DB101." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                write1 = siemensS7Net.Write("DB101." + (offset + offset2 + 12), staProtocol.getStaNo());    // 目标站
                write1 = siemensS7Net.Write("DB101." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
            }else{
                write = siemensS7Net.Write("DB100." + (offset + offset2), staProtocol.getWorkNo());    // 工作号
                Thread.sleep(200);
                write1 = siemensS7Net.Write("DB100." + (offset + offset2 + 12), staProtocol.getStaNo());    // 目标站
                write1 = siemensS7Net.Write("DB100." + (offset + offset2 + 12), staProtocol.getStaNo().intValue());    // 目标站
            }
            if(write.IsSuccess && write1.IsSuccess){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
@@ -547,6 +565,33 @@
            }
        }
    }
    public Integer getRgvPosI(Integer pos) {
        if (pos == null) return 0;
        // key: 站点号  value: 基准物理位置
        Map<Integer, Integer> posMap = new HashMap<>();
        posMap.put(1004, 6534);
        posMap.put(1007, 33634);
        posMap.put(1010, 75174);
        posMap.put(1014, 102124);
        posMap.put(1018, 138224);
        posMap.put(1021, 178034);
        posMap.put(1024, 219684);
        posMap.put(1028, 246724);
        posMap.put(1031, 288194);
        posMap.put(1035, 315204);
        int tolerance = 50; // 允许误差范围
        for (Map.Entry<Integer, Integer> entry : posMap.entrySet()) {
            int site = entry.getKey();
            int basePos = entry.getValue();
            if (Math.abs(pos - basePos) <= tolerance) {
                return site;
            }
        }
        return 0; // 没匹配到站点
    }
    /**
     * 心跳