#
zwl
2026-02-09 ad79ba405b2d1ac96423f88f4e8a76c584b9d38a
src/main/java/com/zy/core/network/real/ZyDualCrnRealConnect.java
@@ -58,43 +58,33 @@
    @Override
    public ZyDualCrnStatusEntity getStatus() {
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 66);
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
            if (result.IsSuccess) {
                ZyDualCrnStatusEntity crnStatus = new ZyDualCrnStatusEntity();
                crnStatus.setCrnNo(deviceConfig.getDeviceNo());
                crnStatus.setMode((int) siemensNet.getByteTransform().TransInt16(result.Content, 0));
                //工位1
                crnStatus.setTaskNo((int) siemensNet.getByteTransform().TransInt16(result.Content, 2));
                crnStatus.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 4));
                crnStatus.setForkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 6));
                crnStatus.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 8));
                crnStatus.setTaskReceive((int) siemensNet.getByteTransform().TransInt16(result.Content, 10));
                //工位2
                crnStatus.setTaskNoTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 12));
                crnStatus.setStatusTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 14));
                crnStatus.setForkPosTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 16));
                crnStatus.setLoadedTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 18));
                crnStatus.setTaskReceiveTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 20));
                crnStatus.setBay((int) siemensNet.getByteTransform().TransInt16(result.Content, 22));
                crnStatus.setLevel((int) siemensNet.getByteTransform().TransInt16(result.Content, 24));
                crnStatus.setLiftPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 26));
                crnStatus.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 28));
                crnStatus.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 30));
                crnStatus.setTemp1((int) siemensNet.getByteTransform().TransInt16(result.Content, 34));
                crnStatus.setTemp2((int) siemensNet.getByteTransform().TransInt16(result.Content, 36));
                crnStatus.setTemp3((int) siemensNet.getByteTransform().TransInt16(result.Content, 38));
                crnStatus.setTemp4((int) siemensNet.getByteTransform().TransInt16(result.Content, 40));
                crnStatus.setXSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 42));
                crnStatus.setYSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 44));
                crnStatus.setZSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 46));
                crnStatus.setXDistance((int) siemensNet.getByteTransform().TransInt16(result.Content, 48));
                crnStatus.setYDistance((int) siemensNet.getByteTransform().TransInt16(result.Content, 50));
                crnStatus.setXDuration((int) siemensNet.getByteTransform().TransInt16(result.Content, 52));
                crnStatus.setYDuration((int) siemensNet.getByteTransform().TransInt16(result.Content, 54));
                crnStatus.setGoodsType((int) siemensNet.getByteTransform().TransInt16(result.Content, 56));
                crnStatus.setMode((int)siemensNet.getByteTransform().TransInt16(result.Content, 0));
                crnStatus.setTaskNo((int)siemensNet.getByteTransform().TransInt16(result.Content, 2));
                crnStatus.setStatus((int)siemensNet.getByteTransform().TransInt16(result.Content, 4));
                crnStatus.setBay((int)siemensNet.getByteTransform().TransInt16(result.Content, 6));
                crnStatus.setLevel((int)siemensNet.getByteTransform().TransInt16(result.Content, 8));
                crnStatus.setForkPos((int)siemensNet.getByteTransform().TransInt16(result.Content, 10));
                crnStatus.setLiftPos((int)siemensNet.getByteTransform().TransInt16(result.Content, 12));
                crnStatus.setWalkPos((int)siemensNet.getByteTransform().TransInt16(result.Content, 14));
                crnStatus.setLoaded((int)siemensNet.getByteTransform().TransInt16(result.Content, 16));
                crnStatus.setAlarm((int)siemensNet.getByteTransform().TransInt16(result.Content, 18));
                crnStatus.setTemp1((int)siemensNet.getByteTransform().TransInt16(result.Content, 20));
                crnStatus.setTemp2((int)siemensNet.getByteTransform().TransInt16(result.Content, 22));
                crnStatus.setTemp3((int)siemensNet.getByteTransform().TransInt16(result.Content, 24));
                crnStatus.setTemp4((int)siemensNet.getByteTransform().TransInt16(result.Content, 26));
                crnStatus.setXSpeed((int)siemensNet.getByteTransform().TransInt16(result.Content, 28));
                crnStatus.setYSpeed((int)siemensNet.getByteTransform().TransInt16(result.Content, 32));
                crnStatus.setZSpeed((int)siemensNet.getByteTransform().TransInt16(result.Content, 36));
                crnStatus.setXDistance((int) siemensNet.getByteTransform().TransSingle(result.Content, 40));
                crnStatus.setYDistance((int) siemensNet.getByteTransform().TransSingle(result.Content, 44));
                crnStatus.setXDuration((int) siemensNet.getByteTransform().TransSingle(result.Content, 48));
                crnStatus.setYDuration((int) siemensNet.getByteTransform().TransSingle(result.Content, 52));
                crnStatus.setWeight(siemensNet.getByteTransform().TransSingle(result.Content, 56));
                String barcode = siemensNet.getByteTransform().TransString(result.Content, 58, 8, "UTF-8");
                crnStatus.setBarcode(barcode);
