class QOpcUaClient#

QOpcUaClient 允许与 OPC UA 服务器交互。 更多

Inheritance diagram of PySide6.QtOpcUa.QOpcUaClient

概述#

属性#

  • error - 指定客户端的当前错误状态

  • state - 指定客户端的当前连接状态

方法#

信号#

注意:

本文档可能包含从C++到Python自动翻译的片段。我们始终欢迎对片段翻译的贡献。如果你发现翻译问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建问题单来告知我们。

详细描述#

QOpcUaClient#

QOpcUaClient实现了与启用OPC UA的设备和应用程序通信的基本客户端功能。这包括查询发现服务器以获取已知服务器,请求服务器的端点列表,连接和断开连接。

连接到服务器成功后,QOpcUaClient允许获取QOpcUaNode对象,这允许与OPC UA服务器上的节点进行进一步交互。对于涉及多个节点的操作,QOpcUaClient提供了一个API,该API支持对服务器的一次请求中读取多个节点的多个属性。

QOpcUaClient 也会保留服务器名称空间的本地副本,这些副本在成功连接后创建。在连接持续期间,可以查询或更新此信息。名称空间数组的副本还用于解析扩展的节点ID以及从名称空间URI创建限定名。

节点寻址#

有关节点和节点ID的简介,请参阅QOpcUaNode .

使用方法#

使用 QOpcUaProvider 创建 QOpcUaClient ,使用 requestEndpoints 从服务器请求端点列表,并调用 connectToEndpoint() 连接到可用的端点之一。连接建立后,请求根节点的 QOpcUaNode 对象。

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#

此枚举类型指定客户端的连接状态。

常用常数

描述

QOpcUaClient.Disconnected

客户端未连接到服务器。

QOpcUaClient.Connecting

客户端正在连接到服务器。

QOpcUaClient.Connected

客户端已连接到服务器。

QOpcUaClient.Closing

客户端已连接,并请求从服务器断开连接。

class ClientError#

此枚举类型指定客户端当前的错误状态。

常用常数

描述

QOpcUaClient.NoError

没有发生错误。

QOpcUaClient.InvalidUrl

连接的URL已被错误指定,或连接到此URL失败。

QOpcUaClient.AccessDenied

由于凭据错误,尝试使用用户名/密码连接到服务器失败。

QOpcUaClient.ConnectionError

连接出现了错误。

QOpcUaClient.UnknownError

发生了未知错误。

QOpcUaClient.UnsupportedAuthenticationInformation

提供的认证信息类型或数据不受支持。

注意:

在 `from __feature__ import true_property` 被使用时可以直接使用属性,否则通过访问函数使用。

property errorᅟ: QOpcUaClient.ClientError#

此属性指定客户端当前的错误状态。

访问函数
属性state: QOpcUaClient.ClientState#

此属性指定客户端的当前连接状态。

访问函数
addNode(nodeToAdd)#
参数:

nodeToAddQOpcUaAddNodeItem

返回类型:

bool

在服务器上添加由 nodeToAdd 描述的节点。

如果异步调用已成功派遣,则返回 true

操作的成功结果将返回在 addNodeFinished() 信号中。

以下示例代码在服务器上添加一个新的变量节点

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)#
参数:

addNode() 操作完成后发出此信号。 requestedNodeId 是从 addNode() 调用中请求的节点 ID, assignedNodeId 是服务器分配给新节点的节点 ID, statusCode 包含操作结果。如果结果是 Bad,则 assignedNodeId 为空,未在服务器地址空间中添加任何节点。

addReference(referenceToAdd)#
参数:

referenceToAddQOpcUaAddReferenceItem

返回类型:

bool

referenceToAdd描述的引用添加到服务器。

如果异步调用已成功派遣,则返回 true

操作的成败通过addReferenceFinished()信号返回。

以下示例代码向“Objects”文件夹添加一个节点的引用

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)#
参数:

在完成addReference()操作后发出此信号。 sourceNodeIdreferenceTypeIdtargetNodeIdisForwardReferenceaddReference()调用中的值。《code class="docutils literal notranslate">statusCode包含操作的结果。

applicationIdentity()#
返回类型:

QOpcUaApplicationIdentity

返回此QOpcUaClient实例的应用程序标识。

authenticationInformation()#
返回类型:

QOpcUaAuthenticationInformation

返回当前的认证信息。

