Programación Avanzada

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

7.

4 FUNCIONES, BLOQUES DE FUNCIÓN Y BLOQUES DE DATOS


FUNCIONES FC
Una función contiene un programa que se ejecuta cada vez que la función es llamada por
otro bloque lógico.
Las funciones (FC) son bloques lógicos sin memoria. Los datos de las variables
temporales se pierden tras haberse procesado la función. Los datos temporales no se
almacenan. Para almacenar los datos de forma permanente es preciso asignar el valor de salida
a una posición de memoria global, p. ej. al área de marcas o un DB global.´
Las funciones se pueden utilizar p. ej. para los siguientes fines:
• Contienen instrucciones a modo de subrutinas.
• Devolver valores de función al bloque que llama, p. ej. en funciones
matemáticas
• Ejecutar funciones tecnológicas, p. ej. controles individuales con operaciones
lógicas binarias
Una FC no tiene ningún bloque de datos instancia asociado (DB). La FC usa la pila de
datos locales para los datos temporales utilizados para calcular la operación.
Una función se puede llamar varias veces en diferentes puntos de un programa. Esto
facilita la programación de funciones complejas que se repiten con frecuencia.

BLOQUES DE FUNCIÓN FB

Los bloques de función contienen subprogramas que se ejecutan cada vez que un bloque
de función es llamado por otro bloque lógico.
Los bloques de función son bloques lógicos que depositan sus valores de forma
permanente en bloques de datos de instancia, de modo que siguen disponibles tras procesar el
bloque.

Los parámetros de entrada, salida y entrada/salida se depositan de forma permanente en


bloques de datos de instancia. Gracias a ello, continúan disponibles tras el procesamiento
del bloque. Por este motivo, se conocen también como bloques con memoria.
Los bloques de función se utilizan en tareas que no se pueden realizar con funciones:

• Cuando son necesarios temporizadores y contadores.


• Cuando hay que almacenar información en el programa.
• Por ejemplo una preselección del modo de operación con un pulsador.
Un bloque de función también se puede llamar varias veces en diferentes puntos de un
programa. Esto facilita la programación de tareas complejas que se repiten con frecuencia.

88
Instancias de bloques de función:

La llamada de un bloque de función FB se denomina instancia. A cada instancia de un


bloque de función se asigna un área de memoria que contiene los datos que utiliza el bloque de
función. Esta memoria es proporcionada por bloques de datos DBs que son creados
automáticamente por el software.

Ejemplo instancia: La figura siguiente muestra un OB que llama un FB tres veces, utilizando un
bloque de datos diferente para cada llamada. Esta estructura permite que un FB genérico controle
varios dispositivos similares (p. ej. motores), asignando un bloque de datos instancia diferente a
cada llamada de los distintos dispositivos. Cada DB instancia almacena los datos (p.ej. velocidad,
tiempo de aceleración y tiempo de operación total) de un dispositivo en particular.

La memoria también puede estar disponible para varias instancias como multiinstancia
en un bloque de datos.

TIPOS DE PARAMETROS

Se pueden declarar los tipos de parámetros siguientes:

 Input, Output, InOut y Ret_Val: estos parámetros definen las variables de entrada, las
variables de salida, variables entrada-salida y el valor de retorno del bloque lógico. El
nombre de la variable introducida en este punto se emplea de forma local durante la
ejecución del bloque lógico. Normalmente, no se emplea el nombre de variables globales
en la tabla de variables.
 Estáticos (solo FBs): las variables estáticas se utilizan para almacenar resultados
intermedios estáticos en el bloque de datos instancia. Los datos estáticos se retienen
hasta que se sobrescriben, lo cual puede ocurrir después de varios ciclos. Los nombres
de los bloques, los cuales se llaman en este bloque lógico como multiinstancia, también
se almacenan en los datos locales estáticos.
 Temp: estos parámetros son variables temporales que se emplean durante la ejecución
del bloque lógico.

89
Parámetros de bloque que forman la interfaz del bloque para la llamada en el programa:

Tipo Denominación Función Disponible en


Funciones, bloques de
Parámetros de Parámetros cuyos valores lee el
Input función y en algún
entrada bloque.
bloque de organización
Parámetros de Parámetros cuyos valores escribe el Funciones y bloques de
Output
salida bloque. función
El bloque lee el valor de estos
Parámetros de parámetros al efectuar la llamada y lo Funciones y bloques de
InOut
entrada/salida vuelve a escribir en ellos tras la función
ejecución.

Datos locales que sirven para almacenar resultados intermedios:

Tipo Denominación Función Disponible en


Variables que sirven para almacenar
Funciones, bloques de
Datos locales resultados intermedios temporales.
Temp función y bloques de
temporales Los datos temporales se conservan
organización
solo durante un ciclo.
Variables que sirven para almacenar
resultados intermedios estáticos en
Datos locales el bloque de datos de instancia. Los
Static Bloques de función
estáticos datos estáticos se conservan hasta
que se vuelven a escribir, también a
lo largo de varios ciclos.

Nota: Las Funciones FC o Bloques de Función FB con parámetros, que se pueden llamara varias
veces en nuestro programa se les denomina plantillas.

