콘텐츠로 이동
무료 평가 시작

pdcomm::opcua::server

클래스

네임스페이스 2에 변수를 두는 메모리 내 OPC UA 서버입니다.

class server : public owned

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

서버는 poll() 중에만 클라이언트를 처리합니다. 객체를 소유한 스레드에서 주기적으로 호출합니다. 서버를 소멸시키면 close()처럼 중지합니다.

examples/opcua/opcua_server.cpp에서 발췌:

auto config = ua::server_options();
config.endpoint = ua::bytes(endpoint);
config.certificate_der = ua::bytes(certificate);
config.private_key_pem = ua::bytes(key);
config.trusted_client_der = ua::bytes(trust);
auto server = ua::server::create(argv[1], config);
std::fill(key.begin(), key.end(), static_cast<unsigned char>(0));  // The SDK copied the identity.
server.add_variable(node_id(1001), "Value", int32_variant(42),
                    PDCOMM_OPCUA_VARIABLE_WRITABLE | PDCOMM_OPCUA_VARIABLE_PUBLIC);
server.add_variable(node_id(1002), "Limit", int32_variant(100), PDCOMM_OPCUA_VARIABLE_PUBLIC);
server.add_variable(node_id(1003), "Protected", int32_variant(7), PDCOMM_OPCUA_VARIABLE_WRITABLE);
const auto address = server.local_address().copy();
// ...
while (!stop_requested &&
       (!seconds || std::chrono::steady_clock::now() - started < std::chrono::seconds(seconds))) {
  server.poll();
  std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
const auto snapshot = server.read_value(node_id(1001)).copy();
// ...
server.close();

참고

  • 서버 하나는 한 번에 한 스레드에서만 사용합니다. 동시에 호출하면 #PDCOMM_OPCUA_BUSY와 함께 error를 던집니다.

멤버

add_variable

메서드

Objects 폴더 아래에 Variable 노드(node)를 추가합니다.

void add_variable(const std::vector<uint8_t>& id, const std::string& name, const std::vector<uint8_t>& value, uint32_t flags = 0)

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

pdcomm_opcua_server_add_variable()을 참고합니다.

매개변수

이름설명
id네임스페이스 2의 인코딩된 NodeId입니다.
nameUTF-8 BrowseName이자 DisplayName입니다.
value형식이 지정된, 인코딩된 초기 Variant입니다.
flags::pdcomm_opcua_variable_flags 값의 비트 OR입니다. 기본값 0은 인증된 사용자만 읽을 수 있는 읽기 전용 변수를 만듭니다.

참고

  • 예외 error: 입력이 잘못되었거나, NodeId가 이미 있거나, 한도에 도달하면 던집니다.

close

메서드

리스너를 닫고 모든 채널을 중단합니다.

void close()

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

참고

  • 예외 error: 서버가 이미 닫혔거나 사용 중이면 던집니다.

create

메서드

서버를 만들고 바인딩합니다.

static server create(const std::string& bind_address, const pdcomm_opcua_server_options& config)

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

pdcomm_opcua_server_create()를 참고합니다. ID와 신뢰하는 클라이언트 인증서는 호출 중에 복사됩니다.

매개변수

이름설명
bind_address127.0.0.1:4840 같은 숫자 소켓 주소입니다. 포트 0이면 비어 있는 포트를 고릅니다.
configserver_options()로 만들고 엔드포인트 URL을 설정한 옵션입니다.

반환값

수신 대기 중인 서버입니다.

참고

  • 예외 error: ABI 버전이 다르거나, 옵션이 잘못되었거나, 인증서가 애플리케이션 URI와 맞지 않거나, 바인딩에 실패하면 던집니다.

local_address

메서드

서버가 수신 대기 중인 소켓 주소를 반환합니다.

buffer local_address() const

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

반환값

127.0.0.1:50123 같은 UTF-8 텍스트를 담은 버퍼입니다.

참고

  • 예외 error: 서버가 닫혔거나 사용 중이면 던집니다.

poll

메서드

블로킹 없이 연결을 수락하고 요청을 한 번 처리합니다.

void poll()

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

참고

  • 예외 error: 서버가 실패하면 던집니다. 이후 서버는 닫힙니다.

read_value

메서드

인증된 로컬 사용자로서 Value 속성을 읽습니다.

buffer read_value(const std::vector<uint8_t>& id) const

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

매개변수

이름설명
id네임스페이스 2의 인코딩된 NodeId입니다.

반환값

인코딩된 DataValue를 담은 버퍼입니다. 알 수 없는 노드이면 BadNodeIdUnknown을 가진 DataValue가 됩니다.

참고

  • 예외 error: 입력이 잘못되었거나 서버가 닫혔거나 사용 중이면 던집니다.

set_value

메서드

인증된 로컬 사용자로서 Value 속성(attribute)을 씁니다.

uint32_t set_value(const std::vector<uint8_t>& id, const std::vector<uint8_t>& value)

선언 위치: #include <pdcomm/opcua/pdcomm_opcua.hpp>

매개변수

이름설명
id네임스페이스 2의 인코딩된 NodeId입니다.
value변수의 형식에 맞게 인코딩된 Variant입니다.

반환값

쓰기의 OPC UA StatusCode입니다. 예: Good, BadNotWritable, BadTypeMismatch. Bad 코드는 예외를 던지지 않습니다.

참고

  • 예외 error: 입력이 잘못되었거나 서버가 닫혔거나 사용 중이면 던집니다.