Data Frame Structure
During communication between the IndyDCP server and client, data exchanged consists of a 52-byte header, a 4-byte command, and up to 200 bytes of data, collectively defined as a data frame. The data frame requested by the client to the server is called a request frame, while the data frame sent from the server in response to the request is called a response frame. The response frame is further categorized into an ACK (Acknowledgement) response frame, received upon a successful request, and a NAK (Negative Acknowledgement) response frame, received upon a failed request.
Header | Command | Data |
---|---|---|
52 bytes | 4 bytes | 0 ~ 200 bytes |
Header Format
The below table is a detailed description of the header section within the data frame:
Size (byte) | ||
---|---|---|
Robot Name | 20 | Example: "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 to differentiate between frames (Response frames for requests are sent back with the same ID as the request) |
Data Length | 4 | Data length of data area (unit: bytes, 0~200) |
Reserved | 10 | Reserved field |
Reserved field and Robot State
The first 4 bytes of the reserved field, out of the total 10 bytes in the response frame header, contain the robot's status information. This allows receiving the robot's status without making specific command requests, enabling periodic updates of the robot's status with every response to a request. To retrieve only the robot's status, you can use the command 0 (check) in the command list to exchange headers and periodically monitor the robot's status. The robot states mapped to each bit (1 to 32) are detailed in the table below [table4].
Bit Num | State | Detail |
---|---|---|
1 | Is Robot Running | The robot is in running state. |
2 | Is Robot Ready | The robot is in a controllable state (all servos are On and initialization is complete) |
3 | Is Emergency Stopped | The robot is in Emergency state |
4 | Is Collided | The robot is in Collision state |
5 | Is Error State | The robot is in Error state |
6 | Is Busy | The robot is in Motion state (Motion in progress) |
7 | Is Move Finished | The robot is in the motion finished state |
8 | Is Home | The robot is in the Home Position state |
9 | Is Zero | The robot is in the Zero Position state |
10 | Is In Resetting | The robot is in resetting state |
25 | Is Direct Teaching Mode | The robot is in direct teaching mode |
26 | Is Teaching Mode | The robot is in teaching mode (manual teach, jogging, etc.) |
27 | Is Program Running | The robot program is in execution state (including running and paused) |
28 | Is Program Paused | The robot program is in paused state |
29 | Is Conty Connected | The robot is Connected to Conty |
Command and Data
The format of the header is identical for request frames, ACK response frames, and NAK response frames as follows:.
Robot Name | Robot Version | Step Info | SoF | Invoke ID | Data Length | Reserved |
Request Frame (IndyDCP Client → Server)
Header | Command | Data |
---|---|---|
Common 52 byte |
Command ID 4 bytes |
Depending on the command, the format and length vary 0 ~ 200 bytes |
ACK Response Frame (IndyDCP Server → Client, Upon successful request execution)
Header | Command | Data |
---|---|---|
Common 52 byte |
Command ID, same as the request frame 4 bytes |
Depending on the command, the format and length vary 0 ~ 200 bytes |
reference
The basic structure of request frames and response frames is identical (maximum 256 Byte frame).
NAK Response Frame (IndyDCP Server → Client, Upon failed request execution)
Header | Error | Error code |
---|---|---|
Common 52 byte |
Instead of a command, it has a value of 9999 indicating an error status 4 bytes Intiger |
It carries an error code instead of data 4 bytes Intiger |
reference
1) Hexadecimal data within the frame is represented with the prefix '0x', such as 0xA4, 0x23.
2) String data such as Robot Name or Robot Version is represented as ASCII strings.
3) Values (or data values) for all items, except for a few, are represented in binary format. Boolean is 1 byte, Integer is 4 bytes, and floating-point number is an 8-byte floating point (double).