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를 사용하면 QOpcUaNode 개체를 가져와 OPC UA 서버의 노드와 추가 상호 작용을 할 수 있습니다. 여러 노드와 관련된 작업의 경우, QOpcUaClient는 서버에 대한 단일 요청으로 여러 노드의 여러 속성을 읽을 수 있도록 지원하는 API를 제공합니다.
또한 QOpcUaClient는 연결 성공 후 생성되는 서버 네임스페이스 배열의 로컬 복사본을 보관합니다. 이 정보는 연결이 지속되는 동안 쿼리하거나 업데이트할 수 있습니다. 네임스페이스 배열의 복사본은 확장 노드 ID의 확인과 네임스페이스 URI에서 정규화된 이름을 생성하는 데에도 사용됩니다.
노드 주소 지정
노드 및 노드 아이디에 대한 소개는 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> 엔드포인트) { 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
이 열거형 유형은 클라이언트의 현재 오류 상태를 지정합니다.
Constant | 값 | 설명 |
---|---|---|
QOpcUaClient::NoError | 0 | 오류가 발생하지 않았습니다. |
QOpcUaClient::InvalidUrl | 1 | 연결할 URL이 잘못 지정되었거나 이 URL에 대한 연결이 실패했습니다. |
QOpcUaClient::AccessDenied | 2 | 잘못된 자격 증명으로 인해 사용자 이름/비밀번호를 사용하여 서버에 연결하려고 시도했지만 실패했습니다. |
QOpcUaClient::ConnectionError | 3 | 연결 중 오류가 발생했습니다. |
QOpcUaClient::UnknownError | 4 | 알 수 없는 오류가 발생했습니다. |
QOpcUaClient::UnsupportedAuthenticationInformation | 5 | 지정된 인증 정보 유형 또는 데이터가 지원되지 않습니다. |
enum QOpcUaClient::ClientState
이 열거형 유형은 클라이언트의 연결 상태를 지정합니다.
Constant | 값 | 설명 |
---|---|---|
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 |
알림 신호:
void | stateChanged(QOpcUaClient::ClientState state) |
멤버 함수 문서
[virtual noexcept]
QOpcUaClient::~QOpcUaClient()
QOpcUaClient 인스턴스를 삭제합니다.
bool QOpcUaClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)
서버에 nodeToAdd 에 설명된 노드를 추가합니다.
비동기 호출이 성공적으로 디스패치된 경우 true
을 반환합니다.
작업의 성공 여부는 addNodeFinished() 신호로 반환됩니다.
다음 예제 코드는 서버에 새로운 변수 노드를 추가합니다:
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() 신호로 반환됩니다.
다음 예제 코드는 "객체" 폴더에 노드에 대한 참조를 추가합니다:
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() 신호로 반환됩니다.
다음 예제 코드는 "객체" 폴더에서 노드에 대한 참조를 삭제합니다:
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
클라이언트의 현재 오류 상태를 반환합니다.
참고: 프로퍼티 오류에 대한 게터 함수입니다.
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 에 있는 항목의 인덱스는 노드 아이디에 사용된 네임스페이스 인덱스에 해당합니다.
namespaceArrayUpdated() 및 updateNamespaceArray()도 참조하세요 .
[signal]
void QOpcUaClient::namespaceArrayUpdated(QStringList namespaces)
이 신호는 updateNamespaceArray 작업이 완료된 후에 전송됩니다. namespaces 에는 서버 네임스페이스 테이블의 콘텐츠가 포함되어 있습니다. namespaces 에 있는 항목의 인덱스는 노드 아이디에 사용된 네임스페이스 인덱스에 해당합니다.
업데이트 후에도 네임스페이스 배열 콘텐츠가 동일하게 유지되면 이 신호가 전송됩니다.
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 확인에 성공하면 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 에서 지정할 수 있습니다.
비동기 요청이 성공적으로 전송된 경우 요청의 상태를 포함하는 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 의 파라미터를 사용하여 하나 또는 여러 노드 아이디에 대한 이벤트 기록 읽기 요청을 시작합니다.
비동기 요청이 성공적으로 전송된 경우 요청 상태가 포함된 QOpcUaHistoryReadResponse 을 반환합니다. 결과는 QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) 시그널로 반환됩니다.
다음 예제는 두 노드에 대한 지난 이틀간의 기록 이벤트를 검색합니다. 한 번에 노드당 최대 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);// 원하는 데이터가 모두 검색된 후 사용자가 응답 객체를 해제해야합니다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; } // 지금까지 얻은 결과를 출력합니다(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() 신호를 생성하는 단일 응답으로 응답합니다. 이렇게 하면 여러 노드가 관련된 경우 네트워크 오버헤드와 신호 슬롯 연결 수를 줄일 수 있습니다.
다음 예에서는 동일한 노드의 표시 이름 속성과 두 개의 인덱스 범위 "0:2" 및 "5:7"의 값 속성 및 두 번째 노드의 전체 값 속성을 단일 서비스 호출을 사용하여 읽습니다:
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 읽기 서비스의 상태 코드가 포함되어 있습니다.
readNodeAttributes(), QOpcUaReadResult, QOpcUaReadItem도 참조하세요 .
[since 6.7]
bool QOpcUaClient::registerNodes(const QStringList &nodesToRegister)
서버의 nodesToRegister 에 노드 ID를 등록하고 요청이 성공적으로 전송되면 true
을 반환합니다. 결과는 registerNodesFinished() 신호로 반환됩니다.
노드 등록 서비스는 노드에 자주 액세스할 것임을 서버에 알려 외부 리소스에 대한 연결을 열어 두는 등의 작업을 수행할 수 있도록 하는 데 사용됩니다. 서버는 별칭 노드 아이디를 반환할 수도 있는데, 숫자를 사용하는 것이 좋습니다. 긴 문자열 식별자 노드 아이디를 가진 노드가 많은 요청에 사용되는 경우 유용할 수 있습니다. 실제 성능 향상(있는 경우)은 서버의 구현에 따라 다릅니다.
등록된 노드 ID는 현재 세션에서만 유효합니다. 더 이상 필요하지 않은 등록은 가능한 한 빨리 등록을 취소하여 서버가 관련 리소스를 확보할 수 있도록 해야 합니다.
이 기능은 Qt 6.7에 도입되었습니다.
unregisterNodes()도 참조하세요 .
[signal, since 6.7]
void QOpcUaClient::registerNodesFinished(const QStringList &nodesToRegister, const QStringList ®isteredNodeIds, QOpcUa::UaStatusCode statusCode)
이 신호는 registerNodes() 작업이 완료된 후에 전송됩니다. nodesToRegister 에는 상관 관계 목적으로 요청의 노드 ID가 포함되어 있습니다. 서버가 반환한 노드 아이디는 registeredNodeIds 에 있으며 요청의 아이디와 동일한 순서를 갖습니다. 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 을 숫자 네임스페이스 인덱스가 있는 노드 아이디 문자열로 변환하려고 시도합니다. 변환에 성공하면 노드 아이디 문자열을 반환합니다.
네임스페이스 인덱스를 확인할 수 없거나 확장된 노드 아이디의 식별자 부분이 잘못된 경우 빈 문자열이 반환됩니다. 변환에 성공하면 ok 은 true
으로 설정됩니다. 확장 노드 아이디를 확인할 수 없는 경우 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 밀리초 단위로 변경 사항을 확인할 간격을 결정합니다. 기본값은 초당 한 번입니다.
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와 기능은 사전 통지 없이 언제든지 변경될 수 있습니다.
이 함수는 5.14 버전에 도입되었습니다.
QOpcUaUserTokenPolicy::TokenType 을참조하세요 .
[since 6.7]
bool QOpcUaClient::unregisterNodes(const QStringList &nodesToUnregister)
서버의 nodesToUnregister 에 있는 노드 아이디의 등록을 취소하고 요청이 성공적으로 전송되면 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도 참조하세요 .
© 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.