backend()#
返回类型:

str

返回由此实例的 QOpcUaClient 使用的后端名称,例如“open62541”。

connectError(errorState)#
参数:

errorStateQOpcUaErrorState

当在建立连接过程中发生错误时,将发出此信号。参数 errorState 包含有关错误的更多信息。

如果在客户端发生错误,可以调用对象上的 setIgnoreError 来忽略这些错误。

在此信号连接的槽执行过程中,后端将停止并等待所有槽返回。这允许在后台继续之前弹出用户对话框,例如询问用户是否信任未知证书。

connectToEndpoint(endpoint)#
参数:

endpointQOpcUaEndpointDescription

连接到由 `endpoint` 给定的 OPC UA 端点。

QEndpointDescription endpointDescription;
...
client->connectToEndpoint(endpointDescription);

通常通过调用 requestEndpoints() 获取可用端点的列表。

如果端点需要用户名身份验证,必须在 QOpcUaAuthenticationInformation 中设置至少一个用户名。在设置身份验证信息之前调用此函数将使用匿名身份验证。

QOpcUaAuthenticationInformation authInfo;
authInfo.setUsernameAuthentication("user", "password");

client->setAuthenticationInformation(authInfo);
connected()#

当建立连接时,会发出此信号。

connectionSettings()#
返回类型:

QOpcUaConnectionSettings

返回此客户端的连接设置。

deleteNode(nodeId[, deleteTargetReferences=true])#
参数:
  • nodeId – str

  • deleteTargetReferences – 布尔型

返回类型:

bool

从服务器中删除具有节点 ID nodeId 的节点。如果 deleteTargetReferencesfalse,则只删除源节点为 nodeId 的引用。如果 deleteTargetReferencestrue,则还会删除目标为 nodeId 的引用。

如果异步调用已成功派遣,则返回 true

操作的成功结果在 deleteNodeFinished() 信号中返回。

以下示例代码从服务器中删除节点以及对其的所有引用

m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
deleteNodeFinished(nodeId, statusCode)#
参数:

该信号在完成 deleteNode() 操作后发出。 nodeId 是来自 deleteNode() 调用的节点 ID。 statusCode 包含操作的结果。

deleteReference(referenceToDelete)#
参数:

referenceToDeleteQOpcUaDeleteReferenceItem

返回类型:

bool

从服务器中删除由 referenceToDelete 描述的引用。

如果异步调用已成功派遣,则返回 true

操作的成功结果在 deleteReferenceFinished() 信号中返回。

以下示例代码删除“Objects”文件夹中的一个节点的引用

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)#
参数:

在执行了 deleteReference() 操作后发出此信号。sourceNodeIdreferenceTypeIdtargetNodeIdisForwardReferencedeleteReference() 调用的值。statusCode 包含操作的执行结果。

disconnectFromEndpoint()#

断开与服务器的连接。

disconnected()#

在接收到关闭请求后,连接已关闭时发出此信号。

endpoint()#
返回类型:

QOpcUaEndpointDescription

返回客户端当前连接或最后连接到的端点的描述。

endpointsRequestFinished(endpoints, statusCode, requestUrl)#
参数:
  • endpoints – .QOpcUaEndpointDescription 列表

  • statusCodeUaStatusCode

  • requestUrlQUrl

在执行完 requestEndpoints() 操作后发出此信号。statusCode 包含操作的结果。如果结果是 Good ,则 endpoints 包含服务器上所有可用的端点的描述。requestUrl 包含在 requestEndpoints() 调用中使用的 URL。

error()#
返回类型:

ClientError

返回客户端当前错误状态。

属性 errorᅟ 的获取器。

errorChanged(error)#
参数:

errorClientError

属性 error 的通知信号。

findServers(url[, localeIds=list()[, serverUris=list()]])#
参数:
  • urlQUrl

  • localeIds – 字符串列表

  • serverUris – 字符串列表

返回类型:

bool

启动异步 FindServers 请求以从给出的 url 位置的服务器或发现服务器中读取已知的服务器列表。如果异步调用成功分发,返回 true

localeIds 可用来选择请求返回的应用名称的语言。格式在 OPC UA 1.05 第3部分第8.4中指定,例如“en”表示英语,“de-DE”表示德语(德国)。如果指定了多个区域设置 ID,服务器使用第一个匹配项。如果没有匹配项或 localeIds 为空,服务器将选择默认区域设置。

