연동 예제#

이 페이지는 파트너사가 실제로 어떤 방식으로 이 프로젝트를 쓰는지에 초점을 둡니다.

예제 1: 단순 서비스 스크립트#

``ClientInterfaceAPI``를 context manager로 사용하고, 데이터가 들어올 때까지 기다린 뒤 필요한 값만 읽는 방식입니다.

from ur_client import ClientInterfaceAPI

with ClientInterfaceAPI("192.168.0.10", interface_name="primary_ro") as api:
    api.wait_until_ready(timeout=5.0, minimum_packet_count=1)
    print(api.get_values(
        "robot.mode",
        "robot.safety_mode",
        "tcp.pose.x",
        "errors.latest.error_code",
    ))

예제 2: HMI용 주기적 읽기#

파트너 제품은 이미 화면 갱신 주기나 타이머 루프를 가진 경우가 많습니다. 그럴 때는 필요한 값만 명시적으로 읽는 방식이 좋습니다.

display_values = api.read_many(
    "robot.mode",
    "tcp.pose.x",
    "tcp.pose.y",
    "tcp.pose.z",
    "errors.latest.error_code",
    "errors.latest.description",
)

이 구조는 로봇 계층과 제품 계층 사이의 계약을 명확하게 해 줍니다.

예제 3: 연속 watch loop#

``watch()``는 background worker나 bridge component에서 쓰기 좋은 간결한 iterable 인터페이스입니다.

for item in api.watch(
    "robot.mode",
    "errors.latest.error_code",
    interval=0.5,
):
    forward_to_internal_bus(item)

예제 4: 앱으로 탐색하고 API로 구현하기#

좋은 파트너 워크플로는 보통 이렇습니다.

  1. 앱으로 실제 로봇에서 어떤 값과 메시지가 나오는지 확인합니다.

  2. 제품에 필요한 value path만 고릅니다.

  3. 그 path만 API 코드에 옮깁니다.

이 방식은 과도한 데이터 노출을 줄이고, 로봇과 제품 사이의 인터페이스를 깔끔하게 유지해 줍니다.

예제 5: 과거 에러 코드 렌더링#

제품이 에러 코드만 저장해 둔 경우에도, 나중에 더 풍부한 설명을 붙여 보여 줄 수 있습니다.

code = database_row["error_code"]
info = api.lookup_error(code)
if info:
    show_error_card(
        code=info["error_code"],
        description=info["description"],
        explanation=info["explanation"],
        suggestion=info["suggestion"],
    )

포함된 예제 파일#

저장소에는 ``example_api.py``가 포함되어 있습니다. 연결, selected value 읽기, 간단한 watch loop를 시작점으로 제공합니다.