Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[milo-dev] Subscribed values are not reflecting in Dummy Nodes UA Browser

Hi Milo,

I have successfully subscribed to a multiple attribute from a server and am able to see the values in IntellIJ IDE  when changes occur. 

But, I am not seeing the changed values in UA Browser like Prosys Client , UaExpert. 

Please help me to solve this problem. 

Program:
package org.eclipse.milo.examples.client;

import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription;
import org.eclipse.milo.opcua.stack.core.AttributeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode;
import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.BiConsumer;

import static com.google.common.collect.Lists.newArrayList;
import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;

public class ProsysSimulationServer2 implements ClientExample {
private final Logger logger = LoggerFactory.getLogger(getClass());
private final AtomicLong clientHandles = new AtomicLong(1L); // Used for subscriptions
//private ClientExample clientExample;

public static void main(String[] args) throws Exception {
ProsysSimulationServer2 ProsysClient = new ProsysSimulationServer2();

new ClientExampleRunner(ProsysClient, false).run();
}

@Override
public void run(OpcUaClient client, CompletableFuture<OpcUaClient> future) throws Exception {
NodeId Random = initString("Random");
NodeId Counter = initString("Counter");
NodeId _expression_ = initString("_expression_");
NodeId Sawtooth = initString("Sawtooth");



// synchronous connect
client.connect().get();

// create a subscription @ 1000ms
UaSubscription subscription = client.getSubscriptionManager().createSubscription(1000.0).get();

// subscribe to the Value attribute of the server's CurrentTime node
ReadValueId readValueId = new ReadValueId(
Random,
AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE);

// important: client handle must be unique per item
UInteger clientHandle = uint(clientHandles.getAndIncrement());

MonitoringParameters parameters = new MonitoringParameters(
clientHandle,
1000.0, // sampling interval
null, // filter, null means use default
uint(10), // queue size
true // discard oldest
);

MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(
readValueId, MonitoringMode.Reporting, parameters);
//******************************Counter****************************************************
ReadValueId CounterReadValueId = new ReadValueId(
Counter,
AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE);

UInteger clientHandle1 = uint(clientHandles.getAndIncrement());

MonitoringParameters CounterParameters = new MonitoringParameters(
clientHandle1,
1000.0, // sampling interval
null, // filter, null means use default
uint(10), // queue size
true // discard oldest
);
MonitoredItemCreateRequest CounterRequest = new MonitoredItemCreateRequest(
CounterReadValueId, MonitoringMode.Reporting, CounterParameters);
//*********************************Counter End ***********************************************
//******************************_expression_****************************************************
ReadValueId ExpressionReadValueId = new ReadValueId(
_expression_,
AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE);

UInteger clientHandle2 = uint(clientHandles.getAndIncrement());

MonitoringParameters ExpressionParameters = new MonitoringParameters(
clientHandle2,
1000.0, // sampling interval
null, // filter, null means use default
uint(10), // queue size
true // discard oldest
);
MonitoredItemCreateRequest ExpressionRequest = new MonitoredItemCreateRequest(
ExpressionReadValueId, MonitoringMode.Reporting, ExpressionParameters);
//*********************************_expression_ End ***********************************************
//******************************Sawtooth****************************************************
ReadValueId SawtoothReadValueId = new ReadValueId(
Sawtooth,
AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE);

UInteger clientHandle3 = uint(clientHandles.getAndIncrement());

MonitoringParameters SawtoothParameters = new MonitoringParameters(
clientHandle3,
1000.0, // sampling interval
null, // filter, null means use default
uint(10), // queue size
true // discard oldest
);
MonitoredItemCreateRequest SawtoothRequest = new MonitoredItemCreateRequest(
SawtoothReadValueId, MonitoringMode.Reporting, SawtoothParameters);
//*********************************_expression_ End ***********************************************

BiConsumer<UaMonitoredItem, Integer> _onItemCreated_ =
(item, id) -> item.setValueConsumer(this::onSubscriptionValue);


List<UaMonitoredItem> items = subscription.createMonitoredItems(
TimestampsToReturn.Both, //Return both the SourceTimestamp and ServerTimestamp
newArrayList(request,CounterRequest,ExpressionRequest,SawtoothRequest), //SinusoidRequest,SquareRequest,TriangleRequest),
onItemCreated
).get();

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

// let the example run for 5 seconds then terminate
Thread.sleep(50000);
future.complete(client);


}

public NodeId initString(String nsString) {

logger.info("dhanasekar @Subscription.java NodeId-of-NegateValue ={}", new NodeId(Unsigned.ushort(3), nsString));

return new NodeId(Unsigned.ushort(3), nsString);
}

public NodeId init(int value) {
logger.info("dhanasekar @Subscription.java NodeId-of-flip ={}", new NodeId(Unsigned.ushort(3), Unsigned.uint(value)));

return new NodeId(Unsigned.ushort(1), Unsigned.uint(value));
}


private void onSubscriptionValue(UaMonitoredItem item, DataValue value) {
logger.info(
"subscription value received: item={}, value={}",
item.getReadValueId().getNodeId(), value.getValue());
}

@Override
public String getEndpointUrl() {
return "opc.tcp://quanta:53530/OPCUA/SimulationServer";

}
}
And IDE Output:

