PySide6.QtOpcUa.QOpcUaClient

class QOpcUaClient

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

PySide6.QtOpcUa.QOpcUaClient 的继承图

概要

属性

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

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

方法

信号

注意

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

详细描述

QOpcUa客户端

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

成功连接到服务器后,QOpcUaClient 允许获取 QOpcUaNode 对象,这些对象使得与 OPC UA 服务器上的节点进行进一步交互成为可能。对于涉及多个节点的操作,QOpcUaClient 提供了一个 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

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

Access functions:
property stateᅟ: QOpcUaClient.ClientState

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

Access functions:
addNode(nodeToAdd)
Parameters:

nodeToAddQOpcUaAddNodeItem

Return type:

布尔

在服务器上添加由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)
Parameters:

此信号在addNode()操作完成后发出。requestedNodeIdaddNode()调用中请求的节点ID,assignedNodeId是服务器为新节点分配的节点ID。statusCode包含操作的结果。如果结果是BadassignedNodeId为空,并且没有节点被添加到服务器的地址空间中。

addReference(referenceToAdd)
Parameters:

referenceToAddQOpcUaAddReferenceItem

Return type:

布尔

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)
Parameters:

此信号在addReference()操作完成后发出。sourceNodeIdreferenceTypeIdtargetNodeIdisForwardReference是来自addReference()调用的值。statusCode包含操作的结果。

applicationIdentity()
Return type:

QOpcUaApplicationIdentity

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

authenticationInformation()
Return type:

QOpcUaAuthenticationInformation

返回当前的身份验证信息。

backend()
Return type:

字符串

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

connectError(errorState)
Parameters:

errorStateQOpcUaErrorState

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

在客户端错误的情况下,可以通过在对象上调用setIgnoreError来忽略这些错误。

在执行连接到该信号的槽时,后端会停止并等待所有槽返回。这允许弹出一个用户对话框,例如在后台继续之前询问最终用户是否信任未知证书。

connectToEndpoint(endpoint)
Parameters:

endpointQOpcUaEndpointDescription

连接到在endpoint中给出的OPC UA端点。

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

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

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

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

client->setAuthenticationInformation(authInfo);
connected()

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

connectionSettings()
Return type:

QOpcUaConnectionSettings

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

deleteNode(nodeId[, deleteTargetReferences=true])
Parameters:
  • nodeId – str

  • deleteTargetReferences – bool

Return type:

布尔

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

如果异步调用已成功分发,则返回 true

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

以下示例代码从服务器删除一个节点及其所有引用:

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

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

deleteReference(referenceToDelete)
Parameters:

referenceToDeleteQOpcUaDeleteReferenceItem

Return type:

布尔

从服务器删除由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)
Parameters:

此信号在deleteReference()操作完成后发出。sourceNodeIdreferenceTypeIdtargetNodeIdisForwardReference是来自deleteReference()调用的值。statusCode包含操作的结果。

disconnectFromEndpoint()

从服务器断开连接。

disconnected()

当连接在关闭请求后被关闭时,会发出此信号。

endpoint()
Return type:

QOpcUaEndpointDescription

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

endpointsRequestFinished(endpoints, statusCode, requestUrl)
Parameters:
  • endpoints – QOpcUaEndpointDescription 的列表

  • statusCodeUaStatusCode

  • requestUrlQUrl

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

error()
Return type:

ClientError

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

属性 errorᅟ 的获取器。

errorChanged(error)
Parameters:

错误ClientError

属性 errorᅟ 的通知信号。

findServers(url[, localeIds=list()[, serverUris=list()]])
Parameters:
  • urlQUrl

  • localeIds – 字符串列表

  • serverUris – 字符串列表

Return type:

布尔

启动一个异步的FindServers请求,从服务器或发现服务器读取已知服务器列表,地址为url。如果异步调用成功发送,则返回true

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

serverUris 可用于将结果限制为在其应用程序描述中具有匹配的 applicationUri 的服务器。例如,要查找具有 applicationUri “MyPLC” 的服务器的当前 URL,可以使用以下调用:

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

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

findServersFinished(servers, statusCode, requestUrl)
Parameters:
  • servers – QOpcUaApplicationDescription 的列表

  • statusCodeUaStatusCode

  • requestUrlQUrl

