#
Junjie
20 小时以前 cc720a16549bbb691344afb31f702530588c75fd
src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -244,32 +244,6 @@
            return commandResponse;
        }
        if (isDuplicateStationCommand(statusEntity, command)) {
            log.info("输送线命令重复,已跳过当前站点命令。任务号={},站点号={},目标站={},taskWriteIdx={},currentTaskNo={},currentTargetStaNo={}",
                    command.getTaskNo(),
                    command.getStationId(),
                    command.getTargetStaNo(),
                    taskWriteIdx,
                    statusEntity == null ? null : statusEntity.getTaskNo(),
                    statusEntity == null ? null : statusEntity.getTargetStaNo());
            commandResponse.setResult(true);
            commandResponse.setMessage("命令重复,已跳过下发");
            return commandResponse;
        }
        Integer duplicateSlotIdx = findDuplicateTaskAreaSlot(stationIdx, command);
        if (duplicateSlotIdx != null) {
            log.info("输送线命令重复,已跳过任务写入区重复命令。任务号={},站点号={},目标站={},taskWriteIdx={},duplicateSlotIdx={}",
                    command.getTaskNo(),
                    command.getStationId(),
                    command.getTargetStaNo(),
                    taskWriteIdx,
                    duplicateSlotIdx);
            commandResponse.setResult(true);
            commandResponse.setMessage("任务区已有相同命令,已跳过下发");
            return commandResponse;
        }
        int useTaskWriteIdx = getTaskWriteIdx(stationIdx, taskWriteIdx);
        if (useTaskWriteIdx == -1) {
            commandResponse.setMessage("命令下发超时,无法找到可用下发区域");
@@ -358,36 +332,6 @@
            }
        }
        return useIdx;
    }
    private boolean isDuplicateStationCommand(ZyStationStatusEntity statusEntity, StationCommand command) {
        if (statusEntity == null || command == null) {
            return false;
        }
        return command.getTaskNo() != null
                && command.getTargetStaNo() != null
                && command.getTaskNo().equals(statusEntity.getTaskNo())
                && command.getTargetStaNo().equals(statusEntity.getTargetStaNo());
    }
    private Integer findDuplicateTaskAreaSlot(int stationIdx, StationCommand command) {
        if (stationIdx < 0 || command == null || command.getTaskNo() == null || command.getTargetStaNo() == null) {
            return null;
        }
        OperateResultExOne<byte[]> resultTask = siemensNet.Read("DB13." + (stationIdx * TASK_AREA_LENGTH), (short) TASK_AREA_LENGTH);
        if (!resultTask.IsSuccess || resultTask.Content == null) {
            return null;
        }
        for (int slotIdx = 1; slotIdx <= TASK_AREA_SLOT_COUNT; slotIdx++) {
            int offset = slotIdx * TASK_AREA_SLOT_SIZE;
            int taskNo = siemensNet.getByteTransform().TransInt32(resultTask.Content, offset);
            int targetPoint = siemensNet.getByteTransform().TransInt16(resultTask.Content, offset + 6);
            if (command.getTaskNo().equals(taskNo)
                    && command.getTargetStaNo().equals(targetPoint)) {
                return slotIdx;
            }
        }
        return null;
    }
    private byte[] readTaskBufferRaw() {