16:00:08.178 [main] INFO  o.e.m.o.stack.client.UaStackClient - dhanasekar @UaStackClient.java create() : {}
16:00:08.180 [main] INFO  o.e.m.o.stack.client.UaStackClient - dhanasekar @UaStackClient.java IN UaStackClient() ...1 : {}
16:00:08.466 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - dhanasekar @Subscription.java NodeId-of-NegateValue =NodeId{ns=3, id=Random}
16:00:08.466 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - dhanasekar @Subscription.java NodeId-of-NegateValue =NodeId{ns=3, id=Counter}
16:00:08.467 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - dhanasekar @Subscription.java NodeId-of-NegateValue =NodeId{ns=3, id=_expression_}
16:00:08.467 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - dhanasekar @Subscription.java NodeId-of-NegateValue =NodeId{ns=3, id=Sawtooth}
16:00:08.494 [NonceUtilSecureRandom] INFO  o.e.m.o.stack.core.util.NonceUtil - SecureRandom seeded in 0ms.
16:00:08.604 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - item created for nodeId=NodeId{ns=3, id=Random}
16:00:08.604 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - item created for nodeId=NodeId{ns=3, id=Counter}
16:00:08.604 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - item created for nodeId=NodeId{ns=3, id=_expression_}
16:00:08.604 [main] INFO  o.e.m.e.c.ProsysSimulationServer2 - item created for nodeId=NodeId{ns=3, id=Sawtooth}
16:00:09.589 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Random}, value=Variant{value=1.2722789303387945}
16:00:09.589 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Counter}, value=Variant{value=56}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=_expression_}, value=Variant{value=3.1890438489363624}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Sawtooth}, value=Variant{value=-0.7999999523162842}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Random}, value=Variant{value=0.8222223121528716}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Counter}, value=Variant{value=57}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=_expression_}, value=Variant{value=3.5021130839188492}
16:00:09.590 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Sawtooth}, value=Variant{value=-0.3999999761581421}
16:00:10.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Random}, value=Variant{value=1.9430639623541621}
16:00:10.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Counter}, value=Variant{value=58}
16:00:10.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=_expression_}, value=Variant{value=3.7320508462150834}
16:00:10.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Sawtooth}, value=Variant{value=0.0}
16:00:11.581 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Random}, value=Variant{value=1.5847386020689727}
16:00:11.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Counter}, value=Variant{value=59}
16:00:11.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=_expression_}, value=Variant{value=3.886289671032016}
16:00:11.582 [milo-shared-thread-pool-2] INFO  o.e.m.e.c.ProsysSimulationServer2 - subscription value received: item=NodeId{ns=3, id=Sawtooth}, value=Variant{value=0.3999999761581421}


Back to the top