Funciones en PLC Siemens (FC en Step 7) con ejemplo de semáforo

¿Qué son los FC en Step 7?

fc en step 7

Las funciones en PLC Siemens son similares a las funciones en otros lenguajes de programación. En los FC en Step 7 se hace la llamada con unas variables de entrada y tras su ejecución nos devuelve unos valores para las variables de salida. Nada nuevo en el firmamento.

Pero los FC en Step 7 no se usan exclusivamente para calcular una salida, sino para la la organización del programa dentro del proyecto. Es decir, se realizarán llamadas a los FC sin valores de entrada ni valores de salida si bien adicionalmente puede que se usen las variables temporales para uso interno dentro del FC.

FC Vs. FB

En otra entrada, FC o FB ¿Cuál de los dos usar?  vimos las diferencias sustanciales entre ambos bloques.

El FC en Step 7 en general se usa más que los FB por par de razones: no necesita asociar un DB (y por tanto ahorras memoria y es más limpio el programa) y no siempre es necesario la re-utilización del código. Si es necesario almacenar datos, podemos hacerlo en marcas o en DB globales.

Por tanto, los FC en Step 7 no presentan grandes desventajas frente a los FB más allá que los FB son para una programación orientada a objetos, en los que el bloque FB represente un objeto genérico (por ejemplo, un transportador o un variador) y se pueda reutilizar ese bloque infinidad de veces a lo largo del programa con la peculiaridad de necesitar almacenar datos de esos objetos. En este caso, sí que el FB es más indicado que el FC.

Muy bien, pero ¿qué vamos a ver esta semana?

Evidentemente algo tenemos que hacer porque definir un poco lo que hace un FC de poco o nada sirve si no avanzamos en el conocimiento de las funcionalidades de los PLC de Siemens, que es de lo que se trata.

Como habrás visto en el título vamos a realizar un ejemplo de semáforo en Step 7. Normalmente este ejemplo es de los primeros que se hacen con temporizadores… pero ese ejemplo lo vamos a dejar para más adelante, cuando veamos los temporizadores de S7.

Hoy lo vamos a hacer mediante una función y contando tiempo, que también sabe muy bien el PLC. Ya vimos en su día mediante la entrada Temporizadores en Step 7:manejo y creación  que hay varias formas de crear temporizadores, y una de ellas es contar tiempos de ciclo.

¿En qué va a consistir el ejemplo del semáforo?

Básicamente vamos a tener un semáforo para los vehículos rodados el cual va a tener sus tres colores (rojo, verde y ámbar) y otro para los peatones de color rojo y verde.

Además, el verde parpadeará cuando se vaya a acabar el tiempo en verde y tendrá un botón de solicitud que si es pulsado, cambiará a verde para los peatones previo paso del asociado a los vehículos por el amarillo. La pulsación del botón hará que se ilumine el letrero de solicitud que se mantendrá iluminado hasta que se ponga en verde para el peatón.

¿Qué herramientas vamos a necesitar para crear este FC en Step 7?

Para realizar este ejemplo vamos a ver algunos conceptos nuevos en Step 7 como son:

[unordered_list style=”bullet”]

  • Comparación
  • Transferencia
  • Conversión
  • Marcas de ciclo

[/unordered_list]

Durante las explicaciones del vídeo vas a poder ver cómo usar estos elementos en nuestro ejemplo de FC en step 7, que como verás son casi triviales. El único que tiene un poco más de miga es el de conversión ya que sirve para tomar una variable y pasarla a otra variable de otro formato. Me explico.

No es lo mismo tener un “-2″ en entero, que un “-2″ en doble entero, lo mismo que no es que tener un “-2″ en real. Para empezar, porque en entero ocupa un word mientras que en doble entero y en real ocupan 4 bytes (doble word). Para continuar, porque en real, no tienes un “-2″, sino que tienes un “-2.0″, que es igual, pero no es lo mismo que dirían Martes y Trece.

Cada tipo de variable además de ocupar una serie de bytes, (2, 4 o los que sean) tienen un formato en particular (hay que poner la mantisa, el signo etc), por lo que para poder hacer operaciones matemáticas entre dos variables, tienen que estar en el mismo formato ya que sino, pueden pasar dos cosas:

[unordered_list style=”bullet”]

  • En FUP o KOP no te dejará realizar la operación matemática ya que no son variables con el mismo formato.
  • En AWL sí que podrás, pero la que puedes montar con el PLC si no lo haces bien la recordarás durante tiempo.

