QOpcUaClient Class

QOpcUaClientはOPC UAサーバーとのやり取りを可能にします。詳細...

Header: #include <QOpcUaClient>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpcUa)
target_link_libraries(mytarget PRIVATE Qt6::OpcUa)
qmake: QT += opcua
Inherits: QObject

パブリックタイプ

enum ClientError { NoError, InvalidUrl, AccessDenied, ConnectionError, UnknownError, UnsupportedAuthenticationInformation }
enum ClientState { Disconnected, Connecting, Connected, Closing }

プロパティ

  • error : const ClientError
  • state : const ClientState

パブリック関数

virtual ~QOpcUaClient()
bool addNode(const QOpcUaAddNodeItem &nodeToAdd)
bool addReference(const QOpcUaAddReferenceItem &referenceToAdd)
(since QtOpcUa 5.13) QOpcUaApplicationIdentity applicationIdentity() const
const QOpcUaAuthenticationInformation &authenticationInformation() const
QString backend() const
(since QtOpcUa 5.13) void connectToEndpoint(const QOpcUaEndpointDescription &endpoint)
(since 6.6) QOpcUaConnectionSettings connectionSettings() const
bool deleteNode(const QString &nodeId, bool deleteTargetReferences = true)
bool deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
void disconnectFromEndpoint()
QOpcUaEndpointDescription endpoint() const
QOpcUaClient::ClientError error() const
bool findServers(const QUrl &url, const QStringList &localeIds = QStringList(), const QStringList &serverUris = QStringList())
bool isNamespaceAutoupdateEnabled() const
QStringList namespaceArray() const
int namespaceAutoupdateInterval() const
QOpcUaNode *node(const QOpcUaExpandedNodeId &expandedNodeId)
QOpcUaNode *node(const QString &nodeId)
(since QtOpcUa 5.13) QOpcUaPkiConfiguration pkiConfiguration() const
QOpcUaQualifiedName qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const
(since 6.3) QOpcUaHistoryReadResponse *readHistoryData(const QOpcUaHistoryReadRawRequest &request)
(since 6.7) QOpcUaHistoryReadResponse *readHistoryEvents(const QOpcUaHistoryReadEventRequest &request)
bool readNodeAttributes(const QList<QOpcUaReadItem> &nodesToRead)
(since 6.7) bool registerNodes(const QStringList &nodesToRegister)
bool requestEndpoints(const QUrl &url)
QString resolveExpandedNodeId(const QOpcUaExpandedNodeId &expandedNodeId, bool *ok = nullptr) const
(since QtOpcUa 5.13) void setApplicationIdentity(const QOpcUaApplicationIdentity &identity)
void setAuthenticationInformation(const QOpcUaAuthenticationInformation &authenticationInformation)
(since 6.6) void setConnectionSettings(const QOpcUaConnectionSettings &connectionSettings)
void setNamespaceAutoupdate(bool isEnabled)
void setNamespaceAutoupdateInterval(int interval)
(since QtOpcUa 5.13) void setPkiConfiguration(const QOpcUaPkiConfiguration &config)
QOpcUaClient::ClientState state() const
(since QtOpcUa 5.14) QStringList supportedSecurityPolicies() const
(since QtOpcUa 5.14) QList<QOpcUaUserTokenPolicy::TokenType> supportedUserTokenTypes() const
(since 6.7) bool unregisterNodes(const QStringList &nodesToUnregister)
bool updateNamespaceArray()
bool writeNodeAttributes(const QList<QOpcUaWriteItem> &nodesToWrite)

シグナル

