自动化立体仓库 - WCS系统
#
lsh
2024-07-16 b36a860e578d116a5e8d134517989e09816395ae
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -12,6 +12,7 @@
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.core.DevpThread;
import com.zy.core.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
@@ -132,7 +133,7 @@
    /**
     * 条码数量
     */
    private int barcodeSize = 5;
    private int barcodeSize = 9;
    /**
     * 入出库模式
@@ -206,6 +207,8 @@
                    case 11:
                        write11((StaProtocol)task.getData());
                        break;
                    case 99:
                        write99((Integer) task.getData());
                    default:
                        break;
                }
@@ -304,14 +307,12 @@
            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*10), (short) 8);
                OperateResultExOne<byte[]> resultRgv2 = siemensS7Net.Read("DB100."+(1824+i*12), (short) 8);
                if (resultRgv.IsSuccess) {
                    Integer siteId = staNosRgv[i]; // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
                    if (null == staProtocol) {
                        staProtocol = new StaProtocol();
                        staProtocol.setSiteId(siteId);
                        station.put(siteId, staProtocol);
                        continue;
                    }
                    try{
                        staProtocol.setEndRow(siemensS7Net.getByteTransform().TransInt16(resultRgv2.Content, 0));     // 小车目标位
@@ -350,12 +351,20 @@
        //条码扫描器
        Thread.sleep(200);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840",(short)(barcodeSize*8));
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.2440",(short)(barcodeSize*8));
        if (result2.IsSuccess) {
            for (int i = 0; i < barcodeSize; i++) {  //1:217  2:221  3:null 4:215  5:219
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,6, "UTF-8");
            int[] staNosRgv = {281,292,173,214,120,100,101,102,103};
            for (int i = 0; i < barcodeSize; i++) {  //1:281  2:292  3:174(173) 4:214  5:120
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                    Integer siteId = staNosRgv[i]; // 站点编号
                    StaProtocol staProtocol = station.get(siteId);
                    if (null == staProtocol) {
                        continue;
                    }
                    staProtocol.setBarcode(barcode);
                    barcodeThread.setBarcode(barcode);
                }
            }
@@ -422,9 +431,9 @@
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo());    // 工作号
            Thread.sleep(500);
            write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue());    // 目标站
//            Thread.sleep(500);
            write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo());    // 工作号
            if(write.IsSuccess || write1.IsSuccess){
                writeCount=6;
            }else {
@@ -562,7 +571,7 @@
            log.error("写入输送线站点数据失败。输送线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)));
            log.info("输送线命令下发码垛完成  给输送复位 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
            log.info("输送线命令下发完成  给输送复位 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSONString(staProtocol));
        }
    }
@@ -573,28 +582,42 @@
        if (null == staProtocol) {
            return;
        }
        News.error("RGV写入命令"+JSON.toJSONString(staProtocol));
        boolean rgv6 = staProtocol.isRGV6();
        OperateResult result1 = null;
        OperateResult result2 = null;
        String resultV1 = "";
        String resultV2 = "";
        String resultV3 = "";
        short resultS1 = 1;
        short resultS2 = 2;
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1830";
                resultV2 = "DB100.1826";
                resultV3 = "DB100.1828";
                break;
            case 624:
                resultV1 = "DB100.1840";
                resultV1 = "DB100.1842";
                resultV2 = "DB100.1838";
                resultV3 = "DB100.1840";
                break;
            case 625:
                resultV1 = "DB100.1850";
                resultV1 = "DB100.1854";
                resultV2 = "DB100.1850";
                resultV3 = "DB100.1852";
                break;
            case 626:
                resultV1 = "DB100.1860";
                resultV1 = "DB100.1866";
                resultV2 = "DB100.1862";
                resultV3 = "DB100.1864";
                break;
            default:
                return;
        }
        siemensS7Net.Write(resultV2, (short) 0);
        siemensS7Net.Write(resultV3, (short) 0);
        result1 = siemensS7Net.Write(resultV1, resultS1);
        //硫化罐任务写入后,回读一次,看是否成功
@@ -608,7 +631,7 @@
        do {
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -620,14 +643,14 @@
                    if (status == 1){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(resultV1, resultS1);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -652,7 +675,7 @@
        do {
            try{
                if(!result2.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV1, resultS2);
                    Thread.sleep(100);
@@ -665,14 +688,14 @@
                    if (status == resultS2){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result2 = siemensS7Net.Write(resultV1, resultS2);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV1, resultS2);
                    Thread.sleep(100);
                    writeCount++;
@@ -689,26 +712,33 @@
        if (null == staProtocol) {
            return;
        }
        News.error("RGV写入命令"+JSON.toJSONString(staProtocol));
        boolean rgv4 = staProtocol.isRGV4();
        boolean rgv5 = staProtocol.isRGV5();
        OperateResult result1 = null;
        OperateResult result2 = null;
        String resultV1 = "";
        String resultV2 = "";
        short resultS1 = 1;
        short resultS2 = 2;
        if (rgv4){
            switch (staProtocol.getSiteId()){
                case 623:
                    resultV1 = "DB100.1826";
                    resultV2 = "DB100.1830";
                    break;
                case 624:
                    resultV1 = "DB100.1836";
                    resultV1 = "DB100.1838";
                    resultV2 = "DB100.1842";
                    break;
                case 625:
                    resultV1 = "DB100.1846";
                    resultV1 = "DB100.1850";
                    resultV2 = "DB100.1854";
                    break;
                case 626:
                    resultV1 = "DB100.1856";
                    resultV1 = "DB100.1862";
                    resultV2 = "DB100.1866";
                    break;
                default:
                    return;
@@ -717,20 +747,25 @@
            switch (staProtocol.getSiteId()){
                case 623:
                    resultV1 = "DB100.1828";
                    resultV2 = "DB100.1830";
                    break;
                case 624:
                    resultV1 = "DB100.1838";
                    resultV1 = "DB100.1840";
                    resultV2 = "DB100.1842";
                    break;
                case 625:
                    resultV1 = "DB100.1848";
                    resultV1 = "DB100.1852";
                    resultV2 = "DB100.1854";
                    break;
                case 626:
                    resultV1 = "DB100.1858";
                    resultV1 = "DB100.1864";
                    resultV2 = "DB100.1866";
                    break;
                default:
                    return;
            }
        }
        siemensS7Net.Write(resultV2, (short) 0);
        result1 = siemensS7Net.Write(resultV1, resultS1);
        //硫化罐任务写入后,回读一次,看是否成功
        try {
@@ -742,7 +777,7 @@
        do {
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -755,14 +790,14 @@
                    if (statusR1 == resultS1){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(resultV1, resultS1);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -781,7 +816,7 @@
        do {
            try{
                if(!result2.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV1, resultS2);
                    Thread.sleep(100);
                    writeCount++;
@@ -794,7 +829,7 @@
                    if (statusR1 == resultS2){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result2 = siemensS7Net.Write(resultV1, resultS2);
                        Thread.sleep(100);
@@ -802,7 +837,7 @@
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV1, resultS2);
                    Thread.sleep(100);
                    writeCount++;
@@ -824,22 +859,24 @@
        OperateResult result2 = null;
        String resultV1 = "";
        String resultV2 = "";
        News.error("RGV写入命令"+JSON.toJSONString(staProtocol));
        switch (staProtocol.getSiteId()){
            case 623:
                resultV1 = "DB100.1824";
                resultV2 = "DB100.1828";
                resultV2 = "DB100.1848";
                break;
            case 624:
                resultV1 = "DB100.1828";
                resultV2 = "DB100.1824";
                resultV1 = "DB100.1836";
                resultV2 = "DB100.1860";
                break;
            case 625:
                resultV1 = "DB100.1832";
                resultV2 = "DB100.1836";
                resultV1 = "DB100.1848";
                resultV2 = "DB100.1824";
                break;
            case 626:
                resultV1 = "DB100.1836";
                resultV2 = "DB100.1832";
                resultV1 = "DB100.1860";
                resultV2 = "DB100.1836";
                break;
            default:
                return;
@@ -857,7 +894,7 @@
        do {
            try{
                if(!result1.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -869,14 +906,14 @@
                    if (transInt16 == resultS1){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result1 = siemensS7Net.Write(resultV1, resultS1);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result1 = siemensS7Net.Write(resultV1, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -892,7 +929,7 @@
        do {
            try{
                if(!result2.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV2, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -904,14 +941,14 @@
                    if (transInt16 == resultS1){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                        result2 = siemensS7Net.Write(resultV2, resultS1);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSON(staProtocol),writeCount);
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(staProtocol),writeCount);
                    result2 = siemensS7Net.Write(resultV2, resultS1);
                    Thread.sleep(100);
                    writeCount++;
@@ -925,15 +962,68 @@
        if (!result1.IsSuccess) {
            staProtocol = station.get(staProtocol.getSiteId());
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSONString(staProtocol)));
            log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSONString(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            log.info("输送线命令下发码垛完成  给输送复位 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(staProtocol)));
            log.info("输送线命令下发完成  给输送复位 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSONString(staProtocol));
        }
    }
    // 更新入出库模式
    private void write99(Integer devNo) throws InterruptedException {
        String resultV1 = "";
        switch (devNo){
            case 1:
                resultV1 = "DB500.0.0";
                break;
            case 2:
                resultV1 = "DB500.0.1";
                break;
            case 3:
                resultV1 = "DB500.0.2";
                break;
            default:
                return;
        }
        OperateResult result = siemensS7Net.Write(resultV1, true);
        Integer writeCount = 0;
        do {
            try{
                if(!result.IsSuccess){
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(devNo),writeCount);
                    result = siemensS7Net.Write(resultV1, true);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
                OperateResultExOne<byte[]> resultRead1 = siemensS7Net.Read("resultV1", (short) 1);
                if (resultRead1.IsSuccess) {
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultRead1.Content, 0, 1);
                    if (status[devNo-1]){
                        break;
                    } else {
                        log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(devNo),writeCount);
                        result = siemensS7Net.Write(resultV1, true);
                        Thread.sleep(100);
                        writeCount++;
                        continue;
                    }
                } else {
                    log.error("写入RGV数据失败,重新下发任务  写入直接失败 ===>> [id:{}],{},[写入次数:{}]", slave.getId(), JSON.toJSONString(devNo),writeCount);
                    result = siemensS7Net.Write(resultV1, true);
                    Thread.sleep(100);
                    writeCount++;
                    continue;
                }
            }catch (Exception e){
                log.error("写入数据后回读出错,异常:"+e);
            }
            writeCount++;
        } while (writeCount<6);
    }
        // 更新入出库模式
    private void updateIoMode() throws InterruptedException {
        if (this.ioModeOf2F != IoModeType.NONE) {
            if (!siemensS7Net.Write("DB100.180", this.ioModeOf2F.id).IsSuccess) {