@Override
    protected List<PlcWriteRequest> processWriteRequest(PlcWriteRequest writeRequest, DriverContext driverContext) {
        if(writeRequest.getNumberOfTags() == 1) {
            return Collections.singletonList(writeRequest);
        }
        List<PlcWriteRequest> subRequests = new ArrayList<>(writeRequest.getNumberOfTags());
        for (String tagName : writeRequest.getTagNames()) {
            PlcTag tag = writeRequest.getTag(tagName);
            PlcValue value = writeRequest.getPlcValue(tagName);
            PlcWriteRequest subRequest = new DefaultPlcWriteRequest(
                ((DefaultPlcWriteRequest) writeRequest).getWriter(),
                // We are only expecting valid tagValueItems being passed in.
                new LinkedHashMap<>(Collections.singletonMap(tagName, new DefaultPlcTagValueItem<>(tag, value))));
            subRequests.add(subRequest);
        }
        return subRequests;
    }
Optimizer variant which automatically splits a multi-item request up into multiple single item requests.
plc4j/spi/src/main/java/org/apache/plc4x/java/spi/optimizer/SingleTagOptimizer.java