Vale. Acabas de empezar a trabajar en TIA portal y no sabes muy bien cómo usar los FB y los FC.
Lo entiendo, nadie te lo ha enseñado.
Hasta hoy.
Contenido
¿Qué es un FC y cuándo lo debo usar?
Un FC debes usarlo para:
- Ordenar tu proyecto en partes más pequeñas
- Realizar cálculos o acciones que no necesiten almacenar el resultado entre ciclos de scan
Vayamos por partes:
Usar los FC para ordenar tu proyecto.
No pensarás poner todo tu programa en el OB1, ¿verdad?
Ya sabía que no se te había pasado por la cabeza.
La idea de usar FC para ordenar tu proyecto es ese: distribuir el código en trozos más pequeños y que sean más fácil de gestionar.
Así pues, comenzarás realizando llamadas a FC desde el OB1 (y OB cíclicos) a unos cuantos FC y estos a su vez, si fuera necesario, llamarán a otros FC y FB.
Pongamos un ejemplo: una linea con 5 transportadores, una máquina de procesado y una unidad de descarga, por decir algo.
La forma más normal es que no pongas todo seguido como un paso doble en el OB1, sino que dividas el código en diferentes bloques FC, por ejemplo, un bloque para manejar cada transportador, uno para la maquina de procesado y otro para la unidad de descarga.
Realizar cálculos
Los FC, al igual que los FB admiten que se le pasen argumentos como entradas y dan salidas como resultado del procesado del bloque.
Estos argumentos puedes existir o no. Cuando se usan para distribuir código no lo tendrán, pero cuando se quiere usar para realizar cálculos lo normal es que sí los tengan.
Por ejemplo, imagina que tienes que calcular en varios puntos de un programa áreas diferentes que respondan a la fórmula:
- Área = X^2 + Y^2 +2*X*Y
Tendrías la opción de calcular cada vez que quieras saber el área replicando la fórmula.
Es una opción, aunque no es la idónea.
La opción óptima será usar un FC donde indiques las variables de entrada X e Y, y como salida, obtengas el área.
Fíjate que en ningún momento necesitamos almacenar datos entre ciclos de scan para realizar las operaciones ya que el cálculo se realiza en la llamada del FC que devolverá el valor calculado.
¿Y qué hay de los FB?
El caso de los FB es un poco diferente ya que tiene asociado un DB (instancia) donde se guardan los datos estáticos que se pueden usar entre ciclos de scan. Es decir, el valor de las variables declaradas como static se guardan para que se puedan usar en los ciclos posteriores.
Además, es lo más parecido a las clases en programación orientada a objetos, y me explico.
Siempre pongo el mismo ejemplo, pero espero que se entienda: una clase es el concepto gato.
Como sabes, hay muchos tipos y razas: unos con mucho pelo, otros sin él, otros preciosos de la raza ruso azul como mi Yuri (menuda vidorra que se pega el tio).
Bien, pues la clase sería el concepto gato con variables que determinan sus características. Pero solo las variables, no los valores de estas. Es decir, color o colores, peso, género etc.
Una instancia de una clase gato sería mi gato por ejemplo. Yuri tiene una serie de características que lo diferencia de cualquier otro gato de tal forma que solo hay uno (al menos en este universo).
Bien, pues esas características que lo hacen especial, en el FB se guardarían en el DB asociado, y de ahí que se llame de instancia. Porque guarda los valores concretos de una instancia particular.
Así, volviendo al ejemplo del que hablábamos de los transportadores, podríamos crear la clase transportador (con sus características y variables) y posteriormente realizaremos 5 llamadas a esta clase con 5 DB diferentes , cada uno de ellos, para una instancia de transportador.
Así, cada DB guardará la información exclusiva de cada transportador.
La estructura de estos DB serán todos iguales, pero no contendrán los mismos valores (o no tiene por qué).
¿Se pueden usar si no los quiero usar como clase?
También puedes usar los FB aunque no vayas a reutilizar el código y lo vayas a usar por tanto como clase.
Es más raro de ver, pero es factible. Personalmente no lo uso, pero lo he visto usar.
Lo típico es por ejemplo si quieres realizar una secuencia de pasos. Puedes integrarlo todo en un FB usando variables static en vez de marcas.
Como digo, poder se puede, está bien, pero a mi personalmente no me gusta y no es habitual ver usarlo de esta forma.
¿Entonces, cómo los uso?
Resumiendo, mi recomendación es:
- Para estructurar y distribuir el programa: FC, siempre.
- Para realizar cálculos numéricos o de otro tipo que no necesiten almacenar los datos entre ciclos de scan: usa FC.
- Para controlar parte de maquinas, variadores etc que sean iguales: creas un FB y generas diferentes instancias (llamadas) a este FB con un DB diferente para cada llamada.
¿Lo vemos en un vídeo?
El vídeo es un poco viejo, pero los ejemplos creo que son claros aunque estén programados en Step 7 clásico.
En TIA Portal, la forma de proceder sería la misma, pero con el nuevo programa.
¿Te ha quedado claro?
Espero que te haya podido solucionar las dudas que puedas tener entre usar FC o FB.
Si aún así, no te ha quedado claro, deja tu duda en los comentarios.
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
3 Comentarios
Muchas gracias viejo! Me ha quedado clara la explicación. Espero ahora poder llevarlo a la practica, bueno… Para eso es la práctica :v Mil gracias!
SI QUIERO USAR UN FC O UN FB DE FORMA CONDICIONAL EN LA ENTRADA EN QUE PASA CON LAS MARCAS Y LAS SALIDAS QUEDAN PILLADAS ? ES DECIR ACTIVADAS PERO YO NO QUIERO ESO
SOLUCIÓN LES PONGO LA CONDICIÓN DENTRO A TODO
Lo siento, pero no he entendido nada.