#
Administrator
昨天 1c8455e647bfb059d52788afaa845c52e7d6213f
src/main/java/com/zy/core/network/real/ZyCrnV2RealConnect.java
@@ -141,28 +141,10 @@
                return response;
            }
            int writeAck = 0;
            boolean commandResult = false;
            do {
                OperateResult result = siemensNet.Write("DB100.0", (short) 0);
                if (result.IsSuccess) {
                    OperateResultExOne<byte[]> commandReadResult = siemensNet.Read("DB100.0", (short) 2);
                    if (commandReadResult.IsSuccess) {
                        short commandRead = siemensNet.getByteTransform().TransInt16(commandReadResult.Content, 0);
                        if (commandRead == 1) {
                            Thread.sleep(500);
                        }else {
                            commandResult = true;
                            break;
                        }
                    }
                }
                writeAck++;
                Thread.sleep(200);
            } while (writeAck < 5);
            if (!commandResult) {
                response.setMessage("堆垛机命令下发[id:{}] >>>>> {}" + command.getCrnNo() + "任务状态位异常");
            boolean commandAreaClearResult = clearCommandArea();
            if (!commandAreaClearResult) {
                News.error("堆垛机命令区清空失败 ===>> [id:{}]", command.getCrnNo());
                response.setMessage("堆垛机命令区清空失败");
                return response;
            }
@@ -253,4 +235,74 @@
        }
        return response;
    }
    private boolean clearCommandArea() throws InterruptedException {
        boolean confirmClearResult = clearCommandConfirm();
        if (!confirmClearResult) {
            return false;
        }
        short[] array = new short[10];
        int clearIdx = 0;
        do {
            OperateResult result = siemensNet.Write("DB100.0", array);
            if (result.IsSuccess) {
                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20);
                if (resultRead.IsSuccess && isCommandAreaEmpty(resultRead.Content)) {
                    return true;
                }
            }
            clearIdx++;
            Thread.sleep(200);
        } while (clearIdx < 5);
        return false;
    }
    private boolean clearCommandConfirm() throws InterruptedException {
        int clearConfirmIdx = 0;
        do {
            OperateResult result = siemensNet.Write("DB100.18", (short) 0);
            if (result.IsSuccess) {
                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.18", (short) 2);
                if (resultRead.IsSuccess) {
                    short confirm = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
                    if (confirm == 0) {
                        return true;
                    }
                }
            }
            clearConfirmIdx++;
            Thread.sleep(200);
        } while (clearConfirmIdx < 5);
        return false;
    }
    private boolean isCommandAreaEmpty(byte[] content) {
        short ackFinish = siemensNet.getByteTransform().TransInt16(content, 0);
        short taskNo = siemensNet.getByteTransform().TransInt16(content, 2);
        short taskMode = siemensNet.getByteTransform().TransInt16(content, 4);
        short sourcePosX = siemensNet.getByteTransform().TransInt16(content, 6);
        short sourcePosY = siemensNet.getByteTransform().TransInt16(content, 8);
        short sourcePosZ = siemensNet.getByteTransform().TransInt16(content, 10);
        short destinationPosX = siemensNet.getByteTransform().TransInt16(content, 12);
        short destinationPosY = siemensNet.getByteTransform().TransInt16(content, 14);
        short destinationPosZ = siemensNet.getByteTransform().TransInt16(content, 16);
        short confirm = siemensNet.getByteTransform().TransInt16(content, 18);
        return ackFinish == 0
                && taskNo == 0
                && taskMode == 0
                && sourcePosX == 0
                && sourcePosY == 0
                && sourcePosZ == 0
                && destinationPosX == 0
                && destinationPosY == 0
                && destinationPosZ == 0
                && confirm == 0;
    }
}