Clase #51 - Bloque de Función (FB) en TIA Portal V18: La Base de la Programación Estructurada

 Bloque de Función (FB) en TIA Portal V18: La Base de la Programación Estructurada

Bloque de Función (FB) en TIA Portal V18: La Base de la Programación Estructurada
💡 Importante: Entender la diferencia entre un FB y una FC, y cómo se vincula con su DB de instancia, es crucial para no cometer errores de memoria. Te recomiendo ver el video tutorial completo donde explico visualmente la estructura interna de un FB y su ciclo de vida.

👋 Introducción: Deja de Copiar y Pegar Código

Bienvenido a la Clase #51. Hasta ahora, has escrito lógica que probablemente se repite para cada actuador de tu máquina. Si tienes 10 motores, ¿has copiado la red de control 10 veces? Eso es difícil de mantener y propenso a errores.
El Bloque de Función (FB) es la solución. Es un bloque de programa que tiene memoria propia. Esto significa que puedes escribir la lógica de un motor UNA sola vez dentro del FB, y luego llamar a ese mismo FB 10 veces, cada uno con sus propias variables (velocidad, temperatura, error) almacenadas en su propio Bloque de Datos de Instancia.
En este artículo explicamos la teoría de la "multiinstanciación", pero la demostración de cómo un FB guarda sus datos entre llamadas está exclusivamente en el video tutorial.

🎯 Lo que aprenderás en esta sesión

  1. Diferencia Clave FB vs. FC: Por qué el FB tiene memoria y la FC no.
  2. Instance DB (DB de Instancia): El "maletín" de datos privado de cada llamada al FB.
  3. Parámetros Formales: Entrada (Input), Salida (Output), In/Out y Estática (Static).
  4. Reutilización de Código: Cómo un solo FB controla múltiples equipos idénticos.
  5. Llamada al FB: Cómo invocar el bloque desde el OB1 u otros bloques.

⚙️ Conceptos Clave (Resumen Teórico)

1. El Concepto de "Memoria Propia"
A diferencia de una Función (FC) que es como una calculadora (entras datos, sale resultado, olvida todo), un FB es como un procesador de texto con guardado automático.
  • Cuando llamas a un FB, el sistema operativo le asigna un Instance DB.
  • En ese DB se guardan las variables Static (estáticas) y los valores de InOut.
  • La próxima vez que llames a ese mismo FB (en el siguiente ciclo), recordará lo que pasó en el ciclo anterior.
⚠️ Concepto Crítico: Sin el Instance DB, un FB no puede funcionar. Es obligatorio asignarle un DB (puede ser generado automáticamente por TIA Portal) cada vez que lo llamas.
2. Tipos de Variables en un FB
Tipo de Variable
Símbolo
Comportamiento
Uso Típico
Input
In
Solo lectura. Valor viene de fuera.
Setpoints, sensores, comandos.
Output
Out
Solo escritura. Valor va hacia fuera.
Estado de actuadores, resultados finales.
InOut
InOut
Lectura y Escritura. Persiste en el DB.
Contadores, temporizadores, estructuras complejas.
Static
Stat
Memoria interna privada. No visible desde fuera.
Flags internos, variables temporales que deben recordar valor.
Temp
Temp
Volátil. Se borra al salir del bloque.
Cálculos intermedios rápidos (no usar para lógica de estado).

3. ¿Por Qué Usar FBs en Lugar de Lógica Plana?
Estandarización: Si corriges un bug en el FB, se corrige para los 10 motores que lo usan.
Orden: Tu OB1 principal se vuelve limpio y legible, solo mostrando llamadas a bloques (Motor_1(), Motor_2()).
Encapsulamiento: Proteges la lógica interna. El programador que llama al FB solo necesita saber qué entradas darle, no cómo funciona por dentro.

✅ Checklist de Diseño de FBs

Antes de crear un bloque funcional:
  • Definida claramente la interfaz (qué necesita entrar y qué debe salir).
  • Identificadas las variables que necesitan "recordar" estado (usar Static o InOut).
  • Evitado el uso excesivo de variables Temp para lógica secuencial.
  • Planificada la nomenclatura de los Instance DBs para mantener el orden.
  • Verificado que el FB no depende de variables globales externas (para que sea realmente reutilizable).

🛑 Errores Comunes con Bloques de Función (FB)

Confundir FB con FC: Intentar usar un FB sin asignarle un DB de instancia, o usar una FC cuando necesitas guardar estado (como un temporizador).
Usar Variables Globales Dentro del FB: Si tu FB lee %M10.0 directamente, ya no es reutilizable. Debe usar solo sus parámetros locales.
Olvidar Inicializar Variables Static: Al primer arranque, las variables estáticas pueden tener valores basura si no se inicializan en el Startup OB o en la declaración.
Sobrecargar el Instance DB: Poner arrays gigantes o estructuras innecesarias dentro del FB aumenta el consumo de memoria innecesariamente.
No Documentar la Interfaz: Un FB sin comentarios en sus pines (In/Out) es inútil para otros programadores.

👉 MIRA EL VIDEO PARA VER LA CREACIÓN DE UN FB Y SU LLAMADA MÚLTIPLE CON DIFERENTES INSTANCE DBS

¿Tu código es un caos de redes repetidas?
Es hora de empezar a estructurar. En el video de esta clase (#50) te muestro cómo convertir una red de control de motor en un FB reutilizable en menos de 5 minutos.

🔔 ¡Suscríbete y activa la campanita! En la Clase #52 exploramos las Funciones (FC). Aprenderás cuándo es mejor usar una FC sin memoria para cálculos matemáticos o conversiones rápidas. ¡No te pierdas la comparación directa con los FBs en el video!

Publicar un comentario

0 Comentarios