Camino:  Equipo (Dispositivos) > CFW100 > Ladder > Communication Network > Modbus RTU >

MB_WriteBinary

Escritura de Binarios en red Modbus RTU

Previous pageReturn to chapter overviewNext page

Bloque que ejecuta una escritura de hasta 128 datos binarios (vía Write Single Coil o Write Multiple Coils) en un esclavo en red Modbus RTU.

 

Representación Ladder

 

MB_WRITEBINARY_block

 

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 escritura

InitialDataAddress

WORD

Dirección del bit inicial donde los datos serán escritos

NumberOfData

BYTE

Número de bits a ser escritos (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

Value

BOOL

Variable que almacena los datos a ser escritos

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

VAR

MB_WRITEBINARY

_INST_0

MB_WRITEBINARY

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 escritura de los valores de Value en un número de bits indicado por NumberOfData a la dirección InitialDataAddress, utilizando la función escogida en Function# y ajustando la salida Active, reseteándola al recibir la respuesta del esclavo. En caso de que el esclavo 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 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

 

MB_WRITEBINARY_flowchart

 

Ejemplo en Ladder

 

MB_WRITEBINARY_example01

 

El ejemplo de arriba solicita la escritura del dato contenido en VALUE, de tamaño descrito por DATA_COUNT, en las direcciones posicionadas a partir de INIT, del esclavo Modbus RTU, de dirección SLAVE, a través de la función Write Single Coil. 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_WRITEBINARY_INST_0 : FB_MB_WriteBinary;

END_VAR

 

MB_WRITEBINARY_INST_0.Execute := DI1;

MB_WRITEBINARY_INST_0(

   SlaveAddress:=SLAVE,

   Function:=5,

   InitialDataAddress:=INIT,

   NumberOfData:=4,

   Timeout:=30,

   Offset:=1,

   Value:=VALUE);

DO1 := MB_WRITEBINARY_INST_0.Done;