lty
9 天以前 19b3cd8d64af08e5c0b3bd680c699e46a07e13d3
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -95,6 +95,16 @@
        add(203);add(205);add(208);add(211);
    }};
    public static final ArrayList<Integer> staNosInList1 = new ArrayList<Integer>() {{
        add(122);
        add(222);add(224);add(227);add(230);
    }};
    public static final ArrayList<Integer> staNosInList2 = new ArrayList<Integer>() {{
        add(101); add(104);add(106);add(108);
        add(202);add(204);add(207);add(210);
    }};
    private Integer count=0;
    /**
@@ -117,6 +127,17 @@
    public SiemensDevpThread(DevpSlave slave) {
        this.slave = slave;
    }
    private ArrayList<Integer> getStaNoIn() {
        switch (slave.getId()) {
            case 1:
                return staNosInList1;
            case 2:
                return staNosInList2;
            default:
                throw new CoolException("服务器异常");
        }
    }
    private ArrayList<Integer> getStaNoErr() {
@@ -182,6 +203,9 @@
                    case 2:
                        write((StaProtocol)task.getData());
                        log.error("输送线下发命令:"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
                        break;
                    case 3:
                        write2((StaProtocol)task.getData());
                        break;
                    default:
                        break;
@@ -271,6 +295,7 @@
        ArrayList<Integer> staNos = getStaNo();
        ArrayList<Integer> staNosErrList = getStaNoErr();
        ArrayList<Integer> staNoWeight = getStaNoWeight();
        ArrayList<Integer> staNosInList = getStaNoIn();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
        OperateResultExOne<byte[]> resultWeight = null;
@@ -355,6 +380,20 @@
                }
            }
            //入库满足
            ArrayList<Integer> staNosIns = staNosInList;
            int staNosInSize = staNosIns.size();
            OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
            if(resultIn.IsSuccess){
                for (int i = 0; i < staNosInSize; i++) {
                    Integer siteId = staNosIns.get(i);
                    StaProtocol staProtocol = station.get(siteId);
                    staProtocol.setStamp(siemensS7Net.getByteTransform().TransInt32(result.Content, i*6));
                }
            }
//        //plc故障
//        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
//        if (resultErr2.IsSuccess) {
@@ -432,6 +471,38 @@
        }
    private void write2(StaProtocol staProtocol) throws InterruptedException {
        OperateResult write = null;
        int writeCount = 0;
        ArrayList<Integer> staNosInList = getStaNoIn();
        ArrayList<Integer> staNosIns = staNosInList;
        int staNosInSize = staNosIns.size();
        OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
        int offset = 0;
        if(resultIn.IsSuccess){
            for (int i = 0; i < staNosInSize; i++) {
                Integer siteId = staNosIns.get(i);
                if(staProtocol.getSiteId() == siteId){
                    offset = i;
                }
            }
        }
        do {
            write = siemensS7Net.Write("DB1000." + offset*6 + 2,staProtocol.getWorkNo());    // 工作号
            if(write.IsSuccess ){
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            }
            else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }while (writeCount<5);
    }
    /**
     * 写入 ID+目标站 =====> 单站点写入
     */