自动化立体仓库 - WCS系统
#
lsh
2024-06-27 843adafd2eb2934e26a935e2de2b57a9e577d29a
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -203,6 +203,9 @@
                    case 10:
                        write10((StaProtocol)task.getData());
                        break;
                    case 11:
                        write11((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
@@ -301,6 +304,7 @@
            int[] staNosRgv = {623,624,625,626};
            for (int i = 0; i < staNosRgv.length; i++) {
                OperateResultExOne<byte[]> resultRgv = siemensS7Net.Read("DB100."+(1800+i*6), (short) 5);
                OperateResultExOne<byte[]> resultRgv2 = siemensS7Net.Read("DB100."+(1824+i*4), (short) 4);
                if (resultRgv.IsSuccess) {
                    Integer siteId = staNosRgv[i]; // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
@@ -310,17 +314,18 @@
                        station.put(siteId, staProtocol);
                    }
                    try{
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 0));     // 小车目标位
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv2.Content, 0));     // 小车目标位
                        staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 2));   // 目标站
                        staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 2));   // 当前位置
                        boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRgv.Content, 4, 1);
                        boolean[] status2 = siemensS7Net.getByteTransform().TransBool(resultRgv2.Content, 2, 1);
                        staProtocol.setRGV1(status[0]);  // 自动
                        staProtocol.setRGV2(status[1]);  // 有物
                        staProtocol.setRGV3(status[2]); // 可入
                        staProtocol.setRGV4(status[3]);//
                        staProtocol.setRGV5(status[4]);  //
                        staProtocol.setRGV6(status[5]);  // 满托盘
                        staProtocol.setRGV4(status2[0]);//
                        staProtocol.setRGV5(status2[1]);  //
                        staProtocol.setRGV6(status2[2]);  // 满托盘
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
@@ -550,6 +555,74 @@
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write11(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        boolean rgv6 = staProtocol.isRGV6();
        OperateResult result1 = null;
        String resultV1 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1826.2";
                break;
            case 624:
                resultV1 = "DB100.1830.2";
                break;
            case 625:
                resultV1 = "DB100.1834.2";
                break;
            case 626:
                resultV1 = "DB100.1838.2";
                break;
            default:
                return;
        }
        result1 = siemensS7Net.Write(resultV1, rgv6);
        //硫化罐任务写入后,回读一次,看是否成功
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int writeCount = 1;
        do {
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read(resultV1, (short) 2);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    if (status[2]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(resultV1, rgv6);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
            }catch (Exception e){
                log.error("写入RGV数据后回读出错,异常:"+e);
            }
            writeCount++;
        } while (writeCount<6);
    }
    private void write10(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
@@ -560,24 +633,24 @@
        String resultV1 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1804";
                resultV1 = "DB100.1826";
                break;
            case 624:
                resultV1 = "DB100.1810";
                resultV1 = "DB100.1830";
                break;
            case 625:
                resultV1 = "DB100.1816";
                resultV1 = "DB100.1834";
                break;
            case 626:
                resultV1 = "DB100.1822";
                resultV1 = "DB100.1838";
                break;
            default:
                return;
        }
        if (rgv4){
            result1 = siemensS7Net.Write(resultV1+".3", rgv4);
            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
        } else {
            result1 = siemensS7Net.Write(resultV1+".4", rgv5);
            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
        }
        //硫化罐任务写入后,回读一次,看是否成功
        try {
@@ -592,9 +665,9 @@
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    Thread.sleep(100);
                    writeCount++;
@@ -603,14 +676,14 @@
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read(resultV1, (short) 2);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    if (status[rgv4? 3:4]){
                    if (status[rgv4? 0:1]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        if (rgv4){
                            result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                        } else {
                            result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                        }
                        Thread.sleep(100);
                        writeCount++;
@@ -619,9 +692,9 @@
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".3", rgv4);
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".4", rgv5);
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    Thread.sleep(100);
                    writeCount++;
@@ -633,6 +706,7 @@
            writeCount++;
        } while (writeCount<6);
    }
    private void write9(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
@@ -644,20 +718,20 @@
        String resultV2 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "1800";
                resultV2 = "1812";
                resultV1 = "DB100.1824";
                resultV2 = "DB100.1828";
                break;
            case 624:
                resultV1 = "1806";
                resultV2 = "1818";
                resultV1 = "DB100.1828";
                resultV2 = "DB100.1824";
                break;
            case 625:
                resultV1 = "1812";
                resultV2 = "1800";
                resultV1 = "DB100.1832";
                resultV2 = "DB100.1836";
                break;
            case 626:
                resultV1 = "1818";
                resultV2 = "1806";
                resultV1 = "DB100.1836";
                resultV2 = "DB100.1832";
                break;
            default:
                return;