Precauciones y restricciones usando plantillas de funciones FC:

• Si se utiliza enclavamiento bien con puertas lógicas o Set y Reset en sus diferentes
formas, la marca o salida a utilizar debe ser un parámetro InOut en la función.

90
• En el uso de flancos, la marca de flancos debe ser un parámetro InOut.

• Si se utilizan temporizadores o contadores deben ser parámetros InOut pero además se


deben crear los bloques de datos individuales previamente, se crearán tantos DBs como
temporizadores o contadores se necesiten.

91
BLOQUES DE DATOS GLOBALES

Al contrario que los bloques lógicos, los bloques de datos no contienen instrucciones,
sino que sirven para almacenar datos de usuario.
Por tanto, los bloques de datos contienen datos variables, con los que trabaja el
programa de usuario.
Los bloques de datos globales almacenan datos de usuario utilizables desde todos los
demás bloques.
El tamaño máximo de los bloques de datos varía en función de la CPU. La estructura de
bloques de datos globales puede definirse a discreción.
Algunos ejemplos de aplicación son:
✓ Guardar la información en un sistema de almacenamiento. "¿Dónde está cada
producto?"
✓ Guardar recetas de determinados productos.

Todo bloque de función, toda función o todo bloque de organización puede leer datos de
un bloque de datos global o escribir datos en él. Estos datos se conservan en el bloque de datos
incluso al cerrarlo.

BLOQUES DE DATOS DE INSTANCIAS Y MULTIINSTANCIAS


La llamada de un bloque de función FB se denomina instancia. A cada llamada de un
bloque de función con transferencia de parámetros se asigna un bloque de datos de instancia
que sirve de memoria de datos. En él se depositan los parámetros actuales y los datos estáticos
del bloque de función.
El tamaño máximo de los bloques de datos instancia varía en función de la CPU. Las
variables declaradas en el bloque de función determinan la estructura del bloque de datos de
instancia.

Un bloque de datos global y un bloque de datos de instancia pueden estar abiertos


simultáneamente.

Utilización de instancias individuales y multiinstancias:

Los bloques de datos de instancia pueden asignarse como se indica a continuación:


✓ Llamada como instancia individual: Un bloque de datos de instancia propio por
cada instancia de un bloque de función.
✓ Llamada como multiinstancia: Un bloque de datos de instancia para varias
instancias de uno o de varios bloques de función

92
INSTANCIAS INDIVIDUALES

Por instancia individual se entiende la llamada de un bloque de función FB al que está


asignado un bloque de datos de instancia propio.
Si se crea el bloque de función según las normas de los bloques estándar, dicho bloque
podrá ser llamado varias veces. No obstante, en cada llamada como instancia individual debe
asignar otro bloque de datos de instancia.

Ejemplo de instancias individuales:


La figura siguiente muestra el control de dos motores con un bloque de función FB10 y dos
bloques de datos diferentes:
Los diferentes datos de cada uno de los motores (p. ej. número de revoluciones, tiempo de
aceleración, tiempo total de servicio) se almacenan en los distintos bloques de datos de instancia
DB10 y DB11.

OB1

FC1
Llamada FC1 DB10
Llamada FB10 con
FB10 DB de instancia 1ª
instancia DB10
Motor 1 llamada datos
para el control del
motor 1.
motor 1.
Llamada FB10 con
instancia DB11 DB11
para el control del FB10
DB de instancia 2ª
motor 2. Motor 2
llamada datos
motor 2.

Nota: Algunos comandos como temporizadores y contadores se comportan como bloques de función.
Si son llamados, representan instancias y necesitan un área de memoria asignada, p. ej. en forma de
un bloque de datos de instancia.

MULTIINSTANCIAS

Es posible que, debido al espacio de memoria de las CPU utilizadas, solo quiera o pueda
destinar una cantidad limitada de bloques de datos para datos de instancia.

Si en su programa de usuario, en un bloque de función son llamados otros bloques de


función, temporizadores, contadores, etc. ya existentes, entonces puede llamar a estos otros
bloques de función sin DB de instancia propios (es decir, adicionales).
Seleccione simplemente Multiinstancia en las opciones de llamada:

93
Notas: Las multiinstancias ofrecen a un bloque de función FB que ha sido llamado la posibilidad de
almacenar sus datos en el bloque de datos de instancia del bloque de función que llama.
El bloque que debe ser siempre un bloque de función FB.
Esto permite concentrar los datos de instancia en un bloque de datos de instancia y aprovechar mejor
el número de DBs disponibles.
Esto debe hacerse siempre que el bloque que llama deba seguir utilizándose como bloque estándar.

Ejemplo de multiinstancia:

La siguiente imagen muestra la llamada de un contador de tipo CTUD (contador


ascendente y descendente) que es llamado dos veces.
Los distintos datos de ambos contadores se guardan como multiinstancias diferentes en
el bloque de datos de instancia DB1 del bloque de función invocante FB1.