此信号在findServers()操作完成后发出。statusCode包含操作的结果。如果结果是Goodservers包含查询服务器已知的所有符合过滤条件的服务器的应用程序描述。requestUrl包含在findServers()调用中使用的URL。

isNamespaceAutoupdateEnabled()
Return type:

布尔

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

namespaceArray()
Return type:

字符串列表

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

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

namespaceArrayChanged(namespaces)
Parameters:

命名空间 – 字符串列表

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

namespaceArrayUpdated(namespaces)
Parameters:

命名空间 – 字符串列表

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

如果命名空间数组内容在更新后保持不变,仍然会发出此信号。

namespaceAutoupdateInterval()
Return type:

整数

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

另请参阅

setNamespaceAutoupdateInterval(int interval)

node(expandedNodeId)
Parameters:

expandedNodeIdQOpcUaExpandedNodeId

Return type:

QOpcUaNode

返回一个与由expandedNodeId标识的OPC UA节点相关联的QOpcUaNode对象。调用者将成为节点对象的所有者。

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

另请参阅

updateNamespaceArray()

node(nodeId)
Parameters:

nodeId – str

Return type:

QOpcUaNode

返回一个与由nodeId标识的OPC UA节点相关联的QOpcUaNode对象。调用者将成为节点对象的所有者。

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

passwordForPrivateKeyRequired(keyFilePath, password, previousTryWasInvalid)
Parameters:
  • keyFilePath – str

  • password – str

  • previousTryWasInvalid – 布尔值

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

在执行连接到该信号的槽时,后端会停止并等待所有槽返回。这允许弹出一个用户对话框,向最终用户询问密码。

pkiConfiguration()
Return type:

QOpcUaPkiConfiguration

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

另请参阅

setPkiConfiguration()

qualifiedNameFromNamespaceUri(namespaceUri, name[, ok=None])
Parameters:
  • namespaceUri – str

  • name – str

  • ok – 布尔值

Return type:

QOpcUaQualifiedName

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

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

readHistoryData(request)
Parameters:

请求QOpcUaHistoryReadRawRequest

Return type:

QOpcUaHistoryReadResponse

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

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

返回一个QOpcUaHistoryReadResponse,其中包含异步请求成功分发的请求状态。结果在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();
                            }
                        }
                    });
}
readHistoryEvents(request)
Parameters:

请求QOpcUaHistoryReadEventRequest

Return type:

QOpcUaHistoryReadResponse

使用request中的参数为一个或多个节点ID启动读取事件历史请求。

返回一个QOpcUaHistoryReadResponse,其中包含异步请求成功分发的请求状态。结果在UaStatusCode serviceResult)信号中返回。

以下示例检索过去两天内两个节点的历史事件。每次最多返回每个节点的10个事件。虽然还有更多事件符合过滤器和提供的时间范围,hasMoreData() 将为真,并且可以通过 readMoreData() 获取更多事件。

QOpcUaMonitoringParameters::EventFilter filter;
filter << QOpcUaSimpleAttributeOperand("Message");
filter << QOpcUaSimpleAttributeOperand("Time");

const QOpcUaHistoryReadEventRequest request({ QOpcUaReadItem("ns=2;s=EventHistorian"), QOpcUaReadItem("ns=2;s=EventHistorian2") },
                                            QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(),
                                            filter, 10);

// The response object must be freed by the user after all wanted data has been retrieved
const auto response = opcuaClient->readHistoryEvents(request);

QObject::connect(response, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this,
                 [response](const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) {
    if (serviceResult != QOpcUa::UaStatusCode::Good) {
        qDebug() << "Service call failed with" << serviceResult;
        return;
    }

    // Print what we got so far
    for (const auto &result : response->events()) {
        qDebug() << "Results for" << result.nodeId() << result.statusCode();
        for (const auto &event : result.events())
            qDebug() << "    Event:" << event;
    }

    if (response->hasMoreData())
        response->readMoreData();
});
readNodeAttributes(nodesToRead)
Parameters:

nodesToRead – QOpcUaReadItem 的列表

Return type:

布尔

开始读取不同节点上的多个属性。可以为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)
Parameters:
  • results – QOpcUaReadResult 的列表

  • serviceResultUaStatusCode

