Navigation:  Equipments (Devices) > PLC200 > Program > Communication Network > Modbus TCP >

MBTCP_ReadRegister

Leitura de Registradores em rede Modbus TCP

Previous pageReturn to chapter overviewNext page

Block that performs a reading of up to 64 16-bit registers (via Read Holding Registers or Read Input Registers) of a server on the Modbus TCP network.

 

Ladder Representation

 

MBTCP_READREGISTER_block

 

Block Structure

 

Variable Type

Name

Data Type

Description

VAR_INPUT

Execute

BOOL

Block enabling

ServerAddress

DWORD

Server IP address

(Ex: 192.168.0.1)

ServerPort

WORD

Modbus TCP Port of the server

(Standard: 502)

UnitID

BYTE

UnitID do servidor

(Standard: 255)

Function#

BYTE

Reading function code

InitialDataAddress

WORD

Initial register address to be read

NumberOfData

BYTE

Number of registers to be read (1 to 64)

Timeout#

WORD

Maximum waiting time for the server response [ms]

Offset#

BOOL

Offset Indication in InitialDataAddress, i.e., need to subtract 1 from this number

VAR_OUTPUT

Done

BOOL

Output enabling

Active

BOOL

Awaiting response flag

Busy

BOOL

Flag indicating the connection is busy with another request

Error

BOOL

Error in the execution flag

ErrorID

BYTE

Identifier of the occurred error

Value

BYTE SINT USINT WORD UINT INT DWORD UDINT DINT REAL

Variable that stores the received data

VAR

MBTCP_READREGISTER_INST_0

MBTCP_READREGISTER

Instance of access to block structure

 

Operation

 

When this block detects a leading edge on Execute, it checks whether the Modbus TCP server in specified address in ServerAddress is free to send data (Busy variable at FALSE level). If so, it sends the reading request of a number of registers indicated by NumberOfData in InitialDataAddress address using chosen function in Function# and sets the Active output, resetting it when receiving the response from the server. The received data is stored in the Value variable. If the server is not free, the block waits Busy go to FALSE level to resubmit the request.

 

wpshelp_common_fig_note

NOTE!

If Execute goes to FALSE level and Busy is still at TRUE level, the request is canceled.

 

wpshelp_common_fig_note

NOTE!

Value is an array of number of bits NumberOfData multiplied by 16. That is, if NumberOfData is 16, Value can be an array of 32 BYTE positions, 16 WORD positions or 8 DWORD positions. It is important to check this compatibility not to generate errors in the block.

 

When Execute has FALSE value, Done remains FALSE. The Done output is only activated when the block finishes executing successfully, remaining at TRUE level until Execute receives FALSE.

 

If there is any error in the execution, the Error output is enabled and ErrorID displays an error code according to the table below.

 

Code

Description

0

Executed successfully

1

Invalid input data

2

Client not enabled

4

Timeout in server response

5

Server returned error

6

Failed to connect to server

7

TCP/IP connection terminated prematurely

 

Compatibility

 

Device

Version

PLC300

1.30 or higher

 

Block Flowchart

 

MBTCP_READREGISTER_flowchart

 

Example in Ladder

 

MBTCP_READREGISTER_example01

 

The above example requests reading of a number of register data described by DATA_COUNT positioned in the INIT1 in Modbus TCP server of SERVER:PORT address through the Read Holding Register function. These data are forwarded to VALUE. The block ends successfully, Done output is activated.

 

Example in ST

 

 The example below displays the instructions for applying the example above in the ST language.

 

 

VAR

  SERVER : DWORD := 16#C0A8000A; // 192.168.0.10 = 3232235530

  PORT : WORD := 502;

  UNITID : BYTE := 255;

   INIT : WORD;

   DATA_COUNT : BYTE;

  VALUE : ARRAY [0..4] OF WORD;

   MBTCP_READREGISTER_INST_0 : FB_MBTCP_ReadRegister;

END_VAR

 

MBTCP_READREGISTER_INST_0.Execute := DI1;

MBTCP_READREGISTER_INST_0(

   ServerAddress:=SERVER,

   ServerPort:=PORT,

   UnitID:=UNITID,

   Function:=3,

   InitialDataAddress:=INIT,

   NumberOfData:=DATA_COUNT,

   Timeout:=50,

   Offset:=0,

  Value=>VALUE);

DO1 := MBTCP_READREGISTER_INST_0.Done;