このページでは

QOpcUaClient Class

QOpcUaClient を使用すると、OPC UA サーバーとの通信が可能になります。詳細...

ヘッダー: #include <QOpcUaClient>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpcUa)
target_link_libraries(mytarget PRIVATE Qt6::OpcUa)
qmake: QT += opcua
継承元: QObject

パブリック型

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

プロパティ

パブリック関数

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 を使用して `QOpcUaNode ` オブジェクトを取得でき、これにより OPC UA サーバー上のノードとのさらなるやり取りが可能になります。複数のノードに関わる操作については、QOpcUaClient は、サーバーへの単一のリクエストで複数のノードの複数の属性を読み取ることをサポートする API を提供します。

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

ノードへのアドレス指定

ノードおよびノード ID の概要については、QOpcUaNode を参照してください。

使用方法

QOpcUaProvider を使用してQOpcUaClient を作成し、requestEndpoints を使用してサーバーからエンドポイントの一覧をリクエストし、connectToEndpoint() を呼び出して利用可能なエンドポイントのいずれかに接続します。接続が確立された後、ルートノードに対応するQOpcUaNode オブジェクトをリクエストします。

QOpcUaProvider provider;
if(provider.availableBackends().isEmpty())
    return;
QOpcUaClient*client =provider.createClient(provider.availableBackends()[0]);
if(!client)
    return;
// stateChangedシグナルに接続します。ラムダ式の代わりに、QObjectの互換性のあるスロットを使用することもできます。
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());// リストの最初のエンドポイントに接続する
});

client->requestEndpoints(QUrl("opc.tcp://127.0.0.1:4840"));// サーバーからエンドポイントのリストを要求する

メンバ型のドキュメント

enum QOpcUaClient::ClientError

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

定数定数値説明
QOpcUaClient::NoError0エラーは発生していません。
QOpcUaClient::InvalidUrl1接続先の URL が誤って指定されているか、この URL への接続に失敗しました。
QOpcUaClient::AccessDenied2ユーザー名/パスワードを使用したサーバーへの接続が、認証情報の不一致により失敗しました。
QOpcUaClient::ConnectionError3接続中にエラーが発生しました。
QOpcUaClient::UnknownError4不明なエラーが発生しました。
QOpcUaClient::UnsupportedAuthenticationInformation5指定された認証情報のタイプまたはデータがサポートされていません。
QOpcUaClient::InvalidAuthenticationInformation6指定された認証情報は無効です
QOpcUaClient::InvalidEndpointDescription7エンドポイントの記述が無効です(例:URL が空である、またはユーザー ID トークンがないなど)。
QOpcUaClient::NoMatchingUserIdentityTokenFound8選択されたエンドポイントは、要求されたトークンタイプまたはサポートされているポリシーをサポートしていません。
QOpcUaClient::UnsupportedSecurityPolicy9そのエンドポイントのセキュリティポリシーはサポートされていません。
QOpcUaClient::InvalidPki10PKI の証明書またはキーを読み込めなかったか、無効です
QOpcUaClient::CertificateUntrusted11サーバー証明書が信頼されていません

enum QOpcUaClient::ClientState

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

定数定数値説明
QOpcUaClient::Disconnected0クライアントはサーバーに接続されていません。
QOpcUaClient::Connecting1クライアントは現在、サーバーに接続中です。
QOpcUaClient::Connected2クライアントはサーバーに接続されています。
QOpcUaClient::Closing3クライアントは接続済みであり、サーバーへの切断を要求しています。

プロパティのドキュメント

[read-only] error : ClientError

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

アクセス関数:

QOpcUaClient::ClientError error() const

通知シグナル:

void errorChanged(QOpcUaClient::ClientError error)

[read-only] state : 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 、referenceTypeId 、targetNodeId 、およびisForwardReference は、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 のこのインスタンスで使用されているバックエンドの名前(例:「open62541」)を返します。

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

ノード ID が `nodeId ` のノードをサーバーから削除します。deleteTargetReferences の値が `false` の場合、ソースノードが `nodeId ` である参照のみが削除されます。deleteTargetReferences の値が `true` の場合、ターゲットが `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 、referenceTypeId 、targetNodeId 、isForwardReference は、deleteReference() の呼び出しによる値です。statusCode には、操作の結果が格納されています。

[invokable] void QOpcUaClient::disconnectFromEndpoint()

サーバーから切断します。

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

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

[signal] void QOpcUaClient::disconnected()

このシグナルは、クローズ要求を受けて接続が閉じられた際に発生します。

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

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

注: プロパティ `error`のゲッター 関数です。

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

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

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

serverUris を使用すると、アプリケーション記述に一致する applicationUri を持つサーバーに結果を限定することができます。例えば、applicationUri が「MyPLC」であるサーバーの現在の 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)

このシグナルは、ネームスペース配列が変更された後に発火します。namespaces には、サーバーのネームスペーステーブルの内容が含まれています。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 ` は、前回の鍵の復号化が失敗した場合(つまり、パスワードが正しくない場合)に `true` になります。 パラメータ `password ` は、キーの実際のパスワードを入力する必要がある `QString ` を指します。前回の試行が失敗した場合は、このオブジェクトに前回使用されたパスワードが格納されます。

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

この関数は 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 の解決に成功した場合、`will` は `true ` に設定されます。名前空間 URI を解決できなかった場合、`ok ` は `false` に設定されます。

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

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

QOpcUaHistoryReadRawRequest では、開始タイムスタンプ、終了タイムスタンプ、ノードごとの値の数、returnBounds、および読み取るノードを指定できます。

非同期リクエストの送信に成功した場合、リクエストの状態を含む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() はtrueとなり、readMoreData()を介してさらにイベントを取得することができます。

QOpcUaMonitoringParameters::EventFilter filter;
filter<<QOpcUaSimpleAttributeOperand("Message");
filter<<QOpcUaSimpleAttributeOperand("Time");

constQOpcUaHistoryReadEventRequest request({ QOpcUaReadItem("ns=2;s=EventHistorian"),QOpcUaReadItem("ns=2;s=EventHistorian2") },
                                            QDateTime::currentDateTime().addDays(-2),QDateTime::currentDateTime(),
                                            filter, 10);

// 必要なデータをすべて取得した後、ユーザーはレスポンスオブジェクトを解放する必要があります
const autoresponse= opcuaClient->readHistoryEvents(request);

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 で導入されました。

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

異なるノード上の複数の属性の読み取りを開始します。nodesToRead 内の各エントリについて、ノードID、属性、およびインデックス範囲を指定できます。

非同期リクエストが正常に送信された場合、true を返します。結果は `readNodeAttributesFinished()` シグナルで返されます。

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

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

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 の識別子部分が不正な形式である場合は、空の文字列が返されます。変換が成功した場合、ok はtrue に設定されます。展開されたノード ID を解決できなかった場合、ok はfalse に設定されます。

[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 から取得した値は、この時点以降の新規接続に適用されます。

open62541 プラグインは、現在の接続のセッションロケールIDの更新をサポートしています。変更されたものの、接続中に更新がサポートされていないその他のすべての値については、警告メッセージが表示され、次にconnectToEndpoint()が呼び出された際に適用されます。

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

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

void QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)

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

これを有効にすると、ネームスペーステーブルのローカルコピーが自動的に更新されます。配列が変更されると、namespaceArrayUpdated が発行されます。isEnabled は、自動更新が有効か無効かを判定します。

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

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 書き込みサービスからのステータスコードです。serviceResult がGood でない場合、results 内のエントリにも無効なステータスコードが含まれており、これらを使用してはなりません。

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

© 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.