Проблема с подпиской, обрабатывающей несколько идентификаторов узлов.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с подпиской, обрабатывающей несколько идентификаторов узлов.

Сообщение Anonymous »

Я написал код для клиента OPC UA, который имеет 10 подписок, каждая из которых обрабатывает 3 идентификатора узла. Несмотря на то, что отслеживаемые элементы создаются для каждого идентификатора узла, подписка получает значение только от последнего идентификатора узла в каждой подписке

Код: Выделить всё

public static void main(String[] args) throws Exception {
OpcUaClient client = OpcUaClient.create("opc.tcp://KCT-L-610:53530/OPCUA/SimulationServer"); // Update with your Prosys OPC UA Server endpoint
client.connect().get();

// Create 10 subscriptions, each handling 3 tags
for (int i = 0; i < 10; i++) {
createSubscription(client, i);
}

// Sleep to allow subscriptions to run and collect data
Thread.sleep(10000); // Example: run for 10 seconds before completing
client.disconnect().get();
}

private static void createSubscription(OpcUaClient client, int subscriptionIndex) throws Exception {
// Create a new subscription every time
UaSubscription subscription = client.getSubscriptionManager().createSubscription(1000.0).get();

// Define the 3 tags (nodes) to monitor for this subscription
List readValueIds = newArrayList(
new ReadValueId(new NodeId(3, 1007 + subscriptionIndex * 3), AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE),  // Tag 1 for Subscription
new ReadValueId(new NodeId(3, 1008 + subscriptionIndex * 3), AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE),  // Tag 2 for Subscription
new ReadValueId(new NodeId(3, 1009 + subscriptionIndex * 3), AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE)   // Tag 3 for Subscription
);

// Create a MonitoringParameters object for the subscription
MonitoringParameters parameters = new MonitoringParameters(
subscription.nextClientHandle(),
1000.0, // Sampling interval: 1 second
null,   // No filter, use default
uint(10),  // Queue size
true    // Discard oldest value if queue is full
);

// Create requests for the monitored items
List requests = newArrayList();
for (ReadValueId readValueId : readValueIds) {
requests.add(new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, parameters));
}

// Create the monitored items and set a callback for value updates
//UaSubscription.ItemCreationCallback onItemCreated = (item, id) -> item.setValueConsumer((item1, value) -> onSubscriptionValue(item1, value, subscriptionIndex));
UaSubscription.ItemCreationCallback onItemCreated = (item, id) -> {
item.setValueConsumer((item1, value) -> onSubscriptionValue(item1, value, subscriptionIndex));
};

// Create monitored items and process
List items = subscription.createMonitoredItems(
TimestampsToReturn.Both,
requests,
onItemCreated
).get();

for (UaMonitoredItem item : items) {
if (item.getStatusCode().isGood()) {
logger.info("Subscription {}: Monitored item created for nodeId={}", subscriptionIndex, item.getReadValueId().getNodeId());
} else {
logger.warn("Subscription {}: Failed to create item for nodeId={} (status={})", subscriptionIndex, item.getReadValueId().getNodeId(), item.getStatusCode());
}
}
}

private static void onSubscriptionValue(UaMonitoredItem item, DataValue value, int subscriptionIndex) {
// This method is called when the monitored item value is updated
logger.info("Subscription {}: Received value for nodeId={}: {}", subscriptionIndex, item.getReadValueId().getNodeId(), value.getValue());
}
и это был результат, который я получил
14:56:45.402 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample - Подписка 0: получено значение для nodeId=NodeId{ns=3, id=1009}: вариант{value=0.0}
14:56:45.403 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample — Subscription 0: полученное значение для nodeId=NodeId{ns=3, id=1009}: Variant{value=-1.618126 />14:56:45.403 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample — Подписка 0: полученное значение для nodeId=NodeId{ns=3, id=1009}: Variant{value=-2.0}
14:56:45.413 [milo-shared-thread-pool-3] ИНФОРМАЦИЯ c.m.o.MultipleSubscriptionExample — подписка 1: получено значение для nodeId=NodeId{ns=3, id=1012}: Variant{value=0.1333334}
14:56:45.417 [milo-shared-thread-pool-3] INFO c.m.o. MultipleSubscriptionExample — подписка 1: Полученное значение для nodeId=NodeId{ns=3, id=1012}: Variant{value=27.0}
14:56:45.417 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample — Подписка 1: получено значение для nodeId=NodeId{ns=3, id=1012}: Variant{value=0.0}
14:56:45.417 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample – подписка 1: получено значение для nodeId=NodeId{ns=3, id=1012}: вариант {value=28.0}
14:56:45.427 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample — Подписка 2: полученное значение для nodeId=NodeId{ns=3, id=1015}: вариант {value=-5.235019}
14:56:45.427 [milo-shared-thread-pool-3] ИНФОРМАЦИЯ c.m.o.MultipleSubscriptionExample — подписка 2: полученное значение для nodeId=NodeId{ns=3, id=1015}: Variant{value=0.209057>
14:56:45.427 [milo-shared-thread-pool-3] INFO c.m.o. MultipleSubscriptionExample — подписка 2: получена значение для nodeId=NodeId{ns=3, id=1015}: Variant{value=-4.472503>
14:56:45.427 [milo-shared-thread-pool-3] INFO c.m.o.MultipleSubscriptionExample — подписка 2: получено значение для nodeId=NodeId{ns=3, id=1015}: вариант{value=0.0}

Подробнее здесь: https://stackoverflow.com/questions/793 ... le-nodeids
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»