The EasyIP protocol was first defined by Beck IPC GmbH and is now used by many Festo products.
The protocol defines how computers and controllers can send and request data from other computers and controllers in TCP/IP networked environments based on UDP datagrams on port 995.
EasyIP is a point to point protocol where a client sends or requests data and a server acknowledges or responds. If the server cannot handle the data (block to big, wrong operand etc.) an error packet is send to the client.
An EasyIP controller is usually both client and server this makes the network multimaster. Client only devices could for example be diagnostic devices or visualization computers.
Because no logical connections are needed the number of clients / servers in a network has no theoretical limitation. The number of simultaneous packets send by a client or handled by a server have only limitations dictated by hardware performance or implementation limits.
The protocol supports 32 operand types, each with its own address range. Only ONE operand type access within one EasyIP packet is allowed but a block access of consecutive values / addresses is possible (exception: operand type STRING, only ONE string value / address within ONE EasyIP packet)
The maximum data payload size is limited to 256 values (standard size of one value is 16 bit) (exception: operand type STRING, max. value size: 512 bytes (characters))
Typecode | Name | |||||||
---|---|---|---|---|---|---|---|---|
dec | hex | long | short | Address Range | Access Type | Access Mode | Access | |
1 | 0×01 | Flagword(Memoryword) | FW/MW | 0 … 9999 | R, W | s, b | N, B | |
2 | 0×02 | Input word | IW | 0 … 255 | R(, W) | s, b | N, B | |
3 | 0×03 | Output word | OW | 0 … 255 | R, W | s, b | N, B | |
4 | 0×04 | Register | R | 0 … 255 | R, W | s, b | N, B | |
5 | 0×05 | Timer (Preselect) | TP | 0 … 255 | R, W | s, b | N, B | |
… | … | … | … | … | … | … | … | |
11 | 0x0B | Strings | STR | 0 … 1023 | R, W | s | N | |
… | … | … | … | … | … | … | … | |
32 | 0×20 | Operand 32 | O32 | R, W | s, b | N, B |
Address range limitation is ONLY for compatibility with other 3rd party hardware
R … Read
W … Write
s … single address
b … address block
N … normal
B … bit operation
Every EasyIP packet uses the following header
Size in bytes | Name | |
---|---|---|
1 | Flags | Bit 0 information packet (request or response) Bit 1-2 bit operations (value ) 00 … normal 10 … AND 01 … OR 11 … XOR
Bit 6 do not respond |
1 | Error | Only used in response packets0 ... no error 1 ... operand type error 2 ... offset error 4 ... size error 16 ... no support |
4 | Counter | Set by client, copied by server |
1 | Reserved | Set to 0 |
1 | Senddata type | Type of operand, some types may not be available |
2 | Senddata size | Number of words (bytes for string type)one word equals 16 bit |
2 | Senddata offset | Target offset in server |
1 | Reserved | Set to 0 |
1 | Reqdata type | Type of operand, some types may not be available |
2 | Reqdata size | Number of words (bytes for string type) |
2 | Reqdata offset server | Offset in server |
2 | Reqdata offset client | Target offset in client |
The header is followed by (optional) data in case of SEND or SEND + REQUEST
Size in bytes | Name | |
---|---|---|
N*2 | Data | Data send by client or requested data |
When bit 0 in the flag byte is set the packet is an information packet.
The controller requesting information sets the information flag and the 4 byte counter, all other fields
should be 0.
The controller receiving the request sets the information flag and the response flag, copies the counter and sets the reqdata size to 38 (= 76 bytes).
The following data in additon to the header is send back:
Size in bytes | Name | |
---|---|---|
2 | Information type | Type of information packet1 ... packet with controller and operand info |
2 | Controller type | Type of controller:1 ... FST 2 ... MWT 3 ... DOS 4 ... RTOS 5 ... CoDeSys 6 ... Festo SBOx |
2 | Controller revision high | |
2 | Controller revision low | |
2 | EasyIP revision high | |
2 | EasyIP revision low | |
2 | FW = Operand 1 | number of supported addresses (16 bit values) in flagword address space |
2 | IW = Operand 2 | number of supported addresses in input address space |
2 | OW = Operand 3 | number of supported addresses in output address space |
… | … | number of supported addresses |
2 | STR = Operand 11 | number of supported strings, each string can have up to 512 characters |
… | … | number of supported addresses |
2 | Operand 32 | number of supported addresses |
Copy data to server’s address space.
Normal flow to SEND data would be:
Fetch data from server.
Normal flow to REQUEST data would be:
Copy data to server’s address space AND fetch data from server.
Normal flow to SEND + REQUEST data simultaneous would be:
Fetch server’s information packet.
In computing, endianness is the byte (and sometimes bit) ordering in memory used to represent some kind of data. Typical cases are the order in which integer values are stored as bytes in computer memory (relative to a given memory addressing scheme) and the transmission order over a network or other medium. When specifically talking about bytes, endianness is also referred to simply as byte order.
The EasyIPprotocol uses a LITTLE ENDIAN mechanism.
Hexadecimal Value | 0xA4B3C2D1 | |||
---|---|---|---|---|
Memory Address | 50 | 51 | 52 | 53 |
Offset (Index) | 0 | 1 | 2 | 3 |
Little Endian | D1 | C2 | B3 | A4 |
Big Endian | A4 | B3 | C2 | D1 |