21 de mayo de 2010

Temporización discontinua en Step7

Supongamos que tenemos que controlar la dosificación de un líquido que debe producirse durante un tiempo preciso. Además, existe una barrera que, al interrumpirse, bloquea la salida del líquido y, al liberarse, debe seguir dosificando el tiempo restante. Está claro que hay que usar un temporizador. En Step7 existen cinco clases de temporizadores:
S_IMPULS ó SI -> Impulso
S_VIMP ó SV -> Impulso prolongado
S_EVERZ ó SE -> Retardo a la conexión
S_SEVERZ ó SS -> Retardo a la conexión con memoria
S_AVERZ ó SA -> Retardo a la desconexión
Cada temporizador tiene dos instrucciones posibles para lanzarlo: la corta (SI, SV, ...) en la que simplemente especificamos el tiempo de temporización y la larga (S_IMPULS, S_VIMP ...), en la que además podemos parametrizarlo.

Para seleccionar el temporizador que necesitamos, en la ayuda de Step7, aparte de cada temporizador explicado en detalle, viene un gráfico en el que podemos ver resumidamente el comportamiento de cada uno:


Para mi aplicación voy a usar uno del tipo S_EVERZ (retardo a la conexión), que deberemos arrancar con la salida de dosificación. Al completar el tiempo sabremos que ha finalizado la acción.

Pero tenemos que tener en cuenta el efecto de la barrera: si se interrumpe corta la dosificación. Lo ideal es que se pudiese poner el temporizador en modo pausa, de manera que recuerde el tiempo que le queda en el rearranque (cuando la barrera deje de estar interrumpida), pero no existe esta posibilidad, al rearrancar el temporizador contará el tiempo completo.

La solución pasa por aprovechar la salida DEZ que tiene cualquier temporizador parametrizable y donde podemos leer el tiempo que le falta para acabar. Este valor lo almacenaremos continuamente. Así, cuando el temporizador se desactiva podemos saber el tiempo que falta, y cuando detectamos que se reanuda la dosificación le cargamos previamente el tiempo restante.

Este es el código en lenguaje KOP con el que he comprobado que este método funciona, está comentado y creo que es fácil de entender.

Actualización: también tienes el código en este proyecto de Step7.



Para probar su funcionamiento podemos usar una tabla de variables como la siguiente:


Con la señal M100.0 se activa la dosificación en la salida A0.0 y voy almacenando en MW122 el tiempo restante:


Si se interrumpe la barrera (señal M100.2) la dosificación se detiene y cargamos en MW120 el valor de MW122. La variable MW120 debe ser del tipo S5TIME y la MW122 del tipo WORD.


El liberarse la barrera se continua dosificando:


Al finalizar el temporizador T1 seteo la señal M100.4 que me indica que la dosificación terminó y se bloquea la salida.


Para reiniciar el proceso hay que poner a cero la señal M100.0 y luego volver a activarla.

Cualquier comentario será bienvenido.

5 comentarios:

  1. No me lo he leido a fondo pero...
    Yo habría hecho otra cosa mas "sencilla" (lo pongo ente comillas porque cada cual es cada cual...
    - Me leo el tiempo del último Scan del PLC.
    - Si está activada la señal lo sumo en un "acumulador" de tiempos Un MD, Un DD, lo que sea.
    - Y ya está.
    - ¿Que lo quiero resetear?. Borro ese acumulador.
    - Que lo quiero en otras unidades?. Hago la operación de dividir el tiempo en milisegundos acumulado entre lo que quiera y lo guardo en otro sitio.
    Un saludo!.

    ResponderEliminar
  2. Esta claro que habrá tantas formas de hacerlo como programadores.

    Nunca se me había ocurrido usar el tiempo de scan del PLC para un temporizador, gracias por la sugerencia.

    ResponderEliminar
  3. Hola , soy estudiante de 2º de reg y cont grado superior y la verdad es que miprofesor de comunicaciones , tiene menos idea que yo, por ende tengo problemas con profibus , ethernet y a-si !!!!!!!¿que hago?!!!!! necesito aprobar , hacer mis practicas y currar.
    Gracias.

    ResponderEliminar
  4. Anónimo,tu caso es muy asiduo en la enseñanza, que le vamos hacer...para eso tenemos a esta gente que nospermite aprender una vez que salimos de clase,jejejejejeje...xD

    Gracias GR, aunque no lo sepas me estas ayudando muchísimo,y seguro que como yo hay muchos

    ResponderEliminar
  5. HOLA. ME GUSTARIA QUE ME HICIERAIS UN EJERCICIO DER COLEGIO QE NO ME SALE, ES DE ESTA COSA, DE TEMPORIZAORES , TOI TO RALLA, GRASIAS DE ANTEMANO. QUIEN QUIERA HASERME EL EJERSISIO PO QUE ME ESCRIBA A ESTE HEMAIL: shu_ingeniera_pou@hotmail.com

    ResponderEliminar

Por favor, no pidas copias de programas comerciales, licencias o números de serie.