Bloque que ejecuta una lectura de hasta 128 datos binarios (vía Read Coils o Read Discrete Inputs) de un esclavo en red Modbus RTU.
Representación Ladder

Estructura del Bloque
Tipo de Variable |
Nombre |
Tipo de Dato |
Descripción |
VAR_INPUT |
Execute |
BOOL |
Habilitación del bloque |
SlaveAddress |
BYTE |
Dirección del esclavo |
|
Function# |
BYTE |
Código de la función de lectura |
|
InitialDataAddress |
WORD |
Dirección del bit inicial de los datos a ser leídos |
|
NumberOfData |
BYTE |
Número de bits a ser leídos (1 a 128) |
|
Timeout# |
WORD |
Tiempo máximo de espera por la respuesta del esclavo [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 interfaz RS485 está ocupada con otra solicitud |
|
Error |
BOOL |
Señalizador de error en la ejecución |
|
ErrorID |
BYTE |
Identificador del error ocurrido |
|
Value |
BOOL |
Variable que almacena los datos recibidos |
|
VAR |
MB_READBINARY_INST_0 |
MB_READBINARY |
Instancia de acceso a la estructura del bloque |
Operación
Este bloque, cuando detecta un flanco de subida en Execute, verifica si el esclavo Modbus RTU en la dirección especificada en SlaveAddress está libre para envío de datos (variable Busy en nivel FALSE). En caso de que lo esté, enviará la solicitud de lectura de un número de bits 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 esclavo. Los datos recibidos serán almacenados en la variable Value. En caso de que el esclavo no esté libre, el bloque aguardará que Busy pase a nivel FALSE para reenviar la solicitud.
|
¡NOTA! En caso de Execute pase a nivel FALSE y Busy aún esté en nivel TRUE, la solicitud será cancelada. |
|
¡NOTA! Value es un array de tamaño igual a NumberOfData. 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 |
Maestro no habilitado |
4 |
Timeout en la respuesta del esclavo |
5 |
El esclavo retornó error |
Diagrama de Flujo del Bloque

Ejemplo en Ladder

El ejemplo de arriba solicita la lectura de un número de datos binarios descrito por DATA_COUNT, posicionados en INIT en el esclavo Modbus RTU de dirección SLAVE, a través de la función Read Discrete Input. 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 SLAVE : BYTE := 1; INIT : WORD; VALUE : ARRAY [0..4] OF BOOL; MB_READBINARY_INST_0 : FB_MB_ReadBinary; END_VAR
MB_READBINARY_INST_0.Execute := DI1; MB_READBINARY_INST_0( SlaveAddress:=SLAVE, Function:=2, InitialDataAddress:=INIT, NumberOfData:=4, Timeout:=30, Offset:=0, Value=>VALUE); DO1 := MB_READBINARY_INST_0.Done;
|
|---|