serverUris 可用来将结果限制到具有匹配的应用Uri的应用描述的服务器上。例如,查找具有应用Uri “MyPLC”的服务器的当前URL,可以使用以下调用

client->findServers(discoveryServerUrl, QStringList(), QStringList({"MyPLC"}));

结果在 findServersFinished() 信号中返回。

findServersFinished(servers, statusCode, requestUrl)#
参数:
  • servers – QOpcUaApplicationDescription 列表

  • statusCodeUaStatusCode

  • requestUrlQUrl

在执行完 findServers() 操作后发出此信号。 statusCode 包含操作的结果。如果结果是 Good ,则 servers 包含与查询客户端匹配的筛选标准的应用描述的所有已知服务器的应用描述。 requestUrl 包含在 findServers() 调用中使用的 URL。

isNamespaceAutoupdateEnabled()#
返回类型:

bool

返回是否启用了命名空间数组的自动更新。

namespaceArray()#
返回类型:

字符串列表

返回命名空间数组的缓存值。

该值仅在发出 namespaceArrayUpdated() 信号之后有效。

namespaceArrayChanged(namespaces)#
参数:

namespaces – 字符串列表

在命名空间数组更改后发出此信号。 namespaces 包含服务器命名空间表的全部内容。 namespaces 中的条目索引对应于节点 ID 中使用的命名空间索引。

namespaceArrayUpdated(namespaces)#
参数:

namespaces – 字符串列表

在完成 updateNamespaceArray 操作后发出此信号。 namespaces 包含服务器命名空间表的内容。 namespaces 中的条目索引对应于节点 ID 中使用的命名空间索引。

即使在更新后命名空间数组内容保持不变,此信号也会被发出。

namespaceAutoupdateInterval()#
返回类型:

int

返回当前命名空间数组修订更新间隔。

另请参阅

setNamespaceAutoupdateInterval(int interval)

node(nodeId)#
参数:

nodeId – str

返回类型:

QOpcUaNode

返回与通过 nodeId 识别的 OPC UA 节点关联的 QOpcUaNode 对象。调用者成为节点对象的所有者。

如果客户端未连接,则返回 nullptr。后端也可能在其他错误情况下返回 nullptr(例如对于格式错误的节点 ID)。

node(expandedNodeId)
参数:

expandedNodeIdQOpcUaExpandedNodeId

返回类型:

QOpcUaNode

返回与通过 expandedNodeId 识别的 OPC UA 节点关联的 QOpcUaNode 对象。调用者成为节点对象的所有者。

如果节点不在当前连接的服务器上,无法解析命名空间,节点 ID 格式错误或客户端未连接,则返回 nullptr

另请参阅

updateNamespaceArray()

passwordForPrivateKeyRequired(keyFilePath, password, previousTryWasInvalid)#
参数:
  • keyFilePath – 字符串

  • password – 字符串

  • previousTryWasInvalid – 布尔值

当需要加密私钥的密码时,会发射此信号。参数 keyFilePath 包含了使用的密钥的文件路径。如果之前尝试解密密钥失败(即密码无效),则参数 previousTryWasInvalid 为真。参数 password 指向一个 QString,必须用实际的密钥密码填充。如果之前的尝试失败,它包含之前使用的密码。

在执行连接到此信号的槽的执行过程中,后端会被停止,并等待所有槽返回。这允许弹出一个用户对话框以请求最终用户的密码。

pkiConfiguration()#
返回类型:

QOpcUaPkiConfiguration

返回此 QOpcUaClient 实例的应用程序的 PKI 配置。

另请参阅

setPkiConfiguration()

qualifiedNameFromNamespaceUri(namespaceUri, name[, ok=None])#
参数:
  • namespaceUri – 字符串

  • name – 字符串

  • ok – 布尔值

返回类型:

QOpcUaQualifiedName

尝试使用 namespaceUri 和名称字符串 name 创建一个合格名称。返回生成的合格名称。如果无法解析 namespaceUri,则返回一个空合格名称。

ok 将被设置为 true,如果命名空间URI解析成功。如果无法解析命名空间URI,ok 将被设置为 false

readHistoryData(request)#
参数:

requestQOpcUaHistoryReadRawRequest

返回类型:

QOpcUaHistoryReadResponse

