• Skip to primary navigation
  • Skip to main content

ProgramaciónSiemens

Cursos online de automatización industrial con PLC Siemens

  • Cursos
  • Mi cuenta
    • Mi cuenta
    • Blog
    • Foros
    • Curso de iniciación a la Industria 4.0
    • Curso Express de TIA Portal
    • Curso de WinCC Flexible 2008
    • Crear HMI con OPC y VB.NET
    • Crear HMI con Snap7 y VB.NET
    • Curso de TIA Portal para CPU 1200
    • Curso de Step 7 V5.x
    • Curso de comunicaciones IE y Profinet
  • Contacto

FC o FB ¿Cuál de los dos usar?

por Iñigo Gútiez · 19 Comments

Cuando empiezas a programar tal vez te surjan una duda cuasi existencial… ¿Qué es mejor usar? ¿FC o FB?… pues básicamente, depende.

En general con ambos se pueden hacer lo mismo. Cambia la forma. Pero digamos que no están pensados para lo mismo.

  • Los FC serán ideales para generar resultados que no tengamos que almacenar. Dentro de la automatización lo usaremos en la lógica general de los programas. Pueden ser usados en líneas generales de actuación de las máquinas, secuencias e interrelación entre ellas.
  • Los FB son como los FC, pero vitaminados. No solamente podremos hacer lo que hacemos con los FC sino que además podremos almacenar valores ya que tienen asociados DB. Además podremos usar los temporizadores IEC de forma muy sencilla evitando complicarnos con los temporizadores de S5 para nuestros propósitos. Serán adecuados para el manejo de motores, variadores etc ya que podremos juntar similares funcionalidades bajo el mismo FB usando DB para cada uno de ellos.

FC o FB

Está claro entonces… uso FB siempre y ya está.

Esta es la conclusión a la que fácilmente podrías llegar tras lo expuesto. Antes de dar este paso hay que tener en cuenta que los FB siempre han de tener un DB asociado.

Eso en sí mismo no es un problema, pero puede serlo si el programa es extenso y has de tener muchas funciones para una correcta organización del programa. El uso inecesario de FB hacen que se ocupe memoria de forma innecesaria ya que generarás un DB lo necesites o no.

Si todo lo haces con FB, y el proyecto es suficientemente complejo, tendrás un sinfín de DB. Hay que elegir por tanto los FB en general cuando:

  • El FB controle un actuador o motor y tengas varios del mismo tipo de tal forma que puedas reutilizar el FB no necesitando usar marcas. Esto hace que sea más fácil de mantener y más difícil de cometer errores ya que no necesitarás tener en cuenta qué marcas están usadas y cuales no.
  • Necesitas guardar datos de forma permanente. Qué mejor hacerlo a través de un FB ya que así tienes un DB asociado donde guardar estos datos.
  • Si vas a usar el FB con diferentes motores por ejemplo, y necesitas temporizadores. Puedes usar los temporizadores IEC y usarlos como multiinstancias.

¿Cuándo usaremos los FC entonces?

  • Para planteamientos generales de las aplicaciones, o para actuadores que no necesiten ser reutilizados.
  • Funciones aritméticas, trigonométricas o de otra índole que no necesiten almacenar los datos y que simplemente nos devuelva un valor o que se utilicen marcas globales.

En definitiva, habrá que evaluar cada caso para saber qué usar. Por lo general personalmente uso más los FC que FB, pero dependerá del proyecto en concreto.

Para finalizar adjunto un video en el cual presento las diferencias entre los FB y los FC en ejemplos muy sencillos: un sumador, un totalizador de tiempo y el uso de temporizadores. Ahí quiero mostrarte las diferencias entre ambos para que puedas intuir con más facilidad cuál es el concepto para cada caso.[divider]

Referencias:

  • Difference between FB & FC’s
  • FC o FB,DB
Iñigo Gútiez

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.

Filed Under: Teoría, Tutoriales, Videos Tagged With: AWL FUP KOP Lenguajes, ejemplos, FB, FC, videos, youtube

