Modbus_Master: comunicarse como maestro Modbus (S7-1200, S7-1500) - STEP 7

MODBUS (RTU) (S7-1200, S7-1500)

ft:publication_title
MODBUS (RTU) (S7-1200, S7-1500)
Product
STEP 7
Version
V20
Publication date
11/2024
Language
es-ES
Modbus_Master: comunicarse como maestro Modbus

Nota

Uso con CM1241

El uso de esta instrucción con un CM 1241 solo es posible con una versión de firmware V2.1 o superior del módulo.

Descripción

La instrucción Modbus_Master se comunica en calidad de maestro Modbus a través de un puerto configurado con la instrucción Modbus_Comm_Load. Si se inserta la instrucción Modbus_Master en el programa, se asigna automáticamente un bloque de datos de instancia. El parámetro MB_DB de la instrucción Modbus_Comm_Load debe interconectarse con el parámetro MB_DB (estático) de la instrucción Modbus_Master .

Nota

Para un DB de instancia de la instrucción Modbus_Master no está permitido activar la remanencia (Retain).

Parámetros

Parámetro

Declaración

Tipo de datos

Estándar

Descripción

S7-
1200/1500

S7-
300/400/
WinAC

REQ

IN

Bool

FALSE

FALSE = no hay orden
TRUE = orden de enviar datos al esclavo Modbus

MB_ADDR

IN

UInt

Word

Dirección de estación Modbus RTU:

Área de direccionamiento estándar (1 a 247 y 0 para Broadcast)
Área de direccionamiento ampliada (1 a 65535 y 0 para Broadcast)

El valor 0 está reservado para el Broadcast (difusión) del telegrama a todos los esclavos Modbus. Para el Broadcast (difusión) solo se soportan los códigos de función Modbus 05, 06, 15 y 16.

MODE

IN

USInt

Byte

0

Selección de modo: indica el tipo de orden (lectura, escritura o diagnóstico). Encontrará más información en la tabla de las funciones Modbus más adelante.

DATA_ADDR

IN

UDInt

DWord

0

Dirección inicial en el esclavo: indica la dirección inicial de los datos a los que debe accederse en el esclavo Modbus. Encontrará las direcciones válidas en la tabla de las funciones Modbus más adelante.

DATA_LEN

IN

UInt

Word

0

Longitud de datos: indica el número de bits o palabras a los que debe acceder esta orden. Encontrará las longitudes válidas en la tabla de las funciones Modbus más adelante.

COM_RST

IN/OUT

---

Bool

FALSE

Inicialización de la instrucción Modbus_Master

Con TRUE se inicializa la instrucción. Seguidamente, la instrucción ajusta COM_RST de nuevo a FALSE.

Nota:
El parámetro solo está disponible para instrucciones S7-300/400.

DATA_PTR

IN/OUT

Variant

Any

Puntero de datos: apunta a la dirección de marca o DB de los datos que deben escribirse o leerse.

A partir de la versión de la instrucción V3.0:

El parámetro puede apuntar también a un área de memoria optimizada. En el área de memoria optimizada puede haber un elemento single o un array con los siguientes tipos de datos: Bool, Byte, Char, Word, Int, DWord, DInt, Real, USInt, UInt, UDInt, SInt, WChar. Cualquier otro tipo de datos da lugar al mensaje de error 16#818C.

DONE

OUT

Bool

FALSE

El bit DONE es TRUE durante un ciclo después de que se haya ejecutado correctamente la última orden.

BUSY

OUT

Bool

  • FALSE – no hay órdenes activas para Modbus_Master

  • TRUE – se está procesando una orden para Modbus_Master

ERROR

OUT

Bool

FALSE

El bit ERROR es TRUE durante un ciclo después de que la última orden haya finalizado con errores. El código de error del parámetro STATUS solo es válido en el ciclo en que ERROR = TRUE.

STATUS

OUT

Word

0

