自动化立体仓库 - WCS系统
#
lsh
2024-06-27 843adafd2eb2934e26a935e2de2b57a9e577d29a
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -200,6 +200,12 @@
                    case 9:
                        write9((StaProtocol)task.getData());
                        break;
                    case 10:
                        write10((StaProtocol)task.getData());
                        break;
                    case 11:
                        write11((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
@@ -292,11 +298,13 @@
                staProtocol.setBarcodeErr(status[6]);// 扫码失败
            }
        }
        if (slave.getId()==2){
            Thread.sleep(200);
            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);
@@ -305,20 +313,26 @@
                        staProtocol.setSiteId(siteId);
                        station.put(siteId, staProtocol);
                    }
                    staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 0));     // 小车目标位
                    try{
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv2.Content, 0));     // 小车目标位
                    staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 2));   // 目标站
                        staProtocol.setNowRow(siemensS7Net.getByteTransform().TransInt16(resultRgv.Content, 2));   // 当前位置
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, 4, 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]);  // 满托盘
                        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(status2[0]);//
                        staProtocol.setRGV5(status2[1]);  //
                        staProtocol.setRGV6(status2[2]);  // 满托盘
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                }
            }
        }
        //条码扫描器
        Thread.sleep(200);
@@ -541,37 +555,31 @@
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */
    private void write10(StaProtocol staProtocol) throws InterruptedException {
    private void write11(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        boolean rgv4 = staProtocol.isRGV4();
        boolean rgv5 = staProtocol.isRGV5();
        boolean rgv6 = staProtocol.isRGV6();
        OperateResult result1 = null;
        OperateResult result2 = null;
        String resultV1 = "";
        String resultV2 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "1804";
                resultV2 = "1804";
                resultV1 = "DB100.1826.2";
                break;
            case 624:
                resultV1 = "1810";
                resultV2 = "1810";
                resultV1 = "DB100.1830.2";
                break;
            case 625:
                resultV1 = "1816";
                resultV2 = "1816";
                resultV1 = "DB100.1834.2";
                break;
            case 626:
                resultV1 = "1822";
                resultV2 = "1822";
                resultV1 = "DB100.1838.2";
                break;
            default:
                return;
        }
        result1 = siemensS7Net.Write(rgv4?resultV1+".4":resultV1+".3", rgv4?rgv5:rgv4);
        result1 = siemensS7Net.Write(resultV1, rgv6);
        //硫化罐任务写入后,回读一次,看是否成功
        try {
            Thread.sleep(200);
@@ -584,7 +592,7 @@
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(rgv4?resultV1+".4":resultV1+".3", rgv4?rgv5:rgv4);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
@@ -592,56 +600,18 @@
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read(resultV1, (short) 2);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    boolean status1 = status[rgv4? 4:3];
                    if (status1 == rgv4?rgv5:rgv4){
                    if (status[2]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(rgv4?resultV1+".4":resultV1+".3", rgv4?rgv5:rgv4);
                        result1 = siemensS7Net.Write(resultV1, rgv6);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(rgv4?resultV1+".4":resultV1+".3", rgv4?rgv5:rgv4);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
            }catch (Exception e){
                log.error("写入RGV数据后回读出错,异常:"+e);
            }
            writeCount++;
        } while (writeCount<6);
        result2 = siemensS7Net.Write(rgv4?resultV2+".3":resultV2+".4", rgv4?rgv4:rgv5);
        writeCount = 1;
        do {
            try{
                if(!result2.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(rgv4?resultV2+".3":resultV2+".4", rgv4?rgv4:rgv5);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
                OperateResultExOne<byte[]> resultRead2 = siemensS7Net.Read(resultV2, (short) 1);
                if (resultRead2.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead2.Content, 0, 1);
                    boolean status1 = status[rgv4? 3:4];
                    if (status1 ==  rgv4?rgv4:rgv5){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        result2 = siemensS7Net.Write(rgv4?resultV2+".3":resultV2+".4", rgv4?rgv4:rgv5);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(rgv4?resultV2+".3":resultV2+".4", rgv4?rgv4:rgv5);
                    result1 = siemensS7Net.Write(resultV1, rgv6);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
@@ -652,6 +622,91 @@
            writeCount++;
        } while (writeCount<6);
    }
    private void write10(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        boolean rgv4 = staProtocol.isRGV4();
        boolean rgv5 = staProtocol.isRGV5();
        OperateResult result1 = null;
        String resultV1 = "";
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1826";
                break;
            case 624:
                resultV1 = "DB100.1830";
                break;
            case 625:
                resultV1 = "DB100.1834";
                break;
            case 626:
                resultV1 = "DB100.1838";
                break;
            default:
                return;
        }
        if (rgv4){
            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
        } else {
            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
        }
        //硫化罐任务写入后,回读一次,看是否成功
        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);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    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[rgv4? 0:1]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        if (rgv4){
                            result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                        } else {
                            result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                        }
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    if (rgv4){
                        result1 = siemensS7Net.Write(resultV1+".0", rgv4);
                    } else {
                        result1 = siemensS7Net.Write(resultV1+".1", rgv5);
                    }
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
            }catch (Exception e){
                log.error("写入RGV数据后回读出错,异常:"+e);
            }
            writeCount++;
        } while (writeCount<6);
    }
    private void write9(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
@@ -663,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;