Camino:  Equipo (Dispositivos) > PLC200 > Programa > Communication Network > Modbus TCP >

MBTCP_ReadRegister

Leitura de Registradores em rede Modbus TCP

Previous pageReturn to chapter overviewNext page

Bloque que ejecuta una lectura de hasta 64 registradores de 16 bits (vía Read Holding Registers o Read Input Registers) de un servidor en red Modbus TCP.

 

Representación Ladder

 

MBTCP_READREGISTER_block

 

Estructura del Bloque

 

Tipo de Variable

Nombre

Tipo de Dato

Descripción

VAR_INPUT

Execute

BOOL

Habilitación del bloque

ServerAddress

DWORD

Dirección IP del servidor

(Ej: 192.168.0.1)

ServerPort

WORD

Puerta Modbus TCP del servidor

(Estándar: 502)

UnitID

BYTE

UnitID del servidor

(Estándar: 255)

Function#

BYTE

Código de la función de lectura

InitialDataAddress

WORD

Dirección del registrador inicial a ser leído

NumberOfData

BYTE

Número de registradores a ser leídos (1 a 64)

Timeout#

WORD

Tiempo máximo de espera por la respuesta del servidor [ms]

Offset#

BOOL

Indicación de offset en InitialDataAddress, o sea, necesidad de sustraer 1 de este número

VAR_OUTPUT

Done

BOOL

Habilitación de salida

Active

BOOL

Señalizador de espera de respuesta

Busy

BOOL

Señalizador de que la conexión está ocupada con otra solicitud

Error

BOOL

Señalizador de error en la ejecución

ErrorID

BYTE

Identificador del error ocurrido

Value

BYTE SINT USINT WORD UINT INT DWORD UDINT DINT REAL

Variable que almacena los datos recibidos

VAR

MBTCP_READREGISTER_INST_0

MBTCP_READREGISTER

Instancia de acceso a la estructura del bloque

 

Operación

 

 

Este bloque, cuando detecta un flanco de subida en Execute, verifica si el servidor Modbus TCP, en la dirección especificada en ServerAddress, está libre para envío de datos (variable Busy en nivel FALSE). En caso que lo esté, enviará la solicitud de lectura de un número de registradores indicado por NumberOfData a la dirección InitialDataAddress, utilizando la función escogida en Function# y ajustará la salida Active, reseteándola al recibir la respuesta del servidor. Los datos recibidos serán almacenados en la variable Value. En caso de que el servidor no esté libre, el bloque aguardará que Busy pase a nivel FALSE para reenviar la solicitud.

 

wpshelp_common_fig_note

¡NOTA!

En caso de Execute pase a nivel FALSE y Busy aún esté en nivel TRUE, la solicitud será cancelada.

 

wpshelp_common_fig_note

¡NOTA!

Value es un array del número de bits de NumberOfData multiplicado por 16. O sea, en caso de que NumberOfData sea 16, Value podrá ser un array de 32 posiciones BYTE, 16 posiciones WORD u 8 posiciones DWORD. Es importante verificar esta compatibilidad para no generar errores en el bloque.

 

Cuando Execute tiene valor FALSE, Done permanece FALSE. La salida Done sólo es activada cuando el bloque termina la ejecución exitosamente, permaneciendo en nivel TRUE hasta que Execute reciba FALSE.

 

En caso de que haya algún error en la ejecución, la salida Error será activada y ErrorID exhibirá el código del error según la tabla de abajo.

 

Código

Descripción

0

Ejecutado exitosamente

1

Algún dato de entrada inválido

2

Cliente no habilitado

4

Timeout en la respuesta del servidor

5

Servidor retornó error

6

Falla al conectarse con el servidor

7

Conexión TCP/IP terminada prematuramente

 

Compatibilidad

 

Equipo

Versión

PLC300

1.30 o superior

 

Diagrama de Flujo del Bloque

 

MBTCP_READREGISTER_flowchart

 

Ejemplo en Ladder

 

MBTCP_READREGISTER_example01

 

El ejemplo de arriba solicita la lectura de un número de datos de registradores descrito por DATA_COUNT, posicionados en INIT, en el servidor Modbus TCP de dirección SERVER:PORT, a través de la función Read Holding Register. Esos datos son pasados a VALUE. Finalizado exitosamente el bloque, será activada la salida Done.

 

Ejemplo en ST

 

 El siguiente ejemplo muestra las instrucciones para aplicar el ejemplo anterior en el lenguaje ST.

 

 

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;