- class QOpcUaNode#
QOpcUaNode
允许与 OPC UA 节点交互。 更多信息…摘要#
方法#
def
attribute()
定义
browse()
定义
callMethod()
定义
client()
定义
nodeId()
信号#
静态函数#
注意
本文档可能包含从 C++ 自动转换到 Python 的代码片段。我们始终欢迎对片段翻译的贡献力量。如果您在翻译中发现问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式告诉我们
详细描述#
节点是OPC UA地址空间的基本构建块。它具有浏览名称、值、相关属性等属性,并且可以引用地址空间中的其他节点。节点被组织在命名空间中,并具有ID,例如可以是数字、字符串、命名空间特定的格式(不透明)或全局唯一标识符。节点通过命名空间ID和节点ID来识别。此标识符通常以字符串形式给出:位于命名空间0且具有数字标识符42的节点标识符将产生字符串
ns=0;i=42
。具有字符串标识符的节点可以通过ns=0;s=myStringIdentifier
来访问。此类型的对象属于用户,当不再需要时必须删除。只要创建它们的
QOpcUaClient
存在,它们就是有效的。属性读取和写入#
当调用
readAttributes()
或readAttributeRange()
时,从服务器读取节点属性。结果被本地缓存,可以在接收到attributeRead
信号后使用attribute()
方法检索。如果有必要权限,可以使用
writeAttribute()
、writeAttributes()
和writeAttributeRange()
来写入属性。写入操作成功会通过attributeWritten
信号报告。attributeError()
包含与属性最后读取或写入操作相关的状态码。这是由OPC UA服务返回的低级别状态码。可以通过使用errorCategory()
方法转换为ErrorCategory
以简化此状态码。订阅和监控项#
订阅是OPC UA中的一个概念,它允许在节点数据或发生事件时接收通知,而不是不断地轮询节点以检查变化。监控项定义了节点如何被监控变化。它们被添加到订阅中,并且生成的任何通知都通过订阅转发给用户。用户可以配置监控项和订阅的更新间隔以及其他许多选项。
QOpcUaNode
提供了与订阅和监控项交互的抽象。enableMonitoring()
为单个或多个属性启用了数据变更通知。包含新值的dataChangeOccurred
信号并更新本地缓存。《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.disableMonitoring" title="PySide6.QtOpcUa.QOpcUaNode.disableMonitoring">disableMonitoring()
禁用数据变更通知。《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.monitoringStatusChanged" title="PySide6.QtOpcUa.QOpcUaNode.monitoringStatusChanged">monitoringStatusChanged
信号在手动启用和禁用或服务器上状态更改后通知监控状态的变化。事件监控使用相同的API进行设置和生命周期管理。《a class="reference internal" href="QOpcUa.html#PySide6.QtOpcUa.QOpcUa.NodeAttribute" title="PySide6.QtOpcUa.QOpcUa.NodeAttribute">
EventNotifier
属性必须通过一个EventFilter
进行监控,该过滤器选择所需的事件字段并按用户定义的标准过滤报告的事件。事件以eventOccurred()
信号的形式报告,该信号是一个包含选定事件字段值的QVariantList。可以使用
modifyMonitoring()
在运行时修改订阅和监控项的设置。浏览地址空间#
OPC UA地址空间由通过引用连接的节点组成。《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.browseChildren" title="PySide6.QtOpcUa.QOpcUaNode.browseChildren">
browseChildren
按前进方向跟踪这些引用,并在《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.browseFinished" title="PySide6.QtOpcUa.QOpcUaNode.browseFinished">browseFinished
信号中返回与通过《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode" title="PySide6.QtOpcUa.QOpcUaNode">QOpcUaNode
实例连接的所有节点的属性。《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.browse" title="PySide6.QtOpcUa.QOpcUaNode.browse">browse
与《a class="reference internal" href="#PySide6.QtOpcUa.QOpcUaNode.browseChildren" title="PySide6.QtOpcUa.QOpcUaNode.browseChildren">browseChildren
类似,但提供了更多配置浏览调用的选项。方法调用#
OPC UA 规定了服务器端用户可以调用的方法。
QOpcUaNode
通过callMethod
方法来支持这一点,该方法接收参数,并在methodCallFinished
信号中返回调用结果。解析浏览路径#
为了支持针对类型描述的编程,OPC UA 支持从特定节点开始解析浏览名称路径,以获取目标节点的节点 ID。该
resolveBrowsePath()
方法遵循从被调用的节点开始的路径,并在resolveBrowsePathFinished()
信号中返回结果。示例#
有关将客户端连接到服务器并获取
QOpcUaNode
对象的信息,请参阅QOpcUaClient
。节点成功创建后,从服务器读取根节点的 BrowseName
QOpcUaNode *rootNode; // Created before, see QOpcUaClient documentation. // Connect to the attributeRead signal. Compatible slots of QObjects can be used instead of a lambda. QObject::connect(rootNode, &QOpcUaNode::attributeRead, [rootNode, client](QOpcUa::NodeAttributes attr) { qDebug() << "Signal for attributes:" << attr; if (rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName) != QOpcUa::UaStatusCode::Good) { qDebug() << "Failed to read attribute:" << rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName); client->disconnectFromEndpoint(); } qDebug() << "Browse name:" << rootNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUaQualifiedName>().name(); }); rootNode->readAttributes(QOpcUa::NodeAttribute::BrowseName); // Start a read operation for the node's BrowseName attribute.
- static allBaseAttributes()#
- 返回类型::
NodeAttribute
的组合
包含 OPC UA 基节点类的所有属性。
- attribute(attribute)#
- 参数::
attribute –
NodeAttribute
- 返回类型::
对象
返回在
attribute
中给出的属性的值。该值仅在
attributeRead
信号已发出后有效。如果没有缓存的属性值,则返回空 QVariant。- attributeError(attribute)#
- 参数::
attribute –
NodeAttribute
- 返回类型::
返回
attribute
中给出的属性的错误代码。错误代码仅在
attributeRead
或attributeWritten
信号已发出后有效。如果属性缓存中没有条目,则返回
BadNoEntryExists
。另请参阅
- attributeRead(attributes)#
- 参数::
attributes – 由
NodeAttribute
组合而成
此信号在
readAttributes()
或readAttributeRange()
操作完成后发出。接收者必须检查在attributes
中包含的属性的状态代码。- attributeUpdated(attr, value)#
- 参数::
attr –
NodeAttribute
value – 对象
当由服务器发送的数据变更通知、读取或写入操作更新属性缓存中的值后,会发出此信号。
value
包含节点属性attr
的新值。- attributeWritten(attribute, statusCode)#
- 参数::
attribute –
NodeAttribute
statusCode –
UaStatusCode
在完成
writeAttribute()
,writeAttributes()
或writeAttributeRange()
操作后,此信号被触发。在触发此信号之前,如果写入成功,则更新属性缓存。
writeAttributes()
对于写入调用中的每个属性,都会发出一个信号。statusCode
包含对attribute
的写入操作的成功信息。- browse(request)#
- 参数::
request –
QOpcUaBrowseRequest
- 返回类型::
bool
从此节点启动浏览调用。
如果异步调用已成功分发,则返回
true
。在
browseFinished()
信号中返回符合request
中指定标准的所有引用。例如,可以使用反向浏览调用查找属性节点的父节点
QOpcUaBrowseRequest request; request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse); request.setReferenceTypeId(QOpcUa::ReferenceTypeId::HasProperty); propertyNode->browse(request);
- browseChildren([referenceType=QOpcUa.ReferenceTypeId.HierarchicalReferences[, nodeClassMask=QOpcUa.NodeClass.Undefined]])#
- 参数::
referenceType –
ReferenceTypeId
nodeClassMask –
NodeClass
的组合
- 返回类型::
bool
从调用此方法所在的节点开始执行向前浏览调用。浏览操作收集与节点连接的子节点信息,并通过
browseFinished()
信号传递结果。如果异步调用已成功分发,则返回
true
。要仅请求与特定类型的引用连接的子节点,必须将
referenceType
设置为该引用类型。例如,可以通过在referenceType
中传递HasProperty
来获取节点的所有属性。根据需要在nodeClassMask
中设置,可以过滤结果以包含具有特定节点类的节点。- browseFinished(children, statusCode)#
- 参数::
子节点 – .QOpcUaReferenceDescription列表
statusCode –
UaStatusCode
在执行了
browseChildren()
或browse()
操作后发出此信号。children
包含了匹配browseChildren()
准则的所有节点的信息。statusCode
包含了浏览操作的服务结果。如果statusCode
不是Good
,则传递的children
向量将为空。- callMethod(methodNodeId[, args=list()])#
- 参数::
methodNodeId – str
args – std.pair QVariant,QOpcUa.Types列表
- 返回类型::
bool
调用OPC UA方法
methodNodeId
,通过args
提供参数。结果在methodCallFinished
信号中返回。如果异步调用已成功分发,则返回
true
。- client()#
- 返回类型::
返回创建此节点的客户端指针。
- dataChangeOccurred(attr, value)#
- 参数::
attr –
NodeAttribute
value – 对象
在接收数据变化通知后发出此信号。
value
包含了节点属性attr
的新值。- disableMonitoring(attr)#
- 参数::
attr – QOpcUa.NodeAttribute组合
- 返回类型::
bool
此方法禁用了在
attr
中给出的属性监控。如果异步调用已成功分发,则返回
true
。通话结束后,会发射
disableMonitoringFinished
信号,并且monitoringStatus
返回一个默认构造的值,状态码为 BadMonitoredItemIdInvalid 对于attr
。- disableMonitoringFinished(attr, statusCode)#
- 参数::
attr –
NodeAttribute
statusCode –
UaStatusCode
在该信号发射后,异步调用
disableMonitoring()
完成。`statusCode` 包含由操作生成的状态码。在此信号发射之后,`monitoringStatus
` 返回一个默认构造的值,对于 `attr` 的状态码为 BadMonitoredItemIdInvalid。- enableMonitoring(attr, settings)#
- 参数::
attr – QOpcUa.NodeAttribute组合
settings –
QOpcUaMonitoringParameters
- 返回类型::
bool
此方法为在
attr
中提供的每个属性创建一个监控项。在创建监控项和订阅期间使用来自settings
的设置。如果异步调用已成功分发,则返回
true
。调用完成时,会发射
enableMonitoringFinished
信号。存在多个错误情况,会生成错误状态码:在settings
中指定的订阅 ID 不存在,服务器上的节点不存在,节点不具有请求的属性或服务器达到了监控项的最大数量。相同的函数也用于启用事件监控。事件是 OPC UA 地址空间中的特殊对象,它包含有关已发生事件的情報。如果服务器上触发事件,事件监控项收集事件对象及其子节点的节点属性的选择值。每个具有事件源的节点都可以监控事件。为了监控事件,必须使用
EventNotifier
属性,并结合一个包含用户所需的字段以及可选的用于按条件过滤事件的子句的 EventFilter(有关详细信息,请参阅EventFilter
)。- enableMonitoringFinished(attr, statusCode)#
- 参数::
attr –
NodeAttribute
statusCode –
UaStatusCode
此信号在异步调用
enableMonitoring()
完成后发出。在此信号发出后,monitoringStatus()
将返回关于attr
的有效信息。statusCode
包含操作的状- eventOccurred(eventFields)#
- 参数::
eventFields – .QVariant的列表
在接收到新事件后发出此信号。
eventFields
包含事件筛选器中select
子句指定的顺序中事件字段的值。- static mandatoryBaseAttributes()#
- 返回类型::
NodeAttribute
的组合
包含 OPC UA 基节点类的所有强制属性。
- methodCallFinished(methodNodeId, result, statusCode)#
- 参数::
methodNodeId – str
result – 对象
statusCode –
UaStatusCode
在服务器上对
methodNodeId
的方法调用完成后发出此信号。statusCode
包含方法调用的状态代码,result
包含方法的输出参数。result
为空,如果方法没有输出参数,或statusCode
不是Good
。如果只有一个输出参数,则result
变元是一个单个值;如果被调用的函数返回了多个输出参数,它包含变元的列表。if (result.canConvert<QVariantList>()) { // handle list type } else { // handle value type }
- modifyDataChangeFilter(attr, filter)#
- 参数::
attr –
NodeAttribute
filter –
DataChangeFilter
- 返回类型::
bool
修改现有的数据更改监控,使用
filter
作为数据更改筛选器。如果筛选器修改请求已成功发送到后端,则返回
true
。修改
attr
的monitoringStatusChanged
,在操作完成后发出。- modifyEventFilter(eventFilter)#
- 参数::
eventFilter –
EventFilter
- 返回类型::
bool
修改现有的事件监控以使用
eventFilter
作为事件过滤。如果筛选器修改请求已成功发送到后端,则返回
true
。monitoringStatusChanged
在针对事件通知器
的操作完成之后发出。- modifyMonitoring(attr, item, value)#
- 参数::
attr –
NodeAttribute
item –
Parameter
value – 对象
- 返回类型::
bool
此方法修改了被监控项或订阅的设置。尝试将属性
attr
关联的被监控项或订阅的item
参数设置成value
。如果异步调用已成功分发,则返回
true
。调用完成后,将发出
monitoringStatusChanged
信号。此信号包含修改后的参数和状态码。如果没有与请求的属性关联的被监控项,或者没有实现修改请求的参数或服务器拒绝了请求的值时,将生成错误状态码。- monitoringStatus(attr)#
- 参数::
attr –
NodeAttribute
- 返回类型::
返回与属性
attr
关联的监控参数。这可以用来检查enableMonitoring()
是否成功,或者是参数是否已被修改。返回的值只在enableMonitoringFinished
或monitoringStatusChanged
已针对attr
发出时有效。如果在进行状态查询之前没有发出信号,则返回值将返回BadNoEntryExists
。- monitoringStatusChanged(attr, items, statusCode)#
- 参数::
attr –
NodeAttribute
items –
Parameter
的组合statusCode –
UaStatusCode
在调用
modifyMonitoring()
异步调用完成之后,会发出此信号。要求操作的节点属性将在attr
中返回。《code class="docutils literal notranslate">items》 包含已经修改的参数。《code class="docutils literal notranslate">statusCode 包含对服务器上的修改操作的结果。- nodeId()#
- 返回类型::
字符串
返回OPC UA节点的ID。
- readAttributeRange(attribute, indexRange)#
- 参数::
attribute –
NodeAttribute
indexRange – 字符串
- 返回类型::
bool
开始异步读取节点属性
attribute
的操作。`indexRange
` 是一个字符串,可以用来选择数组的一部分。它定义在OPC UA 1.05第4部分7.27。数组中的第一个元素是0,“1”返回第二个元素,“0:9”返回前10个元素,“0,1”返回二维数组第一行第二个元素。如果异步调用已成功分发,则返回
true
。属性值只在
attributeRead
信号发出后包含有效信息。- readAttributes([attributes=QOpcUaNode.mandatoryBaseAttributes()])#
- 参数::
attributes – 由
NodeAttribute
组合而成- 返回类型::
bool
开始异步读取
attributes
中的节点属性。如果异步调用已成功分发,则返回
true
。属性值只在
attributeRead
信号发出后包含有效信息。- readHistoryEvents(startTime, endTime, filter[, numValues=0])#
- 参数::
- 返回类型::
使用参数
startTime
、endTime
、filter
和numValues
开始对这个节点进行读取事件历史记录请求。`filter
` 用于由服务器确定将返回哪些事件及其字段集。返回一个包含请求状态的
QOpcUaHistoryReadResponse
对象,如果异步请求已成功分发。结果在UaStatusCode serviceResult)
信号中返回。以下示例获取过去两天的历史事件。每次最多返回10个事件。如果还有更多符合筛选条件并处于提供时间段内的事件,
hasMoreData()
将为真,可以通过 readMoreData() 获取更多事件。QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=EventHistorian")); QVERIFY(node != nullptr); QOpcUaMonitoringParameters::EventFilter filter; filter << QOpcUaSimpleAttributeOperand("Message"); filter << QOpcUaSimpleAttributeOperand("Time"); const auto response = node->readHistoryEvents(QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(), filter, 10); 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(); });
- readHistoryRaw(startTime, endTime, numValues, returnBounds)#
- 参数::
- 返回类型::
为该节点启动读取历史请求。这是 Qt OPC UA 对 OPC UA 读取历史服务的表示,该服务在 OPC UA 1.05 第4部分 5.10.3 中定义了读取原始历史数据。它根据参数
startTime
、endTime
、numValues
和returnBounds
读取历史。返回一个包含请求状态的
QOpcUaHistoryReadResponse
对象,如果异步请求已成功分发。结果在UaStatusCode serviceResult)
信号中返回。在以下示例中,请求并打印了节点的过去两天的历史数据。结果限制为每个节点返回十个值。
QOpcUaHistoryReadResponse *response = node->readHistoryRaw(QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true); if (response) { QObject::connect(response123, &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(); } } }); }
- readHistoryRaw(startTime, endTime, numValues, returnBounds, timestampsToReturn)
- 参数::
startTime –
QDateTime
endTime –
QDateTime
numValues – 整数
returnBounds – bool
timestampsToReturn –
TimestampsToReturn
- 返回类型::
为该节点启动读取历史请求。额外的
timestampsToReturn
参数确定每个值将返回哪些时间戳。- readValueAttribute()#
- 返回类型::
bool
启动对节点值属性的异步读取操作。
如果异步调用已成功分发,则返回
true
。另请参阅
- resolveBrowsePath(path)#
- 参数::
path – .list of QOpcUaRelativePathElement
- 返回类型::
bool
使用 OPC UA 1.05 第4部分中指定的 TranslateBrowsePathsToNodeIds 服务,从该节点开始解析浏览路径
path
到一个或多个节点ID。如果异步调用已成功分发,则返回
true
。TranslateBrowsePathsToNodeIds 主要用于针对类型定义编程,而不是针对 OPC UA 地址空间中一组具体的节点。例如,一个机器模型类型定义可能包含一个起始节点,其在浏览名称为“Machine”的组件下有名为“Fan”的组件。Fan 有一个名为“RPM”的组件,这是一个变量节点,包含风扇的当前 RPM 值。有多种类型的机器,并且每种类型的每台机器都将作为该类型对象映射到 OPC UA 地址空间中。对于这些机器对象中的每一个,从机器节点到“RPM”节点的路径都是相同的。如果客户端想要读取当前的 RPM 值,它需要以机器节点作为起始节点,调用 resolveBrowsePath(),并带上从机器到“RPM”节点的浏览路径。
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=1;s=machine1")); QList<QOpcUaRelativePathElement> path; path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "Fan"), QOpcUa::ReferenceTypeId::HasComponent)); path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "RPM"), QOpcUa::ReferenceTypeId::HasComponent)); node->resolveBrowsePath(path);
resolveBrowsePathFinished()
返回的结果包含“RPM”节点的节点 ID,可用于访问节点的属性。if (!results.size()) { qWarning() << "Browse path resolution failed"; return; } if (results.at(0).isFullyResolved()) { QOpcUaNode *rpmNode = client->node(results.at(0).targetId()); if (!rpmNode) { qWarning() << "Failed to create node"; return; } // Connect slots, call methods } else { qWarning() << "Browse path could not be fully resolved, the target node is on another server"; return; }
- resolveBrowsePathFinished(targets, path, statusCode)#
- 参数::
targets – .QOpcUaBrowsePathTarget 列表
path – .list of QOpcUaRelativePathElement
statusCode –
UaStatusCode
在调用
resolveBrowsePath()
后会发出此信号。含匹配信息的
QOpcUaBrowsePathTarget
列表包含在targets
中,statusCode
是操作的代码。如果statusCode
不是Good
,则targets
为空。浏览路径path
是请求中的浏览路径。它可以用来将结果关联到请求。- serverTimestamp(attribute)#
- 参数::
attribute –
NodeAttribute
- 返回类型::
返回从最后一次读取或数据更改的
attribute
的服务器时间戳。在至少发出一个attributeRead
或dataChangeOccurred
信号之前,返回一个空的 datetime。- sourceTimestamp(attribute)#
- 参数::
attribute –
NodeAttribute
- 返回类型::
返回从上次读取或数据更改的
attribute
的源时间戳。在至少发出一个attributeRead
或dataChangeOccurred
信号之前,返回一个空的 datetime。- valueAttribute()#
- 返回类型::
对象
返回节点的Value属性的值。
返回的值仅在Value属性被成功读取或写入或者监控中数据更改更新了属性缓存后才有效。这可以通过
attributeRead()
或attributeWritten()
信号的状态码为Good
或Value属性有一个dataChangeOccurred()
信号来完成。如果属性缓存中没有值,则返回无效的QVariant。
- valueAttributeError()#
- 返回类型::
返回节点Value属性的错误代码。如果状态码为
Good
,则表示valueAttribute()
的有效返回值。如果属性缓存中没有条目,则返回BadNoEntryExists
。- valueAttributeUpdated(value)#
- 参数::
value – 对象
在服务器从数据更改通知、读取或写入操作更新属性缓存中的值属性后发出此信号。《code class="docutils literal notranslate">value 包含值属性的新的值。
- writeAttribute(attribute, value[, type=QOpcUa.Types.Undefined])#
- 参数::
attribute –
NodeAttribute
value – 对象
类型 –
Types
- 返回类型::
bool
使用来自
type
的类型信息将value
写入attribute
所指定的属性。如果异步调用已成功调度,则返回true
。如果省略了
type
参数,后端将尝试找到正确的类型。以下为默认假设类型:Qt 元类型
OPC UA 类型
布尔
布尔类型
无符号字符
字节
字符
有符号字节
无符号短整型
无符号整型 16
短整型
整型 16
整型
整型 32
无符号整型
无符号整型 32
无符号长整型
无符号长整型 64
长整型
长整型 64
双精度浮点型
双精度浮点型
单精度浮点型
单精度浮点型
QString
字符串
QDateTime
日期时间
QByteArray
字节字符串
QUuid
UUID
- writeAttributeRange(attribute, value, indexRange[, type=QOpcUa.Types.Undefined])#
- 参数::
attribute –
NodeAttribute
value – 对象
indexRange – 字符串
类型 –
Types
- 返回类型::
bool
使用来自
type
的类型信息将value
写入attribute
所指定的属性。有关indexRange
的说明,请参阅readAttributeRange()
。如果异步调用已成功分发,则返回
true
。- writeAttributes(toWrite[, valueAttributeType=QOpcUa.Types.Undefined])#
- 参数::
toWrite – 键的类型为 .QOpcUa.NodeAttribute,值为 QVariant 的字典。
valueAttributeType –
Types
- 返回类型::
bool
执行
toWrite
中指定的属性和值的写操作。如果异步调用已成功分发,则返回
true
。可以使用
valueAttributeType
参数提供值属性的类型信息。其他所有属性都有已知的类型。另请参阅
使用来自
type
的类型信息将value
写入节点的 Value 属性。如果异步调用已成功分发,则返回
true
。另请参阅