Skip to content

Data Frame Format

TCP frame format of IndyDCP is composed of 52-byte header, 4-byte command, and (maximum) 200-byte data. We called this Data Frame. The data frame requested from the client to the server is the Request Frame and sent by the server in response to the request is the Response Frame. There are 2 kinds of response frame. One is the ACK (acknowledgement) Response Frame which is responded when request is succeeded and the other is NAK (negative acknowledgement) Response Frame which is responded when request is failed.

Header Command Data
52 bytes 4 bytes 0 ~ 200 bytes

Header Format

The details about header (part of data frame) are described in below table.

Category Size (byte) Contents
Robot Name 20
  • Client \rightarrow Server : "NRMK-[Robot Name]" (ASCII string)
  • Server \rightarrow Client : "NRMK-[Robot Name]" (ASCII string)
  • Ref. : Empty space filled with NULL
    Ex. : "NRMK-Indy7" (ASCII Code: 0x4E 0x52 0x4D 0x4B 0x2D 0x49 0x6E 0x64 0x79 0x52 0x50 0x00 ...)
    Robot Version 12
  • Client \rightarrow Server : NULL
  • Server \rightarrow Client : Version of IndyFramework (ASCII string)
  • Ex. : 2.0.3 (ASCII Code: 0x32 0x2E 0x30 0x2E 0x33 0x00 ...)
    STEP Info 1
  • Client \rightarrow Server : Not use (0x00)
  • Server \rightarrow Client : Version of STEP HW (1-byte)
  • Ex. : STEP 1,2,3 respectively, 0x01, 0x02, 0x03
    Source of Frame (SoF) 1
  • Client \rightarrow Server : 0x34
  • Server \rightarrow Client : 0x12
  • Invoke ID 4 ID for distinguishing the order of request frames
    (Response frame sends same ID as requested)
    Data Length 4 Data length of data frame (unit: bytes, 0~200)
    Reserved 10 Reserved field
  • After Indy Framework 2.2.3 version, 4 byte is used for representing robot status
  • Reserved Field and Robot Status

    After Indy Framework 2.2.3, 4 bytes among the 10 bytes reserved domain contains robot status. Owing to this, client does not need to request robot status, and can obtain robot status through every request. If client wants to periodically get robot status, then just send and receive the header through command zero (check). The robot status mapped to each bit (from 1 to 32) is shown in the table below.

    Bit Num Status Description
    1 Is Robot Running The robot is operating
    2 Is Robot Ready The robot can be controlled (All servos turn on)
    3 Is Emergency Stopped The robot is in emergency stop
    4 Is Collided The robot detects collision
    5 Is Error State The robot is in error state
    6 Is Busy The robot is moving (during motion)
    7 Is Move Finished The robot's movement is finished
    8 Is Home The robot is in the home position
    9 Is Zero The robot is in the zero position
    10 Is In Resetting The robot is in resetting
    25 Is Direct Teaching Mode The robot is in direct teaching mode
    26 Is Teaching Mode The robot is in teaching mode (including direct teaching and jogging)
    27 Is Program Running A robot program is running (including run and pause)
    28 Is Program Paused The robot program is in pause state
    29 Is Conty Connected Conty is connected

    Commands and Data

    Request frame, ACK response frame and NAK response frame have same header structure described below.

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

    Request Frame (IndyDCP Client → Server)

    Header Command Data
    52 byte Command ID
    4 bytes
    Format and length are different depending on a command
    0 ~ 200 bytes

    ACK Response Frame (IndyDCP server → client, when the request is succeeded)

    Header Command Data
    52 byte Command ID, same as the request frame, 4 bytes Format and length are different depending on a command, 0 ~ 200 bytes


    Basically, format of the response frame is same as the request frame (maximum 256 Byte frame).

    NAK Response Frame (IndyDCP server → client, when the request is failed)

    Head Error State Error Code
    52 byte Instead of command ID, value is 9999 that indicates error state, 4 Byte Integer Instead of data, value represents error code, 4 Byte Integer


    1) The hexadecimal data in the data frame is represented by prefix '0x' like '0xA4', '0x23'.
    2) The string data such as 'Robot Name' and 'Robot Version' are represented by ASCII string.
    3) Most of data are represented by binary value. Boolean number uses 1 Byte Integer, integer number uses 4 Byte integer, and real number uses 8 Byte Floating Point (Double).