Contenido
¿Qué son los 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:
- Comparación
- Transferencia
- Conversión
- Marcas de ciclo
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:
- 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.
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.
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.
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.
47 Comentarios
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
jejeje… hoy en día todas las precauciones son pocas..
Da gusto verte comentando de nuevo por aquí.
Saludos
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!
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…
Muchas gracias Carlos!
Muchas Gracias.. Iñigo.
me estoy especializando con Allen Bradley.
pero hago proyectos tambien con Siemens.. que la vdd me a hecho sufrir mucho.
te agradezco mucho que hallas hecho el blog ya que me a servido de maravilla.
Saludos desde Mexico.
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
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
Hola, me falta el apartado de hmi en el step 7, que puedo hacer?
Si no puedes ver el HMI… ¿ya tienes instalado el Wincc flexible?
si, lo tengo instalado
He descargado de nuevo el proyecto y sí está el HMI. No entiendo que no lo puedas ver.¿ Es que al abrir da error o que no ves el icono del hmi desde el proyecto pulsando en semáforo?
No descargué su proyecto, intento ir dando solución a los ejercicios que va planteando por mi cuenta, en mi proyecto, cuando intento insertar en el administrador simatic un HMI no puedo, no aparecen en el catálogo.
He actualizado el catálogo y siguen sin aparecer.
Intenta hacerlo no desde el editor de HW, sino desde el proyecto, donde insertaste el PLC , pues en vez de un PLC un HMI.
Saludos
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?
No sabía que puedan crear librerías que no sean de textos. ¿Cómo estás intentando realizarla?
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.
Buen trabajo!
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
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
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
No entiendo muy bien lo de inhabilitado…
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
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
Muchas gracias Xavier!
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
Felicidades por el blog Iñigo!!
Tengo una consulta con el ejemplio del semáforo. Estoy intentando incluir un estado de apagado del sistema en el que cuando se active ponga nada más que el color ambar parpadeando y el resto del sistema en apagado. Pero no lo consigo. Pudieras ayudarme??
Gracias
Ya lo he logrado, gracias…
Hola!
Íñigo, en primer lugar, felicitarte por el ejemplo y el blog en general.
Me gustaría descargarme el ejemplo de los semáforos pero no encuentro el enlace, me podrías echar una mano??
Mil gracias,
Gloria
Hola Gloria.
Gracias por el interés.
Este ejemplo junto con el resto de los proyectos están disponibles para aquellos que adquieren el curso en pdf.
Un saludo
Hola como puedo comprar el curso con todos los ejemplos por favor?
Pulsando en cursos accedes a la tienda donde puedes adquirir los cursos.
Saludos
Buenas Iñigo
En el cole estamos con el Tia portal siemens v13. Este libro tb valdría para esta versión.
Gracias
Valen los conceptos, pero son versiones y PLC diferentes. Para ello está el curso de TIA Portal para S7-1200 (https://programacionsiemens.com/cursos/curso-de-tia-portal-para-cpu-1200/)
Saludos!
Bom dia Iñigo Gútiez,
Muito bom ,! estou gostando de todos os tópicos que esta colocando , de programação simatic s7 .
Muito obrigado.
Um abraço
Jaci_Fig
Hola Íñigo,
Con respecto a los FC estaba realizando un programa me ha surgido una duda, igual es un poco absurdo pero estoy haciendo la llamada a un FC por medio de una entrada física y dentro de este FC estoy creando marcas que luego utilizo fuera. Mi pregunta es que tipo de memoria debería utilizar si quiero que en el caso de que en mitad del ciclo del FC dejo de hacer la llamada mediante la entrada física, esta memoria se borre y no quede activada como me está pasando ahora.
Gracias
Hola Diego.
La forma que estás usando, no es la forma correcta de actuar, bajo mi punto de vista.
Las marcas son globales, y se quedan con el último valor asignado.
Si vas a usar la variable en forma lectura, lo lógico es que en cada ciclo de scan, le des valor. Si no, te pasa lo que te pasa ahora.
No sé lo que intentas hacer, pero a una marca se le debe dar valor solo en un punto (si es una asignación, claro. Si es un Set/Reset, es otra cosa). Por tanto, no debería estar en un bloque que se pueda anular su llamada si luego además vas a usar esta variable fuera de ese bloque.
Lógicamente fuera puedes hacer que si no se ejecuta el bloque porque la entrada física está a cero, o a uno (como sea que lo estés haciendo), puede hacer un borrado de la marca, pero como digo, no es una buena praxis.
Saludos
Íñigo tengo mi laptop que es de 32bit pero la nueva el tía v15 me pide de 64 bit no sabes lo desesperante que es tener que hacerlo en otras compu .. habrá alguna solución para poder instalarlo en el mío .. por cierto muy bueno el curso gracias
Ummm si es 32bits, no vas a poder trabajar bien aunque lo pudieras instalar ya que 32bits solo puede manejar 3GB de memoria, y es poco.
Yo no le veo una solución en 32 bits.
Saludos
muy bueno, el ejercicio, pero no lo tendrás o podrías hacer con comparadores, que creo puede resultar más fácil de entender
Saludos y gracias
Exelente explicacion gracias.
Muy buen curso lo voy a recomendar
Muchas gracias!