Código de error (consulte Mensajes de error)

Variables en el bloque de datos del maestro Modbus

La tabla siguiente muestra las variables estáticas públicas del DB de instancia de Modbus_Master que pueden utilizarse en el programa.

Variables estáticas en el DB de instancia

Variable

Tipo de datos

Estándar

Descripción

Blocked_Proc_Timeout

Real

3.0

Tiempo (en segundos) que debe esperarse una instancia bloqueada del maestro Modbus antes de que esta se elimine como ACTIVA. Esto puede suceder, por ejemplo, cuando se ha emitido una orden de maestro y, seguidamente, el programa deja de llamar la función del maestro antes de que la orden haya finalizado por completo. El valor de tiempo debe ser mayor que 0 y menor que 55 segundos, de lo contrario se produce un error.

Ver también los apartados "Reglas para la comunicación del Modbus-Master" y "Llamada de la instrucción Modbus_Master con diferentes ajustes de parámetros".

Extended_Addressing

Bool

FALSE

Configura la dirección de estación del esclavo como byte único o doble.

  • FALSE = dirección de un byte; 0 a 247

  • TRUE = dirección de dos bytes (corresponde al direccionamiento avanzado);
    0 a 65535

Compatibility_Mode 1)

Bool

FALSE

Modo de compatibilidad con CP 341, CP 441-2 y ET 200S 1Sl con driver para Modbus RTU y con ET 200S 1SI para Modbus.
El valor predeterminado es 0.

  • FALSE = según especificación Modbus, no compatible

  • TRUE = compatible

    • Con FC1 y FC2 se aplica lo siguiente: Los datos leídos en la trama de recepción se escriben palabra por palabra en la memoria direccionada de la CPU y se sustituyen byte por byte.
      Si el número de bits que deben transmitirse no es múltiplo de 16, los bits no relevantes de la última palabra se ponen a cero.

    • Con FC15 se aplica lo siguiente: Las palabras que deben transmitirse se leen una a una en la memoria direccionada y se escriben byte por byte en la trama de transmisión.
      Si el número de bits que deben transmitirse no es múltiplo de 8, los bits no relevantes del último byte se leen sin cambios en la memoria direccionada y se insertan en la trama de transmisión.

MB_DB

MB_BASE

-

El parámetro MB_DB de la instrucción Modbus_Comm_Load debe conectarse con el parámetro MB_DB de la instrucción Modbus_Master.

El programa puede escribir valores en las variables Blocked_Proc_Timeout y Extended_Addressing para controlar las operaciones del maestro Modbus.

Reglas para la comunicación del Modbus-Master

  • Modbus_Comm_Load debe ejecutarse para configurar un puerto con el fin de que la instrucción Modbus_Master pueda comunicarse con dicho puerto.

  • Si debe utilizarse un puerto como Modbus Master, Modbus_Slave no debe utilizar este puerto. Con este puerto pueden utilizarse una o varias instancias de Modbus_Master 1). Sin embargo, todas las ejecuciones de Modbus_Master deben utilizar el mismo DB de instancia para el puerto.

  • Las instrucciones Modbus no utilizan eventos de alarma de la comunicación para controlar el proceso de comunicación. El programa debe consultar la instrucción Modbus_Master si hay órdenes terminadas (DONE, ERROR).

  • Se recomienda llamar todas las ejecuciones de Modbus_Master para un puerto concreto desde un OB de ciclo de programa. Las instrucciones de maestro Modbus solo pueden ejecutarse en cada caso en un ciclo de programa o bien en un nivel de procesamiento cíclico/controlado por tiempo. No deben procesarse en distintos niveles de procesamiento. La interrupción de preferencia de una instrucción de maestro Modbus por otra instrucción de maestro Modbus en un nivel de procesamiento con mayor prioridad provoca un funcionamiento incorrecto. Las instrucciones de maestro Modbus no deben procesarse en niveles de arranque, diagnóstico o errores de tiempo.