void addNodeFinished(QOpcUaExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode)
void addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
(since QtOpcUa 5.13) void connectError(QOpcUaErrorState *errorState)
void connected()
void deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode)
void deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
void disconnected()
void endpointsRequestFinished(QList<QOpcUaEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
void errorChanged(QOpcUaClient::ClientError error)
void findServersFinished(QList<QOpcUaApplicationDescription> servers, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
void namespaceArrayChanged(QStringList namespaces)
void namespaceArrayUpdated(QStringList namespaces)
(since QtOpcUa 5.13) void passwordForPrivateKeyRequired(QString keyFilePath, QString *password, bool previousTryWasInvalid)
void readNodeAttributesFinished(QList<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult)
(since 6.7) void registerNodesFinished(const QStringList &nodesToRegister, const QStringList &registeredNodeIds, QOpcUa::UaStatusCode statusCode)
void stateChanged(QOpcUaClient::ClientState state)
(since 6.7) void unregisterNodesFinished(const QStringList &nodesToUnregister, QOpcUa::UaStatusCode statusCode)
void writeNodeAttributesFinished(QList<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult)

詳細説明

QOpcUaClient

QOpcUaClient は、OPC UA対応のデバイスやアプリケーションと通信するための基本的なクライアント機能を実装しています。これには、既知のサーバーに対するディスカバリー・サーバーへの問い合わせ、サーバーからのエンドポイント・リストの要求、接続と切断が含まれます。

サーバーへの接続に成功した後、QOpcUaClientは、OPC UAサーバー上のノードとの更なるやり取りを可能にするQOpcUaNode オブジェクトを取得することができます。複数のノードに関する操作のために、QOpcUaClientは、サーバーへの単一のリクエストで複数のノードの複数の属性を読み取ることをサポートするAPIを提供します。

QOpcUaClientは、接続成功後に作成されるサーバーのネームスペース配列のローカルコピーも保持します。この情報は、接続が継続している間、照会または更新することができます。名前空間配列のコピーは、拡張ノード ID の解決と、名前空間 URI からの修飾名の作成にも使用されます。

ノードのアドレス指定

ノードとノード ID については、QOpcUaNode を参照してください。

使用法

QOpcUaProvider を使用してQOpcUaClient を作成し、requestEndpoints を使用してサーバーにエンドポイントのリストを要求し、connectToEndpoint() を呼び出して利用可能なエンドポイントの 1 つに接続します。接続が確立されると、ルート・ノードの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

メンバ型ドキュメント

enum QOpcUaClient::ClientError

この enum 型は、クライアントの現在のエラー状態を指定します。

定数説明
QOpcUaClient::NoError0エラーは発生していません。
QOpcUaClient::InvalidUrl1接続先 URL の指定に誤りがあるか、この URL への接続に失敗しました。
QOpcUaClient::AccessDenied2ユーザ名/パスワードを使用したサーバへの接続に失敗しました。
QOpcUaClient::ConnectionError3接続でエラーが発生しました。
QOpcUaClient::UnknownError4不明なエラーが発生しました。
QOpcUaClient::UnsupportedAuthenticationInformation5指定された認証情報の型またはデータはサポートされていません。

enum QOpcUaClient::ClientState

この enum 型は、クライアントの接続状態を指定します。

定数説明
QOpcUaClient::Disconnected0クライアントはサーバに接続していません。
QOpcUaClient::Connecting1クライアントはサーバに接続中です。
QOpcUaClient::Connected2クライアントはサーバに接続中です。
QOpcUaClient::Closing3クライアントはサーバーに接続しており、サーバーからの切断を要求しています。

プロパティの説明

[read-only] error : const ClientError

クライアントの現在のエラー状態を指定します。

アクセス関数

QOpcUaClient::ClientError error() const

通知シグナル

void errorChanged(QOpcUaClient::ClientError error)

[read-only] state : const ClientState

クライアントの現在の接続状態を指定します。

アクセス関数

QOpcUaClient::ClientState state() const

ノーティファイアシグナル:

void stateChanged(QOpcUaClient::ClientState state)

メンバー関数ドキュメント

[virtual noexcept] QOpcUaClient::~QOpcUaClient()

QOpcUaClient インスタンスを破棄します。

bool QOpcUaClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)

nodeToAdd で指定されたノードをサーバーに追加します。

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

操作の成功はaddNodeFinished() シグナルで返されます。

以下のコード例は、サーバ上に新しい Variable ノードを追加します:

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);

deleteNode()、addNodeFinished()、QOpcUaAddNodeItemも参照して ください。

[signal] void QOpcUaClient::addNodeFinished(QOpcUaExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode)

このシグナルは、addNode()操作の終了後に発行される。requestedNodeId は、addNode()呼び出しから要求されたノードIDであり、assignedNodeId は、サーバーが新しいノードに割り当てたノードIDである。statusCode は、操作の結果を含む。結果がBad の場合、assignedNodeId は空であり、サーバーのアドレス空間にノードは追加されていない。

bool QOpcUaClient::addReference(const QOpcUaAddReferenceItem &referenceToAdd)

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);

