이 페이지에서

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를 통해 OPC UA 서버의 노드와 추가적인 상호작용을 가능하게 하는 OPC UA 노드 객체( QOpcUaNode )를 가져올 수 있습니다. 여러 노드와 관련된 작업의 경우, 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이 비어 있거나 사용자 식별 토큰이 없는 경우).
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를 가진 서버로 결과를 제한할 수 있습니다. 예를 들어, 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 해결에 성공하면 true 으로 설정됩니다. 네임스페이스 URI를 해결할 수 없는 경우, ok 은 false 으로 설정됩니다.

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

하나 또는 여러 노드에 대한 원시 기록 읽기( 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) 시그널을 통해 반환됩니다.

다음 예제에서는 두 노드의 지난 이틀간 기록 데이터를 요청하여 출력합니다. 결과는 노드당 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 에 지정된 매개변수를 사용하여 하나 또는 여러 개의 노드 ID에 대한 읽기 이벤트 기록 요청을 시작합니다.

비동기 요청이 성공적으로 발송된 경우, 요청의 상태를 포함하는 ` QOpcUaHistoryReadResponse `를 반환합니다. 결과는 ` QOpcUaHistoryReadResponse::readHistoryEventsFinished`(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) 신호를 통해 반환됩니다.

다음 예제는 두 노드에 대한 지난 2일간의 이력 이벤트를 가져옵니다. 노드당 한 번에 최대 10개의 이벤트가 반환됩니다. 필터와 지정된 시간 범위에 해당하는 이벤트가 더 남아 있는 경우, hasMoreData() 는 true가 되며 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);

// 원하는 모든 데이터를 가져온 후에는 사용자가 response 객체를 해제해야 합니다
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;
    }

    // 지금까지 얻은 결과를 출력합니다
    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 속성의 두 인덱스 범위("0:2" 및 "5:7"), 그리고 두 번째 노드의 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가 많은 요청에서 사용되는 경우 유용할 수 있습니다. 실제 성능 향상(있는 경우)은 서버의 구현 방식에 따라 달라집니다.

등록된 노드 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초에 한 번입니다.

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

사용 중인 백엔드에서 지원하는 보안 정책을 반환합니다.

이 함수는 현재 기술 미리보기(Technology Preview)로 제공되므로, 함수가 제공하는 API 및 기능은 사전 공지 없이 언제든지 변경될 수 있습니다.

이 함수는 QtOpcUa 5.14에서 도입되었습니다.

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

사용 중인 백엔드에서 지원하는 사용자 토큰 유형을 반환합니다.

이 함수는 현재 기술 미리보기(Technology Preview)로 제공되므로, 이 함수가 제공하는 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() 신호를 생성합니다. 이를 통해 다수의 서로 다른 노드가 관련된 경우 네트워크 오버헤드와 신호 슬롯 연결 수를 줄일 수 있습니다.

다음 예제에서는 두 개의 서로 다른 노드의 Values 속성을 한 번의 호출로 기록합니다. 두 번째 노드는 배열 값을 가지고 있으며, 그중 첫 번째와 두 번째 요소만 덮어씁니다:

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.