Programación Avanzada
Programación Avanzada
Programación Avanzada
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.
88
Instancias de bloques de función:
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
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:
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.
• 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.
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.
92
INSTANCIAS INDIVIDUALES
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.
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:
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:
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.
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.
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:
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.
Entradas Salidas
I0.0 S1 (NA) Selector Mezcla 1 Q0.0 Y1 Válvula A
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