为单个或多个节点启动读原始历史数据的 request。这是 Qt OPC UA 对读取在 OPC UA 1.05第4部分,5.10.3 中定义的原始历史数据的 OPC UA ReadHistory服务的表示。

时间戳的开始、结束、每节点的值数、returnBounds以及要读取的节点都可以在 QOpcUaHistoryReadRawRequest 中指定。

返回一个包含异步请求状态 QOpcUaHistoryReadResponseQOpcUaHistoryReadResponse ,如果异步请求已成功调度。结果在 UaStatusCode serviceResult) 信号中返回。

以下示例中,请求并打印了过去两天两个节点的历史数据。结果限制为每个节点十个值。

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)#
参数:

nodesToRead – .list of QOpcUaReadItem

返回类型:

bool

为不同节点上的多个属性启动读操作。可以在 nodesToRead 的每个条目中指定节点ID、属性和索引范围。

如果异步请求已成功调度,返回 true。结果在 readNodeAttributesFinished() 信号中返回。

此读函数提供了一种读取节点属性的方法,这种方法在没有需要其他类似于基于 QOpcUaNode 基础API的其他功能(如值变化的监控)的情况下使用。在请求中的所有读取项都在一个请求中发送到服务器,并在一个响应中回答,这会生成一个单一的 readNodeAttributesFinished() 信号。这可以减少涉及大量不同节点时的网络开销和信号槽连接数量。

以下示例中,单个服务调用读取了相同节点的显示名称属性以及两个索引范围“0:2”和“5:7”的值属性,以及第二个节点完整的值属性。

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)#
参数:
  • results – .list of QOpcUaReadResult

  • serviceResultUaStatusCode

在完成readNodeAttributes()操作后,会发射此信号。

results中的元素与请求中的元素的顺序相同。对于每个请求的元素,在results中都有一个值,以及时间戳和状态码。serviceResult包含来自OPC UA Read服务的状态码。

registerNodes(nodesToRegister)#
参数:

nodesToRegister – 字符串列表

返回类型:

bool

在服务器上注册nodesToRegister中的节点ID,并在成功发送请求时返回true。结果在registerNodesFinished()信号中返回。

节点注册服务用于让服务器知道将频繁访问节点,因此可能执行保持与外部资源连接等操作。服务器还可以返回一个别名节点ID,建议使用数字。如果在许多请求中使用具有长字符串标识符的节点ID,这将很有帮助。实际的性能提升(如果有)取决于服务器的实现。

已注册的节点ID仅保证在当前会话中有效。任何不再需要的注册应尽可能快地注销,以便服务器可以释放关联的资源。

另请参阅

unregisterNodes()

registerNodesFinished(nodesToRegister, registeredNodeIds, statusCode)#
参数:
  • nodesToRegister – 字符串列表

  • registeredNodeIds – 字符串列表

  • statusCodeUaStatusCode

在完成操作registerNodes()后,将产生信号。参数 nodesToRegister 包含了请求中的节点ID,用于关联目的。服务器返回的节点ID存储在 registeredNodeIds 中,且其顺序与请求中的ID顺序相同。参数 statusCode 表示操作是否成功。

另请参阅

registerNodes()

requestEndpoints(url)#
参数:

urlQUrl

返回类型:

bool

开始异步执行 GetEndpoints 请求,以便从位于 url 的服务器读取可用的端点列表。如果异步调用已成功调度,则返回 true

端点信息将在 endpointsRequestFinished() 信号中返回。

resolveExpandedNodeId(expandedNodeId)#
参数:
返回类型:

str

尝试将 expandedNodeId 解析为使用数字命名空间索引的节点ID字符串。如果转换成功,返回节点ID字符串。

如果命名空间索引无法解析或展开的节点ID的标识符部分格式不正确,则返回空字符串。如果转换成功,则参数 ok 将设为 true。如果不能解析展开的节点ID,则 ok 将设为 false

setApplicationIdentity(identity)#
参数:

identityQOpcUaApplicationIdentity

将此 QOpcUaClient 实例的应用程序身份设置为 identity

另请参阅

applicationIdentity()

setAuthenticationInformation(authenticationInformation)#
参数:

authenticationInformationQOpcUaAuthenticationInformation

将客户端的认证信息设置为由 authenticationInformation 指定。

setConnectionSettings(connectionSettings)#
参数:

connectionSettingsQOpcUaConnectionSettings

