PDA

Ver la versión completa : Diferencias entre los Bloques FC Y FB en Step 7



PICPLC
17/10/2011, 17:20
Saludos. Amigos de verdad he estado leyendo y haciendo pruebas pero he llegado a las siguientes conclusiones entre los FC y FB pero no se si estoy claro:

Un FB es un bloque de Funcion donde puedo crear una subrutina que me servira para utilizarla varias veces con diferentes datos (Parametros actuales). Como el ejemplo del que se habla mucho que es controlar varios motores con la misma logica. Para esto el FB contendra la logica de control y a este FB estaran asociados varios DB instancias que es la memoria de dichos FB, donde estaran los parametros formales, es decir, las variables utilizadas dentro del FB se almacenaran en estos DB. Con esto, puedo tener varios DB de Instancias que los puedo usar con dicho FB. Por ejemplo controlar varios motores.

Estos DB de instancias dan la ventaja de aprovechar mejor la memoria del PLC y de no tener la obligacion de definir parametros actuales de salida ya que puedo basarme en los parametros formales de la FB almacenados en el DB de instancias.


Ahora un FC es un bloque de funcion que no tiene memoria, es decir lo que pase con sus variables no se almacena. Pero los parametros actuales puedo utilizarlos con bloques de datos globales e igualmente puedo controlar ejemplo varios motores, simplemente el parametro actual de salida es obligatorio porq los FC no almacenan datos.


Entonces la unica diferencia que les veo es el DB de instancias. Veo que con ambas puedo hacer una subrutina y ejecutarla varias veces por ejemplo para varios motores.

Veo la ganancia es basada en mejor organizacion con los DB de instancias, pero las dos hacen lo mismo.

Por eso escribo todo esto den por favor sus opiniones y si me pueden aclarar mejor esto se los agradezco....

Saludos...

Txispo
17/10/2011, 20:54
Hola,
la diferencia, como apuntas, es que los FBs guardan en el DB de instancia los datos estáticos de una ejecución a otra.
Es cierto que eso lo puedes hacer utilizando parámetros en una FC (por ejemplo, guardando en una marca los datos que te interesen), pero con una FB queda mejor organizado y es mucho más portable (no tienes que andar buscando qué marcas tengo disponibles en caso de que vayas a reutilizar el programa en otro caso).

Por otro lado, el concepto de multiinstancia (declarar en una FB un dato estático que sea una estructura igual que el DB de instancia de otro FB más pequeño) te permite organizar el programa de una forma más sencilla (al menos, en mi opinión).

Un ejemplo típico es el uso de temporizadores IEC: No tienes que andar pensando qué temporizadores me quedan libres para usar tu programa en otro sitio. Simplemente utilizas por ejemplo el SFB4 (TON), instanciándolo las veces que te haga falta, y el límite es sólo la memoria que tengas para generar DBs de instancia....

Usando dos multiinstancias de la SFB4, podrias generarte un FB (por ejemplo, FB100) que genere por ejemplo ondas cuadradas para intermitencias...
Así, no tienes que pensar en los timers que estas usando. Simplemente generas un DB de instancia para tu FB100 cuando lo necesites y tantos como necesites..

JFREY1504
18/10/2011, 13:06
Hola Txispo

Me interesa mucho lo que comentas de:

Un ejemplo típico es el uso de temporizadores IEC: No tienes que andar pensando qué temporizadores me quedan libres para usar tu programa en otro sitio. Simplemente utilizas por ejemplo el SFB4 (TON), instanciándolo las veces que te haga falta, y el límite es sólo la memoria que tengas para generar DBs de instancia....

Usando dos multiinstancias de la SFB4, podrias generarte un FB (por ejemplo, FB100) que genere por ejemplo ondas cuadradas para intermitencias...
Así, no tienes que pensar en los timers que estas usando. Simplemente generas un DB de instancia para tu FB100 cuando lo necesites y tantos como necesites.

Nunca he realizado nada así y me interesa porque yo sería de los que utilizaría temporizadores e iría mirando los que me quedarían.

Puedes desarrollar un poco más la explicación muchas gracias.

Txispo
18/10/2011, 18:02
Supón que quieres una FB100 con una salida BOOL, que cambie de TRUE a FALSE con una cadencia que tu quieras.
Vamos a usar la SFB4 "TON" como multiinstancia dentro de la FB100, para poner dos temporizadores con retardo a la conexión en cascada con realimentación negativa (vamos, un generador de onda rectangular de toda la vida)

Bueno, pues abres una nueva FB, y en la interfaz de llamada (donde declaras los parámetros) declaras una salida (OUT) tipo BOOL llamada SALIDA, y dos entradas tipo TIME (ojo, no S5TIME, sino TIME) llamadas TIEMPO_TRUE y TIEMPO_FALSE.
* El tipo de datos TIME es en realidad un número de 32 bits que contiene el número de milisegundos establecido, aunque la sintaxis es, por ejemplo, T#1s.

En el área de datos STAT, defines dos variables, llamadas TEMPO1 y TEMPO2, las dos de tipo SFB4. Al hacer esto, cada una de esas variables es una estructura de datos idéntica a un DB de instancia del SFB4...

A esas instancias se las puede llamar directamente dentro del FB con CALL #TEMPO1, sin necesidad de poner el DB, puesto que ya estás especificando que son instancias y no la FB original....

Necesitarás también algun temporal (TEMP), por ejemplo AUXBOOL_1, tipo BOOL
Así que puedes hacer lo siguiente:

AN #TEMPO2.Q // La negación es necesaria para hacer la realimentación negativa: La entrada del primer timer es
= #TEMPO1.IN // la negada de la salida del segundo

CALL #TEMPO1
IN:=
PT:=#TIEMPO_FALSE
Q :=#SALIDA
ET:=

A #SALIDA
= #AUXBOOL_1 // El parámetro IN de la SFB4 no admite una variable OUT. Por eso uso #AUXBOOL_1 como auxiliar


CALL #TEMPO2
IN:=#AUXBOOL_1
PT:=#TIEMPO_TRUE
Q :=
ET:=


La llamada de esta FB seria algo así
CALL FB 100 , DB100
TIEMPO_TRUE :=T#5S
TIEMPO_FALSE:=T#2S
SALIDA :=M20.0

Ojo: si tu PLC tiene tiempos de ciclo grandes, ten cuidado con la precisión de estos temporizadores IEC

euclides
26/10/2011, 15:15
Como se puede traducir en KOP