deleteReference()、addReferenceFinished()、QOpcUaAddReferenceItemも参照してください

[signal] void QOpcUaClient::addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)

このシグナルは、addReference() 操作の終了後に発行されます。sourceNodeId referenceTypeIdtargetNodeIdisForwardReference は、addReference() 呼び出しの値です。statusCode には操作の結果が含まれます。

[since QtOpcUa 5.13] QOpcUaApplicationIdentity QOpcUaClient::applicationIdentity() const

このQOpcUaClient インスタンスのアプリケーション ID を返します。

この関数は QtOpcUa 5.13 で導入されました。

setApplicationIdentity()も参照してください

const QOpcUaAuthenticationInformation &QOpcUaClient::authenticationInformation() const

現在の認証情報を返します。

setAuthenticationInformation()も参照して ください。

QString QOpcUaClient::backend() const

QOpcUaClient のこのインスタンスで使用されているバックエンドの名前を返します。

[signal, since QtOpcUa 5.13] void QOpcUaClient::connectError(QOpcUaErrorState *errorState)

このシグナルは、接続確立時にエラーが発生した場合に発行されます。パラメータerrorState にはエラーに関する情報が含まれます。

クライアント側のエラーの場合、オブジェクトに対してQOpcUaErrorState::setIgnoreError を呼び出すことで、これらのエラーを無視することができる。

このシグナルに接続されたスロットの実行中、バックエンドは停止し、すべてのスロットが戻るのを待ちます。これにより、バックエンドが処理を続行する前に、ユーザダイアログをポップアップして、例えば未知の証明書を信頼するかどうかをエンドユーザに尋ねることができます。

この関数は QtOpcUa 5.13 で導入されました。

[invokable, since QtOpcUa 5.13] void QOpcUaClient::connectToEndpoint(const QOpcUaEndpointDescription &endpoint)

endpoint で指定された OPC UA エンドポイントに接続します。

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

利用可能なエンドポイントのリストは、通常QOpcUaClient::requestEndpoints() を呼び出すことで得られます。

エンドポイントがユーザ名認証を必要とする場合、少なくともユーザ名をQOpcUaAuthenticationInformation で設定する必要があります。認証情報を設定する前にこの関数を呼び出すと、匿名認証が使用されます。

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

client->setAuthenticationInformation(authInfo);

注意: この関数はメタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

この関数は QtOpcUa 5.13 で導入されました。

connected(),stateChanged(),setAuthenticationInformation(),QOpcUaEndpointDescriptionも参照してください

[signal] void QOpcUaClient::connected()

このシグナルは、接続が確立されたときに発行されます。

[since 6.6] QOpcUaConnectionSettings QOpcUaClient::connectionSettings() const

このクライアントの接続設定を返します。

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

setConnectionSettings()も参照してください

bool QOpcUaClient::deleteNode(const QString &nodeId, bool deleteTargetReferences = true)

ノード IDnodeId を持つノードをサーバーから削除します。deleteTargetReferencesfalse の場合、ソース・ノードnodeId を持つ参照のみが削除されます。deleteTargetReferencestrue の場合、nodeId をターゲットとする参照も削除されます。

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

操作の成功はdeleteNodeFinished() シグナルで返されます。

以下のコード例は、サーバからノードとそのノードへの参照をすべて削除します:

m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);

addNode() およびdeleteNodeFinished()も参照してください

[signal] void QOpcUaClient::deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode)

このシグナルは、deleteNode() 操作の終了後に発行されます。nodeId は、deleteNode() 呼び出しのノード ID です。statusCode には操作の結果が格納されます。

bool QOpcUaClient::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)

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);

addReference()、deleteReferenceFinished()、QOpcUaDeleteReferenceItemも参照してください

[signal] void QOpcUaClient::deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)

このシグナルは、deleteReference() 操作の終了後に発行されます。sourceNodeId referenceTypeIdtargetNodeIdisForwardReference は、deleteReference() 呼び出しの値です。statusCode には操作の結果が含まれます。

[invokable] void QOpcUaClient::disconnectFromEndpoint()

サーバーとの接続を切断します。

注意: この関数はメタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

disconnected() およびconnectToEndpoint()も参照して ください。

[signal] void QOpcUaClient::disconnected()

このシグナルはcloseリクエストに続いてコネクションが閉じられたときに発せられます。