[/unordered_list]

Como nosotros estamos empezando y estamos programando nuestro PLC en KOP, no vamos a poder comenter errores a la hora de sumar, ya que el propio Step 7, no nos lo va a permitir.

Finalmente, sobre la marca de ciclo puedes encontrar más información además de en el vídeo en 3 formas de crear marcas cíclicas en Step 7

Vamos a ver el vídeo para finalizar donde crearemos nuestro proyecto en WinCC  y vamos a poner los requerimientos y dar con la solución.

¿Qué te ha parecido?

Como siempre me gustaría saber tu opinión. La explicación del Fc no es que me haya quedado de Oscar, pero espero que con el proyecto que te adjunto más abajo puedas entenderlo tras dedicarle un ratillo.

Como siempre para apoyar a la causa tan sólo pedirte que la próxima vez que vayas a comprar material eléctrico pienses en mi, y  valores la posibilidad de comprar en www.masvoltaje.com a través de esta página ya que como sabes así me ayudas a mantener el blog.

[unordered_list style=”bullet”]

[/unordered_list]

31 Comentarios

  1. Hola Íñigo:

    En clave de humor. Me ha gustado eso de “la que puedes montar con el PLC si no lo haces bien la recordarás durante tiempo”, en todo caso, y recordando una de tus anteriores entradas, me alegro que ya dejaras claro lo de que “no vamos a crear un agujero espacio-tiempo” con el PLC, pensándolo bien, esto me permite trabajar más tranquilo con el PLC, sabiendo que no voy a ser absorbido por él en cualquier momento…

    Saludos

  2. jejeje… hoy en día todas las precauciones son pocas..
    Da gusto verte comentando de nuevo por aquí.
    Saludos

  3. Otra mas de tus entradas magistrales al blog, teniendo toda la documentación que estás aportando van a salir programadores de automatismos de debajo de las piedras!

    Un saludo y enhorabuena!

  4. Excelente trabajo Iñigo.. Yo e programado en Allen Bradley…, pero ahora estoy empezando en Siemens y tu blog me esta sirviendo de maravillas.. Bendicioness…

  5. hola Iñigo

    buenisima la entrada.

    Perticularmente haces ver como si programar fuese un juego, me refiero a la parte de la conexion con el WinCc.

    un saludo

    Andres

  6. Hola Andrés.
    No lo es, pero casi. Si te gusta programar y diseñar, WinCC efectivamente es un sitio también donde disfrutar con lo que haces.
    Las pantallas que hago en los ejemplo son muy simples porque por un lado no es el objetivo dejarlas como si fuesen una obra de arte y por otro, el Wincc (o cualquier otro HMI) es una parte que es fundamental pero muy laboriosa. Lleva realmente muchas horas dejar las pantallas bonitas y funcionales.
    Recuerdo que en el último gran proyecto que desarrolle en mi trabajo, a un compañero y a mi nos llevó una tarde cerca de 2h elegir simplemente los iconos de la aplicación.

    Saludos

  7. Hola, me falta el apartado de hmi en el step 7, que puedo hacer?

  8. y ya de paso, quiero empezar a crear mi propia librería con bloques que en el futuro pueda reutilizar, he conseguido crear la librería pero no soy capaz de insertar en ella los bloques que creo, como puedo hacer?

  9. Hola, seguro que metí la pata, cuando haces click en nuevo, aparece por defecto la opción de crear un proyecto, ahí puedes cambiarlo y elegir librería, le asignas un nombre, y te crea un icono de librería junto con las que vienen por defecto con el administrador simatic.
    Mi idea era, crear una librería propia en la que guardar los bloques que pueda en el futuro reutilizar, pero una vez creada no me permite insertar bloques en ella.
    Seguro que no es así como funciona o que no se puede, XDDD

    • Vale vale. Pensaba que hablabas desde el propio proyecto.

      Sí, para crear los bloques tienes que crear la librería. Luego crear un programa S7 y dentro crear los bloques.
      Luego desde otro proyecto podrás ver la librería con los bloques creados.

      Al final una librería es como un proyecto sin hardware (permitidme la comparación). Tiene la peculiaridad de poder acceder a sus bloques desde otros proyectos.
      Saludos!

      • OK, tema resuelto, respecto a los HMI del tema anterior ya he encontrado el problema, cuando instalas el Wincc flexible hay que fijarse en activar una pestaña que dice integrar con step 7 o algo similar, ya está resuelto también. gracias y un saludo.

  10. Muy buenos todos los tutoríales y vídeos que has realizado, te felicito por tu blog, he aprendido varios trucos muy buenos. Gracias y felicidades. Puedes decirme como hacer funcionar el plcsim de una manera rápida?
    Saludos

  11. hola ingeniero

    cada vez que tengo un problema de PLC voy a internet y como por casualidad siempre te encuentro allí, parece ser que te has convertido en el padrino de todos nosotros pues la ultima vez me ayudaste, saludos de mi parte y quería pedirte ayuda de nuevo mi amigo, se que en esta pagina no están hablando de este tema pero quería preguntarte algo, lo que pasa es que creé una función de dosificación de una bomba pero necesito guardar ese dato, te doy un ejemplo, tengo una bomba proporcional analógica de dosificación y necesito que ella me dosifique un coagulante correctamente pero esto depende de una función matemática, esta función depende de la información de un sensor, el problema es que deseo guardar ese dato de dosificación, pero cuando yo deseo sumarle a ese dato otro pequeño para mejorar la dosificación, ese se sustituye por el pequeño, y lo que quiero es que ese dato se sume al primero y forme una salida mas grande. bueno creo que me explicare mejor, tengo una bomba dosificadora en un lugar, pero aguas abajo esta un sensor de turbidez, el sensor le dice a la bomba cuanto ha de dosificar para eliminar la turbidez encontrada, pero cuando la bomba dosifica entonces puede quedar en el agua un poco de turbidez, por eso quiero que el programa sume a la dosis que primero realizò, otra dosis para el pequeño error que continua, por ejemplo primero hay 10 unidaes de turbidez, pero al dosificar quedaron 2 unidades de turbidez, como nosotros queremos la turbidez en cero , por eso quiero agregar a la primera dosificaion de 10 unidaes de turbidez otra seguanda dosificaciòn para 2 unidades de turbidez. pero mi problema es que cuando el sensor detecta que cambió de 10 unidades a 2 cambia la dosificaccion para dos unidaes en ves de sumar la primera mas la segunda. No he encontrado un bloque con memoria ni se como utilizarlo.

    espero no halla hablado de forma enredada

    gracias por la atención

  12. ola muy buen video …excelente , pero quisiera saber mas y vi que dejo un blog ….pero esta inabilitado , pero un gran aporte a los que nos iniciamos en el mundo de la automatizacion con PLc

  13. buenos dias , estoy aprendiendo a programar en step 7 y me sirven de gran ayuda sus video tutoriales pero tengo una duda ,como relleno el bloque ob1

  14. hola iñigo una vez mas mil gracias , aprovechando quisiera hacer una consulta eh creado un Fc un bloque limit Histeresis funciona de maravillas mi pregunta es…. como puedo yo guardar ese Fc en una librería y utilizarlo cuando lo necesite , tan solo buscando en la libreria ? como logro insertar mi fc ?

    Gracias..

    • Sencillo,
      En vez de crear un proyecto, crea una librería y pega el bloque en esta nueva librería. Luego podrás usar dicho FC en cualquier proyecto como si fuera una librería de Step 7

      Saludos

      • Venga , gracias iñigo , te comento que actualmente curso un programa de capacitacion avanzado en programacion de plc Siemens – s7 300 en TECSUP el mejor y el mas caro centro de estudios tecnologico en lima – Peru y descargue todos tus tutoriales para estudiarlos en paralelo a mis capacitaciones de los cuales eh mostrado muchos de tus videos a los ingenieros que pertenecen tambien a siemens peru SITRAIN y han quedado maravillados con tus tutoriales de alta programacion sobre todo tus ejemplos de la calculadora y el cronometro (Wincc ) , eres un genio hermano me gusta todo este mundo tanto como a vos con mucho esfuerzo espero lograr convertirme en un programador integrador de siemens y poder compartir algun dia informacion con vos.

        Saludos.

        Xavier Bonifacio Tec Ing Electronico

  15. Hola Inigo, como estas? te queria consultar lo siguiente..:
    Puedo agregar una variable dentro de un FC ya Creado? El soft me lo permitiria? no se si me hago entender.

    Desde ya muchas gracias

Deja un Comentario

Tu dirección de email no será publicada. Required fields are marked *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>