pang.jiabao
7 天以前 bdd676ea0246acd555fff9c98c8d0bf24865437c
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -45,20 +45,20 @@
    private short heartBeatVal = 1;
    private StaError1 staError1;
    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
        add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);
        add(201);add(202);add(203);add(204);add(205);
    }};
    public static final ArrayList<Integer> BarcodeList = new ArrayList<Integer>() {{
        add(1); add(2);
        add(1); add(2);add(3);
    }};
    public static final ArrayList<Integer> staNosErrList = new ArrayList<Integer>() {{
        add(104); add(106);
        add(201); add(203); add(205);
    }};
    /**
     * 条码数量
     */
    private int barcodeSize = 2;
    private int barcodeSize = 3;
    /**
     * 入出库模式
@@ -98,6 +98,9 @@
                    case 2:
                        write((StaProtocol)task.getData());
//                        log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                        break;
                    case 3:
                        write1((StaProtocol)task.getData());
                        break;
                    default:
                        break;
@@ -183,7 +186,7 @@
    private void read() {
        // 站点信息
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (8*8));
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (8*5));
        if (result.IsSuccess) {
            for (int i = 0; i < staNos.size(); i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -205,8 +208,9 @@
                staProtocol.setEmptyMk(status[4]);  // 空板信号
                staProtocol.setFullPlt(status[5]);  // 满托盘
                staProtocol.setHigh(status[6]);     // 高库位
                staProtocol.setLow(status[7]);      // 中库位
                staProtocol.setCenter(status[8]);   // 低库位
                staProtocol.setLow(status[7]);      // 低库位
                staProtocol.setChang(status[8]);   // 长托盘
                staProtocol.setDuan(status[9]);   // 短托盘
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
@@ -220,7 +224,7 @@
        }
        // 条码扫描器
        OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.400", (short) (BarcodeList.size() * 10));
        OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.600", (short) (BarcodeList.size() * 10));
        if (barcodeResult.IsSuccess) {
            for (int i = 0; i < BarcodeList.size(); i++) {
                String barcode = siemensS7Net.getByteTransform().TransString(barcodeResult.Content,i*10 + 2,8, "UTF-8");
@@ -232,28 +236,28 @@
        }
        // 外形检测
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.430", (short) (staNosErrList.size() *4)); // 不连续,多读中间一个
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.700", (short) (staNosErrList.size() *4)); // 不连续,多读中间一个
        if (resultErr.IsSuccess){
            for (int i = 0;i<staNosErrList.size();i++){
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4, 1);
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4 + 2, 1);
                StaProtocol staProtocol = station.get(staNosErrList.get(i));
                staProtocol.setFrontErr(status[0]);
                staProtocol.setBackErr(status[1]);
                staProtocol.setHighErr(status[2]);
                staProtocol.setLeftErr(status[3]);
                staProtocol.setRightErr(status[4]);
                staProtocol.setGroupSupportErr(status[5]);
//                staProtocol.setGroupSupportErr(status[5]);
                staProtocol.setWeightErr(status[5]);
                staProtocol.setBarcodeErr(status[6]);
                staProtocol.setWeightErr(status[7]);
                short goodsHeight = siemensS7Net.getByteTransform().TransInt16(resultErr.Content, i * 4 + 2);
                staProtocol.setGoodsHeight(goodsHeight);
//                short goodsHeight = siemensS7Net.getByteTransform().TransInt16(resultErr.Content, i * 4 + 2);
//                staProtocol.setGoodsHeight(goodsHeight);
            }
        }
        // 故障信息反馈
        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.442", (short) (staNos.size() * 4));
        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.400", (short) (staNos.size() * 4));
        if (resultErr2.IsSuccess) {
            for (int i = 0; i < staNos.size(); i++) {
        for (int i = 0; i < staNos.size(); i++) {
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4 + 2, 1);
                StaProtocol staProtocol = station.get(staNos.get(i)); // 站点编号
                staProtocol.setBreakerErr(status[0]);
@@ -305,15 +309,15 @@
            return;
        }
        int address = staNos.indexOf(staProtocol.getSiteId()) * 4;
        int address = staNos.indexOf(staProtocol.getSiteId()) * 6;
        OperateResult write;
        OperateResult write1;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB100." + address, staProtocol.getWorkNo().shortValue());    // 工作号
            write1 = siemensS7Net.Write("DB100." + (address + 2), staProtocol.getStaNo());    // 目标站
            write1 = siemensS7Net.Write("DB100." + (address + 4), staProtocol.getStaNo());    // 目标站
            write = siemensS7Net.Write("DB100." + address, staProtocol.getWorkNo());    // 工作号
            Thread.sleep(200);
            if(write.IsSuccess && write1.IsSuccess){
                break;
@@ -339,6 +343,24 @@
    }
    /**
     * 扫码器触发
     */
    private void write1(StaProtocol staProtocol) {
        if (null == staProtocol) {
            return;
        }
        OperateResult writeResult1 = siemensS7Net.Write("DB100.500",  true);    // 扫码器触发
        if (!writeResult1.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            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));
        }
    }
    /**
     * 心跳
     */
    private void heartbeat(){