pdcomm::opcua::server
클래스
네임스페이스 2에 변수를 두는 메모리 내 OPC UA 서버입니다.
class server : public owned서버는 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)pdcomm_opcua_server_add_variable()을 참고합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 네임스페이스 2의 인코딩된 NodeId입니다. |
name | UTF-8 BrowseName이자 DisplayName입니다. |
value | 형식이 지정된, 인코딩된 초기 Variant입니다. |
flags | ::pdcomm_opcua_variable_flags 값의 비트 OR입니다. 기본값 0은 인증된 사용자만 읽을 수 있는 읽기 전용 변수를 만듭니다. |
참고
- 예외
error: 입력이 잘못되었거나, NodeId가 이미 있거나, 한도에 도달하면 던집니다.
close
메서드
리스너를 닫고 모든 채널을 중단합니다.
void close()참고
- 예외
error: 서버가 이미 닫혔거나 사용 중이면 던집니다.
create
메서드
서버를 만들고 바인딩합니다.
static server create(const std::string& bind_address, const pdcomm_opcua_server_options& config)pdcomm_opcua_server_create()를 참고합니다. ID와 신뢰하는 클라이언트 인증서는 호출 중에 복사됩니다.
매개변수
| 이름 | 설명 |
|---|---|
bind_address | 127.0.0.1:4840 같은 숫자 소켓 주소입니다. 포트 0이면 비어 있는 포트를 고릅니다. |
config | server_options()로 만들고 엔드포인트 URL을 설정한 옵션입니다. |
반환값
수신 대기 중인 서버입니다.
참고
- 예외
error: ABI 버전이 다르거나, 옵션이 잘못되었거나, 인증서가 애플리케이션 URI와 맞지 않거나, 바인딩에 실패하면 던집니다.
local_address
메서드
서버가 수신 대기 중인 소켓 주소를 반환합니다.
buffer local_address() const반환값
127.0.0.1:50123 같은 UTF-8 텍스트를 담은 버퍼입니다.
참고
- 예외
error: 서버가 닫혔거나 사용 중이면 던집니다.
poll
메서드
블로킹 없이 연결을 수락하고 요청을 한 번 처리합니다.
void poll()참고
- 예외
error: 서버가 실패하면 던집니다. 이후 서버는 닫힙니다.
read_value
메서드
인증된 로컬 사용자로서 Value 속성을 읽습니다.
buffer read_value(const std::vector<uint8_t>& id) const매개변수
| 이름 | 설명 |
|---|---|
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)매개변수
| 이름 | 설명 |
|---|---|
id | 네임스페이스 2의 인코딩된 NodeId입니다. |
value | 변수의 형식에 맞게 인코딩된 Variant입니다. |
반환값
쓰기의 OPC UA StatusCode입니다. 예: Good, BadNotWritable, BadTypeMismatch. Bad 코드는 예외를 던지지 않습니다.
참고
- 예외
error: 입력이 잘못되었거나 서버가 닫혔거나 사용 중이면 던집니다.