1) El concepto "instancia de maestro Modbus" significa en este caso una llamada de la instrucción Modbus_Master con la misma interconexión que una instrucción Modbus_Comm_Load y el mismo ajuste para los parámetros MB_ADDR, MODE, DATA_ADDR y DATA_LEN .

Ejemplo.

Modbus_Master se llama con MODE=0 y DATA_ADDR=10

Esta orden está activa hasta que finaliza con DONE=1 o ERROR=1 o hasta que ha transcurrido la vigilancia de tiempo parametrizada en el parámetro Blocked_Proc_Timeout . Si una vez finalizada la vigilancia de tiempo se inicia una nueva orden antes de que la orden anterior haya finalizado, la orden anterior se cancelará sin mensaje de error.

En caso de que se produzca una segunda llamada de la instrucción con los mismos datos de instancia pero con ajustes distintos en los parámetros MODE y DATA_ADDR mientras se esté ejecutando la orden, esta segunda llamada finalizará con ERROR=1 y STATUS=8200.

Llamada de la instrucción Modbus_Master con diferentes ajustes de parámetros

Si en el programa deben disponerse varias llamadas de la instrucción Modbus_Master con distintos ajustes para MB_ADDR, MODE, DATA_ADDR o DATA_LEN , debe asegurarse de que no haya más de una llamada activa a la vez, ya que, de lo contrario, se emitirá el mensaje de error 16#8200 (la interfaz está ocupada por una orden en curso).

Si el procesamiento de la llamada no puede completarse, se activará la vigilancia de tiempo a través del parámetro Blocked_Proc_Timeout y se cancelará la orden en curso.

Parámetro REQ

FALSE = no hay orden; TRUE = orden de enviar datos al esclavo Modbus

Habilitación de la transferencia solicitada. Con ello, el contenido del búfer se transfiere a la interfaz de comunicación punto a punto.

Por medio de los parámetros DATA_ADDR y MODE se selecciona el código de función Modbus.

DATA_ADDR (dirección inicial Modbus en el esclavo): indica la dirección inicial de los datos a los que debe accederse en el esclavo Modbus.

La instrucción Modbus_Master utiliza una entrada MODE en lugar de una entrada de código de función. La combinación entre MODE y DATA_ADDR especifica el código de función que se utiliza en la trama Modbus propiamente dicha. La tabla siguiente muestra la asignación entre el parámetro MODE, el código de función Modbus y el área de direcciones Modbus en DATA_ADDR.

Funciones Modbus

MODE

DATA_ADDR (dirección Modbus)

DATA_LEN
(longitud de los datos)

Código de función Modbus

Operación y datos

0

 

Bits por orden

01

Leer bits de salida:

1

a

9999

1

a

2000/1992 1

0

a

9998

0

 

Bits por orden

02

Leer bits de entrada:

10001

a

19999

1

a

2000/1992 1

0

a

9998

0

 

Palabras por orden

03

Leer registro de paradas:

40001

a

49999

1

a

125/124 1

0

a

9998

400001

a

465535

1

a

125/124 1

0

a

65534

0

 

Palabras por orden

04

Leer palabras de entrada:

30001

a

39999

1

a

125/124 1

0

a

9998

1

 

Bit por orden

05

Escribir un bit de salida:

1

a

9999

1

   

0

a

9998

1

 

1 palabra por solicitud

06

Escribir un registro de paradas:

40001

a

49999

1

   

0

a

9998

400001

a

465535

1

   

0

a

65524

1

 

Bits por orden

15

Escribir varios bits de salida:

1

a

9999

2

a

1968/1960 1

0

a

9998

1

 

Palabras por orden

16

Escribir varios registros de parada:

40001

a

49999

2

a

123/122

0

a

9998

400001

a

465534

2

a

123/122 1

0

a

65534

2 2

Bits por orden

15

Escribir uno o varios bits de salida:

