QOpcUaNode Class
QOpcUaNode を使用すると、OPC UA ノードとのやり取りが可能になります。詳細...
| ヘッダー: | #include <QOpcUaNode> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpcUa) target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
| qmake: | QT += opcua |
| 継承元: | QObject |
パブリック型
パブリック関数
| QVariant | attribute(QOpcUa::NodeAttribute attribute) const |
| QOpcUa::UaStatusCode | attributeError(QOpcUa::NodeAttribute attribute) const |
| bool | browse(const QOpcUaBrowseRequest &request) |
| bool | browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined) |
| bool | callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>()) |
| QOpcUaClient * | client() const |
| bool | disableMonitoring(QOpcUa::NodeAttributes attr) |
| bool | enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings) |
| bool | modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter) |
| bool | modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter) |
| bool | modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value) |
| QOpcUaMonitoringParameters | monitoringStatus(QOpcUa::NodeAttribute attr) |
| QString | nodeId() const |
| bool | readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange) |
| bool | readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes()) |
(since 6.7) QOpcUaHistoryReadResponse * | readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0) |
(since 6.3) QOpcUaHistoryReadResponse * | readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds) |
(since 6.7) QOpcUaHistoryReadResponse * | readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn) |
| bool | readValueAttribute() |
| bool | resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path) |
| QDateTime | serverTimestamp(QOpcUa::NodeAttribute attribute) const |
| QDateTime | sourceTimestamp(QOpcUa::NodeAttribute attribute) const |
| QVariant | valueAttribute() const |
| QOpcUa::UaStatusCode | valueAttributeError() const |
| bool | writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined) |
| bool | writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined) |
| bool | writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined) |
| bool | writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined) |
シグナル
| void | attributeRead(QOpcUa::NodeAttributes attributes) |
| void | attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value) |
| void | attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode) |
| void | browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode) |
| void | dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value) |
| void | disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) |
| void | enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) |
| void | eventOccurred(QVariantList eventFields) |
| void | methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode) |
| void | monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode) |
| void | resolveBrowsePathFinished(QList<QOpcUaBrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode) |
(since 6.7) void | valueAttributeUpdated(const QVariant &value) |
静的パブリックメンバー
| QOpcUa::NodeAttributes | allBaseAttributes() |
| QOpcUa::NodeAttributes | mandatoryBaseAttributes() |
詳細な説明
ノードは、OPC UA アドレス空間の基本的な構成要素です。ノードには、ブラウズ名、値、関連プロパティなどの属性があり、アドレス空間内の他のノードへの参照を持つことができます。 ノードはネームスペース内に編成され、ID を持っています。この 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 サービスによって返される低レベルのステータスコードです。このステータスコードは、QOpcUa::errorCategory() を使用してQOpcUa::ErrorCategory に変換することで簡略化できます。
サブスクリプションおよび監視対象項目
サブスクリプションは、OPC UAにおける概念の一つであり、ノードへの継続的なポーリングを行う代わりに、データの変化やイベント発生時の通知を受け取ることができるものです。 監視対象項目は、ノードの属性の変更をどのように監視するかを定義します。これらはサブスクリプションに追加され、生成された通知はサブスクリプションを介してユーザーに転送されます。更新間隔をはじめ、監視対象項目やサブスクリプションのその他の多くのオプションは、ユーザーが設定可能です。
QOpcUaNode は、サブスクリプションや監視対象項目とやり取りするための抽象化機能を提供します。enableMonitoring() は、1つまたは複数の属性に対するデータ変更通知を有効にします。dataChangeOccurred シグナルには新しい値が含まれ、ローカルキャッシュが更新されます。disableMonitoring() は、データ変更通知を無効にします。monitoringStatusChanged シグナルは、手動での有効化・無効化後やサーバー上のステータス変更後など、監視ステータスの変更について通知します。
イベント監視では、セットアップとライフサイクル管理に同じAPIが使用されます。EventNotifier 属性は、EventFilter を使用して監視する必要があります。この では、必要なイベントフィールドを選択し、ユーザー定義の基準に基づいて報告されるイベントをフィルタリングします。イベントは、eventOccurred()シグナルを通じてQVariantList として報告され、この には選択されたイベントフィールドの値が含まれます。
サブスクリプションおよび監視対象項目の設定は、実行時にmodifyMonitoring() を使用して変更できます。
アドレス空間の参照
OPC UAアドレス空間は、参照によって接続されたノードで構成されています。browseChildren は、これらの参照を順方向にたどって、QOpcUaNode のインスタンスの背後にあるノードに接続されているすべてのノードの属性を、browseFinished 信号として返します。browse()はbrowseChildren()と似ていますが、ブラウズ呼び出しを設定するためのオプションがさらに多く用意されています。
メソッド呼び出し
OPC UA では、ユーザーが呼び出すことができるサーバー上のメソッドが規定されています。QOpcUaNode は、パラメータを受け取り、呼び出しの結果をmethodCallFinished 信号で返すcallMethod を通じて、これをサポートしています。
ブラウズパスの解決
タイプ記述に基づくプログラミングをサポートするため、OPC UAでは、特定のノードを起点とするブラウズ名のパスを解決し、ターゲットノードのノードIDを取得する機能をサポートしています。resolveBrowsePath() メソッドは、呼び出し元となったノードを起点とするパスをたどって、結果をresolveBrowsePathFinished() シグナルで返します。
例
クライアントをサーバーに接続し、QOpcUaNode オブジェクトを取得する方法については、「QOpcUaClient 」を参照してください。
ノードの作成に成功した後、ルートノードのBrowseNameをサーバーから読み取ります:
QOpcUaNode*rootNode;// 事前に作成済み。詳細は QOpcUaClient のドキュメントを参照。
// attributeRead シグナルに接続します。ラムダ式の代わりに、QObject の互換性のあるスロットを使用することもできます。
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);// ノードの BrowseName 属性に対する読み取り操作を開始します。メンバ型のドキュメント
QOpcUaNode::AttributeMap
この型は、writeAttributes() が一度に複数の属性を書き込む際に使用されます。書き込む属性には、QVariant の値を割り当てる必要があります。
メンバ関数のドキュメント
[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::allBaseAttributes()
OPC UA ベースノードクラスのすべての属性を含みます。
QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const
attribute で指定された属性の値を返します。
この値は、attributeRead シグナルが発信された後にのみ有効です。その属性のキャッシュされた値がない場合は、空のQVariant が返されます。
QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const
attribute で指定された属性のエラーコードを返します。
このエラーコードは、attributeRead またはattributeWritten シグナルが発信された後にのみ有効です。
属性キャッシュにエントリがない場合、BadNoEntryExists が返されます。
QOpcUa::errorCategoryも参照してください 。
[signal] void QOpcUaNode::attributeRead(QOpcUa::NodeAttributes attributes)
このシグナルは、readAttributes() またはreadAttributeRange() 操作が完了した後に発信されます。受信側は、attributes に含まれる属性についてステータスコードを確認する必要があります。
[signal] void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
このシグナルは、サーバーからのデータ変更通知、読み取り操作、または書き込み操作によって属性キャッシュ内の値が更新された後に発火します。value には、ノード属性attr の新しい値が含まれています。
attribute()、attributeError()、serverTimestamp()、sourceTimestamp()、およびvalueAttributeUpdated()も参照してください 。
[signal] void QOpcUaNode::attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode)
このシグナルは、writeAttribute()、writeAttributes()、またはwriteAttributeRange() の操作が完了した後に発せられます。
このシグナルが発信される前に、書き込みが成功した場合は属性キャッシュが更新されます。writeAttributes() の場合、書き込み呼び出しに含まれる各属性に対してシグナルが発信されます。statusCode には、attribute に対する書き込み操作の成功情報が含まれます。
bool QOpcUaNode::browse(const QOpcUaBrowseRequest &request)
このノードからブラウズ呼び出しを開始します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
request で指定された条件に一致するすべての参照は、browseFinished() シグナルで返されます。
たとえば、逆ブラウズ呼び出しを使用すると、プロパティノードの親ノードを検索することができます。
QOpcUaBrowseRequest request;
request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse);
request.setReferenceTypeId(QOpcUa::ReferenceTypeId::HasProperty);
propertyNode->browse(request);bool QOpcUaNode::browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined)
このメソッドが呼び出されたノードを起点として、順方向のブラウズ呼び出しを実行します。このブラウズ操作では、そのノードに接続されている子ノードに関する情報を収集し、その結果をbrowseFinished()シグナルで返します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
特定の参照型によってノードに接続されている子ノードのみを要求するには、referenceType をその参照型に設定する必要があります。たとえば、referenceType でHasProperty を渡すことで、ノードのすべてのプロパティを取得するためにこれを使用できます。また、nodeClassMask で特定のノードクラスを設定することで、結果に特定のノードクラスを持つノードのみが含まれるようにフィルタリングできます。
[signal] void QOpcUaNode::browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
このシグナルは、browseChildren() またはbrowse() 操作が完了した後に発火します。
children browseChildren() の条件に一致したすべてのノードに関する情報が含まれます。 には、ブラウズ操作のサービス結果が含まれます。 が でない場合、渡された ベクトルは空になります。statusCode statusCode Good children
QOpcUaReferenceDescriptionも参照してください 。
bool QOpcUaNode::callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>())
args を介して指定されたパラメータを用いて、OPC UAメソッドmethodNodeId を呼び出します。結果はmethodCallFinished シグナルで返されます。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
QOpcUaClient *QOpcUaNode::client() const
このノードを作成したクライアントへのポインタを返します。
[signal] void QOpcUaNode::dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)
このシグナルは、データ変更通知を受信した後に発信されます。value には、ノード属性attr の新しい値が含まれています。
attribute()、serverTimestamp()、およびsourceTimestamp()も参照してください 。
bool QOpcUaNode::disableMonitoring(QOpcUa::NodeAttributes attr)
このメソッドは、attr で指定された属性の監視を無効にします。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
呼び出しが完了すると、disableMonitoringFinished シグナルが発信され、monitoringStatus は、attr に対してステータスコード BadMonitoredItemIdIinvalid を持つデフォルト構築値を返します。
[signal] void QOpcUaNode::disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
このシグナルは、disableMonitoring() への非同期呼び出しが完了した後に発火します。statusCode には、その操作によって生成されたステータスコードが格納されています。このシグナルが発火した後、monitoringStatus は、attr に対して、ステータスコード BadMonitoredItemIdIinvalid を持つデフォルト構築値を返します。
bool QOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
このメソッドは、attr で指定された各属性に対して、監視対象項目を作成します。監視対象項目の作成およびサブスクリプションには、settings の設定が使用されます。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
呼び出しが完了すると、enableMonitoringFinished シグナルが発行されます。不正なステータスコードが生成されるエラーケースは複数あります。settings で指定されたサブスクリプション ID を持つサブスクリプションが存在しない場合、サーバー上にノードが存在しない場合、ノードに要求された属性がない場合、またはサーバーの監視項目の最大数に達している場合などです。
イベント監視を有効にする場合にも、同じメソッドが使用されます。イベントとは、OPC UA アドレス空間内の特別なオブジェクトであり、発生したイベントに関する情報を含んでいます。サーバー上でイベントがトリガーされると、イベント監視項目は、イベントオブジェクトおよびその子ノードのノード属性から選択された値を収集します。 イベントソースを持つすべてのノードは、イベントの監視対象となります。ノードのイベントを監視するには、EventNotifier という属性を、EventFilterを使用して監視する必要があります。このEventFilterには、ユーザーが必要とするイベントフィールドと、必要に応じて条件に基づいてイベントをフィルタリングするためのwhere節を含めることができます(詳細については、QOpcUaMonitoringParameters::EventFilter を参照してください)。
[signal] void QOpcUaNode::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
このシグナルは、enableMonitoring() への非同期呼び出しが完了した後に発火します。このシグナルが発火した後、monitoringStatus() はattr に対して有効な情報を返します。statusCode には、その操作のステータスコードが含まれます。
[signal] void QOpcUaNode::eventOccurred(QVariantList eventFields)
このシグナルは、新しいイベントを受信した後に発信されます。
eventFields には、イベントフィルタのselect 句で指定された順序で、イベントフィールドの値が含まれます。
[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()
OPC UA ベースノードクラスのすべての必須属性を含んでいます。
[signal] void QOpcUaNode::methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
このシグナルは、サーバー上で `methodNodeId ` へのメソッド呼び出しが完了した後に発火します。`statusCode ` にはメソッド呼び出しのステータスコードが、`result ` にはメソッドの出力引数が格納されます。メソッドに出力引数が存在しない場合、または `statusCode ` が `Good` ではない場合、`result ` は空になります。result のバリアントは、出力引数が1つの場合は単一の値となり、呼び出された関数が複数の出力引数を返した場合はバリアントのリストを含みます。
if (result.canConvert<QVariantList>()) {
// handle list type
} else {
// handle value type
}bool QOpcUaNode::modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)
既存のデータ変更監視を設定し、filter をデータ変更フィルターとして使用するように変更します。
フィルタの変更リクエストがバックエンドに正常に送信された場合、true を返します。
monitoringStatusChanged 操作が完了した後、attr に対するイベントが発行されます。
bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
既存のイベント監視設定を変更し、eventFilter をイベントフィルタとして使用するようにします。
フィルタの変更リクエストがバックエンドに正常に送信された場合、true を返します。
monitoringStatusChanged 操作が完了した後、EventNotifier に対するイベントが発行されます。
bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)
このメソッドは、監視対象項目またはサブスクリプションの設定を変更します。attr に関連付けられた監視対象項目またはサブスクリプションのパラメータitem を、value に設定しようとします。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
呼び出しが完了すると、monitoringStatusChanged シグナルが発信されます。このシグナルには、変更されたパラメータとステータスコードが含まれます。要求された属性に関連付けられた監視対象項目が存在しない場合、要求されたパラメータの変更が実装されていない場合、またはサーバーが要求された値を拒否した場合、不正なステータスコードが生成されます。
QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute attr)
属性attr に関連付けられた監視パラメータを返します。これは、enableMonitoring()が正常に実行されたか、あるいはパラメータが更新されたかを確認するために使用できます。返される値は、attr に対してenableMonitoringFinished またはmonitoringStatusChanged が発行された後にのみ有効です。シグナルが発行される前にステータスを照会した場合、QOpcUaMonitoringParameters::statusCode()はBadNoEntryExists を返します。
[signal] void QOpcUaNode::monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)
このシグナルは、modifyMonitoring() への非同期呼び出しが完了した後に発火します。操作が要求されたノード属性は、attr に返されます。items には、変更されたパラメータが含まれています。statusCode には、サーバー上での変更操作の結果が含まれています。
QString QOpcUaNode::nodeId() const
OPC UA ノードの ID を返します。
bool QOpcUaNode::readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange)
ノード属性attribute に対する非同期読み取り操作を開始します。indexRange は、配列の一部を選択するために使用できる文字列です。これはOPC UA 1.05パート4の7.27で定義されています。 配列の最初の要素は 0 です。「1」は 2 番目の要素を、「0:9」は最初の 10 要素を、「0,1」は 2 次元配列の 1 行目の 2 番目の要素を返します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
属性値には、attributeRead シグナルが発行された後にのみ有効な情報が含まれます。
bool QOpcUaNode::readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes())
attributes 内のノード属性に対して、非同期読み取り操作を開始します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
属性値には、attributeRead シグナルが発信された後にのみ有効な情報が含まれます。
[since 6.7] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)
パラメータ `startTime`、`endTime`、`filter `、および `numValues` を使用して、このノードに対するイベント履歴の読み取りリクエストを開始します。filter は、サーバーがどのイベントおよびそれらのフィールドのどのセットを返すかを決定するために使用されます。
非同期リクエストが正常にディスパッチされた場合、リクエストの状態を含むQOpcUaHistoryReadResponse を返します。結果は、QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) シグナルで返されます。
以下の例では、過去2日間の履歴イベントを取得しています。一度に最大10件のイベントが返されます。フィルタおよび指定された時間範囲に一致するイベントがさらに存在する場合、hasMoreData() はtrueとなり、readMoreData()を介してさらにイベントを取得することができます。
QScopedPointer<QOpcUaNode>node(opcuaClient->node("ns=2;s=EventHistorian"));
QVERIFY(node!=nullptr);
QOpcUaMonitoringParameters::EventFilter filter;
filter<<QOpcUaSimpleAttributeOperand("Message");
filter<<QOpcUaSimpleAttributeOperand("Time");
const autoresponse= node->readHistoryEvents(QDateTime::currentDateTime().addDays(-2),QDateTime::currentDateTime(),filter, 10);
QObject::connect(response, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this,
[response](constQList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) {
if(serviceResult!= QOpcUa::UaStatusCode::Good) {
qDebug() << "Service call failed with" << serviceResult;
return;
}
// これまでに取得した内容を出力する
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();
});この関数は Qt 6.7 で導入されました。
[since 6.3] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)
このノードに対して履歴読み取りリクエストを開始します。これは、OPC UA 1.05 第4部 5.10.3で定義されている生の履歴データを読み取るためのOPC UA ReadHistoryサービスのQt OPC UA 表現です。startTime 、endTime 、numValues 、およびreturnBounds の各パラメータに基づいて履歴を読み取ります。
非同期リクエストのディスパッチに成功した場合、リクエストの状態を含むQOpcUaHistoryReadResponse を返します。結果は、QOpcUaHistoryReadResponse::readHistoryDataFinished (const QList<QOpcUaHistoryData> &results, QOpcUa::UaStatusCode serviceResult)シグナルで返されます。
以下の例では、ノードの過去2日間の履歴データを要求し、出力しています。結果はノードごとに10件に制限されています。
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();
}
}
});
}この関数は Qt 6.3 で導入されました。
[since 6.7] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn)
このノードに対して読み取り履歴のリクエストを開始します。追加のtimestampsToReturn パラメータは、各値に対してどのタイムスタンプが返されるかを指定します。
この関数は Qt 6.7 で導入されました。
bool QOpcUaNode::readValueAttribute()
ノードの Value 属性に対して非同期の読み取り操作を開始します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
readAttributes()も参照してください 。
bool QOpcUaNode::resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)
OPC UA 1.05 第4部 5.8.4で規定されている「TranslateBrowsePathsToNodeIds」サービスを使用して、ブラウズパス「path 」を、このノードを起点とする1つ以上のノードIDに変換します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
TranslateBrowsePathsToNodeIds は主に、OPC UA アドレス空間内の具体的なノードのセットではなく、型定義に基づいてプログラミングを行うために使用されます。たとえば、機械モデルの型定義は、ブラウズ名が「Machine」の開始ノードで構成され、そのノードにはブラウズ名が「Fan」のコンポーネントが含まれている場合があります。 Fanには、ブラウズ名「RPM」を持つコンポーネントがあり、これはファンの現在のRPM値を保持するVariableノードです。このタイプのマシンは複数存在し、それぞれのマシンはマシンタイプのオブジェクトとしてOPC UAアドレス空間にマッピングされます。 これらのマシンオブジェクトそれぞれについて、マシンノードから「RPM」ノードへのパスは同じです。クライアントが現在のRPM値を読み取りたい場合は、マシンノードを開始ノードとして、マシンから「RPM」ノードへのブラウズパスを引数に指定して、resolveBrowsePath() を呼び出す必要があります:
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;
}
// スロットを接続し、メソッドを呼び出す
}else{
qWarning() << "Browse path could not be fully resolved, the target node is on another server";
return;
}[signal] void QOpcUaNode::resolveBrowsePathFinished(QList<QOpcUaBrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode)
このシグナルは、resolveBrowsePath() の呼び出しが終了した後に発せられます。
QOpcUaBrowsePathTarget targets には一致した結果が含まれ、 は操作のステータスコードです。 が でない場合、 は空になります。参照パス は、リクエストからの参照パスです。これは、結果をリクエストと関連付けるために使用できます。statusCode statusCode Good targets path
QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
attribute の最後の読み取りまたはデータ変更時のサーバータイムスタンプを返します。attributeRead またはdataChangeOccurred のシグナルが少なくとも1つ発行されるまでは、null の datetime が返されます。
QDateTime QOpcUaNode::sourceTimestamp(QOpcUa::NodeAttribute attribute) const
attribute の最後の読み取りまたはデータ変更時のソースタイムスタンプを返します。attributeRead またはdataChangeOccurred シグナルが少なくとも1つ発行されるまでは、nullのdatetimeが返されます。
QVariant QOpcUaNode::valueAttribute() const
ノードの「Value」属性の値を返します。
返される値は、Value属性の読み取りまたは書き込みが正常に完了した後、あるいは監視によるデータ変更によって属性キャッシュが更新された後にのみ有効となります。これは、Value属性に対して、ステータスコードGood を持つattributeRead()またはattributeWritten()シグナル、あるいはdataChangeOccurred()シグナルによって示されます。
属性キャッシュに値がない場合、無効なQVariant が返されます。
readValueAttribute()、writeValueAttribute()、およびvalueAttributeError()も参照してください 。
QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const
ノードの Value 属性のエラーコードを返します。ステータスコード `Good ` は、valueAttribute()` の有効な戻り値を示します。属性キャッシュにエントリがない場合は、BadNoEntryExists が返されます。
[signal, since 6.7] void QOpcUaNode::valueAttributeUpdated(const QVariant &value)
このシグナルは、サーバーからのデータ変更通知、読み取り操作、または書き込み操作によって、属性キャッシュ内の「value」属性の値が更新された後に発火します。value には、「value」属性の新しい値が含まれています。
この関数は Qt 6.7 で導入されました。
attribute()、attributeError()、serverTimestamp()、sourceTimestamp()、およびattributeUpdated()も参照してください 。
bool QOpcUaNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
type の型情報を使用して、attribute で指定された属性にvalue を書き込みます。非同期呼び出しが正常にディスパッチされた場合、true を返します。
type パラメータが省略された場合、バックエンドは正しい型を検索しようとします。以下のデフォルト型が想定されます:
| Qt MetaType | OPC UA 型 |
|---|---|
| Bool | Boolean |
| UChar | バイト |
| Char | SByte |
| UShort | UInt16 |
| Short | Int16 |
| Int | Int32 |
| UInt | UInt32 |
| ULongLong | UInt64 |
| LongLong | Int64 |
| Double | Double |
| Float | Float |
| QString | 文字列 |
| QDateTime | DateTime |
| QByteArray | ByteString |
| QUuid | GUID |
bool QOpcUaNode::writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)
type の型情報を使用して、attribute で指定された属性にvalue を書き込みます。indexRange については、readAttributeRange() を参照してください。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
bool QOpcUaNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined)
toWrite で指定された属性および値に対して書き込み操作を実行します。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
valueAttributeType パラメータは、value 属性の型情報を指定するために使用できます。その他のすべての属性の型は既知です。
writeAttribute()も参照してください 。
bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
type からの型情報を使用して、ノードの Value 属性にvalue を書き込みます。
非同期呼び出しが正常にディスパッチされた場合、true を返します。
writeAttribute()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.