Skip to content

Modbus TCP/IP Interface

The Modbus TCP/IP Interface is used to control and interact with the drag&bot program from an external device. Where drag&bot act as a Modbus Client/Master (called Client here and after) and the external device as a Modbus Server/Slave (called Server here and after).

Currently, the external device can control starting of a program, stopping of a program, pausing of a program, resuming of a program and the robot speed.

The Modbus TCP/IP interface supports setting and getting of different types of values (16-bit Integer, 32-bit Interger, 1-bit Coil, 32-bit Float and 192-bit Pose) using drag&bot function blocks Refer here.

Important

First you need to deploy a program into the robot system to be able to start it using the Modbus interface Refer here.

Important

Please note that in Modbus all the addresses of the registers/Coils are absolute.

Communication

Info

  • In the following the notation 16#.... means a value in hexadecimal notation.
  • Modbus are able to hold maximum of 2 characters per each register (character size = 8 bits).

Protocol

The drag&bot modbus client communicates with the external device (modbus server) using Big Endian(ABCD), which means the most significant 16 bit of the data is placed in the register with the lowest address and the other 16 bit of data is placed in the next register.

01

Note-1

  • In case of a program name or string with an odd number of characters, then the register that is holding the last name/string character will have the 16#00xx order , where xx is the character hexadecimal value.

Header Registers

Five Modbus registers (Holding registers) are used to communicate the commands with drag&bot. The start address n of the header registers can be selected by the user in the component setup.

Register No. Register address Description
0 n Command execution status Refer here
1 n+1 Commands (program starting, stopping, pausing..etc.) Refer here
2 n+2 drag&bot program status (program is running, stopped, finished, ... etc.) Refer here
3 n+3 Depend on command type Refer here
4 n+4 Depend on command type Refer here

Register-0

Register-0 is used to communicate the command execution and results. This register is set by both the Client and the Server.

The table below shows the meaning of each register value.

Register-0 value hex (decimal) Description Set by
16#0000 (0) Command executed successfully / Idle Client/Server
16#0001 (1) Execute the command Server
16#0064 (100) Error : Command not known Client

Register-1

Register-1 is used to communicate the command type. This register is set by the Server.

Table below show the commands represented by the register values.

Register-1 value hex (decimal) Description
16#0001 (1) Start program with name
16#0002 (2) Reserved for future use
16#0003 (3) Stop the program
16#0004 (4) Pause the program
16#0005 (5) Resume the program
16#0006 (6) Set robot override speed

Register-2

Register-2 is used to communicate the drag&bot program status type. This register is set by the Client.

Table below show the status represented by the register values.

Register-2 value hex (decimal) Description
16#0000 (0) Program is stopped
16#0001 (1) Program is running
16#0002 (2) Program is paused
16#0003 (3) Program finished successfully
16#0004 (4) Error in program execution
16#0005 (5) Unknown

Register-3

Register-3 use is based on the command type (register-1). This register is set by the Server.

Table below show the register value and use for each command type.

Register-1 value hex (decimal) Register-3 value hex (decimal) Description
16#0001 (1) 16#xxxx (x) Address of the first register that contains the program name
16#0006 (6) 16#0001 (1) to 16#0064 (100) Robot override speed in % (1 to 100%)
Other 16#0000 (0) The register value has no effect

Register-4

Register-4 use is based on the command type (register-1). This register is set by the Server.

Table below show the register value and use for each command type.

Register-1 value hex (decimal) Register-4 value hex (deximal) Description
16#0001 (1) 16#xxxx (x) Program name length in registers (1 register = 2 ASCII char)
Other 16#0000 (0) The register value has no effect

Example

Below figure show the header registers values to start a program with name "test".

02

Important

  • In case of a program name or string with an odd number of characters, then the register that is holding the last name/string character will have the 16#00xx order , where xx is the character hexadecimal value. Refer here

Pose Registers

The Pose is used to describe the robot tool position in the space (x, y, z, rz, ry, rx) using 6 degree of freedom. Where each value (ex. rz) is represented by a 32-bit float number (2 registers) using Big Endian(ABCD) Refer here.

Important

  • Pose values communicated with external systems should use the units METER for position and RAD for orientation values to be consistent with the units used in the drag&bot system.

The table below shows how the registers are structured for a Pose.

Register no. Register address Contains Value
0 n x-coordinate value most significant 16 bit
1 n+1 x-coordinate value least significant 16 bit
2 n+2 y-coordinate value most significant 16 bit
3 n+3 y-coordinate value least significant 16 bit
4 n+4 z-coordinate value most significant 16 bit
5 n+5 z-coordinate value least significant 16 bit
6 n+6 rz rotation around z-axis value most significant 16 bit
7 n+7 rz rotation around z-axis value least significant 16 bit
8 n+8 ry rotation around y-axis value most significant 16 bit
9 n+9 ry rotation around y-axis value least significant 16 bit
10 n+10 rx rotation around x-axis value most significant 16 bit
11 n+11 rx rotation around x-axis value least significant 16 bit

Function Blocks

Set Coil

This function block is used to set one 1-bit coil data to a Modbus server.

Field name Data type Description
Inputs Address Integer The integer address of the Modbus Coil to set the coil value.
Value Boolean The coil value to be set.
Outputs Success Boolean The writing execution success flag.

Set Multiple Coils

This function block is used to set multiple 1-bit coil data to a Modbus server.

