- class QOpcUaClient#
QOpcUaClient
allows interaction with an OPC UA server. More…Synopsis#
Properties#
Methods#
def
addNode()
def
addReference()
def
backend()
def
deleteNode()
def
endpoint()
def
error()
def
findServers()
def
namespaceArray()
def
node()
def
registerNodes()
def
state()
Signals#
def
connectError()
def
connected()
def
disconnected()
def
errorChanged()
def
stateChanged()
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
QOpcUaClient#
QOpcUaClient
implements basic client capabilities to communicate with OPC UA enabled devices and applications. This includes querying a discovery server for known servers, requesting a list of endpoints from a server, connecting and disconnecting.After successfully connecting to a server,
QOpcUaClient
allows gettingQOpcUaNode
objects which enable further interaction with nodes on the OPC UA server. For operations that concern multiple nodes,QOpcUaClient
offers an API which supports reading multiple attributes of multiple nodes in a single request to the server.QOpcUaClient
also keeps a local copy of the server’s namespace array which is created after a successful connect. This information can be queried or updated while the connection lasts. The copy of the namespace array is also used for the resolution of expanded node ids and the creation of qualified names from a namespace URI.Addressing Nodes#
For an introduction to nodes and node ids, see
QOpcUaNode
.Usage#
Create a
QOpcUaClient
usingQOpcUaProvider
, request a list of endpoints from the server usingrequestEndpoints
and callconnectToEndpoint()
to connect to one of the available endpoints. After the connection is established, aQOpcUaNode
object for the root node is requested.QOpcUaProvider provider; if (provider.availableBackends().isEmpty()) return; QOpcUaClient *client = provider.createClient(provider.availableBackends()[0]); if (!client) return; // Connect to the stateChanged signal. Compatible slots of QObjects can be used instead of a lambda. QObject::connect(client, &QOpcUaClient::stateChanged, [client](QOpcUaClient::ClientState state) { qDebug() << "Client state changed:" << state; if (state == QOpcUaClient::ClientState::Connected) { QOpcUaNode *node = client->node("ns=0;i=84"); if (node) qDebug() << "A node object has been created"; } }); QObject::connect(client, &QOpcUaClient::endpointsRequestFinished, [client](QList<QOpcUaEndpointDescription> endpoints) { qDebug() << "Endpoints returned:" << endpoints.count(); if (endpoints.size()) client->connectToEndpoint(endpoints.first()); // Connect to the first endpoint in the list }); client->requestEndpoints(QUrl("opc.tcp://127.0.0.1:4840")); // Request a list of endpoints from the server
- class ClientState#
This enum type specifies the connection state of the client.
Constant
Description
QOpcUaClient.Disconnected
The client is not connected to a server.
QOpcUaClient.Connecting
The client is currently connecting to a server.
QOpcUaClient.Connected
The client is connected to a server.
QOpcUaClient.Closing
The client has been connected and requests a disconnect from the server.
- class ClientError#
This enum type specifies the current error state of the client.
Constant
Description
QOpcUaClient.NoError
No error occurred.
QOpcUaClient.InvalidUrl
The url to connect to has been wrongly specified or a connection to this url failed.
QOpcUaClient.AccessDenied
An attempt to connect to a server using username/password failed due to wrong credentials.
QOpcUaClient.ConnectionError
An error occurred with the connection.
QOpcUaClient.UnknownError
An unknown error occurred.
QOpcUaClient.UnsupportedAuthenticationInformation
The given type or data of authentication information is not supported.
Note
Properties can be used directly when
from __feature__ import true_property
is used or via accessor functions otherwise.- property errorᅟ: QOpcUaClient.ClientError#
This property Specifies the current error state of the client..
- Access functions:
Signal
errorChanged()
- property stateᅟ: QOpcUaClient.ClientState#
This property Specifies the current connection state of the client..
- Access functions:
Signal
stateChanged()
- addNode(nodeToAdd)#
- Parameters:
nodeToAdd –
QOpcUaAddNodeItem
- Return type:
bool
Adds the node described by
nodeToAdd
on the server.Returns
true
if the asynchronous call has been successfully dispatched.The success of the operation is returned in the
addNodeFinished()
signal.The following example code adds new a Variable node on the server:
QOpcUaNodeCreationAttributes attributes; attributes.setDisplayName(QOpcUaLocalizedText("en", "My new Variable node")); attributes.setDescription(QOpcUaLocalizedText("en", "A node which has been added at runtime")); attributes.setValue(23.0, QOpcUa::Types::Double); attributes.setDataTypeId(QOpcUa::ns0ID(QOpcUa::NodeIds::Namespace0::Double)); attributes.setValueRank(-2); // Scalar or array attributes.setAccessLevel(QOpcUa::AccessLevelBit::CurrentRead); attributes.setUserAccessLevel(QOpcUa::AccessLevelBit::CurrentRead); QOpcUaAddNodeItem item; item.setParentNodeId(QOpcUaExpandedNodeId("ns=3;s=TestFolder")); item.setReferenceTypeId(QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes)); item.setRequestedNewNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setBrowseName(QOpcUaQualifiedName(3, "MyNewVariableNode")); item.setNodeClass(QOpcUa::NodeClass::Variable); item.setNodeAttributes(attributes); m_client->addNode(item);
- addNodeFinished(requestedNodeId, assignedNodeId, statusCode)#
- Parameters:
requestedNodeId –
QOpcUaExpandedNodeId
assignedNodeId – str
statusCode –
UaStatusCode
This signal is emitted after an
addNode()
operation has finished.requestedNodeId
is the requested node id from theaddNode()
call,assignedNodeId
is the node id the server has assigned to the new node.statusCode
contains the result of the operation. If the result isBad
,assignedNodeId
is empty and no node has been added to the server’s address space.- addReference(referenceToAdd)#
- Parameters:
referenceToAdd –
QOpcUaAddReferenceItem
- Return type:
bool
Adds the reference described by
referenceToAdd
to the server.Returns
true
if the asynchronous call has been successfully dispatched.The success of the operation is returned in the
addReferenceFinished()
signal.The following example code adds a reference to a node to the “Objects” folder:
QOpcUaAddReferenceItem item; item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder)); item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes))); item.setIsForwardReference(true); item.setTargetNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setTargetNodeClass(QOpcUa::NodeClass::Variable); m_client->addReference(item);
- addReferenceFinished(sourceNodeId, referenceTypeId, targetNodeId, isForwardReference, statusCode)#
- Parameters:
sourceNodeId – str
referenceTypeId – str
targetNodeId –
QOpcUaExpandedNodeId
isForwardReference – bool
statusCode –
UaStatusCode
This signal is emitted after an
addReference()
operation has finished.sourceNodeId
,referenceTypeId
,targetNodeId
andisForwardReference
are the values from theaddReference()
call.statusCode
contains the result of the operation.- applicationIdentity()#
- Return type:
Returns the application identity of this
QOpcUaClient
instance.See also
- authenticationInformation()#
- Return type:
Returns the current authentication information.
See also
- backend()#
- Return type:
str
Returns the name of the backend used by this instance of
QOpcUaClient
, e.g. “open62541”.- connectError(errorState)#
- Parameters:
errorState –
QOpcUaErrorState
This signal is emitted when an error happened during connection establishment. The parameter
errorState
contains information about the error.In case of client side errors, these can be ignored by calling
setIgnoreError
on the object.During execution of a slot connected to this signal the backend is stopped and waits for all slots to return. This allows to pop up a user dialog to ask the enduser for example if to trust an unknown certificate before the backend continues.
- connectToEndpoint(endpoint)#
- Parameters:
endpoint –
QOpcUaEndpointDescription
Connects to the OPC UA endpoint given in
endpoint
.QEndpointDescription endpointDescription; ... client->connectToEndpoint(endpointDescription);
A list of available endpoints is usually obtained by calling
requestEndpoints()
.If the endpoint requires username authentication, at least a user name must be set in
QOpcUaAuthenticationInformation
. Calling this function before setting an authentication information will use the anonymous authentication.QOpcUaAuthenticationInformation authInfo; authInfo.setUsernameAuthentication("user", "password"); client->setAuthenticationInformation(authInfo);
- connected()#
This signal is emitted when a connection has been established.
- connectionSettings()#
- Return type:
Returns the connection settings for this client.
See also
- deleteNode(nodeId[, deleteTargetReferences=true])#
- Parameters:
nodeId – str
deleteTargetReferences – bool
- Return type:
bool
Deletes the node with node id
nodeId
from the server. IfdeleteTargetReferences
isfalse
, only the references with source nodenodeId
are deleted. IfdeleteTargetReferences
istrue
, references withnodeId
as target are deleted too.Returns
true
if the asynchronous call has been successfully dispatched.The success of the operation is returned in the
deleteNodeFinished()
signal.The following example code deletes a node and all references to it from the server:
m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
See also
- deleteNodeFinished(nodeId, statusCode)#
- Parameters:
nodeId – str
statusCode –
UaStatusCode
This signal is emitted after a
deleteNode()
operation has finished.nodeId
is the node id from thedeleteNode()
call.statusCode
contains the result of the operation.- deleteReference(referenceToDelete)#
- Parameters:
referenceToDelete –
QOpcUaDeleteReferenceItem
- Return type:
bool
Deletes the reference described by
referenceToDelete
from the server.Returns
true
if the asynchronous call has been successfully dispatched.The success of the operation is returned in the
deleteReferenceFinished()
signal.The following example code deletes a reference to a node from the “Objects” folder:
QOpcUaDeleteReferenceItem item; item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder)); item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes))); item.setIsForwardReference(true); item.setTargetNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setDeleteBidirectional(true); m_client->deleteReference(item);
- deleteReferenceFinished(sourceNodeId, referenceTypeId, targetNodeId, isForwardReference, statusCode)#
- Parameters:
sourceNodeId – str
referenceTypeId – str
targetNodeId –
QOpcUaExpandedNodeId
isForwardReference – bool
statusCode –
UaStatusCode
This signal is emitted after a
deleteReference()
operation has finished.sourceNodeId
,referenceTypeId
,targetNodeId
andisForwardReference
are the values from thedeleteReference()
call.statusCode
contains the result of the operation.- disconnectFromEndpoint()#
Disconnects from the server.
See also
- disconnected()#
This signal is emitted when a connection has been closed following to a close request.
- endpoint()#
- Return type:
Returns the description of the endpoint the client is currently connected to or was last connected to.
- endpointsRequestFinished(endpoints, statusCode, requestUrl)#
- Parameters:
endpoints – .list of QOpcUaEndpointDescription
statusCode –
UaStatusCode
requestUrl –
QUrl
This signal is emitted after a
requestEndpoints()
operation has finished.statusCode
contains the result of the operation. If the result isGood
,endpoints
contains the descriptions of all endpoints that are available on the server.requestUrl
contains the URL that was used in therequestEndpoints()
call.- error()#
- Return type:
Returns the current error state of the client.
Getter of property
errorᅟ
.- errorChanged(error)#
- Parameters:
error –
ClientError
Notification signal of property
errorᅟ
.- findServers(url[, localeIds=list()[, serverUris=list()]])#
- Parameters:
url –
QUrl
localeIds – list of strings
serverUris – list of strings
- Return type:
bool
Starts an asynchronous FindServers request to read a list of known servers from a server or discovery server at
url
. Returnstrue
if the asynchronous call has been successfully dispatched.localeIds
can be used to select the language of the application names returned by the request. The format is specified in OPC UA 1.05 part 3, 8.4, for example “en” for English, or “de-DE” for German (Germany). If more than one locale ID is specified, the server uses the first match. If there is no match orlocaleIds
is empty, a default locale is chosen by the server.serverUris
may be used to restrict the results to servers with a matching applicationUri in their application description. For example, finding the current URL of the server with the applicationUri “MyPLC”, the following call can be used:client->findServers(discoveryServerUrl, QStringList(), QStringList({"MyPLC"}));
The results are returned in the
findServersFinished()
signal.- findServersFinished(servers, statusCode, requestUrl)#
- Parameters:
servers – .list of QOpcUaApplicationDescription
statusCode –
UaStatusCode
requestUrl –
QUrl
This signal is emitted after a
findServers()
operation has finished.statusCode
contains the result of the operation. If the result isGood
,servers
contains the application descriptions of all servers known to the queried server that matched the filter criteria.requestUrl
contains the URL that was used in thefindServers()
call.- isNamespaceAutoupdateEnabled()#
- Return type:
bool
Returns whether autoupdate of the namespace array is enabled.
- namespaceArray()#
- Return type:
list of strings
Returns the cached value of the namespace array.
The value is only valid after the
namespaceArrayUpdated()
signal has been emitted.- namespaceArrayChanged(namespaces)#
- Parameters:
namespaces – list of strings
This signal is emitted after the namespace array has changed.
namespaces
contains the content of the server’s namespace table. The index of an entry innamespaces
corresponds to the namespace index used in the node id.- namespaceArrayUpdated(namespaces)#
- Parameters:
namespaces – list of strings
This signal is emitted after an
updateNamespaceArray
operation has finished.namespaces
contains the content of the server’s namespace table. The index of an entry innamespaces
corresponds to the namespace index used in the node id.If the namespace array content stays the same after the update this signal is emitted nevertheless.
- namespaceAutoupdateInterval()#
- Return type:
int
Returns the current revised update interval of the namespace array.
See also
setNamespaceAutoupdateInterval(int interval)
- node(nodeId)#
- Parameters:
nodeId – str
- Return type:
Returns a
QOpcUaNode
object associated with the OPC UA node identified bynodeId
. The caller becomes owner of the node object.If the client is not connected,
nullptr
is returned. The backends may also returnnullptr
for other error cases (for example for a malformed node id).- node(expandedNodeId)
- Parameters:
expandedNodeId –
QOpcUaExpandedNodeId
- Return type:
Returns a
QOpcUaNode
object associated with the OPC UA node identified byexpandedNodeId
. The caller becomes owner of the node object.If the node is not on the currently connected server, the namespace can’t be resolved, the node id is malformed or the client is not connected,
nullptr
is returned.See also
- passwordForPrivateKeyRequired(keyFilePath, password, previousTryWasInvalid)#
- Parameters:
keyFilePath – str
password – str
previousTryWasInvalid – bool
This signal is emitted when a password for an encrypted private key is required. The parameter
keyFilePath
contains the file path to key which is used. The parameterpreviousTryWasInvalid
is true if a previous try to decrypt the key failed (aka invalid password). The parameterpassword
points to a QString that has to be filled with the actual password for the key. In case the previous try failed it contains the previously used password.During execution of a slot connected to this signal the backend is stopped and waits for all slots to return. This allows to pop up a user dialog to ask the enduser for the password.
- pkiConfiguration()#
- Return type:
Returns the application’s PKI configuration of this
QOpcUaClient
instance.See also
- qualifiedNameFromNamespaceUri(namespaceUri, name[, ok=None])#
- Parameters:
namespaceUri – str
name – str
ok – bool
- Return type:
Attempts to create a qualified name from
namespaceUri
and the name stringname
. Returns the resulting qualified name. An empty qualified name is returned ifnamespaceUri
can’t be resolved.ok
will be set totrue
if the namespace URI resolution has been successful. If the namespace URI could not be resolved,ok
will be set tofalse
.- readHistoryData(request)#
- Parameters:
request –
QOpcUaHistoryReadRawRequest
- Return type:
Starts a read raw history
request
for one or multiple nodes. This is the Qt OPC UA representation for the OPC UA ReadHistory service for reading raw historical data defined in OPC UA 1.05 part 4, 5.10.3 .The start timestamp, end timestamp, number of values per node, returnBounds and nodes to read can be specified in a
QOpcUaHistoryReadRawRequest
.Returns a
QOpcUaHistoryReadResponse
which contains the state of the request if the asynchronous request has been successfully dispatched. The results are returned in theUaStatusCode serviceResult)
signal.In the following example, the historic data from the last two days of two nodes are requested and printed. The result is limited to ten values per node.
QOpcUaHistoryReadRawRequest request( { QOpcUaReadItem("ns=1;s=myValue1"), QOpcUaReadItem("ns=1;s=myValue2") }, QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true); QOpcUaHistoryReadResponse *response = m_client->readHistoryData(request); if (response) { QObject::connect(response, &QOpcUaHistoryReadResponse::readHistoryDataFinished, [] (QList<QOpcUaHistoryData> results, QOpcUa::UaStatusCode serviceResult) { if (serviceResult != QOpcUa::UaStatusCode::Good) { qWarning() << "Fetching historical data failed with:" << serviceResult; } else { for (const auto& result : results) { qInfo() << "NodeId:" << result.nodeId(); for (const auto &dataValue : result.result()) qInfo() << "Value:" << dataValue.value(); } } }); }
- readNodeAttributes(nodesToRead)#
- Parameters:
nodesToRead – .list of QOpcUaReadItem
- Return type:
bool
Starts a read of multiple attributes on different nodes. The node id, the attribute and an index range can be specified for every entry in
nodesToRead
.Returns true if the asynchronous request has been successfully dispatched. The results are returned in the
readNodeAttributesFinished()
signal.This read function offers an alternative way to read attributes of nodes which can be used for scenarios where the values of a large number of node attributes on different nodes must be read without requiring the other features of the
QOpcUaNode
based API like monitoring for value changes. All read items in the request are sent to the server in a single request and are answered in a single response which generates a singlereadNodeAttributesFinished()
signal. This reduces the network overhead and the number of signal slot connections if many different nodes are involved.In the following example, the display name attribute and the two index ranges “0:2” and “5:7” of the value attribute of the same node and the entire value attribute of a second node are read using a single service call:
QList<QOpcUaReadItem> request; request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::DisplayName)); request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::Value, "0:2")); request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::Value, "5:7")); request.push_back(QOpcUaReadItem("ns=1;s=MyScalarNode)); m_client->readNodeAttributes(request);
- readNodeAttributesFinished(results, serviceResult)#
- Parameters:
results – .list of QOpcUaReadResult
serviceResult –
UaStatusCode
This signal is emitted after a
readNodeAttributes()
operation has finished.The elements in
results
have the same order as the elements in the request. For each requested element, there is a value together with timestamps and the status code inresults
.serviceResult
contains the status code from the OPC UA Read service.- registerNodes(nodesToRegister)#
- Parameters:
nodesToRegister – list of strings
- Return type:
bool
Registers the node ids in
nodesToRegister
on the server and returnstrue
if the request has been successfully dispatched. The results are returned in theregisterNodesFinished()
signal.The node registration service is used to let the server know that a node will be accessed frequently so it may perform operations like keeping the connection to an external resource open. The server may also return an alias node id which is recommended to be numeric. This might come in handy if a node with a long string identifier node id is used in many requests. The real performance gain (if any) depends on the server’s implementation.
The registered node ids are only guaranteed to be valid for the current session. Any registrations that are no longer needed should be unregistered as soon as possible so the server may free the associated resources.
See also
- registerNodesFinished(nodesToRegister, registeredNodeIds, statusCode)#
- Parameters:
nodesToRegister – list of strings
registeredNodeIds – list of strings
statusCode –
UaStatusCode
This signal is emitted after a
registerNodes()
operation has finished.nodesToRegister
contains the node ids from the request for correlation purposes. The node ids returned by the server are inregisteredNodeIds
and have the same ordering as the ids in the request.statusCode
indicates if the operation was successful.See also
Starts an asynchronous
GetEndpoints
request to read a list of available endpoints from the server aturl
. Returnstrue
if the asynchronous call has been successfully dispatched.The endpoint information is returned in the
endpointsRequestFinished()
signal.- resolveExpandedNodeId(expandedNodeId[, ok=None])#
- Parameters:
expandedNodeId –
QOpcUaExpandedNodeId
ok – bool
- Return type:
str
Attempts to resolve
expandedNodeId
to a node id string with numeric namespace index. Returns the node id string if the conversion was successful.An empty string is returned if the namespace index can’t be resolved or if the identifier part of the expanded node id is malformed.
ok
will be set totrue
if the conversion has been successful. If the expanded node id could not be resolved,ok
will be set tofalse
.- setApplicationIdentity(identity)#
- Parameters:
identity –
QOpcUaApplicationIdentity
Sets the application identity for this
QOpcUaClient
instance toidentity
.See also
- setAuthenticationInformation(authenticationInformation)#
- Parameters:
authenticationInformation –
QOpcUaAuthenticationInformation
Sets the authentication information of this client to
authenticationInformation
.- setConnectionSettings(connectionSettings)#
- Parameters:
connectionSettings –
QOpcUaConnectionSettings
Sets the connection settings for this client to
connectionSettings
.Example:
QOpcUaConnectionSettings settings; // Ask the server to give localized texts in german with french as fallback settings.setSessionLocaleIds({ "de", "fr" }); // We need to call some long running methods, increase the request timeout settings.setRequestTimeout(std::chrono::minutes(2)); opcuaClient->setConnectionSettings(settings);
The values from
connectionSettings
are applied to any new connections after this point.See also
- setNamespaceAutoupdate(isEnabled)#
- Parameters:
isEnabled – bool
Enables automatic update of the namespace table.
Enabling this will keep the local copy of the namespace table updated automatically.
namespaceArrayUpdated
will be emitted when the array changed.isEnabled
determines if autoupdate is being enabled or disabled.A subscription will be made on the node on the server to keep track of changes. In case a server does not support subscriptions this will not work and
isNamespaceAutoupdateEnabled
returnsfalse
.See also
- setNamespaceAutoupdateInterval(interval)#
- Parameters:
interval – int
Sets the interval for the namespace table subscription.
The subscription may be revised by the server.
interval
determines the interval to check for changes in milliseconds. The default is once per second.See also
namespaceAutoupdateInterval()
setNamespaceAutoupdate(bool isEnabled)
- setPkiConfiguration(config)#
- Parameters:
config –
QOpcUaPkiConfiguration
Sets the application PKI configuration for this
QOpcUaClient
instance toconfig
.See also
- state()#
- Return type:
Getter of property
stateᅟ
.- stateChanged(state)#
- Parameters:
state –
ClientState
Notification signal of property
stateᅟ
.- supportedSecurityPolicies()#
- Return type:
list of strings
Returns the security policies supported by the used backend.
This function is currently available as a Technology Preview, and therefore the API and functionality provided by the function may be subject to change at any time without prior notice.
- supportedUserTokenTypes()#
- Return type:
.list of QOpcUaUserTokenPolicy.TokenType
Returns the user token types supported by the used backend.
This function is currently available as a Technology Preview, and therefore the API and functionality provided by the function may be subject to change at any time without prior notice.
See also
- unregisterNodes(nodesToUnregister)#
- Parameters:
nodesToUnregister – list of strings
- Return type:
bool
Unregisters the node ids in
nodesToUnregister
on the server and returnstrue
if the request has been successfully dispatched. The results are returned in theunregisterNodesFinished()
signal.The node ids to pass in
nodesToUnregister
must have been obtained viaregisterNodes()
.See also
- unregisterNodesFinished(nodesToUnregister, statusCode)#
- Parameters:
nodesToUnregister – list of strings
statusCode –
UaStatusCode
This signal is emitted after a
unregisterNodes()
operation has finished.nodesToUnregister
contains the node ids from the request for correlation purposes.statusCode
indicates if the operation was successful.See also
- updateNamespaceArray()#
- Return type:
bool
Requests an update of the namespace array from the server. Returns
true
if the operation has been successfully dispatched.The
namespaceArrayUpdated()
signal is emitted after the operation is finished.See also
- writeNodeAttributes(nodesToWrite)#
- Parameters:
nodesToWrite – .list of QOpcUaWriteItem
- Return type:
bool
Starts a write for multiple attributes on different nodes. The node id, the attribute, the value, the value type and an index range can be specified for every entry in
nodesToWrite
.Returns
true
if the asynchronous request has been successfully dispatched. The results are returned in thewriteNodeAttributesFinished()
signal.This write function offers an alternative way to write attributes of nodes which can be used for scenarios where the values of a large number of node attributes on different nodes must be written without requiring the other features of the
QOpcUaNode
based API like monitoring for value changes. All write items in the request are sent to the server in a single request and are answered in a single response which generates a singlewriteNodeAttributesFinished()
signal. This reduces the network overhead and the number of signal slot connections if many different nodes are involved.In the following example, the Values attributes of two different nodes are written in one call. The second node has an array value of which only the first two elements are overwritten:
QList<QOpcUaWriteItem> request; request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Scalar.Double", QOpcUa::NodeAttribute::Value, 23.0, QOpcUa::Types::Double)); request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Arrays.UInt32", QOpcUa::NodeAttribute::Value, QVariantList({0, 1, 2}), QOpcUa::Types::UInt32, "0:2")); m_client->writeNodeAttributes(request);
- writeNodeAttributesFinished(results, serviceResult)#
- Parameters:
results – .list of QOpcUaWriteResult
serviceResult –
UaStatusCode
This signal is emitted after a
writeNodeAttributes()
operation has finished.The elements in
results
have the same order as the elements in the write request. They contain the value, timestamps and status code received from the server as well as the node id, attribute and index range from the write item. This facilitates matching the result with the request.serviceResult
is the status code from the the OPC UA Write service. IfserviceResult
is notGood
, the entries inresults
also have an invalid status code and must not be used.See also