QOpcUaEndpointDescription QOpcUaClient::endpoint() const

クライアントが現在接続している、あるいは最後に接続したエンドポイントの説明を返します。

[signal] void QOpcUaClient::endpointsRequestFinished(QList<QOpcUaEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)

このシグナルは、requestEndpoints() 操作が終了した後に発行される。statusCode には操作の結果が含まれる。結果がGood の場合、endpoints にはサーバーで利用可能なすべてのエンドポイントの説明が含まれます。requestUrl には、requestEndpoints() 呼び出しで使用された URL が含まれます。

QOpcUaClient::ClientError QOpcUaClient::error() const

クライアントの現在のエラー状態を返します。

注: プロパティ・エラー用のゲッター関数。

bool QOpcUaClient::findServers(const QUrl &url, const QStringList &localeIds = QStringList(), const QStringList &serverUris = QStringList())

サーバまたはディスカバリサーバから既知のサーバのリストを読み取る非同期の FindServers 要求をurl で開始します。非同期呼び出しが正常にディスパッチされた場合はtrue を返します。

localeIds を使用して、リクエストによって返されるアプリケーション名の言語を選択することができます。このフォーマットは OPC UA 1.05 part 3, 8.4 に規定されており、例えば英語であれば "en"、ドイツ語(Germany)であれば "de-DE "となる。複数のロケール ID が指定された場合、サーバーは最初にマッチしたものを使用する。マッチするものがない場合や が空の場合は、デフォルトのロケールが選択される。localeIds

serverUris を使用すると、アプリケーションの説明にある applicationUri がマッチするサーバに結果を限定することができます。例えば、"MyPLC "というapplicationUriを持つサーバーの現在のURLを見つけるには、以下のように呼び出す:

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

結果はfindServersFinished() シグナルで返される。

[signal] void QOpcUaClient::findServersFinished(QList<QOpcUaApplicationDescription> servers, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)

このシグナルは、findServers ()操作の終了後に発行される。statusCode には操作の結果が格納される。結果がGood の場合、servers には、フィルタ条件に一致する、クエリされたサーバーで既知のすべてのサーバーのアプリケーション記述が含まれる。requestUrl には、findServers() 呼び出しで使用された URL が含まれる。

bool QOpcUaClient::isNamespaceAutoupdateEnabled() const

名前空間配列の自動更新が有効になっているかどうかを返します。

QStringList QOpcUaClient::namespaceArray() const

名前空間配列のキャッシュ値を返します。

この値は、namespaceArrayUpdated() シグナルが発せられた後にのみ有効です。

updateNamespaceArray() およびnamespaceArrayUpdated()も参照

[signal] void QOpcUaClient::namespaceArrayChanged(QStringList namespaces)

このシグナルは、namespace 配列が変更された後に発行される。namespaces には、サーバの namespace テーブルの内容が格納される。namespaces のエントリのインデックスは、ノード ID で使用される名前空間インデックスに対応します。

namespaceArrayUpdated() およびupdateNamespaceArray()も参照のこと

[signal] void QOpcUaClient::namespaceArrayUpdated(QStringList namespaces)

このシグナルは、updateNamespaceArray 操作が終了した後に発行される。namespaces には、サーバーの名前空間テーブルの内容が格納される。namespaces のエントリのインデックスは、ノード ID で使用される名前空間インデックスに対応する。

更新後も名前空間配列の内容が変わらない場合、このシグナルは発生しません。

namespaceArrayChanged() およびupdateNamespaceArray()も参照

int QOpcUaClient::namespaceAutoupdateInterval() const

名前空間配列の現在の更新間隔を返します。

setNamespaceAutoupdateInterval(int interval)も参照

QOpcUaNode *QOpcUaClient::node(const QOpcUaExpandedNodeId &expandedNodeId)

expandedNodeId で識別される OPC UA ノードに関連付けられたQOpcUaNode オブジェクトを返す。呼び出し元がノードオブジェクトの所有者になります。

ノードが現在接続されているサーバ上にない場合、名前空間が解決できない場合、ノード ID が不正な場合、またはクライアントが接続されていない場合、nullptr が返されます。

updateNamespaceArray()も参照

QOpcUaNode *QOpcUaClient::node(const QString &nodeId)

