You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Create an opc-ua method that has access to the nodes. My main goal is to return a list of nodes (e..g all nodes in one folder) with one server call, instead of one for each node.
I created a minimal non-working example of a server that exposes two nodes (Node1, Node2) and a method sum().
from opcua import ua, Server
def sum_method(parent):
val1 = node1.get_value()
val2 = node2.get_value()
return [ua.Variant(val1 + val2, ua.VariantType.Double)]
if __name__ == "__main__":
server = Server()
server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
uri = "http://example.opcua.server"
idx = server.register_namespace(uri)
objects = server.get_objects_node()
# Add two nodes with initial values
node1 = objects.add_variable(idx, "Node1", 5.5)
node2 = objects.add_variable(idx, "Node2", 10.5)
node1.set_writable()
node2.set_writable()
# Add a method to sum the two nodes
objects.add_method(idx, "sum", sum_method, [], [ua.VariantType.Double])
# Start the server
server.start()
try:
input("Server is running. Press Enter to stop...")
finally:
server.stop()
and the client code to call the method:
from opcua import Client
if __name__ == "__main__":
client = Client("opc.tcp://localhost:4840/freeopcua/server/")
try:
# Connect to the server
client.connect()
print("Client connected")
# Access the root node and browse to the Objects node
objects_node = client.get_objects_node()
# Find the method node by browsing or by known ID/path
sum_method = objects_node.get_child(["0:MyObject", "0:sum"])
# Call the method, no input arguments
result = sum_method.call()
print(f"The sum of the two node values is: {result}")
finally:
# Close the connection
client.disconnect()
print("Client disconnected")
and the error:
opcua.ua.uaerrors._auto.BadNoMatch: "The requested operation has no match to return."(BadNoMatch)
My questions
How can I fix my error? Or...
Is there a better way to get multiple node values with one server call (or less)?
Are there examples (showing both server and client code) for this?
The text was updated successfully, but these errors were encountered:
Goal
Create an opc-ua method that has access to the nodes. My main goal is to return a list of nodes (e..g all nodes in one folder) with one server call, instead of one for each node.
What I've tried
I found this example of opc-ua methods that does work for me:
https://github.com/ifak-prototypes/opcua_examples/tree/main/src/MethodsServerSimple
But I want to access the nodes.
Minimal non-working example
I created a minimal non-working example of a server that exposes two nodes (Node1, Node2) and a method sum().
and the client code to call the method:
and the error:
My questions
The text was updated successfully, but these errors were encountered: