| | |
| | | @Override |
| | | public boolean connect() { |
| | | boolean connected = false; |
| | | siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp()); |
| | | siemensNet = new SiemensS7Net(SiemensPLCS.S1500, deviceConfig.getIp()); |
| | | OperateResult connect = siemensNet.ConnectServer(); |
| | | if (connect.IsSuccess) { |
| | | connected = true; |
| | |
| | | News.error("输送站plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", |
| | | deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()); |
| | | } |
| | | // siemensNet.ConnectClose(); |
| | | return connected; |
| | | } |
| | | |
| | |
| | | if (barcodeStatusList != null) { |
| | | barcodeStatusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId)); |
| | | } |
| | | } |
| | | |
| | | if (siemensNet == null) { |
| | | return statusList; |
| | | } |
| | | |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) (statusList.size() * 8)); |
| | |
| | | return commandResponse; |
| | | } |
| | | |
| | | int maxTryCount = 999; |
| | | int tryCount = 0; |
| | | if (command.getCommandType().equals(StationCommandType.MOVE)) { |
| | | int enableCommandIdx = -1; |
| | | while (true) { |
| | | enableCommandIdx = getEnableCommandIdx(); |
| | | enableCommandIdx = getEnableCommandIdx(command.getTaskNo()); |
| | | if(enableCommandIdx == -1) { |
| | | try { |
| | | Thread.sleep(300); |
| | |
| | | }else { |
| | | break; |
| | | } |
| | | tryCount++; |
| | | if (tryCount > maxTryCount) { |
| | | commandResponse.setMessage("命令下发超时,无法找到可用下发区域"); |
| | | return commandResponse; |
| | | } |
| | | } |
| | | |
| | | List<Integer> pathList = command.getNavigatePath(); |
| | | |
| | | short[] data = new short[22]; |
| | | short[] data = new short[21]; |
| | | data[0] = command.getTargetStaNo().shortValue(); |
| | | |
| | | int dataIdx = 1; |
| | |
| | | data[dataIdx++] = path.shortValue(); |
| | | } |
| | | |
| | | OperateResult writeTask = siemensNet.Write("DB23." + enableCommandIdx * taskAddressLength, command.getTaskNo()); |
| | | OperateResult writeData = siemensNet.Write("DB23." + enableCommandIdx * taskAddressLength + 4, data); |
| | | if(writeTask.IsSuccess && writeData.IsSuccess) { |
| | | OperateResult writeTask = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength), command.getTaskNo()); |
| | | try { |
| | | Thread.sleep(50); |
| | | }catch (Exception e) {} |
| | | |
| | | OperateResult writeData = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength + 4), data); |
| | | try { |
| | | Thread.sleep(200); |
| | | }catch (Exception e) {} |
| | | OperateResult writeConfirm = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength + 46), (short) 1); |
| | | |
| | | if(writeTask.IsSuccess && writeData.IsSuccess && writeConfirm.IsSuccess) { |
| | | log.error("写入输送线命令成功。任务号={},站点数据={}", command.getTaskNo(), JSON.toJSON(command)); |
| | | commandResponse.setResult(true); |
| | | }else { |
| | |
| | | return null; |
| | | } |
| | | |
| | | private int getEnableCommandIdx() { |
| | | private int getEnableCommandIdx(int taskNo) { |
| | | int useIdx = -1; |
| | | for (int i = 0; i < taskAddressLimit; i++) { |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB23." + i * taskAddressLength, (short) taskAddressLength); |
| | | int taskStatus = siemensNet.getByteTransform().TransInt16(result.Content, i * taskAddressLength + 46); |
| | | OperateResultExOne<byte[]> resultTask = siemensNet.Read("DB23." + (i * taskAddressLength + 0), (short) 2); |
| | | OperateResultExOne<byte[]> resultStatus = siemensNet.Read("DB23." + (i * taskAddressLength + 46), (short) 2); |
| | | if(resultTask.IsSuccess && resultStatus.IsSuccess) { |
| | | continue; |
| | | } |
| | | |
| | | int commandAreaTaskNo = siemensNet.getByteTransform().TransInt32(resultTask.Content, 0); |
| | | if(commandAreaTaskNo == taskNo) { |
| | | return -1; |
| | | } |
| | | |
| | | int taskStatus = siemensNet.getByteTransform().TransInt16(resultStatus.Content, 0); |
| | | if (taskStatus == 1) { |
| | | continue; |
| | | } |