SUMO AUTOMATION

Blog de divulgación técnica. Artículos basados en FAQs referentes al campo de la automatización industrial.

domingo, 17 de octubre de 2021

PLC - Diferencias entre FB y FC

Según el estándar IEC61131-3, los programas en autómatas se estructuran en distintos elementos de programación.  

PLC

Dos de los más relevantes son las funciones (FC o FUN) y los bloques de función (FB).
Pueden utilizarse en cualquiera de los lenguajes que admite esta norma (LD, ST, etc).
Normalmente, el fabricante proporciona librerías con algunas de estas instrucciones predefinidas para funcionalidades específicas... No obstante, también pueden ser creadas y personalizadas por el usuario.

El caso es que, muchas veces, el programador no sabe si utilizar un elemento u otro.
Esto es lo que pretende esclarecer el presente artículo...

Se presentarán las diferencias entre FBs y FCs para poder saber cual se puede/debe implementar en cada situación, según los requerimientos del código


¿QUÉ SON
?

Conceptualmente, estas estructuras de programa tienen la misma finalidad; encapsular una sección del código (en lo que se llama una librería). 
No dejan de ser "cajas negras" a las que, les das unos datos de entrada y sacan unas variables de salida según el código programado internamente. También hay variables mixtas que pueden ser de entrada-salida.

Normalmente, el principal objetivo es organizar mejor el programa y hacerlo más legible. Facilitando así el diagnóstico en el caso de fallo.

También se utilizan para realizar acciones reiterativas, es decir, trozos de código que se tienen que repetir periódicamente y sale mas a cuenta aunar en una instrucción que se pueda ir llamando cada vez que se requiera.  

Entonces, la utilización de FBs y FCs también reduce y racionaliza el uso de los recursos en la CPU, como la ocupación de memoria. 

¿PRINCIPALES DIFERENCIAS?

La principal diferencia entre bloques de función y funciones, reside en el uso de memoria...

- Función (FC o FUN): Es un bloque lógico sin memoria.

PLC
Instrucción para realizar una suma de dos datos

Sirve para llevar a cabo operaciones simples (como cálculos aritméticos) o ejecutar instrucciones que no requieren un estado de memorización.
No necesita ser instanciada, por lo que no ocupa área de memoria (podría utilizarse ilimitadamente).

Es decir, con una función siempre se está ejecutando exactamente la misma sección de código por muchas veces que la llames en programa... Lo que van cambiando son las entradas/salidas que utiliza ese bloque lógico al ejecutarse. 

Bloque de función (FB): Es un bloque lógico con memoria.

PLC
Instrucción para realizar una temporización a la conexión

Se utiliza para programación que requiere memorizar estados internos de la CPU (como es el caso de una temporización).
Necesita ser instanciado, y es importante no repetir una misma instancia para más de un FB. Al ocupar memoria, su uso está algo más limitado.

En este caso, si que se repite el código tantas veces como utilices el FB. Es por esta razón que requieren la instancia para llamarlo ("DB1" en la imagen ejemplo).
Esto te permite acceder a las entradas/salidas específicas de ese bloque de función desde programa (con la nomenclatura "DB1.ET", por ejemplo).

Resumiendo...
La principal diferencia es que las FCs no tienen instancia de memoria, mientras que los FBs si la requieren.
Esta instancia guarda todos los parámetros de entrada/salida del FB y te permite acceder a ellos tras su ejecución.

¿PRECAUCIONES?

- Si quieres encapsular una sección de código y no estás seguro de que estructura utilizar, el FB es más versátil
Un FB puede hacer lo mismo que una FC (viceversa no). Pero, si se utiliza como tal, se estará consumiendo memoria de programe en vano al instanciarlo. 

- Se pueden dejar entradas/salidas en blanco en un FB.
En un FC es necesario declararlas todas, dado que se requieren para la ejecución (al no tener memoria, no le puede dar un valor inicial a los datos)

- Es posible monitorizar el funcionamiento interno de un FB en tiempo real.
Las FCs no lo admiten, pues realmente solo hay una función que va utilizando los datos de entrada/salida que se le configuran cada vez que se utiliza. 

- Un FC no puede contener FBs en su código. 
Por definición, no tiene sentido que un bloque lógico sin memoria pueda contener otro que si la tiene. No obstante, un FB si puede contener FCs sin restricciones. 

No hay comentarios:

Publicar un comentario