设置此客户端的连接设置到 connectionSettings

示例

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);

connectionSettings 的值将在此之后应用于任何新的连接。

另请参阅

connectionSettings()

setNamespaceAutoupdate(isEnabled)#
参数:

isEnabled – bool

启用名称空间表的自动更新。

启用此设置后,将自动更新本地名称空间表的副本。当数组发生变化时将发出 namespaceArrayUpdatedisEnabled 指定是否启用或禁用自动更新。

将在服务器上的节点上创建订阅以跟踪更改。如果服务器不支持订阅,则此功能将不会工作,且 isNamespaceAutoupdateEnabled 返回 false

setNamespaceAutoupdateInterval(interval)#
参数:

interval – int

设置名称空间表订阅的间隔。

服务器可以修订订阅。

interval 以毫秒为单位确定检查更改的间隔。默认值为每秒一次。

另请参阅

namespaceAutoupdateInterval() setNamespaceAutoupdate(bool isEnabled)

setPkiConfiguration(config)#
参数:

configQOpcUaPkiConfiguration

为此 QOpcUaClient 实例设置应用程序 PKI 配置为 config

另请参阅

pkiConfiguration()

state()#
返回类型:

客户端状态

属性 state谨启 的获取器。

stateChanged(state)#
参数:

常量 state - ClientState

属性 state谨启 的通知信号。

supportedSecurityPolicies()#
返回类型:

字符串列表

返回由使用的后端支持的安全策略。

此功能目前作为技术预览,因此此函数提供的 API 和功能可能随时发生变化,恕不提前通知。

supportedUserTokenTypes()#
返回类型:

列表 QOpcUaUserTokenPolicy.TokenType

返回由使用的后端支持的用户令牌类型。

此功能目前作为技术预览,因此此函数提供的 API 和功能可能随时发生变化,恕不提前通知。

另请参阅

令牌类型

unregisterNodes(nodesToUnregister)#
参数:

nodesToUnregister – 字符串列表

返回类型:

bool

在服务器上注销 nodesToUnregister 中的节点 ID,并在请求成功分发时返回 true。结果将返回到 unregisterNodesFinished() 信号。

nodesToUnregister 中传递的节点 ID 必须通过 registerNodes() 获取。

另请参阅

registerNodes()

unregisterNodesFinished(nodesToUnregister, statusCode)#
参数:
  • nodesToUnregister – 字符串列表

  • statusCodeUaStatusCode

unregisterNodes() 操作完成后,将发射此信号。`nodesToUnregister` 包含用于关联请求中的节点 ID。`statusCode` 表示操作是否成功。

另请参阅

unregisterNodes()

updateNamespaceArray()#
返回类型:

bool

从服务器请求更新命名空间数组。如果操作已成功分发,则返回 true

操作完成后,将发射 namespaceArrayUpdated() 信号。

writeNodeAttributes(nodesToWrite)#
参数:

nodesToWrite – .list of QOpcUaWriteItem

返回类型:

bool

开始对多个节点上的多个属性进行写入操作。可以为 nodesToWrite 中的每个条目指定节点 ID、属性、值、值类型和索引范围。

如果异步请求已成功分发,则返回 true。结果将在 writeNodeAttributesFinished() 信号中返回。

此写入函数提供了另一种方式来写入节点的属性,可用于在不需要 QOpcUaNode 基于的 API 的其他功能(如监控值更改)的方案中写入大量不同节点上的节点属性值。请求中的所有写入项目将在单个请求中发送到服务器,并使用单个响应回答,这会生成单个 writeNodeAttributesFinished() 信号。这减少了网络开销和信号槽连接的数量,如果涉及许多不同的节点。

在下面的示例中,使用一次调用写入两个不同节点的值属性。第二个节点有一个数组值,其中只有前两个元素被覆盖

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)#
参数:
  • results – .list of QOpcUaWriteResult

  • serviceResultUaStatusCode

在一次 writeNodeAttributes() 操作完成后,将发射此信号。

results 中的元素顺序与写入请求中的元素顺序相同。它们包含从服务器接收到的值、时间戳和状态代码以及写入项中的节点 ID、属性和索引范围。这有助于将结果与请求匹配。

serviceResult 是 OPC UA 写服务返回的状态码。如果 serviceResult 不是 Good,则 results 中的条目也将具有无效的状态码,并且不得使用。