0% encontró este documento útil (0 votos)
194 vistas225 páginas

Instrucciones de Fecha y Hora S7-1200

Este documento describe las instrucciones y funciones relacionadas con fechas, horas y relojes que se pueden usar en un controlador programable S7-1200. Incluye instrucciones para convertir entre tipos de datos de fecha y hora, sumar y restar valores de fecha y hora, calcular diferencias entre fechas y horas, y combinar fechas y horas en un solo valor. También advierte sobre los riesgos de seguridad al sincronizar la hora del sistema a través de NTP y explica que esta función está desactivada de forma predeterminada en la CPU S7-1200.

Cargado por

Jerson Sebastian
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
194 vistas225 páginas

Instrucciones de Fecha y Hora S7-1200

Este documento describe las instrucciones y funciones relacionadas con fechas, horas y relojes que se pueden usar en un controlador programable S7-1200. Incluye instrucciones para convertir entre tipos de datos de fecha y hora, sumar y restar valores de fecha y hora, calcular diferencias entre fechas y horas, y combinar fechas y horas en un solo valor. También advierte sobre los riesgos de seguridad al sincronizar la hora del sistema a través de NTP y explica que esta función está desactivada de forma predeterminada en la CPU S7-1200.

Cargado por

Jerson Sebastian
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Instrucciones básicas

8.10 Desplazamiento y rotación

Controlador programable S7-1200


340 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas 9
9.1 Funciones de fecha, hora y reloj

9.1.1 Instrucciones de fecha y hora


Utilice las instrucciones de fecha y hora para realizar cálculos de calendario y hora.
● T_CONV convierte un valor a o desde (tipos de datos de fecha y hora) y (tipos de datos
de byte, palabra y palabra doble).
● T_ADD suma los valores de Time y DTL: (Time + Time = Time) o (DTL + Time = DTL)
● T_SUB resta los valores de Time y DTL: (Time - Time = Time) o (DTL - Time = DTL)
● T_DIFF da la diferencia entre dos valores de DTL en forma de valor de Time: DTL - DTL
= Time
● T_COMBINE combina un valor Date y un valor Time_and_Date para crear un valor DTL.
Para más información sobre el formato de los datos DTL y Time, consulte el apartado sobre
los tipos de datos Fecha y hora (Página 132).

Tabla 9- 1 Instrucción T_CONV (Convertir y extraer tiempos)

KOP / FUP Ejemplo de SCL Descripción


out := DINT_TO_TIME( T_CONV convierte un valor a o desde (tipos de datos de fecha y
in:=_variant_in); hora) y (tipos de datos de byte, palabra y palabra doble).

out := TIME_TO_DINT(
in:=_variant_in);
1 En cuadros KOP y FUP: Haga clic en "???" y seleccione los tipos de datos de origen/destino en el menú desplegable.
2 En SCL: Arrastre T_CONV del árbol de instrucciones y suéltelo en el editor del programa y, a continuación, seleccione
los tipos de datos de origen/destino.

Tabla 9- 2 Tipos de datos válidos para las conversiones de T_CONV

Tipo de datos IN (u OUT) Tipos de datos OUT (o IN)


TIME (milisegundos) DInt, Int, SInt, UDInt, UInt, USInt, TOD
Solo para SCL: Byte, Word, Dword
DATE (número de días desde el 1 de enero de DInt, Int, SInt, UDInt, UInt, USInt, DTL
1990) Solo para SCL: Byte, Word, Dword
TOD (milisegundos desde medianoche: DInt, Int, SInt, UDInt, UInt, USInt, TIME, DTL
24:00:00,000) Solo para SCL: Byte, Word, Dword

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 341
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

Nota
Uso de T_CONV para convertir un tamaño de datos mayor en un tamaño de datos menor
Los valores de datos se pueden truncar cuando convierte un tipo de datos mayor con más
bytes en un tipo de datos menor con menos bytes. Si esto se produce, ENO se pone a 0.

Conversión a/de tipo de datos DTL


DTL (Date and Time Long) contiene los datos de año, mes, fecha y hora. Los datos de DTL
se pueden convertir a/de tipos de datos DATE y TOD.
Sin embargo, la conversión de DTL con los datos de DATE solo afecta a los valores de año,
mes y día. La conversión de DTL con datos de TOD solo afecta a los valores de hora,
minutos y segundos.
Cuando T_CONV convierte a DTL, los elementos de datos no afectados en el formato DTL
no cambiarán.

Tabla 9- 3 Instrucciones T_ADD (Sumar tiempos) y T_SUB (Restar tiempos)

KOP / FUP SCL Descripción


out := T_ADD( T_ADD suma el valor de la entrada IN1 (tipos de datos DTL o Time)
in1:=_variant_in, con el valor de la entrada IN2 Time. El parámetro OUT proporciona el
in2:=_time_in); resultado DTL o Time. Son posibles dos operaciones con estos tipos
de datos, a saber:
• Time + Time = Time
• DTL + Time = DTL
out := T_SUB( T_SUB resta el valor IN2 Time del valor IN1 (DTL o Time). En el pa-
in1:=_variant_in, rámetro OUT se deposita el valor de diferencia como tipo de datos
in2:=_time_in); DTL o Time. Son posibles operaciones de dos tipos de datos.
• Time - Time = Time
• DTL - Time = DTL

1 En KOP y FUP: haga clic en "???" y seleccione los tipos de datos del menú desplegable.

Tabla 9- 4 Tipos de datos para los parámetros T_ADD y T_SUB

Parámetro y tipo Tipo de datos Descripción


IN11 IN DTL, Time Valor DTL o Time
IN2 IN Time Valor Time que debe sumarse o restarse
OUT OUT DTL, Time DTL o suma o diferencia Time
1 Seleccione el tipo de datos de IN1 en la lista desplegable debajo del nombre de la instrucción. La selección del tipo de
datos de IN1 ajusta también el tipo de datos del parámetro OUT.

Controlador programable S7-1200


342 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

Tabla 9- 5 Instrucción T_DIFF (Diferencia de tiempo)

KOP / FUP SCL Descripción


out := T_DIFF( T_DIFF resta el valor DTL (IN2) del valor DTL (IN1). En el parámetro
in1:=_DTL_in, OUT se deposita el valor de diferencia como tipo de datos Time.
in2:=_DTL_in); • DTL - DTL = Time

Tabla 9- 6 Tipos de datos para los parámetros T_DIFF

Parámetro y tipo Tipo de datos Descripción


IN1 IN DTL Valor DTL
IN2 IN DTL Valor DTL que se debe restar
OUT OUT Time Diferencia Time

Códigos de condición: ENO = 1 significa que no se ha producido ningún error. ENO = 0 y el


parámetro OUT = 0 significan errores:
● El valor DTL no es válido
● El valor Time no es válido

Tabla 9- 7 Instrucción T_COMBINE (Combinar tiempos)

KOP / FUP SCL Descripción


out := T_COMBINE combina un valor Date y un valor Time_of_Day
CONCAT_DATE_TOD( para crear un valor DTL.
In1 := _date_in,
In2 := _tod_in);

1 Observe que la instrucción T_COMBINE de las Instrucciones avanzadas se corresponde con la función
CONCAT_DATE_TOD en SCL.

Tabla 9- 8 Tipos de datos para los parámetros T_COMBINE

Parámetro y tipo Tipo de datos Descripción


IN1 IN Date El valor Date que debe combinarse debe estar entre
DATE#1990-01-01 y DATE#2089-12-31
IN2 IN Time_of_Day Valores Time_of_Day que deben combinarse
OUT OUT DTL Valor DTL

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 343
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

9.1.2 Funciones de reloj

ADVERTENCIA
Riesgo de ataques a las redes mediante la sincronización del Network Time Protocol
(NTP)
Si un atacante puede acceder a las redes por sincronización del Network Time Protocol
(NTP), posiblemente alterará el control del proceso cambiando la hora del sistema de la
CPU. Las alteraciones en el control del proceso pueden causar la muerte, heridas graves o
daños materiales.
La función de cliente NTP de la CPU S7-1200 está desactivada por defecto y, si se activa,
solo permite a las direcciones IP configuradas actuar como servidor NTP. La CPU
desactiva esta función por defecto, y hay que configurar esta función para permitir
correcciones de la hora del sistema de la CPU por control remoto.
La CPU S7-1200 soporta alarmas horarias e instrucciones de reloj que dependen de la
precisión de la hora del sistema de la CPU. Si se configura NTP y se acepta la
sincronización horaria desde un servidor, hay que asegurarse de que el servidor es una
fuente fiable. Si no se comprueba, se puede producir una brecha de seguridad que permita
a un usuario desconocido alterar el control del proceso cambiando la hora del sistema de
la CPU.
Para más información sobre seguridad y recomendaciones, consulte nuestras "Guías
operacionales sobre seguridad industrial"
(http://www.industry.siemens.com/topics/global/en/industrial-
security/Documents/operational_guidelines_industrial_security_en.pdf) en la página de
atención al cliente de Siemens.

Controlador programable S7-1200


344 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

Las instrucciones de reloj se utilizan para ajustar y leer el reloj del sistema de la CPU. El tipo
de datos DTL (Página 132) se utiliza para proporcionar valores de fecha y hora.

Tabla 9- 9 Instrucciones para la hora del sistema

KOP / FUP SCL Descripción


ret_val := WR_SYS_T (Ajustar la hora) ajusta el reloj de la CPU con un
WR_SYS_T( valor DTL en el parámetro IN. Este valor de hora no incluye la
diferencia con respecto a la hora local ni tampoco al horario de
in:=_DTL_in_); verano.
ret_val := RD_SYS_T (leer la hora) lee la hora actual del sistema de la
RD_SYS_T( CPU. Este valor de hora no incluye la diferencia con respecto a
la hora local ni tampoco al horario de verano.
out=>_DTL_out);
ret_val := RD_LOC_T (leer hora local) da la hora local actual de la CPU
RD_LOC_T( como tipo de datos DTL. Este valor de tiempo refleja la zona
horaria local ajustada correctamente según el cambio de horario
out=>_DTL_out); de verano/invierno (si está configurado).
ret_val := WR_LOC_T (Escribir hora local) establece la fecha y hora del
WR_LOC_T( reloj de la CPU. El usuario asigna la información de fecha y hora
como hora local en LOCTIME con el tipo de datos de DTL. La
LOCTIME:=DTL_in_, instrucción utiliza la estructura de DB "TimeTransformationRule
DST:_in_; (Página 347)" para calcular la hora del sistema. La granularidad
de la información horaria para la hora local y del sistema es
específica del producto y es, como mínimo, de un milisegundo.
Los valores de entrada en el parámetro LOCTIME que son me-
nores que los admitidos por la CPU se redondean durante el
cálculo de la hora del sistema.
Nota: debe usar la configuración de dispositivos de la CPU para
establecer las propiedades de "Hora" (zona horaria, activación
de DST, inicio de DST y parada de DST). De lo contrario,
WR_LOC_T no puede interpretar el cambio de hora de DST.

Tabla 9- 10 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN IN DTL Hora que debe ajustarse en el reloj del sistema de la CPU
OUT OUT DTL RD_SYS_T: hora de sistema actual de la CPU
RD_LOC_T: hora local actual, incluido cualquier ajuste para el
horario de verano, si está configurado
LOCTIME IN DTL WR_LOC_T: hora local
DST IN BOOL WR_LOC_T: Daylight Saving Time solo se evalúa durante la
"hora doble" cuando el reloj cambia al horario de verano.
• TRUE = horario de verano (primera hora)
• FALSE = horario de invierno (segunda hora)
RET_VAL OUT Int Código de condición de ejecución

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 345
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

● La hora local se calcula aplicando la zona horaria y las variaciones correspondientes al


horario de verano/invierno ajustadas en los parámetros de la ficha de configuración del
dispositivo "Hora".
● La configuración de la zona horaria es un offset respecto a la hora UTC o GTM.
● La configuración del horario de verano especifica el mes, semana, día y hora de
comienzo del horario de verano.
● La configuración del horario estándar especifica el mes, semana, día y hora de comienzo
del horario estándar.
● La diferencia con respecto a la zona horaria se aplica siempre al valor de hora del
sistema. La diferencia con respecto al horario de verano se aplica únicamente si el
horario de verano está en vigor.

Nota
Horario de invierno/verano y configuración del tiempo de inicio estándar
La propiedad "Hora del día" para el "Inicio del horario de verano" de la configuración de
dispositivo de la CPU debe ser la hora local.

Códigos de condición: ENO = 1 significa que no se ha producido ningún error. ENO = 0


significa que ha ocurrido un error de ejecución. El código de condición se indica en la salida
RET_VAL.

RET_VAL (W#16#....) Descripción


0000 La hora local actual está en horario estándar.
0001 Se ha configurado el horario de verano y la hora local actual está en horario de verano.
8080 La hora local no está disponible o el valor LOCTIME no es válido.
8081 El valor de año no es válido o el valor de hora asignado por el parámetro LOCTIME no es válido.
8082 Valor de mes no válido (byte 2 en formato DTL)
8083 Valor de día no válido (byte 3 en formato DTL)
8084 Valor de hora no válido (byte 5 en formato DTL)
8085 Valor de minuto no válido (byte 6 en formato DTL)
8086 Valor de segundo no válido (byte 7 en formato DTL)
8087 Valor de nanosegundo no válido (bytes 8 a 11 en formato DTL)
8089 El valor de hora no existe (la hora ya ha pasado al cambiar al horario de verano)
80B0 Ha fallado el reloj de tiempo real
80B1 La estructura "TimeTransformationRule" no se ha definido.

Controlador programable S7-1200


346 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

9.1.3 Estructura de datos TimeTransformationRule

Descripción
Las reglas de cambio para el horario de invierno y el de verano se definen en la estructura
TimeTransformationRule. Descripción de la estructura:

Nombre Tipo de datos Descripción


TimeTransformationRule STRUCT
Bias INT Diferencia horaria entre hora local y UTC [minutos]
Rango: -1439 a 1439
DaylightBias INT Diferencia horaria entre horario de verano y horario de invierno [minutos]
Rango: 0 a 60
DaylightStartMonth USINT Mes de cambio a horario de verano
Rango: 1 a 12
DaylightStartWeek USINT Semana de cambio a horario de verano
1 = Primera aparición del día de la semana en el mes
5 = Última aparición del día de la semana en el mes
DaylightStartWeekday USINT Día de la semana del cambio a horario de verano:
1 = domingo
DaylightStartHour USINT Hora del cambio a horario de verano:
Rango: 0 a 23
DaylightStartMinute USINT Minuto del cambio a horario de verano
Rango: 0 a 59
StandardStartMonth USINT Mes del cambio a horario de invierno
Rango: 1 a 12
StandardStartWeek USINT Semana del cambio a horario de invierno
1 = Primera aparición del día de la semana en el mes
5 = Última aparición del día de la semana en el mes
StandardStartWeekday USINT Día de la semana del cambio de horario de invierno:
1 = domingo
StandardStartHour USINT Hora de la semana del cambio de horario de invierno
Rango: 0 a 23
StandardStartMinute USINT Minuto de la semana del cambio de horario de invierno
Rango: 0 a 59
TimeZoneName STRING[80] Nombre de la zona horaria: "(GMT+01:00) Ámsterdam, Berlín, Berna,
Roma, Estocolmo, Viena"

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 347
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

9.1.4 SET_TIMEZONE (ajustar zona horaria)

Tabla 9- 11 Instrucción SET_TIMEZONE

KOP / FUP SCL Descripción


"SET_TIMEZONE_DB"( Ajusta la zona horaria local y los paráme-
REQ:=_bool_in, tros de horario de invierno/verano utilizados
Timezone:=_struct_in, para convertir la hora del sistema de la
DONE=>_bool_out_, CPU en hora local.
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_);

1 En el ejemplo SCL, "SET_TIMEZONE_DB" es el nombre del DB de instancia.

Tabla 9- 12 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool REQ=1: Ejecutar función
Timezone IN TimeTransformationRule Reglas para la transformación de la hora del sistema
en hora local
DONE OUT Bool Función completada
BUSY OUT Bool Función ocupada
ERROR OUT Bool Error detectado
STATUS OUT Word Resultado de la función / mensaje de error

Para configurar manualmente los parámetros de zona horaria en la CPU, utilice las
propiedades "Hora del día" de la ficha "General" de la configuración del dispositivo.
Use la instrucción SET_TIMEZONE para ajustar la configuración de la hora local. Los
parámetros de la estructura "TimeTransformationRule (Página 347)" asignan la zona horaria
local y el momento de cambio automático entre el horario de invierno y verano.
Códigos de condición: ENO = 1 significa que no se ha producido ningún error. ENO = 0
significa que ha ocurrido un error de ejecución. El código de condición se indica en la salida
STATUS.

STATUS Descripción
(W#16#....)
0 No hay error
7000 No se está procesando ninguna tarea
7001 Comienza el procesamiento de la tarea. Parámetro BUSY = 1, DONE = 0
7002 Llamada intermedia (REQ irrelevante): Instrucción ya activa; BUSY tiene el valor "1".
808x Error en el componente x-th: Por ejemplo 8084 indica que DaylightStartWeekif no es un valor de 1 a 5.

Controlador programable S7-1200


348 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

9.1.5 RTM (contador de horas de funcionamiento)

Tabla 9- 13 Instrucción RTM

KOP / FUP SCL Descripción


RTM(NR:=_uint_in_, La instrucción RTM (Contador de horas de funcionamiento)
MODE:=_byte_in_, puede inicializar, arrancar, parar y leer los contadores de horas
PV:=_dint_in_, de funcionamiento de la CPU.
CQ=>_bool_out_,
CV=>_dint_out_);

Tabla 9- 14 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


NR IN UInt Número de contadores de horas de funcionamiento: (valores
posibles: 0..9)
MODE IN Byte RTM Número de modo de ejecución:
• 0 = Recuperar datos (el estado se escribe entonces en CQ y
el valor actual en CV)
• 1 = Arrancar (en el último valor del contador)
• 2 = Stop
• 4 = Inicializar (al valor especificado en PV)
• 5 = Inicializar (al valor especificado en PV) y después arran-
car
• 6 = Inicializar (al valor especificado en PV) y después parar
• 7 = Guardar todos los valores RTM de la CPU en la MC
(Memory Card)
PV IN DInt Predeterminar valor de horas para el contador de horas de fun-
cionamiento especificado
RET_VAL OUT Int Resultado de la función / mensaje de error
CQ OUT Bool Estado del contador de horas de funcionamiento (1 = contando)
CV OUT DInt Valor actual de horas de funcionamiento para el contador espe-
cificado

La CPU utiliza un máximo de 10 contadores de horas de funcionamiento para conocer las


horas de funcionamiento de subsistemas de control críticos. Hay que arrancar cada uno de
los contadores individuales con una ejecución RTM para cada temporizador. Todos los
contadores de horas de funcionamiento se paran cuando la CPU hace una transición de
RUN a STOP. También es posible parar los temporizadores individualmente con una
ejecución de RTM, modo 2.
Cuando la CPU hace una transición de STOP a RUN, es necesario reiniciar los
temporizadores de horas con una ejecución de RTM para cada temporizador que se
arranca. Una vez que el valor de un contador de horas de funcionamiento supera las
2147483647 horas, el contaje se detiene y se transmite el error "Desbordamiento". Hay que
ejecutar la instrucción RTM una vez por cada temporizador que se reinicia, o bien modificar
el temporizador.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 349
Instrucciones avanzadas
9.1 Funciones de fecha, hora y reloj

Un fallo de alimentación de la CPU o una desconexión y reconexión provoca un proceso de


cierre (power down), que guarda los valores actuales de horas de funcionamiento en una
memoria remanente. Cuando la CPU vuelve a arrancar, los valores de horas de
funcionamiento guardados se vuelven a cargar en los temporizadores, y los totales
anteriores de horas de funcionamiento no se pierden. Los contadores de horas de
funcionamiento deben reiniciarse para acumular horas de funcionamiento adicionales.
El programa también puede utilizar la ejecución de RTM en modo 7 para guardar los valores
de contador de horas de funcionamiento en una Memory Card. Los estados de todos los
temporizadores en el momento en que RTM se ejecuta en modo 7 se guardan en la Memory
Card. Los valores memorizados pueden ser incorrectos con el tiempo, ya que los
contadores de funcionamiento se arrancan y detienen durante una sesión de funcionamiento
del programa. Los valores de la Memory Card deben actualizarse periódicamente para
capturar eventos importantes en runtime. La ventaja que se obtiene de guardar los valores
RTM en la Memory Card radica en que se puede insertar la Memory Card en una CPU de
sustitución, en la que estarán disponibles los valores del programa y los valores RTM
memorizados. Si los valores de RTM no se guardaron en la Memory Card, los valores de
temporizador se perderán (en una CPU de sustitución).

Nota
Debe evitarse un número excesivo de llamadas del programa para operaciones de escritura
en Memory Card
Minimice las operaciones de escritura en Memory Card flash para ampliar la vida útil de las
Memory Card.

Tabla 9- 15 Códigos de condición

RET_VAL (W#16#....) Descripción


0 No hay error
8080 Número de contador de horas de funcionamiento incorrecto
8081 Un valor negativo ha pasado al parámetro PV
8082 Desbordamiento del contador de horas de funcionamiento
8091 El parámetro de entrada MODE contiene un valor no válido
80B1 El valor no puede guardarse en la MC (MODE=7)

Controlador programable S7-1200


350 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

9.2 Cadena y carácter

9.2.1 Sinopsis del tipo de datos String

Tipo de datos STRING


Los datos String se almacenan como encabezado de 2 bytes seguido de 254 bytes de
caracteres en código ASCII. Un encabezado String contiene dos longitudes. El primer byte
contiene la longitud máxima que se indica entre corchetes cuando se inicializa una cadena o
254 (ajuste predeterminado). El segundo byte del encabezado es la longitud actual, es decir,
el número de caracteres válidos de la cadena. La longitud actual debe ser menor o igual a la
longitud máxima. El número de bytes almacenados que ocupa el formato String es 2 bytes
mayor que la longitud máxima.

Inicialización de los datos String


Los datos de entrada y salida String deben inicializarse como cadenas válidas en la
memoria antes de ejecutar cualquier instrucción con cadenas.

Datos String válidos


Una cadena válida tiene una longitud máxima que debe ser mayor que cero pero menor que
255. La longitud actual debe ser menor o igual a la longitud máxima.
Las cadenas no pueden asignarse a áreas de memoria I ni Q.
Encontrará más información en: Formato del tipo de datos String (Página 134).

9.2.2 S_MOVE (desplazar cadena de caracteres)

Tabla 9- 16 Instrucción Desplazar cadena de caracteres

KOP / FUP SCL Descripción


out := in; Copiar la cadena IN fuente en la posición OUT. La instrucción S_MOVE no afecta a
los contenidos de la cadena fuente.

Tabla 9- 17 Tipos de datos para los parámetros

Parámetro Tipo de datos Descripción


IN String Cadena fuente
OUT String Dirección de destino

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 351
Instrucciones avanzadas
9.2 Cadena y carácter

Si la longitud real de la cadena en la entrada IN excede la longitud máxima de una cadena


guardada en la salida OUT, se copia la parte de la cadena IN que cabe en la cadena OUT.

9.2.3 Instrucciones de conversión de cadenas

9.2.3.1 Instrucciones S_CONV, STRG_VAL y VAL_STRG (Convertir a/de cadena de


caracteres y número)
Las siguientes instrucciones permiten convertir cadenas de caracteres numéricos en valores
numéricos, y viceversa:
● S_CONV convierte una cadena numérica en un valor numérico, o viceversa.
● STRG_VAL convierte una cadena numérica en un valor numérico con opciones de
formato.
● VAL_STRG convierte un valor numérico en una cadena numérica con opciones de
formato.

S_CONV (convertir cadena de caracteres)

Tabla 9- 18 Instrucciones de conversión de cadenas

KOP / FUP SCL Descripción


out := Convierte una cadena de caracteres en el valor correspondiente o
<Type>_TO_<Type>(in); viceversa. La instrucción S_CONV no tiene opciones de formato
de salida. Gracias a ello, la instrucción S_CONV es más simple
pero menos flexible que las instrucciones STRG_VAL y
VAL_STRG.
1 En KOP y FUP: haga clic en "???" y seleccione el tipo de datos en la lista desplegable.
2 En SCL: seleccione S_CONV en las Instrucciones avanzadas y responda las preguntas acerca de los tipos de datos
para la conversión. Seguidamente, STEP 7 proporciona la instrucción de conversión adecuada.

Tabla 9- 19 Tipos de datos (cadena en valor)

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Entrada que contiene la
cadena de caracteres
OUT OUT String, WString, Char, WChar, SInt, Int, DInt, USInt, UInt, UDInt, Valor numérico resultante
Real, LReal

La conversión del parámetro IN que contiene la cadena comienza en el primer carácter y


continúa hasta el final de la cadena, o bien hasta que se encuentra el primer carácter que no
sea "0" a "9", "+", "-" o ".". El resultado se deposita en la ubicación que indica el parámetro
OUT. Si el valor numérico resultante no está comprendido en el rango del tipo de datos de
OUT, el parámetro OUT se pone a 0 y ENO adopta el estado lógico FALSE (falso). De lo
contrario, el parámetro OUT contendrá un resultado válido y ENO adoptará el estado lógico
TRUE (verdadero).

Controlador programable S7-1200


352 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Reglas de formato de las cadenas de entrada:


● Si se utiliza un punto decimal en la cadena IN, es preciso utilizar el carácter ".".
● Las comas "," utilizadas como separadores de miles a la izquierda del punto decimal
están permitidas, aunque se ignoran.
● Los espacios iniciales se ignoran.

S_CONV (convertir cadena de caracteres)

Tabla 9- 20 Tipos de datos (valor en cadena)

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString, Char, WChar, SInt, Int, DInt, USInt, UInt, UDInt, Entrada que contiene el valor
Real, LReal numérico
OUT OUT String, WString Cadena de caracteres resul-
tante

Un valor entero, entero sin signo o en coma flotante de la entrada IN se convierte en una
cadena de caracteres correspondiente que se deposita en OUT. El parámetro OUT debe
referenciar una cadena válida antes de ejecutarse la conversión. Una cadena válida consta
de una longitud de cadena máxima en el primer byte, la longitud de cadena actual en el
segundo byte y los caracteres de la cadena actuales en los siguientes bytes. La cadena
convertida sustituye los caracteres de la cadena OUT comenzando en el primer carácter y
ajusta el byte de longitud actual de la cadena OUT. El byte de longitud máxima de la cadena
OUT no se modifica.
El número de caracteres que se sustituyen depende del tipo de datos del parámetro IN y del
valor numérico. El número de caracteres sustituidos no debe exceder la longitud de la
cadena depositada en el parámetro OUT. La longitud máxima (primer byte) de la cadena
OUT debe ser mayor o igual al número máximo esperado de caracteres convertidos. En la
tabla siguiente se muestran ejemplos de conversión de valor en cadena con S_CONV:
Reglas de formato de las cadenas de salida:
● Los valores que se escriben en el parámetro OUT aparecen sin signo "+" inicial.
● Se utiliza la representación en coma fija (no la notación exponencial).
● El carácter de punto "." se utiliza para representar el punto decimal si el parámetro IN
tiene el tipo de datos Real.
● Los valores se justifican a la derecha en la cadena de salida y van precedidos por
caracteres de espacio que ocupan las posiciones de caracteres vacías.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 353
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 21 Longitudes de cadena máximas para cada tipo de datos

Tipo de da- Posiciones Ejemplo de cadena convertida1 Longitud total de la cadena incluyendo los bytes de
tos IN de caracteres longitud máxima y actual
asignadas
por S_CONV
USInt 4 "x255" 6
SInt 4 "-128" 6
UInt 6 "x65535" 8
Int 6 "-32768" 8
UDInt 11 "x4294967295" 13
DInt 11 "-2147483648" 13
Real 14 "x-3.402823E+38" 16
"x-1.175495E-38"
"x+1.175495E-38"
"x+3.402823E+38"
LReal 21 "-1.7976931348623E+308" 23
"-2.2250738585072E-308"
"+2.2250738585072E-308"
"+1.7976931348623E+308"
1 Los caracteres "x" representan los caracteres de espacio que ocupan las posiciones vacías en el campo justificado a la
derecha que se ha asignado para el valor convertido.

STRG_VAL (convertir cadena de caracteres en valor numérico)

Tabla 9- 22 Instrucción de conversión de cadena en valor

KOP / FUP SCL Descripción


"STRG_VAL"( Convierte una cadena de caracteres numéricos en un
in:=_string_in, número entero o en coma flotante correspondiente.
format:=_word_in,
p:=uint_in,
out=>_variant_out);

1 En KOP y FUP: haga clic en "???" y seleccione el tipo de datos en la lista desplegable.

Tabla 9- 23 Tipos de datos para la instrucción STRG_VAL

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Cadena de caracteres ASCII que debe convertirse
FORMAT IN Word Opciones de formato de salida
P IN UInt, Byte, USInt IN: Índice al primer carácter que debe convertirse (pri-
mer carácter = 1)
OUT OUT SInt, Int, DInt, USInt, UInt, UDInt, Valor numérico convertido
Real, LReal

Controlador programable S7-1200


354 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

La conversión comienza en el offset de carácter P de la cadena IN y continúa hasta su final,


o bien hasta que se encuentra el primer carácter que no sea "+", "-", ".", ",", "e", "E" o "0" a
"9". El resultado se deposita en la posición que indica el parámetro OUT.
Los datos String deben inicializarse antes de la ejecución como cadena válida en la
memoria.
El parámetro FORMAT de la instrucción STRG_VAL se define a continuación. Los bits no
utilizados deben ponerse a cero.

Tabla 9- 24 Formato de la instrucción STRG_VAL

Bit Bit 8 Bit 7 Bit 0


16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 f r

f = Formato de notación 1= Notación exponencial


0 = Notación en coma fija
r = Formato de punto decimal 1 = "," (coma)
0 = "." (período)

Tabla 9- 25 Valores del parámetro FORMAT

FORMAT (W#16#) Formato de notación Representación del punto deci-


mal
0000 (estándar) Coma fija "."
0001 ","
0002 Exponencial "."
0003 ","
0004 a FFFF Valores no válidos

Reglas para la conversión de STRG_VAL:


● Si el carácter de punto "." se utiliza como punto decimal, las comas "," a la izquierda del
punto decimal se interpretan como separadores de miles. Las comas están permitidas,
aunque se ignoran.
● Si el carácter de coma "," se utiliza como punto decimal, los puntos "." a la izquierda del
punto decimal se interpretan como separadores de miles. Estos puntos están permitidos,
aunque se ignoran.
● Los espacios iniciales se ignoran.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 355
Instrucciones avanzadas
9.2 Cadena y carácter

VAL_STRG (convertir valor numérico en cadena de caracteres)

Tabla 9- 26 Operación de conversión de valor en cadena

KOP / FUP SCL Descripción


"VAL_STRG"( Convierte un valor entero, entero sin signo o en coma
in:=_variant_in, flotante en la cadena de caracteres correspondiente.
size:=_usint_in,
prec:=_usint_in,
format:=_word_in,
p:=uint_in,
out=>_string_out);

1 En KOP y FUP: haga clic en "???" y seleccione el tipo de datos en la lista desplegable.

Tabla 9- 27 Tipos de datos para la instrucción VAL_STRG

Parámetro y tipo Tipo de datos Descripción


IN IN SInt, Int, DInt, USInt, UInt, Valor que debe convertirse
UDInt, Real, LReal
SIZE IN USInt Número de caracteres que deben escribirse en la cadena
OUT
PREC IN USInt Precisión o tamaño de la parte fraccionaria. Esto no
incluye el punto decimal.
FORMAT IN Word Opciones de formato de salida
P IN UInt, Byte, USInt IN: Índice al primer carácter de la cadena OUT que debe
convertirse (primer carácter = 1)
OUT OUT String, WString Cadena convertida

Esta instrucción convierte el valor que indica el parámetro IN en una cadena referenciada
por el parámetro OUT. El parámetro OUT debe ser una cadena válida antes de ejecutar la
conversión.
La cadena convertida sustituye los caracteres de la cadena OUT, comenzando en el contaje
de offset de carácter P hasta el número de caracteres que indica el parámetro SIZE. El
número de caracteres de SIZE debe caber en la longitud de la cadena OUT, contando
desde la posición del carácter P. Si el parámetro SIZE es cero, los caracteres se
sobrescriben sin limitación en la posición P de la cadena OUT. Esta instrucción resulta útil
para integrar caracteres numéricos en una cadena de texto. Por ejemplo, la cifra "120"
puede incorporarse a la cadena "Presión bomba = 120 psi".
El parámetro PREC indica la precisión o el número de dígitos de la parte fraccionaria de la
cadena. Si el parámetro IN es un número entero, PREC indica la posición del punto decimal.
Por ejemplo, si el valor es 123 y PREC = 1, el resultado es "12,3". La precisión máxima
soportada para el tipo de datos Real es 7 dígitos.
Si el parámetro P es mayor que el tamaño actual de la cadena OUT, se agregan espacios
hasta la posición P y el resultado se añade al final de la cadena. La conversión finaliza
cuando se alcanza la longitud máxima de la cadena OUT.

Controlador programable S7-1200


356 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

El parámetro FORMAT de la instrucción VAL_STRG se define a continuación. Los bits no


utilizados deben ponerse a cero.

Tabla 9- 28 Formato de la instrucción VAL_STRG

Bit Bit 8 Bit 7 Bit 0


16
0 0 0 0 0 0 0 0 0 0 0 0 0 s f r

s = Carácter de signo 1= usar los signos "+" y "-"


0 = usar solo el signo "-"
f = Formato de notación 1= Notación exponencial
0 = Notación en coma fija
r = Formato de punto decimal 1 = "," (coma)
0 = "." (período)

Tabla 9- 29 Valores del parámetro FORMAT

FORMAT (WORD) Carácter de signo Formato de notación Representación del punto


decimal
W#16#0000 Solo "-" Coma fija "."
W#16#0001 ","
W#16#0002 Exponencial "."
W#16#0003 ","
W#16#0004 "+" y "-" Coma fija "."
W#16#0005 ","
W#16#0006 Exponencial "."
W#16#0007 ","
W#16#0008 a W#16#FFFF Valores no válidos

Reglas de formato de la cadena del parámetro OUT:


● Si el tamaño de la cadena convertida es menor que el especificado, se insertan espacios
en blanco iniciales en el extremo izquierdo de la cadena.
● Si el bit de signo del parámetro FORMAT es FALSE, los valores de los tipos de datos
USINT y SINT se escriben en el búfer de salida sin el signo "+" inicial. El "-" signo se
utiliza en caso necesario.
<espacios iniciales><dígitos sin ceros iniciales>'.'<dígitos PREC>
● Si el bit de signo es TRUE, los valores de los tipos de datos de entero con o sin signo se
escriben en el búfer de salida con un carácter de signo inicial.
<espacios iniciales><signo><dígitos sin ceros iniciales>'.'<dígitos PREC>

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 357
Instrucciones avanzadas
9.2 Cadena y carácter

● Si el parámetro FORMAT está ajustado a notación exponencial, los valores del tipo de
datos Real se escriben en el búfer de salida de la siguiente manera:
<espacios iniciales><signo><dígito> '.' <dígitos PREC>'E' <signo><dígitos sin cero
inicial>
● Si el parámetro FORMAT está ajustado a notación en coma fija, los valores del tipo de
datos entero, entero sin signo y real se escriben en el búfer de salida de la siguiente
manera:
<espacios iniciales><signo><dígitos sin ceros iniciales>'.'<dígitos PREC>
● Los ceros a la izquierda del punto decimal (con excepción del dígito adyacente a este) se
suprimen.
● Los valores a la derecha del punto decimal se redondean para que se correspondan con
el número de dígitos a la derecha del punto decimal que indica el parámetro PREC.
● La cadena de salida debe ser como mínimo tres bytes más grande que el número de
dígitos a la derecha del punto decimal.
● Los valores se justifican a la derecha en la cadena de salida.

Condiciones que notifica ENO


Si la operación de conversión encuentra un error, la instrucción vuelve a los resultados
siguientes:
● ENO se pone a 0.
● OUT se pone a 0, o como se indica en los ejemplos de conversión de una cadena en un
valor.
● OUT no se modifica, o como se indica en los ejemplos cuando OUT es una cadena.

Tabla 9- 30 Estado de ENO

ENO Descripción
1 No hay error
0 Parámetro no permitido o no válido; p. ej. acceso a un DB que no existe
0 Cadena no permitida; la longitud máxima es 0 o 255
0 Cadena no permitida; la longitud actual excede la longitud máxima
0 El valor numérico convertido es demasiado grande para el tipo de datos de OUT indicado.
0 El tamaño máximo de la cadena del parámetro OUT debe ser lo suficientemente grande para acep-
tar el número de caracteres que indica el parámetro SIZE, comenzando en el parámetro P de posi-
ción de carácter.
0 Valor de P no permitido; P=0 o P es mayor que la longitud actual de la cadena
0 El parámetro SIZE debe ser mayor que el parámetro PREC.

Controlador programable S7-1200


358 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 31 Ejemplo de conversión de cadena en valor con S_CONV

Cadena IN Tipo de datos OUT Valor OUT ENO


"123" Int o DInt 123 TRUE
"-00456" Int o DInt -456 TRUE
"123,45" Int o DInt 123 TRUE
"+2345" Int o DInt 2345 TRUE
"00123AB" Int o DInt 123 TRUE
"123" Real 123,0 TRUE
"123,45" Real 123,45 TRUE
"1.23e-4" Real 1,23 TRUE
"1.23E-4" Real 1,23 TRUE
"12.345,67" Real 12345,67 TRUE
"3.4e39" Real 3,4 TRUE
"-3.4e39" Real -3,4 TRUE
"1.17549e-38" Real 1,17549 TRUE
"12345" SInt 0 FALSE
"A123" N/A 0 FALSE
"" N/A 0 FALSE
"++123" N/A 0 FALSE
"+-123" N/A 0 FALSE

Tabla 9- 32 Ejemplos de S_CONV (convertir valor en cadena)

Tipo de datos Valor IN Cadena OUT 1 ENO


UInt 123 "xxx123" TRUE
UInt 0 "xxxxx0" TRUE
UDInt 12345678 "xxx12345678" TRUE
Real +9123,456 "xx+9,123456E+3" TRUE
LReal +9123,4567890123 xx+9,1234567890123E TRUE
+3"
Real -INF "xxxxxxxxxxxINF" FALSE
Real +INF "xxxxxxxxxxxINF" FALSE
Real NaN "xxxxxxxxxxxNaN" FALSE
1 Los caracteres "x" representan los caracteres de espacio que ocupan las posiciones vacías en el
campo justificado a la derecha que se ha asignado para el valor convertido.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 359
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 33 Ejemplo: conversión de STRG_VAL

Cadena IN FORMAT Tipo de datos OUT Valor OUT ENO


(W#16#....)
"123" 0000 Int o DInt 123 TRUE
"-00456" 0000 Int o DInt -456 TRUE
"123,45" 0000 Int o DInt 123 TRUE
"+2345" 0000 Int o DInt 2345 TRUE
"00123AB" 0000 Int o DInt 123 TRUE
"123" 0000 Real 123,0 TRUE
"-00456" 0001 Real -456,0 TRUE
"+00456" 0001 Real 456,0 TRUE
"123,45" 0000 Real 123,45 TRUE
"123,45" 0001 Real 12345,0 TRUE
"123,45" 0000 Real 12345,0 TRUE
"123,45" 0001 Real 123,45 TRUE
".00123AB" 0001 Real 123,0 TRUE
"1.23e-4" 0000 Real 1,23 TRUE
"1.23E-4" 0000 Real 1,23 TRUE
"1.23E-4" 0002 Real 1.23E-4 TRUE
"12.345,67" 0000 Real 12345,67 TRUE
"12.345,67" 0001 Real 12,345 TRUE
"3.4e39" 0002 Real +INF TRUE
"-3.4e39" 0002 Real -INF TRUE
"1.1754943e-38" 0002 Real 0,0 TRUE
(o menor)
"12345" N/A SInt 0 FALSE
"A123" N/A N/A 0 FALSE
"" N/A N/A 0 FALSE
"++123" N/A N/A 0 FALSE
"+-123" N/A N/A 0 FALSE

Los siguientes ejemplos de conversión VAL_STRG se basan en una cadena OUT que se
inicializa de la manera siguiente:
"Current Temp = xxxxxxxxxx C"
, donde el carácter "x" representa caracteres de espacio asignados al valor convertido.

Controlador programable S7-1200


360 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 34 Ejemplo: conversión de VAL_STRG

Tipo de Valor IN P SIZE FORMAT PREC Cadena OUT ENO


datos (W#16#....)
UInt 123 16 10 0000 0 Current Temp = TRUE
xxxxxxx123 C
UInt 0 16 10 0000 2 Current Temp = TRUE
xxxxxx0.00 C
UDInt 12345678 16 10 0000 3 Current Temp = TRUE
x12345.678 C
UDInt 12345678 16 10 0001 3 Current Temp = TRUE
x12345,678 C
Int 123 16 10 0004 0 Current Temp = TRUE
xxxxxx+123 C
Int -123 16 10 0004 0 Current Temp = TRUE
xxxxxx-123 C
Real -0,00123 16 10 0004 4 Current Temp = xxx- TRUE
0.0012 C
Real -0,00123 16 10 0006 4 Current Temp = - TRUE
1.2300E-3 C
Real -INF 16 10 N/A 4 Current Temp = FALSE
xxxxxx-INF C
Real +INF 16 10 N/A 4 Current Temp = FALSE
xxxxxx+INF C
Real NaN 16 10 N/A 4 Current Temp = FALSE
xxxxxxxNaN C
UDInt 12345678 16 6 N/A 3 Current Temp = FALSE
xxxxxxxxxx C

9.2.3.2 Instrucciones Strg_TO_Chars y Chars_TO_Strg (Convertir a/de cadena de caracteres y


Array of CHAR)
Strg_TO_Chars copia una cadena de caracteres ASCII en una matriz de bytes de
caracteres.
Chars_TO_Strg copia una matriz de bytes de caracteres ASCII en una cadena de
caracteres.

Nota
Solo los tipos de matriz basados en cero (Array [0..n] of Char) o (Array [0..n] of Byte) están
permitidos como parámetro de entrada Chars para la instrucción Chars_TO_Strg o como
parámetro IN_OUT Chars para la instrucción Strg_TO_Chars .

Tabla 9- 35 Instrucción Strg_TO_Chars

KOP / FUP SCL Descripción


Strg_TO_Chars( La cadena de entrada completa Strg se copia en una ma-
Strg:=_string_in_, triz de caracteres en el parámetro IN_OUT Chars.
pChars:=_dint_in_, La operación sobrescribe los bytes que empiezan por el
Cnt=>_uint_out_, número de elemento especificado por el parámetro
pChars.
Chars:=_variant_inout_); Pueden utilizarse cadenas de todas las longitudes máxi-
mas soportadas (1 ... 254).
No se escribe un delimitador de fin: eso es responsabilidad
del usuario. Para establecer un delimitador de fin justo
después del último carácter escrito de la matriz, utilice el
siguiente número de elemento de la matriz [pChars+Cnt].

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 361
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 36 Tipos de datos para los parámetros (Strg_TO_Chars)

Parámetro y tipo Tipo de datos Descripción


Strg IN String, WString Cadena fuente
pChars IN DInt Número del elemento para el primer carácter de la cadena
escrito en la matriz de destino
Chars IN_OUT Variante El parámetro Chars es un puntero hacia una matriz basada
en cero [0..n] de caracteres copiados de una cadena de
entrada. La matriz puede declararse en un DB o como va-
riables locales en la interfaz del bloque.
Ejemplo: "DB1".MyArray apunta a valores de elementos
MyArray [0..10] of Char en DB1.
Cnt OUT UInt Recuento de caracteres copiados

Tabla 9- 37 Instrucción Chars_TO_Strg

KOP / FUP SCL Descripción


Chars_TO_Strg( Toda una matriz de caracteres o una parte de ella se copia en
Chars:=_variant_in_, una cadena.
pChars:=_dint_in_, La cadena de salida debe estar declarada antes de ejecutar
Cnt:=_uint_in_, Chars_TO_Strg. La cadena se sobrescribe con la operación
Strg=>_string_out_); Chars_TO_Strg.
Pueden utilizarse cadenas de todas las longitudes máximas
soportadas (1 ... 254).
El valor de longitud máxima de una cadena no cambia con la
operación Chars_TO_Strg . El proceso de copia de una matriz
a una cadena se detiene cuando se ha alcanzado la longitud
máxima de la cadena.
Un carácter nul '$00' o 16#00 en la matriz de caracteres fun-
ciona como delimitador y finaliza la copia de caracteres en la
cadena.

Tabla 9- 38 Tipos de datos para los parámetros (Chars_TO_Strg)

Parámetro y tipo Tipo de datos Descripción


Chars IN Variante El parámetro Chars es un puntero hacia una matriz basada en
cero [0..n] de caracteres que deben convertirse en una cade-
na. La matriz puede declararse en un DB o como variables
locales en la interfaz del bloque.
Ejemplo: "DB1".MyArray apunta a valores de elementos
MyArray [0..10] of Char en DB1.
pChars IN Dint Número de elemento del primer carácter en la matriz que debe
copiarse. El elemento de matriz [0] es el valor predeterminado.
Cnt IN UInt Recuento de caracteres que se copian: 0 significa todos
Strg OUT String, WString Cadena de destino

Controlador programable S7-1200


362 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 39 Estado de ENO

ENO Descripción
1 No hay error
0 Chars_TO_Strg: Intento de copiar más bytes de caracteres en la cadena de salida de los que permite el
byte de longitud máxima en la declaración de cadena
0 Chars_TO_Strg: El valor de carácter cero (16#00) se ha encontrado en el array de bytes de caracteres de
entrada.
0 Strg_TO_Chars: Intento de copiar más bytes de caracteres en el array de salida de los que permite el
límite de número de elementos

9.2.3.3 Instrucciones ATH y HTA (Convertir a/de cadena de caracteres ASCII y número
hexadecimal)
Utilice las instrucciones ATH (ASCII a hexadecimal) y HTA (hexadecimal a ASCII) para
realizar conversiones entre bytes de caracteres ASCII (0 a 9 y mayúsculas solo de A a F) y
los correspondientes nibbles hexadecimales de 4 bits.

Tabla 9- 40 Instrucción ATH

KOP / FUP SCL Descripción


ret_val := ATH( Convierte caracteres ASCII en dígitos hexadecimales comprimidos.
in:=_variant_in_,
n:=_int_in_,

out=>_variant_out_);

Tabla 9- 41 Tipos de datos para la instrucción ATH

Tipo de parámetro Tipo de datos Descripción


IN IN Variante Puntero a matriz de byte de caracteres ASCII
N IN UInt Número de bytes de caracteres ASCII que deben convertirse
RET_VAL OUT Word Código de condición de ejecución
OUT OUT Variante Puntero a la matriz de byte hexadecimal que debe convertirse

La conversión comienza en la posición especificada por el parámetro IN y continúa durante


N bytes. El resultado se deposita en la posición que indica OUT. Solo pueden convertirse
caracteres ASCII válidos 0 a 9, minúsculas de "a" a "f", y mayúsculas de A a F. Cualquier
otro carácter se convertirá a cero.
Los caracteres ASCII codificados de 8 bits se convierten en nibbles hexadecimales de 4
bits. Los dos caracteres ASCII se pueden convertir en un solo byte que incluya dos nibbles
hexadecimales de 4 bits.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 363
Instrucciones avanzadas
9.2 Cadena y carácter

Los parámetros IN y OUT especifican matrices de bytes y no datos String hexadecimales.


Los caracteres ASCII se convierten y depositan en la salida hexadecimal en el mismo orden
que se leen. Si existe un número impar de caracteres ASCII, se agregan ceros en el nibble
situado más a la derecha del último dígito hexadecimal convertido.

Tabla 9- 42 Ejemplos: conversión ASCII a hexadecimal (ATH)

Bytes de caracteres IN N Valor OUT ENO


'0a23' 4 W#16#0A23 TRUE
'123AFx1a23' 10 16#123AF01023 FALSE
'a23' 3 W#16#A230 TRUE

Tabla 9- 43 Instrucción HTA

KOP / FUP SCL Descripción


ret_val := HTA( Convierte dígitos hexadecimales comprimidos en los correspon-
in:=_variant_in_, dientes bytes de caracteres ASCII.
n:=_uint_in_,
out=>_variant_out_);

Tabla 9- 44 Tipos de datos para la instrucción HTA

Parámetro y tipo Tipo de datos Descripción


IN IN Variante Puntero a matriz de byte de entrada
N IN UInt Número de bytes que deben convertirse (cada byte de entrada tiene dos
nibbles de 4 bits y produce caracteres ASCII 2N)
RET_VAL OUT Word Código de condición de ejecución
OUT OUT Variante Puntero a matriz de byte de caracteres ASCII

La conversión comienza en la posición especificada por el parámetro IN y continúa durante


N bytes. Cada nibble de 4 bits convierte a un carácter ASCII único de 8 bits y produce bytes
de caracteres 2N ASCII de salida. Todos los bytes 2N de la salida se escriben como
caracteres ASCII de 0 a 9 o mayúsculas A a F. El parámetro OUT especifica una matriz de
bytes y no una cadena.
Cada nibble del byte hexadecimal se convierte en un carácter en el mismo orden en que se
lee (el nibble situado más a la izquierda de un dígito hexadecimal se convierte primero,
seguido por el nibble situado más a la derecha del mismo byte).

Tabla 9- 45 Ejemplos: conversión hexadecimal a ASCII (HTA)

Valor IN N Bytes de caracteres OUT ENO (ENO siempre TRUE tras ejecución de HTA)
W#16#0123 2 '0123' TRUE
DW#16#123AF012 4 '123AF012' TRUE

Controlador programable S7-1200


364 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 46 Códigos de condición ATH and HTA

RET_VAL Descripción ENO


(W#16#....)
0000 No hay error TRUE
0007 Carácter de entrada ATH no válido: Se ha encontrado un carácter que no era un ca- FALSE
rácter ASCII 0-9, minúscula de "a" a "f" o mayúscula de A a F.
8101 Puntero de entrada no permitido o no válido; p. ej. acceso a un DB que no existe. FALSE
8120 La cadena de entrada tiene un formato no válido, es decir, máx= 0, máx=255, ac- FALSE
tual>máx o longitud en puntero < máx
8182 El búfer de entrada es demasiado pequeño para N FALSE
8151 Tipo de datos no permitido para búfer de entrada FALSE
8301 Puntero de salida no permitido o no válido; p. ej. acceso a un DB que no existe. FALSE
8320 La cadena de salida tiene un formato no válido, es decir, máx= 0, máx=255, ac- FALSE
tual>máx o longitud en puntero < máx
8382 El búfer de salida es demasiado pequeño para N FALSE
8351 Tipo de datos no permitido para búfer de salida FALSE

9.2.4 Instrucciones con cadenas


El programa de control puede utilizar las siguientes instrucciones con cadenas y caracteres
para crear avisos para displays de operador e históricos del proceso.

9.2.4.1 MAX_LEN (longitud máxima de una cadena de caracteres)

Tabla 9- 47 Instrucción de longitud máxima

KOP / FUP SCL Descripción


out := MAX_LEN (longitud máxima de cadena) proporciona el valor de longitud má-
MAX_LEN(in); xima asignado a la cadena IN en la salida OUT. Si el error se produce durante
el procesamiento de la instrucción, se obtendrá la longitud de cadena vacía.
Los tipos de datos String y WString incluyen dos longitudes: el primer byte (o
palabra) proporciona la longitud máxima y el segundo byte (o palabra) propor-
ciona la longitud actual (es el número actual de caracteres válidos).
• La longitud máxima de la cadena de caracteres se asigna para cada decla-
ración String o WString entre corchetes. El número de bytes ocupados por
un String es 2 bytes mayor que la longitud máxima. El número de palabras
ocupadas por un WString es 2 palabras mayor que la longitud máxima.
• La longitud actual representa el número de caracteres que se usan real-
mente. La longitud actual debe ser menor o igual a la longitud máxima. La
longitud actual está en bytes para un String y en palabras para un WString.
Use la instrucción MAX_LEN i para obtener la longitud máxima de la cadena
de caracteres y la instrucción LEN para obtener la longitud actual de una ca-
dena.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 365
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 48 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Cadena de entrada
OUT OUT DInt Número máximo de caracteres permitidos para una
cadena IN

9.2.4.2 LEN (determinar la longitud de una cadena de caracteres)

Tabla 9- 49 Instrucciones de longitud

KOP / FUP SCL Descripción


out := LEN(in); LEN (longitud) proporciona la longitud actual de la cadena IN en la salida
OUT. Una cadena vacía tiene una longitud cero.

Tabla 9- 50 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Cadena de entrada
OUT OUT Int, DInt, Real, LReal Número de caracteres válidos de la cadena IN

Tabla 9- 51 Estado de ENO

ENO Condición OUT


1 No hay condición de cadena no válida Longitud de cadena válida
0 La longitud actual de IN excede la longitud máxima de IN La longitud actual se pone
La longitud máxima de IN no cabe centro del área de memoria asignada a0
La longitud máxima de IN es 255 (longitud no permitida)

9.2.4.3 CONCAT (agrupar cadenas de caracteres)

Tabla 9- 52 Instrucción Agrupar cadenas

KOP / FUP SCL Descripción


out := CONCAT(in1, in2); CONCAT (agrupar cadenas) agrupa los parámetros de las cade-
nas IN1 y IN2 para proporcionar una cadena que se deposita en
OUT. Tras la agrupación, la cadena IN1 es la parte izquierda y
IN2 es la parte derecha de la cadena combinada.

Controlador programable S7-1200


366 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 53 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN1 IN String, WString Cadena de entrada 1
IN2 IN String, WString Cadena de entrada 2
OUT OUT String, WString Cadena combinada (cadena 1 + cadena 2)

Tabla 9- 54 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Caracteres válidos
0 La cadena resultante tras la concatenación excede la longitud máxima de Los caracteres de la cadena re-
la cadena OUT sultante se copian hasta alcan-
zarse la longitud máxima de OUT
La longitud actual de IN1 excede la longitud máxima de IN1, la longitud La longitud actual se pone a 0
actual de IN2 excede la longitud máxima de IN2, o la longitud actual de
OUT excede la longitud máxima de OUT (cadena no válida)
La longitud máxima de IN1, IN2 o OUT no cabe dentro del área de memo-
ria asignada
La longitud máxima de IN1 o IN2 es 255, o la longitud máxima de OUT es
0 o 255 (tipo de datos String)
La longitud máxima de IN1 o IN2 es 65534, o la longitud máxima de OUT
es 0 o 65534 (tipo de datos WString)

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 367
Instrucciones avanzadas
9.2 Cadena y carácter

9.2.4.4 Instrucciones LEFT, RIGHT y MID (Leer los caracteres izquierdos, derechos o
centrales de una cadena)

Tabla 9- 55 Operaciones de subcadenas izquierda, derecha y central

KOP / FUP SCL Descripción


out := LEFT(in, L); LEFT (Leer los caracteres izquierdos de una cadena) crea una subca-
dena formada por los primeros caracteres L del parámetro de cadena
IN.
• Si L es mayor que la longitud actual de la cadena IN, OUT devuel-
ve la cadena IN completa.
• Si la entrada contiene una cadena vacía, OUT devuelve una cade-
na vacía.
out := MID(in, L, p); MID (Leer los caracteres centrales de una cadena) provee la parte
central de una cadena. La parte central de una cadena tiene L caracte-
res de longitud y empieza en la posición de caracteres P (inclusive)
Si la suma de L y P excede la longitud actual del parámetro de la ca-
dena IN, se devuelve una subcadena que comienza en la posición de
carácter P y que continúa hasta el final de la cadena IN.
out := RIGHT(in, L); RIGHT (Leer los caracteres derechos de una cadena) provee los últi-
mos caracteres L de una cadena.
• Si L es mayor que la longitud actual de la cadena IN, el parámetro
OUT devuelve la cadena IN completa.
• Si la entrada contiene una cadena vacía, OUT devuelve una cade-
na vacía.

Tabla 9- 56 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Cadena de entrada
L IN Int Longitud de la subcadena que debe crearse:
• LEFT utiliza el número de caracteres de la cadena situados
más a la izquierda
• RIGHT utiliza el número de caracteres de la cadena situados
más a la derecha
• MID utiliza el número de caracteres comenzando en la posición
P de la cadena
P IN Int Solo MID: Posición del primer carácter de subcadena que debe
copiarse
P= 1, para la posición de carácter inicial de la cadena IN
OUT OUT String, WString Cadena de salida

Controlador programable S7-1200


368 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 57 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Caracteres válidos
0 • L o P es menor o igual que 0 La longitud actual se pone a 0
• P es mayor que la longitud máxima de IN
• La longitud actual de IN excede la longitud máxima de IN o la longitud
actual de OUT excede la longitud máxima de OUT
• La longitud máxima de IN o OUT no cabe dentro del área de memoria
asignada
• La longitud máxima de IN o OUT es 0 o 255 (tipo de datos String) o 0 o
65534 (tipo de datos WString)
La longitud (L) de la subcadena que debe copiarse excede la longitud Los caracteres se copian hasta
máxima de la cadena OUT. alcanzarse la longitud máxima de
OUT
Solo MID: L o P es menor o igual que 0 La longitud actual se pone a 0
Solo MID: P es mayor que la longitud máxima de IN
La longitud actual de IN1 excede la longitud máxima de IN1 o la longitud La longitud actual se pone a 0
actual de IN2 excede la longitud máxima de IN2 (cadena no válida)
La longitud máxima de IN1, IN2 o OUT no cabe dentro del área de memo-
ria asignada
La longitud máxima de IN1, IN2 o OUT es una longitud no permitida: 0 o
255 (tipo de datos String) o 0 o 65534 (tipo de datos WString)

9.2.4.5 DELETE (borrar caracteres de una cadena)

Tabla 9- 58 Instrucción Borrar caracteres de una cadena

KOP / FUP SCL Descripción


out := DELETE(in, L, p); Borra L caracteres de la cadena IN. El borrado de caracteres
comienza en la posición P (inclusive) y la subcadena resultante
se deposita en el parámetro OUT.
• Si L es igual a cero, la cadena de entrada se deposita en
OUT.
• Si la suma de L y P es mayor que la longitud de la cadena de
entrada, la cadena se borra hasta el final.

Tabla 9- 59 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN IN String, WString Cadena de entrada
L IN Int Número de caracteres que deben borrarse
P IN Int Posición del primer carácter que debe borrarse: El primer carácter
de la cadena IN tiene el número de posición 1
OUT OUT String, WString Cadena de salida

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 369
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 60 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Caracteres válidos
0 P es mayor que la longitud actual de IN IN se copia en OUT sin borrar
caracteres
La cadena resultante tras borrar los caracteres excede la longitud máxima Los caracteres de la cadena re-
de la cadena OUT sultante se copian hasta alcan-
zarse la longitud máxima de OUT
L es menor que 0, o P es menor o igual que 0 La longitud actual se pone a 0
La longitud actual de IN excede la longitud máxima de IN o la longitud
actual de OUT excede la longitud máxima de OUT
La longitud máxima de IN o OUT no cabe dentro del área de memoria
asignada
La longitud máxima de IN o OUT es 0 o 255

9.2.4.6 INSERT (insertar caracteres en una cadena)

Tabla 9- 61 Instrucción Insertar caracteres en una cadena

KOP / FUP SCL Descripción


out := INSERT(in1, in2, p); Inserta la cadena IN2 en la cadena IN1. La inserción comienza
tras el carácter de la posición P.

Tabla 9- 62 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN1 IN String, WString Cadena de entrada 1
IN2 IN String, WString Cadena de entrada 2
P IN Int Última posición de carácter en la cadena IN1 antes del punto de
inserción de la cadena IN2.
El primer carácter de la cadena IN1 tiene el número de posición 1.
OUT OUT String, WString Cadena resultante

Controlador programable S7-1200


370 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 63 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Caracteres válidos
0 P excede la longitud de IN1 IN2 se agrupa con IN1 inmediatamente
después del último carácter de IN1
P es menor que 0 La longitud actual se pone a 0
La cadena resultante tras la inserción excede la longitud máxima de Los caracteres de la cadena resultante
la cadena OUT se copian hasta alcanzarse la longitud
máxima de OUT
La longitud actual de IN1 excede la longitud máxima de IN1, la La longitud actual se pone a 0
longitud actual de IN2 excede la longitud máxima de IN2, o la longi-
tud actual de OUT excede la longitud máxima de OUT (cadena no
válida)
La longitud máxima de IN1, IN2 o OUT no cabe dentro del área de
memoria asignada
La longitud máxima de IN1 o IN2 es 255, o la longitud máxima de
OUT es 0 o 255 (tipo de datos String)
La longitud máxima de IN1 o IN2 es 65534, o la longitud máxima de
OUT es 0 o 65534 (tipo de datos WString)

9.2.4.7 REPLACE (reemplazar caracteres de una cadena)

Tabla 9- 64 Instrucción Reemplazar caracteres en una cadena

KOP / FUP SCL Descripción


out := REPLACE( Reemplaza L caracteres en el parámetro de cadena IN1. La susti-
in1:=_string_in_, tución comienza en la posición de carácter P (inclusive) de la ca-
in2:=_string_in_, dena IN1, y los caracteres de reemplazo provienen de la cadena
L:=_int_in_, IN2.
p:=_int_in);

Tabla 9- 65 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN1 IN String, WString Cadena de entrada
IN2 IN String, WString Cadena de caracteres de reemplazo
L IN Int Número de caracteres que deben reemplazarse
P IN Int Posición del primer carácter que debe reemplazarse
OUT OUT String, WString Cadena resultante

Si el parámetro L es igual a cero, la cadena IN2 se inserta en la posición P de la cadena IN1


sin que se borre ningún carácter de la cadena IN1.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 371
Instrucciones avanzadas
9.2 Cadena y carácter

Si P es igual a uno, los primeros caracteres L de la cadena IN1 se reemplazan por


caracteres de la cadena IN2.

Tabla 9- 66 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Caracteres válidos
0 P excede la longitud de IN1 IN2 se agrupa con IN1 inmediatamente
después del último carácter de IN1
P cabe en IN1, pero menos de L caracteres permanecen en IN1 IN2 reemplaza los caracteres finales de
IN1 comenzando por la posición P
La cadena resultante tras la sustitución excede la longitud máxima Los caracteres de la cadena resultante
de la cadena OUT se copian hasta alcanzarse la longitud
máxima de OUT
La longitud máxima de IN1 es 0 Los caracteres IN2 se copian en OUT
L es menor que 0, o P es menor o igual que 0 La longitud actual se pone a 0
La longitud actual de IN1 excede la longitud máxima de IN1, la
longitud actual de IN2 excede la longitud máxima de IN2, o la longi-
tud actual de OUT excede la longitud máxima de OUT
La longitud máxima de IN1, IN2 o OUT no cabe dentro del área de
memoria asignada
La longitud máxima de IN1 o IN2 es 255, o la longitud máxima de
OUT es 0 o 255 (tipo de datos String)
La longitud máxima de IN1 o IN2 es 65534, o la longitud máxima de
OUT es 0 o 65534 (tipo de datos WString)

9.2.4.8 FIND (buscar caracteres en una cadena)

Tabla 9- 67 Instrucción Buscar caracteres en una cadena

KOP / FUP SCL Descripción


out := FIND( Proporciona la posición de carácter de la subcadena especificada en
in1:=_string_in_, IN2 dentro de la cadena IN1. La búsqueda comienza en el lado iz-
in2:=_string_in); quierdo. La posición de carácter del primer resultado encontrado en la
cadena IN2 se devuelve en OUT. Si la cadena IN2 no se encuentra en
la cadena IN1, se devuelve cero.

Tabla 9- 68 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


IN1 IN String, WString Buscar en esta cadena
IN2 IN String, WString Buscar esta cadena
OUT OUT Int Posición de carácter de la cadena IN1 en el primer resultado de
búsqueda

Controlador programable S7-1200


372 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Tabla 9- 69 Estado de ENO

ENO Condición OUT


1 No se han detectado errores Posición de carácter válida
0 IN2 es mayor que IN1 La posición de carácter se pone a
La longitud actual de IN1 excede la longitud máxima de IN1 o la longitud 0
actual de IN2 excede la longitud máxima de IN2 (cadena no válida)
La longitud máxima de IN1 o IN2 no cabe dentro del área de memoria
asignada
La longitud máxima de IN1 o IN2 es 255 (tipo de datos String) o 65535
(tipo de datos WString)

9.2.5 Información de tiempo de ejecución

9.2.5.1 GetSymbolName (leer nombre de una variable en el parámetro de entrada)

Tabla 9- 70 Instrucción GetSymbolName

KOP / FUP SCL Descripción


OUT := GetSymbolName( La instrucción GetSymbolName devuelve una
variable:=_parameter_in_, cadena correspondiente al nombre de una
size:=_dint_in_); variable de la interfaz del bloque.
El programa puede llamar la instrucción varias
veces con diferentes variables. El valor de
proceso de la variable es irrelevante.
La instrucción devuelve el nombre leído en el
parámetro OUT.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 373
Instrucciones avanzadas
9.2 Cadena y carácter

Parámetro
La tabla siguiente muestra los parámetros de la instrucción GetSymbolName:

Parámetro Declaración Tipo de datos Área de me- Descripción


moria
VARIABLE Input PARAMETER Secciones de Variable de la interfaz del bloque local para la que
parámetro debe devolverse un valor de cadena del nombre
Input, Output,
InOut
SIZE Input DINT I, Q, M, D, L Limita el número de caracteres emitidos en el pa-
rámetro OUT:
• SIZE > 0: GetSymbolName devuelve los prime-
ros caracteres SIZE del nombre.
• SIZE = 0: GetSymbolName devuelve el nombre
completo.
• SIZE < 0: GetSymbolName devuelve los últimos
caracteres SIZE del nombre.
OUT Return WSTRING I, Q, M, D, L Salida del nombre de variable suministrado por el
parámetro de entrada

Los parámetros de entrada de la interfaz del bloque se especifican en el parámetro


VARIABLE. Para este parámetro debe utilizarse únicamente un parámetro de interfaz y no
una variable PLC o de bloque de datos.
Para limitar la longitud del nombre de variable leído debe utilizarse el parámetro SIZE. Si la
instrucción trunca el nombre, indica que el truncamiento en los caracteres "..." (carácter
Unicode 16#2026) aparece al final del nombre. Tenga en cuenta que este carácter tiene una
longitud de 1.
Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


374 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Significado del parámetro SIZE


El siguiente ejemplo ilustra el significado del parámetro SIZE. El nombre de variable
siguiente se lee desde la interfaz del bloque: "MyPLCTag" (las comillas dobles al principio y
al final forman parte del nombre).

SIZE Se devuelve GetSym- Explicación


bolName
1 '...' • Primer carácter de WSTRING:'
• Identificador de que se ha truncado el nombre: ...
• Último carácter de WSTRING:'
2 '"...' • Primer carácter de WSTRING:'
• Primer carácter del nombre e identificador de que se ha
truncado el nombre:"...
• Último carácter de WSTRING:'
3 '"M...' • Primer carácter de WSTRING:'
• Los dos primeros caracteres del nombre e identificador
de que se ha truncado el nombre:"... "M...
• Último carácter de WSTRING:'
6 '"MyPL...' • Primer carácter de WSTRING:'
• Los cinco primeros caracteres del nombre e identifica-
dor de que se ha truncado el nombre: "MyPL...
• Último carácter de WSTRING:'
0 '"MyPLCTag"' • Primer carácter de WSTRING:'
• Todos los caracteres del nombre: "MyPLCTag"
• Último carácter de WSTRING:'

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 375
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Leer un nombre simbólico


En el ejemplo siguiente se lee el nombre de una variable que está interconectada mediante
el parámetro de entrada de un bloque.
Cree dos variables en un bloque de datos global para guardar los datos.

Cree un parámetro de entrada inputValue con el tipo de datos BYTE en el bloque Level1.
Llame la instrucción GetSymbolName en el bloque Level1. Interconecte los parámetros de la
instrucción del siguiente modo.

Interconecte el parámetro inputValue del bloque Level1 del siguiente modo.

La instrucción GetSymbolName se ejecuta en el bloque Level1. La interconexión del


parámetro de entrada inputValue del bloque Level1 se examina mediante el parámetro de
entrada VARIABLE de la instrucción. De este modo, la variable symbolVALUE se lee y se
emite como cadena de caracteres en el parámetro de salida OUT ("MySymNAME"). De
acuerdo con el valor del parámetro de entrada SIZE, la longitud de la cadena de caracteres
está limitada a 60 caracteres.

Controlador programable S7-1200


376 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

9.2.5.2 GetSymbolPath (consultar el nombre global compuesto de la alimentación del


parámetro de entrada)

Tabla 9- 71 Instrucción GetSymbolPath

KOP / FUP SCL Descripción


OUT := GetSymbolPath( La instrucción GetSymbolPath lee el nombre
variable:=_parameter_in_, global compuesto de un parámetro de entrada
size:=_dint_in_); en la interfaz local de un bloque (FB o FC). El
nombre incluye la ruta de almacenamiento y el
nombre de la variable.
El programa puede llamar la instrucción varias
veces con diferentes variables. El valor de
proceso de la variable es irrelevante.
La instrucción devuelve el nombre leído en el
parámetro OUT.

Parámetro
La tabla siguiente muestra los parámetros de la instrucción GetSymbolPath:

Parámetro Declaración Tipo de datos Área de memoria Descripción


VARIABLE Input PARAMETER Secciones de pará- Selección de la interfaz local para la que debe
metro Input, Output, leerse el nombre global de la alimentación del
InOut parámetro de entrada.
SIZE Input DINT I, Q, M, D, L o cons- Limita el número de caracteres emitidos en el
tante parámetro OUT.
• SIZE > 0: GetSymbolPath devuelve los
primeros caracteres SIZE del nombre.
• SIZE = 0: GetSymbolPath devuelve el
nombre completo.
• SIZE < 0: GetSymbolPath devuelve los
últimos caracteres SIZE del nombre.
OUT Output WSTRING I, Q, M, D, L Salida del nombre de variable de la alimenta-
ción del parámetro de entrada.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 377
Instrucciones avanzadas
9.2 Cadena y carácter

Utilización
Tenga en cuenta los consejos siguientes sobre el uso de la instrucción GetSymbolPath:
● Especifique la interfaz del bloque a través de la que se lee el nombre de la variable de
entrada en el parámetro VARIABLE de la instrucción:
– Si una variable de bloque de datos proporciona el parámetro de entrada,
GetSymbolPath emite el nombre del DB, las estructuras que contiene y el nombre de
la variable.
– Si una variable PLC proporciona los parámetros de entrada, GetSymbolPath emite el
nombre de la variable PLC.
– Si una constante proporciona el parámetro de entrada, GetSymbolPath emite el valor
de la constante.
● Para limitar la longitud del nombre de variable leído debe utilizarse el parámetro SIZE. Si
el nombre se ha truncado, se indica en el carácter "..." (carácter Unicode 16#2026) al
final del nombre. Tenga en cuenta que este carácter tiene una longitud de 1.

Ejemplo: Significado del parámetro SIZE


El siguiente ejemplo ilustra el significado del parámetro SIZE. GetSymbolPath ha leído el
nombre de variable siguiente desde la interfaz del bloque: "MyPLCTag" (las comillas dobles
al principio y al final forman parte del nombre).

SIZE Se devuelve GetSymbol- Explicación


Path
1 '...' • Primer carácter de WSTRING:'
• Identificador de que se ha truncado el nombre: ...
• Último carácter de WSTRING:'
2 '"...' • Primer carácter de WSTRING:'
• Primer carácter del nombre e identificador de que se ha
truncado el nombre:"...
• Último carácter de WSTRING:'
3 '"M...' • Primer carácter de WSTRING:'
• Los dos primeros caracteres del nombre e identificador
de que se ha truncado el nombre:"... "M...
• Último carácter de WSTRING:'
6 '"MyPL...' • Primer carácter de WSTRING:'
• Los cinco primeros caracteres del nombre e identifica-
dor de que se ha truncado el nombre: "MyPL...
• Último carácter de WSTRING:'
0 '"MyPLCTag"' • Primer carácter de WSTRING:'
• Todos los caracteres del nombre: "MyPLCTag"
• Último carácter de WSTRING:'

Controlador programable S7-1200


378 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Llamar GetSymbolPath en varios niveles de llamada del bloque


El ejemplo siguiente muestra el uso de GetSymbolPath en varios niveles de llamada:
● El bloque de organización OB1 llama el bloque FB_Level_1 que, a su vez, llama el
bloque FB_Level_2.
● El bloque FB_Level_2 ejecuta GetSymbolPath para leer la ruta del parámetro en la
interfaz REQ2.
● Puesto que la interfaz REQ1 proporciona REQ2, la instrucción determina la ruta del
parámetro de entrada de REQ1.
● La variable MyStarterBit es el parámetro de entrada REQ1. El bit se encuentra en la
estructura MySTRUCT del bloque de datos MyDatablock.
GetSymbolPath lee esta información y emite la ruta
("MyDataBlock".MySTRUCT.MyStarterBit) en el parámetro OUT.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 379
Instrucciones avanzadas
9.2 Cadena y carácter

9.2.5.3 GetInstanceName (leer el nombre de la instancia de bloque)

Tabla 9- 72 Instrucción GetInstanceName

KOP / FUP SCL Descripción


OUT := GetInstanceName( La instrucción GetInstanceName se utiliza
size:=_dint_in_); para leer el nombre del bloque de datos de
instancia dentro de un bloque de función.

Parámetro
La tabla siguiente muestra los parámetros de la instrucción GetInstanceName:

Parámetro Declaración Tipo de Área de memoria Descripción


datos
SIZE Input DINT I, Q, M, D, L o Limita el número de caracteres emitidos en el paráme-
constante tro OUT.
• SIZE > 0: GetInstanceName devuelve los primeros
caracteres SIZE del nombre.
• SIZE = 0: GetInstanceName devuelve el nombre
completo.
• SIZE < 0: GetInstanceName devuelve los últimos
caracteres SIZE del nombre.
OUT Output WSTRING I, Q, M, D, L Leer el nombre del bloque de datos de instancia

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


380 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Significado del parámetro SIZE


Para limitar la longitud del nombre de instancia leído debe utilizarse el parámetro SIZE. Si la
instrucción ha truncado el nombre, indica el truncamiento en el carácter "..." (carácter
Unicode 16#2026) al final del nombre. Tenga en cuenta que este carácter tiene una longitud
de 1.
El siguiente ejemplo ilustra el significado del parámetro SIZE. GetInstanceName ha leído el
nombre de instancia siguiente desde la interfaz del bloque: "Level1_DB" (las comillas dobles
al principio y al final forman parte del nombre).

SIZE Se devuelve GetSymbol- Explicación


Path
1 '...' • Primer carácter de WSTRING:'
• Identificador de que se ha truncado el nombre: ...
• Último carácter de WSTRING:'
2 '"...' • Primer carácter de WSTRING:'
• Primer carácter del nombre e identificador de que se ha
truncado el nombre:"...
• Último carácter de WSTRING:'
3 '"L...' • Primer carácter de WSTRING:'
• Los dos primeros caracteres del nombre e identificador
de que se ha truncado el nombre:"... "L...
• Último carácter de WSTRING:'
6 '"Leve...' • Primer carácter de WSTRING:'
• Los cinco primeros caracteres del nombre e identifica-
dor de que se ha truncado el nombre: "Leve...
• Último carácter de WSTRING:'
0 '"Level1_DB"' • Primer carácter de WSTRING:'
• Todos los caracteres del nombre: "Level1_DB"
• Último carácter de WSTRING:'

GetInstanceName escribe el nombre del bloque de datos de instancia en el parámetro OUT


La instrucción trunca el nombre si el nombre del bloque de datos de instancia es más
grande que la longitud máxima de WSTRING.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 381
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Leer el nombre de un bloque de datos de instancia


El ejemplo siguiente muestra cómo se lee el nombre de un bloque de datos de instancia.
Cree dos variables en un bloque de datos global para guardar los datos.
Defina los parámetros de la instrucción del siguiente modo.

El bloque Level1_gin ejecuta la instrucción GetInstanceName, que determina el bloque de


datos de instancia asociado del bloque Level1_gin y emite el nombre en forma de cadena de
caracteres en el parámetro de salida OUT (outputInstName). De acuerdo con el valor 0 del
parámetro de entrada SIZE (limitSIZE), la longitud de la cadena de caracteres es ilimitada.

Controlador programable S7-1200


382 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

9.2.5.4 GetInstancePath (consultar el nombre global compuesto de la instancia de bloque)

Tabla 9- 73 Instrucción GetInstancePath

KOP / FUP SCL Descripción


OUT := GetInstancePath( La instrucción GetInstancePath se utiliza para
size:=_dint_in_); leer el nombre global compuesto de la instan-
cia del bloque dentro de un bloque de función.
El nombre global compuesto de la instancia
del bloque es la ruta de la jerarquía de llama-
da completa cuando el programa llama varias
instancias.

Parámetro
La tabla siguiente muestra los parámetros de la instrucción GetInstancePath:

Parámetro Declaración Tipo de datos Área de memoria Descripción


SIZE Input DINT I, Q, M, D, L o cons- Limita el número de caracteres emitidos en el
tante parámetro OUT.
• SIZE > 0: GetInstancePath devuelve los
primeros caracteres SIZE del nombre.
• SIZE = 0: GeInstancePath devuelve el
nombre completo.
• SIZE < 0: GetInstancePath devuelve los
últimos caracteres SIZE del nombre.
OUT Output WSTRING I, Q, M, D, L Leer el nombre global de la instancia del
bloque.
Si el nombre global de la instancia del bloque
es más grande que la longitud máxima de
WSTRING (254 caracteres), GetInstancePath
trunca el nombre.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 383
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Llamar GetInstancePath para obtener la ruta de una llamada de FB multiinstancia


En el ejemplo siguiente, el bloque de función FB_Level_3 llama la instrucción
GetInstancePath.
● El bloque de función FB_Level_3 guarda sus datos en el bloque de función FB_Level_2
que efectúa la llamada.
● El bloque de función FB_Level_2, a su vez, guarda sus datos en el bloque de función
FB_Level_1 que efectúa la llamada.
● El bloque de función FB_Level_1, a su vez, guarda sus datos en su bloque de datos de
instancia IDB_LEVEL_1. Debido al uso de multiinstancias, el bloque de datos de
instancia de FB_Level_1 contiene todos los datos de los tres bloques de función.

Controlador programable S7-1200


384 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

La instrucción GetInstancePath devuelve los valores siguientes en este ejemplo, en función


del valor del parámetro SIZE:

SIZE Se devuelve GetInstance- Explicación


Path
1 '...' • Primer carácter de WSTRING:'
• Identificador de que se ha truncado el nombre: ...
• Último carácter de WSTRING:'
2 '"...' • Primer carácter de WSTRING:'
• Primer carácter del nombre e identificador de que se ha
truncado el nombre:"...
• Último carácter de WSTRING:'
3 '"I...' • Primer carácter de WSTRING:'
• Los dos primeros caracteres del nombre e identificador
de que se ha truncado el nombre:"... "I...
• Último carácter de WSTRING:'
6 '"IDB_...' • Primer carácter de WSTRING:'
• Los cinco primeros caracteres del nombre e identificador
de que se ha truncado el nombre: "IDB_...
• Último carácter de WSTRING:'
0 '"IDB_LEVEL_1".Level_2_ • Primer carácter de WSTRING:'
Instance.Level_3_Instance' • Todos los caracteres del nombre:
"IDB_LEVEL_1".Level_2_Instance.Level_3_Instance
• Último carácter de WSTRING:'

Nota
Uso de GetInstancePath en bloques de función con instancia individual
Si el bloque de función en el que se llama GetInstancePath guarda datos en su propio
bloque de datos de instancia, GetInstancePath emite el nombre de la instancia individual
como nombre global. El resultado en el parámetro OUT se corresponde en este caso con la
instrucción GetInstanceName (Página 380).

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 385
Instrucciones avanzadas
9.2 Cadena y carácter

9.2.5.5 GetBlockName (leer el nombre del bloque)

Tabla 9- 74 Instrucción GetBlockName

KOP / FUP SCL Descripción


RET_VAL := GetBlockName( La instrucción GetBlockName se utiliza para
size:=_dint_in_); leer el nombre del bloque en el que se llama la
instrucción.

Parámetro
La tabla siguiente muestra los parámetros de la instrucción GetBlockName:

Parámetro Declaración Tipo de Área de memoria Descripción


datos
SIZE Input UINT I, Q, M, D, L o Limita el número de caracteres emitidos en el paráme-
constante tro RET_VAL.
• SIZE > 0: GetBlockName devuelve los primeros
caracteres SIZE del nombre.
• SIZE = 0: GetBlockName devuelve el nombre
completo.
• SIZE < 0: GetBlockName devuelve los últimos
caracteres SIZE del nombre.
RET_VAL Output WSTRING I, Q, M, D, L Leer el nombre del bloque de datos de instancia

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


386 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Significado del parámetro SIZE


Para limitar la longitud del nombre del bloque en un determinado número de caracteres,
especifique la longitud máxima en el parámetro SIZE. Si GetBlockName trunca el nombre,
indica el truncamiento en el carácter "..." (carácter Unicode 16#2026) al final del nombre.
Tenga en cuenta que este carácter tiene una longitud de 1.
El siguiente ejemplo ilustra el significado del parámetro SIZE. GetBlockName ha leído el
nombre de bloque siguiente: Level1_gbn (las comillas dobles al principio y al final forman
parte del nombre).

SIZE Se devuelve GetBlockName Explicación


1 '...' • Primer carácter de WSTRING:'
• Identificador de que se ha truncado el nombre: ...
• Último carácter de WSTRING:'
2 '"...' • Primer carácter de WSTRING:'
• Primer carácter del nombre e identificador de que se ha
truncado el nombre:"...
• Último carácter de WSTRING:'
3 '"L...' • Primer carácter de WSTRING:'
• Los dos primeros caracteres del nombre e identificador
de que se ha truncado el nombre:"... "L...
• Último carácter de WSTRING:'
6 '"Leve...' • Primer carácter de WSTRING:'
• Los cinco primeros caracteres del nombre e identifica-
dor de que se ha truncado el nombre: "Leve...
• Último carácter de WSTRING:'
0 '"Level1_gbn"' • Primer carácter de WSTRING:'
• Todos los caracteres del nombre: "Level1_gbn"
• Último carácter de WSTRING:'

GetBlockName escribe el nombre del bloque en el parámetro RET_VAL. Si el nombre del


bloque es más grande que la longitud máxima de WSTRING, trunca el nombre.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 387
Instrucciones avanzadas
9.2 Cadena y carácter

Ejemplo: Leer un nombre de bloque


El ejemplo siguiente muestra cómo se lee el nombre de un bloque.
1. Cree dos variables en un bloque de datos global para guardar los datos.

2. Defina los parámetros de la instrucción del siguiente modo:

El bloque Level1_gbn ejecuta la instrucción GetBlockName. GetBlockName lee el nombre


del bloque Level1_gbn y emite el nombre en forma de cadena de caracteres en el parámetro
de salida RET_VAL (outputBlockName). Puesto que el parámetro SIZE es 0 (limitSIZE), la
longitud de la cadena de caracteres es ilimitada.

Controlador programable S7-1200


388 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.1 Instrucciones de E/S descentralizadas


Las siguientes instrucciones E/S descentralizadas pueden utilizarse con PROFINET,
PROFIBUS o AS-i:
● Instrucción RDREC (Página 390): Lee un registro con el número INDEX de un módulo o
dispositivo.
● Instrucción WRREC (Página 390): Transfiere un registro con el número INDEX de un
módulo o dispositivo definido en ID.
● Instrucción GETIO (Página 393): Lee de forma coherente todas las entradas de un
esclavo DP normalizado / dispositivo PROFINET IO.
● Instrucción SETIO (Página 394): Transfiere de forma coherente los datos del rango de
origen definido en el parámetro OUTPUTS al esclavo DP normalizado / dispositivo
PROFINET IO direccionado.
● Instrucción GETIO_PART (Página 395): Lee de forma coherente una parte relacionada
de las entradas de un módulo de periferia.
● Instrucción SETIO_PART (Página 397): Escribe de forma coherente los datos del área de
origen delimitada por el parámetro OUTPUTS en las salidas de un módulo de periferia.
● Instrucción RALRM (Página 398): Permite recibir una alarma con toda la información
correspondiente de un módulo o dispositivo y proporciona esta información a sus
parámetros de salida.
● Instrucción DPRD_DAT (Página 412): Permite leer de forma coherente áreas de datos
mayores que 64 bytes de un módulo o dispositivo con la instrucción DPRD_DAT.
● Instrucción DPWR_DAT (Página 412): Permite escribir de forma coherente áreas de
datos mayores que 64 bytes en un módulo o dispositivo con la instrucción DPWR_DAT.
La instrucción D_ACT_PT (Página 402) permite desactivar y activar dispositivos PROFINET
IO configurados de forma selectiva. También es posible determinar si cada dispositivo
PROFINET IO asignado está activado o desactivado en esos momentos.

Nota
Nota: La instrucción D_ACT_DP solo puede utilizarse con dispositivos PROFINET IO. No es
posible emplear la instrucción con esclavos PROFIBUS DP.

La instrucción DPNRM_DG (Página 420) permite leer los datos de diagnóstico actuales de
un esclavo DP en el formato especificado en EN 50 170 volumen 2, PROFIBUS.

Nota
La instrucción DPNRM_DG solo puede utilizarse con PROFIBUS.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 389
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.2 RDREC y WRREC (leer/escribir registro)


Las instrucciones RDREC (leer registro) y WRREC (escribir registro) se pueden utilizar con
PROFINET, PROFIBUS y AS-i.

Tabla 9- 75 Instrucciones RDREC y WRREC

KOP / FUP SCL Descripción


"RDREC_DB"( Use la instrucción RDREC para leer un
req:=_bool_in_, registro con el número INDEX de un
ID:=_word_in_, componente direccionado por la ID, como
index:=_dint_in_, un rack central o un componente descen-
mlen:=_uint_in_, tralizado (PROFIBUS DP o PROFINET
valid=>_bool_out_, IO). Asigne el número máximo de bytes
que deben leerse en MLEN. La longitud
busy=>_bool_out_,
seleccionada del área de destino
error=>_bool_out_,
RECORD debe tener como mínimo la
status=>_dword_out_, longitud de MLEN bytes.
len=>_uint_out_,
rec-
ord:=_variant_inout_);
"WRREC_DB"( Use la instrucción WRREC para transferir
req:=_bool_in_, un RECORD con el número de registro
ID:=_word_in_, INDEX a un esclavo DP o dispositivo
index:=_dint_in_, PROFINET IO direccionado por la ID,
len:=_uint_in_, como un módulo del rack central o un
done=>_bool_out_, componente descentralizado (PROFIBUS
DP o PROFINET IO).
busy=>_bool_out_,
error=>_bool_out_, Asigne la longitud en bytes del registro
status=>_dword_out_, que debe transmitirse. Así, la longitud
seleccionada del área de origen
rec-
RECORD debe tener como mínimo la
ord:=_variant_inout_);
longitud de LEN bytes.
1 STEP 7 crea el DB automáticamente al insertar la instrucción.
2 En los ejemplos SCL, "RDREC_DB" y "WRREC_DB" son los nombres de los DB de instancia.

Controlador programable S7-1200


390 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Tabla 9- 76 Tipos de datos RDREC y WRREC para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool REQ = 1: Transferir juego de datos
ID IN HW_IO (Word) Dirección lógica del esclavo DP o componente PROFINET IO
(módulo o submódulo):
• Para un módulo de salida debe activarse el bit 15 (por ejem-
plo, para dirección 5: ID:= DW#16#8005).
• Para un módulo combinado debe especificarse le menor de
las dos direcciones.
Nota: en V3.0, la ID de dispositivo puede determinarse de uno
de los modos siguientes:
• seleccionando lo siguiente en la "Vista de redes":
– dispositivo (casilla gris)
– "Propiedades" del dispositivo
– "ID de hardware"
Nota: no todos los dispositivos muestran sus IDs de
hardware.
• seleccionando lo siguiente en el menú "Árbol del proyecto":
– variables PLC
– tabla de variables predeterminada
– tabla de constantes del sistema
Se muestran todas las IDs de hardware configuradas para el
dispositivo.
Nota: en V4.0, la ID de dispositivo (identificador de hardware)
para el módulo de interfaz se determina yendo a la tabla de
variables y localizando el parámetro "Nombre de dispositivo
[ENCABEZADO]" en Constantes de sistema.
INDEX IN Byte, Word, USInt, Número de registro
UInt, SInt, Int, DInt
MLEN IN Byte, USInt, UInt Longitud máxima en bytes de la información del registro que
debe recuperarse (RDREC)
VALID OUT Bool Se ha recibido un nuevo registro y es válido (RDREC). El bit
VALID es TRUE durante un ciclo tras haberse finalizado la últi-
ma petición sin errores.
DONE OUT Bool El registro se ha transferido (WRREC). El bit DONE es TRUE
durante un ciclo tras haberse finalizado la última petición sin
errores.
BUSY OUT Bool • BUSY = 1: El proceso de lectura (RDREC) o escritura
(WRREC) todavía no ha terminado.
• BUSY = 0: La transmisión del juego de datos ha finalizado.
ERROR OUT Bool ERROR = 1: Se ha producido un error de lectura (RDREC) o
escritura (WRREC). El bit ERROR es TRUE durante un ciclo
tras haberse finalizado la última petición con un error. El valor
del código de error en el parámetro STATUS solo es válido
durante un único ciclo en que ERROR = TRUE.
STATUS OUT DWord Estado (Página 407) de bloque o información de error
(Página 564)

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 391
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetro y tipo Tipo de datos Descripción


LEN OUT (RDREC) UInt • Longitud de la información de registro recuperada (RDREC)
IN (WRREC)
• Longitud máxima en bytes del registro que debe transferirse
(WRREC)
RECORD IN_OUT Variant • Área de destino para el registro recuperado (RDREC)
• Registro (WRREC)

Las instrucciones RDREC y WRREC funcionan de forma asíncrona, de modo que el


procesamiento se extiende a lo largo de varias llamadas de la instrucción. Inicie la tarea
llamando RDREC o WRREC con REQ = 1.
El estado de la tarea se muestra en el parámetro de salida BUSY y en los dos bytes
centrales del parámetro de salida STATUS. La transferencia del registro se ha completado
cuando el parámetro de salida BUSY se ha establecido en FALSE.
Un valor de TRUE (solo durante un ciclo) en el parámetro de salida VALID (RDREC) o
DONE (WRREC) verifica que el registro se ha transferido correctamente al área de destino
RECORD (RDREC) o al dispositivo de destino (WRREC). En caso de RDREC, el parámetro
de salida LEN contiene la longitud de los datos recuperados en bytes.
El parámetro de salida ERROR (solo durante un ciclo cuando ERROR = TRUE) indica si se
ha producido un error en una transmisión. En ese caso, el parámetro de salida STATUS
(solo durante un ciclo cuando ERROR = TRUE) contiene la información de error.
Los registros están definidos por el fabricante del dispositivo de hardware. Consulte la
documentación del dispositivo del fabricante de hardware para obtener información
detallada acerca de un registro.
Es posible utilizar un máximo de cuatro instrucciones RDREC y cuatro instrucciones
WRREC al mismo tiempo.

Nota
Si un esclavo DPV1 se configura mediante un archivo GSD (GSD vers. 3 y superior) y la
interfaz DP del maestro DP está ajustada en "compatible con S7", no será posible leer
juegos de datos de los módulos E/S en el programa de usuario con "RDREC" o escribir en
los módulos E/S con "WRREC". En este caso, el maestro DP direcciona el slot equivocado
(slot configurado + 3).
Remedio: pone la interfaz del maestro DP a "DPV1".

Nota
Las interfaces de las instrucciones "RDREC" y "WRREC" son idénticas a los FBs "RDREC"
y "WRREC" definidos en la norma "PROFIBUS Guideline PROFIBUS Communication and
Proxy Function Blocks according to IEC 61131-3".

Nota
Si se utiliza "RDREC" o "WRREC" para leer o escribir un juego de datos para PROFINET
IO, la CPU interpretará los valores negativos de los parámetros INDEX, MLEN y LEN como
un entero de 16 bits sin signo.

Controlador programable S7-1200


392 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.3 GETIO (leer memoria imagen de proceso)


La instrucción "GETIO" se utiliza para leer de forma coherente las entradas de módulos o
submódulos de esclavos DP o dispositivos PROFINET IO. La instrucción "GETIO" llama la
instrucción "DPRD_DAT (Página 412)". Si no hay errores durante la transmisión de datos,
los datos leídos se han introducido en el área de destino indicada en INPUTS.

Tabla 9- 77 Instrucción GETIO (leer memoria imagen de proceso)

KOP / FUP SCL Descripción


"GETIO_DB"( La instrucción "GETIO" se utiliza para
id:=_uint_in_, leer de forma coherente todas las
status=>_dword_out_, entradas de un esclavo DP normali-
len=>_int_out_, zado / dispositivo PROFINET IO.
inputs:=_variant_inout_);

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "GETIO_DB" es el nombre del DB de instancia.

El área de destino debe tener una longitud mayor o igual a la longitud del componente
seleccionado.
Si se lee de un esclavo DP normalizado con una configuración modular o con varios
identificadores DP, solo se puede acceder a los datos de un componente o identificador DP
en la dirección inicial configurada con una llamada de "GETIO".

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "GETIO":

Parámetro Declaración Tipo de datos Descripción


ID IN HW_SUBMOD Identificador de hardware del esclavo DP normalizado / dispositivo
ULE PROFINET IO
STATUS1 OUT DWord Contiene la información de error de "DPRD_DAT (Página 412)" en la for-
ma DW#16#40xxxx00
LEN OUT Int Cantidad de datos leídos en bytes
INPUTS IN_OUT Variant Área de destino de los datos leídos: El área de destino debe tener una
longitud mayor o igual a la longitud del esclavo DP normalizado / dispositi-
vo PROFINET IO seleccionado.
Puede utilizar los tipos de datos siguientes:
• Tipos de datos de sistema y array de tipos de datos de sistema: BYTE,
CHAR, SINT, USINT, WORD, INT, UINT, DWORD, DINT, UDINT,
REAL, LREAL, LWORD, LINT, ULINT
• Tipos de datos personalizados (UDT)
• Estructuras (STRUCT), pero solo en bloques de datos no optimizados
(DB)

1 Utilice el tipo de datos DWord para visualizar los códigos de error de "GETIO".

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 393
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.4 SETIO (transferir memoria imagen de proceso)


La instrucción "SETIO" se utiliza para transferir de forma coherente los datos del rango de
origen definido en el parámetro OUTPUTS a los módulos o submódulos direccionados de
esclavos DP normalizados y dispositivos PROFINET IO. Si el área de direcciones relevante
del esclavo DP normalizado / dispositivo PROFINET IO se ha configurado como rango
coherente en una memoria imagen de proceso, los datos se transfieren a la memoria
imagen de proceso. "SETIO" llama la instrucción "DPWR_DAT (Página 412)" durante la
transferencia.

Tabla 9- 78 Instrucción SETIO (leer memoria imagen de proceso)

KOP / FUP SCL Descripción


"SETIO_DB"( La instrucción "SETIO" se utiliza
id:=_uint_in_, para transferir de forma coherente
status=>_dword_out_, los datos del rango de origen defini-
outputs:=_variant_inout_); do en el parámetro OUTPUTS al
esclavo DP normalizado / dispositivo
PROFINET IO direccionado.

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "SETIO_DB" es el nombre del DB de instancia.

El rango de origen debe tener una longitud mayor o igual a la longitud del componente
seleccionado.
En el caso de un esclavo DP normalizado / dispositivo PROFINET IO con configuración
modular o varios identificadores DP, solo es posible acceder a un identificador DP /
componente por llamada de "SETIO".

Controlador programable S7-1200


394 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "SETIO":

Parámetro Declaración Tipo de datos Descripción


ID IN HW_SUBMOD Identificador de hardware del esclavo DP normalizado / dispositivo
ULE PROFINET IO
STATUS1 OUT DWord Contiene la información de error de "DPWR_DAT (Página 412)" en la
forma DW#16#40xxxx00
OUTPUTS IN_OUT Variant Rango de origen de los datos que deben escribirse: El rango de origen
debe tener una longitud mayor o igual a la longitud del esclavo DP norma-
lizado / dispositivo PROFINET IO seleccionado.
Puede utilizar los tipos de datos siguientes:
• Tipos de datos de sistema y array de tipos de datos de sistema: BYTE,
CHAR, SINT, USINT, WORD, INT, UINT, DWORD, DINT, UDINT,
REAL, LREAL, LWORD, LINT, ULINT
• Tipos de datos personalizados (UDT)
• Estructuras (STRUCT), pero solo en bloques de datos no optimizados
(DB)

1 Utilice el tipo de datos DWord para visualizar los códigos de error de "SETIO".

9.3.5 GETIO_PART (leer área de memoria imagen de proceso)


La instrucción "GETIO_PART" se utiliza para leer de forma coherente una parte de las
entradas de módulos o submódulos de esclavos DP o dispositivos PROFINET IO.
GETIO_PART llama la instrucción "DPRD_DAT (Página 412)".

Tabla 9- 79 GETIO_PART (leer área de memoria imagen de proceso)

KOP / FUP SCL Descripción


"GETIO_PART_DB"( La instrucción GETIO_PART se utili-
id:=_uint_in_, za para leer de forma coherente una
offset:=_int_in_, parte relacionada de las entradas de
len:=_int_in_, un módulo de periferia.
status=>_dword_out_,
error=>_bool_out_,
inputs:=_variant_inout_);

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "GETIO_PART_DB" es el nombre del DB de instancia.

Utilice el parámetro de entrada ID para seleccionar el módulo de periferia por medio del
identificador de hardware.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 395
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Utilice los parámetros OFFSET y LEN para especificar la parte del área de la memoria
imagen de proceso que debe leerse. Si el área de entrada que abarcan OFFSET y LEN no
está completamente cubierta por el módulo, el bloque devuelve el código de error
DW#16#4080B700.
La longitud del área de destino debe ser mayor o igual a la cantidad de datos que se leerán:
● Si no hay errores durante la transmisión de datos, ERROR recibe el valor FALSE. Los
datos leídos se escriben en el área de destino definida en el parámetro INPUTS.
● Si se produce un error durante la transmisión de datos, ERROR recibe el valor TRUE. El
parámetro STATUS recibe la información de error de DPRD_DAT.
● Si el área de destino es mayor que LEN, la instrucción escribe en los primeros bytes LEN
del área de destino. ERROR recibe el valor FALSE.

Parámetros
La tabla siguiente muestra los parámetros de la instrucción GETIO_PART:

Parámetro Declaración Tipo de datos Descripción


ID IN HW_SUBMO Identificador de hardware del módulo
DULE
OFFSET IN Int Número del primer byte que debe leerse en la memoria imagen de proceso
del componente (mínimo valor posible: 0)
LEN IN Int Número de bytes que deben leerse
STATUS1 OUT DWord Contiene la información de error de DPRD_DAT (Página 412) en la forma
DW#16#40xxxx00 si ERROR = TRUE
ERROR OUT Bool Visualización del error: ERROR = TRUE si se produce un error cuando se
llama DPRD_DAT (Página 412)
INPUTS IN_OUT Variant Área de destino de los datos leídos: Si el área de destino es mayor que
LEN, la instrucción escribe en los primeros bytes LEN del área de destino.
Puede utilizar los tipos de datos siguientes:
• Tipos de datos de sistema y array de tipos de datos de sistema: BYTE,
CHAR, SINT, USINT, WORD, INT, UINT, DWORD, DINT, UDINT,
REAL, LREAL, LWORD, LINT, ULINT
• Tipos de datos personalizados (UDT)
• Estructuras (STRUCT), pero solo en bloques de datos no optimizados
(DB)

1 Utilice el tipo de datos DWord para visualizar los códigos de error de GETIO_PART .

Controlador programable S7-1200


396 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.6 SETIO_PART (transferir área de memoria imagen de proceso)


La instrucción "SETIO_PART" se utiliza para escribir de forma coherente datos del área de
origen delimitada por OUTPUTS en las salidas de módulos o submódulos de esclavos DP o
dispositivos PROFINET IO. SETIO_PART llama la instrucción "DPWR_DAT (Página 412)".

Tabla 9- 80 SETIO_PART (transferir área de memoria imagen de proceso)

KOP / FUP SCL Descripción


"SETIO_PART_DB"( La instrucción SETIO_PART se utiliza
id:=_uint_in_, para escribir de forma coherente los
offset:=_int_in_, datos del área de origen delimitada
len:=_int_in_, por OUTPUTS en las salidas de un
status=>_dword_out_, módulo de periferia.
error=>_bool_out_,
outputs:=_variant_inout_);

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "SETIO_PART_DB" es el nombre del DB de instancia.

Con el parámetro de entrada ID, se selecciona el módulo de periferia en base al


identificador de hardware.
Con los parámetros OFFSET y LEN, se asigna la parte del área de la memoria imagen de
proceso que debe escribirse para el componente direccionado por ID. Si el área de salida
que abarcan OFFSET y LEN no está completamente cubierta por el módulo, el bloque
devuelve el código de error DW#16#4080B700.
La longitud del área de destino debe ser mayor o igual a la cantidad de datos que se leerán:
● Si no hay errores durante la transmisión de datos, ERROR recibe el valor FALSE.
● Si se produce un error durante la transmisión de datos, ERROR recibe el valor TRUE y
STATUS recibe la información de error de DPWR_DAT.
● Si el área de origen es mayor que LEN, la instrucción transfiere los primeros bytes LEN
de OUTPUTS. ERROR recibe el valor FALSE.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 397
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción SETIO_PART:

Parámetro Declaración Tipo de datos Descripción


ID IN HW_SUBMO Identificador de hardware del módulo de periferia
DULE
OFFSET IN Int Número del primer byte que debe escribirse en la memoria imagen de
proceso del componente (mínimo valor posible: 0)
LEN IN Int Número de bytes que deben escribirse
STATUS1 OUT DWord Contiene la información de error de DPWR_DAT (Página 412) en la forma
DW#16#40xxxx00 si ERROR = TRUE
ERROR OUT Bool Visualización del error: ERROR = TRUE si se produce un error cuando se
llama DPWR_DAT (Página 412)
OUTPUTS IN_OUT Variant Rango de origen de los datos que deben escribirse: Si el área de origen es
mayor que LEN, los primeros bytes LEN se transfieren de OUTPUTS.
Puede utilizar los tipos de datos siguientes:
• Tipos de datos de sistema y array de tipos de datos de sistema: BYTE,
CHAR, SINT, USINT, WORD, INT, UINT, DWORD, DINT, UDINT,
REAL, LREAL, LWORD, LINT, ULINT
• Tipos de datos personalizados (UDT)
• Estructuras (STRUCT), pero solo en bloques de datos no optimizados
(DB)

1 Utilice el tipo de datos DWord para visualizar los códigos de error de SETIO_PART .

9.3.7 RALRM (recibir alarma)


La instrucción RALRM (Recibir alarma) puede usarse con PROFINET y PROFIBUS.

Tabla 9- 81 Instrucción RALRM

KOP / FUP SCL Descripción


"RALRM_DB"( Use la instrucción RALRM (leer alarma) para leer la información
mode:=_int_in_, de una alarma de diagnóstico desde módulos o dispositivos de
f_ID:=_word_in_, E/S PROFIBUS o PROFINET.
mlen:=_uint_in_, La información de los parámetros de salida contiene la informa-
new=>_bool_out_, ción de inicio del OB al que se ha llamado, así como informa-
status=>_dword_out_, ción sobre el origen de la alarma.
ID=>_word_out_, Llame a RALRM en un OB de alarma para devolver información
len=>_uint_out_, sobre los eventos que han producido la alarma. En el S7-1200.
tinfo:=_variant_inout_, Se soportan las siguientes alarmas de OB de diagnóstico: es-
ainfo:=_variant_inout_); tado, actualización, perfil, alarma de error de diagnóstico, en-
chufe o desenchufe de módulos, fallo de rack o estación.
1 STEP 7 crea el DB automáticamente al insertar la instrucción.
2 En el ejemplo SCL, "RALRM_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


398 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Tabla 9- 82 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


MODE IN Byte, USInt, SInt, Int Estado operativo
F_ID IN HW_IO (Word) La dirección inicial lógica del componente (módulo) del cual deben
recibirse alarmas
Nota: la ID de dispositivo puede determinarse de uno de los modos
siguientes:
• seleccionando lo siguiente en la "Vista de redes":
– dispositivo (casilla gris)
– "Propiedades" del dispositivo
– "ID de hardware"
Nota: No todos los dispositivos muestran sus IDs de hardware.
• seleccionando lo siguiente en el menú "Árbol del proyecto":
– variables PLC
– tabla de variables predeterminada
– tabla de constantes del sistema
– Se muestran todas las IDs de hardware configuradas para el
dispositivo.
MLEN IN Byte, USInt, UInt Longitud máxima en bytes de la información de alarma de datos que
debe recibirse. Si MLEN es 0, se permitirá la recepción de tanta infor-
mación de alarma de datos como esté disponible en el área de destino
de AINFO.
NEW OUT Bool Se ha recibido una nueva alarma.
STATUS OUT DWord Estado de la instrucción RALRM. Consulte "Parámetro STATUS para
RDREC, WRREC y RALRM" (Página 407) para obtener más informa-
ción.
ID OUT HW_IO (Word) Identificador de hardware del módulo de E/S que ha provocado la
alarma de diagnóstico.
Nota: consulte el parámetro F_ID para obtener una explicación de
cómo determinar la ID de dispositivo.
LEN OUT DWord, UInt, UDInt, Longitud de la información de alarma de AINFO recibida.
DInt, Real, LReal
TINFO IN_OUT Variant Información de la tarea: Área de destino para inicio de OB e informa-
ción de administración. La longitud de TINFO siempre es de 32 bytes.
AINFO IN_OUT Variant Información de alarma: Área de destino para información de encabe-
zado e información de alarma adicional. Para AINFO debe preverse
una longitud equivalente como mínimo a los bytes de MLEN si MLEN
es mayor que 0. La longitud de AINFO es variable.

Nota
Si se llama "RALRM" en un OB cuyo evento de arranque no es una alarma E/S, la
instrucción ofrecerá información reducida en sus salidas en correspondencia.
Asegúrese de utilizar diferentes DBs instancia al llamar "RALRM" en OBs distintos. Utilice
un DB de instancia independiente para cada evento de arranque del OB para evaluar datos
de una llamada de "RALRM" fuera del OB de alarma asociado.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 399
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Nota
La interfaz de la instrucción "RALRM" es idéntica al FB "RALRM" definido en la norma
"PROFIBUS Guideline PROFIBUS Communication and Proxy Function Blocks according to
IEC 61131-3".

Llamar RALRM
La instrucción RALRM se puede llamar en tres modos de operación diferentes (MODE).

Tabla 9- 83 Modos de operación de la instrucción RALRM

MODE Descripción
0 • ID contiene la ID de hardware del módulo de E/S que ha disparado la alarma.
• El parámetro de salida NEW se establece en TRUE.
• LEN produce una salida de 0.
• AINFO y TINFO no se actualizan con ninguna información.
1 • ID contiene la ID de hardware del módulo de E/S que ha disparado la alarma.
• El parámetro de salida NEW se establece en TRUE.
• LEN produce una salida con la cantidad de bytes de los datos AINFO que se devuelven.
• AINFO y TINFO se actualizan con la información de alarma.
2 Si la ID de hardware asignada al parámetro de entrada F_ID ha activado la alarma, entonces:
• ID contiene la ID de hardware del módulo de E/S que ha disparado la alarma. Debe ser igual que el
valor de F_ID.
• El parámetro de salida NEW se establece en TRUE.
• LEN produce una salida con la cantidad de bytes de los datos AINFO que se devuelven.
• AINFO y TINFO se actualizan con la información de alarma.

Nota
Si se asigna un área de destino demasiado corta para TINFO o AINFO, RALRM no puede
devolver la información completa.
MLEN puede limitar la cantidad de datos de AINFO que se devuelven.
Consulte los parámetros de AINFO y TINFO de la Ayuda on line de STEP 7 para obtener
información sobre cómo interpretar los datos de TINFO y AINFO.

Controlador programable S7-1200


400 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Datos de bloques de organización de TInfo


En la tabla se muestra cómo se organizan los datos de TInfo para la instrucción RALRM:

Igual para OB: estado, actualización, 0 SI_Format OB_Class OB_Nr


perfil, alarma de error de diagnóstico,
presencia de módulo, fallo de rack o esta-
ción
4 LADDR

TI_Submodule - OB: estado, actualiza- 4 Slot


ción, perfil
8 Indicador 0

TI_DiagnosticInterrupt - OB: Alarma de 4 IO_State


error de diagnóstico
8 Canal MultiError 0

TI_PlugPullModule - OB: Presencia de 4 Event_Class Fault_ID


módulos
8 0 0

TI_StationFailure - OB: Fallo del rack o 4 Event_Class Fault_ID


estación
8 0 0

Igual para OB: estado, actualización, 12 0


perfil, alarma de error de diagnóstico,
presencia de módulo, fallo de rack o esta-
ción
16
20 Dirección slv_prfl intr_type
24 flags1 flags2 ID
281 Fabricante Instancia
1 Los bytes 28 - 31 (fabricante e instancia) no se utilizan con PROFIBUS.

Nota
Consulte el sistema de información online de STEP 7 para obtener información más
detallada sobre los datos de TINFO.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 401
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.8 D_ACT_DP (activar/desactivar dispositivos PROFINET IO)


La instrucción "D_ACT_DP" permite desactivar y activar dispositivos PROFINET IO
configurados de forma selectiva. También es posible determinar si cada dispositivo
PROFINET IO asignado está activado o desactivado en esos momentos.

Nota
La instrucción D_ACT_DP solo puede utilizarse con dispositivos PROFINET IO. No es
posible emplear la instrucción con esclavos PROFIBUS DP.

Tabla 9- 84 Instrucción D_ACT_DP

KOP / FUP SCL Descripción


"D_ACT_DP_DB"( La instrucción D_ACT_DP se utiliza
req:=_bool_in_, para desactivar y activar dispositivos
mode:=_usint_in_, PROFINET IO configurados y deter-
laddr:=_uint_in_, minar si cada dispositivo PROFINET
ret_val=>_int_out_, IO asignado está activado o desacti-
busy=>_bool_out_); vado en esos momentos.

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "D_ACT_DP_SFB_DB" es el nombre del DB de instancia.

No es posible desactivar/activar una pasarela del tipo IE/PB Link PN IO por medio de la
instrucción D_ACT_DP. Si, de todas formas, se utiliza D_ACT_DP en la citada pasarela, la
CPU devuelve el valor W#16#8093 (no hay ningún objeto de hardware que pueda activarse
o desactivarse para la dirección especificada en LADDR).

Nota
La tarea de desactivación o activación requiere varias ejecuciones por el punto de control
del ciclo. Por consiguiente, no es posible esperar a que finalice una tarea de este tipo en un
bucle programado.

Descripción del funcionamiento


D_ACT_DP es una instrucción asíncrona, con lo que el procesamiento de la tarea abarca
varias ejecuciones de D_ACT_DP. Inicie la tarea llamando D_ACT_DP con REQ = 1.
Los parámetros de salida RET_VAL y BUSY indican el estado de la tarea.

Aplicación
Si se configuran dispositivos PROFINET IO en una CPU que realmente no existe o que
actualmente no se necesita, esta CPU sigue accediendo a los dispositivos PROFINET IO a
intervalos regulares. Después de desactivar los dispositivos la CPU deja de acceder a ellos.
Los respectivos eventos de error no se producen más.

Controlador programable S7-1200


402 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Ejemplos
Desde el punto de vista de un fabricante de máquinas hay muchas opciones de dispositivos
posibles en la fabricación de máquinas en serie. Sin embargo, cada máquina suministrada
incluye únicamente una combinación de opciones determinada.
El fabricante configura cada una de estas opciones posibles para la máquina como un
dispositivo PROFINET IO. El fabricante lo hace para crear y mantener un programa de
usuario común que tenga todas las opciones posibles. D_ACT_DP se utiliza para desactivar
todos los dispositivos PROFINET IO que no están presentes al arrancar la máquina.
Una situación similar se da con las máquinas herramienta que disponen de muchas
opciones de herramientas pero que en realidad solo utilizan algunas de ellas en un
momento determinado. Estas herramientas se implementan como dispositivos PROFINET
IO. Con D_ACT_DP, el programa de usuario activa las herramientas que se necesitan
actualmente y desactiva las que se necesitarán más adelante.

Identificación de una tarea


Si se ha empezado una tarea de desactivación o activación y se vuelve a llamar D_ACT_DP
antes de que finalice la tarea, el comportamiento de la instrucción depende de si la nueva
llamada incluye la misma tarea o no. Si el parámetro de entrada LADDR coincide, la llamada
se interpreta como subsiguiente.

Desactivar dispositivos PROFINET IO


Cuando se desactiva un dispositivo PROFINET con D_ACT_DP, las salidas del proceso del
mismo se ponen a los valores sustitutivos configurados o a "0" (estado seguro). El
controlador PROFINET IO asignado no sigue direccionando este componente. Los LED de
error del controlador PROFINET IO o la CPU no identifican los dispositivos PROFINET IO
desactivados como averiados o ausentes.
La CPU actualiza con "0" la memoria imagen de proceso de las entradas de los dispositivos
PROFINET IO desactivados. Por consiguiente, la CPU trata los dispositivos PROFINET IO
desactivados simplemente como averiados.
Si se accede directamente desde el programa a los datos de usuario de un dispositivo
PROFINET IO previamente desactivado, el comportamiento del sistema depende del
tratamiento de errores seleccionado para el bloque:
● Si el tratamiento de errores global está activado, el sistema introduce un evento de
arranque para el error de acceso en el búfer de diagnóstico y permanece en RUN.
● Si el tratamiento de errores local de bloques está activado, el sistema introduce una
causa del error en la estructura del error. Se accede a la causa del error por medio de la
instrucción GET_ERROR_ID (Página 317).
Un error de acceso de lectura devuelve "0". Encontrará más información sobre el
tratamiento de errores en "Prioridades y colas de espera para la ejecución de eventos"
(Página 106).
Si se intenta acceder a un dispositivo PROFINET IO desactivado por medio de una
instrucción (p. ej. "RD_REC (Página 390)"), en RET_VAL se recibe la misma información de
error que para un dispositivo PROFINET IO no disponible.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 403
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Si una estación PROFINET IO falla después de haberla desactivado con D_ACT_DP, el


sistema operativo no detecta el fallo.

Activar dispositivos PROFINET IO


Cuando se reactiva un dispositivo PROFINET IO con D_ACT_DP, el controlador PROFINET
IO asociado configura el componente y lo parametriza (igual que cuando retorna una
estación PROFINET IO que había fallado). Esta activación termina cuando el componente
está en disposición de transferir datos de usuario.
Si se intenta activar un dispositivo PROFINET IO al que no puede accederse (p. ej. porque
estaba físicamente separado del bus) con una instrucción D_ACT_DP, la instrucción
devuelve el código de error W#16#80A7 una vez ha finalizado el tiempo de parametrización
configurado para periferia descentralizada. El dispositivo PROFINET IO se activa y, puesto
que no es posible acceder a él, se muestra un aviso en correspondencia en el diagnóstico
del sistema.
Si, más adelante, el dispositivo PROFINET IO vuelve a estar accesible, el comportamiento
del sistema será el estándar.

Nota
La activación de un dispositivo PROFINET IO requiere cierto tiempo. Si desea cancelar una
tarea de activación en curso, inicie D_ACT_DP con el mismo valor para LADDR y MODE =
2. Debe repetir la llamada de D_ACT_DP con MODE = 2 hasta que se muestre la
cancelación correcta de la tarea de activación con RET_VAL = 0.

Controlador programable S7-1200


404 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción D_ACT_DP:

Parámetro Declara- Tipo de datos Descripción


ción
REQ IN Bool Parámetro de control disparado por nivel
REQ = 1: Ejecutar activación o desactivación
MODE IN USInt Identificador de la tarea
Valores posibles:
• 0: Solicitar información sobre si el componente direccionado
está activado o desactivado (salida mediante el parámetro
RET_VAL)
• 1: Activar el dispositivo PROFINET IO
• 2: Desactivar el dispositivo PROFINET IO
LADDR IN HW_DEVICE Identificador de hardware del dispositivo PROFINET IO
(HW_Device)
El número puede tomarse de las propiedades del dispositivo
PROFINET IO en la Vista de redes o de la ficha "Constantes de
sistema" de la tabla de variables estándar.
Si tanto el identificador del diagnóstico de dispositivo como el
identificador de las transiciones de estado operativo se especifi-
can allí, hay que utilizar el código del diagnóstico de dispositivo.
RET_VAL OUT Int Si se produce un error mientras el programa ejecuta la instrucción,
el valor de retorno contiene un código de error.
BUSY OUT Bool Código activo:
• BUSY = 1: La tarea sigue activa.
• BUSY = 0: La tarea ha finalizado.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 405
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetro RET_VAL

Código de Explicación
error*
(W#16#...)
0000 Tarea finalizada sin errores.
0001 El dispositivo PROFINET IO está activo (este código de error solo es posible si
MODE = 0).
0002 El dispositivo PROFINET IO está desactivado (este código de error solo es posible si
MODE = 0).
7000 Primera llamada con REQ = 0: La tarea especificada en LADDR no está activa;
BUSY tiene el valor "0".
7001 Primera llamada con REQ = 1. El programa ha disparado la tarea especificada en
LADDR. BUSY tiene el valor "1".
7002 Llamada intermedia (REQ irrelevante). La tarea activada sigue activa; BUSY tiene el
valor "1".
8090 • No se ha configurado un módulo con la dirección especificada en LADDR.
• La CPU funciona como esclavo I / I-device y se ha especificado una dirección de
este esclavo I / I-device en LADDR.
8092 La desactivación del dispositivo PROFINET IO direccionado actualmente (MODE = 2)
no puede cancelarse activándolo (MODE = 1). Active el componente más adelante.
8093 La dirección especificada en LADDR no pertenece a ningún dispositivo PROFINET
IO que pueda activarse o desactivarse, o bien el parámetro MODE es desconocido.
8094 Se ha intentado activar un dispositivo que es un posible interlocutor de un puerto de
cambio de herramientas. Sin embargo, actualmente ya hay otro dispositivo activado
en este puerto de cambio de herramientas. El dispositivo activado permanece activo.
80A0 Error en la comunicación entre la CPU y el controlador IO.
80A1 No es posible asignar parámetros al componente direccionado. (Este código de error
solo es posible si MODE = 1.)
Nota: Si este componente vuelve a fallar durante la parametrización del dispositivo
activado, la instrucción D_ACT_DP proporciona la información de error. Si la parame-
trización de un solo módulo falla, D_ACT_DP devuelve la información de error
W#16#0000.
80A3 El controlador PROFINET IO correspondiente no soporta esta función.
80A4 La CPU no soporta esta función para un controlador PROFINET IO externo.
80A6 Error de slot en el dispositivo PROFINET IO; no es posible acceder a todos los datos
de usuario (este código de error solo está disponible si MODE = 1).
Nota: D_ACT_DP solo devuelve esta información de error si el componente activado
vuelve a fallar después de la parametrización y antes de que finalice la ejecución de
la instrucción D_ACT_DP. Si solo hay un módulo disponible, D_ACT_DP devuelve la
información de error W#16#0000.
80A7 Tiempo excedido durante la activación: El dispositivo remoto no está accesible, o
bien se ha ajustado un tiempo de parametrización demasiado corto para la periferia
centralizada y descentralizada. El estado del dispositivo remoto es "activado", pero
no está accesible.
80AA Activación con errores en el dispositivo PROFINET IO: Diferencias en la configura-
ción
80AB Activación con errores en el dispositivo PROFINET IO: Error de parametrización

Controlador programable S7-1200


406 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Código de Explicación
error*
(W#16#...)
80AC Activación con errores en el dispositivo PROFINET IO: Mantenimiento necesario
80C1 D_ACT_DP se ha iniciado y continúa con otra dirección (este código de error es posi-
ble si MODE = 1 y MODE = 2).
80C3 • Error de recurso temporal: La CPU está procesando el número máximo posible de
tareas de activación y desactivación (8). (Este código de error solo es posible si
MODE = 1 y MODE = 2.)
• La CPU está ocupada recibiendo una configuración modificada. Actualmente no
es posible activar/desactivar dispositivos PROFINET IO.
80C6 PROFINET: las tareas no recopiladas por el usuario se rechazan al reiniciar.
Información Encontrará información sobre cómo acceder al error en la instrucción
general del GET_ERROR_ID (Página 317).
error
* Los códigos de error en el editor de programas se pueden mostrar como valores enteros o hexade-
cimales.

9.3.9 Parámetro STATUS para RDREC, WRREC y RALRM


El parámetro de salida STATUS contiene información de error que se interpreta como
ARRAY[1...4] OF BYTE con la siguiente estructura:

Tabla 9- 85 Matriz de salida STATUS

Elemento de ma- Nombre Descripción


triz
STATUS[1] Function_Num • B#16#00, si no hay errores
• ID de función de DPV1-PDU: Si se produce un error, , B#16#80 se combina
lógicamente con O (para leer registro: B#16#DE; para escribir registro:
B#16#DF). Si no se utiliza ningún elemento de protocolo DPV1, se transferirá
B#16#C0 .
STATUS[2] Error_Decode Ubicación del ID de error
STATUS[3] Error_Code_1 ID de error
STATUS[4] Error_Code_2 Extensión de ID de error específica del fabricante

Tabla 9- 86 Valores de STATUS[2]

Error_decode Fuente Descripción


(B#16#....)
00 a 7F CPU Sin errores o alarmas
80 DPV1 Error según CEI 61158-6
81 a 8F CPU B#16#8x muestra un error en el "enésimo" parámetro de llamada de la instrucción.
FE, FF Perfil DP Error específico de perfil

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 407
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Tabla 9- 87 Valores de STATUS[3]

Error_decode Error_code_1 Explicación (DVP1) Descripción


(B#16#....) (B#16#....)
00 00 Sin errores o alarmas
70 00 Reservado, rechazar Llamada inicial; sin transferencia de registro activa
01 Reservado, rechazar Llamada inicial; transferencia de registro iniciada
02 Reservado, rechazar Llamada intermedia; la transferencia de registro ya está
activa
80 90 Reservado, permitir Dirección inicial lógica no válida
92 Reservado, permitir Tipo no permitido para puntero Variant
93 Reservado, permitir El componente DP direccionado vía ID o F_ID no está
configurado.
96 "RALRM (Página 398)" no puede suministrar la informa-
ción de arranque del OB, la información de administra-
ción, de encabezado o de alarma adicional.
Para los siguientes OB, se puede utilizar la instrucción
"DPNRM_DG (Página 420)" para leer de forma asíncrona
la trama actual del aviso de diagnóstico del esclavo DP
relevante (información de dirección procedente de la
información de arranque del OB):
• Alarma de proceso (Página 97)
• Estado (Página 103), Actualización (Página 104) o
Perfil (Página 104)
• Alarma de error de diagnóstico (Página 99)
• Presencia de módulos (Página 101)
A0 Error de lectura Acuse negativo al leer del módulo
A1 Error de escritura Acuse negativo al escribir del módulo
A2 Fallo del módulo Error de protocolo DP en nivel 2 (por ejemplo, fallo de
esclavo o problemas de bus)
A3 Reservado, permitir • PROFIBUS DP: Error de protocolo DP con Direct-
Data-Link-Mapper o interfaz de usuario/usuario
• PROFINET IO: Error general CM
A4 Reservado, permitir Fallo de comunicación en el bus de comunicación
A5 Reservado, permitir -
A7 Reservado, permitir Esclavo DP o módulo ocupado (error temporal).
A8 Conflicto de versiones Esclavo DP o módulo notifica versiones no compatibles.
A9 Función no soportada Función no soportada por esclavo DP o módulo
AA a AF Específico de usuario El esclavo DP o módulo devuelve un error específico de
fabricante en su aplicación. Consulte la documentación
del fabricante del esclavo DP o módulo.
B0 Índice no válido El registro no se conoce en el módulo; número de regis-
tro no permitido ≥ 256

Controlador programable S7-1200


408 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Error_decode Error_code_1 Explicación (DVP1) Descripción


(B#16#....) (B#16#....)
B1 Error de longitud de La información de longitud en el parámetro RECORD es
escritura incorrecta.
• Con "RALRM": error de longitud en AINFO

Nota: consulte la Ayuda online de STEP 7 para acce-


der directamente a información sobre cómo interpre-
tar los búferes "AINFO" devueltos.
• Con "RDREC (Página 390)" y "WRREC (Pági-
na 390)": error de longitud en "MLEN"
B2 Slot no válido El slot configurado no está ocupado.
B3 Conflicto de tipos El tipo de módulo real no coincide con el especificado.
B4 Área no válida El esclavo DP o módulo notifica un acceso a un área no
válida.
B5 Conflicto de estado El esclavo DP o módulo no está listo
B6 Acceso denegado El esclavo DP o módulo deniega el acceso.
B7 Rango no válido El esclavo DP o módulo notifica un rango no válido de un
parámetro o valor.
B8 Parámetro no válido El esclavo DP o módulo notifica un parámetro no válido.
B9 Tipo no válido El esclavo DP o módulo notifica un tipo no válido:
• Con "RDREC (Página 390)": búfer demasiado pe-
queño (no es posible leer partes de un campo)
• Con "WRREC (Página 390)": búfer demasiado pe-
queño (no es posible escribir en partes de un campo)
BA a BF Específico de usuario El esclavo DP o módulo devuelve un error específico de
fabricante al acceder. Consulte la documentación del
fabricante del esclavo DP o módulo.
C0 Conflicto de restricción • Con "WRREC (Página 390)": Los datos sólo se pue-
de lectura den escribir cuando la CPU se encuentra en estado
operativo STOP.
Nota: Ello significa que los datos no pueden escribir-
se con el programa de usuario. Sólo se pueden escri-
bir datos online con una programadora o un PC.
• Con "RDREC (Página 390)": el módulo enruta el
registro, pero no hay datos o los datos sólo pueden
leerse cuando la CPU está en estado operativo
STOP.
Nota: Si los datos sólo pueden leerse cuando la CPU
está en modo STOP, no es posible una evaluación
por parte del programa de usuario. En ese caso, sólo
pueden leerse datos online con una programadora o
un PC.
C1 Conflicto de restricción El módulo aún no ha procesado los datos de la solicitud
de escritura anterior de escritura en el módulo.
C2 Recurso ocupado Actualmente el módulo está procesando el número má-
ximo de tareas posibles para una CPU.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 409
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Error_decode Error_code_1 Explicación (DVP1) Descripción


(B#16#....) (B#16#....)
C3 Recurso no disponible Los recursos requeridos están ocupados en este mo-
mento.
C4 Error temporal interno. No ha sido posible realizar la
tarea.
Repetir la tarea. Si se produce este error, compruebe la
instalación en busca de fuentes de perturbación eléctrica.
C5 Esclavo DP o módulo no disponible
C6 La transferencia del registro se ha cancelado debido a la
cancelación por clase de prioridad
C7 Tarea cancelada debido a rearranque en caliente o en
frío del maestro DP.
C8 a CF El esclavo DP o módulo devuelve un error de recurso
específico de fabricante. Consulte la documentación del
fabricante del esclavo DP o módulo.
Dx Específico de usuario Específico de esclavo DP. Véase la descripción del es-
clavo DP.
81 00 a FF Error en el parámetro de llamada inicial (con "RALRM
(Página 398)": MODE)
00 Estado operativo no válido
82 00 a FF Error en el segundo parámetro de llamada
88 00 a FF Error en el octavo parámetro de llamada (con "RALRM
(Página 398)": TINFO)
Nota: consulte la Ayuda online de STEP 7 para acceder
directamente a información sobre cómo interpretar los
búferes "TINFO" devueltos.
01 ID de sintaxis errónea
23 Estructura de cantidad excedida o área de destino de-
masiado pequeña
24 ID de rango errónea
32 Número de DB/DI fuera del rango de usuario
3A El número de DB/DI es CERO para la ID de área DB/DI o
el DB/DI especificado no existe.
89 00 a FF Error en el noveno parámetro de llamada (con "RALRM
(Página 398)": AINFO)
Nota: consulte la Ayuda online de STEP 7 para acceder
directamente a información sobre cómo interpretar los
búferes "AINFO" devueltos.
01 ID de sintaxis errónea
23 Estructura de cantidad excedida o área de destino de-
masiado pequeña
24 ID de rango errónea
32 Número de DB/DI fuera del rango de usuario
3A El número de DB/DI es CERO para la ID de área DB/DI o
el DB/DI especificado no existe.
8A 00 a FF Error en el 10.º parámetro de llamada

Controlador programable S7-1200


410 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Error_decode Error_code_1 Explicación (DVP1) Descripción


(B#16#....) (B#16#....)
8F 00 a FF Error en el 15.º parámetro de llamada
FE, FF 00 a FF Error específico de perfil

Elemento de matriz STATUS[4]


Con errores DPV1, el maestro DP transfiere en STATUS[4] a la CPU y a la instrucción. Sin
un error de DPV1, este valor se pone a 0 con las siguientes excepciones para RDREC:
● STATUS[4] contiene la longitud del área de destino de RECORD, si MLEN > la longitud
del área de destino de RECORD.
● STATUS[4]=MLEN, si la longitud real del registro < MLEN < la longitud del área de
destino de RECORD.
● STATUS[4]=0, si STATUS[4] > 255; debe estar activado
En PROFINET IO, STATUS[4] tiene el valor 0.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 411
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

9.3.10 Otras

9.3.10.1 DPRD_DAT y DPWR_DAT (leer/escribir datos coherentes)


La instrucción DPRD_DAT (leer datos coherentes) se utiliza para leer uno o varios bytes de
datos de forma coherente y la instrucción DPWR_DAT (escribir datos coherentes) se utiliza
para transferir uno o varios bytes de datos de forma coherente. Las instrucciones
DPRD_DAT y DPWR_DAT se pueden utilizar con PROFINET y PROFIBUS.

Tabla 9- 88 Instrucciones DPRD_DAT y DPWR_DAT

KOP / FUP SCL Descripción


ret_val := DPRD_DAT( La instrucción DPRD_DAT se utiliza para leer uno o
laddr:=_word_in_, más bytes de datos de módulos o submódulos de
record=>_variant_out_); una de las siguientes ubicaciones:
• E/S básicas locales
• Esclavo DP
• dispositivo PROFINET I/O
La CPU transfiere los datos leídos de forma cohe-
rente. Si no ocurre ningún error durante la transfe-
rencia de datos, la CPU introduce los datos leídos
en el área de destino especificada por el parámetro
RECORD. El área de destino debe tener la misma
longitud que la configurada con STEP 7 para el
módulo seleccionado. Al ejecutar la instrucción
DPRD_DAT solo se puede acceder a los datos de
un módulo o submódulo. La transferencia comienza
en la dirección inicial configurada.
ret_val := DPWR_DAT( Utilice la instrucción DPWR_DAT para transferir los
laddr:=_word_in_, datos de RECORD de forma coherente a las si-
record:=_variant_in_); guientes ubicaciones:
• módulo o submódulo direccionado en la base
local
• esclavo DP normalizado
• dispositivo PROFINET I/O
El área de origen debe tener la misma longitud que
la configurada con STEP 7 para el módulo o sub-
módulo seleccionado.

● La CPU S7-1200 soporta la lectura o escritura coherentes de 1, 2 o 4 bytes en la periferia


descentralizada. La instrucción DPRD_DAT se utiliza para leer de forma coherente datos
de longitudes diferentes de 1, 2 o 4 bytes y la instrucción DPWR_DAT para escribirlos de
forma coherente.
● Estas instrucciones se pueden utilizar para áreas de datos de 1 o más bytes. Si el
acceso se deniega, se devuelve el código de error W#16#8090.
● PROFINET soporta hasta 1024 bytes de datos coherentes. No es necesario utilizar estas
instrucciones para realizar una transferencia coherente entre S7-1200 y los dispositivos
PROFINET.

Controlador programable S7-1200


412 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Nota
Si se utiliza las instrucciones DPRD_DAT y DPWR_DAT con datos coherentes, hay que
retirar los datos coherentes de la actualización automática de la memoria imagen de
proceso. Véase "Conceptos de PLC: Ejecución del programa de usuario" (Página 85) para
obtener más información.

Tabla 9- 89 Parámetros

Parámetro Declaración Tipo de datos Descripción


LADDR IN HW_IO (Word) ID de hardware del módulo del cual se van a leer los datos. (DPRD_DAT)
ID de hardware del módulo en el cual se van a escribir los datos.
(DPWR_DAT)
Encontrará la ID de hardware en la vista de dispositivos o las constantes
de sistema de las propiedades del módulo.
RECORD OUT Variant Área de destino para los datos de usuario que se han leído (DPRD_DAT)
o área de origen de los datos de usuario que deben escribirse
(DPWR_DAT). Este debe tener exactamente la misma longitud que la
configurada con STEP 7 para el módulo seleccionado.
RET_VAL OUT Int Si se produce un error mientras la función está activa, el valor de retorno
contiene un código de error.

Operaciones DPRD_DAT
Utilice el parámetro LADDR para seleccionar el módulo del esclavo DP normalizado /
dispositivo PROFINET IO. Si se produce un error de acceso en el módulo direccionado, se
emite el código de error W#16#8090.
Utilice el parámetro RECORD para definir el rango de destino de los datos leídos:
● El rango de destino debe tener por lo menos la misma longitud que las entradas del
módulo seleccionado. Solo se transfieren las entradas, los otros bytes se ignoran. Si se
lee de un esclavo DP normalizado con un diseño modular o con varios identificadores
DP, solo se puede acceder a los datos de un módulo del identificador de hardware
configurado por cada llamada de la instrucción DPRD_DAT. Si se selecciona un rango
de destino demasiado pequeño, se emite el código de error W#16#80B1 en el parámetro
RET_VAL.
● Se pueden usar los tipos de datos siguientes: Byte, Char, Word, DWord, Int, UInt, USInt,
SInt, DInt, UDInt. Está permitido usar estos tipos de datos en una estructura de tipo de
datos personalizado (UDT) del tipo ARRAY o STRUCT.
● El tipo de datos STRING no se soporta.
● Si no hay errores durante la transmisión de datos, los datos leídos se introducen en el
rango de destino definido en el parámetro RECORD.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 413
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Operaciones DPWR_DAT
Utilice el parámetro LADDR para seleccionar el módulo del esclavo DP normalizado /
dispositivo PROFINET IO. Si se produce un error de acceso en el módulo direccionado, se
emite el código de error W#16#8090.
Utilice el parámetro RECORD para definir el rango de origen de los datos que deben
escribirse:
● El rango de origen debe tener por lo menos la misma longitud que las salidas del módulo
seleccionado. Solo se transfieren las salidas, los otros bytes se ignoran. Si el rango de
origen en el parámetro RECORD es mayor que las salidas del módulo configurado, solo
se transfieren los datos hasta la longitud máxima de las salidas. Si el rango de origen en
el parámetro RECORD es menor que las salidas del módulo configurado, se emite el
código de error W#16#80B1 en el parámetro RET_VAL.
● Se pueden usar los tipos de datos siguientes: Byte, Char, Word, DWord, Int, UInt, USInt,
SInt, DInt, UDInt. Está permitido usar estos tipos de datos en una estructura de tipo de
datos personalizado (UDT) del tipo ARRAY o STRUCT.
● El tipo de datos STRING no se soporta.
● Los datos se transfieren de forma asíncrona, de modo que el proceso de escritura se
completa cuando se completa la instrucción.

Códigos de error

Tabla 9- 90 Códigos de error DPRD_DAT y DPWR_DAT

Código de error 1 Descripción


0000 No ha ocurrido ningún error
8090 Se da uno de los siguientes casos:
• No ha configurado un módulo para la dirección base lógica especificada.
• Ha ignorado la restricción referente a la longitud de los datos coherentes.
• Ha introducido la dirección inicial en el parámetro LADDR en formato hexadecimal.
8092 El parámetro RECORD soporta los siguientes tipos de datos: Byte, Char, Word, DWord, Int, UInt,
USInt, SInt, DInt, UDInt, and arrays of these types.
8093 No hay ningún módulo DP o dispositivo PROFINET IO del que se pueden leer (DPRD_DAT) o en
el que se pueden escribir (DPWR_DAT) datos coherentes en la dirección lógica especificada en
LADDR.
80A0 Error de acceso detectado durante el acceso a los dispositivos I/O (DPRD_DAT).
80B1 La longitud del área de destino (DPRD_DAT) o de origen (DPWR_DAT) especificada coincide con
la longitud de datos de usuario configurada con STEP 7 Basic.
80B2 Error de sistema con módulo interfaz DP externo (DPRD_DAT) y (DPWR_DAT)
1 Utilice el tipo de datos DWord para visualizar los códigos de error de DPRD_DAT y DPWR_DAT.

Controlador programable S7-1200


414 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Nota
Si se accede a esclavos DPV1, la información de error de estos puede transmitirse del
maestro DP a la instrucción.

9.3.10.2 RCVREC (recibir registro con I-device/esclavo I)


Un I-device puede recibir un registro de un controlador de nivel superior. La recepción tiene
lugar en el programa de usuario con la instrucción RCVREC (recibir registro).

Tabla 9- 91 Instrucción RCVREC

KOP / FUP SCL Descripción


"RCVREC_SFB_DB"( La instrucción RCVREC se utiliza
mode:=_int_in_, para recibir un registro de un contro-
F_ID:=_uint_in_, lador de nivel superior.
mlen:=_uint_in_,
code1:=_byte_in_,
code2:=_byte_in_,
new=>_bool_out_,
status=>_dword_out_,
slot=>_uint_out_,
subslot=>_uint_out_,
index=>_uint_out_
len=>_uint_out_,
rec-
ord:=_variant_inout_);
1 STEP 7 crea el DB automáticamente al insertar la instrucción.
2 En el ejemplo SCL, "RCVREC_SFB_DB" es el nombre del DB de instancia.

La instrucción tiene los siguientes estados operativos:


● Comprobar si el I-device tiene una petición para recibir un registro
● Poner el registro a disposición de los parámetros de salida
● Enviar una respuesta al controlador de nivel superior
El estado operativo que ejecuta la instrucción se determina mediante el parámetro de
entrada MODE (véase más abajo).
El I-device debe estar en estado RUN o ARRANQUE.
Con MLEN se especifica el número máximo de bytes que deben recibirse. La longitud
seleccionada del rango de destino RECORD debe tener como mínimo la longitud de MLEN
bytes.
Si se recibe un registro (MODE = 1 o MODE = 2), el parámetro de salida NEW indica que el
registro está almacenado en RECORD. Asegúrese de que RECORD tenga la longitud
suficiente. El parámetro de salida LEN contiene la longitud real del registro recibido en
bytes.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 415
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Ponga CODE1 y CODE2 a cero para la respuesta positiva al controlador de nivel superior.
Si el registro recibido debe rechazarse, introduzca la respuesta negativa al controlador de
nivel superior en Error Code 1 de CODE1 y en Error Code 2 de CODE2.

Nota
Si el I-device ha recibido una petición para recibir un registro, hay que acusar la entrega de
esta petición en un tiempo determinado. Una vez acusada, hay que enviar una respuesta al
controlador de nivel superior dentro de este tiempo. En caso contrario, el I-device sufre un
error de tiempo excedido que hace que el sistema operativo del I-device envíe una
respuesta negativa al controlador de nivel superior. Encontrará información sobre el valor de
tiempo en las especificaciones de la CPU.

El parámetro de salida STATUS recibe la información de error después de haberse


producido un error.

Estados operativos
El estado operativo de la instrucción RCVREC se determina con el parámetro de entrada
MODE. Este paso se explica en la tabla siguiente:

MODE Significado
0 Comprobar si hay una petición para recibir un registro
Si en el I-device hay un registro de un controlador de nivel superior, la instrucción solo escribe en los paráme-
tros de salida NEW, SLOT, SUBSLOT, INDEX y LEN. Si se llama la instrucción varias veces con MODE = 0,
el parámetro solo hace referencia una misma petición.
1 Recibir un registro para cualquier subslot del I-device
Si en el I-device hay un registro de un controlador de nivel superior para cualquier subslot del I-device, la
instrucción escribe en el parámetro de salida y transfiere el registro al parámetro RECORD.
2 Recibir un registro para un subslot concreto del I-device
Si en el I-device hay un registro de un controlador de nivel superior para un subslot concreto del I-device, la
instrucción escribe en el parámetro de salida y transfiere el registro al parámetro RECORD.
3 Enviar una respuesta positiva al controlador de nivel superior
La instrucción comprueba la petición del controlador de nivel superior para recibir un registro, acepta el regis-
tro existente y envía un acuse positivo al controlador de nivel superior.
4 Enviar una respuesta negativa al controlador de nivel superior
La instrucción comprueba la petición del controlador de nivel superior para recibir un registro, rechaza el re-
gistro existente y envía un acuse negativo al controlador de nivel superior. Introduzca el motivo del rechazo
en los parámetros de entrada CODE1 y CODE2.

Nota
Después de recibir un registro (NEW = 1) hay que llamar la instrucción RCVREC dos veces
para garantizar su procesamiento completo. Esto debe realizarse en el orden siguiente:
• Primera llamada con MODE = 1 o MODE = 2
• Segunda llamada con MODE = 3 o MODE = 4

Controlador programable S7-1200


416 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción RCVREC:

Parámetro Declara- Tipo de datos Descripción


ción
MODE IN Int Modo
F_ID IN HW_SUBMODULE Subslot en el área de transferencia del I-device para el registro
que debe recibirse (solo relevante si MODE = 2). La palabra
"high" siempre se pone a cero.
MLEN IN Int Longitud máxima en bytes del registro que debe recibirse
CODE1 IN Byte Cero (si MODE = 3) y/o Error Code 1 (si MODE = 4)
CODE2 IN Byte Cero (si MODE = 3) y/o Error Code 2 (si MODE = 4)
NEW OUT Bool • MODE = 0: Se ha recibido un nuevo registro
• MODE = 1 o 2: El registro se ha transferido a RECORD
STATUS OUT DWord Información de error. Encontrará más información en "Parámetro
STATUS" (Página 407).
SLOT OUT HW_SUBMODULE Idéntico a F_ID
SUBSLOT OUT HW_SUBMODULE Idéntico a F_ID
INDEX OUT UInt Número del registro recibido
LEN OUT UInt Longitud del registro recibido
RECORD IN_OUT Variant Rango de destino del registro recibido

9.3.10.3 PRVREC (proveer registro con I-device/esclavo I)


Un I-device puede recibir una petición de un controlador de nivel superior para proveer un
registro. El I-device provee el registro en el programa de usuario con la instrucción PRVREC
(proveer registro).

Tabla 9- 92 Instrucción PRVREC

KOP / FUP SCL Descripción


"PRVREC_SFB_DB"( La instrucción PRVREC se utiliza
mode:=_int_in_, para recibir una petición de un contro-
F_ID:=_uint_in_, lador de nivel superior para proveer
code1:=_byte_in_, un registro.
code2:=_byte_in_,
len:=_uint_in_,
new=>_bool_out_,
status=>_dword_out_,
slot=>_uint_out_,
subslot=>_uint_out_,
index=>_uint_out_
rlen=>_uint_out_,
rec-
ord:=_variant_inout_);
1 STEP 7 crea el DB automáticamente al insertar la instrucción.
2 En el ejemplo SCL, "PRVREC_SFB_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 417
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

La instrucción tiene los siguientes estados operativos:


● Comprobar si el I-device tiene una petición para proveer un registro
● Transferir el registro solicitado al controlador de nivel superior
● Enviar una respuesta al controlador de nivel superior
El estado operativo que ejecuta la instrucción se determina mediante el parámetro de
entrada MODE (véase más abajo).
El I-device debe estar en estado RUN o ARRANQUE.
Introduzca el número máximo de bytes que debe tener el registro que se enviará con LEN.
La longitud seleccionada del rango de destino RECORD debe tener como mínimo la
longitud de LEN bytes.
Si hay una petición para proveer un registro (MODE = 0), el parámetro de salida NEW se
pone a TRUE.
Si se acepta la petición para proveer un registro, escriba RECORD para la respuesta
positiva al controlador de nivel superior con el registro solicitado y cero para CODE1 y
CODE2. Si la petición para proveer un registro debe rechazarse, introduzca la respuesta
negativa al controlador de nivel superior en Error Code 1 de CODE1 y en Error Code 2 de
CODE2.

Nota
Si el I-device ha recibido una petición para proveer un registro, hay que acusar la entrega de
esta petición en un tiempo determinado. Una vez acusada, hay que enviar una respuesta al
controlador de nivel superior dentro de este tiempo. En caso contrario, el I-device sufre un
error de tiempo excedido que hace que el sistema operativo del I-device envíe una
respuesta negativa al controlador de nivel superior. Encontrará información sobre el valor de
tiempo en las especificaciones de la CPU.

El parámetro de salida STATUS recibe la información de error después de haberse


producido un error.

Controlador programable S7-1200


418 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Estados operativos
El estado operativo de la instrucción PRVREC se determina con el parámetro de entrada
MODE. Este paso se explica en la tabla siguiente:

MODE Significado
0 Comprobar si existe una petición para proveer un registro
Si en el I-device hay una petición de un controlador de nivel superior para proveer un registro, la instrucción
solo escribe en los parámetros de salida NEW, SLOT, SUBSLOT, INDEX y RLEN. Si se llama la instrucción
varias veces con MODE = 0, el parámetro solo hace referencia una misma petición.
1 Recibir una petición para proveer un registro para cualquier subslot del I-device
Si en el I-device hay una petición de este tipo de un controlador de nivel superior para cualquier subslot del I-
device, la instrucción escribe en el parámetro de salida.
2 Recibir una petición para proveer un registro para un subslot concreto del I-device
Si en el I-device hay una petición de este tipo de un controlador de nivel superior para un subslot concreto del
I-device, la instrucción escribe en el parámetro de salida.
3 Proveer el registro y enviar una respuesta positiva al controlador de nivel superior
La instrucción comprueba la petición del controlador de nivel superior para proveer un registro, proporciona el
registro solicitado a RECORD y envía un acuse positivo al controlador de nivel superior.
4 Enviar una respuesta negativa al controlador de nivel superior
La instrucción comprueba la petición del controlador de nivel superior para proveer un registro, rechaza la
petición y envía un acuse negativo al controlador de nivel superior. Introduzca el motivo del rechazo en los
parámetros de entrada CODE1 y CODE2.

Nota
Después de recibir una petición (NEW = 1) hay que llamar la instrucción PRVREC dos
veces para garantizar su procesamiento completo. Esto debe realizarse en el orden
siguiente:
• Primera llamada con MODE = 1 o MODE = 2
• Segunda llamada con MODE = 3 o MODE = 4

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 419
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción PRVREC:

Parámetro Declara- Tipo de datos Descripción


ción
MODE IN Int Modo
F_ID IN HW_SUBMODULE Subslot en el área de transferencia del I-device para el registro
que debe enviarse (solo relevante si MODE = 2). La palabra "high"
siempre se pone a cero.
CODE1 IN Byte Cero (si MODE = 3) y/o Error Code 1 (si MODE = 4)
CODE2 IN Byte Cero (si MODE = 3) y/o Error Code 2 (si MODE = 4)
LEN IN UInt Longitud máxima en bytes del registro que debe enviarse
NEW OUT Bool El controlador de nivel superior ha solicitado el nuevo registro.
STATUS OUT DWord Información de error. Encontrará más información en "Parámetro
STATUS" (Página 407).
SLOT OUT HW_SUBMODULE Idéntico a F_ID
SUBSLOT OUT HW_SUBMODULE Idéntico a F_ID
INDEX OUT UInt Número del registro que debe enviarse
RLEN OUT UInt Longitud del registro que debe enviarse
RECORD IN_OUT Variant Registro provisto

9.3.10.4 DPNRM_DG (leer datos de diagnóstico de un esclavo DP)


La instrucción DPNRM_DG (Leer datos de diagnóstico de un esclavo DP) puede utilizarse
con PROFIBUS.

Tabla 9- 93 Instrucción DPNRM_DG

KOP / FUP SCL Descripción


ret_val := DPNRM_DG( Utilice la instrucción DPNRM_DG para leer los datos de diagnóstico
req:=_bool_in_, actuales de un esclavo DP en el formato especificado por EN 50 170
laddr:=_word_in_, volumen 2, PROFIBUS. Los datos leídos se introducen en el área de
record=>_variant_out_, destino indicada en RECORD tras una transferencia sin errores.
busy=>_bool_out_);

Controlador programable S7-1200


420 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Tabla 9- 94 Tipos de datos de la instrucción DPNRM_DG para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool REQ=1: Solicitud de lectura
LADDR IN HW_DPSLAVE Dirección de diagnóstico configurada para el esclavo DP: tiene que ser
la dirección de la estación y no la del dispositivo I/O. Seleccione la
estación (y no la imagen del dispositivo) en la vista "Redes" de la "Con-
figuración de dispositivos" para determinar la dirección de diagnóstico.
Introduzca las direcciones en formato hexadecimal. Por ejemplo, la
dirección de diagnóstico 1022 significa LADDR:=W#16#3FE.
RET_VAL OUT Int Si se produce un error mientras la función está activa, el valor de re-
torno contiene un código de error. Si no se produce ningún error, la
longitud real de los datos transferidos se deposita en RET_VAL.
RECORD OUT Variant Área de destino para los datos de diagnóstico leídos. La longitud míni-
ma del registro que debe leerse (o del área de destino) es de 6 bytes.
La longitud máxima del registro que debe transferirse es de 240 bytes.
Los esclavos estándar pueden proporcionar más de 240 bytes de da-
tos de diagnóstico, hasta un máximo de 244 bytes. En ese caso, los
primeros 240 bytes se transfieren al área de destino y en los datos se
activa el bit de desbordamiento.
BUSY OUT Bool BUSY=1: la tarea de lectura todavía no se ha completado

La tarea de lectura se inicia asignando 1 al parámetro de entrada REQ en la llamada de la


instrucción DPNRM_DG. La tarea de lectura se ejecuta de forma asíncrona, lo que significa
que requiere varias llamadas de la instrucción DPNRM_DG. El estado de la tarea se indica
en los parámetros de salida RET_VAL y BUSY.

Tabla 9- 95 Estructura de datos del diagnóstico de esclavo

Byte Descripción
0 Estado de estación 1
1 Estado de estación 2
2 Estado de estación 3
3 Número de estación maestra
4 ID del fabricante (byte high)
5 ID del fabricante (byte low)
6 ... Información de diagnóstico adicional específica de esclavo

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 421
Instrucciones avanzadas
9.3 E/S distribuidas (PROFINET, PROFIBUS o AS-i)

Tabla 9- 96 Códigos de error de la instrucción DPNRM_DG

Código de Descripción Restricción


error
0000 No hay error -
7000 Primera llamada con REQ=0: Ninguna transferencia de datos activa; -
BUSY tiene el valor 0.
7001 Primera llamada con REQ=1: Ninguna transferencia de datos activa; E/S descentralizadas
BUSY tiene el valor 1.
7002 Llamada intermedia (REQ irrelevante): Transferencia de datos ya activa; E/S descentralizadas
BUSY tiene el valor 1.
8090 Dirección lógica base especificada no válida: No ha dirección base. -
8092 El parámetro RECORD admite los tipos de datos siguientes: Byte, Char, -
Word, DWord, Int, UInt, USInt, SInt, DInt, UDInt, and arrays of these types.
8093 • Esta instrucción no está permitida para el módulo especificado en -
LADDR (se permiten módulos DP S7 para S7-1200).
• LADDR especifica el dispositivo I/O en lugar de especificar la estación.
Seleccione la estación (y no la imagen del dispositivo) en la vista "Re-
des" de la "Configuración de dispositivos" para determinar la dirección
de diagnóstico de LADDR.
80A2 • Error de protocolo DP en nivel 2 (por ejemplo, fallo de esclavo o pro- E/S descentralizadas
blemas de bus)
• Para ET200S los registros no pueden leerse en modo DPV0.
80A3 Error de protocolo DP con interfaz de usuario/usuario E/S descentralizadas
80A4 Problema de comunicación en el bus de comunicación El error se produce entre la
CPU y el modulo de interfaz
DP externo.
80B0 • La instrucción no es posible para el tipo de módulo. -
• El modulo no reconoce el registro.
• El número de registro 241 no está permitido.
80B1 La longitud especificada en el parámetro RECORD es incorrecta. Longitud especificada >
longitud de registro
80B2 El slot configurado no está ocupado. -
80B3 El tipo de módulo real no coincide con el requerido -
80C0 No hay información de diagnóstico. -
80C1 El módulo aún no ha procesado los datos de la tarea de escritura anterior -
para el mismo registro.
80C2 Actualmente el módulo está procesando el número máximo de tareas -
posibles para una CPU.
80C3 Los recursos requeridos (memoria, etc.) están ocupados en este momen- -
to.
80C4 Error temporal interno. La tarea no se ha podido procesar. -
Repetir la tarea. Si este error se produce frecuentemente, compruebe el
sistema en busca de fuentes de interferencia eléctrica.
80C5 E/S descentralizadas no disponibles E/S descentralizadas

Controlador programable S7-1200


422 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.4 PROFIenergy

Código de Descripción Restricción


error
80C6 La transferencia del registro se ha interrumpido debido a una interrupción E/S descentralizadas
por clase de prioridad (rearranque o ejecución de fondo)
8xyy1 Códigos de error generales

Consulte "Instrucciones avanzadas, E/S descentralizadas: Información de error para


RDREC, WRREC y RALRM" (Página 407) para más información sobre códigos de error
generales.

9.4 PROFIenergy
PROFIenergy es un perfil independiente del fabricante y del dispositivo para la gestión de la
energía con PROFINET. Con el fin de reducir el consumo eléctrico durante las pausas de
producción y las interrupciones imprevistas, existe la posibilidad de apagar equipos de una
forma coordinada y centralizada por medio de PROFIenergy.
El controlador PROFINET IO desconecta los dispositivos PROFINET/módulos de potencia
utilizando comandos especiales del programa de usuario. No se requiere hardware
adicional. Los dispositivos PROFINET interpretan directamente los comandos de
PROFIenergy.
La CPU S7-1200 no soporta la funcionalidad de controlador PE. La CPU S7-1200 solo
puede funcionar como unidad PROFIenergy (con funcionalidad de I-device).

Controlador PROFIenergy (controlador PE)


El controlador PE es un PLC de nivel superior (p. ej. un S7-1500) que activa o desactiva el
estado de reposo de los dispositivos de nivel inferior. El controlador PE desactiva y reactiva
componentes de producción individuales o bien líneas de producción completas desde el
programa de usuario. Los dispositivos de nivel inferior reciben comandos del programa de
usuario a través de las instrucciones correspondientes (bloques de función).
El programa de usuario envía los comandos por medio del protocolo de comunicación
PROFINET. El comando PE puede ser un comando de control para conmutar una unidad
PE al modo de ahorro de energía o bien un comando para leer un estado o valor medido.
Utilice la instrucción PE_I_DEV para solicitar datos de un módulo. El programa de usuario
debe determinar la información que solicita el controlador PE y recuperarla del módulo de
energía por medio de registros. El módulo propiamente dicho no soporta directamente los
comandos PE. El módulo guarda la información sobre la medición de energía en un área
compartida y la CPU de nivel inferior (p. ej. un S7-1200) dispara la instrucción PE_I_DEV
para devolverla al controlador PE.

Unidad PROFIenergy (unidad PE)


La unidad PE (p. ej. un S7-1200) recibe los comandos PROFIenergy del controlador PE (p.
ej. un S7-1500) y los ejecuta en correspondencia (p. ej. devolviendo un valor medido o
activando el modo de ahorro de energía). La implementación de la unidad PE en un
dispositivo apto para PROFIenergy depende del dispositivo y del fabricante.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 423
Instrucciones avanzadas
9.5 Alarmas

Información de referencia
Encontrará más información sobre PROFIenergy en la Ayuda en pantalla de STEP 7 (TIA
Portal). Encontrará ejemplos de uso de las instrucciones PROFIenergy en la entrada
"PROFIenergy - Ahorrar energía con SIMATIC S7
(http://support.automation.siemens.com/WW/view/es/41986454)" de Industry Online
Support.

9.5 Alarmas

9.5.1 Instrucciones ATTACH y DETACH (Asignar OB a evento de alarma/deshacer


asignación)
Las instrucciones ATTACH y DETACH permiten activar y desactivar subprogramas
controlados por eventos de alarma.

Tabla 9- 97 Instrucciones ATTACH y DETACH

KOP / FUP SCL Descripción


ret_val := ATTACH( ATTACH habilita la ejecución de un subpro-
ob_nr:=_int_in_, grama de OB de alarma para un evento de
event:=_event_att_in_, alarma de proceso.
add:=_bool_in_);

ret_val := DETACH( DETACH deshabilita la ejecución de un sub-


ob_nr:=_int_in_, programa de OB de alarma para un evento de
event:=_event_att_ in); alarma de proceso.

Controlador programable S7-1200


424 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Tabla 9- 98 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_ATT Identificador del bloque de organización: Seleccione uno de los OBs
de alarma de proceso que fueron creados utilizando la función
"Agregar nuevo bloque". Haga doble clic en el campo de parámetro.
A continuación, haga clic en el símbolo de ayuda para ver los OBs
disponibles.
EVENT IN EVENT_ATT Identificador del evento: Seleccione uno de los eventos de alarma de
proceso habilitados en la configuración de dispositivos PLC para las
entradas digitales o los contadores rápidos. Haga doble clic en el
campo de parámetro. A continuación, haga clic en el símbolo de
ayuda para ver los eventos disponibles.
ADD IN Bool • ADD = 0 (predeterminado): Este evento reemplaza a todas las
(solo ATTACH) asignaciones de eventos anteriores de este OB.
• ADD = 1: Este evento se agrega a asignaciones de eventos ante-
riores de este OB.
RET_VAL OUT Int Código de condición de ejecución

Eventos de alarma de proceso


La CPU soporta los siguientes eventos de alarma de proceso:
● Eventos de flanco ascendente: primeras 12 entradas digitales de la CPU integradas (de
DIa.0 a DIb.3) y todas las entradas digitales de SB
– Un flanco ascendente ocurre cuando la entrada digital cambia de OFF a ON como
reacción a una modificación de la señal de un aparato de campo conectado a la
entrada.
● Eventos de flanco descendente: primeras 12 entradas digitales de la CPU integradas (de
DIa.0 a DIb.3) y todas las entradas digitales de SB
– Un flanco descendente ocurre cuando la entrada digital cambia de ON a OFF.
● Eventos en los que el valor actual del contador rápido (HSC) = valor de referencia (CV =
RV) (HSC 1 a 6)
– Una alarma CV = RV de un HSC se genera cuando el contaje actual cambia de un
valor adyacente al valor que concuerda exactamente con un valor de referencia
establecido previamente.
● Eventos de cambio de sentido del HSC (HSC 1 a 6)
– Un evento de cambio de sentido ocurre cuando se detecta que el sentido de contaje
del HSC cambia de ascendente a descendente, o viceversa.
● Eventos de reset externo del HSC (HSC 1 a 6)
– Algunos modos del HSC permiten asignar una entrada digital como reset externo para
poner a cero el valor de contaje del HSC. Un evento de reset externo del HSC ocurre
cuando esta entrada cambia de OFF a ON.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 425
Instrucciones avanzadas
9.5 Alarmas

Habilitar eventos de alarma de proceso en la configuración de dispositivos


Las alarmas de proceso deben habilitarse durante la configuración de dispositivos. La casilla
de habilitación de eventos se debe activar en la configuración de eventos para un canal de
entrada digital o un HSC si este evento debe asignarse durante la configuración o en
runtime.
Opciones de las casillas de verificación en la configuración de dispositivos PLC:
● Entrada digital
– Habilitar detección de flancos ascendentes
– Habilitar detección de flancos descendentes
● Contador rápido (HSC)
– Habilitar este contador rápido para su uso
– Generar alarma si el valor del contador es igual al valor de referencia
– Generar alarma en caso de evento de reset externo
– Generar alarma en caso de evento de cambio de sentido

Agregar OBs de alarma de proceso nuevos al programa de usuario


De forma predeterminada, ningún OB está asignado a un evento cuando este se habilita por
primera vez. Esto se indica en la etiqueta "<no conectado>" de la configuración de
dispositivos para "Alarma de proceso:". Solo los OB de alarma de proceso pueden
asignarse a un evento de alarma de proceso. Todos los OB de alarma de proceso
existentes se muestran en la lista desplegable "Alarma de proceso:". Si no se lista ningún
OB, es preciso crear un OB de "Alarma de proceso" como se indica a continuación. En la
rama "Bloques de programa" del árbol del proyecto:
1. Haga doble clic en "Agregar nuevo bloque", seleccione "Bloque de organización (OB)" y
elija "Hardware interrupt" (Alarma de proceso).
2. Opcionalmente, puede cambiar el nombre del OB, elegir el lenguaje de programación
(KOP, FUP o SCL) y seleccionar el número de bloque (cambiar a modo manual y
seleccionar un número de bloque diferente del propuesto).
3. Edite el OB y agregue la reacción programada que debe ejecutarse cuando ocurra el
evento. Puede llamar FC y FB desde este OB, hasta la profundidad de anidamiento
máxima. La profundidad de anidamiento máxima es de cuatro para programas de
seguridad. Para el resto de programas, la profundidad de anidamiento máxima es de
seis.

Parámetro OB_NR
Todos los nombres de OB de alarma de proceso existentes se muestran en la lista
desplegable "Alarma de proceso:" de la configuración de dispositivos y en la lista
desplegable OB_NR de los parámetros ATTACH /DETACH.

Controlador programable S7-1200


426 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Parámetro EVENT
Si está habilitado un evento de alarma de proceso, se le asigna un nombre predeterminado
y unívoco. El nombre del evento puede cambiarse editándolo en el cuadro "Nombre de
evento:", pero debe ser un nombre unívoco. Los nombres de eventos se convierten en
nombres de variables en la tabla de variables "Constantes" y aparecen en la lista
desplegable del parámetro EVENT, en los cuadros de las instrucciones ATTACH y
DETACH. El valor de la variable es un número interno utilizado para identificar el evento.

Funcionamiento general
Todo evento de hardware puede asignarse a un OB de alarma de proceso que se pondrá en
cola de espera para ser ejecutado cuando ocurra el evento de alarma de proceso. El OB
puede asignarse al evento durante la configuración o en runtime.
Es posible asignar o cancelar la asignación de un OB a un evento habilitado al realizar la
configuración. Para asignar un OB a un evento durante la configuración hay que utilizar la
lista desplegable "Alarma de proceso:" (haga clic en la flecha hacia abajo de la derecha) y
seleccionar un OB en la lista de OB de alarma de proceso disponibles. Seleccione el
nombre de OB deseado en esta lista, o bien elija "<no conectado>" para cancelar la
asignación.
También es posible asignar o deshacer la asignación de un evento de alarma de proceso
habilitado en runtime. Las instrucciones de programa ATTACH o DETACH se utilizan en
tiempo de ejecución (varias veces si se desea) para asignar un evento de alarma activado al
OB adecuado o quitar su asignación. Si actualmente no hay ningún OB asignado (bien
porque se ha seleccionado "<no conectado>" en la configuración de dispositivos bien como
resultado de ejecutar una instrucción DETACH), el evento de alarma de proceso activado se
ignora.

Operación DETACH
La instrucción DETACH se utiliza para quitar la asignación de un evento concreto o de todos
los eventos de un OB en particular. Si se ha especificado un EVENT, solo se quita la
asignación de este evento al OB_NR especificado; si hay otros eventos asignados a este
OB_NR, permanecerán asignados. Si no se especifica ningún EVENT, se deshace la
asignación de todos los eventos asignados actualmente al OB_NR.

Códigos de condición

Tabla 9- 99 Códigos de condición

RET_VAL (W#16#....) ENO Descripción


0000 1 No hay error
0001 1 No hay ninguna asignación que pueda deshacerse
(solo DETACH)
8090 0 El OB no existe
8091 0 Tipo de OB incorrecto
8093 0 El evento no existe

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 427
Instrucciones avanzadas
9.5 Alarmas

9.5.2 Alarmas cíclicas

9.5.2.1 SET_CINT (ajustar parámetros de alarma cíclica)

Tabla 9- 100 SET_CINT (Ajustar parámetros de alarma cíclica)

KOP / FUP SCL Descripción


ret_val := SET_CINT( Ajustar el OB de alarma cíclica específico al comienzo
ob_nr:=_int_in_, de la ejecución cíclica que interrumpe el ciclo del
cycle:=_udint_in_, programa.
phase:=_udint_in_);

Tabla 9- 101 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_CYCLIC Número de OB (acepta el nombre simbólico)
CYCLE IN UDInt Intervalo de tiempo en microsegundos
PHASE IN UDInt Desfase, en microsegundos
RET_VAL OUT Int Código de condición de ejecución

Ejemplos: parámetro de tiempo


● Si el tiempo CYCLE = 100 us, el OB de alarma referenciado por OB_NR interrumpirá el
programa cíclico cada 100 us. El OB de alarma se ejecuta y a continuación devuelve el
control de ejecución al ciclo del programa en el punto de la interrupción.
● Si el tiempo CYCLE = 0, el evento de alarma se desactiva y el OB de alarma no se
ejecuta.
● El tiempo PHASE (desfase) es un retardo específico que se produce antes de que
comience el intervalo de tiempo CYCLE. Se puede utilizar el desfase para control el
tiempo de ejecución de OBs de menor prioridad.
Si se llaman OBs de prioridad menor y mayor en el mismo intervalo de tiempo, el OB de
menor prioridad solo se llama una vez que ha finalizado el procesamiento del OB de mayor
prioridad. El tiempo de inicio de la ejecución para el OB de menor prioridad puede cambiar
en función del tiempo de procesamiento de OBs de mayor prioridad.

Controlador programable S7-1200


428 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Para reiniciar la ejecución de un OB de menor prioridad en un ciclo de tiempo fijo, el tiempo


de desfase debe ser mayor que el tiempo de procesamiento de OBs de mayor prioridad.

Tabla 9- 102 Códigos de condición

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 El OB no existe o es del tipo incorrecto
8091 Tiempo de ciclo no válido
8092 Tiempo de desfase no válido
80B2 El OB no tiene ningún evento asignado

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 429
Instrucciones avanzadas
9.5 Alarmas

9.5.2.2 QRY_CINT (consultar parámetros de alarma cíclica)

Tabla 9- 103 QRY_CINT (consultar parámetros de alarma cíclica)

KOP / FUP SCL Descripción


ret_val := QRY_CINT( Obtener los parámetros y el estado de ejecución
ob_nr:=_int_in_, de un OB de alarma cíclica. Los valores que se
cycle=>_udint_out_, devuelven existían en el momento de ejecutar
phase=>_udint_out__, QRY_CINT.
status=>_word_out_);

Tabla 9- 104 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_CYCLIC Número de OB (acepta el nombre simbólico como OB_MyOBName)
RET_VAL OUT Int Código de condición de ejecución
CYCLE OUT UDInt Intervalo de tiempo en microsegundos
PHASE OUT UDInt Desfase, en microsegundos
STATUS OUT Word Código de estado de alarma cíclica:
• Bits 0 a 4, véase la tabla STATUS siguiente
• Otros bits, siempre 0

Tabla 9- 105 Parámetro STATUS

Bit Valor Descripción


0 0 Durante RUN de la CPU
1 Durante el arranque
1 0 La alarma está habilitada.
1 Alarma deshabilitada vía la instrucción DIS_IRT.
2 0 La alarma no está activa o ha transcurrido.
1 La alarma está activa.
4 0 El OB identificado por OB_NR no existe.
1 El OB identificado por OB_NR existe.
Otros bits Siempre 0

Controlador programable S7-1200


430 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Si se produce un error, RET_VAL muestra el código de error apropiado y el parámetro


STATUS es 0.

Tabla 9- 106 Parámetro RET_VAL

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 El OB no existe o es del tipo incorrecto.
80B2 El OB no tiene ningún evento asignado.

9.5.3 Alarmas horarias:

ADVERTENCIA
Riesgo de ataques a las redes mediante la sincronización del Network Time Protocol
(NTP)
Si un atacante puede acceder a las redes por sincronización del Network Time Protocol
(NTP), posiblemente alterará el control del proceso cambiando la hora del sistema de la
CPU. Las alteraciones en el control del proceso pueden causar la muerte, heridas graves o
daños materiales.
La función de cliente NTP de la CPU S7-1200 está desactivada por defecto y, si se activa,
solo permite a las direcciones IP configuradas actuar como servidor NTP. La CPU
desactiva esta función por defecto, y hay que configurar esta función para permitir
correcciones de la hora del sistema de la CPU por control remoto.
La CPU S7-1200 soporta alarmas horarias e instrucciones de reloj que dependen de la
precisión de la hora del sistema de la CPU. Si se configura NTP y se acepta la
sincronización horaria desde un servidor, hay que asegurarse de que el servidor es una
fuente fiable. Si no se comprueba, se puede producir una brecha de seguridad que permita
a un usuario desconocido tomar un control limitado del proceso cambiando la hora del
sistema de la CPU.
Para más información sobre seguridad y recomendaciones, consulte nuestras "Operational
Guidelines for Industrial Security"
(http://www.industry.siemens.com/topics/global/en/industrial-
security/Documents/operational_guidelines_industrial_security_en.pdf) en la página del
Siemens Industry Online Support.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 431
Instrucciones avanzadas
9.5 Alarmas

9.5.3.1 SET_TINTL (Ajustar alarma horaria)

Tabla 9- 107 SET_TINTL (Ajustar alarma horaria)

KOP / FUP SCL Descripción


ret_val := SET_TINTL( Ajuste una alarma de fecha y hora. El OB
OB_NR:=_int_in_, de alarma de programa se puede ajustar
SDT:=_dtl_in_, para una ejecución o para una ejecución
LOCAL:=_bool_in_ recurrente con un periodo de tiempo asig-
PERIOD:=_word_in_ nado.
ACTIVATE:=_bool_in_);

Tabla 9- 108 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_TOD (INT) Número de OB (acepta el nombre simbólico)
SDT IN DTL Fecha y hora de inicio: Los segundos y milisegundos se ignoran y se
pueden poner a 0.
LOCAL IN Bool 0 = Usar hora del sistema
1 = Usar hora local (si la CPU se configura para hora local, en caso
contrario use la hora del sistema)
PERIOD IN Word El periodo de la fecha y hora de inicio para el evento de alarma recu-
rrente.
• W#16#0000 = Único
• W#16#0201 = Cada minuto
• W#16#0401 = Cada hora
• W#16#1001 = Diario
• W#16#1201 = Semanal
• W#16#1401 = Mensual
• W#16#1801 = Anual
• W#16#2001 = Final de mes
ACTIVATE IN Bool 0 = Debe ejecutarse ACT_TINT para activar el evento de alarma.
1 = Se activa el evento de alarma.
RET_VAL OUT Int Código de condición de ejecución

El programa puede utilizar SET_TINTL para ajustar un evento de alarma horaria que
ejecutará el OB de alarma asignado. La fecha y hora de inicio se ajustan en el parámetro
SDT y el período de las alarmas repetitivas (p. ej. cada día o cada semana) se ajusta en el
parámetro PERIOD. Si se ajusta un período de repetición mensual, la fecha de inicio debe
ser un día entre el 1 y el 28. Los días del 29 al 31 no deben utilizarse porque no existen en
febrero. Si desea que haya un evento de alarma al final de cada mes, use el final de mes
para el parámetro PERIOD.

Controlador programable S7-1200


432 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

El valor de día de la semana en los datos DTL del parámetro SDT se pasa por alto. Para
ajustar la fecha y hora actual de una CPU, utilice la función "Ajustar la hora" en la vista
"Online y diagnóstico" de una CPU online. Debe ajustar el mes, el día del mes y el año.
STEP 7 calcula el periodo de alarma en función del reloj de fecha y hora de la CPU.

Nota
La primera hora del día no existe al cambiar del horario de verano al de invierno (horario de
verano). Use la hora de inicio dentro de la segunda hora o bien use una alarma de retardo
adicional durante la primera hora.

Tabla 9- 109 Código de condición

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 Parámetro OB_NR no válido
8091 Parámetro de hora de inicio de SDT no válido:
(por ejemplo, una hora de inicio dentro de la hora omitida al inicio
del horario de verano)
8092 Parámetro PERIOD no válido
80A1 La hora de inicio corresponde a una hora pasada.
(Este código de error se produce con PERIOD = W #16#0000.)

9.5.3.2 CAN_TINT (Cancelar alarma horaria)

Tabla 9- 110 CAN_TINT (Cancelar alarma de fecha y hora)

KOP / FUP SCL Descripción


ret_val:=CAN_TINT(_int_in); Cancela el evento de alarma de
fecha y hora de inicio del OB
de alarma especificado.

Tabla 9- 111 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_TOD (INT) Número de OB (acepta el nombre simbólico)
RET_VAL OUT Int Código de condición de ejecución

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 433
Instrucciones avanzadas
9.5 Alarmas

Tabla 9- 112 Códigos de condición

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 Parámetro OB_NR no válido
80A0 No hay fecha/hora de inicio ajustada para el OB de alarma

9.5.3.3 ACT_TINT (Activar alarma horaria)

Tabla 9- 113 ACT_TINT (Activar una alarma de fecha y hora)

KOP / FUP SCL Descripción


ret_val:=ACT_TINT(_int_in_); Activa el evento de alarma de
fecha y hora de inicio de un OB
de alarma especificado.

Tabla 9- 114 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_TOD (INT) Número de OB (acepta el nombre simbólico)
RET_VAL OUT Int Código de condición de ejecución

Tabla 9- 115 Códigos de condición

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 Parámetro OB_NR no válido
80A0 No se ha ajustado la fecha y hora de inicio para el OB de alarma
horaria pertinente.
80A1 La hora activa es una hora que ya ha pasado. El error solo se
produce cuando el OB de alarma se ajusta para que se ejecute
una sola vez.

9.5.3.4 QRY_TINT (Consultar estado de alarma horaria)

Tabla 9- 116 QRY_TINT (Consultar una alarma de fecha y hora)

KOP / FUP SCL Descripción


ret_val:=QRY_TINT( Consulta el estado del evento de alarma de fecha y
OB_NR:=_int_in_, hora de un OB de alarma especificado.
STATUS=>_word_out_);

Controlador programable S7-1200


434 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Tabla 9- 117 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_TOD (INT) Número de OB (acepta el nombre simbólico) del OB de alarma que se
consulta
RET_VAL OUT Int Código de condición de ejecución
STATUS OUT Word Estado del OB de alarma especificado

Tabla 9- 118 Parámetro STATUS

Bit Valor Descripción


0 0 En RUN
1 En el arranque
1 0 La alarma está habilitada.
1 La alarma está deshabilitada.
2 0 La alarma no está activa o ha transcurrido.
1 La alarma está activa.
4 0 El parámetro OB_NR no existe.
1 Existe un OB con el parámetro OB_NR asignado.
6 1 La alarma de fecha y hora usa la hora local.
0 La alarma de fecha y hora usa la hora del sistema.
Otros Siempre 0

Tabla 9- 119 Código de condición

RET_VAL (W#16#....) Descripción


0000 No hay error
8090 Parámetro OB_NR no válido

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 435
Instrucciones avanzadas
9.5 Alarmas

9.5.4 Alarmas de retardo


El procesamiento de las alarmas de retardo se puede iniciar y cancelar con las instrucciones
SRT_DINT y CAN_DINT o se puede consultar el estado de la alarma con la instrucción
QRY_DINT. Toda alarma de retardo es un evento único que ocurre al cabo del tiempo de
retardo indicado. Si el evento de retardo se cancela antes de que transcurra el tiempo de
retardo, no ocurrirá la alarma.

Tabla 9- 120 Instrucciones SRT_DINT, CAN_DINT y QRY_DINT

KOP / FUP SCL Descripción


ret_val := SRT_DINT( SRT_DINT inicia una alarma de retardo que ejecu-
ob_nr:=_int_in_, ta un OB una vez transcurrido el tiempo de retardo
dtime:=_time_in_, especificado en el parámetro DTIME.
sign:=_word_in_);

ret_val := CAN_DINT( CAN_DINT cancela una alarma de retardo ya


ob_nr:=_int_in_); iniciada. El OB de alarma de retardo no se ejecuta
en este caso.

ret_val := QRY_DINT( QRY_DINT consulta el estado de la alarma de


ob_nr:=_int_in_, retardo especificada en el parámetro OB_NR.
sta-
tus=>_word_out_);

Tabla 9- 121 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


OB_NR IN OB_DELAY Bloque de organización (OB) que debe ejecutarse tras un tiempo de
retardo: Seleccione uno de los OBs de alarma de retardo creados
utilizando la función "Agregar nuevo bloque" del árbol del proyecto.
Haga doble clic en el campo de parámetro. A continuación, haga clic
en el símbolo de ayuda para ver los OBs disponibles.
DTIME 1 IN Time Tiempo de retardo (1 hasta 60000 ms)
SIGN 1 IN Word No se utiliza en S7-1200: Se acepta cualquier valor. Debe asignarse un
valor para prevenir errores.
RET_VAL OUT Int Código de condición de ejecución
STATUS OUT Word Instrucción QRY_DINT: Estado del OB de alarma de retardo especifi-
cado, véase la tabla siguiente
1 Solo para SRT_DINT

Controlador programable S7-1200


436 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

Funcionamiento
Si EN=1, la instrucción SRT_DINT inicia el temporizador de retardo interno (DTIME).
Cuando termina el retardo, la CPU genera un alarma de programa que dispara la ejecución
del OB de alarma de retardo asociado. Es posible cancelar una alarma de retardo en curso
antes de que se produzca el retardo especificado ejecutando la instrucción CAN_DINT. No
puede haber más de cuatro eventos de alarma de retardo activos.

Nota
SRT_DINT pone en marcha el temporizador de retardo cada ciclo cuando EN=1. Confirme
EN=1 como un disparo en lugar de ajustar simplemente EN=1 para que inicie el retardo.

Cronograma de la instrucción SRT_DINT:

① Se ejecuta la alarma de retardo

Agregar OBs de alarma de retardo al proyecto


Los OB de alarma de retardo son los únicos que pueden asignarse a las instrucciones
SRT_DINT y CAN_DINT. Un proyecto nuevo no contiene aún OBs de alarma de retardo. Es
preciso agregar OB de alarma de retardo al proyecto. Para crear un OB de alarma de
retardo, proceda del siguiente modo:
1. Haga doble clic en "Agregar nuevo bloque" en la rama "Bloques de programa" del árbol
del proyecto, seleccione "Bloque de organización (OB)" y elija "Time delay interrupt"
(Alarma de retardo).
2. Es posible cambiar el nombre del OB, así como seleccionar el lenguaje de programación
y el número de bloque. Cambie al modo de numeración manual si desea asignar un
número de bloque diferente del propuesto automáticamente.
3. Edite el OB de alarma de retardo y cree la reacción programada que debe ejecutarse
cuando ocurra el evento de timeout de retardo. Puede llamar otros bloques lógicos FC y
FB desde el OB de alarma de retardo. La profundidad de anidamiento máxima es de
cuatro para programas de seguridad. Para el resto de programas, la profundidad de
anidamiento máxima es de seis.
4. Los nuevos nombres de los OB de alarma de retardo estarán disponibles al editar el
parámetro OB_NR de las instrucciones SRT_DINT y CAN_DINT.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 437
Instrucciones avanzadas
9.5 Alarmas

Parámetro STATUS de QRY_DINT

Tabla 9- 122 Si hay un error (REL_VAL <> 0), entonces STATUS = 0.

Bit Valor Descripción


0 0 En RUN
1 En el arranque
1 0 La alarma está habilitada.
1 La alarma está deshabilitada.
2 0 La alarma no está activa o ha transcurrido.
1 La alarma está activa.
4 0 Un OB con un número de OB indicado en OB_NR no existe.
1 Un OB con un número de OB indicado en OB_NR existe.
Otros bits Siempre 0

Códigos de condición

Tabla 9- 123 Códigos de condición para SRT_DINT, CAN_DINT y QRY_DINT

RET_VAL 
(W#16#...) Descripción


0000 No ha ocurrido ningún error
8090 Parámetro OB_NR incorrecto
8091 Parámetro DTIME incorrecto
80A0 La alarma de retardo no se ha iniciado.

Controlador programable S7-1200


438 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.5 Alarmas

9.5.5 Instrucciones DIS_AIRT y EN_AIRT (Retardar/habilitar tratamiento de eventos


de alarma y errores asíncronos de mayor prioridad)
Las instrucciones DIS_AIRT y EN_AIRT sirven para deshabilitar y habilitar el procesamiento
de alarmas.

Tabla 9- 124 Instrucciones DIS_AIRT y EN_AIRT

KOP / FUP SCL Descripción


DIS_AIRT(); DIS_AIRT retarda el procesamiento de eventos de alarma nuevos. DIS_AIRT se
puede ejecutar más de una vez en un OB.

EN_AIRT(); EN_AIRT habilita el procesamiento de eventos de alarma deshabilitados anterior-


mente con la instrucción DIS_AIRT. Toda ejecución de DIS_AIRT debe ser cance-
lada por una ejecución de EN_AIRT.
Las ejecuciones de EN_AIRT deben ocurrir en un mismo OB, o bien en una FC o
FB llamado desde el mismo OB, antes de poder habilitar las alarmas nuevamente
para este OB.

Tabla 9- 125 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


RET_VAL OUT Int Número de retardos = número de ejecuciones de DIS_AIRT en la
cola de espera.

El sistema operativo cuenta las ejecuciones de DIS_AIRT. Cada ejecución permanece


activa hasta que es cancelada específicamente por una instrucción EN_AIRT o hasta que se
termina de procesar el OB actual. Ejemplo: Si se han deshabilitado alarmas cinco veces con
cinco ejecuciones de DIS_AIRT, puede cancelarlas con cinco ejecuciones de EN_AIRT
antes de que las alarmas se rehabiliten.
Una vez que los eventos de alarma sean habilitadas nuevamente, se procesan las alarmas
que ocurrieron cuando estaba activa la instrucción DIS_AIRT, o bien se procesan tan pronto
como se haya ejecutado el OB actual.
El parámetro RET_VAL indica el número de veces que se ha inhibido el procesamiento de
alarmas. Este es el número de ejecuciones de DIS_AIRT en la cola de espera. El
procesamiento de alarmas solo se puede habilitar nuevamente cuando el parámetro
RET_VAL = 0.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 439
Instrucciones avanzadas
9.6 Alarmas

9.6 Alarmas

9.6.1 Gen_UsrMsg (crear avisos de diagnóstico de usuario)

Tabla 9- 126 Instrucción Gen_UsrMsg

KOP / FUP SCL Descripción


ret_val :=Gen_UsrMsg( La instrucción "Gen_UsrMsg" se utiliza para
Mode:=_uint_in_, crear un aviso de diagnóstico de usuario que
TextID:=_uint_in_, puede ser tanto entrante como saliente. Me-
TextListID:=_uint_in_, diante los avisos de diagnóstico de usuario es
As- posible escribir una entrada de usuario en el
socValues:=_struct_inout_); búfer de diagnóstico y enviar un aviso en
correspondencia.
La entrada en el búfer de diagnóstico se crea
de forma síncrona. La transmisión del aviso
es asíncrona.
Si se produce un error mientras se ejecuta
una instrucción, se emite en el parámetro
RET_VAL.

Contenido del aviso


Una lista de textos define el contenido del aviso:
● Defina la lista de textos que desee utilizar con el parámetro TextListID. Para ello, abra el
cuado de diálogo "Listas de textos" en el árbol del proyecto. Visualice la columna "ID" en
el cuadro de diálogo "Listas de textos". Aplique la ID en el parámetro TextListID.
● Utilice el parámetro TextID para seleccionar la entrada de la lista de textos que debe
escribirse en el búfer de diagnóstico. Para ello, seleccione una entrada en el cuadro de
diálogo "Listas de textos" aplicando un número de las columnas "Rango desde / Rango
hasta" en el parámetro TextID. Hay que utilizar el mismo número de las columnas
"Rango desde" y "Rango hasta" para la entrada en la lista de textos.
Encontrará información detallada sobre las listas de textos en el sistema de información de
STEP 7.

Definir valores asociados


La entrada en la lista de textos define los nuevos valores asociados que deben agregarse al
aviso:
● Incluya la información siguiente en la entrada de la lista de textos para definir valores
asociados:
@<N.º del valor asociado><tipo de elemento><especificación del formato>@
● Utilice el tipo de datos de sistema AssocValues para especificar el valor asociado que
debe agregarse al generar el aviso.

Controlador programable S7-1200


440 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.6 Alarmas

Encontrará información detallada sobre la estructura de los valores asociados en el sistema


de información de STEP 7.

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "Gen_UsrMsg":

Parámetro Declaración Tipo de datos Área de memoria Descripción


Mode Input UInt I, Q, M, D, L o Parámetros para seleccionar
constante el estado del aviso:
• 1: aviso entrante
• 2: aviso saliente
TextID Input UInt I, Q, M, D, L o ID de la entrada en la lista
constante de textos que debe utilizarse
para el texto del aviso.
TextListID Input UInt I, Q, M, D, L o ID de la lista de textos que
constante contiene la entrada en la
lista de textos.
Ret_Val Return Int I, Q, M, D, L Código de error de la ins-
trucción.
AssocValues InOut VARIANT D, L Puntero al tipo de datos de
sistema AssocValues que
permite definir los valores
asociados.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Parámetro AssocValues
Utilice el tipo de datos de sistema AssocValues para definir los valores asociados que deben
enviarse. Se admiten como máximo ocho valores asociados. Introduzca el tipo de datos
"AssocValues" como bloque de datos para crear la estructura.
Los valores asociados se seleccionan introduciendo sus números para los parámetros
Value[x]. Tenga en cuenta lo siguiente:
● La instrucción Gen_UsrMsg considera los valores de TextID y TextListID valores
asociados que deben enviarse. Como resultado, "1" y "2" se preasignan como números
para el direccionamiento de valores asociados. No utilice los números "1" ni "2" para
direccionar valores asociados.
● Direccione el valor asociado del parámetro Value [1] como número "3", el del parámetro
Value [2] como número "4" y así sucesivamente.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 441
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Byte Parámetro Tipo de datos Valor inicial Descripción Número del


valor aso-
ciado
0..1 Value[1] UINT 0 Primer valor 3
asociado del
aviso.
2..3 Value[2] UINT 0 Segundo valor 4
asociado del
aviso.
4..5 Value[3] UINT 0 ... 5
6..7 Value[4] UINT 0 ... 6
8..9 Value[5] UINT 0 ... 7
10..11 Value[6] UINT 0 ... 8
12..13 Value[7] UINT 0 ... 9
14..15 Value[8] UINT 0 Octavo valor 10
asociado del
aviso.

Parámetro RET_VAL
La tabla siguiente define los valores de salida del parámetro RET_VAL . Consulte también
Códigos de error comunes para las instrucciones avanzadas (Página 564).

Código de Explicación
error*
(W#16#...)
0000 Sin errores
8080 Valor no soportado en el parámetro MODE.
80C1 Escasez de recursos debido a un exceso de llamadas paralelas.
8528 El parámetro 5 (AssocValues) no está alineado a un byte.
853A El parámetro 5 (AssocValues) hace referencia a un punto no válido.
* El código de error puede visualizarse en el editor de programas como valor entero o hexadecimal.

Controlador programable S7-1200


442 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.1 Instrucciones de diagnóstico


Las siguientes instrucciones de diagnóstico se pueden utilizar tanto con PROFINET como
con PROFIBUS:
● Instrucción RD_SINFO (Página 444): Lee la información de arranque del OB actual
● Instrucción LED (Página 455): Lee el estado de los LED en una unidad periférica
descentralizada.
● Instrucción Get_IM_Data (Página 456): Comprueba los datos de identificación y
mantenimiento (I&M) del módulo o submódulo especificado.
● Instrucción Get_Name (Página 458): Lee el nombre de un dispositivo PROFINET IO,
esclavo PROFIBUS o esclavo AS-i.
● Instrucción GetStationInfo (Página 465): Lee la dirección IP o MAC de un dispositivo
PROFINET IO ubicado en el sistema IO local o de un dispositivo PROFINET IO ubicado
en un sistema IO de nivel inferior (conectado usando módulos CP/CM).
● Instrucción DeviceStates (Página 473): Recupera los estados operativos de una unidad
periférica descentralizada dentro de un subsistema de E/S.
● Instrucción ModuleStates (Página 479): Recupera los estados operativos de los módulos
de una unidad periférica descentralizada.
● Instrucción GET_DIAG (Página 485): Lee la información de diagnóstico de un dispositivo
especificado.

Nota
La instrucción GetStationInfo solo puede utilizarse con dispositivos PROFINET IO. No es
posible emplear la instrucción con esclavos PROFIBUS DP.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 443
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.2 RD_SINFO (leer información de arranque del OB actual)

Descripción

Tabla 9- 127 Instrucción RD_SINFO

KOP / FUP SCL Descripción


ret_val := RD_SINFO( La instrucción "RD_SINFO" se utiliza para leer la
TOP_SI=>_variant_out_, información de arranque de los OB siguientes:
• El último OB llamado que todavía no ha ter-
START_UP_SI=>_variant_out_) minado de ejecutarse
;
• El último OB de arranque que ha iniciado la
CPU
No hay sello de tiempo en ninguno de los casos.
Si la llamada es en el OB 100, OB 101 u OB 102,
se devolverán dos avisos idénticos de informa-
ción de arranque.

Parámetro
La tabla siguiente muestra los parámetros de la instrucción "RD_SINFO":

Parámetro Declaración Tipo de datos Área de memoria Descripción


RET_VAL Return INT I, Q, M, D, L Información de error
TOP_SI Output VARIANT D, L Información de arranque del OB actual
START_UP_SI Output VARIANT D, L Información de arranque del último OB de
arranque que se inició

Encontrará más información detallada sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


444 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

SDT del parámetro TOP_SI


La tabla siguiente muestra los SDT posibles del parámetro TOP_SI:

Bloques de organización (OB) Tipos de datos de sistema (SDT) Números de tipos de datos de sistema
Cualquiera SI_classic* 592*
SI_none 593
ProgramCycleOB SI_ProgramCycle 594
TimeOfDayOB SI_TimeOfDay 595
TimeDelayOB SI_Delay 596
CyclicOB SI_Cyclic 597
ProcessEventOB SI_HWInterrupt 598
ProfileEventOB SI_Submodule 601
StatusEventOB
UpdateEventOB
SynchronousCycleOB SI_SynchCycle 602
IOredundancyErrorOB SI_IORedundancyError 604
CPUredundancyErrorOB SI_CPURedundancyError 605
TimeErrorOB SI_TimeError 606
DiagnosticErrorOB SI_DiagnosticInterrupt 607
PullPlugEventOB SI_PlugPullModule 608
PeripheralAccessErrorOB SI_AccessError 609
RackStationFailureOB SI_StationFailure 610
ServoOB SI_Servo 611
IpoOB SI_Ipo 612
StartupOB SI_Startup 613
ProgrammingErrorOB SI_ProgIOAccessError 614
IOaccessErrorOB

* El SDT SI_classic no es válido para el S7-1200. La CPU S7-1200 devuelve un RET_VAL de #16#8081 si el parámetro
TOP_SI es del tipo SI_classic.

SDT del parámetro START_UP_SI


La tabla siguiente muestra los SDT posibles del parámetro START_UP_SI:

Tipos de datos de sistema (SDT) Números de tipos de datos de sistema


SI_classic* 592
SI_none 593
SI_Startup 613

* El SDT SI_classic no es válido para el S7-1200. La CPU S7-1200 devuelve un RET_VAL de


#16#8083 si el parámetro START_UP_SI es del tipo SI_classic.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 445
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Estructuras
Las tablas siguientes definen los elementos de las diferentes estructuras:

Tabla 9- 128 Estructura de SI_classic

Elemento de estructu- Tipo de datos Descripción


ra
EV_CLASS BYTE • Bits 0 a 3: ID de evento
• Bits 4 a 7: clase de evento
EV_NUM BYTE Número de evento
PRIORITY BYTE Número de clase de prioridad
(Significado de B#16#FE: OB no disponible o desactivado o no puede iniciarse
en el estado operativo actual)
NUM BYTE Número del OB
TYP2_3 BYTE ID de datos 2_3:
identifica la información introducida en ZI2_3
TYP1 BYTE ID de datos 1:
identifica la información introducida en ZI1
ZI1 WORD Información adicional 1
ZI2_3 DWORD Información adicional 2_3

Tabla 9- 129 Estructura de SI_none

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)

Tabla 9- 130 Estructura de SI_ProgramCycle

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 1 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Initial_Call BOOL Para OB_Class = 1, 30, 52, 61, 65
Remanence BOOL Para OB_Class = 1

Controlador programable S7-1200


446 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 131 Estructura de SI_TimeOfDay

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 10 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
CaughtUp BOOL Para OB_Class = 10
SecondTime BOOL Para OB_Class = 10

Tabla 9- 132 Estructura de SI_Delay

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 20 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Sign WORD Para OB_Class = 20

Tabla 9- 133 Estructura de SI_Cyclic

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 30 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Initial_Call BOOL Para OB_Class = 1, 30, 52, 61, 65
Event_Count INT Para OB_Class = 30, 51, 52, 61, 65, 91, 92

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 447
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 134 Estructura de SI_HWInterrupt

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 40 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_IO Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
USI WORD Para OB_Class = 40
IChannel USINT Para OB_Class = 40
EventType BYTE Para OB_Class = 40

Tabla 9- 135 Estructura de SI_Submodule

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_IO Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Slot UINT Para OB_Class = 55, 56, 57
Specifier WORD Para OB_Class = 55, 56, 57

Tabla 9- 136 Estructura de SI_SynchCycle

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 61 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Initial_Call BOOL Para OB_Class = 1, 30, 52, 61, 65
PIP_Input BOOL Para OB_Class = 61, 91, 92
PIP_Output BOOL Para OB_Class = 61, 91, 92
IO_System USINT Para OB_Class = 61, 91, 92
Event_Count INT Para OB_Class = 30, 51, 52, 61, 65, 91, 92
SyncCycleTime LTIME Tiempo de ciclo calculado

Controlador programable S7-1200


448 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 137 Estructura de SI_IORedundancyError

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 70 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_ANY Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Event_Class BYTE Para OB_Class = 70, 83, 85, 86
Fault_ID BYTE Para OB_Class = 70, 80, 83, 85, 86

Tabla 9- 138 Estructura de SI_CPURedundancyError

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 72 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Switch_Over BOOL Para OB_Class = 72

Tabla 9- 139 Estructura de SI_TimeError

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 80 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Fault_ID BYTE Para OB_Class = 70, 80, 83, 85, 86
Csg_OBnr OB_ANY Para OB_Class = 80
Csg_Prio UINT Para OB_Class = 80

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 449
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 140 Estructura de SI_DiagnosticInterrupt

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 82 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
IO_State WORD Para OB_Class = 82
LADDR HW_ANY Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Channel UINT Para OB_Class = 82
MultiError BOOL Para OB_Class = 82

Tabla 9- 141 Estructura de SI_PlugPullModule

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 83 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_IO Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Event_Class BYTE Para OB_Class = 70, 83, 85, 86
Fault_ID BYTE Para OB_Class = 70, 80, 83, 85, 86

Tabla 9- 142 Estructura de SI_AccessError

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 85 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_IO Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Event_Class BYTE Para OB_Class = 70, 83, 85, 86
Fault_ID BYTE Para OB_Class = 70, 80, 83, 85, 86
IO_Addr UINT Para OB_Class = 85
IO_LEN UINT Para OB_Class = 85

Controlador programable S7-1200


450 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 143 Estructura de SI_StationFailure

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 86 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LADDR HW_IO Para OB_Class = 40, 51, 55, 56, 57, 70, 82, 83, 85, 86, 91, 92
Event_Class BYTE Para OB_Class = 70, 83, 85, 86
Fault_ID BYTE Para OB_Class = 70, 80, 83, 85, 86

Tabla 9- 144 Estructura de SI_Servo

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 91 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Initial_Call BOOL Para OB_Class = 1, 30, 52, 61, 65
PIP_Input BOOL Para OB_Class = 61, 91, 92
PIP_Output BOOL Para OB_Class = 61, 91, 92
IO_System USINT Para OB_Class = 61, 91, 92
Event_Count INT Para OB_Class = 30, 51, 52, 61, 65, 91, 92
Synchronous BOOL

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 451
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 145 Estructura de SI_Ipo

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 92 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
Initial_Call BOOL Para OB_Class = 1, 30, 52, 61, 65
PIP_Input BOOL Para OB_Class = 61, 91, 92
PIP_Output BOOL Para OB_Class = 61, 91, 92
IO_System USINT Para OB_Class = 61, 91, 92
Event_Count INT Para OB_Class = 30, 51, 52, 61, 65, 91, 92
Reduction UINT Para OB_Class = 92

Tabla 9- 146 Estructura de SI_Startup

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT := 100 Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
LostRetentive BOOL Para OB_Class = 100
LostRTC BOOL Para OB_Class = 100

Controlador programable S7-1200


452 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 147 Estructura de SI_ProgIOAccessError

Elemento de estructu- Tipo de datos Descripción


ra
SI_Format USINT • 16#FF = no hay información
• 16#FE = información de arranque optimizada
OB_Class USINT Clase de OB para "no hay información" o "información de arranque optimiza-
da"
OB_Nr UINT Número del OB (1 ... 32767)
BlockNr UINT Para OB_Class = 121, 122
Reaction USINT Para OB_Class = 121, 122
Fault_ID BYTE Para OB_Class = 121, 122
BlockType USINT Para OB_Class = 121, 122
Area USINT Para OB_Class = 121, 122
DBNr DB_ANY Para OB_Class = 121, 122
Csg_OBNr OB_ANY Para OB_Class = 121, 122
Csg_Prio USINT Para OB_Class = 121, 122
Width USINT Para OB_Class = 121, 122

Nota
Si se ha creado con la propiedad de bloque "Estándar", los elementos especificados para la
estructura de SI_classic tienen el mismo contenido que las variables temporales de un OB.
Sin embargo, hay que tener en cuenta que las variables temporales de los diferentes OB
pueden tener nombres distintos y tipos de datos diferentes. También debe tenerse en
cuenta que la interfaz de llamada de cada OB incluye información adicional relacionada con
la fecha y hora de la petición del OB.

Los bits 4 a 7 del elemento de estructura EV_CLASS contienen la clase de evento. Aquí son
posibles los valores siguientes:
● 1: Eventos de arranque de OB estándar
● 2: Eventos de arranque de OB de error síncrono
● 3: Eventos de arranque de OB de error asíncrono
El elemento de estructura PRIORITY proporciona la clase de prioridad del OB actual.
Aparte de estos dos elementos también es relevante NUM . NUM contiene el número del
OB actual o del OB de arranque que se inició en último lugar.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 453
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro RET_VAL
En la tabla siguiente se explican los valores del parámetro RET_VAL:

Código de Explicación
error*
(W#16#...)
8081 La información de arranque del OB actual no se corresponde con el tipo de datos de sistema especificado
8083 La información de arranque del último OB de arranque iniciado no se corresponde con el tipo de datos de
sistema especificado
* El código de error puede visualizarse en el editor de programas como valor entero o hexadecimal.

Ejemplo
Un OB de error de tiempo (OB 80) es el último OB llamado que todavía no ha terminado de
procesarse. Un OB de arranque (OB 100) es el último OB de arranque iniciado. La llamada
de la instrucción para leer la información de arranque es la siguiente, siendo RD_SINFO_DB
el bloque de datos que contiene variables de los SDT para tipos de OB:

La tabla siguiente muestra la asignación entre los elementos de estructura del parámetro
TOP_SI de la instrucción "RD_SINFO" y las variables locales asignadas del OB 80.

Elemento de estructura Tipo de datos OB 80 - Variable local asociada Tipo de datos


TOP_SI

EV_CLASS BYTE OB80_EV_CLASS BYTE


EV_NUM BYTE OB80_FLT_ID BYTE
PRIORITY BYTE OB80_PRIORITY BYTE
NUM BYTE OB80_OB_NUMBR BYTE
TYP2_3 BYTE OB80_RESERVED_1 BYTE
TYP1 BYTE OB80_RESERVED_2 BYTE
ZI1 WORD OB80_ERROR_INFO WORD
ZI2_3 DWORD OB80_ERR_EV_CLASS BYTE
OB80_ERR_EV_NUM BYTE
OB80_OB_PRIORITY BYTE
OB80_OB_NUM BYTE

Controlador programable S7-1200


454 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

La tabla siguiente muestra la asignación entre los elementos de estructura del parámetro
START_UP_SI de la instrucción "RD_SINFO" y las variables locales asignadas del OB 100.

Elemento de estructura Tipo de datos OB 100 - Variable local Tipo de datos


START_UP_SI

EV_CLASS BYTE OB100_EV_CLASS BYTE


EV_NUM BYTE OB100_STRTUP BYTE
PRIORITY BYTE OB100_PRIORITY BYTE
NUM BYTE OB100_OB_NUMBR BYTE
TYP2_3 BYTE OB100_RESERVED_1 BYTE
TYP1 BYTE OB100_RESERVED_2 BYTE
ZI1 WORD OB100_STOP WORD
ZI2_3 DWORD OB100_STRT_INFO DWORD

9.7.3 LED (leer estado del LED)

Tabla 9- 148 Instrucción LED

KOP / FUP SCL Descripción


ret_val := LED( Utilice la instrucción LED para leer el estado de los LED de la CPU
laddr:=_word_in_, (Página 1341). El estado de LED especificado se devuelve en la
LED:=_uint_in_); salida RET_VAL.

Tabla 9- 149 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR IN HW_IO Identificador de la CPU1
LED IN UInt Número de identificador LED
1 RUN/STOP Color 1 = verde, color 2 = amarillo
2 Error Color 1 = rojo
3 Mantenimiento Color 1 = amarillo
RET_VAL OUT Int Estado del LED
1 Para el identificador de la CPU conectada, seleccione Local~Common de la lista desplegable del parámetro.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 455
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 150 Estado de RET_VAL

RET_VAL (W#16#...) Descripción


Estado de LED 0 a 9 0 El DB no existe
1 Off
2 Color 1 encendido (permanente)
3 Color 2 encendido (permanente)
4 Color 1 parpadea a 2 Hz
5 Color 2 parpadea a 2 Hz
6 Color 1 & 2 parpadean de forma alterna a 2 Hz
9 El estado del LED no está disponible
8091 El dispositivo identificado por LADDR no existe
8092 El dispositivo identificado por LADDR no soporta LEDs
8093 Identificador LED no definido
80Bx La CPU identificada por LADDR no soporta la instrucción LED

9.7.4 Get_IM_Data (leer datos de identificación y mantenimiento)


La instrucción Get_IM_Data se utiliza para comprobar los datos de identificación y
mantenimiento (I&M) del módulo o submódulo especificado.

Tabla 9- 151 Instrucción Get_IM_Data

KOP / FUP SCL Descripción


"GET_IM_DATA_DB"(LADDR:=16#0 Utilice la instrucción Get_IM_Data para com-
, probar los datos de identificación y manteni-
IM_TYPE:=0, miento (I&M) del módulo o submódulo
DONE=>_bool_out_, especificado.
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,

DATA:=_variant_inout_);

Controlador programable S7-1200


456 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 152 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR Input HW_IO Identificador del módulo
IM_TYPE Input UInt Número de datos de identificación y mantenimiento (I&M):
• 0: I&M0 (ref. (MLFB), número de serie, versión y otra información)
• 1: I&M1 (identificadores)
• 2: I&M2 (fecha de instalación)
• 3: I&M3 (descripción)
• 4: I&M4 (firma)
RET_VAL Output Int Estado (código de condición)
DATA InOut Variante Datos I&M (STRING o Array of BYTE); uso recomendado del SDT
"IM0_Data" para IM_TYPE = 0.

Los datos de identificación y mantenimiento (I&M) pueden ayudarle a comprobar la


configuración del sistema, detectar cambios en el hardware o visualizar datos de
mantenimiento. Los datos de identificación del módulo (datos I) son de solo lectura. Los
datos de mantenimiento del módulo (datos M) dependen de la información del sistema,
como la fecha de instalación. Los datos M se crean durante la planificación del
mantenimiento y se escriben en el módulo:
● Si el tipo de datos utilizado en el parámetro DATA es una cadena de caracteres, la
longitud actual de la misma se ajusta en función de la longitud de los datos IM.
● Si el tipo de datos utilizado en el parámetro DATA es un array of Byte o un array of Char,
los datos IM se copian como secuencia de bytes.
● Si el tipo de datos utilizado en el parámetro DATA es una estructura, los datos IM se
copian como secuencia de bytes.
● Si el Array of Byte/Char que aparece en DATA es más largo que los datos IM solicitados,
se agrega el valor 16#00.
● No se soportan otros tipos de datos, que devuelven el error 8093.

Tabla 9- 153 Códigos de condición

RET_VAL (W#16#...) Descripción


0 No hay error
8091 LADDR no existe
8092 LADDR no direcciona un objeto HW que soporta datos IM
8093 El tipo de datos del parámetro DATA no se soporta
80B1 Instrucción DATA no soportada por la CPU para este LADDR
80B2 IM_TYPE no soportado por la CPU
8452 La información IM completa no cabe en la variable del parámetro DATA. Se devuelve un resulta-
do parcial que abarca hasta la longitud de bytes de la variable.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 457
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.5 Get_Name (leer el nombre de un dispositivo PROFINET IO)


La instrucción "Get_Name" lee el nombre de un dispositivo PROFINET IO, esclavo
PROFIBUS o esclavo AS-i. El nombre se muestra en la vista de redes y en las propiedades
del dispositivo IO.

Tabla 9- 154 Instrucción Get_Name

KOP / FUP SCL Descripción


"Get_Name_DB"( Use la instrucción Get_Name para
LADDR:=_uint_in_, leer el nombre de un dispositivo
STATION_NR:=_uint_in_, PROFINET IO o esclavo PROFIBUS.
DONE=>_bool_out_,
BUSY=>_bool_out_,
ERROR=>_bool_out_,
LEN=>_dint_out_,
STATUS=>_word_out_,
DATA:=_variant_inout_);

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "Get_Name_DB" es el nombre del DB de instancia.

Seleccione el dispositivo PROFINET IO mediante el identificador de hardware del sistema


de periferia descentralizada (en el parámetro LADDR) y el número del dispositivo
PROFINET IO o la dirección PROFIBUS del esclavo PROFIBUS (en el parámetro
STATION_NR).
Una vez se ha ejecutado la instrucción, el programa escribe el nombre del dispositivo IO en
el área direccionada con el parámetro DATA.
El nombre que se lee depende del tipo de dispositivo IO:
● Esclavo DP o dispositivo IO: Nombre del módulo de cabecera
● Esclavo I o I-device: Nombre del módulo de interfaz
● Panel HMI: Nombre de la interfaz
● Estación PC: Nombre del módulo de interfaz
● Dispositivos GSD: Muestra el nombre del punto de acceso del dispositivo (DAP) (nombre
de la interfaz o módulo de cabecera)
La instrucción escribe la longitud del nombre en el parámetroLEN. Si el nombre es más
largo que el área especificada en el parámetro DATA, el programa solo escribe la sección
que se corresponde con la longitud máxima del área direccionada.
La longitud máxima de un nombre es de 128 caracteres.

Nota
Nombre de la lectura de la CPU (versión 1.1)
Si se asigna "0" a cada uno de los parámetros LADDR y STATION_NR,, la instrucción
escribe el nombre de la CPU.

Controlador programable S7-1200


458 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción Get_Name:

Parámetro Declaración Tipo de datos Descripción


LADDR IN HW_IOSYSTEM Identificador de hardware (HW-IoSystem) del sistema de peri-
feria descentralizada. El número se toma de las constantes del
sistema o de las propiedades del sistema IO.
STATION_NR IN UInt • Dispositivo PROFINET IO: El número de dispositivo se
aplica en la vista de redes de las propiedades del disposi-
tivo IO en "Direcciones Ethernet".
• Esclavo PROFIBUS: La dirección PROFIBUS se aplica en
la vista de redes de las propiedades del esclavo
PROFIBUS en "Dirección PROFIBUS".
DATA IN_OUT Variant Puntero al área en la que se ha escrito el nombre.
DONE OUT Bool La instrucción se ejecuta correctamente. El nombre del módu-
lo se transfiere al área en el parámetro DATA.
BUSY OUT Bool Parámetro de estado:
• 0: Ejecución de la instrucción terminada.
• 1: Ejecución de la instrucción no terminada aún.
ERROR OUT Bool Parámetro de estado:
• 0: Sin errores
• 1: Se ha producido un error al ejecutar la instrucción.
El parámetro STATUS contiene información detallada.
LEN OUT DInt Longitud del nombre del dispositivo IO (número de caracte-
res).
STATUS OUT Word Parámetro de estado: El parámetro solo está activado mien-
tras dura una llamada. Para mostrar el estado debe copiar
STATUS en un área de datos libre.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 459
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro STATUS

Código de Explicación
error*
(W#16#...)
0 Sin errores
7000 Ninguna tarea en curso
7001 Primera llamada de la instrucción asíncrona Get_Name. Ejecución de la instrucción no terminada aún
(BUSY = 1, DONE = 0).
7002 Llamada adicional de la instrucción asíncrona Get_Name. Ejecución de la instrucción no terminada aún
(BUSY = 1, DONE = 0).
8090 El identificador de hardware especificado en el parámetroLADDR no existe en el proyecto.
8092 El valor del parámetro LADDR no direcciona un sistema PROFINET IO.
8093 La instrucción no soporta el tipo de datos del parámetro DATA.
8095 El número de dispositivo (parámetro STATION_NR) no existe en el sistema PROFINET IO seleccionado o
no direcciona un dispositivo IO.
80B1 La CPU usada no soporta la instrucción.
80C3 Error de recurso temporal: La CPU procesa actualmente el número máximo posible de llamadas de blo-
que simultáneas. Get_Name no puede ejecutarse hasta que se haya finalizado como mínimo una de las
llamadas de bloque.
8852 El área especificada en el parámetro DATA es demasiado corta para el nombre completo del dispositivo
IO. El nombre puede escribirse hasta su longitud máxima posible.
Para leer el nombre completo use un área de datos más larga en el parámetro DATA. El área debe tener
como mínimo tantos caracteres como los que hay en el parámetro LEN.
* Los códigos de error en el editor de programas se pueden mostrar como valores enteros o hexadecimales.

Controlador programable S7-1200


460 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Ejemplo
El ejemplo siguiente muestra cómo leer el nombre de estación de un dispositivo PROFINET
IO ET 200SP:
1. Configurar un ET 200SP:
– Cree un ET 200SP con el nombre de estación "Conveyor_1" en la vista de redes y
asígnelo al mismo sistema PROFINET IO que la CPU.
– Asigne la CPU como controlador IO para el ET 200SP.
– Utilice el número de dispositivo predeterminado "1" ubicado en las propiedades, bajo
"Direcciones Ethernet".

2. Asignar parámetros para la instrucción Get_Name:


– Introduzca la ID de hardware del sistema IO en el parámetro LADDR. En este
ejemplo, la ID de hardware es "269". Encontrará la ID de hardware en la ubicación
siguiente:
Variables PLC > Mostrar todas las variables> ficha Constantes de sistema > Sistema
PROFINET IO local
– Introduzca el número de dispositivo del ET 200SP en el parámetro STATION_NR. En
este ejemplo, el número de dispositivo es "1".
– Conecte una variable con el tipo de datos STRING de un bloque de datos en el
parámetro DATA.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 461
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Nota
Cuando utilice la lista desplegable para configurar la variable en el parámetro DATA,
seleccione el DB (en el ejemplo, "Bloque de datos") y la variable (en el ejemplo,
"String[ ]"). Con el fin de leer todo el tipo de datos String, debe borrar los corchetes
para que el resultado final sea: "Bloque de datos".String

– Definir variables PLC (área de memoria, marcas) para los parámetros de salida de la
instrucción.

Controlador programable S7-1200


462 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

3. Ejecución de la instrucción Get_Name:


– Mientras se ejecuta la instrucción, el parámetro de salida BUSY puede ponerse a "1"
y el parámetro DONE se pone a "0".
– La información del código de error se muestra en el parámetro de salida STATUS.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 463
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

4. Completar la ejecución de la instrucción Get_Name:


– Tras ejecutar la instrucción, el programa escribe "Conveyor_1", el nombre de la
estación del ET 200SP, en el bloque de datos del parámetro DATA.
– El programa escribe "10", el número de caracteres que contiene el nombre de la
estación, en el parámetro LEN.

Controlador programable S7-1200


464 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.6 GetStationInfo (leer la dirección IP o MAC de un dispositivo PROFINET IO)


La instrucción "GetStationInfo" lee la dirección IP o MAC de un dispositivo PROFINET IO del
sistema IO local o de un dispositivo PROFINET IO ubicado en un sistema IO de nivel inferior
(conectado usando módulos CP/CM).

Nota
La instrucción GetStationInfo solo puede utilizarse con dispositivos PROFINET IO. No es
posible emplear la instrucción con esclavos PROFIBUS DP.

Tabla 9- 155 Instrucción GetStationInfo

KOP / FUP SCL Descripción


"GetStationInfo_SFB_DB"( Utilice la instrucción GetStationInfo
REQ:=_bool_in_, para leer la dirección IP o MAC de un
LADDR:=_uint_in_, dispositivo PROFINET IO. La instruc-
DETAIL:=_uint_in_, ción también permite leer la dirección
MODE:=_uint_in_, IP o MAC de un dispositivo IO ubica-
DONE=>_bool_out_, do en un sistema IO de nivel inferior
(conectado usando módulos CP/CM).
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
DATA:=_variant_inout_);

1 STEP 7 crea el DB automáticamente al insertar la instrucción.


2 En el ejemplo SCL, "GetStationInfo_SFB_DB" es el nombre del DB de instancia.

Direccione el dispositivo IO empleando el identificador de hardware de la estación en el


parámetro LADDR. Encontrará la ID de hardware en la ubicación siguiente:
Variables PLC > Mostrar todas las variables> ficha Constantes de sistema. Busque
"IODevice" en la columna de nombre y "Hw_Device" en la columna de tipo de datos.
Utilice el parámetro MODE para seleccionar la información que debe leerse.
En el parámetro DATA asigne el área de datos en la que la instrucción escribe los datos de
dirección leídos. Para guardar la dirección IP, use la estructura "IF_CONF_v4". Para guardar
la dirección MAC, use la estructura "IF_CONF_MAC".
Active la lectura de los datos de dirección mediante el parámetro de control REQ. Para ello,
el dispositivo IO tiene que estar accesible.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 465
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

La instrucción muestra el estado de ejecución de la tarea de lectura por medio de los


parámetros de salida BUSY, DONE y ERROR y el parámetro de salida STATUS.

Nota
Direccione el dispositivo IO empleando solo el identificador de hardware de la estación.
La estación, el dispositivo IO y la interfaz PROFINET disponen de su propio identificador de
hardware. Utilice únicamente el identificador de hardware de la estación para la instrucción
GetStationInfo.
Si se direcciona una interfaz PROFINET mediante el parámetro LADDR, por ejemplo, los
datos de dirección no se leen y la CPU genera un código de error "8092".
Para leer los datos de dirección de una interfaz PROFINET integrada o un módulo CM/CP
en la configuración central, use la instrucción "RDREC".

Parámetros
La tabla siguiente muestra los parámetros de la instrucción GetStationInfo:

Parámetro Declaración Tipo de datos Descripción


REQ IN Bool Petición de parámetro de control
Activa la lectura de la información con REQ = "1".
LADDR IN HW_DEVICE El identificador de hardware de la estación del dispositivo IO
El número se toma de las propiedades de la estación en la
Vista de redes o de la ficha "Constantes de sistema" de la
tabla de variables predeterminada.
DETAIL IN HW_SUBMODUL El parámetro DETAIL no se utiliza. Deje el parámetro desco-
E nectado.
MODE IN UNIT Selección de datos de dirección que deben leerse:
• MODE = 1: Parámetro de dirección conforme a IPv4 (CPU
S7-1200 a partir de la versión de firmware V4.2)
• MODE = 2: Dirección MAC (CPU S7-1200 a partir de la
versión de firmware V4.2)
DATA IN_OUT Variant Puntero al área en la que el programa escribe los datos de
dirección del dispositivo IO. Utilice la estructura "IF_CONF_v4"
para MODE =1 y la estructura "IF_CONF_MAC" para MODE =
2.
DONE OUT Bool El programa ha ejecutado la instrucción correctamente. El
programa ha transferido los datos de dirección al parámetro
DATA.
BUSY OUT Bool Parámetro STATUS:
• 0: Ejecución de la instrucción terminada.
• 1: Ejecución de la instrucción no terminada aún.

Controlador programable S7-1200


466 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro Declaración Tipo de datos Descripción


ERROR OUT Bool Parámetro STATUS:
• 0: Sin errores.
• 1: Se ha producido un error al ejecutar la instrucción.
La información detallada se emite mediante el parámetro
STATUS.
STATUS OUT Word Parámetro STATUS:
El parámetro solo está activado mientras dura una llamada.
Para mostrar el estado debe copiar STATUS en un área de
datos libre.

Parámetro DATA
● Utilice la estructura "IF_CONF_v4" en el parámetro DATA para guardar el parámetro de
dirección conforme a IPv4:

Byte Parámetro Tipo de datos Valor inicial Descripción


0…1 Id UINT 30 ID de la estructura "IF_CONF_v4"
2…3 Length UNIT 18 Longitud de la lectura de datos en BYTE
4 ... 5 Mode UNIT 0 Irrelevante para la instrucción "GetStationInfo" (dejar
en "0")
6 ... 9 InterfaceAddress ARRAY [1..4] of - Dirección IP del dispositivo IO en el formato IP_V4
BYTE (por ejemplo, 192.168.3.10):
• addr[1] = 192
• addr[2] = 168
• addr[3] = 3
• addr[4] = 10
10 … SubnetMask ARRAY [1..4] of - Máscara de subred del dispositivo IO en el formato
13 BYTE IP_V4 (por ejemplo, 255.255.255.0):
• addr[1] = 255
• addr[2] = 255
• addr[3] = 255
• addr[4] = 0
14 ... DefaultRouter ARRAY [1..4] of - Dirección IP del router en el formato IP_V4 (por ejem-
17 BYTE plo, 192.168.3.1):
• addr[1] = 192
• addr[2] = 168
• addr[3] = 3
• addr[4] = 1

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 467
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

● Utilice la estructura "IF_CONF_MAC" en el parámetro DATA para guardar la dirección


MAC:

Byte Parámetro Tipo de datos Valor inicial Descripción


0…1 Id UINT 3 ID de la estructura "IF_CONF_MAC"
2…3 Length UNIT 12 Longitud de la lectura de datos en BYTE
4 ... 5 Mode UNIT 0 Irrelevante para la instrucción "GetStationInfo" (dejar
en "0")
6 ... 11 MACAddress ARRAY [1..6] of - Dirección MAC del dispositivo IO (por ejemplo, 08-00-
BYTE 06-12-34-56):
• Mac[1] = 8
• Mac[2] = 0
• Mac[3] = 6
• Mac[4] = 12
• Mac[5] = 34
• Mac[6] = 56

Parámetro STATUS

Código de Explicación
error*
(W#16#...)
0 Sin errores
7000 Ninguna tarea en curso
7001 Primera llamada de la instrucción asíncrona GetStationInfo. Ejecución de la instrucción no terminada
aún (BUSY = 1, DONE = 0).
7002 Llamada adicional de la instrucción asíncrona GetStationInfo. Ejecución de la instrucción no terminada
aún (BUSY = 1, DONE = 0).
8080 Valor no soportado en el parámetro MODE.
8090 El identificador de hardware especificado en el parámetroLADDR no está configurado.
8092 El parámetro LADDR no direcciona un dispositivo PROFINET IO.
8093 Tipo de datos no válido en el parámetro DATA.
80A0 La información solicitada no se ha leído.
80C0 El dispositivo IO direccionado no está accesible.
80C3 Se ha alcanzado el número máximo de llamadas simultáneas de la instrucción GetStationInfo (10 ins-
tancias).
* Los códigos de error en el editor de programas se muestran como valores enteros o hexadecimales.

Ejemplo
En el ejemplo inferior se utiliza la instrucción GetStationInfo para leer los datos de la
dirección IP de un dispositivo IO y escribir la información en un bloque de datos. Los datos
de la dirección IP incluyen la dirección IP, la máscara de subred y los datos de dirección del
router (si se utiliza).

Controlador programable S7-1200


468 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

El controlador IO ejecuta la instrucción GetStationInfo y la instrucción lee la información de


la dirección IP de un dispositivo IO de nivel inferior (en este ejemplo, un ET200SP):
1. Configurar un ET 200SP:
– Cree un ET 200SP con el nombre de estación "Conveyor_1" en la vista de redes y
asígnelo al mismo sistema PROFINET IO que la CPU.
– Asigne la CPU como controlador IO para el ET 200SP.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 469
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

2. Asignar parámetros para la instrucción GetStationInfo :


– Cree cinco variables y una estructura con el tipo de datos IF_CONF_v4 en un bloque
de datos global para guardar los datos de la dirección IP. Asigne un nombre
cualquiera a la estructura. (En el ejemplo, el nombre de la estructura es
"IP_Address".)

Controlador programable S7-1200


470 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

3. Asignar parámetros para la instrucción GetStationInfo:


– Introduzca la ID de hardware del dispositivo IO en el parámetro LADDR. El
identificador de hardware solo identifica el producto y, en este ejemplo, la ID de
hardware es "270". Encontrará la ID de hardware en la ubicación siguiente: Variables
PLC > Mostrar todas las variables> ficha Constantes de sistema
Busque el dispositivo IO en la columna de nombre y "Hw_Device" en la columna de
tipo de datos. El valor asociado es la ID de hardware que se ha introducido en el
parámetro LADDR.
– Seleccione "1" (leer parámetros de dirección conforme a IPv4) para el parámetro
MODE.
– Conecte la estructura IF_CONF_v4 en el parámetro DATA.

Nota
Cuando utilice la lista desplegable para configurar la variable en el parámetro DATA,
seleccione el DB (en el ejemplo, "GetStationInfo_Global_DB") y la variable (en el
ejemplo, "dirección IP"). Con el fin de leer todo el tipo de datos IF_CONF_v4, debe
borrar el período que aparece después de "dirección IP" de forma que el resultado
final sea: "GetStationInfo_Global_DB".Dirección IP

– Definir variables PLC del DB global para los parámetros de salida de la instrucción.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 471
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

4. Ejecución de la instrucción GetStationInfo:


– Cuando la entrada REQ = 1 (FALSE), la instrucción no muestra información de la
dirección IP en el parámetro entrada/salida DATA ni información del código de error
en el parámetro de salida STATUS.

5. Completar la ejecución de la instrucción GetStationInfo:


– Cuando la entrada REQ = 1 (TRUE), el programa ejecuta la instrucción y escribe la
dirección IP en el bloque de datos. El programa escribe la dirección IP "C0 A8 02 1A"
(valor decimal de "192.168.2.26") en el parámetro de entrada/salida DATA.

Controlador programable S7-1200


472 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.7 Instrucción DeviceStates


Puede utilizar la instrucción DeviceStates para devolver los estados de todos los
dispositivos esclavos de E/S descentralizadas conectados a un maestro de E/S
descentralizadas.

Tabla 9- 156 Instrucción DeviceStates

KOP / FUP SCL Descripción


ret_val := DeviceStates( DeviceStates recupera los estados operativos
laddr:=_word_in_, del dispositivo de E/S de un subsistema de
mode:=_uint_in_, E/S. Tras la ejecución, el parámetro STATE
state:=_variant_inout_); contiene el estado de error de cada dispositivo
de E/S en forma de lista de bits (para LADDR y
MODE asignados). Esta información se co-
rresponde con el estado del dispositivo que se
indica en la vista de diagnóstico de STEP 7.
La entrada LADDR de DeviceStates utiliza el
identificador de hardware de una interfaz de
E/S descentralizadas. En TIA Portal, los identi-
ficadores de hardware de un PLC pueden
determinarse buscando los tipos de datos
"HW_IOSYSTEM" en la pestaña de constantes
del sistema en la tabla de variables PLC.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 473
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 157 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR IN HW_IOSYSTEM Dirección lógica: (Identificador del sistema I/O)
MODE IN UInt Admite cinco modos de funcionamiento. La entrada MODE deter-
mina los datos que se devolverán a la ubicación especificada para
la información de STATE. Los modos son los siguientes:
• 1: Configuración de dispositivo activa
• 2: Dispositivo defectuoso
• 3: Dispositivo deshabilitado
• 4: El dispositivo existe
• 5: Problema en el dispositivo
RET_VAL OUT Int Código de condición de ejecución
STATE1 InOut Variant Búfer que recibe el estado de error de cada dispositivo: El tipo de
datos seleccionado para el parámetro STATE puede ser cualquier
tipo de bit (Bool, Byte, Word o DWord) o una matriz del tipo bit.
• El bit 0 del primer byte de los datos STATE devueltos es un bit
de resumen. Cuando se establece en TRUE, indica que los
otros datos están disponibles.
• Los datos que devuelve el parámetro STATE muestran una
correlación unívoca entre una ubicación de bit y una dirección
de E/S descentralizadas. El direccionamiento de este dispositi-
vo es TRUE para PROFIBUS y PROFINET. Por ejemplo, el bit
4 del primer byte se correlaciona con la dirección 4 de
PROFIBUS o el número de dispositivo 4 de PROFINET.

1 Para PROFIBUS-DP, la longitud de la información de estado es 128 bits. Para PROFINET IO, la longitud es de 1024
bits.

Tras la ejecución, el parámetro STATE contiene el estado de error de cada dispositivo E/S
en forma de lista de bits (para LADDR y MODE asignados).

Tabla 9- 158 Códigos de condición

RET_VAL (W#16#...) Descripción


0 No hay error
8091 LADDR no existe.
8092 LADDR no direcciona un sistema I/O.
8093 Tipo de datos no válido asignado para el parámetro STATE: Los tipos de datos válidos son
(Bool, Byte, Word o Dword) o una matriz de (Bool, Byte, Word o Dword).
80Bx La CPU no soporta la instrucción DeviceStates para este LADDR.
8452 La longitud de todos los datos de estado es demasiado larga para el parámetro STATE asig-
nado. El búfer de STATE contiene un resultado parcial.

Controlador programable S7-1200


474 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.7.1 Configuraciones de ejemplo de DeviceStates

Ejemplo de PROFIBUS
El ejemplo PROFIBUS comprende lo siguiente:
● 16 Los dispositivos PROFIBUS denominados de "DPSlave_10" a "DPSlave_25"
● Los 16 dispositivos PROFIBUS utilizan las direcciones PROFIBUS de 10 a 25,
respectivamente.
● Cada esclavo se configura con varios módulos de E/S.
● Se muestran los primeros cuatro bytes de la información del parámetro STATE devuelto.

MODE Ejemplo 1: Ejemplo 2: Ejemplo 3:


Operación normal sin PROFIBUS Dispositivo PROFIBUS Dispositi-
errores esclavo DPSlave_12 vo esclavo DPSla-
con un único módulo ve_12 desconectado
extraído
1: Configuración de disposi- 0x01FC_FF03 0x01FC_FF03 0x01FC_FF03
tivo activa
2: Dispositivo defectuoso 0x0000_0000 0x0110_0000 0x0110_0000
3: Dispositivo deshabilitado 0x0000_0000 0x0000_0000 0x0000_0000
4: El dispositivo existe 0x01FC_FF03 0x01FC_FF03 0x01EC_FF03
5: Problema en el dispositi- 0x0000_0000 0x0110_0000 0x0110_0000
vo

Las siguientes cuatro tablas muestran un desglose binario de los cuatro bytes de datos que
se analizan:

Tabla 9- 159 Ejemplo 1: Sin errores: se devuelve un valor de 0x01FC_FF03 para MODE 1 (configura-
ción de dispositivo activa).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x01 Bit 7 0000-0001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFC Bit 15 1111-1100 Bit 8
Byte 3 0xFF Bit 23 1111-1111 Bit 16
Byte 4 0x03 Bit 31 0000-0011 Bit 24

Los dispositivos se configuran en las direcciones 10 (bit 10) a 25 (bit 25).


No hay dispositivos configurados en las direcciones 1 a 9.
MODE 4 (el dispositivo existe) datos coincidentes MODE 1 (configuración de dispositivo activa),
de manera que los dispositivos configurados coinciden con los dispositivos existentes.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 475
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 160 Ejemplo 2: Se ha extraído un módulo del dispositivo esclavo PROFIBUS "DPSlave_12".
Se devuelve un valor de 0x0110_0000 para MODE 2 (dispositivo defectuoso).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x01 Bit 7 0000-0001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x10 Bit 15 0001-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

El dispositivo 12 (bit 12) está marcado como defectuoso.


MODE 5 (problema en el dispositivo) devuelve la misma información que MODE 2 (dispositivo de-
fectuoso).

Tabla 9- 161 Ejemplo 2 (continuación): Se ha extraído un módulo del dispositivo esclavo PROFIBUS
"DPSlave_12". Se devuelve un valor de 0x01FC_FF03 para MODE 4 (el dispositivo exis-
te).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x01 Bit 7 0000-0001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFC Bit 15 1111-1100 Bit 8
Byte 3 0xFF Bit 23 1111-1111 Bit 16
Byte 4 0x03 Bit 31 0000-0011 Bit 24

Aunque el dispositivo 12 (bit 12) tiene un error, como se muestra en MODE 2 (dispositivo defectuoso)
de arriba, el dispositivo todavía funciona en la red, lo que hace que MODE 4 (el dispositivo existe)
muestre el dispositivo como "dispositivo existente".

Tabla 9- 162 Ejemplo 3: El dispositivo esclavo PROFIBUS "DPSlave_12" está desconectado (cable
desconectado o pérdida de corriente) de la red PROFIBUS. Todavía se detecta "DPSla-
ve_12" como dispositivo defectuoso, así como un error en el dispositivo. La diferencia es
que "DPSlave_12" ya no se detecta y que existe un dispositivo. Se devuelve un valor de
0x01EC_FF03 para MODE 4 (el dispositivo existe).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x01 Bit 7 0000-0001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xEC Bit 15 1110-1100 Bit 8
Byte 3 0xFF Bit 23 1111-1111 Bit 16
Byte 4 0x03 Bit 31 0000-0011 Bit 24

El dispositivo 12 (bit 12) está marcado como no existente. Con esta excepción, los dispositivos de 10
a 25 todavía se notifican como existentes.

Controlador programable S7-1200


476 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Ejemplo de PROFINET
El ejemplo PROFINET comprende lo siguiente:
● 16 Los dispositivos esclavos PROFINET denominados de "et200s_1" a "et200s_16"
● Los 16 dispositivos PROFINET utilizan los números de dispositivos PROFINET de 1 a
16, respectivamente.
● Cada esclavo se configura con varios módulos de E/S.
● Se muestran los primeros cuatro bytes de la información del parámetro STATE devuelto.

MODE Ejemplo 1: Ejemplo 2: Ejemplo 3:


Operación normal sin PROFINET Módulo PROFINET Esclavo
errores esclavo et200s_1 ex- et200s_1 desconec-
traído tado
1: Configuración de disposi- 0xFFFF_0100 0xFFFF_0100 0xFFFF_0100
tivo activa
2 - Dispositivo defectuoso 0x0000_0000 0x0300_0000 0x0300_0000
3 - Dispositivo deshabilitado 0x0000_0000 0x0000_0000 0x0000_0000
4 - El dispositivo existe 0xFFFF_0100 0xFFFF_0100 0xFDFF_0100
5 - Problema en el disposi- 0x0000_0000 0x0300_0000 0x0300_0000
tivo

Las siguientes cuatro tablas muestran un desglose binario de los cuatro bytes de datos que
se analizan:

Tabla 9- 163 Ejemplo 1: Sin errores: se devuelve un valor de 0xFFFF_0100 para MODE 1 (configura-
ción de dispositivo activa).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFF Bit 7 1111-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFF Bit 15 1111-1111 Bit 8
Byte 3 0x01 Bit 23 0000-0001 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Los dispositivos se configuran en las direcciones 1 (bit 1) a 16 (bit 16).


No hay dispositivos configurados en las direcciones 1 a 9.
MODE 4 (el dispositivo existe) datos coincidentes MODE 1 (configuración de dispositivo activa),
de manera que los dispositivos configurados coinciden con los dispositivos existentes.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 477
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 164 Ejemplo 2: Se ha desconectado un módulo del dispositivo esclavo PROFINET


"et200s_1". Se devuelve un valor de 0x0300_0000 para MODE 2 (dispositivo defectuo-
so).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x03 Bit 7 0000-0011 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x00 Bit 15 0000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

El dispositivo 1 (bit 1) está marcado como defectuoso. Puesto que el dispositivo todavía existe,
MODE 4 (el dispositivo existe) muestra los mismos datos que durante la operación normal.
MODE 5 (problema en el dispositivo) devuelve la misma información que MODE 2 (dispositivo de-
fectuoso).

Tabla 9- 165 Ejemplo 2 (continuación): Se ha desconectado un módulo del dispositivo esclavo


PROFIBUS "et200s_1". Se devuelve un valor de 0xFFFF_0100 para MODE 4 (el dispo-
sitivo existe).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFF Bit 7 1111-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFF Bit 15 1111-1111 Bit 8
Byte 3 0x01 Bit 23 0000-0001 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Aunque el dispositivo 1 (bit 1) tiene un error, como se muestra en MODE 2 (dispositivo defectuoso) de
arriba, el dispositivo todavía funciona en la red, lo que hace que MODE 4 (el dispositivo existe)
muestre el dispositivo como "dispositivo existente".

Tabla 9- 166 Ejemplo 3: El dispositivo esclavo PROFINET "et200s_1" está desconectado (cable des-
conectado o pérdida de corriente) de la red PROFINET. Se devuelve un valor de
0xFDFF_0100 para MODE 4 (el dispositivo existe).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFD Bit 7 1111-1101 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFF Bit 15 1111-1111 Bit 8
Byte 3 0x01 Bit 23 0000-0001 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

El dispositivo 1 (bit 1) no existe. Los dispositivos de 2 (bit 2) a 16 (bit 16) existen.

Controlador programable S7-1200


478 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.8 Instrucción ModuleStates


Puede utilizar la instrucción ModuleStates para devolver el estado de todos los módulos en
una estación PROFIBUS o PROFINET.

Tabla 9- 167 Instrucción ModuleStates

KOP / FUP SCL Descripción


ret_val := ModuleStates( ModuleStates determina los estados operati-
laddr:=_word_in_, vos de los módulos de E/S. Tras la ejecución,
mode:=_uint_in, el parámetro STATE contiene el estado de
state:=_variant_inout); error de cada módulo de E/S en forma de lista
de bits (para LADDR y MODE asignados).
Esta información se corresponde con el esta-
do del módulo que se indica en la vista de
diagnóstico de STEP 7.
La entrada LADDR de ModuleStates utiliza un
identificador de hardware de una estación de
E/S descentralizadas y no del propio módulo
de cabecera. El identificador de hardware
puede encontrarse seleccionando toda la
estación en la vista de red y buscando la
sección del identificador de hardware debajo
de las propiedades. También puede encon-
trarse buscando los tipos de datos
"Hw_Device" y "Hw_DpSlave" en la pestaña
de constantes del sistema en la tabla de va-
riables PLC.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 479
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 168 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR IN HW_DEVICE Dirección lógica (identificador de los módulos de E/S)
MODE IN UInt Admite cinco modos de funcionamiento. La entrada MODE deter-
mina los datos que se devolverán a la ubicación especificada para
la información de STATE. Los modos son los siguientes:
• 1: Configuración de módulo activa
• 2: Módulo defectuoso
• 3: Módulo deshabilitado
• 4: El módulo existe
• 5: Problema en el módulo
RET_VAL OUT Int Estado (código de condición)
STATE1 InOut Variant Búfer que recibe el estado de error de cada módulo: El tipo de
datos utilizado para el parámetro STATE puede ser cualquier tipo
de bit (Bool, Byte, Word o DWord) o una matriz del tipo bit.
• El bit 0 del primer byte de los datos STATE devueltos es un bit
de resumen. Cuando se establece en TRUE, indica que los
otros datos están disponibles.
• Los datos que devuelve el parámetro STATE muestran una
correlación unívoca entre una ubicación de bit y una posición
de módulo. El direccionamiento por slot es TRUE para
PROFIBUS y PROFINET. Así, por ejemplo, para un ET 200SP
con un módulo de cabecera, un módulo de potencia y dos mó-
dulos E/S, el bit 1 del primer byte equivale al módulo de cabe-
cera, el bit 2 al módulo de potencia y los bits 3 y 4 a los
módulos E/S, respectivamente.

1 Pueden asignarse 128 bits como máximo. El número de bits necesarios depende del uso del módulo de E/S.

Tabla 9- 169 Códigos de condición

RET_VAL ( W#16#...) Descripción


0 No hay error
8091 El módulo identificado por LADDR no existe.
8092 El módulo identificado por LADDR no direcciona un dispositivo de E/S.
8093 Tipo de datos no válido para el parámetro STATE: Los tipos de datos válidos son (Bool, Byte,
Word o Dword) o una matriz de (Bool, Byte, Word o Dword).
80Bx La instrucción ModuleStates no es soportada por la CPU para este LADDR.
8452 La longitud de todos los datos de estado es demasiado larga para el parámetro STATE asig-
nado. El búfer de STATE contiene un resultado parcial.

Controlador programable S7-1200


480 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.8.1 Configuraciones de ejemplo de ModuleStates

Ejemplo de PROFIBUS
El ejemplo PROFIBUS comprende lo siguiente:
● 16 Los dispositivos PROFIBUS denominados de "DPSlave_10" a "DPSlave_25"
● Los 16 dispositivos PROFIBUS utilizan las direcciones PROFIBUS de 10 a 25,
respectivamente.
● Cada esclavo se configura con varios módulos de E/S.
● El ejemplo utiliza el parámetro LADDR del esclavo PROFIBUS "DPSlave_12", que
contiene un módulo de cabecera, un módulo de potencia y dos módulos de E/S.
● Se muestran los primeros cuatro bytes de la información del parámetro STATE devuelto.

MODE Ejemplo 1: Ejemplo 2: Ejemplo 3:


Operación normal sin PROFIBUS Módulo PROFIBUS Dispositi-
errores DPSlave_12 del dispo- vo esclavo DPSla-
sitivo esclavo extraído ve_12 desconectado
1: Configuración de módulo 0x1F00_0000 0x1F00_0000 0x1F00_0000
activa
2: Módulo defectuoso 0x0000_0000 0x0900_0000 0x1F00_0000
3: Módulo deshabilitado 0x0000_0000 0x0000_0000 0x0000_0000
4: El módulo existe 0x1F00_0000 0x1700_0000 0x0000_0000
5: Problema en el módulo 0x0000_0000 0x0900_0000 0x1F00_0000

Las siguientes cuatro tablas muestran un desglose binario de los cuatro bytes de datos que
se analizan:

Tabla 9- 170 Ejemplo 1: Sin errores: se devuelve un valor de 0x1F00_0000 para MODE 1 (configura-
ción de módulo activa).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x1F Bit 7 0001-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x00 Bit 15 0000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Los slots de 1 (bit 1) a 4 (bit 4) contienen módulos. Los slots 5 (bit 5) y en adelante no contienen
módulos.
MODE 4 (el módulo existe) datos coincidentes MODE 1 (configuración de módulo activa), de ma-
nera que los módulos configurados coinciden con los módulos existentes.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 481
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 171 Ejemplo 2: Se ha extraído un módulo del dispositivo esclavo PROFIBUS "DPSlave_12".
Se devuelve un valor de 0x0900_0000 para MODE 2 (dispositivo defectuoso).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x09 Bit 7 0000-1001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x00 Bit 15 0000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Solo el módulo 3 (bit 3) está marcado como defectuoso. Todos los demás módulos son funcionales.

Tabla 9- 172 Ejemplo 2 (continuación): Se ha extraído un módulo del dispositivo esclavo PROFIBUS
"DPSlave_12". Se devuelve un valor de 0x1700_0000 para MODE 4 (el módulo existe).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x17 Bit 7 0001-0111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x00 Bit 15 0000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

El módulo 3 (bit 3) se muestra como ausente. Los módulos 1, 2 y 4 (bits 1, 2 y 4) se muestran como
existentes.

Tabla 9- 173 Ejemplo 3: El dispositivo esclavo PROFIBUS "DPSlave_12" está desconectado (cable
desconectado o pérdida de corriente) de la red PROFIBUS. Se devuelve un valor de
0x1F00_0000 para MODE 2 (módulo defectuoso).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x1F Bit 7 0001-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x00 Bit 15 0000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Los módulos de los slots de 1 a 4 (bits 1 a 4) se marcan como defectuosos, puesto que el dispositivo
está ausente.
MODE 5 (problema en el dispositivo) muestra la misma información que MODE 2 (módulo defec-
tuoso).

Controlador programable S7-1200


482 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Ejemplo de PROFINET
El ejemplo PROFINET comprende lo siguiente:
● 16 Los dispositivos esclavos PROFINET denominados de "et200s_1" a "et200s_16"
● Los 16 dispositivos PROFINET utilizan los números de dispositivos PROFINET de 1 a
16, respectivamente.
● Cada esclavo se configura con varios módulos de E/S.
● El ejemplo utiliza el esclavo PROFINET "et200s_1", que contiene un módulo de
cabecera, un módulo de potencia y 18 módulos de E/S.
● Se muestran los primeros cuatro bytes de la información del parámetro STATE devuelto.

MODE Ejemplo 1: Ejemplo 2: Ejemplo 3:


Operación normal sin PROFINET Módulo PROFINET Esclavo
errores esclavo et200s_1 ex- et200s_1 desconec-
traído tado
1: Configuración de módulo 0xFFFF_1F00 0xFFFF_1F00 0xFFFF_1F00
activa
2: Módulo defectuoso 0x0000_0000 0x0180_0000 0xFFFF_1F00
3: Módulo deshabilitado 0x0000_0000 0x0000_0000 0x0000_0000
4: El módulo existe 0xFFFF_1F00 0xFF7F_1F00 0x0000_0000
5: Problema en el módulo 0x0000_0000 0x0180_0000 0xFFFF_1F00

Las siguientes cuatro tablas muestran un desglose binario de los cuatro bytes de datos que
se analizan:

Tabla 9- 174 Ejemplo 1: Sin errores: se devuelve un valor de 0xFFFF_1F00 para MODE 1 (configura-
ción de módulo activa).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFF Bit 7 1111-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFF Bit 15 1111-1111 Bit 8
Byte 3 0x1F Bit 23 0001-1111 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Los slots de 1 (bit 1) a 20 (bit 20) contienen módulos. Los slots 21 (bit 21) y en adelante no contienen
módulos.
MODE 4 (el módulo existe) datos coincidentes MODE 1 (configuración de módulo activa), de ma-
nera que los módulos configurados coinciden con los módulos existentes.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 483
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Tabla 9- 175 Ejemplo 2: Se ha desconectado un módulo del dispositivo esclavo PROFINET


"et200s_1". Se devuelve un valor de 0x0180_0000 para MODE 2 (módulo defectuoso).

Byte con valor Patrón de bit con valor Notas


Byte 1 0x01 Bit 7 0000-0001 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x80 Bit 15 1000-0000 Bit 8
Byte 3 0x00 Bit 23 0000-0000 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Solo el módulo 15 (bit 15) está marcado como defectuoso. Todos los demás módulos son funciona-
les.

Tabla 9- 176 Ejemplo 2 (continuación): Se ha desconectado un módulo del dispositivo esclavo


PROFIBUS "et200s_1". Se devuelve un valor de 0xFF7F_1F00 para MODE 4 (el módulo
existe).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFF Bit 7 1111-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0x7F Bit 15 0111-1111 Bit 8
Byte 3 0x1F Bit 23 0001-1111 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

El módulo 15 (bit 15) se muestra como ausente. Los módulos de 1 a 14 (bits de 1 a 14) y de 16 a 20
(bits de 16 a 20) se muestran como existentes.

Tabla 9- 177 Ejemplo 3: El dispositivo esclavo PROFINET "et200s_1" está desconectado (cable des-
conectado o pérdida de corriente) de la red PROFINET. Se devuelve un valor de
0xFFFF_1F00 para MODE 2 (módulo defectuoso).

Byte con valor Patrón de bit con valor Notas


Byte 1 0xFF Bit 7 1111-1111 Bit 0 Bit 0 es true; datos disponibles.
Byte 2 0xFF Bit 15 1111-1111 Bit 8
Byte 3 0x1F Bit 23 0001-1111 Bit 16
Byte 4 0x00 Bit 31 0000-0000 Bit 24

Los módulos de los slots de 1 a 20 (bits 1 a 20) se marcan como defectuosos, puesto que el dispositi-
vo está ausente.
MODE 5 (problema en el dispositivo) muestra la misma información que MODE 2 (módulo defec-
tuoso).

Controlador programable S7-1200


484 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

9.7.9 GET_DIAG (leer información de diagnóstico)

Descripción
Se puede usar la instrucción "GET_DIAG" para leer la información de diagnóstico de un
dispositivo de hardware. El dispositivo de hardware se selecciona con el parámetro LADDR.
Con el parámetro MODE se selecciona la información de diagnóstico que se va a leer.

Tabla 9- 178 Instrucción GET_DIAG

KOP / FUP SCL Descripción


ret_val := GET_DIAG( Lee la información de diagnóstico de un dis-
mode:=_uint_in_, positivo de hardware asignado.
laddr:=_word_in_,
cnt_diag=>_uint_out_,
diag:=_variant_inout_,
detail:=_variant_inout_);

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "GET_DIAG":

Tabla 9- 179 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


MODE IN UInt Utilice el parámetro MODE para seleccionar los datos de diagnóstico
que se quieran obtener.
LADDR IN HW_ANY (Word) ID de hardware del dispositivo
RET_VAL OUT Int Estado de la instrucción
CNT_DIAG OUT UInt Número de detalles de diagnóstico obtenidos
DIAG InOut Variant Puntero a área de datos para almacenar la información de diagnósti-
co del modo seleccionado
DETAILS InOut Variant Puntero a área de datos para almacenar los detalles de diagnóstico
según el modo seleccionado

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 485
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro MODE
Según el valor en el parámetro MODE, se obtienen datos diferentes de diagnóstico en los
parámetros de salida DIAG, CNT_DIAG y DETAILS:

Tabla 9- 180 Parámetro MODE

MODE Descripción DIAG CNT_DIAG DETAILS


0 Salida de toda la información Cadena de bits de los mo- 0 -
de diagnóstico soportada para dos soportados como
un módulo como DWord, DWord, donde Bit X=1 indi-
donde Bit X=1 indica que se ca que se soporta el modo
soporta el modo X. X.
Si la CPU S7-1200 ignora el
parámetro LADDR cuando
el parámetro MODE es 0.
1 Salida del estado inherente Estado de diagnóstico: 0 -
del objeto de hardware direc- Salida según la estructura
cionado. DIS. (Nota: consulte la
información de "Estructura
DIS" a continuación, así
como el ejemplo de la ins-
trucción GET_DIAG al final
del apartado.
2 Salida del estado de todos los Salida de datos de diagnós- 0 -
módulos subordinados del tico según la estructura
objeto de hardware direccio- DNN. (Nota: consulte la
nado. información de "Estructura
DNN" a continuación, así
como el ejemplo de la ins-
trucción GET_DIAG al final
del apartado.

Estructura DIS
Con el parámetro MODE = 1, la información de diagnóstico se obtiene según la estructura
DIS. En la tabla siguiente se explican los valores de cada parámetro:

Tabla 9- 181 Estructura de la Diagnostic Information Source (DIS, fuente de información de diagnóstico)

Parámetro Tipo de datos Valor Descripción


MaintenanceState DWord Enum
0 Mantenimiento no necesario
1 El módulo o dispositivo está deshabilitado.
2 -
3 -
4 -
5 Mantenimiento necesario
6 Mantenimiento solicitado
7 Error

Controlador programable S7-1200


486 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro Tipo de datos Valor Descripción


8 Estado desconocido/error en módulo subordinado
9 -
10 Entradas/salidas no disponibles.
Componentstate DWord Matriz de Estado de los submódulos del módulo:
Detail bits
• Bits 0 a 15: mensaje de estado del módulo
• Bits 16 a 31: mensaje de estado de la CPU
0a2 Información adicional:
(enum)
• Bit 0: Sin información adicional
• Bit 1: Transferencia no permitida
3 Bit 3 = 1: Al menos un canal soporta calificadores de diagnóstico.
4 Bit 4 = 1: Mantenimiento necesario para un canal o un componente
como mínimo
5 Bit 5 = 1: Mantenimiento solicitado para un canal o un componente
como mínimo
6 Bit 6 = 1: Error en un canal o componente como mínimo
7 a 10 Reservados (siempre = 0)
11 a 14 Bit 11 = 1: PNIO - submódulo correcto
Bit 12 = 1: PNIO: módulo de repuesto
Bit 13 = 1: PNIO: módulo incorrecto
Bit 14 = 1: PNIO: módulo desconectado
15 Reservados (siempre = 0)
16 a 31 Información de estado de los módulos generada por la CPU:
Bit 16 = 1: Módulo deshabilitado
Bit 17 = 1: Modo CiR activo
Bit 18 = 1: Entrada no disponible
Bit 19 = 1: Salida no disponible
Bit 20 = 1: Desbordamiento del búfer de diagnóstico
Bit 21 = 1: Diagnóstico no disponible
Bits 22 - 31: Reservados (siempre 0)
OwnState Uint16 Enum El valor del parámetro OwnState describe el estado de mantenimiento
del módulo.
0 No hay fallos
1 El módulo o dispositivo está deshabilitado.
2 Mantenimiento necesario
3 Mantenimiento solicitado
4 Error
5 La CPU no puede acceder al módulo o dispositivo (válido para módu-
los o dispositivos bajo una CPU).
6 Entradas/salidas no disponibles.
7 -
IO State Uint16 Matriz de Estado de E/S del módulo
bits
0 Bit 0 = 1: Mantenimiento no necesario

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 487
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Parámetro Tipo de datos Valor Descripción


1 Bit 1 = 1: El módulo o dispositivo está deshabilitado.
2 Bit 2 = 1: Mantenimiento necesario
3 Bit 3 = 1: Mantenimiento solicitado
4 Bit 4 = 1: Error
5 Bit 5 = 1: La CPU no puede acceder al módulo o dispositivo (válido
para módulos o dispositivos bajo una CPU).
6 Calificador; bit 7 = 1, si los bits 0, 2 o 3 están activados
7 Entradas/salidas no disponibles.
8 a 15 Reservados (siempre = 0)
OperatingState UInt16 Enum
0 -
1 En STOP/actualización de firmware
2 En STOP/borrado total

3 En STOP/arranque automático

4 En STOP
5 Reset de memoria
6 En ARRANQUE
7 En RUN
8 -
9 En PARADA
10 -
11 -
12 Módulo defectuoso
13 -
14 Sin alimentación
15 CiR
16 En STOP/sin DIS

17 In
18
19
20

Controlador programable S7-1200


488 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Estructura DNN
Con el parámetro MODE = 2, los detalles de información de diagnóstico se obtienen según
la estructura DNN. En la tabla siguiente se explican los valores de cada parámetro:

Tabla 9- 182 Estructura del Diagnostic Navigation Node (DNN, nodo de navegación de diagnóstico)

Parámetro Tipo de datos Valor Descripción


SubordinateState UINT Enum Estado del módulo subordinado (consultar parámetro OwnState
de la estructura DIS).
SubordinateIOState WORD Bitarray Estado de las entradas y salidas del módulo subordinado (con-
sultar parámetro IO State de la estructura DIS).
DNNmode WORD Bitarray • Bit 0 = 0: Diagnóstico habilitado
• Bit 0 = 1: Diagnóstico deshabilitado
• Bits 1 a 15: Reservado

Parámetro RET_VAL

Tabla 9- 183 Códigos de error del parámetro RET_VAL

Código de error Descripción



(W#16#...)
0 No hay error
8080 Valor no soportado en el parámetro MODE.
8081 El tipo en el parámetro DIAG no está soportado con el modo seleccionado (parámetro MODE).
8082 El tipo en el parámetro DETAILS no está soportado con el modo seleccionado (parámetro MODE).
8090 LADDR no existe.
8091 El canal seleccionado en el parámetro CHANNEL no existe.
80C1 Falta de recursos para ejecución en paralelo

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 489
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Ejemplo
En el siguiente esquema de lógica de escalera y DB se muestra cómo utilizar los tres modos
con las tres estructuras:
● DIS
● DNN

① DNN
② DIS

Controlador programable S7-1200


490 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.7 Diagnóstico (PROFINET o PROFIBUS)

Nota
En el DB, debe indicar manualmente el tipo de datos para acceder a cada una de las tres
estructuras; no hay ninguna lista desplegable para efectuar la selección. Indique los tipos de
datos exactamente como se muestra a continuación:
• DNN
• DIS

9.7.10 Eventos de diagnóstico de E/S descentralizadas

Nota
En un sistema PROFIBUS IO, tras una descarga o una desconexión y conexión, la CPU
pasará a modo RUN a menos que se establezca la compatibilidad de hardware para permitir
módulos sustitutos aceptables (Página 175) y que falten uno o más módulos o que no sea
un sustituto aceptable para el módulo configurado.

Como muestra la tabla siguiente, la CPU soporta los diagnósticos que pueden configurarse
para los componentes del sistema I/O descentralizado. Cada uno de estos errores genera
una entrada en el búfer de diagnóstico.

Tabla 9- 184 Tratamiento de eventos de diagnóstico de PROFINET y PROFIBUS

Tipo de error ¿Hay información de diag- ¿Hay una entrada en el Modo de operación de la
nóstico de la estación? búfer de diagnóstico? CPU
Error de diagnóstico Sí Sí Permanece en modo RUN
Fallo del rack o estación Sí Sí Permanece en modo RUN
Error de acceso a E/S 1 No Sí Permanece en modo RUN
Error de acceso a la periferia 2 No Sí Permanece en modo RUN
Evento de presencia de módu- Sí Sí Permanece en modo RUN
lo
1 Causa del ejemplo de error de acceso a E/S: se ha retirado un módulo.
2 Causa del ejemplo de error de acceso a la periferia: comunicación acíclica con un submódulo que no está comunican-
do.

Utilice la instrucción GET_DIAG (Página 485) para obtener información de diagnóstico de


cada estación. Esto le permitirá tratar desde el programa los errores encontrados en el
dispositivo y, si es necesario, para la CPU a modo STOP. Este método hace necesario
especificar el dispositivo de hardware desde el que leer la información de estado.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 491
Instrucciones avanzadas
9.8 Impulso

La instrucción GET_DIAG utiliza la "dirección L" (LADDR) de la estación para obtener el


diagnóstico de toda la estación. Esta dirección L se encuentra en la vista de configuración
de redes así como seleccionando todo el rack de la estación (todo el área gris), la dirección
L se indica en la ficha Propiedades de la estación. La dirección LADDR de cada módulo se
encuentra o bien en las propiedades del módulo (en la configuración del dispositivo) o en la
tabla de variables predeterminada de la CPU.

9.8 Impulso

9.8.1 CTRL_PWM (modulación del ancho de impulso)

Tabla 9- 185 Instrucción CTRL_PWM (modulación del ancho de impulsos)

KOP / FUP SCL Descripción


"CTRL_PWM_DB"( Ofrece una salida fija de tiempo de ciclo con un ciclo
PWM:=_uint_in_, de trabajo variable. La salida PWM se ejecuta conti-
ENABLE:=_bool_in_, nuamente tras haberse iniciado a la frecuencia indica-
BUSY=>_bool_out_, da (tiempo de ciclo). La duración de impulso varía
STATUS=>_word_out_); según sea necesario para obtener el control deseado.

1 Cuando se inserta la instrucción, STEP 7 muestra el cuadro de diálogo "Opciones de llamada" para crear el DB asocia-
do.
2 En el ejemplo SCL, "CTRL_PWM_DB" es el nombre del DB de instancia.

Tabla 9- 186 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


PWM IN HW_PWM Identificador PWM: Los nombres de los generadores de impulsos habi-
(Word) litados se convierten en variables en la tabla de variables "Constantes"
y están disponibles para ser utilizados como parámetro PWM. (Valor
predeterminado: 0)
ENABLE IN Bool 1= iniciar generador de impulsos
0 = parar generador de impulsos
BUSY OUT Bool Función ocupada (valor predeterminado: 0)
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

La instrucción CTRL_PWM almacena la información de parámetros en el DB. El usuario no


modifica por separado los parámetros del bloque de datos, sino que la instrucción
CTRL_PWM los controla.
Determine el generador de impulsos habilitado que desea utilizar, utilizando su nombre de
variable para el parámetro PWM.
Cuando la entrada EN es TRUE, la instrucción PWM_CTRL inicia o detiene el PWM
identificado, según el valor de la entrada ENABLE. El valor de la dirección de salida de
palabra Q asociada indica la duración de impulso.

Controlador programable S7-1200


492 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

Puesto que la CPU procesa la petición cuando se ejecuta la instrucción CTRL_PWM, el


parámetro BUSY siempre notifica FALSE. Si se detecta un error, ENO se pone a FALSE y el
parámetro STATUS contiene un código de condición.
La duración de impulso se pone al valor inicial ajustado en la configuración de dispositivos
cuando la CPU pasa por primera vez al estado operativo RUN. Los valores se escriben en la
ubicación de la palabra Q indicada en la configuración de dispositivos ("Direcciones de
salida" / "Dirección inicial:") según sea necesario para modificar la duración de impulso.
Para escribir la duración de impulso deseada en la palabra Q apropiada se utiliza una
instrucción de desplazamiento, conversión, matemática o un cuadro PID. El valor de palabra
Q debe estar comprendido en el rango válido (porcentaje, milésimos, diezmilésimos o
formato analógico S7).

Nota
Las E/S digitales asignadas a PWM y PTO no se pueden forzar permanentemente
Las E/S digitales utilizadas por los dispositivos con modulación del ancho de impulsos
(PWM) y tren de impulsos (PTO) se asignan durante la configuración de dispositivos. Si se
asignan direcciones de E/S digitales a estos dispositivos, los valores de las direcciones de
E/S asignadas no podrán ser modificados por la función de forzado permanente de la tabla
de observación.

Tabla 9- 187 Valor del parámetro STATUS

STATUS Descripción
0 No hay error
80A1 El identificador PWM no direcciona un PWM válido.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 493
Instrucciones avanzadas
9.8 Impulso

9.8.2 CTRL_PTO (tren de impulsos)


La instrucción PTO ofrece una onda cuadrada con un 50 % de salida de ciclo de carga a
una frecuencia especificada. Se utiliza la instrucción CTRL_PTO para asignar la frecuencia
sin un bloque de datos (DB) de eje para objetos tecnológicos (TO).
La instrucción requiere un generador de impulsos. Debe activar el generador de impulsos y
seleccionar un tipo de señal en la configuración hardware. Consulte "Configurar un canal de
impulsos para PWM o PTO" (Página 501) para obtener más información.
Se accede a la instrucción CTRL_PTO en las instrucciones avanzadas de las Task Cards.

Tabla 9- 188 Instrucción CTRL_PTO (tren de impulsos)

KOP / FUP1 SCL2 Descripción


"CTRL_PTO_DB"( La instrucción PTO permite al usuario
REQ:=_bool_in_, controlar la frecuencia para una salida de
PTO:=_uint_in_, onda cuadrada (50% del ciclo de carga).
FREQUENCY:=_udint_in_,
DONE=>_bool_out_,
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_);
1 Cuando se inserta la instrucción, STEP 7 muestra el cuadro de diálogo "Opciones de llamada" para crear el DB asocia-
do.
2 En el ejemplo SCL, "CTRL_PTO_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


494 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

Tabla 9- 189 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


EN IN Bool 1 = Instrucción activada
0 = Instrucción desactivada
REQ IN Bool 1 = Poner la frecuencia de salida de PTO al valor de la entrada
FREQUENCY
0 = Sin cambios en PTO
PTO IN HW_PTO Identificador PTO: ID de hardware del generador de impulsos:
(Word)
• Los nombres de los generadores de impulsos activados se convier-
ten en variables en la tabla de variables "Constantes" y están dis-
ponibles para ser utilizados como parámetro PTO. (Valor
predeterminado = 0)
• Encontrará la ID de hardware en la vista de dispositivos de las
propiedades del generador de impulsos. Las constantes de sistema
también listan las ID de hardware de los generadores de impulsos.
(Valor predeterminado = 0)
FREQUENCY IN UDInt Frecuencia teórica (en Hz) de PTO. El valor solo se aplica si REQ = 1
(el valor predeterminado es 0 Hz)
DONE OUT Bool Función finalizada sin errores (valor predeterminado: 0)
BUSY OUT Bool Función ocupada (valor predeterminado: 0)
ERROR OUT Word Se ha detectado un error (valor predeterminado: 0)
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

La instrucción CTRL_PTO almacena la información de parámetros en el DB. El usuario no


modifica por separado los parámetros del bloque de datos, sino que la instrucción
CTRL_PTO los controla.
Determine el generador de impulsos habilitado que desea utilizar, utilizando su nombre de
variable o identificador de hardware para el parámetro PTO.
Cuando la entrada EN es TRUE, la instrucción CTRL_PTO inicia o detiene el PTO
identificado. Cuando la entrada EN es FALSE, la instrucción CTRL_PTO no se ejecuta y el
PTO mantiene su estado actual.
Cuando la entrada REQ se pone a TRUE, el valor de FREQUENCY se hace efectivo. Si
REQ es FALSE, no es posible cambiar la frecuencia de salida del PTO, y el PTO continúa
emitiendo impulsos.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 495
Instrucciones avanzadas
9.8 Impulso

Puesto que la instrucción CTRL_PTO solo inicia el PTO, la instrucción CTRL_PTO termina
inmediatamente. Como resultado, la salida BUSY nunca se activa. La salida DONE sigue
activada mientras no se produce ningún error. Si se detecta un error, el parámetro ERROR
se pone a TRUE y el parámetro STATUS contiene un código de condición.
Cuando el usuario activa la instrucción CTRL_PTO con una frecuencia determinada, el S7-
1200 emite un tren de impulsos con dicha frecuencia. El usuario puede modificar la
frecuencia teórica en cualquier momento. Si se modifica la frecuencia, el S7-1200 finaliza el
impulso actual antes de cambiar la frecuencia a la nueva consigna. Así, por ejemplo, si la
frecuencia teórica es de 1 Hz (que tarda 1000 ms en finalizar) y el usuario cambia la
frecuencia a 10 Hz al cabo de 500 ms, la frecuencia no cambiará hasta que finalice el
período de tiempo de 1000 ms.

Controlador programable S7-1200


496 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

① El usuario cambia la frecuencia a 10 Hz al cabo de 500 ms.


② El impulso de 1 Hz debe finalizar antes de que pueda cambiarse la frecuencia al nuevo valor
de 10 Hz.
③ 1 Hz equivale a 1000 ms

El objeto de hardware Generador de impulsos tiene la restricción siguiente: Solo una


instrucción puede utilizar el generador de impulsos como PTO y su uso es gestionado por el
editor de la configuración hardware. Si otras instrucciones intentan acceder a ese PTO
devuelven un error: "0x8090" (el generador de impulsos con la ID de hardware especificada
está en uso).

Nota
Las E/S digitales asignadas a PWM y PTO no se pueden forzar permanentemente
Las E/S digitales utilizadas por los dispositivos con modulación del ancho de impulsos
(PWM) y tren de impulsos (PTO) se asignan durante la configuración de dispositivos. Si se
asignan direcciones de E/S digitales a estos dispositivos, los valores de las direcciones de
E/S asignadas no podrán ser modificados por la función de forzado permanente de la tabla
de observación.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 497
Instrucciones avanzadas
9.8 Impulso

Tabla 9- 190 Valor del código de error del parámetro STATUS

Código de error (W#16#...) Descripción


0 Sin errores
0x8090 El generador de impulsos con la ID de hardware especificada está en uso.
0x8091 Frecuencia fuera de rango. La frecuencia teórica excede la frecuencia máxima de la
salida de impulsos seleccionada.
0x80A1 El identificador PTO (ID de hardware) no direcciona un PTO válido.
0x80D0 El generador de impulsos con la ID de hardware especificada no está activado. Active
el generador de impulsos en "Generadores de impulsos (PTO/PWM)" de las propieda-
des de la CPU.
0x80D1 El generador de impulsos con la ID de hardware especificada no tiene ningún PTO
seleccionado. Seleccione el PTO en la configuración hardware.

9.8.3 Manejo de las salidas de impulso

El ancho de impulso puede expresarse en centésimas


del tiempo de ciclo (0 a 100), milésimas (0 a 1000),
diezmilésimas (0 a 10000) o en formato analógico S7.
La duración de impulso puede variar entre 0 (sin im-
pulso, siempre off) y escala completa (sin impulso,
① Tiempo de ciclo siempre on).

② Duración de impulso

Puesto que la salida PWM puede variar entre 0 y escala completa, ofrece una salida digital
que, en numerosos aspectos, es similar a una salida analógica. Por ejemplo, la salida PWM
puede utilizarse para controlar la velocidad de un motor (desde "paro" hasta "a toda
velocidad") o la posición de una válvula (desde "cerrada" hasta "totalmente abierta").
La frecuencia se configura en la configuración hardware (Página 501). La duración de
impulso se controla desde el programa de usuario.
Hay cuatro generadores de impulsos disponibles para controlar las funciones de salida de
impulsos rápidos: PWM y PTO (tren de impulsos). PTO se usa en las instrucciones de
Motion Control. Cada generador de impulsos puede asignarse a PWM o PTO, pero no a
ambos simultáneamente.
Es posible utilizar las salidas integradas de la CPU o las salidas opcionales de la Signal
Board. La tabla siguiente muestra los números de las salidas (suponiendo que se utiliza la
configuración predeterminada de las salidas). Si se ha modificado la numeración de las
salidas, sus números serán los que se hayan asignado. Tenga en cuenta que PWM solo
requiere una salida, mientras que PTO puede utilizar opcionalmente dos salidas por canal.
Si una salida no se requiere para una función de impulsos, estará disponible para otros
usos. Consulte la tabla siguiente para la asignación de E/S.

Controlador programable S7-1200


498 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

En la tabla que se muestra más abajo se muestran las asignaciones de E/S


predeterminadas; sin embargo, los cuatro generadores de impulsos se pueden configurar
para cualquier salida digital de CPU integrada o SB. Las diferentes salidas admiten
tensiones y velocidades distintas, por lo que debe tenerlo en cuenta al asignar las
ubicaciones PWM/PTO.

Nota
Los trenes de impulsos no pueden ser utilizados por otras instrucciones dentro del programa
de usuario.
Si las salidas de la CPU o Signal Board se configuran como generadores de impulsos (para
su utilización con la PWM o con instrucciones de PTO de Motion Control), las direcciones de
salidas correspondientes se eliminarán de la memoria Q y no podrán utilizarse para ningún
otro fin en el programa de usuario. Si el programa de usuario escribe un valor en una salida
utilizada como generador de impulsos, la CPU no escribirá ese valor en la salida física.

Nota
Las salidas de sentido de PTO se pueden liberar para usarlas en cualquier otro lugar del
programa.
Para cada PTO se necesita asignar dos salidas: una como salida de impulsos y otra como
salida de sentido. Puede usar la salida de impulsos, pero no la salida de sentido. Puede
liberar la salida de sentido para otros fines en el programa del usuario.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 499
Instrucciones avanzadas
9.8 Impulso

Tabla 9- 191 Asignaciones de salidas predeterminadas para los generadores de impulsos3

Descripción Impulso Sentido


PTO1
E/S incorporadas Q0.0 Q0.1
E/S de la SB Q4.0 Q4.1
PWM1
Salidas incorporadas Q0.0 -
Salidas de la SB Q4.0 -
PTO2
E/S incorporadas Q0.2 Q0.3
E/S de la SB Q4.2 Q4.3
PWM2
Salidas incorporadas Q0.2 -
Salidas de la SB Q4.2 -
PTO3
E/S incorporadas Q0.41 Q0.51
E/S de la SB Q4.0 Q4.1
PWM3
Salidas incorporadas Q0.41 -
Salidas de la SB Q4.1 -
PTO4
E/S incorporadas Q0.62 Q0.72
E/S de la SB Q4.2 Q4.3
PWM4
Salidas incorporadas Q0.62 -
Salidas de la SB Q4.3 -
1 La CPU 1211C no tiene las salidas Q0.4, Q0.5, Q0.6 ni Q0.7. Por lo tanto, esas salidas no pueden
usarse en la CPU 1211C.
2 La CPU 1212C no tiene las salidas Q0.6 ni Q0.7. Por lo tanto, esas salidas no pueden usarse en
la CPU 1212C.
3 Esta tabla es válida para las funciones de PTO/PWM de la CPU 1211C, CPU 1212C, CPU 1214C,
CPU 1215C y CPU 1217C.

Controlador programable S7-1200


500 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

9.8.4 Configurar un canal de impulso para PWM o PTO


Con el fin de prepararse para el funcionamiento de PWM o PTO, en primer lugar debe
configurarse un canal de impulso en la configuración de dispositivos seleccionando la CPU,
después el generador de impulsos (PTO/PWM) y eligiendo de PWM1/PTO1 a PWM4/PTO4.
Habilite el generador de impulsos (casilla de verificación). Si está habilitado un generador de
impulsos, se le asigna un nombre predeterminado y unívoco. El nombre puede cambiarse
editándolo en el cuadro "Nombre:", pero debe ser un nombre unívoco. Los nombres de los
generadores de impulsos habilitados se convierten en variables en la tabla de variables
"Constantes" y están disponibles para ser utilizados del siguiente modo:
● Parámetro PWM de la instrucción CTRL_PWM
● Parámetro PTO de la instrucción CTRL_PTO
También es posible escribir un comentario relacionado con este generador de impulsos
concreto en el cuadro de edición "Comentario:".

Tabla 9- 192 Salida de la CPU: Frecuencia máxima (PTO) y tiempo de ciclo mínimo (PWM)

CPU Canal de salida de la Frecuencia máxima Tiempo de ciclo mínimo


CPU PTO PWM
1211C De Qa.0 a Qa.3 100 kHz 10 µs
1212C De Qa.0 a Qa.3 100 kHz 10 µs
Qa.4, Qa.5 20 kHz 50 µs
1214C y 1215C De Qa.0 a Qa.3 100 kHz 10 µs
De Qa.4 a Qb.1 20 kHz 50 µs
1217C De DQa.0 a DQa.3 1 MHz 1 µs
(de .0+, .0- a .3+, .3-)
De DQa.4 a DQb.1 100 kHz 10 µs

Tabla 9- 193 Salida de la Signal Board (SB): Frecuencia máxima (PTO) y tiempo de ciclo mínimo
(PWM)

Signal Board (SB) Canal de salida de la Frecuencia máxima Tiempo de ciclo mínimo
SB PTO PWM
SB 1222, 200 kHz De DQe.0 a DQe.3 200 kHz 5 µs
SB 1223, 200 kHz DQe.0, DQe.1 200 kHz 5 µs
SB 1223 DQe.0, DQe.1 20 kHz 50 µs

Nota
El tiempo de ciclo mínimo de cada una de las salidas de la CPU y la Signal Board se indica
en las tablas anteriores. Sin embargo, el TIA Portal no alerta cuando se configura un
generador de impulsos PWM con un tiempo de ciclo inferior al tiempo de ciclo mínimo del
hardware. Podría tener problemas en la aplicación. Por tanto, asegúrese de que el tiempo
de ciclo esté siempre dentro de los límite del hardware.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 501
Instrucciones avanzadas
9.8 Impulso

Nota
Cuando se ajusta la duración de impulso de una señal PWM, el tiempo real de duración del
impulso (tiempo durante el que el impulso está "high") debe ser mayor o igual a 1
milisegundo si la base de tiempo es "milisegundos". Si la base de tiempo es
"microsegundos", el tiempo real de duración del impulso debe ser mayor o igual a 1
microsegundo. La salida se desactiva si el tiempo de duración del impulso es menor que 1
"base de tiempo".
Así, por ejemplo, un tiempo de ciclo de 10 microsegundos y una duración de impulso de 5
centésimas genera un tiempo de duración del impulso de 0,5 microsegundos. Puesto que es
menor que 1 microsegundo, la señal PWM está desactivada.

Parametrización
La sección de parametrización permite al usuario configurar los parámetros del impulso de
salida. Las funciones siguientes están disponibles en función de si se ha seleccionado PWM
o PTO:
● Tipo de señal: Configure la salida de impulsos como PWM o PTO. Si se selecciona PTO,
consulte "Sincronización" (Página 671) para más información:
– PWM
– PTO (impulso A y sentido B)
– PTO (impulso ascendente A e impulso descendente B)
– PTO (A/B con desplazamiento de fase)
– PTO (A/B con desplazamiento de fase - cuádruple)
● Base de tiempo (solo aplicable a PWM): Seleccione las unidades de tiempo que se
utilizarán:
– milisegundos
– microsegundos
● Formato de la duración de impulso (solo aplicable a PWM): Asigne la resolución de la
duración de impulso (ancho):
– Centésimas (0 a 100)
– Milésimos (0 a 1000)
– Diezmilésimos (0 a 10000)
– Formato analógico S7 (0 a 27648)
● Tiempo de ciclo (solo aplicable a PWM): Asigne el tiempo que se tardará en finalizar un
impulso (el tiempo de impulso "high" más el tiempo de impulso "low" es igual al tiempo de
ciclo). El tiempo de ciclo se puede modificar en tiempo de ejecución seleccionando la
casilla de verificación "Permitir modificar el tiempo de ciclo en tiempo de ejecución".
Encontrará más información en el apartado inferior "Direcciones de periferia". El rango
válido está comprendido entre 1 y 16.777.215 unidades de tiempo.

Controlador programable S7-1200


502 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

● Duración del impulso inicial (solo aplicable a PWM): Asigne la duración del primer
impulso. Este valor puede modificarse en tiempo de ejecución por medio de la dirección
de palabra Q configurada en las direcciones E/S. El rango se basa en el formato de la
duración de impulso.
● Permitir modificar el tiempo de ciclo en tiempo de ejecución (solo aplicable a PWM): Si se
selecciona esta opción, el programa puede modificar el tiempo de ciclo de la señal PWM
mientras se está ejecutando. Encontrará más información en el apartado inferior
"Direcciones de periferia".

Nota
Cuando se ajusta la duración de impulso de una señal PWM hay que tener en cuenta el
retardo de conmutación del canal de salida tal y como se indica en el anexo A. La duración
de impulso real medida en la salida puede ser mayor que la duración de impulso
seleccionada. El incremento de la duración de impulso es más pronunciado para una
duración de impulsos pequeña y frecuencias mayores. Asegúrese de verificar que la
duración de impulso medida en la salida cumple sus requisitos.

Determinar el valor de duración de impulso


La "duración de impulso" se calcula multiplicando la "duración de impulso inicial" por el
"tiempo de ciclo". Cuando se selecciona una "Base de tiempo", un "Formato de la duración
de impulso", un "Tiempo de ciclo" y una "Duración de impulso inicial" hay que tener en
cuenta que la "Duración de impulso" general no puede ser un valor fraccionario. Si la
"Duración de impulso" resultante es un valor fraccionario, debe ajustarse la "Duración de
impulso inicial" o cambiarse la "Base de tiempo" para generar un valor entero.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 503
Instrucciones avanzadas
9.8 Impulso

Aquí tiene dos ejemplos:


● Ejemplo 1: Si se seleccionan los valores siguientes:
– Base de tiempo = milisegundos (ms)
– Formato de duración de impulso = centésimas (0 a 100)
– Tiempo de ciclo = 3 ms
– Duración de impulso inicial = 75
La "duración de impulso" resultante = 0,75 x 3 ms = 2,25 ms
El valor de "Duración de impulso" es fraccionario y causa un error cuando se ejecuta la
instrucción CTRL_PWM. La "Duración de impulso" debe ser un valor entero.
● Ejemplo 2: Si se seleccionan los valores siguientes:
– Base de tiempo = microsegundos (µs)
– Formato de duración de impulso = centésimas (0 a 100)
– Tiempo de ciclo = 3000 µs
– Duración de impulso inicial = 75
La "duración de impulso" resultante = 0,75 x 3000 µs = 2250 µs
Este valor de "Duración de impulso" es un valor entero y la instrucción CTRL_PWM
funciona debidamente con este valor.

Salidas de hardware
En la sección de salidas de hardware, seleccione el canal de salida en el menú desplegable.
Según sea la configuración, habrá una o dos salidas para seleccionar. Si se asigna un canal
de salida a un generador de impulsos, dicho canal no podrá ser utilizado por ningún otro
generador de impulsos, HSC ni por el registro de la memoria imagen de proceso.

Nota
Las salidas del generador de impulsos no pueden ser utilizadas por otras instrucciones del
programa de usuario
Si las salidas de la CPU o Signal Board se configuran como generadores de impulsos (para
su utilización con PWM, PTO o con instrucciones de Motion Control), las direcciones de
salida correspondientes se eliminarán de la memoria Q y no podrán utilizarse para ningún
otro fin en el programa. Si el programa escribe un valor en una salida utilizada como
generador de impulsos, la CPU no escribirá ese valor en la salida física.

Controlador programable S7-1200


504 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.8 Impulso

Direcciones de periferia
PWM tiene dos bytes de memoria Q para "Duración de impulso". Mientras PWM se está
ejecutando, es posible modificar el valor en la memoria Q asignada y cambiar la duración de
impulso.
En la sección Dirección de periferia, introduzca la dirección de palabra Q en la que desee
almacenar el valor de la duración de impulso.
Las direcciones predeterminadas para los valores de la duración de impulso PWM son las
siguientes:
● PWM1: QW1000
● PWM2: QW1002
● PWM3: QW1004
● PWM4: QW1006
Para PWM, el valor en este punto controla la duración de impulso y se inicializa al valor de
"Duración de impulso inicial:" (asignado anteriormente) cada vez que la CPU pasa de STOP
a RUN. El valor de esta palabra Q se cambia en tiempo de ejecución con el fin de modificar
la duración de impulso. El rango de este valor depende del formato configurado para la
duración de impulso en la parametrización.
También es posible asignar cuatro bytes adicionales de memoria Q al "Tiempo de ciclo" de
la señal PWM. Encontrará un diagrama de la señal PWM en Funcionamiento de las salidas
pulsadas (Página 498). Al seleccionar la casilla de verificación "Permitir modificar el tiempo
de ciclo en tiempo de ejecución", los dos primeros bytes retienen el valor de duración de
impulso y los cuatro últimos bytes retienen el valor de tiempo de ciclo.
Mientras PWM se está ejecutando, es posible modificar el valor de la palabra doble al final
de la memoria Q asignada a PWM. Con ello cambia el tiempo de ciclo de la señal PWM.
Active esta opción, por ejemplo, para que la CPU asigne seis bytes a PWM1; seguidamente,
decide utilizar de QB1008 a QB1013. Una vez descargado el programa e iniciada PWM, es
posible modificar la duración de impulso utilizando QW1008 y el tiempo de ciclo utilizando
QD1010.
Cada vez que la CPU pasa de STOP a RUN, inicializa el valor del tiempo de ciclo en la
memoria Q al valor "Tiempo de ciclo" asignado anteriormente en la sección
"Parametrización". Las unidades y el rango de valores del valor del tiempo de ciclo en la
memoria Q son los mismos que los configurados en la sección "Parametrización".
Al seleccionar la casilla de verificación "Permitir modificar el tiempo de ciclo en tiempo de
ejecución", el TIA Portal selecciona automáticamente una nueva dirección para la salida. La
nueva dirección de salida no puede ser la misma que la dirección predeterminada para este
generador de impulsos. El TIA Portal utiliza el primer bloque disponible de seis bytes
consecutivos. Si no encuentra ningún bloque disponible de la memoria Q antes de llegar al
final de la misma, vuelve a iniciar la búsqueda en la dirección "0" de la memoria Q y sigue
buscando un bloque disponible.
Un generador de impulsos configurado para PTO no utiliza la dirección de palabra Q.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 505
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9 Recetas y registros de datos

9.9.1 Recetas

9.9.1.1 Vista general de la receta

Almacenamiento de datos de la receta


● El bloque de datos de receta que cree en su proyecto debe almacenarse en la memoria
de carga de la CPU. Puede utilizarse la memoria interna de la CPU o una tarjeta de
"programa" como memoria externa.
● Otro DB que debe crear es el bloque de datos de receta activa. Este DB debe estar en la
memoria de trabajo, donde un registro de receta activa se lee o graba con su lógica de
programa.

Gestión de datos de receta


El DB de receta utiliza una matriz de registros de receta de producto. Cada elemento de la
matriz de receta representa un sabor de receta diferente que se basa en un conjunto de
componentes común.
● Debe crear un tipo de datos o estructura PLC que defina todos los componentes de un
registro de receta. Esta plantilla de tipo de datos se reutiliza para todos los registros de
receta. Las recetas del producto varían en función de los valores de arranque que se
asignan a los componentes de la receta.
● Puede transferirse una de las recetas en cualquier momento del DB de receta (todas las
recetas de la memoria de carga) al DB de receta activa (una receta en la memoria de
trabajo) utilizando la instrucción READ_DBL. Después de mover un registro de receta a
la memoria de trabajo, la lógica de programa puede leer los valores de los componentes
e iniciar una ejecución de producción. Esta transferencia minimiza la cantidad de
memoria de trabajo de CPU necesaria para los datos de receta.
● Si los valores de los componentes de la receta activa se ajustan mediante un dispositivo
HMI durante una ejecución de producción, puede volver a escribir los valores
modificados en el DB de receta utilizando la instrucción WRIT_DBL.

Exportación de recetas (del DB de receta al archivo CSV)


El conjunto completo de registros de receta puede generarse en forma de archivo CSV
utilizando la instrucción RecipeExport. Los registros de receta no utilizados también se
exportan.

Controlador programable S7-1200


506 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Importación de recetas (del archivo CSV al DB de receta)


Una vez completada la operación de exportación, puede utilizar el archivo CSV generado
como plantilla de estructura de datos.
1. Utilice la página File Browser en el servidor web de la CPU para cargar un archivo CSV
de receta existente de la CPU en un PC.
2. Modifique el CSV de la receta con un editor de texto ASCII. Puede modificar los valores
de arranque asignados a los componentes, pero no los tipos de datos o la estructura de
datos.
3. Vuelva a cargar a la CPU el archivo CSV modificado del PC. Sin embargo, el archivo
CSV anterior en la memoria de carga de la CPU (con el mismo nombre) debe suprimirse
o renombrarse para que el servidor web de la CPU permita la operación de carga.
4. Después de cargar el archivo CSV modificado en la CPU, puede utilizar la instrucción
RecipeImport para transferir los nuevos valores de arranque del archivo CSV modificado
(en la memoria de carga de la CPU) en el DB de la receta (en la memoria de carga de la
CPU).

9.9.1.2 Ejemplo de receta

Recetas de ejemplo
En la tabla siguiente se muestra cómo preparar información de recetas para su uso en un
DB de receta. El DB de receta de ejemplo consta de cinco registros, de los cuales se utilizan
tres. El cuatro y quinto registro se dejan libres para ampliaciones posteriores. Cada fila de la
tabla representa un registro que almacena el nombre de receta, los tipos de datos de
componentes y los valores de los componentes.

productname water barley wheat hops yeast waterTmp mashTmp mashTime QTest
Pils 10 9 3 280 39 40 30 100 0
Lager 10 9 3 150 33 50 30 120 0
BlackBeer 10 9 3 410 47 60 30 90 1
Not_used 0 0 0 0 0 0 0 0 0
Not_used 0 0 0 0 0 0 0 0 0

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 507
Instrucciones avanzadas
9.9 Recetas y registros de datos

Creación de un bloque de datos de receta

Nota
Reglas para los bloques datos de receta
• El DB de receta debe contener una matriz de una sola dimensión de un tipo de datos de
PLC o una estructura. El ejemplo de receta muestra cómo crear un DB de receta con un
tipo de datos de PLC.
• En el ejemplo, el tipo de datos de los ingredientes de los componentes es para todos el
tipo de datos UINT. Los tipos de datos de componentes también pueden ser una
combinación de cualquier tipo de datos, excepto para estructuras. En un elemento de
matriz de DB de receta, no se permite una estructura en un tipo de datos de PLC o una
estructura.

En primer lugar, cree un nuevo tipo de datos de PLC


Añada un nuevo tipo de datos PLC cuyo nombre sea el tipo de receta. En la imagen
siguiente, "Beer_Recipe" es el nuevo tipo de datos de PLC complejo que almacena una
secuencia de tipos de datos simples. El tipo de datos de PLC "Beer_Recipe" es una plantilla
de datos que se reutiliza en cada registro de DB de receta y también en el DB de la receta
activa. Introduzca los nombres de componentes y los tipos de datos comunes a todas las
recetas de ejemplo. Los valores individuales de los componentes se añaden posteriormente
al DB de receta.

En segundo lugar, cree un bloque de datos de receta


● Cree su DB de receta como un bloque de datos global con la propiedad de DB
"Depositar solo en la memoria de carga" habilitada.
● El nombre de un bloque de datos de la receta se utiliza como nombre de archivo del
archivo CSV correspondiente. Los caracteres del nombre del DB que asigne deben
cumplir las restricciones referentes a los nombres del sistema de archivos de Windows.
Los caracteres \ / : * ? " < > | y el espacio no están permitidos.
● La asignación de la matriz de receta es "Products" como Array [1.. 5] of "Beer_Recipe".
El tamaño de matriz 5 es el número máximo posible de sabores de la receta.
● Los valores de los componentes de la receta se añaden como valores de arranque del
DB.

Controlador programable S7-1200


508 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

En la imagen siguiente, la receta "BlackBeer" se amplía para mostrar todos los


componentes de un registro de receta.

Exportación de recetas (del DB de receta al archivo CSV)


La ejecución de "RecipeExport (Página 511)" transfiere los datos del DB de receta a un
archivo CSV, como se muestra en el siguiente archivo de texto.

Recipe_DB.csv
index,productname,water,barley,wheat,hops,yeast,waterTmp,
mashTmp,mashTime,QTest
1,"Pils",10,9,3,280,39,40,30,100,0
2,"Lager",10,9,3,150,33,50,30,120,0
3,”BlackBeer”,10,9,3,410,47,60,30,90,1
4 "Not_used",0,0,0,0,0,0,0,0,0
5 "Not_used",0,0,0,0,0,0,0,0,0

Importación de recetas (del archivo CSV al DB de receta)


1. Utilice la página File Browser (Página 1055) en el servidor web para descargar en un PC
un archivo CSV de receta existente de la memoria de carga de la CPU.
2. Modifique el CSV de la receta con un editor de texto ASCII. Puede modificar los valores
de arranque asignados a los componentes, pero no los tipos de datos o la estructura de
datos.
3. Vuelva a cargar en la CPU el archivo CSV modificado del PC. Sin embargo, es necesario
borrar o cambiar el nombre del archivo CSV en la memoria de carga de la CPU (con el
mismo nombre) para que el servidor web permita la operación de carga.
4. Una vez que el archivo CSV modificado se ha cargado en la CPU, puede utilizar la
instrucción RecipeImport para transferir los nuevos valores de arranque del archivo CSV
modificado (en la memoria de carga de la CPU) al DB de la receta (en la memoria de
carga de la CPU).

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 509
Instrucciones avanzadas
9.9 Recetas y registros de datos

Los archivos CSV deben coincidir exactamente con la estructura del DB de receta correspondiente
● Los valores del archivo CSV pueden cambiarse, pero no se permite cambiar la
estructura. La instrucción RecipeImport requiere que el número exacto de registros y
componentes coincida con la estructura del DB de la receta de destino. De lo contrario,
la ejecución de RecipeImport fallará. Por ejemplo, si se definen 10 recetas en el DB de la
receta pero solo 6 están en uso, las líneas 7 a 10 del archivo CSV también se
transferirán al DB. Debe coordinar si estos datos serán válidos o no. Por ejemplo, puede
asignar una variable “Not_used” para el nombre del producto en registros de receta no
utilizados.
● Si añade registros de datos al archivo de texto e importa el archivo modificado,
asegúrese de que el límite de la matriz de DB de la receta que asigne tenga suficientes
elementos para todos los registros de la receta.
● Automáticamente se genera un número de índice durante la exportación al archivo CSV.
Si crea registros de datos adicionales, añada los números de índice consecutivos en
correspondencia.
● La ejecución de RecipeImport comprueba en los datos del archivo CSV que la estructura
sea correcta y que los valores se ajusten a los tipos de datos asignados en el DB de
receta asociado. Por ejemplo, un tipo de datos Bool no puede almacenar un valor entero,
por lo que la ejecución de RecipeImport fallará.

Mostrar datos de receta CSV en Excel


Para facilitar la lectura y edición, el archivo CSV se puede abrir en Excel. Si las comas no se
reconocen como separadores decimales, utilice la función de importación de Excel para
visualizar los datos de forma estructurada.

Nota
Comas en el campo de nombre del elemento del tipo de datos PLC
No ponga comas en el campo de nombre del o de los elemento(s) de tipo de datos PLC
utilizado(s) en una receta. Si se utilizan comas en el campo de nombre, Excel insertará
columnas adicionales en el archivo .csv visualizado. Estas columnas adicionales pueden
provocar errores a la hora de editar los valores iniciales del archivo de registro de receta.

Controlador programable S7-1200


510 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9.1.3 Instrucciones del programa que transfieren datos de receta

RecipeExport (exportación de receta)

Tabla 9- 194 Instrucción RecipeExport

KOP / FUP SCL Descripción


"RecipeExport_DB"( La instrucción "RecipeExport" exporta todos
req:=_bool_in_, los registros de receta de un bloque de datos
done=>_bool_out_, de receta al formato de archivo CSV. El
busy=>_bool_out_, archivo CSV contiene nombres del producto,
error=>_bool_out_, nombres de componente y valores de arran-
status=>_word_out_, que. El archivo se almacena en la memoria
de carga interna o la memoria de carga
Reci-
externa, si se ha instalado una Memory Card
pe_DB:=_variant_inout_);
de "programa" externa opcional.
El parámetro "REQ" dispara la operación de
exportación. El parámetro BUSY se pone a 1
durante el proceso de exportación. Después
de que se detenga la ejecución de Reci-
peExport, BUSY se pone a cero y la finaliza-
ción de la operación se indica con un "1" en
el parámetro DONE. Si se produce un error
durante la ejecución, los parámetros ERROR
y STATUS indican el resultado.

Debe crearse un DB de receta antes de que se pueda realizar la exportación de la receta. El


nombre de un bloque de datos de la receta se utiliza como nombre del nuevo archivo CSV.
Si existe un archivo CSV de nombre idéntico, se sobrescribirá durante la operación de
exportación.
Puede utilizar la página File Browser (Página 1055) del servidor web incorporado de la CPU
para acceder al archivo CSV de la receta. El archivo se coloca en la carpeta de la receta, en
el directorio raíz de la memoria de carga de la CPU.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 511
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 195 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Parámetro de control REQUEST: Activa la exportación cuando hay
un flanco ascendente.
RECIPE_DB In/Out Variant Puntero al bloque de datos de receta. Para obtener más informa-
ción, véase "Ejemplo de DB de receta" (Página 507). Los caracteres
del nombre de DB deben cumplir las restricciones referentes a los
nombres del sistema de archivos de Windows. Los caracteres \ / : *
? " < > | y el espacio no están permitidos.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la
última petición sin errores. (Valor predeterminado: False)
BUSY OUT Bool Ejecución de RecipeExport
• 0: Ninguna operación en curso
• 1: Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la
última petición con un error. El valor del código de error en el pará-
metro STATUS solo es válido durante un único ciclo en que ERROR
= TRUE.
• 0: Ningún aviso o error
• 1: Se ha producido un error. El parámetro STATUS ofrece infor-
mación detallada sobre el tipo de error.
STATUS OUT Word Código de condición de ejecución

Tabla 9- 196 Valores de ERROR y STATUS

ERROR STATUS Descripción


(W#16#....)
0 0000 No hay error
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia.
1 8090 El nombre de archivo contiene caracteres no válidos.
1 8091 La estructura de datos a la que hace referencia RECIPE_DB no puede procesarse.
1 8092 La estructura de datos especificada en RECIPE_DB supera los 5000 bytes
1 80B3 No hay suficiente espacio en el MC o en la memoria de carga interna.
1 80B4 El MC está protegido contra escritura
1 80B6 El atributo de DB de receta "Depositar solo en la memoria de carga" no está habilita-
do.
1 80C0 El archivo CSV está temporalmente bloqueado.
1 80C1 El DB está temporalmente bloqueado.

Controlador programable S7-1200


512 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

RecipeImport (importación de receta)

Tabla 9- 197 Instrucción RecipeImport

KOP / FUP SCL Descripción


"RecipeImport_DB"( La instrucción "RecipeImport" impor-
req:=_bool_in_, ta los datos de receta de un archivo
done=>_bool_out_, CSV de la memoria de carga de la
busy=>_bool_out_, CPU en un bloque de datos referen-
error=>_bool_out_, ciado por el parámetro RECIPE_DB.
status=>_word_out_, El proceso de importación sobres-
cribe los valores de arranque del
Reci-
bloque de datos de la receta. El
pe_DB:=_variant_inout_);
parámetro "REQ" dispara la opera-
ción de importación. El parámetro
BUSY se pone a 1 durante el proce-
so de importación. Después de que
se detenga la ejecución de Recipe-
Import, BUSY se pone a cero y la
finalización de la operación se indica
con un "1" en el parámetro DONE.
Si se produce un error durante la
ejecución, los parámetros ERROR y
STATUS indican el resultado.

Tabla 9- 198 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Parámetro de control REQUEST: Activa la importación cuando hay un
flanco ascendente.
RECIPE_DB In/Out Variant Puntero al bloque de datos de receta. Para obtener más información,
véase "Ejemplo de DB de receta" (Página 507). Los caracteres del
nombre de DB deben cumplir las restricciones referentes a los nom-
bres del sistema de archivos de Windows. Los caracteres \ / : * ? " < >
| y el espacio no están permitidos.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la últi-
ma petición sin errores. (Valor predeterminado: False)
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la
última petición con un error. El valor del código de error en el paráme-
tro STATUS solo es válido durante un único ciclo en que ERROR =
TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

Para que una operación de importación de receta sea posible, debe existir un DB de receta
que contenga una estructura coherente con la estructura de datos del archivo CSV.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 513
Instrucciones avanzadas
9.9 Recetas y registros de datos

Reglas de archivo CSV:


● El archivo CSV debe encontrarse en la carpeta "Recipes" del directorio raíz de la
memoria de carga interna o la memoria de carga externa, si se ha instalado una Memory
Card de "programa" externa opcional.
● El nombre del archivo CSV debe coincidir con el nombre del bloque de datos en el
parámetro RECIPE_DB.
● La primera línea (encabezado) del archivo CSV contiene el nombre de los componentes
de receta. La primera línea se ignora durante la importación. Los nombres de los
componentes de receta del archivo CSV y el bloque de datos no se concilian durante el
proceso de importación.
● En cada caso el primer valor de cada línea del archivo CSV es el número de índice de la
receta. Las recetas individuales se importan según el orden del índice. Para ello, el
índice del archivo CSV debe presentar un orden ascendente y no debe haber espacios
en blanco (si este no es el caso, se obtiene el mensaje de error 80B0 en el parámetro
STATUS).
● El archivo CSV no puede contener más datos de receta de los que se ha suministrado en
el bloque de datos de receta. El número máximo de registros se indica mediante los
límites de matriz en el bloque de datos.

Tabla 9- 199 Valores de ERROR y STATUS

ERROR STATUS Descripción


(W#16#....)
0 0000 No hay error
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia.
1 8090 El nombre de archivo contiene caracteres no válidos.
1 8092 No se ha encontrado ningún archivo CSV coincidente para la importación. Causa
posible: El nombre del archivo CSV no coincide con el nombre del DB de receta.
1 80C0 El archivo CSV está temporalmente bloqueado.
1 80C1 El bloque de datos está temporalmente bloqueado.
1 80B0 La numeración del índice del archivo CSV no es continua, no es ascendente o excede
el número máximo (límite de matriz) del bloque de datos.
1 80B1 La estructura del bloque de datos de receta y el archivo CSV no coinciden: El archivo
CSV contiene demasiados campos.
1 80B2 La estructura del bloque de datos de receta y el archivo CSV no coinciden: El archivo
CSV contiene no contiene suficientes campos.
1 80B6 El atributo de DB de receta "Depositar solo en la memoria de carga" no está habilita-
do.
1 80D0 +n La estructura del bloque de datos de receta y el archivo CSV no coinciden: El tipo de
datos en el campo n no coincide (n<=46).
1 80FF La estructura del bloque de datos de receta y el archivo CSV no coinciden: El tipo de
datos en el campo n no coincide (n>46).

Controlador programable S7-1200


514 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9.1.4 Programa de ejemplo de receta

Requisitos para el programa de ejemplo de receta


Los requisitos del programa de ejemplo de receta son los siguientes:
● Un DB de receta que almacena todos los registros de receta. El DB de receta se
almacena en la memoria de carga.
● Un DB de receta activa que almacena una copia de una receta en la memoria de trabajo.
Véase "Ejemplo de DB de receta (Página 507)" para obtener más información sobre el DB
de receta y el archivo CSV correspondiente.

Creación del DB de receta activa


En la ventana "Agregar nuevo bloque":
● Seleccione el botón "Bloque de datos" en la ventana "Agregar nuevo bloque".
● En el menú desplegable "Tipo", seleccione el tipo de datos de PLC "Beer_recipe" que ha
creado anteriormente.
Los valores de arranque no son necesarios. Los valores de datos de DB se establecen
cuando se transfiere una receta del DB de receta al DB de receta activa. En el ejemplo, el
DB de receta activa es el destino para los datos READ_DBL y proporciona los datos de
origen para WRITE_DBL. En la imagen siguiente se muestra el DB Active_Recipe.

DB de instancia
Los DB de instancia que utilizan las instrucciones RecipeExport ("RecipeExport_DB") y
RecipeImport ("RecipeImport_DB") se crean automáticamente al colocar las instrucciones
en el programa. Los DB de instancia se utilizan para controlar la ejecución de las
instrucciones y no están referenciados en la lógica del programa.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 515
Instrucciones avanzadas
9.9 Recetas y registros de datos

Programa de ejemplo de receta


Segmento 1 Un flanco ascendente en REQ inicia el proceso de exportación. Se genera un
archivo CSV a partir de los datos del DB de receta y se colocan en la carpeta de recetas de
memoria de la CPU.

Segmento 2Capturar la salida STATUS de la ejecución de RecipeExport porque solo es


válida durante un ciclo.

Segmento 3 Un flanco ascendente en REQ inicia el proceso de importación. El DB de la


receta existente se carga con todos los datos de la receta del archivo CSV correspondiente
ubicado en la carpeta de recetas de la memoria de la CPU.

Segmento 4 Capturar la salida STATUS de la ejecución de RecipeExport porque solo es


válida durante un ciclo.

Controlador programable S7-1200


516 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Segmento 5 READ_DBL copia los valores de arranque de una receta "Recipe_DB".


Productos[1] (en la memoria de carga de la CPU) en los valores actuales del DB
Active_Recipe (en la memoria de trabajo de la CPU). Después de la ejecución de
READ_DBL, la lógica del programa puede acceder a los valores de los componentes de la
receta direccionando las ubicaciones del DB Active_Recipe. Por ejemplo, las direcciones
simbólicas ("Active_Recipe".productname) y ("Active_Recipe.water) proporcionan a su lógica
de programa el nombre de la receta actual y la cantidad de agua.

Segmento 6 Durante el tiempo de ejecución, un dispositivo HMI puede modificar un valor de


componente almacenado en DB Active_Recipe. Los datos mejorados de la receta pueden
almacenarse ejecutando WRIT_DBL. En el ejemplo, todos los valores de arranque de
Recipe_DB para la receta individual "Recipe_DB". Los productos[1] se sobrescriben con los
valores actuales del DB "Active_Recipe".

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 517
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9.2 Registros
El programa de control puede usar las instrucciones Data log para almacenar valores de
datos de runtime en archivos de registro permanentes. La CPU guarda los archivos de
registro en la memoria flash (CPU o Memory Card) en formato estándar CSV (Comma
Separated Value). La CPU organiza los registros como un archivo de registro circular con un
tamaño predeterminado.
Las instrucciones Data log del programa se utilizan para crear, abrir, escribir un registro y
cerrar los archivos de registro. Para decidir qué valores de programa deben registrarse se
crea un búfer de datos que define un solo registro. La CPU utiliza el búfer de datos como
almacenamiento temporal para un nuevo registro. El programa de control mueve los valores
actuales nuevos al búfer durante la ejecución. Una vez el programa ha actualizado todos los
valores de datos actuales, puede ejecutar la instrucción DataLogWrite para transferir datos
del búfer a un registro de datos.
Los archivos de registro se pueden abrir, editar, renombrar y borrar desde la página del
explorador de archivos del servidor web. Se deben tener derechos de lectura para ver el
explorador de archivos y derechos de modificación para editar, borrar o cambiar el nombre
de los archivos de registro.

9.9.2.1 Estructura del registro


Los parámetros DATA y HEADER de la instrucción DataLogCreate asignan el tipo de datos
y la descripción de encabezado de columna para todos los datos de un registro.

Parámetro DATA para la instrucción DataLogCreate


El parámetro DATA apunta a la memoria utilizada como búfer temporal para un nuevo
registro y debe asignarse a una ubicación M o DB.
Es posible asignar un DB completo (derivado de un tipo de datos PLC que se asigna al
crear el DB) o parte de un DB (el elemento especificado del DB puede ser cualquier tipo de
datos, estructura de tipo de datos, tipo de datos PLC o matriz de datos).
Los tipos de datos de estructura están limitados a un solo nivel de anidamiento. El número
total de elementos de datos declarados debe coincidir con el número de columnas
especificado en el parámetro de encabezado. El número máximo de elementos de datos
que pueden asignarse es de 253 (con sello de tiempo) o de 255 (sin sello de tiempo). Esta
restricción mantiene el registro dentro del límite de 256 columnas de una hoja de Excel.
El parámetro DATA puede asignar elementos de datos remanentes o no remanentes en un
tipo de DB "estándar" (compatible con S7-300/400) u "optimizado".
Para escribir un registro, primero hay que cargar el registro DATA temporal con nuevos
valores de proceso y, a continuación, ejecutar la instrucción DataLogWrite, que guarda
nuevos valores de registro en el archivo de registro.

Controlador programable S7-1200


518 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Parámetro HEADER de la instrucción DataLogCreate


El parámetro HEADER apunta a nombres de encabezado de columna para la fila superior
de la matriz de datos encriptada en el archivo CSV. Los datos HEADER deben estar
ubicados en una memoria DB o M y los caracteres deben cumplir las normas estándar del
formato CSV, con comas como carácter de separación entre columnas. El tipo de datos
puede ser una secuencia, una matriz de bytes o una matriz de caracteres. Las matrices de
caracteres/bytes permiten un tamaño mayor, mientras que las secuencias están limitadas a
un máximo de 255 bytes. El parámetro HEADER es opcional. Si HEADER no está asignado,
no se crea ninguna fila de encabezado en el archivo de registro.

9.9.2.2 Instrucciones de programa que controlan registros

DataLogCreate (crear Data Log)

Tabla 9- 200 Instrucción DataLogCreate

KOP / FUP SCL Descripción


"DataLogCreate_DB"( Crea e inicializa un archivo de registro. La CPU
req:=_bool_in_, crea el archivo en la carpeta \DataLogs con el
records:=_udint_in_, nombre definido en el parámetro NAME y abre
format:=_uint_in_, implícitamente el archivo para operaciones de
timestamp:=_uint_in_, escritura. Las instrucciones Data log pueden
done=>_bool_out_, utilizarse en el programa para almacenar en
tiempo de ejecución datos de proceso en la
busy=>_bool_out_,
memoria flash de la CPU o en la Memory Card.
error=>_bool_out_,
status=>_word_out_, STEP 7 crea automáticamente el DB de instan-
cia asociado al introducir la instrucción.
name:=_string_inout_,
ID:=_dword_inout_,
header:=_variant_inout_,
data:=_variant_inout_);
1 En el ejemplo SCL, "DataLogCreate_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 519
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 201 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Un cambio de señal low a high (flanco ascendente) lan-
za la operación. (Valor predeterminado: False)
RECORDS IN UDint Número máximo de registros que puede contener el
registro circular antes de sobrescribir la entrada más
antigua:
No se incluye el registro de encabezado. Debe haber
suficiente memoria de carga disponible en el PLC para
poder crear el registro correctamente. (Valor predetermi-
nado: 1)
FORMAT IN UInt Formato del registro:
• 0 - Formato interno (no soportado)
• 1 - Valores separados por coma "csv-eng" (valor
predeterminado)
TIMESTAMP IN UInt Formato del sello horario: Los encabezados de columna
de los campos de fecha y hora son opcionales. El sello
de tiempo puede utilizar la hora del sistema (tiempo
universal coordinado, UTC) o la hora local.
• 0 - Sin sello de tiempo
• 1 - Sello de tiempo, hora del sistema (valor prede-
terminado)
• 2 - Sello de tiempo, hora local
NAME IN Variant Nombre del registro: El nombre lo especifica el usuario.
Esta variante solo soporta un tipo de datos String y debe
estar ubicada en un DB o una memoria local. (Valor
predeterminado: ' ')
La referencia del string es el nombre del archivo de
registro. Utilice los caracteres del juego de caracteres
ASCII, exceptuando los caracteres \ / : * ? " < > | y el
espacio.
ID In/Out DWord Identificador numérico del registro: Este valor generado
se guarda para el uso en otras instrucciones de regis-
tros. El parámetro ID solo se utiliza como salida en la
instrucción DataLogCreate. (Valor predeterminado: 0)
El acceso a este parámetro por nombre simbólico no
está permitido.

Controlador programable S7-1200


520 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Parámetro y tipo Tipo de datos Descripción


HEADER In/Out Variant Puntero a nombres de encabezados de columnas de
registros para la fila superior de la matriz de datos cifra-
da en el archivo CSV. (Valor predeterminado: cero).
Los datos HEADER deben estar ubicados en una me-
moria DB o M.
Los caracteres deben cumplir las normas del formato
CSV estándar, con comas como carácter de separación
entre los nombres de las columnas. El tipo de datos
puede ser una secuencia, una matriz de bytes o una
matriz de caracteres. Las matrices de caracteres/bytes
permiten un tamaño mayor, mientras que las secuencias
están limitadas a un máximo de 255 bytes.
El parámetro HEADER es opcional. Si HEADER no está
parametrizado, no se crea ninguna fila de encabezado
en el archivo de registro.
DATA In/Out Variant Puntero a la estructura de registro, tipo definido por el
usuario (UDT) o matriz. Los datos de registro deben
estar ubicados en una memoria DB o M.
El parámetro DATA especifica los elementos de datos
individuales (columnas) de un registro, así como su tipo.
Los tipos de datos de estructura están limitados a un
solo nivel de anidamiento. El número de elementos de
datos declarados debe coincidir con el número de co-
lumnas especificado en el parámetro de encabezado. El
número máximo de elementos de datos que pueden
asignarse es de 253 (con sello de tiempo) o de 255 (sin
sello de tiempo). Esta restricción mantiene el registro
dentro del límite de 256 columnas de una hoja de Excel.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse
finalizado la última orden sin errores. (Valor predetermi-
nado: False)
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse
finalizado la última orden con un error. El valor del códi-
go de error en el parámetro STATUS solo es válido
durante un único ciclo en que ERROR = TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado:
0)

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 521
Instrucciones avanzadas
9.9 Recetas y registros de datos

La CPU crea un archivo de registro con un tamaño fijo predeterminado basado en los
parámetros RECORDS y DATA y organiza los registros como un archivo de registro circular.
La instrucción DataLogCreate asigna memoria remanente de la CPU para todo el registro de
datos cuando la instrucción devuelve DONE = TRUE. La memoria requerida en la CPU es
mayor que el tamaño del archivo debido a la administración del sistema de archivos y de los
valores relacionados. La memoria permanente para el registro de datos permanece
asignada hasta que la CPU anula la asignación de una de las siguientes maneras:
● El programa de usuario llama la instrucción DataLogDelete
● Un usuario del servidor web borra el registro de datos del servidor web
● Un usuario de la SIMATIC Automation Tool borra el registro de datos de la SIMATIC
Automation Tool
Otra manera de borrar el archivo de registro, como p. ej. con un lector de tarjetas, no anula
la asignación de la memoria permanente de la CPU para el registro.
La instrucción DataLogWrite agrega registros nuevos al archivo de registro hasta que este
contenga el número máximo de registros especificado en el parámetro RECORDS. El
siguiente registro que se escriba sobrescribirá el registro más antiguo. Una operación
DataLogWrite adicional sobrescribirá el siguiente registro más antiguo, y así sucesivamente.
Uso de los recursos de memoria:
● Los registros solo consumen memoria de carga.
● El tamaño de todos los registros combinados está limitado por los recursos de memoria
de carga disponibles. Solo se pueden abrir ocho registros a la vez. Los registros de datos
se administran desde la página web estándar del File Browser (Página 1055). En la
descripción de esta página web estándar encontrará información acerca de cuántos
registros de datos pueden administrarse al mismo tiempo.
● El número máximo posible para el parámetro RECORDS es el límite correspondiente a
un número UDint (4.294.967.295). El límite actual del parámetro RECORD depende del
tamaño de un solo registro, el tamaño de otros registros y los recursos de memoria de
carga disponibles. Además, Excel limita el número de filas permitidas en una hoja.

Controlador programable S7-1200


522 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Nota
La creación del registro debe haber finalizado antes de empezar una operación de escritura
de registro.
• Las operaciones de creación de archivos de registro DataLogCreate y DataLogNewFile
se extienden a lo largo de varios ciclos. El tiempo real requerido para la creación de un
archivo de registro depende de la estructura y del número de registros. La lógica del
programa debe observar y detectar la transición del bit DONE al estado TRUE, que
indica que ha finalizado la creación del archivo de registro. Si el programa de usuario
ejecuta una instrucción DataLogWrite antes de finalizar una operación de creación de
registro, la operación de escritura no podrá escribir un registro nuevo tal como se ha
previsto.
• En determinadas situaciones, cuando se está ejecutando un ciclo muy rápido del
programa, la creación de un registro puede requerir más tiempo. Si el tiempo de creación
es demasiado lento, hay que asegurarse de que la casilla de verificación Habilitar tiempo
de ciclo mínimo para OBs cíclicos está activada, y de que el tiempo de ciclo mínimo se
ha ajustado a un ms o más. Para más información, consulte Configuración del tiempo de
ciclo y de la carga de comunicación (Página 111).

Nota
La instrucción DataLogNewFile copia una estructura de registro existente.
Para impedir la sobrescritura de registros antiguos se puede utilizar la instrucción
DataLogNewFile para crear un registro nuevo basado en el actual, una vez que este ha
guardado el número máximo de registros. Los nuevos registros se guardan en el nuevo
archivo de registro. El archivo de registro antiguo y los datos de registro se almacenan en la
memoria flash.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 523
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 202 Valores de ERROR y STATUS

ERROR STATUS Descripción


(W#16#....)
0 0000 No hay error
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia interna.
1 807F Error interno
1 8090 Nombre de archivo no válido
1 8091 El parámetro de nombre no es una referencia de String.
1 8093 Ya existe un registro con ese nombre. Utilice otro nombre, asegúrese de que el archi-
vo .csv existente para el registro no está abierto y utilice la página File Browser (Pági-
na 1055) del servidor web para borrar el registro existente.
1 8097 La longitud de archivo solicitada supera el máximo del sistema de archivos.
1 80B2 ID fuera de recurso
Nota: borre algunos registros o reduzca el número de columnas en la estructura de
registros con el fin de evitar este error.
1 80B3 La memoria de carga disponible no es suficiente.
1 80B4 La MC (Memory Card) está protegida contra escritura.
1 80C0 El archivo comprimido está bloqueado
1 80C1 Demasiados archivos abiertos: no se permiten más de ocho archivos de registro
abiertos.
1 8253 Contaje de registros no válido
1 8353 La selección de formato no es válida
1 8453 La selección de sello no es válida
1 8B24 Asignación no válida del área HEADER: por ejemplo, apuntar a la memoria local
1 8B51 El tipo de datos del parámetro HEADER no es válido
1 8B52 Hay demasiados elementos de datos en el parámetro HEADER
1 8C24 Asignación no válida del área DATA: por ejemplo, apuntar a la memoria local
1 8C51 El tipo de datos del parámetro DATA no es válido
1 8C52 Hay demasiados elementos de datos en el parámetro DATA

Controlador programable S7-1200


524 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

DataLogOpen (abrir Data Log)

Tabla 9- 203 Instrucción DataLogOpen

KOP / FUP SCL Descripción


"DataLogOpen_DB"( Abre un archivo de registro ya existente. Es necesario abrir un
req:=_bool_in_, registro antes de poder escribir (Página 527) registros nuevos en
mode:=_uint_in_, él. Los registros pueden abrirse y cerrarse individualmente. Es
done=>_bool_out_, posible abrir simultáneamente un máximo de ocho registros de
busy=>_bool_out_, datos.
error=>_bool_out_, STEP 7 crea automáticamente el DB de instancia asociado al in-
status=>_word_out_, troducir la instrucción.
name:=_string_inout_,
ID:=_dword_inout_);
2 En el ejemplo SCL, "DataLogOpen_DB" es el nombre del DB de instancia.

Tabla 9- 204 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Un cambio de señal low a high (flanco ascendente) lanza la opera-
ción. (Valor predeterminado: False)
MODE IN UInt Modo de operación:
• 0 - Agregar a los datos existentes (valor predeterminado)
• 1 - Borrar todos los registros existentes
NAME IN Variant Nombre de un registro existente: esta variante solo soporta un tipo
de datos String y solo puede ubicarse en una memoria local, DB o
M. (Valor predeterminado: ' ')
ID In/Out DWord Identificador numérico de un registro. (Valor predeterminado: 0)
Nota: el acceso a este parámetro por nombre simbólico no está
permitido.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la
última petición sin errores. (Valor predeterminado: False)
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la
última petición con un error. El valor del código de error en el pa-
rámetro STATUS solo es válido durante un único ciclo en que
ERROR = TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

Se puede proporcionar el parámetro NAME o un parámetro ID (ID en forma de entrada) de


un registro ya existente. Si se suministran ambos parámetros y una ID válida se
corresponde con en registro NAME, se usa la ID y NAME se ignora.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 525
Instrucciones avanzadas
9.9 Recetas y registros de datos

NAME debe ser el nombre de un registro creado por la instrucción DataLogCreate. Si solo
se proporciona NAME y NAME especifica un registro válido, se devolverá la ID
correspondiente (parámetro ID como salida).

Nota
Uso general de los archivos de registro
• Los archivos de registro se abren automáticamente después de las operaciones
DataLogCreate y DataLogNewFile.
• Los archivos de registro se cierran automáticamente después de una transición de RUN
a STOP del PLC o de una desconexión y conexión del PLC.
• Debe haber un archivo de registro abierto antes de que sea posible otra operación
DataLogWrite.
• Puede haber un máximo de ocho archivos de registro abiertos a la vez. Si bien pueden
existir más de ocho archivos de registro, algunos de ellos deben estar cerrados para que
no haya más de ocho abiertos.

Tabla 9- 205 Valores de ERROR y STATUS

ERROR STATUS (W#16#) Descripción


0 0000 No hay error
0 0002 Advertencia: el archivo de registro ya está abierto en este programa de
aplicación
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia interna.
1 8090 La definición del registro no es coherente con el archivo de registro exis-
tente.
1 8091 El parámetro de nombre no es una referencia de String.
1 8092 El registro no existe.
1 80C0 El archivo de registro está bloqueado.
1 80C1 Demasiados archivos abiertos: no se permiten más de ocho archivos de
registro abiertos.

Controlador programable S7-1200


526 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

DataLogWrite (escribir Data Log)

Tabla 9- 206 Instrucción DataLogWrite

KOP / FUP SCL Descripción


"DataLogWrite_DB"( Escribe un registro en el registro especificado. El registro de destino
req:=_bool_in_, previo debe estar abierto (Página 525) antes de poder escribir en él con
done=>_bool_out_, una instrucción DataLogWrite.
busy=>_bool_out_, STEP 7 crea automáticamente el DB de instancia asociado al introducir
error=>_bool_out_, la instrucción.
status=>_word_out_,
ID:=_dword_inout_);

2 En el ejemplo SCL, "DataLogWrite_DB" es el nombre del DB de instancia.

Tabla 9- 207 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Un cambio de señal low a high (flanco ascendente) lanza la operación.
(Valor predeterminado: False)
ID In/Out DWord Identificador numérico de registro. Solo se utiliza como entrada para la
instrucción DataLogWrite. (Valor predeterminado: 0)
Nota: el acceso a este parámetro por nombre simbólico no está permi-
tido.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la última
petición sin errores.
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la últi-
ma petición con un error. El valor del código de error en el parámetro
STATUS solo es válido durante un único ciclo en que ERROR = TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

El parámetro DATA de una instrucción DataLogCreate define la dirección de memoria y la


estructura de datos del búfer de registro. El programa de control debe cargar el búfer de
registro con valores de proceso actuales de runtime y, a continuación, ejecutar la instrucción
DataLogWrite para desplazar los nuevos datos de registro del búfer al registro.
El parámetro ID identifica un registro y una configuración de registro. La instrucción
DataLogCreate genera el número de ID.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 527
Instrucciones avanzadas
9.9 Recetas y registros de datos

Si hay registros vacíos en el archivo de registro circular, la instrucción DataLogWrite escribe


el siguiente registro vacío disponible. Si todos los registros están llenos, la instrucción
DataLogWrite sobrescribe el registro más antiguo.

ATENCIÓN
Las operaciones de creación de registro deben finalizarse antes empezar una operación
de escritura de registro.
Las operaciones de creación de archivos de registro DataLogCreate y DataLogNewFile se
extienden a lo largo de varios ciclos. El tiempo real requerido para la creación de un
archivo de registro depende de la estructura y del número de registros. La lógica de
programa debe observar y capturar la transición del bit DONE al estado TRUE, que indica
que ha finalizado la creación del archivo de registro. Si se ejecuta una instrucción
DataLogWrite antes de finalizar una operación de creación de registro, la operación de
escritura no podrá escribir un registro nuevo.

Nota
Efecto de los registros en la memoria interna de la CPU
Cada escritura en el registro consume como mínimo 2 KB de memoria. Si el programa
escribe pequeñas cantidades de datos con frecuencia, consume al menos 2 KB de memoria
en cada escritura. Sería mejor acumular los pequeños elementos de datos en un bloque de
datos (DB) y escribir el bloque de datos en el registro en intervalos menos frecuentes.
Si el programa escribe muchas entradas en el registro con mucha frecuencia, es
aconsejable utilizar una tarjeta de memoria SD extraíble.

ATENCIÓN
Potencial de pérdida de datos de registros durante un fallo de alimentación de la CPU
Si se produce un fallo de alimentación durante una operación DataLogWrite incompleta, se
podría perder el registro que se estuviera transfiriendo al registro.

Tabla 9- 208 Valores de ERROR y STATUS

ERROR STATUS (W#16#) Descripción


0 0000 No hay error
0 0001 Indica que el registro está lleno: Cada registro se crea con un número máximo
específico de registros. Se ha escrito el último registro del número máximo. La
siguiente tarea de escritura sobrescribirá el registro más antiguo.
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia interna.
1 8092 El registro no existe.
1 80B0 El archivo de registro no está abierto (solo para modo de abertura explícita).

Controlador programable S7-1200


528 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

DataLogClear (vaciar Data Log)

Descripción

Tabla 9- 209 Instrucción DataLogClear

KOP / FUP SCL Descripción


"DataLogClear_DB"( La instrucción "DataLogClear" borra todos los
REQ:=_bool_in_, registros de un archivo de registro existente. La
DONE=>_bool_out_, instrucción no borra el encabezado opcional del
BUSY=>_bool_out_, archivo CSV (consulte la descripción del paráme-
ERROR=>_bool_out_, tro HEADER de la instrucción "DataLogCreate
(Página 519)").
STATUS=>_word_out_, Utilice el parámetro ID para seleccionar el archivo
cuyos registros deben borrarse.
ID:=_dword_inout_);
"DataLogClear_DB" es el nombre del DB de instancia.

Requisitos
Antes de poder borrar registros, el archivo de registro debe estar abierto (consulte la
instrucción "DataLogOpen (Página 525)").

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "DataLogClear":

Parámetro Declaración Tipo de datos Área de memoria Descripción


REQ Input BOOL I, Q, M, L, D, T, C o Ejecución de la instrucción con un flanco
constante ascendente.
(T y C solo están
disponibles en KOP
y FUP con S7-1500)
ID InOut DWORD I, Q, M, D, L Identificador numérico de registro
DONE Output BOOL I, Q, M, D, L La instrucción se ha ejecutado correctamen-
te.
BUSY Output BOOL I, Q, M, D, L Ejecución de la instrucción no terminada aún.
ERROR Output BOOL I, Q, M, D, L • 0: Sin errores.
• 1: Se ha producido un error al ejecutar la
instrucción.
La información detallada se genera en el
parámetro STATUS.
STATUS Output WORD I, Q, M, D, L Parámetro de estado
El parámetro solo está activado mientras dura
una llamada. Para mostrar el estado debe
copiar el parámetro STATUS en un área de
datos libre.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 529
Instrucciones avanzadas
9.9 Recetas y registros de datos

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Parámetro STATUS

Código de Explicación
error*
(W#16#...)
0000 Sin errores.
7000 No se está procesando ninguna tarea.
7001 Comienza el procesamiento de la tarea. Parámetro BUSY = 1, DONE = 0
7002 Llamada intermedia (REQ irrelevante): Instrucción ya activa; BUSY tiene el valor "1".
8080 El archivo de registro seleccionado con el parámetro ID no puede procesarse con la instrucción "DataLo-
gClear".
8092 El registro no existe.
80A2 Error de escritura notificado por el sistema de archivos.
80B0 El archivo de registro no está abierto.
80B4 La Memory Card está protegida contra escritura.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas. Encontrará
información sobre cómo cambiar los formatos de visualización en "Consulte también".

DataLogClose (cerrar Data Log)

Tabla 9- 210 Instrucción DataLogClose

KOP / FUP SCL Descripción


"DataLogClose_DB"( Cierra un archivo de registro abierto. Las operaciones
req:=_bool_in_, DataLogWrite sobre un registro cerrado producen un
done=>_bool_out_, error. No se permite realizar operaciones de escritura en
busy=>_bool_out_, este registro hasta que no se lleve a cabo otra operación
error=>_bool_out_, DataLogOpen.
status=>_word_out_, La transición al modo STOP cierra todos los archivos de
ID:=_dword_inout_); registro abiertos.
STEP 7 crea automáticamente el DB de instancia aso-
ciado al introducir la instrucción.
2 En el ejemplo SCL, "DataLogClose_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


530 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 211 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Un cambio de señal low a high (flanco ascendente) lanza la operación. (Valor
predeterminado: False)
ID In/Out DWord Identificador numérico de un registro. Solo se utiliza como entrada para la
instrucción DataLogClose. (Valor predeterminado: 0)
Nota: el acceso a este parámetro por nombre simbólico no está permitido.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la última peti-
ción sin errores.
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la última peti-
ción con un error. El valor del código de error en el parámetro STATUS solo
es válido durante un único ciclo en que ERROR = TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

Tabla 9- 212 Valores de ERROR y STATUS

ERROR STATUS (W#16#) Descripción


0 0000 No hay error
0 0001 El registro no se ha abierto
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8092 El registro no existe.

DataLogDelete (borrar Data Log)

Tabla 9- 213 Instrucción DataLogDelete

KOP / FUP SCL Descripción


"DataLogDelete_DB"( La instrucción "DataLogDelete" se utiliza para
REQ:=_bool_in_, borrar un archivo de registro. El archivo y los
NAME:=_variant_in_, registros que contiene solo pueden borrarse si se
DelFile:=_bool_in_, crearon con la instrucción "DataLogCreate" o
DONE=>_bool_out_, "DataLogNewFile".
BUSY=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
ID:=_dword_inout_);

"DataLogDelete_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 531
Instrucciones avanzadas
9.9 Recetas y registros de datos

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "DataLogDelete":

Parámetro Declaración Tipo de datos Área de memoria Descripción


REQ Input BOOL I, Q, M, L, D, T, C o Ejecución de la instrucción con un flanco
constante ascendente.
(T y C solo están
disponibles en KOP
y FUP con S7-1500)
NAME Input VARIANT L, D Nombre del archivo de registro
DELFILE Input BOOL I, Q, M, D, L o cons- • 0: El archivo de registro se conserva.
tante
• 1: El archivo de registro se borra.
ID InOut DWORD I, Q, M, D, L Identificador numérico de registro
DONE Output BOOL I, Q, M, D, L La instrucción se ha ejecutado correctamen-
te.
BUSY Output BOOL I, Q, M, D, L El borrado del archivo de registro no ha finali-
zado aún.
ERROR Output BOOL I, Q, M, D, L • 0: Sin errores.
• 1: Se ha producido un error al ejecutar la
instrucción.
La información detallada se genera en el
parámetro STATUS.
STATUS Output WORD I, Q, M, D, L Parámetro de estado
El parámetro solo está activado mientras dura
una llamada. Para mostrar el estado debe
copiar el parámetro STATUS en un área de
datos libre.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Parámetros NAME e ID
Seleccione el registro que debe borrarse mediante los parámetros NAME e ID. El parámetro
ID se evalúa en primer lugar. Si hay un registro con la ID relevante, el parámetro NAME no
se evaluará. Si el valor "0" se utiliza en el parámetro ID, debe utilizarse un valor con el tipo
de datos STRING en el parámetro NAME.

Controlador programable S7-1200


532 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Parámetro RET_VAL

Código de Explicación
error*
(W#16#...)
0 Sin errores.
7000 No se está procesando ninguna tarea.
7001 Comienza el procesamiento de la tarea. Parámetro BUSY = 1, DONE = 0
7002 Llamada intermedia (REQ irrelevante): Instrucción ya activa; BUSY tiene el valor "1".
8091 Se está utilizando un tipo de datos distinto de STRING en el parámetro NAME.
8092 El registro no existe.
80A2 Error de escritura notificado por el sistema de archivos.
80B4 La Memory Card está protegida contra escritura.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas. Encontrará
información sobre cómo cambiar los formatos de visualización en "Consulte también".

DataLogNewFile (Data Log en archivo nuevo)

Tabla 9- 214 Instrucción DataLogNewFile

KOP / FUP SCL Descripción


"DataLogNewFile_DB"( Permite al programa crear un archivo de
req:=_bool_in_, registro nuevo basándose en otro ya existen-
records=:_udint_in_, te.
done=>_bool_out_, STEP 7 crea automáticamente el DB de
busy=>_bool_out_, instancia asociado al introducir la instruc-
error=>_bool_out_, ción.
status=>_word_out_,
name=:_DataLog_out_,
ID:=_dword_inout_);
2 En el ejemplo SCL, "DataLogNewFile_DB" es el nombre del DB de instancia.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 533
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 215 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN Bool Un cambio de señal low a high (flanco ascendente) lanza la operación.
(Valor predeterminado: False)
RECORDS IN UDInt El número máximo de registros que puede contener el registro circular an-
tes de sobrescribir la entrada más antigua. (Valor predeterminado: 1)
No se incluye el registro de encabezado. Debe haber suficiente memoria de
carga disponible en la CPU para poder crear el registro correctamente.
NAME IN Variant Nombre del registro: El nombre lo especifica el usuario. Esta variante solo
soporta un tipo de datos String y solo puede ubicarse en una memoria local,
DB o M. (Valor predeterminado: ' ')
La referencia del string también se utiliza como nombre del archivo de re-
gistro. Los caracteres del nombre deben cumplir las restricciones referentes
a los nombres del sistema de archivos de Windows. Los caracteres \ / : * ? "
< > | y el espacio no están permitidos.
ID In/Out DWord Identificador numérico de registro (valor predeterminado: 0):
• Durante la ejecución, la entrada ID identifica un registro válido. La nueva
configuración de registro se copia desde este registro.
• Tras la ejecución, el parámetro ID se convierte en una salida que de-
vuelve la ID del archivo de registro recién creado.
Nota: el acceso a este parámetro por nombre simbólico no está permitido.
DONE OUT Bool El bit DONE es TRUE durante un ciclo tras haberse finalizado la última
petición sin errores.
BUSY OUT Bool • 0 - Ninguna operación en curso
• 1 - Operación en curso
ERROR OUT Bool El bit ERROR es TRUE durante un ciclo tras haberse finalizado la última
petición con un error. El valor del código de error en el parámetro STATUS
solo es válido durante un único ciclo en que ERROR = TRUE.
STATUS OUT Word Código de condición de ejecución (valor predeterminado: 0)

La instrucción DataLogNewFile se puede ejecutar cuando un registro se llena o se


considera que está completo y no se desea perder ningún dato almacenado en él. Es
posible crear un archivo de registro vacío basándose en la estructura del archivo de registro
lleno. El registro del encabezado se duplica a partir del registro original, junto con las
propiedades de este último (búfer de registro DATA, formato de datos y configuración de
sello de tiempo). El archivo de registro original se cierra implícitamente y el archivo de
registro nuevo se abre también implícitamente.
Disparador del parámetro DataLogWrite: El programa de usuario debe controlar los
parámetros ERROR y STATUS de cada operación DataLogWrite. Cuando se escribe el
último registro y el archivo queda lleno, el bit ERROR de DataLogWrite = 1 y la palabra
STATUS de DataLogWrite = 1. Los valores de ERROR y STATUS son válidos únicamente
durante un ciclo, de modo que la lógica de vigilancia debe utilizar ERROR = 1 como puerta
temporal para capturar el valor de STATUS y comprobar que STATUS = 1 (el archivo de
registro está lleno).

Controlador programable S7-1200


534 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Operación DataLogNewFile: Cuando la lógica del programa de usuario recibe la señal de


que el registro está lleno, este estado se utiliza para activar una operación DataLogNewFile.
DataLogNewFile debe ejecutarse con la ID de un registro ya existente (generalmente lleno)
y abierto, pero con un solo parámetro NAME nuevo. Una vez que la operación
DataLogNewFile se ha realizado, se devuelve un nuevo valor de ID de registro (como
parámetro de salida), que corresponde al nombre del nuevo registro. El nuevo archivo de
registro está implícitamente abierto, y está listo para almacenar nuevos registros. Las
operaciones DataLogWrite nuevas directamente relacionadas con el nuevo archivo de
registro deben utilizar el valor ID devuelto por la operación DataLogNewFile.

ATENCIÓN
Las operaciones de creación de registro deben finalizarse antes empezar una operación
de escritura de registro.
Las operaciones de creación de archivos de registro DataLogCreate y DataLogNewFile se
extienden a lo largo de varios ciclos. El tiempo real requerido para la creación de un
archivo de registro depende de la estructura y del número de registros. La lógica de
programa debe observar y capturar la transición del bit DONE al estado TRUE, que indica
que ha finalizado la creación del archivo de registro. Si se ejecuta una instrucción
DataLogWrite antes de finalizar una operación de creación de registro, la operación de
escritura no podrá escribir un registro nuevo tal como se ha previsto.

Tabla 9- 216 Valores de ERROR y STATUS

ERROR STATUS (W#16#) Descripción


0 0000 No hay error
0 7000 Llamada sin flanco REQ: BUSY = 0, DONE = 0
0 7001 Primera llamada con flanco de REQ (en curso): BUSY = 1, DONE = 0
0 7002 Llamada Nª (en curso): BUSY = 1, DONE = 0
1 8070 Se está utilizando toda la memoria de instancia interna.
1 8090 Nombre de archivo no válido
1 8091 El parámetro de nombre no es una referencia de String.
1 8092 El registro no existe.
1 8093 El registro ya existe.
1 8097 La longitud de archivo solicitada supera el máximo del sistema de archivos.
1 80B2 ID fuera de recurso
Nota: borre algunos archivos de registro existentes para generar recursos para
un archivo de registro nuevo.
1 80B3 La memoria de carga disponible no es suficiente.
1 80B4 El MC está protegido contra escritura.
1 80C1 Demasiados archivos abiertos.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 535
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9.2.3 Trabajar con registros de datos


Los archivos de registro se guardan en formato de valores separados por comas (*.csv) en
una memoria flash remanente. Los archivos de registro pueden verse utilizando la función
de servidor web del PLC o retirando la Memory Card del PLC e insertándola en un lector de
tarjetas de PC convencional.

Leer registros con la función de servidor web del PLC


Si el puerto PROFINET del PLC y el equipo están conectados a una red, se puede emplear
un navegador de PC (como Microsoft Internet Explorer o Mozilla Firefox) para acceder al
servidor web integrado. El PLC puede estar en modo RUN o STOP cuando se utilice el
servidor web. Si el PLC está en modo RUN, el programa de control sigue funcionando
mientras el servidor web del PLC transfiere los datos de registro a través de la red.
Acceso al servidor web:
1. Habilite el servidor web en la configuración de dispositivos para la CPU de destino
(Página 1021).
2. Conecte el PC al PLC a través de la red PROFINET (Página 1025).
3. Acceda a la CPU mediante un servidor web integrado (Página 1029).
4. Cargue, edite y borre los archivos de registro con la página web "File Browser"
(Página 1055) estándar.
5. Abra el archivo .csv con una aplicación para hojas de cálculo como Microsoft Excel.

Nota
Administración de registros
No guarde más de 1000 registros en un sistema de archivos. Si se excede este número,
existe la posibilidad de que el servidor web no tenga recursos suficientes en la CPU para
mostrar los registros.
Si resulta que la página web del explorador de archivos no puede visualizar los registros,
deberá poner la CPU en estado STOP para ver y borrar registros.
Administre los registros para garantizar que solo se guardan aquellos que deben
mantenerse y no exceda el número de 1000 registros.

Ver registros de una Memory Card del PLC


Si la CPU S7-1200 tiene insertada una Memory Card "Programa" del tipo S7-1200, se
puede extraer e insertar en una ranura SD (Secure Digital) o MMC (MultiMediaCard)
estándar de un PC o una programadora. El PLC se encuentra en modo STOP cuando no
tiene insertada la Memory Card, por lo que el programa de control no se ejecutará.
Utilice el explorador de Windows y vaya al directorio \DataLog de la Memory Card. Todos
los archivos de registro \*.csv se encuentran en ese directorio.

Controlador programable S7-1200


536 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Haga una copia de los archivos de registro y guarde las copias en una unidad local del PC.
A continuación se puede utilizar Excel para abrir una copia local de un archivo *.csv, pero no
el archivo original, que permanece guardado en la Memory Card.

ATENCIÓN
Con ayuda de un lector de tarjetas para PC es posible copiar los archivos de registro de
una Memory Card S7-1200, pero no pueden modificarse ni borrarse
La página File Browser estándar del servidor web es la herramienta recomendada para
visualizar, cargar (copiar) y borrar archivos de registro.
En la navegación directa en el sistema de archivos de la Memory Card con Windows
Explorer existe el riesgo de borrar o modificar accidentalmente registros u otros archivos
de sistema, lo que podría estropear un archivo o hacer que la Memory Card sea inservible.

ATENCIÓN
Efecto de los registros en Memory Cards
Para garantizar el rendimiento general y la robustez del sistema, limite la frecuencia de
registro como máximo a 200 ms.

9.9.2.4 Límite del tamaño de los archivos de registro


Los archivos de registro comparten espacio de la memoria de carga del PLC con el
programa, los datos del programa, los datos de configuración, las páginas web definidas por
el usuario y los datos del sistema PLC. Un programa grande que utiliza la memoria de carga
interna requiere una gran cantidad de memoria de carga. Podría suceder que no hubiera
espacio libre suficiente para archivos de registro. En tal caso, se puede utilizar una "Tarjeta
de programa" (Página 149) para aumentar el tamaño de la memoria de carga. Las CPU S7-
1200 pueden utilizar memoria de carga interna o externa, pero no ambas a la vez.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 537
Instrucciones avanzadas
9.9 Recetas y registros de datos

Regla de tamaño máximo para archivos de registro de datos (Data Log)


El tamaño máximo de un archivo de registro no puede superar el tamaño de la memoria de
carga libre o 500 MB, lo que sea más pequeño. En este caso, el tamaño de 500 MB se
refiere a la definición decimal de megabytes, de modo que el tamaño máximo de un archivo
de registro es de 500.000.000 bytes o 500 x 10002 bytes.

Tabla 9- 217 Tamaño de la memoria de carga

Área de datos CPU 1211C CPU 1212C CPU 1214C CPU 1215C, Almacenamiento de
CPU 1217C datos
Memoria de carga interna 1 MB 2 MB 4 MB 4 MB Programa de usua-
memoria flash rio y datos de pro-
Memoria de carga externa 4 MB, 12 MB, 24 MB, 256 MB, 2 GB o 32 GB, según el tamaño de la grama, datos de
Memoria flash opcional tarjeta SD configuración, regis-
como "Tarjeta de progra- tros de datos, pági-
ma" nas web definidas
por el usuario, y
datos del sistema
PLC

Cálculo del espacio libre en la memoria de carga


La cantidad de memoria de carga libre varía durante las operaciones normales, ya que el
sistema operativo va utilizando y liberando memoria. Siga los pasos siguientes para ver el
tamaño de la memoria de carga.
1. Establecer una conexión online entre STEP 7 y el PLC S7-1200 de destino.
2. Descargue el programa que controla las operaciones de registro de datos.
3. Cree las páginas web personalizadas que se requieran. Las páginas web estándar que
permiten acceder a registros de datos se guardan en el firmware del PLC y no utilizan
memoria de carga.
4. Utilice las herramientas online y de diagnóstico (Página 1341) o la página de diagnóstico
del servidor web (Página 1036) para ver el tamaño total de la memoria de carga y el
espacio libre.

Cálculo del tamaño de un archivo de registro (todos los registros)


Cuando se crea el archivo de registro, la CPU asigna el tamaño de memoria máximo.
Además del tamaño necesario para todos los registros, debe incluir espacio de
almacenamiento para un encabezado de registro (si se utiliza), un encabezado de sello de
tiempo (si se utiliza), un encabezado de índice de registro y el tamaño del bloque mínimo
para la asignación de memoria.
Utilice la fórmula siguiente para determinar el tamaño de los archivos de registro de datos y
asegúrese de no infringir la regla de tamaño máximo.
Bytes de datos de registro = ((bytes de datos en un registro + bytes de sello de tiempo + 12
bytes) * número de registros)

Controlador programable S7-1200


538 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Encabezado
Bytes de encabezado de registro = bytes de caracteres de encabezado + 2 bytes
Bytes de caracteres de encabezado
● Sin encabezado de datos ni sellos de tiempo = 7 bytes
● Sin encabezado de datos ni sellos de tiempo (tiene un encabezado de sello de tiempo) =
21 bytes
● Encabezados de datos sin sellos de tiempo = Número de bytes de caracteres en todo el
texto de encabezado de la columna, incluidas comas separadoras
● Encabezados de datos y sellos de tiempo (tiene un encabezado de sello de tiempo) =
Número de bytes de caracteres en todo el texto de encabezado de la columna, incluidas
comas separadoras + 21 bytes

Datos
Bytes de datos de registro = ((bytes de datos en un registro + bytes de sello de tiempo + 12
bytes) * número de registros)
Bytes de datos en un registro
El parámetro DATA de DataLogCreate apunta a una estructura que asigna el número de
campos de datos y tipo de datos de cada campo para un registro.
Multiplique el número de apariciones del tipo de datos indicado por el nombre de bytes
requerido. Repita el proceso por cada tipo de datos en un registro y sume todos los bytes de
datos para obtener el total de elementos de datos en un registro.
Tamaño de los elementos de datos individuales
El registro se guarda en forma de bytes de caracteres en el formato de archivo CSV (valores
separados por coma). La tabla siguiente muestra el número de bytes necesarios para
guardar cada elemento de datos.

Tipo de Número de bytes (incluye datos más un byte de coma)


datos
Bool 2
Byte 5
Word 7
DWord 12
Char 4

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 539
Instrucciones avanzadas
9.9 Recetas y registros de datos

String Ejemplo 1: MyString String[10]


El tamaño máximo de la cadena es de 10 caracteres.
Caracteres de texto + relleno automático con caracteres vacíos = 10 bytes
Comillas de apertura y cierre + caracteres coma = 3 bytes
10 + 3 = 13 bytes en total
Ejemplo 2: Mystring2 String
Si se omiten los corchetes al indicar el tamaño, se asignan de forma predeter-
minada 254 bytes.
Caracteres de texto + relleno automático con caracteres vacíos = 254 bytes
Comillas de apertura y cierre + caracteres coma = 3 bytes
254 + 3 = 257 bytes en total
USInt 5
UInt 7
UDInt 12
SInt 5
Int 7
DInt 12
Real 16
LReal 25
Tiempo 15
DTL 24
Número de registros en un archivo de registro
El parámetro RECORDS de la instrucción DataLogCreate especifica el número máximo de
registros de un archivo de registro.
Bytes de sello de tiempo en un registro
● Sin sello de tiempo = 0 bytes
● Sello de tiempo = 20 bytes

Controlador programable S7-1200


540 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

9.9.2.5 Programa de ejemplo de registros de datos


Este programa de ejemplo de registro no muestra toda la lógica del programa necesaria
para obtener valores de muestreo de un proceso dinámico, pero muestra las operaciones
clave de las instrucciones de registro. La estructura y el número de archivos de registro
utilizados dependen de las necesidades de control del proceso.

Nota
Uso general de los archivos de registro
• Los archivos de registro se abren automáticamente después de las operaciones
DataLogCreate y DataLogNewFile.
• Los archivos de registro se cierran automáticamente después de una transición de RUN
a STOP del PLC o de una desconexión y conexión del PLC.
• Debe haber un archivo de registro abierto antes de que sea posible una operación
DataLogWrite.
• Puede haber un máximo de ocho archivos de registro abiertos a la vez. Si bien pueden
existir más de ocho archivos de registro, algunos de ellos deben estar cerrados para que
no haya más de ocho abiertos.

Ejemplo de programa de registro


Los nombres del registro, el texto del encabezado y la estructura MyData del ejemplo se
crean en un bloque de datos. Las tres variables MyData guardan temporalmente valores de
muestreo nuevos. Los valores de muestreo del proceso en las ubicaciones de estos DBs se
transfieren a un archivo de registro ejecutando la instrucción DataLogWrite.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 541
Instrucciones avanzadas
9.9 Recetas y registros de datos

Segmento 1 El flanco ascendente REQ inicia el proceso de creación de registros de datos.

Segmento 2 Capturar la salida DONE de DataLogCreate porque solo es válida durante un


ciclo.

Segmento 3 Guardar la salida de estado si hay un error

Segmento 4 Una señal de flanco ascendente se dispara cuando deben guardarse valores
de proceso nuevos en la estructura MyData.

Controlador programable S7-1200


542 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Segmento 5 El estado de la entrada EN se toma como base cuando la operación


DataLogCreate ha finalizado. Una operación de creación dura muchos ciclos y debe
completarse antes de ejecutar una operación de escritura. La señal de flanco ascendente en
la entrada REQ es el evento que dispara una operación de escritura habilitada.

Segmento 6 Cierre el registro una vez se haya escrito el último registro. Después de
ejecutar la operación DataLogWrite que escribe el último registro, el estado "lleno" del
archivo de registro se indica cuando la salida de ESTADO de DataLogWrite = 1.

Segmento 7 Una entrada REQ DataLogOpen para la señal de flanco ascendente simula la
pulsación de un botón por parte del usuario en un HMI que abre un archivo de registro. Si se
abre un archivo de registro cuyos registros contienen datos de proceso, la próxima
operación DataLogWrite sobrescribirá el registro más antiguo. Quizás prefiera conservar el
registro antiguo y crear un registro nuevo, tal como se muestra en el segmento 7.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 543
Instrucciones avanzadas
9.9 Recetas y registros de datos

Segmento 8 El parámetro ID es del tipo IN/OUT. En primer lugar debe proporcionarse el


valor ID del registro existente cuya estructura desee copiar. Una vez ha finalizado la
operación DataLogNewFile, se escribe un valor ID unívoco para el nuevo registro en la
ubicación de referencia de la ID. No se muestra la obtención necesaria del bit DONE =
TRUE; consulte los segmentos 1, 2 y 4 para ver un ejemplo de la lógica del bit DONE.

Archivos de registro creados por el programa de ejemplo vistos con el servidor web de la CPU S7-
1200

① La opción "Borrar" solo está disponible si el usuario ha iniciado sesión con privilegios de modi-
ficación.
② La opción "Cambiar nombre" solo está disponible si el usuario ha iniciado sesión con privile-
gios de modificación.

Controlador programable S7-1200


544 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.9 Recetas y registros de datos

Tabla 9- 218 Ejemplos de archivos .csv descargados vistos con Excel

Dos registros escritos en un archivo de


cinco registros como máximo

Cinco registros en un archivo de registro


con un máximo de cinco registros

Después de escribir un registro adicional


en el archivo anterior, que ya está lleno,
la sexta operación de escritura sobrescri-
be el registro más antiguo con el sexto
registro. Otra operación de escritura so-
brescribirá el segundo registro con el
séptimo, etc.

Nota
Los registros ya no usan una marca //END para señalizar el final del archivo de registro que
no está lleno. En las versiones de la CPU S7-1200 anteriores a V4.1, los registros que no
estaban llenos incluían una marca //END.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 545
Instrucciones avanzadas
9.10 Control de bloques de datos

9.10 Control de bloques de datos

9.10.1 CREATE_DB (crear bloque de datos)

Tabla 9- 219 Instrucción CREATE_DB

KOP / FUP SCL Descripción


ret_val := CREATE_DB( Utilice la instrucción "CREATE_DB" para crear un
REQ:=_bool_in_, bloque de datos nuevo en la memoria de carga
LOW_LIMIT:=_uint_in_, y/o de trabajo.
UP_LIMIT:=_uint_in_, La instrucción "CREATE_DB" no cambia la suma
COUNT:=_udint_in_, de verificación del programa de usuario.
ATTRIB:=_byte_in_, Un bloque de datos creado únicamente en la
BUSY=>_bool_out_, memoria de trabajo tiene las propiedades siguien-
DB_NUM=>_uint_out_); tes:
• Después de un borrado total o de una desco-
nexión y conexión (POWER OFF/ON), el blo-
que deja de existir.
• Durante la carga o cuando hay una transición
de STOP a RUN, su contenido no cambia.

Número del bloque de datos


El bloque de datos creado se asigna a un número comprendido dentro del rango definido en
los parámetros LOW_LIMIT (límite inferior) y UP_LIMIT (límite superior). "CREATE_DB"
asigna al DB el número más bajo posible del rango especificado. No es posible asignar los
números de los DB que ya están incluidos en el programa de usuario.
Para crear un DB con un número concreto, introduzca el mismo número en los límites
superior e inferior del rango que debe especificarse. Si ya existe un DB con el mismo
número en la memoria de trabajo y/o de carga, o bien si el DB existe como versión copiada,
la instrucción finalizará y se generará un mensaje de error en el parámetro RET_VAL.

Valores iniciales del bloque de datos


El parámetro SRCBLK se utiliza para definir valores iniciales en el DB que se creará. El
parámetro SRCBLK es un puntero a un DB o área de DB desde el que se aplican los
valores iniciales. El DB direccionado en el parámetro SRCBLK debe haberse generado con
un acceso estándar (atributo "Acceso optimizado al bloque" desactivado).
● Si el área especificada en el parámetro SRCBLK es más grande que el DB generado, se
aplicarán como valores iniciales los que vayan hasta la longitud del DB generado.
● Si el área especificada en el parámetro SRCBLK es más pequeña que el DB generado,
los demás valores se rellenarán con "0".
Para garantizar la coherencia de datos, no hay que cambiar esta área de datos mientras se
ejecute "CREATE_DB" (es decir, mientras el parámetro BUSY tenga el valor TRUE).

Controlador programable S7-1200


546 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.10 Control de bloques de datos

Descripción del funcionamiento


La instrucción "CREATE_DB" funciona de forma asíncrona. El procesamiento se extiende a
lo largo de varias llamadas. Inicie la tarea llamando "CREATE_DB" con REQ = 1.
Los parámetros de salida RET_VAL y BUSY indican el estado de la tarea.
Consulte también: DELETE_DB (borrar bloque de datos) (Página 555)

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "CREATE_DB":

Parámetro Declara- Tipo de Área de memoria Descripción


ción datos
REQ Input BOOL I, Q, M, D, L o cons- Parámetro de control disparado por nivel "request to activate"
tante REQ = 1: Petición para generar el bloque de datos
LOW_LIMIT Input UINT I, Q, M, D, L o cons- Límite inferior del rango para asignar un número de DB. El
tante número más bajo posible es 60000.
UP_LIMIT Input UINT I, Q, M, D, L o cons- Límite superior del área utilizada por "CREATE_DB" para asig-
tante nar un número al DB (número más alto posible: 60999)
COUNT Input UDINT I, Q, M, D, L o cons- El valor de contaje especifica el número de bytes que deben
tante reservarse para el DB generado. El número de bytes debe ser
un número par. La longitud máxima es de 65534 bytes.
ATTRIB Input BYTE I, Q, M, D, L o cons- Los 4 primeros bits del byte en el parámetro ATTRIB se utilizan
tante para definir las propiedades del bloque de datos *:
• Bit 0 = 0: El atributo "Depositar solo en la memoria de car-
ga" no está activado.
• Bit 0 = 1: El atributo "Depositar solo en la memoria de car-
ga" está activado. Con este ajuste, el DB no ocupa espacio
en la memoria de trabajo y no está incluido en el programa.
No es posible acceder al DB con comandos de bits. Si el bit
0 = 1, la selección del bit 2 es irrelevante.
Para garantizar la compatibilidad con STEP 7 V5.x, los bits 0 y
3 deben considerarse juntos (véase más abajo).
• Bit 1 = 0: El atributo "Bloque de datos protegido contra
escritura en el dispositivo" no está activado.
• Bit 1 = 1: El atributo "Bloque de datos protegido contra
escritura en el dispositivo" está activado.

• Bit 2 = 0: El DB es remanente (solo para DB generados en


la memoria de carga y de trabajo). El DB se considera re-
manente si al menos uno de los valores se ha puesto a re-
manente.
• Bit 2 = 1: El DB no es remanente.
La remanencia no se soporta en DB que solo están almacena-
dos en la memoria de carga o solo en la memoria de trabajo. Si
se llama la instrucción "CREATE_DB" con una de las dos
combinaciones "remanente y solo memoria de carga" o "rema-
nente y solo memoria de trabajo", el DB que debe generarse
no se marcará como remanente.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 547
Instrucciones avanzadas
9.10 Control de bloques de datos

Parámetro Declara- Tipo de Área de memoria Descripción


ción datos
• Bit 3 = 0: Creación del DB en la memoria de carga o en la
memoria de trabajo (selección con el bit 0, véase más arri-
ba)
• Bit 3 = 1: Creación del DB tanto en la memoria de carga
como en la memoria de trabajo (bit 0 irrelevante)
Para garantizar la compatibilidad con STEP 7 V5.x, los bits 0 y
3 deben utilizarse combinados. Si el bit 3 = 1, el bit 0 es irrele-
vante.
Bit 0 Bit 3 Generación del DB
0 0 Solo en la memoria de trabajo
1 0 Solo en la memoria de carga
Irrele- 1 Memoria de trabajo y de carga
vante
• Bit 4 = 0 - No se han especificado valores iniciales (los
valores de entrada en el parámetro SRCBLK se ignorarán).
• Bit 4 = 1 - Especificar valores iniciales (los valores se co-
rresponden con el DB direccionado por el parámetro
SRCBLK).
SRCBLK Input VARIAN D Puntero al bloque de datos cuyos valores se utilizarán para
T inicializar el bloque de datos que se generará.
RET_VAL Return INT I, Q, M, D, L Información de error
BUSY Output BOOL I, Q, M, D, L BUSY = 1: El proceso no ha finalizado aún.
DB_NUM Output DB_DY I, Q, M, D, L Número del DB creado.
N
(UINT)
* Las propiedades seleccionadas aquí equivalen a los atributos de las propiedades de un bloque de datos.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


548 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.10 Control de bloques de datos

Parámetro RET_VAL

Código de Descripción
error*
(W#16#...)
0000 Sin errores
0081 El área de destino es mayor que la de origen.
El área de origen se escribe por completo en el área de destino. Los bytes restantes del área de destino
no cambian.
7000 Primera llamada con REQ = 0: No hay ninguna transferencia de datos activa; BUSY tiene el valor "0".
7001 Primera llamada con REQ = 1: Transferencia de datos disparada; BUSY tiene el valor "1".
7002 Llamada intermedia (REQ irrelevante): Transferencia de datos ya activa; BUSY tiene el valor "1".
8081 El área de origen es mayor que la de destino.
Se escribe el área de destino completa. Los bytes restantes del área de origen se ignoran.
8092 La función "Crear bloque de datos" no está disponible actualmente porque
• La función "Comprimir memoria de usuario" está activa.
• Se ha alcanzado el número máximo de bloques en la CPU.
8093 Para el parámetro SRCBLK no se ha especificado ningún bloque de datos o bien el bloque de datos espe-
cificado no está en la memoria de trabajo.
8094 Se ha especificado un valor no válido en el parámetro ATTRIB.
80A1 Error en el número del DB:
• El número es "0"
• El número excede el límite superior de la CPU para números de DB
• Límite inferior > límite superior
80A2 Error en la longitud del DB:
• La longitud es "0"
• La longitud es un número impar
• La longitud es mayor que la permitida por la CPU
80A3 El bloque de datos del parámetro SRCBLK no se ha creado con acceso estándar.
80B1 No hay ningún número de DB libre.
80B2 No hay suficiente memoria de trabajo.
80B4 La Memory Card está protegida contra escritura.
80BB No hay suficiente memoria de carga.
80C3 Se ha alcanzado el número máximo de instrucciones "CREATE_DB" activas al mismo tiempo.
Información Consulte también: Códigos de error comunes para las instrucciones avanzadas (Página 564)
general del
error
* El código de error puede visualizarse en el editor de programas como valor entero o hexadecimal.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 549
Instrucciones avanzadas
9.10 Control de bloques de datos

9.10.2 Instrucciones READ_DBL y WRIT_DBL (Leer de/escribir en un bloque de datos


de la memoria de carga)

Tabla 9- 220 Instrucciones READ_DBL y WRIT_DBL

KOP / FUP SCL Descripción


READ_DBL( Copia valores iniciales del DB o partes
req:=_bool_in_, de ellos de la memoria de carga a un
srcblk:=_variant_in_, DB de destino en la memoria de traba-
busy=>_bool_out_, jo.
dstblk=>_variant_out_); El contenido de la memoria de carga
no cambia durante el proceso de copia.

WRIT_DBL( Copia valores de DB actuales o partes


req:=_bool_in_, de ellos de la memoria de trabajo a un
srcblk:=_variant_in_, DB de destino en la memoria de carga.
busy=>_bool_out_, El contenido de la memoria de trabajo
dstblk=>_variant_out_); no cambia durante el proceso de copia.

Tabla 9- 221 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


REQ IN BOOL Una señal high inicia la operación si BUSY = 0.
SRCBLK IN VARIANT READ_DBL: Puntero al bloque de datos fuente en la memoria de carga
WRIT_DBL: Puntero al bloque de datos fuente en la memoria de traba-
jo
RET_VAL OUT INT Código de condición de ejecución
BUSY OUT BOOL BUSY = 1 indica que el proceso de lectura/escritura no se ha comple-
tado.
DSTBLK OUT VARIANT READ_DBL: Puntero al bloque de datos de destino en la memoria de
trabajo
WRIT_DBL: Puntero al bloque de datos de destino en la memoria de
carga

Controlador programable S7-1200


550 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.10 Control de bloques de datos

Típicamente, un DB se almacena tanto en memoria de carga (flash) como en memoria de


trabajo (RAM). Los valores de arranque (valores iniciales) siempre se almacenan en
memoria de carga, y los valores actuales siempre se almacenan en memoria de trabajo.
READ_DBL se puede utilizar para copiar un conjunto de valores de arranque de la memoria
de carga a los valores actuales de un DB en memoria de trabajo que se referencia mediante
el programa. WRIT_DBL se puede utilizar para actualizar los valores de arranque guardados
en la memoria de carga interna o en una Memory Card a partir de los valores actuales de la
memoria de trabajo.

Nota
Efecto de las instrucciones WRIT_DBL y READ_DBL en la memoria flash
La instrucción WRIT_DBL realiza operaciones de escritura en una memoria flash (memoria
de carga interna o Memory Card). Para evitar que se reduzca la vida útil de la memoria
flash, utilice la instrucción WRIT_DBL para actualizaciones poco frecuentes, como grabar
los cambios en un proceso de producción. Por el mismo motivo, evite llamar con frecuencia
READ_DBL para operaciones de lectura.

Los bloques de datos para READ_DBL y WRIT_DBL deben crearse antes de llamar estas
instrucciones en el programa STEP 7. Si el DB de origen se creó como tipo "estándar", el
DB de destino también debe tener el tipo "estándar". Si el bloque de datos de origen se creó
como tipo "optimizado", el bloque de datos de destino también debe tener el tipo
"optimizado".
Si los DB son estándar, se puede especificar un nombre de etiqueta o un valor de P#. El
valor de P# permite especificar y copiar cualquier número de elementos del tamaño
especificado (Byte, Word o DWord). De este modo, se puede copiar todo un DB o parte de
él. Si los DB están optimizados, solamente se puede especificar un nombre de variable; no
se puede utilizar el operador P#. Si se especifica un nombre de variable para los DBs
estándar u optimizados (o para otros tipos de memoria de trabajo), la instrucción copia los
datos a los que hace referencia este nombre de variable. Puede ser un tipo definido por el
usuario, una matriz o un elemento básico. El tipo Struct solo puede utilizarse con estas
instrucciones si el DB es estándar y no optimizado. Se debe utilizar un tipo definido por el
usuario (UDT) si es una estructura en memoria optimizada. Solo un tipo definido por el
usuario garantiza que los "tipos de datos" sean exactamente los mismos para las
estructuras de origen y destino.

Nota
Uso de estructuras (tipo de datos Struct) en un DB "optimizado"
Al usar un tipo de datos Struct con DB "optimizados", primero debe crearse un tipo de datos
definido por el usuario (UDT) para la Struct. Después, se configuran los DB de origen y de
destino en el UDT. El UDT asegura que los tipos de datos dentro de la Struct sean
coherentes para ambos DB.
Para DB "estándar", se usa la Struct sin crear un UDT.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 551
Instrucciones avanzadas
9.10 Control de bloques de datos

READ_DBL y WRIT_DBL se ejecutan de forma asíncrona respecto al ciclo del programa. El


procesamiento se extiende en varias llamadas de READ_DBL y WRIT_DBL. La tarea de
transferencia de DB se inicia llamando con REQ = 1 y a continuación controlado las salidas
BUSY y RET_VAL para determinar cuándo se ha completado la transferencia de datos y si
lo ha hecho correctamente.

Nota
Efecto de las instrucciones WRIT_DBL y READ_DBL en la carga de comunicación
Cuando la instrucción WRIT_DBL o READ_DBL está activa de forma continua, puede
consumir recursos de comunicación hasta el punto que STEP 7 pierda la comunicación con
la CPU. Por este motivo, utilice una entrada de flanco ascendente (Página 237) para el
parámetro REQ y no una entrada normalmente abierta o cerrada (Página 231) que se
mantenga activada (nivel de señal "high") durante varios ciclos.

Para garantizar la coherencia de datos, no modifique el área de destino durante el


procesamiento de READ_DBL o el área de origen durante el procesamiento de WRIT_DBL
(es decir, mientras el parámetro BUSY sea TRUE).
Restricciones de los parámetros SRCBLK y DSTBLK:
● Un bloque de datos debe haber sido creado antes de poder ser referenciado.
● La longitud de un puntero VARIANT del tipo BOOL debe ser divisible entre 8.
● La longitud de un puntero VARIANT del tipo STRING debe ser el mismo en los punteros
fuente y de destino.

Información de recetas y de configuración de la máquina


Se pueden utilizar las instrucciones READ_DBL y WRIT_DBL para gestionar información de
recetas o de configuración de la máquina. En esencia, esto constituye otro método de
obtener datos remanentes para los valores que no cambian con frecuencia, aunque se
desee limitar el número de escrituras para impedir que la memoria flash se desgaste
prematuramente. Ello permite aumentar de forma eficaz la cantidad de memoria remanente
más allá de la soportada para los datos normales remanentes tras el apagado, al menos
para los valores que no cambian con frecuencia. La información de recetas o la información
de configuración de la máquina de la memoria de trabajo se puede guardar en la memoria
de carga mediante la instrucción WRIT_DBL, y dicha información se puede recuperar de la
memoria de carga a la memoria de trabajo mediante la instrucción READ_DBL.

Controlador programable S7-1200


552 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.10 Control de bloques de datos

Tabla 9- 222 Códigos de condición

RET_VAL Descripción
(W#16#...)
0000 No hay error
0081 Advertencia: Que el área de origen sea menor que la de destino. Los datos fuente se copian al comple-
to con los bytes adicionales en el área de destino sin modificación.
7000 Llamada con REQ = 0: BUSY = 0
7001 Primera llamada con REQ = 1 (en curso): BUSY = 1
7002 Llamada Nª (en curso): BUSY = 1
8051 Error de tipo de bloque de datos
8081 El área de origen es mayor que la de destino. El área de destino está llena por completo y los bytes
restantes del origen se ignoran.
8251 Error de tipo de bloque de datos de origen
82B1 El bloque de datos de origen falta
82C0 El DB de origen está siendo editado por otra instrucción o función de comunicación.
8551 Error de tipo de bloque de datos de destino
85B1 El bloque de datos de destino falta
85C0 El DB de destino está siendo editado por otra instrucción o función de comunicación.
80C3 Actualmente hay más de 50 instrucciones READ_DBL o 50 WRIT_DBL en cola de ejecución.

Consulte también Recetas (Página 506)

9.10.3 ATTR_DB (leer atributos de un bloque de datos)

Tabla 9- 223 Instrucción ATTR_DB

KOP / FUP SCL Descripción


ret_val := ATTR_DB( La instrucción "ATTR_DB" se utiliza para obtener
REQ:=_bool_in_, información acerca del bloque de datos (DB)
DB_NUMBER:=_uint_in_, ubicado en la memoria de trabajo de la CPU. La
DB_LENGTH=>_udint_out_, instrucción determina los atributos activados en
ATTRIB=>_byte_out_); el parámetro ATTRIB para el DB seleccionado.
No es posible leer la longitud en bloques de da-
tos con acceso optimizado ni en bloques de da-
tos que solo están en la memoria de carga. En
estos casos, el parámetro DB_LENGH tiene el
valor "0".
No utilice ATTR_DB para bloques de datos con
acceso optimizado y reserva de memoria activa-
da.
No lea los bloques de datos de Motion Control
con la instrucción "ATTR_DB". En este caso se
emite el código de error 80B2.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 553
Instrucciones avanzadas
9.10 Control de bloques de datos

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "ATTR_DB":

Parámetro Declaración Tipo de Área de memoria Descripción


datos
REQ Input BOOL I, Q, M, D, L o constante REQ = 1: Orden para leer atributos del bloque
DB_NUMBE Input DB_ANY I, Q, M, D, L o constante Número del DB que debe comprobarse
R
RET_VAL Output INT I, Q, M, D, L Información de error
DB_LENGTH Output UDINT I, Q, M, D, L • Número de bytes de datos que contiene el DB
seleccionado.
• "0" para bloques de datos con acceso optimizado
y bloques de datos que solo están en la memoria
de carga.
ATTRIB Output BYTE I, Q, M, D, L Propiedades del DB:
• Bit 0*= 0: El atributo "Depositar solo en la memo-
ria de carga" no está activado.
• Bit 0*= 1: El atributo "Depositar solo en la memo-
ria de carga" está activado.

• Bit 1 = 0: El atributo "Bloque de datos protegido


contra escritura en el dispositivo" no está activa-
do.
• Bit 1 = 1: El atributo "Bloque de datos protegido
contra escritura en el dispositivo" está activado.
Si el bit 0 = 1, el bit 2 es irrelevante y se pone a 1.
• Bit 2 = 0: Remanente - El DB se considera rema-
nente si al menos uno de los valores se ha pues-
to a remanente.
• Bit 2 = 1: No remanente - El DB en su conjunto
no es remanente.

• Bit 3*= 0: El DB está en la memoria de carga (bit


0 = 1) o en la memoria de trabajo (bit 0 = 0).
• Bit 3*= 1: El DB se genera en la memoria de
carga y de trabajo.
* La relación entre el bit 0 y el bit 3 se explica en los parámetros de la instrucción "CREATE_DB (crear bloque de datos)
(Página 546)".

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Controlador programable S7-1200


554 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.10 Control de bloques de datos

Parámetro RET_VAL

Código de Explicación
error*
(W#16#...)
0000 No ha ocurrido ningún error.
80A1 Error en el parámetro de entrada DB_NUMBER: el parámetro actual seleccionado
• Es "0"
• Es mayor que el número de DB máximo permitido para la CPU utilizada.
80B1 El DB con el número especificado no existe en la CPU.
80B2 No es posible leer bloques de datos de objetos tecnológicos de Motion Control con la instrucción
"ATTR_DB".
Información Consulte también: Códigos de error comunes para las instrucciones avanzadas (Página 564)
general del
error
* El código de error puede visualizarse en el editor de programas como valor entero o hexadecimal.

9.10.4 DELETE_DB (borrar bloque de datos)

Tabla 9- 224 Instrucción DELETE_DB

KOP / FUP SCL Descripción


ret_val := DELETE_DB( La instrucción "DELETE_DB" se utiliza para bo-
REQ := _bool_in_, rrar un bloque de datos (DB) que el programa de
DB_NUMBER := usuario había creado llamando la instrucción
_uint_in_, "CREATE_DB (Página 546)".
BUSY => _bool_out_); Si el bloque de datos no se ha creado con
"CREATE_DB", DELETE_DB devuelve el código
de error W#16#80B5 en el parámetro RET_VAL.
La llamada de DELETE_DB no borra el bloque de
datos seleccionado inmediatamente, sino en el
punto de control del ciclo posterior a la ejecución
del OB de ciclo.

Descripción del funcionamiento


La instrucción "DELETE_DB" funciona de forma asíncrona, es decir, su ejecución abarca
varias llamadas. Inicie la transferencia de interrupción llamando la instrucción con REQ = 1.
El parámetro de salida BUSY y los bytes 2 y 3 del parámetro de salida RET_VAL indican el
estado de la tarea.
La eliminación del bloque de datos se ha completado cuando el parámetro de salida BUSY
tiene el valor FALSE.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 555
Instrucciones avanzadas
9.10 Control de bloques de datos

Parámetros
La tabla siguiente muestra los parámetros de la instrucción "DELETE_DB":

Parámetro Declaración Tipo de Área de memoria Descripción


datos
REQ Input BOOL I, Q, M, D, L o constante REQ = 1: Petición para borrar el DB con el núme-
ro del parámetro DB_NUMBER
DB_NUMBER Input UINT I, Q, M, D, L o constante Número del DB que debe borrarse
RET_VAL Output INT I, Q, M, D, L Información de error (consulte el parámetro
"RET_VAL")
BUSY Output BOOL I, Q, M, D, L BUSY= 1: El proceso no ha finalizado aún.

Encontrará información adicional sobre los tipos de datos válidos en "Tipos de datos
(Página 128)".

Parámetro RET_VAL

Código de Explicación
error*
(W#16#...)
0000 No ha ocurrido ningún error.
7000 Primera llamada con REQ = 0: No hay ninguna transferencia de datos activa; BUSY tiene el valor "0".
7001 Primera llamada con REQ = 1: Transferencia de datos disparada; BUSY tiene el valor "1".
7002 Llamada intermedia (REQ irrelevante): Transferencia de datos ya activa; BUSY tiene el valor "1".
80A1 Error en el parámetro de entrada DB_NUMBER:
• El valor del parámetro es "0".
• El valor del parámetro es mayor que el número de DB máximo permitido para la CPU utilizada.
80B1 El DB con el número especificado no existe en la CPU.
80B4 El DB no puede borrarse porque la Memory Card de la CPU está protegida contra escritura.
80B5 El DB no se ha creado mediante "CREATE_DB".
80BB No hay suficiente memoria de carga.
80C3 La función "Borrar un DB" no puede ejecutarse en este momento debido a una escasez temporal de
recursos.
Información Consulte también: Códigos de error comunes para las instrucciones avanzadas (Página 564)
general del
error
* El código de error puede visualizarse en el editor de programas como valor entero o hexadecimal.

Controlador programable S7-1200


556 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.11 Procesamiento de direcciones

9.11 Procesamiento de direcciones

9.11.1 GEO2LOG (determinar la ID de hardware a partir del slot)


La instrucción GEO2LOG se utiliza para determinar el identificador de hardware en base a
una información de slot.

Tabla 9- 225 Instrucción GEO2LOG

KOP / FUP SCL Descripción


ret_val := GEO2LOG( La instrucción GEO2LOG se utiliza para
GEOADDR:=_variant_in_out_, determinar el identificador de hardware
laddr:=_word_out_); en base a una información de slot.

La instrucción GEO2LOG determina el identificador de hardware sobre la base de la


información de slot que se define usando el tipo de datos de sistema GEOADDR:
Dependiendo del tipo de hardware definido en el parámetro HWTYPE, se evalúa la
información siguiente de los otros parámetros GEOADDR:
● Con HWTYPE = 1 (sistema PROFINET IO):
– Solo se evalúa IOSYSTEM. El resto de parámetros de GEOADDR no se toman en
consideración.
– Se emite el identificador de hardware del sistema PROFINET IO.
● Con HWTYPE = 2 (dispositivo PROFINET IO):
– Se evalúan IOSYSTEM y STATION. El resto de parámetros de GEOADDR no se
toman en consideración.
– Se emite el identificador de hardware del dispositivo PROFINET IO.
● Con HWTYPE = 3 (rack):
– Solo se evalúan IOSYSTEM y STATION. El resto de parámetros de GEOADDR no se
toman en consideración.
– Se emite el identificador de hardware del rack.
● Con HWTYPE = 4 (módulo):
– Se evalúan IOSYSTEM, STATION, y SLOT. El parámetro SUBSLOT de GEOADDR
no se toma en consideración.
– Se emite el identificador de hardware del módulo.
● Con HWTYPE = 5 (submódulo):
– Se evalúan todos los parámetros de GEOADDR.
– Se emite el identificador de hardware del submódulo.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 557
Instrucciones avanzadas
9.11 Procesamiento de direcciones

El parámetro AREA del tipo de datos del sistema GEOADDR no se evalúa.

Tabla 9- 226 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


GEOADDR IN/OUT or Variant Puntero a la estructura de tipo de datos del sistema GEOADDR. El tipo
IN ? de datos del sistema GEOADDR contiene la información de slot a partir
de la que se determina la ID de hardware.
Consulte el "Tipo de datos del sistema GEOADDR (Página 563)" para
obtener más información.
RET_VAL OUT or Int Salida de la información de error.
RETURN
?
LADDR OUT HW_ANY Identificador de hardware del conjunto o del módulo.
El número se asigna automáticamente y se almacena en las propiedades
de la configuración hardware.

Para obtener más información sobre los tipos de datos válidos, consulte la "Vista general de
los tipos de datos válidos" en la Ayuda en pantalla de STEP 7.

Tabla 9- 227 Códigos de condición

RET_VAL* Explicación
(W#16#...)
0 No ha ocurrido ningún error.
8091 Valor no válido en GEOADDR para HWTYPE.
8094 Valor no válido en GEOADDR para IOSYSTEM.
8095 Valor no válido en GEOADDR para STATION.
8096 Valor no válido en GEOADDR para SLOT.
8097 Valor no válido en GEOADDR para SUBSLOT.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas.

Controlador programable S7-1200


558 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.11 Procesamiento de direcciones

9.11.2 LOG2GEO (determinar el slot a partir de la ID de hardware)


Utilice la instrucción LOG2GEO para determinar la dirección geográfica (slot de módulo) a
partir de la dirección lógica perteneciente a un identificador de hardware.

Tabla 9- 228 Instrucción LOG2GEO

KOP / FUP SCL Descripción


ret_val := LOG2GEO( Utilice la instrucción LOG2GEO para
laddr:=_word_in_, determinar el slot de módulo pertenecien-
te a un identificador de hardware.
GEOADDR:=_variant_in_out_);

La instrucción LOG2GEO determina la dirección geográfica de una dirección lógica basada


en el identificador de hardware:
● Use el parámetro LADDR para seleccionar la dirección lógica en función del identificador
de hardware.
● GEOADDR contiene la dirección geográfica de la dirección lógica proporcionada en la
entrada LADDR.

Nota
En los casos en los que el tipo HW no admita un componente, se devuelve un número de
subslot para un módulo 0.
Se proporciona un error si la entrada LADDR no direcciona un objeto HW.

Tabla 9- 229 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR IN HW_ANY Identificador de hardware del sistema IO o el módulo. El número se asig-
na automáticamente y se almacena en las propiedades de la CPU o la
interfaz de la configuración del hardware.
RET_VAL OUT Int Código de error de la instrucción
GEOADDR IN_OUT Variant Puntero al tipo de datos del sistema GEOADDR. El tipo de datos del
sistema GEOADDR contiene la información de slot.
Consulte el "Tipo de datos del sistema GEOADDR (Página 563)" para
obtener más información.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 559
Instrucciones avanzadas
9.11 Procesamiento de direcciones

Para obtener más información sobre los tipos de datos válidos, consulte la "Vista general de
los tipos de datos válidos" en la Ayuda en pantalla de STEP 7.

Tabla 9- 230 Códigos de condición

RET_VAL Descripción
(W#16#...)
0000 No hay error
8090 La dirección especificada en el parámetro LADDR no es válida.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas.

9.11.3 IO2MOD (determinar la ID de hardware a partir de una dirección ES)


La instrucción IO2MOD se utiliza para determinar el identificador de hardware del módulo a
partir de una dirección E/S de un (sub)módulo.

Tabla 9- 231 Instrucción IO2MOD

KOP / FUP SCL Descripción


ret_val := IO2MOD( Utilice la instrucción IO2MOD para de-
ADDR:=_word_in_, terminar el slot de módulo perteneciente
LADDR:=_word_out_); a un identificador de hardware.

La instrucción IO2MOD determina el identificador de hardware del módulo a partir de una


dirección E/S (I, Q, PI, PQ) de un (sub)módulo.
Introduzca la dirección E/S en el parámetro ADDR. Si en este parámetro se usa una serie
de direcciones E/S, solo se evalúa la primera dirección para determinar el identificador de
hardware. Si la primera dirección se ha especificado de forma correcta, la longitud para la
especificación de la dirección en ADDR no es relevante. Si se usa un área de direcciones
que abarca varios módulos o direcciones no empleadas, también puede determinarse el
identificador de hardware del primer módulo.
Si no se especifica ninguna dirección E/S de un (sub)módulo en el parámetro ADDR, se
emite el código de error "8090" en el parámetro RET_VAL.

Nota
Entrada de una dirección E/S en SCL
No es posible programar usando la ID de acceso E/S "%QWx:P" en SCL. En este caso, use
el nombre simbólico de la variable o la dirección absoluta en la memoria imagen de proceso.

Controlador programable S7-1200


560 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.11 Procesamiento de direcciones

Tabla 9- 232 Tipos de datos para los parámetros

Parámetro Declaración Tipo de datos Área de memoria Descripción


ADDR IN or IN/OUT ? Variant I, Q, M, D, L Dirección E/S (I, Q, PI, PQ) dentro de un
(sub)módulo.
Asegúrese de que el acceso al segmento no
se usa para el parámetro ADDR. Si fuera así,
en el parámetro LADDR se emiten valores
incorrectos.
RET_VAL OUT or Int I, Q, M, D, L Código de error de la instrucción.
RETURN ?
LADDR OUT HW_IO I, Q, M, D, L Identificador de hardware determinado (direc-
ción lógica) del (sub)módulo E/S.

Para obtener más información sobre los tipos de datos válidos, consulte la "Vista general de
los tipos de datos válidos" en la Ayuda en pantalla de STEP 7.

Tabla 9- 233 Códigos de condición

RET_VAL* Explicación
(W#16#...)
0 No ha ocurrido ningún error.
8090 La dirección E/S especificada en el parámetro ADDR no se utiliza en ningún componente de hardware.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas.

9.11.4 RD_ADDR (determinar las direcciones ES a partir de la ID de hardware)


Use la instrucción RD_ADDR para obtener las direcciones de E/S de un submódulo.

Tabla 9- 234 Instrucción RD_ADDR

KOP / FUP SCL Descripción


ret_val := RD_ADDR( Use la instrucción RD_ADDR para obtener las
laddr:=_word_in_, direcciones de E/S de un submódulo.
PIADDR=>_udint_out_,
PICount=>_uint_out_,
PQADDR=>_udint_out_,
PQCount=>_uint_out_,);

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 561
Instrucciones avanzadas
9.11 Procesamiento de direcciones

La instrucción RD_ADDR determina la longitud y la dirección inicial de las entradas o salidas


en función del identificador de hardware de un submódulo:
● Use el parámetro LADDR para seleccionar el módulo de entradas o salidas en función
del identificador de hardware.
● Los siguientes parámetros de salida se usan en función de si se trata de un módulo de
entradas o salidas:
– En el caso de un módulo de entrada, los valores determinados se obtienen en los
parámetros PIADDR y PICOUNT.
– En el caso de un módulo de salida, los valores determinados se obtienen en los
parámetros PQADDR y PQCOUNT.
● Los parámetros PIADDR y PQADDR contienen respectivamente la dirección inicial de las
direcciones de E/S del módulo.
● Los parámetros PICOUNT y PQCOUNT contienen respectivamente el número de bytes
de las entradas o salidas (1 byte para 8 entradas/salidas, 2 bytes para 16
entradas/salidas).

Tabla 9- 235 Tipos de datos para los parámetros

Parámetro y tipo Tipo de datos Descripción


LADDR IN HW_IO Identificador de hardware del (sub)módulo
RET_VAL OUT Int Código de error de la instrucción
PIADDR OUT UDInt Dirección inicial del módulo de entrada
PICOUNT OUT UInt Número de bytes de las entradas
PQADDR OUT UDInt Dirección inicial del módulo de salida
PQCOUNT OUT UInt Número de bytes de las salidas

Para obtener más información sobre los tipos de datos válidos, consulte la "Vista general de
los tipos de datos válidos" en la Ayuda en pantalla de STEP 7.

Tabla 9- 236 Códigos de condición

RET_VAL Descripción
(W#16#...)
0000 No hay error
8090 El identificador de hardware del módulo en el parámetro LADDR no es válido.
* Los códigos de error se pueden mostrar como valores enteros o hexadecimales en el editor de programas.

Controlador programable S7-1200


562 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL
Instrucciones avanzadas
9.11 Procesamiento de direcciones

9.11.5 Tipo de datos del sistema GEOADDR

Dirección geográfica
El tipo de datos del sistema GEOADDR incluye la dirección geográfica de un módulo (o la
información de slot).
● Dirección geográfica para PROFINET IO:
Para PROFINET IO, la dirección geográfica está compuesta por la ID del sistema
PROFINET IO, el número de dispositivo, el número de slot y el submódulo (si se usa un
submódulo).
● Dirección geográfica para PROFINET DP:
Para PROFIBUS DP, la dirección geográfica consiste en la ID del sistema maestro DP, el
número de estación y el número de slot.
La información de slot de los módulos está depositada en la configuración hardware de cada
módulo.

Estructura del tipo de datos del sistema GEOADDR


La estructura GEOADDR se crea automáticamente si introduce "GEOADDR" como tipo de
datos en un bloque de datos.

Nombre del paráme- Tipo de datos Descripción


tro
GEOADDR STRUCT
HWTYPE UINT Tipo de hardware:
• 1: sistema IO (PROFINET/PROFIBUS)
• 2: dispositivo IO/esclavo DP
• 3: rack
• 4: módulo
• 5: submódulo
Si la instrucción no admite el tipo de hardware, se emite HWTYPE "0".
AREA UINT ID de área:
• 0 = CPU
• 1 = PROFINET IO
• 2 = PROFIBUS DP
• 3 = AS-i
IOSYSTEM UINT Sistema PROFINET IO (0=unidad central en el rack)
STATION UINT • Número del rack si el identificador de área AREA = 0 (módulo central).
• Número de estación si el identificador de área AREA > 0.
SLOT UINT Número de slot
SUBSLOT UINT Número de submódulo. Este parámetro tiene el valor "0" si no hay ningún sub-
módulo o no puede conectarse.

Controlador programable S7-1200


Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL 563
Instrucciones avanzadas
9.12 Códigos de error comunes para las instrucciones avanzadas

9.12 Códigos de error comunes para las instrucciones avanzadas

Tabla 9- 237 Códigos de condición comunes para las instrucciones avanzadas

Código de condición (W#16#....)1 Descripción


8x222 Área demasiado pequeña para la entrada
8x23 Área demasiado pequeña para la salida
8x24 Área de entrada no válida
8x25 Área de salida no válida
8x28 Asignación del bit de entrada no válida
8x29 Asignación del bit de salida no válida
8x30 El área de salida es un DB de solo lectura.
8x3A El DB no existe.
1 Si uno de estos errores se produce cuando se ejecuta un bloque lógico, la CPU se mantendrá en RUN (valor predeter-
minado) o se puede configurar para que pase a STOP. Opcionalmente, puede usar las instrucciones GetError o GetE-
rorID de ese bloque lógico para procesar el error localmente (la CPU se mantiene en RUN) y crear una reacción
programada ante el error.
2 La "x" representa el número del parámetro con error. Los números de parámetro comienzan con 1.

Controlador programable S7-1200


564 Manual de sistema, V4.2.3, 08/2018, A5E02486683-AL

También podría gustarte