|  |  | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.DateUtils; | 
 |  |  | import com.core.common.SpringUtils; | 
 |  |  | import com.zy.asrs.entity.BasCrnOpt; | 
 |  |  | import com.zy.asrs.entity.BasCrnp; | 
 |  |  | import com.zy.asrs.service.BasCrnOptService; | 
 |  |  | import com.zy.asrs.service.BasCrnpService; | 
 |  |  | import com.zy.common.utils.News; | 
 |  |  | import com.zy.entity.BasCrnOpt; | 
 |  |  | import com.zy.entity.BasCrnp; | 
 |  |  | import com.zy.service.BasCrnOptService; | 
 |  |  | import com.zy.service.BasCrnpService; | 
 |  |  | import com.zy.utils.News; | 
 |  |  | import com.zy.core.CrnThread; | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | import com.zy.core.cache.OutputQueue; | 
 |  |  | 
 |  |  |                         command.setDestinationPosX((short)0);     // 目标库位排 | 
 |  |  |                         command.setDestinationPosY((short)0);     // 目标库位列 | 
 |  |  |                         command.setDestinationPosZ((short)0);     // 目标库位层 | 
 |  |  |                         command.setTaskCount((short) 0); | 
 |  |  |                         write(command); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  | 
 |  |  |             crnProtocol = new CrnProtocol(); | 
 |  |  |         } | 
 |  |  |         crnProtocol.setMode((short) -1); | 
 |  |  |         crnProtocol.setCrnNo(slave.getId()); | 
 |  |  | //        crnProtocol.setTaskNo((short)0); | 
 |  |  |         crnProtocol.setStatus((short)-1); | 
 |  |  |         crnProtocol.setBay((short)0); | 
 |  |  | 
 |  |  | //        convertRow(command); | 
 |  |  |         command.setCrnNo(slave.getId()); | 
 |  |  | //        short[] array = new short[10]; | 
 |  |  |         short[] array = new short[10]; | 
 |  |  |         short[] array = new short[12]; | 
 |  |  |         array[0] = command.getAckFinish(); // 任务完成确认位 | 
 |  |  |         array[1] = command.getTaskNo();  // 任务号 | 
 |  |  |         array[2] = command.getTaskMode();  // 模式 | 
 |  |  | 
 |  |  |         array[7] = command.getDestinationPosY(); // 目标位置列号 | 
 |  |  |         array[8] = command.getDestinationPosZ(); // 目标位置层号 | 
 |  |  |         array[9] = command.getCommand(); | 
 |  |  | //        array[10] = 0;   //备用1 | 
 |  |  |  | 
 |  |  |         boolean[] array2 = new boolean[1]; | 
 |  |  |         array2[0] = command.isTraySize(); | 
 |  |  |         array[11] = command.getTaskCount(); // 空桶出库,告诉堆垛机取一个货还是两个货 | 
 |  |  |         OperateResult result = siemensNet.Write("DB100.0", array); | 
 |  |  |         OperateResult result2 = siemensNet.Write("DB100.20", array2); | 
 |  |  |         News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), array); | 
 |  |  |  | 
 |  |  |         if(!result.IsSuccess || !result2.IsSuccess){ | 
 |  |  |         if(!result.IsSuccess){ | 
 |  |  |             News.error("写入堆垛机plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); | 
 |  |  |             MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command)); | 
 |  |  |             Thread.sleep(100); | 
 |  |  | 
 |  |  |         //堆垛机任务写入后,回读一次,看是否成功 | 
 |  |  |         Thread.sleep(200); | 
 |  |  |         try{ | 
 |  |  |             OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); | 
 |  |  |             OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24); | 
 |  |  |             if (resultRead.IsSuccess) { | 
 |  |  |                 CrnCommand one = new CrnCommand(); | 
 |  |  |                 one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); | 
 |  |  | 
 |  |  |                 one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12)); | 
 |  |  |                 one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14)); | 
 |  |  |                 one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16)); | 
 |  |  |                 one.setTraySize(siemensNet.getByteTransform().TransBool(resultRead.Content, 20)); | 
 |  |  |                 one.setTraySize(siemensNet.getByteTransform().TransBool(resultRead.Content, 22)); | 
 |  |  |                 if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode()) | 
 |  |  |                         || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY()) | 
 |  |  |                         || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX()) | 
 |  |  |                         || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ()) | 
 |  |  |                         || !command.isTraySize() == one.isTraySize() | 
 |  |  |  | 
 |  |  |                 ){ | 
 |  |  |                     try{ | 
 |  |  |                         News.error("堆垛机命令地址写入后回读失败[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); | 
 |  |  | 
 |  |  |                     } | 
 |  |  |                 }while (writeCount2<5); | 
 |  |  |             } | 
 |  |  |         } else { | 
 |  |  |             BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); | 
 |  |  |             BasCrnp basCrnp = basCrnpService.selectById(slave.getId()); | 
 |  |  |             basCrnp.setModiTime(new Date()); | 
 |  |  |             basCrnpService.updateById(basCrnp); | 
 |  |  | //            log.info("更新{}号堆垛机执行任务完成复位时间",slave.getId()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | //        if (command.getAckFinish() == 0) { | 
 |  |  | //            short commandFinish = 1; | 
 |  |  | //            Thread.sleep(200L); | 
 |  |  | //            result = siemensNet.Write("DB100.18", commandFinish); | 
 |  |  | //            log.info("堆垛机commandFinish下发[id:{}] >>>>> {}", slave.getId(), commandFinish); | 
 |  |  | ////            result = siemensNet.Write("DB100.22", commandFinish); | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         try { | 
 |  |  |             // 日志记录 | 
 |  |  | 
 |  |  |             bean.insert(basCrnOpt); | 
 |  |  |         } catch (Exception ignore) {} | 
 |  |  |  | 
 |  |  |         if (result != null && result.IsSuccess) { | 
 |  |  |             Thread.sleep(200); | 
 |  |  |         if (result.IsSuccess) { | 
 |  |  |             this.readStatus(); | 
 |  |  |             News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); | 
 |  |  |             OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); | 
 |  |  | 
 |  |  |     public static void main(String[] args) throws InterruptedException { | 
 |  |  |         CrnSlave slave = new CrnSlave(); | 
 |  |  |         slave.setId(1); | 
 |  |  |         slave.setIp("192.168.6.9"); | 
 |  |  |         slave.setIp("10.10.10.1"); | 
 |  |  |         slave.setRack(0); | 
 |  |  |         slave.setSlot(0); | 
 |  |  |         SiemensCrnThread crnThread = new SiemensCrnThread(slave); | 
 |  |  | 
 |  |  | //        // 3.库位移转   源和目标都发 pass | 
 |  |  | //        CrnCommand command = new CrnCommand(); | 
 |  |  | //        command.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  | //        command.setTaskNo((short) 0); // 工作号 | 
 |  |  | //        command.setTaskNo((short) 2); // 工作号 | 
 |  |  | //        command.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  | //        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  | //        command.setSourcePosX((short)2);     // 源库位排 | 
 |  |  | //        command.setSourcePosY((short)2);     // 源库位列 | 
 |  |  | //        command.setSourcePosZ((short)3);     // 源库位层 | 
 |  |  | //        command.setDestinationPosX((short)2);     // 目标库位排 | 
 |  |  | //        command.setDestinationPosY((short)4);     // 目标库位列 | 
 |  |  | //        command.setDestinationPosZ((short)4);     // 目标库位层 | 
 |  |  | //        command.setSourcePosY((short)1);     // 源库位列 | 
 |  |  | //        command.setSourcePosZ((short)1);     // 源库位层 | 
 |  |  | //        command.setDestinationPosX((short)3);     // 目标库位排 | 
 |  |  | //        command.setDestinationPosY((short)1);     // 目标库位列 | 
 |  |  | //        command.setDestinationPosZ((short)1);     // 目标库位层 | 
 |  |  | //        crnThread.write(command); | 
 |  |  |  | 
 |  |  |         // 4.站位移转   源和目标都发 |