@Override
    public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
        return CompletableFuture.supplyAsync(() -> {
            Map<String, PlcResponseItem<PlcSubscriptionHandle>> values = new HashMap<>();

            for (String fieldName : subscriptionRequest.getTagNames()) {
                PlcSubscriptionTag tag = subscriptionRequest.getTag(fieldName);
                final DefaultPlcSubscriptionTag fieldDefaultPlcSubscription = (DefaultPlcSubscriptionTag) subscriptionRequest.getTag(fieldName);
                String deviceString = fieldDefaultPlcSubscription.getAddressString().split("\\.")[0].toUpperCase();
                ProfinetDevice device = devices.get(deviceString);

                ProfinetSubscriptionHandle subscriptionHandle = new ProfinetSubscriptionHandle(device, fieldName, tag);
                device.getDeviceContext().addSubscriptionHandle(fieldDefaultPlcSubscription.getAddressString(), subscriptionHandle);

                if (!(fieldDefaultPlcSubscription.getTag() instanceof ProfinetTag)) {
                    values.put(fieldName, new DefaultPlcResponseItem<>(PlcResponseCode.INVALID_ADDRESS, null));
                } else {
                    values.put(fieldName, new DefaultPlcResponseItem<>(PlcResponseCode.OK, subscriptionHandle));
                }
            }
            return new DefaultPlcSubscriptionResponse(subscriptionRequest, values);
        });
    }
Start a PN or LLDP discovery to find PN devices on the network.
We pass in a driverContext handler, that checks if an incoming response has the information needed for
connecting. It just ignores the rest ...

@throws InterruptedException
@throws PlcConnectionException
plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java