OB1
Llamada DB1
FB1
FB1 con DB de
Llamada
Contador 1
Contador 1
para FB1. tipo CTUD.
DB1. como
Aquí están
multiinstancia.
disponibles el
contador 1 y el
Llamada Contador 2
contador 2 como
Contador 2 tipo CTUD.
multiinstancia.
como
multiinstancia.

Ejemplo de multiinstancia:
La figura siguiente muestra cómo varios bloques de función diferentes depositan sus
datos en un bloque invocante. El FB_pieza llama sucesivamente el FB_rejilla, el FB_troquel y el
FB_cinta. Los bloques llamados depositan sus datos en el DB_pieza, que es el bloque de datos
instancia del bloque que llama.

94
Ejemplo de multiinstancia:

Un bloque de datos instancia para varias instancias de un bloque de función


La figura siguiente muestra cómo un bloque de función, que se llama en varias instancias,
deposita los datos de todas las instancias en un bloque de datos instancia.

El bloque de función FB_motores llama tres instancias del FB_motor. Las instancias son
"Motor_1", "Motor_2" y "Motor_3". Para cada llamada se utilizan diferentes datos de instancia.
Sin embargo, todos los datos de instancia se almacenan en un único bloque de datos instancia.

95
Ejemplo de aplicación de una Plantilla de Función FC:
Vamos a definir una función “Matemática” que podemos utilizar todas las veces que queramos.
Tenemos dos números A y B, primero se suman después se multiplican por 10 y finalmente se
dividen por 2.
Pulsar en Agregar nuevo bloque en dispositivos.

Definimos las variables según la siguiente imagen:

Para hacer esta función vamos a utilizar las instrucciones matemáticas y trabajaremos con
enteros:
ADD (sumar), MUL (Multiplicar) y DIV (dividir).

96
Una vez creada la función Matematica [FC1] vamos a Main (OB1) y la llamamos:

Introducimos las entradas y salidas, después la llamamos otra vez y hacemos lo mismo, es
decir trabajamos dos veces con esta función:

97
El reultado lo vemos, en la tabla de observación la hemos forzado MW0 a valor 100 y la MW2 a
200.

98
Ejemplo de aplicación de una Plantilla de Bloque de Función FB:
Vamos a definir un bloque de función FB ‘Reloj de pulsos’ que me active un bit un tiempo ON
y desactive un tiempo OFF estos tiempos serán del valor que queramos.
Pulsar en Agregar nuevo bloque en dispositivos.

Definimos Variables en el FB:


Nombre Uso Tipo
Activar Input Bool
Tiempo_ON Input Time
Tiempo_OFF Input Time
Salida Output Bool

99
En temporizadores seleccionamos el TON. En la ventana del temporizador lo denominamos
Tempo_ON es una multiinstancia y pulsamos aceptar.

Creamos otro temporizador TON que lo llamaremos Tempo_OFF y asignamos las consignas
de tiempos a cada temporizador que son las variables declaradas tipo Time.

100
El programa a introducir en el FB es el siguiente:

Una vez creado el bloque de función FB vamos a Main (OB1) y lo llamamos:

Se creará el DB1 que es el Reloj_Pulsos_DB.

101
Introducimos 1 segundo para Tiempo_On, 2 segundos para Tiempor_OFF, I0.0 para activar,
Q0.0 para salida por ejemplo. Así tendremos un reloj de pulsos Q0.0 se activa 1 segundo y
desactivada 2 segundos.

El bloque de función lo hemos llamado una vez, pero podemos llamarlo tantas veces como
queramos, cada vez que lo llamemos se creará un nuevo DB de datos.

102
Ejemplo de aplicación de un Bloque de Datos Global DB:

Tenemos un proceso idéntico para realizar tres tipos de mezclas de dos productos.
En ese proceso, se hace una mezcla de una cantidad del producto A con otra cantidad de otro
producto B durante un tiempo determinado.
Al accionar un pulsador de inicio de mezcla se abren las dos electroválvulas A y B que dan paso
a los productos y se pone en marcha el mezclador. Según van pasando los tiempos, se cierra la
válvula A, se cierra la válvula B y se para el mezclador.

Mezcla 1 (DB1) Mezcla 2 (DB2) Mezcla 3 (DB3)


Tiempo producto A 5 segundos 7 segundos 8 segundos
Tiempo producto B 8 segundos 5 segundos 8 segundos
Tiempo Mezclador 12 segundos 10 segundos 15 segundos

Entradas Salidas
I0.0 S1 (NA) Selector Mezcla 1 Q0.0 Y1 Válvula A

I0.1 S2 (NA) Selector Mezcla 2 Q0.1 Y2 Válvula B

I0.2 S3 (NA) Selector Mezcla 3 Q0.2 KM1 Mezcladora

I0.3 S4 (NA) Pulsador Iniciar

85

103
Para ello necesitamos crear los tres bloques de datos globales DB1, DB2 y DB3.

86

104
Después creamos una función Mover_Datos [FC1] cargamos los datos de los temporizadores
de los tres DBs en tres dobles palabras MD100, MD104 y MD108 tipo time de 32 bits.

105
En el Main [OB1] llamamos a la FC1 y con el pulsador iniciar arrancamos los tres
temporizadores:

106
107

También podría gustarte