pjb
2 天以前 29e0a8a8f74a7155f7e6c0d854bb7566c655b0c8
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -63,7 +63,7 @@
    }};
    public static final ArrayList<Integer> rgvSiteBackWrkNo2= new ArrayList<Integer>() {{
        add(1044);
        add(1044);add(1090);
    }};
    public static final ArrayList<Integer> rgvSiteBackWrkNo3= new ArrayList<Integer>() {{
@@ -156,6 +156,10 @@
                    case 5:
                        writeGzxkc((StaProtocol)task.getData());
                        break;
                    // 给罐装线写罐装数量
                    case 6:
                        writeGzsl((StaProtocol)task.getData());
                        break;
                    default:
                        break;
                }
@@ -194,6 +198,25 @@
                    staProtocol.setPakMk(true);
                }
            }
        // 根据实时信息更新数据库
        try {
            List<BasDevp> basDevps = new ArrayList<>();
            for (Integer siteId2 : staNos) {
                StaProtocol staProtocol2 = station.get(siteId2);
                basDevps.add(staProtocol2.toSqlModel());
            }
            BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
            if(basDevps.size() > 0) {
                if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
                    throw new Exception("更新数据库数据失败");
                }
            }
        } catch (Exception e){
        }
    }
    @Override
@@ -224,34 +247,43 @@
        // 读罐装线反馈信息
        if (slave.getId() > 3) {
//            log.info("读取{}号罐装线plc信息成功",slave.getId());
            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101.0", (short) 58);
            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101.0", (short) 64);
            if (read.IsSuccess) {
                // 15秒打印一下日志
                if (System.currentTimeMillis() - lastLogTime >= 15000) {
                    OperateResultExOne<byte[]> readKc = siemensS7Net.Read("DB100.6", (short) 2);
                    if(readKc.IsSuccess){
                        short i = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 0);
                        log.info("读{}号罐装线可出信号成功,值:{}", slave.getId() -3, i);
                    }
                    lastLogTime = System.currentTimeMillis();
                }
//                if (System.currentTimeMillis() - lastLogTime >= 30000) {
//                    OperateResultExOne<byte[]> readKc = siemensS7Net.Read("DB100.6", (short) 4);
//                    if(readKc.IsSuccess){
//                        short i = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 0);
//                        short wantBucketCount = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 2);
//                        log.info("读{}号罐装线可出信号成功,值:{},剩余要桶数量:{}", slave.getId() -3, i, wantBucketCount);
//                    }
//                    lastLogTime = System.currentTimeMillis();
//                }
                // 成品信息反馈到罐装线出口站点
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol = devpThread.getStation().get(gzxResultSite.get(slave.getId()-4));
                if (staProtocol != null) {
                    staProtocol.setWantBucketFlag(siemensS7Net.getByteTransform().TransInt16(read.Content, 0));// 罐装线要桶型信号
                    OperateResultExOne<byte[]> read2 = siemensS7Net.Read("DB100.8", (short) 2); // 罐装线罐装数量(拖)
                    if(read2.IsSuccess){
                        staProtocol.setWantBucketCount(siemensS7Net.getByteTransform().TransInt16(read2.Content, 0));
                    } else {
                        log.error("读{}号罐装线要拖数量失败", slave.getId() -3);
                    }
                    staProtocol.setWrkNo(siemensS7Net.getByteTransform().TransInt16(read.Content, 2));
                    double weight208l1 = siemensS7Net.getByteTransform().TransInt32(read.Content, 4); // 200L桶1净重
                    double weight208l2 = siemensS7Net.getByteTransform().TransInt32(read.Content, 8); // 200L桶2净重
                    double weight208l3 = siemensS7Net.getByteTransform().TransInt32(read.Content, 12); // 200L桶3净重
                    double weight208l4 = siemensS7Net.getByteTransform().TransInt32(read.Content, 16); // 200L桶4净重
                    double weight1T = siemensS7Net.getByteTransform().TransInt32(read.Content, 20); // 1T桶净重
                    double weight208l1 = siemensS7Net.getByteTransform().TransSingle(read.Content, 4); // 200L桶1净重
                    double weight208l2 = siemensS7Net.getByteTransform().TransSingle(read.Content, 8); // 200L桶2净重
                    double weight208l3 = siemensS7Net.getByteTransform().TransSingle(read.Content, 12); // 200L桶3净重
                    double weight208l4 = siemensS7Net.getByteTransform().TransSingle(read.Content, 16); // 200L桶4净重
                    double weight1T = siemensS7Net.getByteTransform().TransSingle(read.Content, 20); // 1T桶净重
//                    log.info("读取工罐装线净重 200l桶1:{},200l桶2:{},200l桶3:{},200l桶4:{},1t桶:{}",weight208l1,weight208l2,weight208l3,weight208l4,weight1T);
                    staProtocol.setWeight(weight208l1 + weight208l2 + weight208l3 + weight208l4 + weight1T);
                    staProtocol.setGrossWeight(siemensS7Net.getByteTransform().TransInt32(read.Content, 24));
                    staProtocol.setGrossWeight(siemensS7Net.getByteTransform().TransSingle(read.Content, 24));
                    staProtocol.setMatnr(siemensS7Net.getByteTransform().TransString(read.Content, 28,12,"UTF-8"));
                    staProtocol.setBatch(siemensS7Net.getByteTransform().TransString(read.Content, 40,10,"UTF-8"));
                    staProtocol.setManuDate(siemensS7Net.getByteTransform().TransString(read.Content, 50,8,"UTF-8"));
                    staProtocol.setReinspection(siemensS7Net.getByteTransform().TransInt16(read.Content, 58) == 1);
                    staProtocol.setCannedVolume(siemensS7Net.getByteTransform().TransSingle(read.Content, 60));
                }
                return;
            }