Field name Data type Description
Inputs Address Integer The integer address of the first Modbus Coil to set the coil value(s).
Value String The coil value(s) to be set in numeric notation. To set multiple values in consequtive addresses, use commas to separate the values, e.g. '1,0,1'.
Outputs Success Boolean The writing execution success flag.

Get Coil

This function block is used to get the 1-bit Coil data from a Modbus server.

Field name Data type Description
Inputs Address Integer The integer address of the Modbus coil.
Input Coil Boolean Specify the coil type as input coil or holding coil
Do await value Boolean Activate waiting until the coil value is equal to the given value.
Awaited value Boolean The awaited coil value (false is equals to 0; true is equals to 1).
Timeout Float Timeout in seconds for awaiting the value before a TIMEOUT error is thrown. A value of 0 waits infinitely.
Outputs Value Boolean The read value.

Set 16bit Integer

This function block is used to set one 16-bit integer data (Holding Register) to a Modbus server using Big Endian(AB).

Field name Data type Description
Inputs Address Integer The integer address of the Modbus register to set the 16-bit value.
Value Integer The 16-bit integer value to be set.
Outputs Success Boolean The writing execution success flag.

Set Multiple 16bit Integers

This function block is used set multiple 16-bit integer data (Holding Register) to a Modbus server using Big Endian(AB).

Field name Data type Description
Inputs Address Integer The integer address of the first Modbus register to set the 16-bit value(s).
Value String The 16-bit integer value(s) to be set. To set multiple values in consequtive addresses, use commas to separate the values, e.g. '33,576'.
Outputs Success Boolean The writing execution success flag.

Get 16bit Integer

This function block is used to get the 16-bit integer data (Holding Register) from a Modbus server using Big Endian(AB).

Field name Data type Description
Inputs Address Integer The integer address of the Modbus register, which contains the 16-bit integer value.
Input Register Boolean Specify the register type as input register or holding register
Do await value Boolean Activate waiting until the register value is equal to the given value.
Awaited value Integer The awaited 16-bit integer value.
Timeout Float Timeout in seconds for awaiting the value before a TIMEOUT error is thrown. A value of 0 waits infinitely.
Outputs Value Integer The read value.

Set 32bit Integer

This function block is used to set one 32-bit integer data (Holding Register) to a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of the Modbus register to set the 32-bit value.
Value Integer The 32-bit integer value to be set.
Outputs Success Boolean The writing execution success flag.

Set Multiple 32bit Integers

This function block is used to set multiple 32-bit integer data (Holding Register) to a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of the first Modbus register to set the 32-bit value(s).
Value String The 32-bit integer value(s) to be set. To set multiple values in consequitve addresses, use commas to separate the value, e.g. '28545,-534874'.
Outputs Success Boolean The writing execution success flag.

Get 32bit Integer

This function block is used to get the 32-bit integer data (Holding Register) from a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of Modbus register, which contains the 32-bit value.
Input Register Boolean Specify the register type as input register or holding register
Do await value Boolean Activate waiting until the register value is equal to the given value.
Awaited value Integer The awaited 32-bit integer value.
Timeout Float Timeout in seconds for awaiting the value before a TIMEOUT error is thrown. A value of 0 waits infinitely.
Outputs Value Integer The read value.

Set 32bit Float

This function block is used to set one 32-bit float data (Holding Register) to a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of the Modbus register to set the 32-bit value.
Value Float The 32-bit float value to be set.
Outputs Success Boolean The writing execution success flag.

Set Multiple 32bit Floats

This function block is used to set multiple 32-bit float data (Holding Register) to a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of the first Modbus register to set the 32-bit value(s).
Value String The 32-bit float value(s) to be set. To set multiple values in consequtive addresses, use commas to separate the values, e.g. '0.2,-5.42'.
Outputs Success Boolean The writing execution success flag.

Get 32bit Float

This function block is used to get the 32-bit float data (Holding Register) from a Modbus server using Big Endian(ABCD).

Field name Data type Description
Inputs Address Integer The integer address of Modbus register, which contains the 32-bit float value.
Input Register Boolean Specify the register type as input register or holding register
Do await value Boolean Activate waiting until the register value is equal to the given value.
Awaited value Float The awaited 32-bit integer value.
Tolerance Float The tolerance of the awaited value. A very slight inaccuracy of the received value is usual for floating point values and is caused by system internal conversions.
Timeout Float Timeout in seconds for awaiting the value before a TIMEOUT error is thrown. A value of 0 waits infinitely.
Outputs Value Float The read value.

Set Pose

This function block is used to set the Pose data (Holding Register) to a Modbus server using Big Endian(ABCD).

Important

  • Pose values communicated with external systems should use the units METER for position and RAD for orientation values to be consistent with the units used in the drag&bot system.
Field name Data type Description
Inputs Address Integer The integer address of the first Modbus register to set the Pose data.
Pose Pose The Pose to be set on the Modbus register.
Outputs Success Boolean The writing execution success flag.

Get Pose

This function block is used to get the Pose data (Holding Register) from a Modbus server using Big Endian(ABCD).

Important

  • Pose values communicated with external systems should use the units METER for position and RAD for orientation values to be consistent with the units used in the drag&bot system.
Field name Data type Description
Inputs Address Integer The integer address of the first Modbus register that contains the Pose values.
Input Register Boolean Specify the register type as input register or holding register
Outputs Pose Pose The resulting Pose read from the Modbus register.

External Resources

You can search in the Internet for an online tool to encode the ASCII characters (Program name) as Hexadecimal values to use it in your registers Refer here.