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, UnsupportedAuthenticationInformation } |
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 ®isteredNodeIds, 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 オブジェクトが要求されます。
QOpcUaProviderprovider;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) { // stateChangedシグナルに接続する。 qDebug() << "Client state changed:" << state; if(state== QOpcUaClient::ClientState::Connected) { *ノード=クライアント->ノード("ns=0;i=84"); if (ノード) 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>エンドポイント) 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::NoError | 0 | エラーは発生していません。 |
QOpcUaClient::InvalidUrl | 1 | 接続先の url の指定に誤りがあるか、この url への接続に失敗しました。 |
QOpcUaClient::AccessDenied | 2 | ユーザ名/パスワードを使用したサーバへの接続に失敗しました。 |
QOpcUaClient::ConnectionError | 3 | 接続でエラーが発生しました。 |
QOpcUaClient::UnknownError | 4 | 不明なエラーが発生しました。 |
QOpcUaClient::UnsupportedAuthenticationInformation | 5 | 指定された認証情報のタイプまたはデータはサポートされていません。 |
enum QOpcUaClient::ClientState
この列挙型は、クライアントの接続状態を指定する。
定数 | 値 | 説明 |
---|---|---|
QOpcUaClient::Disconnected | 0 | クライアントはサーバに接続していません。 |
QOpcUaClient::Connecting | 1 | クライアントはサーバに接続中です。 |
QOpcUaClient::Connected | 2 | クライアントはサーバに接続中です。 |
QOpcUaClient::Closing | 3 | クライアントはサーバーに接続しており、サーバーからの切断を要求しています。 |
プロパティの説明
[read-only]
error : const ClientError
クライアントの現在のエラー状態を指定します。
アクセス関数:
QOpcUaClient::ClientError | error() const |
通知シグナル
void | errorChanged(QOpcUaClient::ClientError error) |
[read-only]
state : const ClientState
クライアントの現在の接続状態を指定します。
アクセス関数:
QOpcUaClient::ClientState | state() const |
Notifier シグナル:
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 のこのインスタンスが使用するバックエンドの名前を返します。
[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 を持つノードをサーバーから削除する。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()
このシグナルは、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)
このシグナルは、名前空間配列が変更された後に発行される。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 は、以前に鍵の復号化に失敗した(パスワードが無効であった)場合に真となる。パラメータ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 の解決に成功した場合は、 に設定されます。名前空間 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日間の履歴データが要求され,プリントされます.結果は1ノードあたり10個の値に制限されます。
QOpcUaHistoryReadRawRequestrequest( { QOpcUaReadItem("ns=1;s=myValue1")、 QOpcUaReadItem("ns=1;s=myValue2")}、 QDateTime::currentDateTime()、 QDateTime::currentDateTime().addDays(-2), 10, true);QOpcUaHistoryReadResponse*レスポンス = m_client->readHistoryData(request);if(response) { ::connect(response, &myvalue2) { ::currentDateTime().addDays(-2), 10, true. QObject::connect(response, &)QOpcUaHistoryReadResponse::readHistoryDataFinished, [](QList<QOpcUaHistoryData>results, QOpcUa::UaStatusCode serviceResult) {if(serviceResult!= QOpcUa::UaStatusCode::Good) {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");constQOpcUaHistoryReadEventRequestrequest({ 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) {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() シグナルを生成する単一のレスポンスで応答される。これにより、多くの異なるノードが関与している場合、ネットワークのオーバーヘッドとシグナルスロット接続の数が削減される。
以下の例では、同じノードの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 ®isteredNodeIds, 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 の値が適用されます。
この関数は 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 Write サービスからのステータスコードである。 が でない場合、 の項目も無効なステータスコードを持つため、使用してはならない。serviceResult Good results
writeNodeAttributes() およびQOpcUaWriteResultも参照のこと 。
© 2025 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.