- class QOpcUaClient#
QOpcUaClient
允许与 OPC UA 服务器交互。 更多…概述#
属性#
方法#
def
addNode()
def
addReference()
def
backend()
def
deleteNode()
def
endpoint()
def
error()
def
findServers()
def
namespaceArray()
def
node()
def
registerNodes()
def
state()
信号#
def
connectError()
def
connected()
def
disconnected()
def
errorChanged()
def
stateChanged()
注意:
本文档可能包含从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)#
- 参数:
nodeToAdd –
QOpcUaAddNodeItem
- 返回类型:
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)#
- 参数:
requestedNodeId –
QOpcUaExpandedNodeId
assignedNodeId – str
statusCode –
UaStatusCode
在
addNode()
操作完成后发出此信号。requestedNodeId
是从addNode()
调用中请求的节点 ID,assignedNodeId
是服务器分配给新节点的节点 ID,statusCode
包含操作结果。如果结果是Bad
,则assignedNodeId
为空,未在服务器地址空间中添加任何节点。- addReference(referenceToAdd)#
- 参数:
referenceToAdd –
QOpcUaAddReferenceItem
- 返回类型:
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)#
- 参数:
sourceNodeId – str
referenceTypeId – str
targetNodeId –
QOpcUaExpandedNodeId
isForwardReference – bool
statusCode –
UaStatusCode
在完成
addReference()
操作后发出此信号。sourceNodeId
、referenceTypeId
、targetNodeId
和isForwardReference
是addReference()
调用中的值。《code class="docutils literal notranslate">statusCode包含操作的结果。- applicationIdentity()#
返回此
QOpcUaClient
实例的应用程序标识。- authenticationInformation()#
返回当前的认证信息。
- backend()#
- 返回类型:
str
返回由此实例的
QOpcUaClient
使用的后端名称,例如“open62541”。- connectError(errorState)#
- 参数:
errorState –
QOpcUaErrorState
当在建立连接过程中发生错误时,将发出此信号。参数
errorState
包含有关错误的更多信息。如果在客户端发生错误,可以调用对象上的
setIgnoreError
来忽略这些错误。在此信号连接的槽执行过程中,后端将停止并等待所有槽返回。这允许在后台继续之前弹出用户对话框,例如询问用户是否信任未知证书。
- connectToEndpoint(endpoint)#
- 参数:
endpoint –
QOpcUaEndpointDescription
连接到由 `endpoint` 给定的 OPC UA 端点。
QEndpointDescription endpointDescription; ... client->connectToEndpoint(endpointDescription);
通常通过调用
requestEndpoints()
获取可用端点的列表。如果端点需要用户名身份验证,必须在
QOpcUaAuthenticationInformation
中设置至少一个用户名。在设置身份验证信息之前调用此函数将使用匿名身份验证。QOpcUaAuthenticationInformation authInfo; authInfo.setUsernameAuthentication("user", "password"); client->setAuthenticationInformation(authInfo);
- connected()#
当建立连接时,会发出此信号。
- connectionSettings()#
- 返回类型:
返回此客户端的连接设置。
- deleteNode(nodeId[, deleteTargetReferences=true])#
- 参数:
nodeId – str
deleteTargetReferences – 布尔型
- 返回类型:
bool
从服务器中删除具有节点 ID
nodeId
的节点。如果deleteTargetReferences
是false
,则只删除源节点为nodeId
的引用。如果deleteTargetReferences
是true
,则还会删除目标为nodeId
的引用。如果异步调用已成功派遣,则返回
true
。操作的成功结果在
deleteNodeFinished()
信号中返回。以下示例代码从服务器中删除节点以及对其的所有引用
m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
- deleteNodeFinished(nodeId, statusCode)#
- 参数:
nodeId – str
statusCode –
UaStatusCode
该信号在完成
deleteNode()
操作后发出。nodeId
是来自deleteNode()
调用的节点 ID。statusCode
包含操作的结果。- deleteReference(referenceToDelete)#
- 参数:
referenceToDelete –
QOpcUaDeleteReferenceItem
- 返回类型:
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)#
- 参数:
sourceNodeId – str
referenceTypeId – str
targetNodeId –
QOpcUaExpandedNodeId
isForwardReference – bool
statusCode –
UaStatusCode
在执行了
deleteReference()
操作后发出此信号。sourceNodeId
、referenceTypeId
、targetNodeId
和isForwardReference
是deleteReference()
调用的值。statusCode
包含操作的执行结果。- disconnectFromEndpoint()#
断开与服务器的连接。
- disconnected()#
在接收到关闭请求后,连接已关闭时发出此信号。
- endpoint()#
返回客户端当前连接或最后连接到的端点的描述。
- endpointsRequestFinished(endpoints, statusCode, requestUrl)#
- 参数:
endpoints – .QOpcUaEndpointDescription 列表
statusCode –
UaStatusCode
requestUrl –
QUrl
在执行完
requestEndpoints()
操作后发出此信号。statusCode
包含操作的结果。如果结果是Good
,则endpoints
包含服务器上所有可用的端点的描述。requestUrl
包含在requestEndpoints()
调用中使用的 URL。- error()#
- 返回类型:
返回客户端当前错误状态。
属性
errorᅟ
的获取器。- errorChanged(error)#
- 参数:
error –
ClientError
属性
error
的通知信号。- findServers(url[, localeIds=list()[, serverUris=list()]])#
- 参数:
url –
QUrl
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 列表
statusCode –
UaStatusCode
requestUrl –
QUrl
在执行完
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
- 返回类型:
返回与通过
nodeId
识别的 OPC UA 节点关联的QOpcUaNode
对象。调用者成为节点对象的所有者。如果客户端未连接,则返回
nullptr
。后端也可能在其他错误情况下返回nullptr
(例如对于格式错误的节点 ID)。- node(expandedNodeId)
- 参数:
expandedNodeId –
QOpcUaExpandedNodeId
- 返回类型:
返回与通过
expandedNodeId
识别的 OPC UA 节点关联的QOpcUaNode
对象。调用者成为节点对象的所有者。如果节点不在当前连接的服务器上,无法解析命名空间,节点 ID 格式错误或客户端未连接,则返回
nullptr
。- passwordForPrivateKeyRequired(keyFilePath, password, previousTryWasInvalid)#
- 参数:
keyFilePath – 字符串
password – 字符串
previousTryWasInvalid – 布尔值
当需要加密私钥的密码时,会发射此信号。参数
keyFilePath
包含了使用的密钥的文件路径。如果之前尝试解密密钥失败(即密码无效),则参数previousTryWasInvalid
为真。参数password
指向一个 QString,必须用实际的密钥密码填充。如果之前的尝试失败,它包含之前使用的密码。在执行连接到此信号的槽的执行过程中,后端会被停止,并等待所有槽返回。这允许弹出一个用户对话框以请求最终用户的密码。
- pkiConfiguration()#
- 返回类型:
返回此
QOpcUaClient
实例的应用程序的 PKI 配置。- qualifiedNameFromNamespaceUri(namespaceUri, name[, ok=None])#
- 参数:
namespaceUri – 字符串
name – 字符串
ok – 布尔值
- 返回类型:
尝试使用
namespaceUri
和名称字符串name
创建一个合格名称。返回生成的合格名称。如果无法解析namespaceUri
,则返回一个空合格名称。ok
将被设置为true
,如果命名空间URI解析成功。如果无法解析命名空间URI,ok
将被设置为false
。- readHistoryData(request)#
- 参数:
request –
QOpcUaHistoryReadRawRequest
- 返回类型:
为单个或多个节点启动读原始历史数据的
request
。这是 Qt OPC UA 对读取在 OPC UA 1.05第4部分,5.10.3 中定义的原始历史数据的 OPC UA ReadHistory服务的表示。时间戳的开始、结束、每节点的值数、returnBounds以及要读取的节点都可以在
QOpcUaHistoryReadRawRequest
中指定。返回一个包含异步请求状态
QOpcUaHistoryReadResponse
的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(); } } }); }
- 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
serviceResult –
UaStatusCode
在完成
readNodeAttributes()
操作后,会发射此信号。results
中的元素与请求中的元素的顺序相同。对于每个请求的元素,在results
中都有一个值,以及时间戳和状态码。serviceResult
包含来自OPC UA Read服务的状态码。- registerNodes(nodesToRegister)#
- 参数:
nodesToRegister – 字符串列表
- 返回类型:
bool
在服务器上注册
nodesToRegister
中的节点ID,并在成功发送请求时返回true
。结果在registerNodesFinished()
信号中返回。节点注册服务用于让服务器知道将频繁访问节点,因此可能执行保持与外部资源连接等操作。服务器还可以返回一个别名节点ID,建议使用数字。如果在许多请求中使用具有长字符串标识符的节点ID,这将很有帮助。实际的性能提升(如果有)取决于服务器的实现。
已注册的节点ID仅保证在当前会话中有效。任何不再需要的注册应尽可能快地注销,以便服务器可以释放关联的资源。
另请参阅
- registerNodesFinished(nodesToRegister, registeredNodeIds, statusCode)#
- 参数:
nodesToRegister – 字符串列表
registeredNodeIds – 字符串列表
statusCode –
UaStatusCode
在完成操作
registerNodes()
后,将产生信号。参数nodesToRegister
包含了请求中的节点ID,用于关联目的。服务器返回的节点ID存储在registeredNodeIds
中,且其顺序与请求中的ID顺序相同。参数statusCode
表示操作是否成功。另请参阅
开始异步执行
GetEndpoints
请求,以便从位于url
的服务器读取可用的端点列表。如果异步调用已成功调度,则返回true
。端点信息将在
endpointsRequestFinished()
信号中返回。- resolveExpandedNodeId(expandedNodeId)#
- 参数:
expandedNodeId –
QOpcUaExpandedNodeId
ok – 布尔值
- 返回类型:
str
尝试将
expandedNodeId
解析为使用数字命名空间索引的节点ID字符串。如果转换成功,返回节点ID字符串。如果命名空间索引无法解析或展开的节点ID的标识符部分格式不正确,则返回空字符串。如果转换成功,则参数
ok
将设为true
。如果不能解析展开的节点ID,则ok
将设为false
。- setApplicationIdentity(identity)#
- 参数:
identity –
QOpcUaApplicationIdentity
将此
QOpcUaClient
实例的应用程序身份设置为identity
。- setAuthenticationInformation(authenticationInformation)#
- 参数:
authenticationInformation –
QOpcUaAuthenticationInformation
将客户端的认证信息设置为由
authenticationInformation
指定。- setConnectionSettings(connectionSettings)#
- 参数:
connectionSettings –
QOpcUaConnectionSettings
设置此客户端的连接设置到
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
的值将在此之后应用于任何新的连接。另请参阅
- setNamespaceAutoupdate(isEnabled)#
- 参数:
isEnabled – bool
启用名称空间表的自动更新。
启用此设置后,将自动更新本地名称空间表的副本。当数组发生变化时将发出
namespaceArrayUpdated
。isEnabled
指定是否启用或禁用自动更新。将在服务器上的节点上创建订阅以跟踪更改。如果服务器不支持订阅,则此功能将不会工作,且
isNamespaceAutoupdateEnabled
返回false
。- setNamespaceAutoupdateInterval(interval)#
- 参数:
interval – int
设置名称空间表订阅的间隔。
服务器可以修订订阅。
interval
以毫秒为单位确定检查更改的间隔。默认值为每秒一次。另请参阅
namespaceAutoupdateInterval()
setNamespaceAutoupdate(bool isEnabled)
- setPkiConfiguration(config)#
- 参数:
config –
QOpcUaPkiConfiguration
为此
QOpcUaClient
实例设置应用程序 PKI 配置为config
。另请参阅
属性
state谨启
的获取器。- stateChanged(state)#
- 参数:
常量 state -
ClientState
属性
state谨启
的通知信号。- supportedSecurityPolicies()#
- 返回类型:
字符串列表
返回由使用的后端支持的安全策略。
此功能目前作为技术预览,因此此函数提供的 API 和功能可能随时发生变化,恕不提前通知。
- supportedUserTokenTypes()#
- 返回类型:
返回由使用的后端支持的用户令牌类型。
此功能目前作为技术预览,因此此函数提供的 API 和功能可能随时发生变化,恕不提前通知。
另请参阅
- unregisterNodes(nodesToUnregister)#
- 参数:
nodesToUnregister – 字符串列表
- 返回类型:
bool
在服务器上注销
nodesToUnregister
中的节点 ID,并在请求成功分发时返回true
。结果将返回到unregisterNodesFinished()
信号。在
nodesToUnregister
中传递的节点 ID 必须通过registerNodes()
获取。另请参阅
- unregisterNodesFinished(nodesToUnregister, statusCode)#
- 参数:
nodesToUnregister – 字符串列表
statusCode –
UaStatusCode
在
unregisterNodes()
操作完成后,将发射此信号。`nodesToUnregister` 包含用于关联请求中的节点 ID。`statusCode` 表示操作是否成功。另请参阅
- 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
serviceResult –
UaStatusCode
在一次
writeNodeAttributes()
操作完成后,将发射此信号。results
中的元素顺序与写入请求中的元素顺序相同。它们包含从服务器接收到的值、时间戳和状态代码以及写入项中的节点 ID、属性和索引范围。这有助于将结果与请求匹配。serviceResult
是 OPC UA 写服务返回的状态码。如果serviceResult
不是Good
,则results
中的条目也将具有无效的状态码,并且不得使用。