pdcomm::modbus::Endpoint
클래스
JSON 명령을 실행하는 Modbus 엔드포인트(endpoint) 하나입니다.
class Endpointpdcomm_modbus_endpoint_create()와 pdcomm_modbus_call()을 감쌉니다. 명령 집합과 응답 형식은 pdcomm_modbus_call()을 참고합니다. 엔드포인트는 기본 구성으로 연결되지 않은 상태에서 시작하며, 소멸자가 해제합니다. 소멸자는 소켓이나 시리얼 포트도 닫습니다.
이 클래스는 이동할 수 있지만 복사할 수는 없습니다. 이동된 뒤의 엔드포인트는 핸들이 없으며, 그 엔드포인트에서 call()을 호출하면 항상 예외를 던집니다.
입력 줄마다 명령 하나를 실행하는 콘솔(examples/modbus-tutorial/main.cpp):
pdcomm::modbus::Endpoint endpoint;
bool failed = false;
std::string line;
while (std::getline(std::cin, line)) {
if (line == "quit")
break;
if (line.find_first_not_of(" \t\r") == std::string::npos)
continue;
try {
std::cout << endpoint.call(line) << std::endl;
} catch (const std::exception &error) {
failed = true;
std::cerr << "Command error: " << error.what() << std::endl;
}
}
endpoint.call("{\"action\":\"disconnect\"}");참고
- 한 엔드포인트의 명령은 라이브러리가 직렬화하므로 call()을 여러 스레드에서 사용할 수 있습니다. 호출이 실행 중인 동안 객체를 이동하거나 소멸시키지 않습니다. 클라이언트
request는 응답이 오거나 구성된 타임아웃(timeout)이 지날 때까지 블로킹합니다. 서버나 게이트웨이는 애플리케이션이 자체 워커 스레드에서{"action":"poll"}을 보내는 동안에만 요청을 처리합니다.
멤버
Endpoint
생성자
기본 구성으로 연결되지 않은 엔드포인트를 만듭니다.
Endpoint()참고
- 예외
std::runtime_error: 라이브러리가 엔드포인트를 만들 수 없으면 던집니다.
call
메서드
JSON 명령 하나를 실행하고 전체 응답을 반환합니다.
std::string call(const std::string &json)매개변수
| 이름 | 설명 |
|---|---|
json | UTF-8 JSON 명령 객체입니다. 예: {"action":"execute","pdu":[6,0,0,0,9]}. |
반환값
응답 텍스트 {"ok":true,"result":...}입니다.
참고
- 예외
std::runtime_error: 타임아웃이나 잘못된 구성처럼 명령이 실패하면(#PDCOMM_MODBUS_SERVICE_ERROR) 던지며,what()은 오류 응답{"error":"...","ok":false}입니다. - 예외
std::runtime_error: 빈 JSON이나 잘못된 JSON, 해제된 엔드포인트, 내부 오류처럼 호출 자체가 실패하면 고정 텍스트와 함께 던집니다.