此信号在readNodeAttributes()操作完成后发出。

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

registerNodes(nodesToRegister)
Parameters:

nodesToRegister – 字符串列表

Return type:

布尔

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

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

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

另请参阅

unregisterNodes()

registerNodesFinished(nodesToRegister, registeredNodeIds, statusCode)
Parameters:
  • nodesToRegister – 字符串列表

  • registeredNodeIds – 字符串列表

  • statusCodeUaStatusCode

此信号在registerNodes()操作完成后发出。nodesToRegister包含请求中的节点ID,用于关联目的。服务器返回的节点ID在registeredNodeIds中,并且与请求中的ID顺序相同。statusCode指示操作是否成功。

另请参阅

registerNodes()

requestEndpoints(url)
Parameters:

urlQUrl

Return type:

布尔

启动一个异步的GetEndpoints请求,从服务器url读取可用端点的列表。如果异步调用已成功分派,则返回true

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

resolveExpandedNodeId(expandedNodeId[, ok=None])
Parameters:
Return type:

字符串

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

如果无法解析命名空间索引或扩展节点ID的标识符部分格式错误,则返回空字符串。ok 如果转换成功,将被设置为 true。如果无法解析扩展节点ID,ok 将被设置为 false

setApplicationIdentity(identity)
Parameters:

身份QOpcUaApplicationIdentity

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

另请参阅

applicationIdentity()

setAuthenticationInformation(authenticationInformation)
Parameters:

authenticationInformationQOpcUaAuthenticationInformation

将此客户端的认证信息设置为 authenticationInformation

setConnectionSettings(connectionSettings)
Parameters:

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)
Parameters:

isEnabled – 布尔值

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

启用此功能将自动更新命名空间表的本地副本。当数组更改时,将发出namespaceArrayUpdatedisEnabled确定是否启用或禁用自动更新。

将在服务器上的节点上进行订阅以跟踪更改。如果服务器不支持订阅,这将无法工作,并且isNamespaceAutoupdateEnabled返回false

setNamespaceAutoupdateInterval(interval)
Parameters:

interval – 整数

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

订阅可能会被服务器修改。

interval 决定了检查变化的间隔时间,单位为毫秒。默认值为每秒一次。

另请参阅

namespaceAutoupdateInterval() setNamespaceAutoupdate(bool isEnabled)

setPkiConfiguration(config)
Parameters:

配置QOpcUaPkiConfiguration

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

另请参阅

pkiConfiguration()

state()
Return type:

ClientState

属性 stateᅟ 的获取器。

stateChanged(state)
Parameters:

状态ClientState

属性 stateᅟ 的通知信号。

supportedSecurityPolicies()
Return type:

字符串列表

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

此功能目前作为技术预览提供,因此该功能提供的API和功能可能会随时更改,恕不另行通知。

supportedUserTokenTypes()
Return type:

QOpcUaUserTokenPolicy.TokenType的列表

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

此功能目前作为技术预览提供,因此该功能提供的API和功能可能会随时更改,恕不另行通知。

另请参阅

TokenType

unregisterNodes(nodesToUnregister)
Parameters:

nodesToUnregister – 字符串列表

Return type:

布尔

在服务器上注销nodesToUnregister中的节点ID,如果请求已成功发送,则返回true。结果在unregisterNodesFinished()信号中返回。

传入nodesToUnregister的节点ID必须通过registerNodes()获得。

另请参阅

registerNodes()

unregisterNodesFinished(nodesToUnregister, statusCode)
Parameters:
  • nodesToUnregister – 字符串列表

  • statusCodeUaStatusCode

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

另请参阅

unregisterNodes()

updateNamespaceArray()
Return type:

布尔

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

在操作完成后,会发出namespaceArrayUpdated()信号。

writeNodeAttributes(nodesToWrite)
Parameters:

nodesToWrite – QOpcUaWriteItem 的列表

Return type:

布尔

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

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

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

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

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 – QOpcUaWriteResult 的列表

  • serviceResultUaStatusCode

此信号在writeNodeAttributes()操作完成后发出。

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

serviceResult 是来自OPC UA写入服务的状态代码。如果 serviceResult 不是 Good,那么 results 中的条目也具有无效的状态代码,不能使用。