pang.jiabao
1 天以前 a1e94379b115721b2e604070dc48063b8016f72f
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -159,6 +159,11 @@
                        write((StaProtocol) task.getData());
                        read();
                        break;
                    // 出入库写码盘信息
                    case 3:
                        write3((StaProtocol) task.getData());
                        read();
                        break;
                    default:
                        break;
                }
@@ -653,6 +658,48 @@
    }
    private void write3(StaProtocol staProtocol){
        int lx = 0,mp = 0,lev = 0;
        switch (staProtocol.getSiteId()) {
            case 205: lx = 16;mp = 18;lev=344;break;
            case 207: lx = 24;mp = 26;lev=348;break;
            case 210: lx = 36;mp = 38;lev=354;break;
            case 212: lx = 44;mp = 46;lev=358;break;
            default:
                log.error("写码盘信息站点有误:{}" , staProtocol.getSiteId());
                return;
        }
        String addressPre = "DB79.";
        //任务下发次数
        int writeCount = 0;
        //任务下发成功标识
        boolean writeFlag = false;
        while (writeCount < 5) {
            OperateResult writeResult1 = siemensS7Net.Write(addressPre + lx, staProtocol.getLx());    // 工装类型
            OperateResult writeResult2 = siemensS7Net.Write(addressPre + mp, staProtocol.getMp());    // 是否码盘
            OperateResult writeResult3 = siemensS7Net.Write(addressPre + lev, staProtocol.getLev());    // 码盘层数
            if (writeResult1.IsSuccess && writeResult2.IsSuccess && writeResult3.IsSuccess) {
                    writeFlag = true;
                    log.info("码盘信息写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    break;
            } else {
                writeCount++;
                log.error("码盘信息写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }
        //写命令尝试了5次还是失败了
        if (!writeFlag) {
            //重新添加数据到任务队列
            MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
            log.error("码盘信息写入输送线命令尝试5次失败重新推送队列。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
//    /**
//     * 写入 ID+目标站 =====> 单站点写入
//     */