1

a

9999

1

a

1968/1960 1

0

a

9998

2 2

 

Palabras por orden

16

Escribir uno o varios registros de paradas:

40001

a

49999

1

a

123

0

a

9998

400001

a

465535

1

a

122 1

0

a

65534

11

Los dos operandos DATA_ADDR y DATA_LEN de Modbus_Master se ignoran en esta función.

11

Leer palabra de estado y contador de eventos de la comunicación del esclavo. La palabra de estado indica la ocupación (0 - no ocupado, 0xFFFF - ocupado). El contador de eventos se incrementa cada vez que se procesa correctamente una trama.

80

 

1 palabra por solicitud

08

Comprobar el estado del esclavo mediante el código de diagnóstico de datos 0x0000 (test de bucle de control - el esclavo devuelve un eco de la orden)

-

   

1

   

-

   

81

 

1 palabra por solicitud

08

Inicializar el contador de eventos del esclavo mediante el código de diagnóstico de datos 0x000A

-

   

1

   

-

   

104 3

 

Palabras por orden

04

Leer palabras de entrada

0

a

65535

1

a

125/124 1

0

a

65535

3 a 10,
12 a 79,
82 a 103, 105 a 255

-

   

-

   

Reservado

Parámetro DATA_PTR

El parámetro DATA_PTR indica la dirección DB o M en la que se escribe o de la que se lee. Si se utiliza un bloque de datos, hay que crear un bloque de datos global que ponga a disposición la memoria de datos para procesos de lectura y escritura en esclavos Modbus.

Nota

S7-1200/1500 - El bloque de datos direccionado mediante DATA_PTR debe permitir el direccionamiento directo

El bloque de datos debe permitir el direccionamiento directo (absoluto) y simbólico.

Nota

Uso del código de función 5

Con el código de función 5 puede activarse o borrarse un bit individual.

Para activar un bit debe predefinirse el valor "16#FF00" en la primera palabra del área de marcas o de DB direccionada mediante DATA_PTR.

  • En S7-1200 también se puede predefinir el valor "16#0100" para activar un bit.

  • Para desactivar un bit debe predefinirse el valor "16#0000" en la primera palabra del área de marcas o de DB direccionada mediante DATA_PTR.

El resto de los valores se rechazan con ERROR = TRUE y STATUS = 16#8384.

Estructuras de bloques de datos para el parámetro DATA_PTR

  • Estos tipos de datos son válidos para leer palabras del área de direcciones Modbus (DATA_PTR) 30001 a 39999, 40001 a 49999 y 400001 a 465535, así como para escribir palabras del área de direcciones Modbus (parámetro DATA_PTR) 40001 a 49999 y 400001 a 465535.

    • Matriz estándar de los tipos de datos WORD, UINT o INT

    • Estructura denominada del tipo WORD, UINT o INT en la que cada elemento tiene un nombre unívoco y un tipo de datos de 16 bits.

    • Estructura compleja denominada en la que cada elemento tiene un nombre unívoco y un tipo de datos de 16 o 32 bits.

  • Para leer y escribir bits para el área de direcciones Modbus (parámetro DATA_PTR) 00001 a 09999 y para leer bits de 10001 a 19999.

    • Campo estándar de tipos de datos booleanos.

    • Estructura booleana denominada de variables booleanas con una denominación unívoca.

  • Se recomienda que cada instrucción Modbus_Master tenga un área de memoria propia y separada para reducir el riesgo de daños en los datos.

  • No es necesario que las áreas de memoria de DATA_PTR estén en el mismo bloque de datos global. Es posible crear un bloque de datos con varias áreas para procesos de lectura Modbus, un bloque de datos para procesos de escritura Modbus o un bloque de datos para cada estación esclava.

Versiones de la instrucción

Aunque la versión 3.0 tiene exactamente tiene la misma funcionalidad que la versión 2.4, se ha incrementado el número por motivos internos.