| | |
| | | int writeAck = 0; |
| | | boolean commandResult = false; |
| | | do { |
| | | 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; |
| | | 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++; |
| | | } |
| | | writeAck++; |
| | | Thread.sleep(200); |
| | | } while (writeAck < 5); |
| | | |
| | | if (!commandResult) { |
| | |
| | | } |
| | | |
| | | short[] array = new short[9]; |
| | | array[0] = (short) 0; |
| | | array[0] = command.getAckFinish().shortValue(); |
| | | array[1] = command.getTaskNo().shortValue(); |
| | | array[2] = command.getTaskMode().shortValue(); |
| | | array[3] = command.getSourcePosX().shortValue(); |
| | |
| | | array[7] = command.getDestinationPosY().shortValue(); |
| | | array[8] = command.getDestinationPosZ().shortValue(); |
| | | |
| | | OperateResult result = siemensNet.Write("DB100.0", array); |
| | | if (!result.IsSuccess) { |
| | | response.setMessage("堆垛机命令下发[id:{}] >>>>> {}" + command.getCrnNo() + "堆垛机写入任务数据失败"); |
| | | return response; |
| | | } |
| | | |
| | | int idx = 0; |
| | | boolean contentFlag = false; |
| | | boolean commandDataResult = false; |
| | | do { |
| | | OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); |
| | | if (resultRead.IsSuccess) { |
| | | short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); |
| | | short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4); |
| | | short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6); |
| | | short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8); |
| | | short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10); |
| | | short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12); |
| | | short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14); |
| | | short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 16); |
| | | if (taskNo == 0 || taskMode == 0 || sourcePosX == 0 || sourcePosY == 0 || sourcePosZ == 0 || destinationPosX == 0 || destinationPosY == 0 || destinationPosZ == 0) { |
| | | result = siemensNet.Write("DB100.0", array); |
| | | } else { |
| | | contentFlag = true; |
| | | break; |
| | | OperateResult result = siemensNet.Write("DB100.0", array); |
| | | if (result.IsSuccess) { |
| | | OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); |
| | | if (resultRead.IsSuccess) { |
| | | short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); |
| | | short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4); |
| | | short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6); |
| | | short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8); |
| | | short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10); |
| | | short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12); |
| | | short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14); |
| | | short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 16); |
| | | if (taskNo == 0 || taskMode == 0 || sourcePosX == 0 || sourcePosY == 0 || sourcePosZ == 0 || destinationPosX == 0 || destinationPosY == 0 || destinationPosZ == 0) { |
| | | result = siemensNet.Write("DB100.0", array); |
| | | } else { |
| | | commandDataResult = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | idx++; |
| | | Thread.sleep(500); |
| | | Thread.sleep(200); |
| | | } while (idx < 5); |
| | | |
| | | if(!contentFlag) { |
| | | News.error("堆垛机写入任务数据失败 ===>> [id:{}]", command.getCrnNo()); |
| | | response.setMessage("堆垛机写入任务数据失败"); |
| | | if (!commandDataResult) { |
| | | response.setMessage("堆垛机命令下发[id:{}] >>>>> {}" + command.getCrnNo() + "堆垛机写入任务数据失败"); |
| | | return response; |
| | | } |
| | | |
| | |
| | | if (resultRead.IsSuccess) { |
| | | short confirm = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); |
| | | if(confirm == 0) { |
| | | confirmResult = siemensNet.Write("DB100.18", (short) 1); |
| | | Thread.sleep(500); |
| | | }else { |
| | | confirmFlag = true; |
| | | break; |
| | |
| | | } |
| | | } |
| | | confirmIdx++; |
| | | Thread.sleep(500); |
| | | Thread.sleep(200); |
| | | } while (confirmIdx < 5); |
| | | |
| | | if(!confirmFlag) { |
| | |
| | | return response; |
| | | } |
| | | |
| | | if (result != null && result.IsSuccess) { |
| | | News.info("堆垛机命令下发[id:{}] >>>>> {}", command.getCrnNo(), JSON.toJSON(command)); |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), command.getCrnNo(), JSON.toJSON(command))); |
| | | response.setResult(true); |
| | | response.setMessage("命令下发成功"); |
| | | redisUtil.set(RedisKeyType.CRN_SEND_COMMAND_LOCK.key + deviceConfig.getDeviceNo(), "lock", 5); |
| | | } else { |
| | | News.error("写入堆垛机plc数据失败 ===>> [id:{}]", command.getCrnNo()); |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}]", DateUtils.convert(new Date()), command.getCrnNo())); |
| | | response.setResult(false); |
| | | response.setMessage("命令下发失败"); |
| | | } |
| | | |
| | | News.info("堆垛机命令下发[id:{}] >>>>> {}", command.getCrnNo(), JSON.toJSON(command)); |
| | | OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), command.getCrnNo(), JSON.toJSON(command))); |
| | | response.setResult(true); |
| | | response.setMessage("命令下发成功"); |
| | | redisUtil.set(RedisKeyType.CRN_SEND_COMMAND_LOCK.key + deviceConfig.getDeviceNo(), "lock", 5); |
| | | return response; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |