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 |
Ex. : "NRMK-Indy7" (ASCII Code: 0x4E 0x52 0x4D 0x4B 0x2D 0x49 0x6E 0x64 0x79 0x52 0x50 0x00 ...) |
---|---|---|
**Robot Version** | 12 |
|
**STEP Info** | 1 |
|
**Source of Frame (SoF)** | 1 |
|
**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 |
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 |
Note
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 |
Note
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).