Reader Interactions

    Deja un comentario Cancelar

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    19 Comentarios

  1. JMM says

    26 enero, 2013 at 23:46

    Hola Íñigo:

    O yo entiendo mal o en el vídeo dices que no se puede utilizar una FC dos veces en el mismo ciclo. Yo siempre he creído que si, supongo que la FC coge la memoria temporal, hace lo que tiene que hacer, deposita los resultados en la memoria de trabajo, y, si es necesario se vuelve a ejecutar, borrando los resultados de la memoria temporal que tenía previamente y usando los que tiene en ese momento. O he entendido mal, o me he perdido algo ¿a qué te refieres diciendo que no se puede usar una FC varias veces en el mismo ciclo?.

    Un saludo.

    Responder
  2. Iñigo Gútiez says

    26 enero, 2013 at 23:59

    Hola,
    A ver, por partes.
    Siempre se pueden hacer varias llamadas al FC o FB, otra cosa es que sea necesario o conveniente. Me explico:

    Si el FC es una función en la que tiene unas entradas y unas salidas, para hacer por ejemplo la suma del ejemplo, por supuesto que puedes hacer tantas llamadas como quieras ya que su trabajo es eso, una función, no repetir código y mediante unas entradas, dar unas salidas.

    Otra cosa es que por ejemplo tengas dividido tu máquina en 10 FC, cada uno con sus llamadas a otros FC y FB. Estos sólo los llamaras una vez por ciclo de scan ya que su función no es la de reutilizar código, sino la de estructurar el código de la máquina dividiendolo en secciones. En este caso, estos FC serán llamados una vez, típicamente desde el OB1 o un OB cíclico.

    Y sí, todas las variables temporales usadas en un FC una vez terminado la ejecución del FC son borradas. Pero OJO, las temporales. Si usas una marca o DB dentro de ese FC no son borrados. De ahí que cuando se usa para reutilizar el código, se usan las temporales salvo que sacrifiques marcas para usarlas como temporales, borrándolas al principio del FC para que al inicio siempre tengan valor nulo. Pero esto es absurdo ya que para eso, pues usas las temporales y no malgastas marcas.

    No sé si he respondido a tu duda. En cualquier caso, sobre qué momento digo lo que comentas?

    Porque desde luego, me he expresado fatal para que me hayas entendido lo que comentas.

    Un saludo y gracias como siempre por comentar.

    Esta semana, más de direccionamiento indirecto ;P

    Responder
    • JMM says

      27 enero, 2013 at 0:24

      Hola de nuevo:

      Es verdad, acabo de hacer un programa con una FC con un arranque paro-marcha, la he llamado tres veces y le he metido diferentes entradas y salidas, probado y funcionando… Los problemas han venido al meterle una temporización para que retrase la puesta en marcha de la salida… Bueno, veo que tus respuestas son rapidísimas, te lo agradezco. Respecto al vídeo, esta tarde he estado viendo varios, si no te importa, mañana lo visualizo otra vez y te lo comento, si no ya no sé ni lo que puedo entender, como te he dicho, a lo peor lo he confundido. Un saludo Íñigo.

      Responder
    • Ana María Comes Gallego says

      4 julio, 2018 at 22:07

      Muchas gracias por tu ayuda!

      Responder
  3. Iñigo Gútiez says

    27 enero, 2013 at 0:31

    Creo que ambos estamos ahora cacharreando…

    Si vas a hacer varias llamadas a un Fc de marcha paro y necesitas temporizar la mejor opción es usar un FB y usar temporizadores IEC (TON y TOF). Los metes en los Stat y listo.

    También se podría usar un FC y pasarle un número de temporizador y aplicar el direccionamiento indirecto. Pero es un poco más cutre y además tienes un problema muy gordo.
    El direccionamiento indirecto tiene un problema: no se ve.
    Es decir, si le pasas el número de temporizador y haces el código bien, funcionará. Pero amigo, el problema va a ser cuando vayas a ver las referencias cruzadas y esos temporizadores que quieres usar aparecen como no usados y entonces un día, dentro de X meses uses uno ocupado sin querer y la lies muy parda.
    Y como con los temporizadores, digo las marcas, por ejemplo.
    Si se van a usar direccionamiento indirectos siempre que se pueda, hay que usar DB porque es algo que has construido tú, y ya ves que está ahí por algo, no como las marcas, que están de serie y si te dice el sistema que no están usadas, pues piensas que no lo están.

    Seguimos en contacto.

    Responder
  4. diego says

    5 mayo, 2013 at 20:34

    Hola estoy programando s7 300, y estoy viendo los FC y FB. Estoy haciendo un FB para el arranque directo de motores. Mi pregunta es en donde se guardan las entradas I0.0, I0.1 y la salida Q0.0 en el mismo DB de instancia?, cuando yo abro el DB de instancia solo veo los datos locales del FB, entonces si tengo 20 motores y llamo 20 veces EL FB de arranque pero con el mismo DB de instancia, igual me corre el programa y no lo he hecho con 20 DB’s de instancia, solo con uno, entonces cuando debo utilizar DB’s de instancia para cada motor?

    Responder
  5. Iñigo Gútiez says

    5 mayo, 2013 at 21:37

    Hola Diego,

    Las entradas y salidas se almacenan en el DB de instancia. Si miras en las STAT deberían estar ahí.
    Lo que ocurre es que si sólo usas entradas y salidas y no usas variables remanentes (STAT), estás actualizando en cada llamada las entradas y salidas, pero conceptualmente NO deberías usarlo así.

    Si no vas a usar mas que variables locales no remanentes, es decir, que no sean necesarias de ciclo a ciclo, usa FC y no FB.

    Un saludo,

    Responder
  6. Gori says

    27 mayo, 2014 at 16:41

    Hola Iñigo, tengo una duda . He creado un fb para controlar motores donde uso unos temporizadores ton. Me gustaría saber cuantas instancias puedo usar de ese fb. Gracias Gregorio.

    Responder
    • Iñigo Gútiez says

      27 mayo, 2014 at 17:32

      En principio no deberías tener de usarlo tanto como quieras limitado a la memoria del PLC, pero dudo que eso sea un limitante.

      Un saludo

      Responder
  7. Rodrigo says

    22 febrero, 2015 at 0:54

    Buenas tardes iñigo, yo creo que para aclarar las dudas de un fb y un fc y db te pido porfavor si puedes explicar las basea para poder utilizarlos (diferencias y aplicaciones), esto seria con un ejemplo ya que las ayudas por internet no son muy claras, gracias

    Responder
    • admin says

      22 febrero, 2015 at 13:59

      En el vídeo hay un ejemplo.
      Saludos

      Responder
  8. Arturo says

    22 febrero, 2015 at 4:26

    Hola

    He programado un fc en el cual dentro tengo una función con timers y de esa combinación tengo, por ejemplo «T1» ,asignado a una Q.0.0, pero en el momento que lo llamé y se está ejecutando y después mando un paro de emergencia, en teoría se desactiva el FC pero los valores de Q0.0 se quedan ya sea en 1 o 0
    Porque no se desactiva la señal de Q0.0 en el momento que mando un paro, además de que mando un reset a los timer? LA SALIDA Q SI SE DESACTIVA SOLO SI TAMBIÉN LE ASIGNO UN RESET

    Responder
    • admin says

      22 febrero, 2015 at 13:59

      Arturo,
      Si desactivas un FC donde se maneja una salida la salida se quedará tal y como esté la ultima vez que se le dio valor. De ahí que se quede en alta.
      Saludos

      Responder
  9. Jesus says

    26 septiembre, 2019 at 4:54

    Hola Iñigo, gusto en saludarte…
    Primero que nada agradezco cada uno de tus articulos, los leo una y otra vez buscando ideas… Gracias…
    Deseo consultarte lo siguiente: el plc S7 1200 posee alguna función que totalice el valor recibido de señal analógica? O debo crearla? Por ejemplo: el flujo instantáneo como señal analógica e ir acumulando el valor de litros a través del tiempo.
    Gracias

    Responder
    • Iñigo Gútiez says

      26 septiembre, 2019 at 7:05

      Que yo conozca, no existe. Tienes que crearla

      Responder
  10. Pedro says

    20 junio, 2020 at 23:04

    Hola Profe, tengo un problema que no llego a resolver, ni comprender, aunque creo que está relacionado con la Máquina de Mealy para el reconocimiento de una secuencia 101. Quiero Implementar una máquina de estados reconocedora de la secuencia de caracteres binarios 101. La entrada la realiza un operario de forma manual a partir de uno de los interruptores de la periferia integrada. La entrada será validada cada 3 segundos.
    Este es la descripción del montaje para practicar con el entorno Simatic Manager:

    El PLC hará el papel de reconocedor y existirá una sola entrada de datos (E 124.0) operada por el propio alumno mediante el interruptor correspondiente con la interpretación natural de nivel alto->1 y nivel bajo->0.

    La validación de los datos estará controlada por el propio autómata y será cada 3 segundos por dato.

    Cada vez que se admita un dato como válido se activará la salida A 124.0 durante un segundo, para avisar al operario de que el dato se ha leído correctamente.

    Al caer la salida el operario tendrá todavía 2 segundos para introducir el nuevo valor.

    Al terminar el proceso el número de secuencias 101 encontradas se almacenarán en el byte AB 125 (y, por tanto, se iluminarán los leds correspondientes en la periferia integrada).

    El ciclo termina cuando se hayan leído un número de caracteres N determinados al inicio del ciclo (por ejemplo N = 10). En ese momento se muestra el número de secuencias detectadas en el byte AB 125.

    El sistema debe contar con un pulsador P_ON disparado por flanco para arrancar la cuenta y un pulsador de RESET para reiniciar el proceso en cualquier momento.

    Hasta que no se pulse RESET no se considerará el ciclo terminado, con lo que la palabra AW
    125 seguirá conteniendo el resultado del último ensayo hasta entonces.

    Para una mejor estructuración de la implementación, se empleará un bloque de datos global para almacenar el tiempo de validación entre datos (3 segundos) y el número de caracteres totales a leer (por ejemplo 10 bits).
    La estructura del bloque es la siguiente:
    • OB1 y OB100: Boque principal y de arranque completo.
    • FC1: Bloque relativo a la parte secuencial del automatismo (activación de etapas).
    • FC2: Bloque relativo a los actuadores.
    • FC3: Bloque relativo a la detección de flancos.
    • FC4: Bloque que lanza el temporizador para la validación de datos.
    • DB1: Bloque de datos global con la información del número de caracteres total de la secuencia de entrada (10 bits) y del tiempo de validación (3s).

    Responder
    • Iñigo Gútiez says

      20 junio, 2020 at 23:19

      Lo siento, pero no resuelvo ejercicios de estudiantes. Se trata de que lo resuelvas el estudiante, no que alguien se lo haga.

      Responder