nodeId で識別される OPC UA ノードに関連付けられたQOpcUaNode オブジェクトを返す。呼び出し元がノードオブジェクトの所有者となる。

クライアントが接続されていない場合、nullptr が返される。バックエンドは、その他のエラー・ケース(例えば、不正なノード ID の場合)についてもnullptr を返すことがあります。

[signal, since QtOpcUa 5.13] void QOpcUaClient::passwordForPrivateKeyRequired(QString keyFilePath, QString *password, bool previousTryWasInvalid)

このシグナルは、暗号化された秘密鍵のパスワードが必要な場合に発行される。パラメータkeyFilePath には、使用される鍵のファイルパスが格納される。パラメータpreviousTryWasInvalid は、以前に鍵の復号化に失敗した(パスワードが無効であった)場合に真となる。パラメータpasswordQString を指し、鍵の実際のパスワードを入力する必要がある。前回の試行が失敗した場合は、前回使用したパスワードが格納される。

このシグナルに接続されたスロットの実行中、バックエンドは停止し、すべてのスロットが戻るのを待ちます。これにより、エンドユーザにパスワードを尋ねるユーザダイアログをポップアップすることができます。

この関数は QtOpcUa 5.13 で導入されました。

[since QtOpcUa 5.13] QOpcUaPkiConfiguration QOpcUaClient::pkiConfiguration() const

このQOpcUaClient インスタンスのアプリケーションの PKI 構成を返します。

この関数は、QtOpcUa 5.13 で導入されました。

setPkiConfiguration()も参照してください

QOpcUaQualifiedName QOpcUaClient::qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const

namespaceUri と名前文字列name から修飾名の作成を試みます。結果の修飾名を返します。namespaceUri が解決できない場合は、空の修飾名が返されます。

ok 名前空間 URI の解決に成功した場合は、 に設定されます。名前空間 URI を解決できなかった場合は、 に が設定されます。true ok false

[since 6.3] QOpcUaHistoryReadResponse *QOpcUaClient::readHistoryData(const QOpcUaHistoryReadRawRequest &request)

1 つまたは複数のノードの生履歴の読み取りrequest を開始します。これは、OPC UA 1.05 part 4 5.10.3で定義されている、生の履歴データを読み込むためのOPC UA ReadHistoryサービスのQt OPC UA表現です。

開始タイムスタンプ、終了タイムスタンプ、ノードあたりの値数、returnBounds、および読み込むノードは、QOpcUaHistoryReadRawRequest で指定することができます。

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

以下の例では,2つのノードの過去2日間の履歴データが要求され,プリントされます.結果はノードごとに10個の値に制限されます。

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();
                            }
                        }
                    });
}

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

[since 6.7] QOpcUaHistoryReadResponse *QOpcUaClient::readHistoryEvents(const QOpcUaHistoryReadEventRequest &request)

request にパラメータを指定して、1 つまたは複数のノード ID に対してイベント履歴の読み取り要求を開始します。

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

以下の例は、2つのノードの過去2日間の履歴イベントを取得します。1つのノードにつき最大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();
});

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

bool QOpcUaClient::readNodeAttributes(const QList<QOpcUaReadItem> &nodesToRead)

異なるノードの複数のアトリビュートの読み取りを開始します。nodesToRead の各エントリに対して、ノード ID、属性、インデックス範囲を指定できます。

非同期要求が正常にディスパッチされた場合、true を返します。結果はreadNodeAttributesFinished() シグナルで返されます。

この読み取り関数は、異なるノード上の多数のノード属性の値を読み取る必要があるシナリオで、値の変更の監視などQOpcUaNode ベースの API の他の機能を必要とせずに使用できる、ノードの属性を読み取る代替方法を提供します。リクエストのすべての読み取り項目は、単一のリクエストでサーバーに送信され、単一のreadNodeAttributesFinished() シグナルを生成する単一のレスポンスで応答される。これにより、多くの異なるノードが関与している場合、ネットワークのオーバーヘッドとシグナルスロット接続の数が削減される。

以下の例では、同じノードのvalue属性のdisplay name属性と2つのインデックス範囲「0:2」と「5:7」、および2番目のノードのvalue属性全体が、1回のサービス呼び出しで読み取られています:

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);

QOpcUaReadItem およびreadNodeAttributesFinished()も参照のこと

[signal] void QOpcUaClient::readNodeAttributesFinished(QList<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult)

