Skip to content

데이터 프레임 구조

IndyDCP의 서버와 클라이언트 간의 통신 시 송/수신되는 데이터는 52-byte 크기의 헤더, 4-byte 크기의 커맨드, 그리고 최대 200-byte 크기의 데이터로 이루어져 있습니다. 이를 데이터 프레임 이라고 정의하도록 하겠습니다. 클라이언트에서 서버로 요청하는 데이터프레임은 요청프레임, 서버에서 요청에 응답하여 보내주는 데이터프레임은 응답프레임 입니다. 응답프레임은 요청 성공시 수신하게되는 ACK (Acknowledgement) 응답프레임 과 실패 시 수신하게되는 NAK (Negative Acknowledgement) 응답프레임 두 가지로 나뉩니다.

Header Command Data
52 bytes 4 bytes 0 ~ 200 bytes

헤더 형식 (Header Format)

아래 는 데이터프레임 중 헤더영역에 대한 상세한 설명입니다.

항목 크기 (byte) 내용
Robot Name 20
  • 클라이언트 \rightarrow 서버 : "NRMK-[Robot Name]" (ASCII string)
  • 서버 \rightarrow 클라이언트 : "NRMK-[Robot Name]" (ASCII string)
  • 참고: 빈 공간은 NULL 값으로 채움
    예시: "NRMK-Indy7" (ASCII Code: 0x4E 0x52 0x4D 0x4B 0x2D 0x49 0x6E 0x64 0x79 0x52 0x50 0x00 ...)
    Robot Version 12
  • 클라이언트 \rightarrow 서버 : NULL
  • 서버 \rightarrow 클라이언트 : IndyFramework 버전 (ASCII string)
  • 예시: 2.0.3 (ASCII Code: 0x32 0x2E 0x30 0x2E 0x33 0x00 ...)
    STEP Info 1
  • 클라이언트 \rightarrow 서버 : 미사용 (0x00)
  • 서버 \rightarrow 클라이언트 : STEP HW 버전 (1-byte)
  • 예시: STEP 1,2,3에 맞게 0x01, 0x02, 0x03
    Source of Frame (SoF) 1
  • 클라이언트 \rightarrow 서버 : 0x34
  • 서버 \rightarrow 클라이언트 : 0x12
  • Invoke ID 4 프레임간의 순서를 구분하기 위한 ID
    (요청에 대한 응답 프레임이 요청과 같은 ID 값을 붙여 보내줌)
    Data Length 4 데이터 영역의 데이터 길이 (unit: bytes, 0~200)
    Reserved 10 예약 필드
  • 2.2.3 버전 이후 4바이트는 로봇상태로 사용
  • 예약필드와 로봇상태

    Indy Framework 2.2.3 버전 이후부터는 응답프레임 헤더영역의 예약 필드 10바이트 중 앞의 4바이트에는 로봇의 상태정보가 담겨있습니다. 이를 통해 로봇 상태에 대하여 각각 명령어 요청을 하지 않아도 되며, 매 요청에 대한 응답 시 마다 로봇 상태를 받을 수 있습니다. 로봇 상태만을 받아오고 싶은 경우, 명령어 리스트의 0번 (check)을 통해 헤더만 주고받아 로봇 상태를 주기적으로 확인할 수 있습니다. 각 비트 (1부터 32까지)에 매핑된 로봇 상태는 아래 와 같습니다.

    Bit Num 상태 설명
    1 Is Robot Running 로봇이 실행중인 상태
    2 Is Robot Ready 로봇이 제어 가능한 상태(모든 Servo On 및 초기화 완료)
    3 Is Emergency Stopped 로봇 비상정지 상태
    4 Is Collided 로봇 충돌 상태
    5 Is Error State 로봇 에러 상태
    6 Is Busy 로봇이 움직이고 있는 상태 (모션 중)
    7 Is Move Finished 로봇의 모션이 끝난 상태
    8 Is Home 로봇이 홈 포지션인 상태
    9 Is Zero 로봇이 제로 포지션인 상태
    10 Is In Resetting 로봇이 리셋중인 상태
    25 Is Direct Teaching Mode 직접교시 모드 상태
    26 Is Teaching Mode 로봇 교시 모드 상태 (직접교시, Jogging 등)
    27 Is Program Running 로봇 프로그램이 실행 상태 (실행중, 일시정지중 포함)
    28 Is Program Paused 로봇 프로그램이 일시정지 상태
    29 Is Conty Connected 콘티 연결 상태

    커맨드와 데이터

    요청프레임, ACK 응답프레임, NAK 응답프레임 모두 헤더의 형식은 아래와 같이 동일합니다.

    Robot Name Robot Version Step Info SoF Invoke ID Data Length Reserved

    요청 프레임 (IndyDCP 클라이언트 → 서버)

    Header (헤더) Command (커맨드) Data (데이터)
    공통
    52 byte
    명령어 ID
    4 bytes
    명령어에 따라 포맷 및 길이가 다름
    0 ~ 200 bytes

    ACK 응답 프레임 (IndyDCP 서버 → 클라이언트, 요청 수행 성공 시)

    Header (헤더) Command (커맨드) Data (데이터)
    공통
    52 byte
    명령어 ID, 요청프레임과 동일
    4 bytes
    명령어에 따라 포맷 및 길이가 다름
    0 ~ 200 bytes

    참고

    기본적으로 요청 프레임과 응답 프레임의 구조는 동일하다 (최대 256 Byte 프레임).

    NAK 응답 프레임 (IndyDCP 서버 → 클라이언트, 요청 수행 실패 시)

    Header (헤더) Error (에러상태) Error code (에러코드)
    공통
    52 byte
    커맨드 대신 에러상태를 나타내는 값 9999를 가짐
    4 bytes 정수
    데이터 대신 에러코드를 가짐
    4 bytes 정수

    참고

    1) 프레임 내의 16진수 데이터는 0xA4, 0x23과 같이 접두사 '0x'를 통해 표현한다.
    2) Robot Name이나 Robot Version과 같이 문자열 데이터는 ASCII String 으로 표현한다.
    3) 일부를 제외한 모든 항목에 대한 값 (또는 데이터 값)은 Binary (바이너리 값)으로 표현되며, Boolean은 1 Byte Integer, 정수는 4 Byte Integer, 실수는 8 Byte Floating Point (Double)을 사용한다.