QOpcUaNode Class

QOpcUaNodeはOPC UAノードとのインタラクションを可能にします。詳細...

Header: #include <QOpcUaNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpcUa)
target_link_libraries(mytarget PRIVATE Qt6::OpcUa)
qmake: QT += opcua
Inherits: 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 によって識別されます。この識別子は通常、文字列として指定されます:名前空間 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 () は、サブスクリプションと監視されたアイテムを操作するための抽象化を提供します。() は、1 つまたは複数の属性のデータ変更通知を有効にします。 シグナルには新しい値が含まれ、ローカル・キャッシュが更新されます。() は、データ変更通知を無効にします。 シグナルは、監視ステータスの変更を通知します。例えば、手動で有効化および無効化した後や、サーバーのステータスが変更された後などです。enableMonitoring dataChangeOccurred disableMonitoring monitoringStatusChanged

イベント・モニタリングは、セットアップとライフサイクル管理に同じAPIを使用します。EventNotifier 属性は、必要なイベント・フィールドを選択し、ユーザー定義の基準によって報告されるイベントをフィルタリングするEventFilter を使用して監視されなければなりません。イベントは、選択されたイベント・フィールドの値を含むQVariantList としてeventOccurred() シグナルで報告される。

サブスクリプションとモニター項目の設定は、modifyMonitoring() を使用して、実行時に変更することができます。

アドレス空間のブラウズ

OPC UA アドレス空間は、参照によって接続されたノードで構成されます。browseChildren は、これらの参照を順方向にたどり、browseFinished シグナルでQOpcUaNode のインスタンスの後ろにあるノードに接続されたすべてのノードから属性を返します。browse() はbrowseChildren() と似ていますが、ブラウズ呼び出しを設定するためのオプションがより多く用意されています。

メソッド呼び出し

OPC UAは、ユーザーが呼び出すことができるサーバー上のメソッドを指定します。QOpcUaNode は、パラメータを受け取り、methodCallFinished シグナルで呼び出しの結果を返すcallMethod を介してこれをサポートします。

ブラウズパスの解決

型記述に対するプログラミングをサポートするために、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.

メンバ型 ドキュメント

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 をその参照タイプに設定する必要があります。例えば、referenceTypeHasProperty を渡すことで、ノードのすべてのプロパティを取得することができます。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のアドレス空間にある特別なオブジェクトで、発生したイベントに関する情報を含んでいます。サーバー上でイベントがトリガーされると、イベント監視項目は、イベントオブジェクトとその子ノードのノード属性の選択された値を収集します。イベント・ソースを持つすべてのノードは、イベントを監視できます。ノードのイベントを監視するには、EventFilter を使用して、EventNotifier 属性を監視する必要があります。 には、ユーザが必要とするイベント・フィールドが含まれ、オプションとして、条件によってイベントをフィルタリングするために使用される 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 はメソッドの出力引数を含む。result はメソッドが出力引数を持たない場合は空であるか、statusCodeGood ではない。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 for は操作終了後に発行されます。EventNotifier

bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)

このメソッドは、監視項目またはサブスクリプションの設定を変更します。attr に関連付けられたモニターアイテムまたはサブスクリプションのパラメー タitemvalue に設定しようとする。

非同期呼び出しが正常にディスパッチされた場合、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 part 4の7.27で定義されています。配列の最初の要素は0、"1 "は2番目の要素、"0:9 "は最初の10個の要素、"0,1 "は2次元配列の最初の行の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)

パラメータstartTimeendTimefilternumValues を使用して、このノードのイベント履歴読み取り要求を開始します。filter は、どのイベントとそのフィールドのどのセットを返すか を決定するためにサーバーによって使用される。

非同期リクエストが正常にディスパッチされた場合、リクエストの状態を含むQOpcUaHistoryReadResponse を返す。結果はQOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) シグナルで返される。

以下の例では、過去2日間の履歴イベントを検索しています。一度に最大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();
                 });

この関数は Qt 6.7 で導入されました。

[since 6.3] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)

このノードの読み込み履歴要求を開始します。これはOPC UA 1.05 part 4の5.10.3で定義されている、生の履歴データを読み込むためのOPC UA ReadHistoryサービスのQt OPC UA表現です。このサービスは、startTimeendTimenumValuesreturnBounds のパレメンターに基づいて履歴を読み込みます。

非同期要求が正常にディスパッチされた場合、要求の状態を含む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 part 4の5.8.4で規定されるTranslateBrowsePathsToNodeIdsサービスを使用して、ブラウズパスpath を、このノードを起点とする1つ以上のノードIDに解決する。

非同期呼び出しが正常にディスパッチされた場合は、true を返します。

TranslateBrowsePathsToNodeIds は主に、OPC UA アドレス空間内のノードの具体的な集合ではなく、型定義に対してプログラムするために使用されます。例えば、マシンモデルの型定義は、ブラウズ名 "Machine "の開始ノードで構成され、ブラウズ名 "Fan "のコンポーネントを持ちます。Fanにはブラウズ名「RPM」のコンポーネントがあり、これはファンの現在のRPM値を保持するVariableノードです。このタイプのマシンは複数あり、それぞれのマシンはマシンタイプのオブジェクトとして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 が含まれ、この 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;
}

[signal] void QOpcUaNode::resolveBrowsePathFinished(QList<QOpcUaBrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode)

このシグナルは、resolveBrowsePath() 呼び出しの終了後に出力される。

QOpcUaBrowsePathTarget targets にはマッチが含まれ、statusCode は操作のステータス・コードです。statusCodeGood でない場合、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 には、値属性の新しい値が含まれます。

この関数は 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 MetaTypeOPC UA タイプ
ブールブール
UCharバイト
Charバイト
UShortUInt16
ショートInt16
IntInt32
UIntUInt32
ULongLongUInt64
LongLongInt64
DoubleDouble
FloatFloat
QString文字列
QDateTime日付
QByteArrayバイト文字列
QUuidGuid

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()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。