このシグナルは、readNodeAttributes ()操作の終了後に発行される。

results の要素は、リクエストの要素と同じ順序を持つ。results serviceResult には OPC UA Read サービスからのステータスコードが含まれる。

readNodeAttributes()、QOpcUaReadResult 、およびQOpcUaReadItemも参照してください

[since 6.7] bool QOpcUaClient::registerNodes(const QStringList &nodesToRegister)

nodesToRegister のノード ID をサーバーに登録し、リクエストが正常に送信された場合はtrue を返します。結果はregisterNodesFinished() シグナルで返される。

ノード登録サービスは、ノードが頻繁にアクセスされることをサーバに知らせるために使用され、サーバは外部リソースへの接続をオープンにしておくなどの操作を実行できます。また、サーバはエイリアスのノード ID を返すことがありますが、これは数値であることが推奨されます。これは長い文字列の識別子ノードIDを持つノードが多くのリクエストで使われる場合に便利です。実際のパフォーマンス向上は(もしあれば)サーバーの実装に依存します。

登録されたノードIDは現在のセッションでのみ有効であることが保証されます。サーバーが関連リソースを解放できるように、不要になった登録はできるだけ早く登録を解除する必要があります。

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

unregisterNodes()も参照してください

[signal, since 6.7] void QOpcUaClient::registerNodesFinished(const QStringList &nodesToRegister, const QStringList &registeredNodeIds, QOpcUa::UaStatusCode statusCode)

このシグナルは、registerNodes() 操作が終了した後に発行されます。nodesToRegister には、相関付けのためにリクエストのノード ID が含まれます。サーバから返されるノード ID はregisteredNodeIds にあり、リクエストの ID と同じ順序です。statusCode は、操作が成功したかどうかを示します。

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

registerNodes()も参照してください

bool QOpcUaClient::requestEndpoints(const QUrl &url)

url にあるサーバから利用可能なエンドポイントのリストを読み込むための非同期リクエストGetEndpoints を開始します。非同期呼び出しが正常にディスパッチされた場合はtrue を返します。

エンドポイント情報はendpointsRequestFinished() シグナルで返されます。

QString QOpcUaClient::resolveExpandedNodeId(const QOpcUaExpandedNodeId &expandedNodeId, bool *ok = nullptr) const

expandedNodeId を数値名前空間インデックスを持つノード ID 文字列に解決しようとします。変換に成功した場合は、ノード ID 文字列を返します。

名前空間インデックスを解決できない場合、または展開されたノード ID の識別子部分が不正な場合は、空の文字列が返されます。変換に成功した場合は、oktrue に設定されます。展開されたノード ID を解決できなかった場合、okfalse に設定されます。

[since QtOpcUa 5.13] void QOpcUaClient::setApplicationIdentity(const QOpcUaApplicationIdentity &identity)

このQOpcUaClient インスタンスのアプリケーション ID をidentity に設定します。

この関数は QtOpcUa 5.13 で導入されました。

applicationIdentity()も参照してください

void QOpcUaClient::setAuthenticationInformation(const QOpcUaAuthenticationInformation &authenticationInformation)

このクライアントの認証情報をauthenticationInformation に設定します。

authenticationInformation() およびconnectToEndpoint() も参照して ください。

[since 6.6] void QOpcUaClient::setConnectionSettings(const QOpcUaConnectionSettings &connectionSettings)

このクライアントの接続設定を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 の値が適用されます。

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

connectionSettings()も参照してください

void QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)

名前空間テーブルの自動更新を有効にします。

これを有効にすると、名前空間テーブルのローカルコピーは自動的に更新され続けます。namespaceArrayUpdated は、配列が変更されたときに発行されます。isEnabled は、自動更新が有効か無効かを決定します。

サブスクリプションは、変更を追跡するためにサーバ上のノードで作成されます。サーバーがサブスクリプションをサポートしていない場合、これは動作せず、isNamespaceAutoupdateEnabledfalse を返します。

namespaceArray() およびnamespaceArrayUpdated()も参照してください

void QOpcUaClient::setNamespaceAutoupdateInterval(int interval)

ネームスペース・テーブルのサブスクリプションの間隔を設定します。

サブスクリプションはサーバによって変更されることがあります。

interval は、変更をチェックする間隔をミリ秒単位で指定します。既定は 1 秒に 1 回です。