@@ -121,34 +111,37 @@
                 return response;
             }
             int writeAck = 0;
             do {
                 OperateResult resultAck = siemensNet.Write("DB100.0", (short) 0);
                 if (resultAck.IsSuccess){
                     Thread.sleep(200);
                     OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 2);
                     short ack = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
                     if (ack != 0) {
                         writeAck++;
                     }else {
//                         News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), "ack复位完成");
                         break;
                     }
                 }
             }while (writeAck <5);
             String address = "DB100.0";
             if (command.getStation() == 1) {
                 //工位1
                 address = "DB100.0";
             }else {
                 //工位2
                 address = "DB100.18";
             }
             String confirmAddress = "DB100.16";
             if (command.getStation() == 1) {
                 //工位1
                 confirmAddress = "DB100.16";
             }else {
                 //工位2
                 confirmAddress = "DB100.34";
             }
             String confirmAddress = "DB100.18";
             short[] array = new short[9];
             array[0] = command.getTaskNo().shortValue();
             array[1] = command.getTaskMode().shortValue();
             array[2] = command.getSourcePosX().shortValue();
             array[3] = command.getSourcePosY().shortValue();
             array[4] = command.getSourcePosZ().shortValue();
             array[5] = command.getDestinationPosX().shortValue();
             array[6] = command.getDestinationPosY().shortValue();
             array[7] = command.getDestinationPosZ().shortValue();
             array[8] = (short) 0;
             short[] array = new short[10];
             array[0] = 0;
             array[1] = command.getTaskNo().shortValue();
             array[2] = command.getTaskMode().shortValue();
             array[3] = command.getSourcePosX().shortValue();
             array[4] = command.getSourcePosY().shortValue();
             array[5] = command.getSourcePosZ().shortValue();
             array[6] = command.getDestinationPosX().shortValue();
             array[7] = command.getDestinationPosY().shortValue();
             array[8] = command.getDestinationPosZ().shortValue();
             array[9] = (short) 0;
             OperateResult result = siemensNet.Write(address, array);
             if (!result.IsSuccess) {
@@ -159,7 +152,7 @@
             int idx = 0;
             do {
                 OperateResultExOne<byte[]> resultRead = siemensNet.Read(address, (short) 18);
                 OperateResultExOne<byte[]> resultRead = siemensNet.Read(address, (short) 20);
                 if (resultRead.IsSuccess) {
                    short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2);
                    short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4);
@@ -201,28 +194,6 @@
             return response;
         } catch (Exception e) {
             e.printStackTrace();
         }finally {
             String sourceLocNo = Utils.getLocNo(command.getSourcePosX(), command.getSourcePosY(), command.getSourcePosZ());
             String targetLocNo = Utils.getLocNo(command.getDestinationPosX(), command.getDestinationPosY(), command.getDestinationPosZ());
             // 日志记录
             BasDualCrnpOptService bean = SpringUtils.getBean(BasDualCrnpOptService.class);
             BasDualCrnpOpt basDualCrnp = new BasDualCrnpOpt(
                     command.getTaskNo(),    // 任务号
                     command.getCrnNo(),    // 堆垛机[非空]
                     new Date(),    // 下发时间
                     String.valueOf(command.getTaskMode()),    // 模式
                     sourceLocNo, //源库位
                     targetLocNo, //目标库位
                     null,    // 修改时间
                     null,    // 修改人员
                     null,    // 备注
                     JSON.toJSONString(command),    // 指令
                     JSON.toJSONString(getStatus()),    // 系统状态
                     1,    // 下发状态{0:未下发,1:已下发}
                     JSON.toJSONString(response)    // 响应
             );
             bean.insert(basDualCrnp);
         }
        return response;
    }