123
ZY
2025-05-14 ce641926a957d238b202aa0d9dac3b8f15aff153
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -295,15 +295,16 @@
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
                if (staProtocol != null) {
                    staProtocol.setBreakerErr(status[0]);
                    staProtocol.setInfraredErr(status[1]);
                    staProtocol.setOutTimeErr(status[2]);
                    staProtocol.setSeizeSeatErr(status[3]);
                    staProtocol.setWrkYgoodsN(status[4]);
                    staProtocol.setInverterErr(status[5]);
                    staProtocol.setContactErr(status[6]);
                    staProtocol.setUpcontactErr(status[7]);
                }
            }
        }
@@ -340,43 +341,81 @@
        if (null == staProtocol) {
            return;
        }
        System.out.println(staProtocol);
        int index = staNosAll.indexOf(staProtocol.getSiteId());
        OperateResult write = null;
        OperateResult write1 = null;
        //任务下发次数
        int writeCount = 0;
        boolean wrkNoFlag = false;
        boolean staNoFlag = false;
        do {
            write = siemensS7Net.Write("DB100." + index * 6, (int) staProtocol.getWorkNo());    // 工作号
            Thread.sleep(300);
            write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 目标站
            Thread.sleep(100);
            if (write.IsSuccess && write1.IsSuccess) {
                Thread.sleep(200);
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 6, (short) 4);
                OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB100." + (index * 6 + 4), (short) 2);
                if (readResult.IsSuccess && readResult1.IsSuccess) {
                    short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 2);
                    if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
                        //任务命令写入成功
                        log.info("写入堆垛机命令后返回成功,并且回读成功。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                        break;
                    } else {//返回结果是成功了,但是真实值不相同
                        writeCount++;
                        log.error("写入堆垛机命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    }
            if (!wrkNoFlag) {
                write = siemensS7Net.Write("DB100." + index * 6, (int) staProtocol.getWorkNo());    // 工作号
                if (write.IsSuccess) {
                    wrkNoFlag = true;
//                    OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 6, (short) 4);
//                    if (readResult.IsSuccess) {
//                        short workNo = (short) siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
//                        if (staProtocol.getWorkNo().equals(workNo)) {
//                            //任务命令写入成功
//                            log.info("写入工作号命令后返回成功,并且回读成功。堆垛机plc编号={},{},{},写入次数={}", slave.getId(), staProtocol.getWorkNo(), workNo, writeCount);
//                            wrkNoFlag = true;
//                        } else {//返回结果是成功了,但是真实值不相同
//                            writeCount++;
//                            log.error("写入工作号命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},{},写入次数={}", slave.getId(), staProtocol.getWorkNo(), workNo, writeCount);
//                        }
//                    } else {
//                        writeCount++;
//                        log.error("写入工作号命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
//                    }
                } else {
                    writeCount++;
                    log.error("写入堆垛机命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    log.error("写入工作号命令失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                }
            } else {
                writeCount++;
                log.error("写入堆垛机命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        } while (writeCount < 5);
            if (!staNoFlag) {
                write1 = siemensS7Net.Write("DB100." + (index * 6 + 4), staProtocol.getStaNo());    // 目标站
                if (write1.IsSuccess) {
                    staNoFlag = true;
//                    OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB100." + (index * 6 + 4), (short) 2);
//                    if (readResult1.IsSuccess) {
//                        short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0);
//                        if (staProtocol.getStaNo().equals(staNo)) {
//                            //任务命令写入成功
//                            log.info("写入目标站命令后返回成功,并且回读成功。堆垛机plc编号={},{},{},写入次数={}", slave.getId(), staProtocol.getStaNo(), staNo, writeCount);
//                            staNoFlag = true;
//                        } else {//返回结果是成功了,但是真实值不相同
//                            writeCount++;
//                            log.error("写入目标站命令后返回成功,但是读取任务值不一致。堆垛机plc编号={},{},{},写入次数={}", slave.getId(), staProtocol.getStaNo(), staNo, writeCount);
//                        }
//                    } else {
//                        writeCount++;
//                        log.error("写入目标站命令后读取失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
//                    }
                } else {
                    writeCount++;
                    log.error("写入目标站命令失败。堆垛机plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                }
            }
            if (wrkNoFlag && staNoFlag) {
                break;
            }
            Thread.sleep(200);
        } while (writeCount < 20);
        if (!write.IsSuccess) {
            staProtocol = station.get(staProtocol.getSiteId());
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
                staProtocol.setPakMk(true);
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            News.error("SiemensDevp" + " - 4" + " - 写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            News.info("SiemensDevp" + " - 5" + " - 输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol));
        }
        if (!write1.IsSuccess) {
            staProtocol = station.get(staProtocol.getSiteId());
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
                staProtocol.setPakMk(true);
@@ -431,16 +470,29 @@
    }
    public static void main(String[] args) {
        System.out.println(staNos1.indexOf(129));
        System.out.println(staNos1.size());
        for (int i = 0; i < staNos1.size(); i++) {
//            System.out.println(i*2);
//            System.out.println(i*2 + 200);
//            System.out.println(i);
        }
        int index = staNos1.indexOf(128);
        System.out.println(index * 2);
        System.out.println(index * 2 + 200);
        int i=1;
        do {
            System.out.println(i);
            i++;
            if (i==4){
                break;
            }
        }while (i<6);
        StaProtocol staProtocol = new StaProtocol();
        staProtocol.setWorkNo((short) 6071);
        //short i = (short) 6071;
        //System.out.println(staProtocol.getWorkNo().equals(i));
//        System.out.println(staNos1.indexOf(129));
//        System.out.println(staNos1.size());
//        for (int i = 0; i < staNos1.size(); i++) {
////            System.out.println(i*2);
////            System.out.println(i*2 + 200);
////            System.out.println(i);
//        }
//        int index = staNos1.indexOf(128);
//        System.out.println(index * 2);
//        System.out.println(index * 2 + 200);
    }
//    public static void main(String[] args) throws Exception {