namespaceAutoupdateInterval() およびQOpcUaClient::setNamespaceAutoupdate(bool isEnabled)も参照してください

[since QtOpcUa 5.13] void QOpcUaClient::setPkiConfiguration(const QOpcUaPkiConfiguration &config)

このQOpcUaClient インスタンスのアプリケーション PKI 構成をconfig に設定します。

この関数は、QtOpcUa 5.13 で導入されました。

pkiConfiguration()も参照してください

[since QtOpcUa 5.14] QStringList QOpcUaClient::supportedSecurityPolicies() const

使用するバックエンドがサポートするセキュリティ・ポリシーを返します。

この関数は現在技術プレビューとして提供されているため、API や提供される機能は予告なく変更される可能性があります。

この関数は QtOpcUa 5.14 で導入されました。

[since QtOpcUa 5.14] QList<QOpcUaUserTokenPolicy::TokenType> QOpcUaClient::supportedUserTokenTypes() const

使用するバックエンドがサポートしているユーザートークンタイプを返します。

この関数は現在技術プレビューとして提供されているため、API や提供される機能は予告なく変更される場合があります。

この関数は QtOpcUa 5.14 で導入されました。

QOpcUaUserTokenPolicy::TokenTypeも参照してください

[since 6.7] bool QOpcUaClient::unregisterNodes(const QStringList &nodesToUnregister)

nodesToUnregister のノード ID をサーバーに登録解除し、リクエストが正常にディスパッチされた場合はtrue を返します。結果はunregisterNodesFinished() シグナルで返されます。

nodesToUnregister で渡すノード ID は、registerNodes() で取得しておく必要があります。

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

registerNodes()も参照してください

[signal, since 6.7] void QOpcUaClient::unregisterNodesFinished(const QStringList &nodesToUnregister, QOpcUa::UaStatusCode statusCode)

このシグナルは、unregisterNodes() 操作が終了した後に発行されます。nodesToUnregister には、相関のためにリクエストのノード ID が含まれます。statusCode は、操作が成功したかどうかを示します。

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

unregisterNodes()も参照してください

bool QOpcUaClient::updateNamespaceArray()

サーバに名前空間配列の更新を要求します。操作が正常にディスパッチされた場合はtrue を返します。

操作が終了するとnamespaceArrayUpdated() シグナルが発行されます。

namespaceArray() およびnamespaceArrayUpdated()も参照

bool QOpcUaClient::writeNodeAttributes(const QList<QOpcUaWriteItem> &nodesToWrite)

異なるノードの複数の属性に対して書き込みを開始します。nodesToWrite のエントリごとに、ノード ID、属性、値、値型、およびインデックス範囲を指定できます。

非同期要求が正常にディスパッチされた場合はtrue を返します。結果はwriteNodeAttributesFinished() シグナルで返される。

この書き込み関数は、異なるノード上の多数のノード属性の値を書き込む必要があるシナリオで、値の変更の監視などQOpcUaNode ベースの API の他の機能を必要とせずに使用できる、ノードの属性を書き込む代替方法を提供します。リクエストのすべての書き込み項目は、単一のリクエストでサーバーに送信され、単一のwriteNodeAttributesFinished() シグナルを生成する単一のレスポンスで応答される。これにより、多くの異なるノードが関与している場合、ネットワークのオーバーヘッドとシグナルスロット接続の数が削減される。

以下の例では、2つの異なるノードのValues属性が1回の呼び出しで書き込まれます。2 番目のノードには配列値があり、最初の 2 要素のみが上書きされます:

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);

QOpcUaWriteItem およびwriteNodeAttributesFinished()も参照

[signal] void QOpcUaClient::writeNodeAttributesFinished(QList<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult)

このシグナルは、writeNodeAttributes ()操作の終了後に出力される。

results の要素は、書き込みリクエストの要素と同じ順序である。これらの要素には、サーバーから受信した値、タイムスタンプ、ステータス・コードのほか、書き込みアイテムのノード ID、属性、インデックス範囲が含まれます。これにより、結果とリクエストのマッチングが容易になります。

serviceResult は、OPC UA Write サービスからのステータスコードである。 が でない場合、 の項目も無効なステータスコードを持つため、使用してはならない。serviceResult Good results

writeNodeAttributes() およびQOpcUaWriteResultも参照してください

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