Trackbacks

  1. Balance del mes de Enero de 2013 - Programación SIEMENSProgramación SIEMENS dice:
    1 febrero, 2013 a las 20:30

    […] FC o FB ¿Cuál de los dos usar? […]

    Responder
  2. FC en Step 7: Qué son y cómo se utilizan. Ejemplo de semáforo en Step7Programación SIEMENS dice:
    6 octubre, 2013 a las 2:10

    […] otra entrada, FC o FB ¿Cuál de los dos usar?  vimos las diferencias sustanciales entre ambos […]

    Responder
  • Aviso Legal y Política de Privacidad
  • Condiciones de Venta
  • Política de cookies
  • Contacto
  • Blog

Copyright © 2021 · Programación Siemens · Todos los derechos reservados

· ¿Quién soy? · Misión, Visión y valores

7 pasos para programar mas ordenado y profesional op

7 pasos para programar más ordenado y profesional

Recibirás de forma TOTALMENTE GRATUITA:

  • Un PDF con los pasos para programar de forma más eficiente, limpia y profesional

PROGRAMACIÓN SIEMENS te informa que los datos de carácter personal que nos proporciones rellenando el presente formulario serán tratados por Iñigo Gútiez Chagartegui como responsable de esta web. La finalidad de la recogida y tratamiento de los datos personales que te solicitamos es para enviarte nuestras publicaciones, promociones de productos y/o servicios y recursos exclusivos. La legitimación se realiza a través del consentimiento del interesado. Te informamos que los datos que nos facilitas estarán ubicados en los servidores de ActiveCampaign, LLC  (proveedor de email marketing), ubicada en EEUU. ActiveCampaign, LLC
 está acogido al acuerdo EU-US Privacy Shield. Puedes ver la política de privacidad de ActiveCampaign en https://www.activecampaign.com/privacy-policy/. El hecho de que no introduzcas los datos de carácter personal que aparecen en el formulario como obligatorios podrá tener como consecuencia que no pueda atender tu solicitud. Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en info@programacionsiemens.com así como el derecho a presentar una reclamación ante una autoridad de control. Puedes consultar la información adicional y detallada sobre Protección de Datos en nuestra política de privacidad.

x