#
Administrator
1 天以前 a03b6ca1541d4351017bdfaf51de03f9fd3d655c
#
1个文件已修改
70 ■■■■■ 已修改文件
src/main/java/com/zy/core/network/real/ZyCrnV2RealConnect.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,48 @@
        }
        return response;
    }
    private boolean clearCommandArea() throws InterruptedException {
        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 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;
    }
}