@@ -452,6 +484,7 @@
            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));
        }
        read();
    }
    /**
@@ -503,7 +536,17 @@
        do {
            write = siemensS7Net.Write("DB100.0", common);
            Thread.sleep(200);
            if(write.IsSuccess){
            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB100.0", (short) 6);
            if(write.IsSuccess && read.IsSuccess){
                short bucketType = siemensS7Net.getByteTransform().TransInt16(read.Content, 0);
                short bucketCount = siemensS7Net.getByteTransform().TransInt16(read.Content, 2);
                short workNo = siemensS7Net.getByteTransform().TransInt16(read.Content, 4);
                if ( workNo != common[2] || bucketCount != common[1] || bucketType != common[0]) {
                    writeCount++;
                    log.error("给罐装线写入桶型信息成功,但回读失败:写入任务号:{},回读任务号:{},输送线plc编号={},写入次数={}", Arrays.toString(common), bucketType +"-" + bucketCount + "-" + workNo, slave.getId(), writeCount);
                    continue;
                }
                log.info("给罐装线写入桶型信息成功,回读成功:任务号:{},回读任务号:{},输送线plc编号={},写入次数={}",staProtocol.getWorkNo().shortValue(), Arrays.toString(common), slave.getId(), writeCount);
                break;
            }
            else {
@@ -563,6 +606,47 @@
    }
    /**
     * 给罐装线写罐装数量
     */
    private void writeGzsl(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        short[] common = new short[1];
        common[0] = (short) staProtocol.getWantBucketCount();
        OperateResult write;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100.8", common);
            Thread.sleep(200);
            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB100.8", (short) 2);
            if(write.IsSuccess && read.IsSuccess){
                short i = siemensS7Net.getByteTransform().TransInt16(read.Content, 0);
                if ( i != common[0]) {
                    writeCount++;
                    log.error("给罐装线写罐装数量成功,但回读失败:读取值:{},输送线plc编号={},写入次数={}", i, slave.getId(), writeCount);
                    continue;
                }
                break;
            }
            else {
                writeCount++;
                log.error("给罐装线写罐装数量:{}失败。输送线plc编号={},写入次数={}", common[0], slave.getId(), writeCount);
            }
        }while (writeCount<5);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】给给罐装线写罐装数量失败。输送线plc编号={1},站点数据={2}", slave.getId(), staProtocol.getWantBucketCount()));
            News.error("给罐装线写罐装数量失败。输送线plc编号={},站点数据={}", slave.getId(), staProtocol.getWantBucketCount());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 给罐装线写罐装数量命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), staProtocol.getWantBucketCount()));
            News.info("给罐装线写罐装数量号命令下发成功 [id:{}] >>>>> 命令下发: {}",  slave.getId(), staProtocol.getWantBucketCount());
        }
    }
    /**
     * 心跳
     */
    private void heartbeat(){