UaSerializationException: запрос превышает максимальный размер удаленного сообщения: 2434140> 2097152 - PullRequest
0 голосов
/ 10 июля 2020

Я грач ie, я пытался использовать следующий код для массовой подписки, но что-то пошло не так, как я могу решить эту проблему

    OpcUaSubscriptionManager subscriptionManager = opcUaClient.getSubscriptionManager();
    UaSubscription subscription = subscriptionManager.createSubscription(publishInterval).get();
    List<MonitoredItemCreateRequest> itemsToCreate = new ArrayList<>();
    for (Tag tag : tagList) {
        NodeId nodeId = new NodeId(nameSpace, tag.getPath());
        ReadValueId readValueId = new ReadValueId(nodeId, AttributeId.Value.uid(), null, null);
        MonitoringParameters parameters = new MonitoringParameters(
                subscription.nextClientHandle(),    //
                publishInterval,     // 
                null,       // filter, null means use default
                UInteger.valueOf(queueSize),   // queue size
                true        // discard oldest
        );
        MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, 
        MonitoringMode.Reporting, parameters);
        itemsToCreate.add(request);
    }
    BiConsumer<UaMonitoredItem, Integer> consumer =(item, id) -> 
    item.setValueConsumer(this::onSubscriptionValue);
   
    List<UaMonitoredItem> items = subscription.createMonitoredItems(
            TimestampsToReturn.Both,
            itemsToCreate,
            consumer
    ).get();

    for (UaMonitoredItem item : items) {
        if (!item.getStatusCode().isGood()) {
            log.error("failed to create item for nodeId={} (status={})",item.getReadValueId().getNodeId(), item.getStatusCode());
        }
    }

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Я не знаю библиотеку, которую вы используете, но один из предыдущих шагов для OP C UA клиента для подключения к серверу - это согласование максимального размера буферов, общего размера сообщения и максимального числа. или фрагментами сообщение может быть отправлено, этот процесс вызывается документацией OP C UA как «рукопожатие».

Если ваш запрос слишком длинный, его следует разделить и отправить на несколько фрагментов в соответствии с ограничениями предварительно согласованные с сервером.

И сервер, вероятно, также ответит несколькими порциями, все, что должно быть учтено при программировании клиента OP C UA.

0 голосов
/ 10 июля 2020

Сколько элементов вы пытаетесь создать?

Кажется, что результирующее сообщение превышает ограничения, установленные сервером, к которому вы подключаетесь. Возможно, вам придется разбить список и разбить элементы на более мелкие части.

...