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

pdcomm::modbus::Endpoint

클래스

JSON 명령을 실행하는 Modbus 엔드포인트(endpoint) 하나입니다.

class Endpoint

선언 위치: #include <pdcomm/modbus/pdcomm_modbus.hpp>

pdcomm_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()

선언 위치: #include <pdcomm/modbus/pdcomm_modbus.hpp>

참고

  • 예외 std::runtime_error: 라이브러리가 엔드포인트를 만들 수 없으면 던집니다.

call

메서드

JSON 명령 하나를 실행하고 전체 응답을 반환합니다.

std::string call(const std::string &json)

선언 위치: #include <pdcomm/modbus/pdcomm_modbus.hpp>

매개변수

이름설명
jsonUTF-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, 해제된 엔드포인트, 내부 오류처럼 호출 자체가 실패하면 고정 텍스트와 함께 던집니다.