Bloques de función de usuario (FB)
Un Bloque de Función (FB) es un bloque de código reutilizable con memoria de instancia. A diferencia de una FC, un FB retiene los valores de sus variables locales entre llamadas gracias a un DB de instancia asociado.
Crear un FB
- En el árbol de proyecto, clic derecho en la carpeta FB.
- Seleccione Nuevo FB.
- Asigne un ID numérico (evite IDs 10-20, reservados para bloques de sistema).
- Se abre el editor del FB con su grid Ladder propio.
Declaraciones del FB
Los FBs pueden declarar variables en cinco secciones:
| Sección | Dirección | Descripción |
|---|---|---|
| Input | Lectura | Parámetros de entrada. Se asignan al llamar al FB desde OB1/FC. |
| InOut | Lectura/Escritura | Parámetros bidireccionales. El FB puede leer y modificar el valor. |
| Output | Escritura | Valores de retorno del FB. Accesibles desde el programa que lo llamó. |
| Static | Interna | Variables locales con memoria. Retienen su valor entre llamadas. |
| Global | — | Referencias a variables globales del proyecto. |
DB de instancia
Cada vez que se usa un FB en el programa, se requiere un DB de instancia que almacena la memoria del FB para esa invocación específica:
- El DB se crea automáticamente al colocar el FB en el grid.
- Dos llamadas al mismo FB usan DBs de instancia diferentes → cada una tiene su propia memoria.
- El DB de instancia contiene: variables static + inputs + outputs + inouts.
Llamada desde OB1
- En el panel de instrucciones, busque la sección FB de Usuario.
- Arrastre el FB al grid del OB1.
- Se abre un diálogo para asignar:
- DB de instancia: Seleccionar o crear un DB.
- Pines de entrada: Direcciones o constantes para cada Input.
- Pines de salida: Direcciones destino para cada Output.
- Los pines se filtran por tipo de dato para evitar incompatibilidades.
Ejemplo de uso
Suponga un FB1 que implementa un control de válvula con temporización:
- Input:
Abrir(BOOL),Tiempo_Max(INT) - Output:
Valvula(BOOL),Alarma_Timeout(BOOL) - Static:
Timer_Interno(INT),Estado(INT)
Al usar FB1 dos veces en OB1 con DBs diferentes (DB10, DB11), cada instancia controla una válvula independiente con su propia temporización y estado.
Importante: Los IDs 10-20 están reservados para bloques de función del sistema (TON, TOF, TP, CTU, CTD, CTUD, R_TRIG, F_TRIG, MTR_DIR, MTR_INV). No use estos IDs para FBs de usuario.