Está en la página 1de 8

Una de las cosas que, en mi opinin, no debe faltar en una mquina que disponga de

panel de visualizacin, es una pantalla dedicada al tiempo ciclo. Es curioso ver como en
muchas inspecciones de mquinas, el ingeniero de mtodos y tiempos, cronmetro en
mano, comprueba que nuestra mquina d cadencia. Si en vez de eso, le damos una
tabla de tiempos tomados de forma precisa por el PLC, le simplificaremos la labor y
seguramente lo agradecer... y ya sabemos que el ingeniero de mtodos y tiempos es
un tipo con el que conviene llevarse bien ;)
Nota: entindase tiempo de ciclo como el tiempo que transcurre desde que obtenemos
una pieza terminada y la siguiente.
Para ello voy a suponer que mi mquina est comandada por un PLC S7-300 y
como HMI tengo un panel tctil deSiemens como el MP277, y sobre esta base voy a
programar lo que sera una visualizacin sencilla de los ltimos diez tiempos de ciclo.
En este ejemplo el PLC calcular el tiempo ciclo y mediante una variable booleana le
indicar al panel que recoja el dato. Luego el panel leer el dato y lo introducir en una
tabla de valores, los visualizar por orden de recepcin (primero el ms reciente) y
marcar con color verde el menor y con color amarillo el mayor. La visualizacin
quedar tal como se muestra a continuacin:

Empecemos con la programacin en el PLC.


He programado un bloque de funcin (FB) donde calculo el tiempo ciclo. Como
entradas tiene una seal de habilitacinHABILIT, que es necesario activar para que se
ponga a controlar (p. ej. solo interesa el tiempo ciclo en modo automtico). A
continuacin debemos introducir una seal CONTROL que se active una nica vez al
terminar cada ciclo de mquina. Podra ser, por ejemplo, un detector de pieza en
salida, pero yo prefiero poner el estado final de la lgica de funcionamiento. El tiempo
ciclo ser el intervalo entre dos flancos positivos consecutivos en dicha seal. La
entradaT_LIMITE sirve para descartar tiempos ciclo muy altos (p. ej. si el operario
sali a tomar el bocadillo), solo se considerarn los tiempos de ciclo inferiores. Si
queremos visualizar todos, hay que poner aqu un tiempo suficientemente alto.

En las salidas tenemos un booleano PULSO que, cada vez que hay un nuevo tiempo de
ciclo, da un pulso de dos segundos, que nos servir para decirle al panel que recoja un
nuevo dato. Finalmente en la salida T_CICLO tendremos el tiempo de ciclo medido en
milisegundos (formato TIME). Ntese que el tiempo de ciclo mnimo a medir ser de
dos segundos (ms un pequeo margen de seguridad), en mquinas ms rpidas este
cdigo no sirve.
Una llamada al FB descrito puede ser como esta:

Nota: los tiempos se gestionan internamente, el FB no consume temporizadores


Simatic.
Est programado en diagrama de contactos (KOP) y para incorporarlo a un proyecto de
Step7 copia el siguiente cdigo a un fichero fuente y complalo:
FUNCTION_BLOCK FB13
TITLE =CONTROL TIEMPO CICLO
//http://notasdeautomatizacion.blogspot.com
VERSION : 0.1
VAR_INPUT

HABILIT : BOOL ; //HABILITACIN


CONTROL : BOOL ; //SEAL DE CONTROL DE TIEMPO CICLO
T_LIMITE : TIME ; //TIEMPO MXIMO PARA CONSIDERAR UN TIEMPO CICLO
END_VAR
VAR_OUTPUT
PULSO : BOOL ; //PULSO PARA INDICAR UN NUEVO TIEMPO CICLO
T_CICLO : TIME ; //TIEMPO CICLO (EN MILISEGUNDOS)
END_VAR
VAR
PRIMER_CTRL : BOOL ;
FP_HABILIT : BOOL ;
FP_CTRL : BOOL ;
T_INI_CICLO : TIME ;
T_AUX_PULSO : TIME ;
END_VAR
VAR_TEMP
TIME_TICKS : TIME ;
END_VAR
BEGIN
NETWORK
TITLE =LECTURA DEL TIEMPO DEL SISTEMA
//EN MILISEGUNDOS TRASCURRIDOS DESDE EL LTIMO ARRANQUE DEL PLC
CALL "TIME_TCK" (
RET_VAL := #TIME_TICKS);
NOP 0;
NETWORK
TITLE =PRIMER CONTROL
//CUANDO SE HABILITA NO SE TIENE EN CUENTA LA PRIMERA SEAL DE CONTROL
//(EL PRIMER TIEMPO CICLO SE DA CON LA SEGUNDA SEAL DE CONTROL)
U #HABILIT;
FP #FP_HABILIT;
S #PRIMER_CTRL;
NETWORK
TITLE =SEAL DE CONTROL DE TIEMPO CICLO
//EL TIEMPO CICLO SE CALCULA ENTRE DOS FLANCOS POSITIVOS DE LA SEAL DE CONTROL
//CUANDO HAY UN NUEVO TIEMPO CICLO SE DA UN PULSO DE DOS SEGUNDOS
U #CONTROL;
FP #FP_CTRL;
U #HABILIT;
= L 4.0;
U L 4.0;
UN #PRIMER_CTRL;
= L 4.1;
U L 4.1;
SPBNB _001;
L #TIME_TICKS;
L #T_INI_CICLO;
-D ;
T #T_CICLO;
_001: NOP 0;
U L 4.1;
SPBNB _002;
L #TIME_TICKS;
T #T_INI_CICLO;
_002: NOP 0;
U L 4.1;
U( ;
L #T_CICLO;
L #T_LIMITE;
<=D ;
) ;
= L 4.2;
U L 4.2;
SPBNB _003;
L #TIME_TICKS;
L T#2S;
+D ;
T #T_AUX_PULSO;
_003: NOP 0;
U L 4.2;
BLD 102;

S #PULSO;
U L 4.0;
U #PRIMER_CTRL;
= L 4.1;
U L 4.1;
SPBNB _004;
L #TIME_TICKS;
T #T_INI_CICLO;
_004: NOP 0;
U L 4.1;
BLD 102;
R #PRIMER_CTRL;
NETWORK
TITLE =PULSO DE LECTURA DE TIEMPO CICLO
//RESET AL PASAR DOS SEGUNDOS DESDE SU ACTIVACIN
U #PULSO;
U( ;
L #TIME_TICKS;
L #T_AUX_PULSO;
>=D ;
) ;
R #PULSO;
END_FUNCTION_BLOCK

Nota: si una vez compilado te falla la conversin de AWL a KOP, desactiva en las
opciones del editor de Step7, en la pestaa FUP/KOP, la casilla Comprobar los tipos de
operandos.
Hasta aqu la parte de programacin en el PLC, ahora vamos al WinCC Flexible.
Lo primero ser enlazar la variable del PLC que nos indicar que hay un nuevo tiempo
ciclo:

Importante: en esta variable deberemos cambiar el modo de adquisicin a Ciclo


continuo, para as ir obteniendo los tiempos incluso sin estar en la pantalla donde se
utiliza.

Tambin debemos enlazar la variable donde hay que leer el tiempo de ciclo:

Ahora crearemos dos tablas de variables (internas, sin conexin con el PLC) con la
cantidad de tiempos de ciclo que queramos mostrar, en mi caso diez. La
primera, TIEMPOS, servir para almacenar los tiempos de ciclo ordenados, en formato
entero (16 bits) y la segunda, MARCAR, voy a usarla para marcar los colores de la
representacin de los tiempos de ciclo mayor y menor.

Creadas las variables necesarias, pasamos a la programacin del script. Agregamos un


script nuevo al proyecto (lo he llamado TIEMPO_CICLO) y copiamos el siguiente
cdigo:

'SE LLAMAR AL SCRIPT CADA VEZ QUE CAMBIE "PULSO CICLO"


'PERO SOLO SE AADIR UN TIEMPO SI ES TRUE
If SmartTags("PULSO CICLO") = True Then
Const NUM_TIEMPOS = 10 'NMERO DE TIEMPOS QUE SE ALMACENAN
Dim INDICE 'NDICE PARA RECORRER LOS TIEMPOS
Dim INDICE_CORTO 'NDICE DEL TIEMPO MS CORTO
Dim INDICE_LARGO 'NDICE DEL TIEMPO MS LARGO
'HACEMOS SITIO EN LA TABLA DE TIEMPOS
'SE DESCARTA EL LTIMO TIEMPO Y SE MUEVEN HACIA ABAJO
For INDICE = NUM_TIEMPOS - 1 To 1 Step -1
SmartTags("TIEMPOS")(INDICE) = SmartTags("TIEMPOS")(INDICE -1)
Next
'SE ALMACENA EL TIEMPO CICLO ACTUAL COMO EL MS RECIENTE
'EN DCIMAS DE SEGUNDO
SmartTags("TIEMPOS")(0) = SmartTags("T_CICLO") / 100
'BSQUEDA DE LOS TIEMPO MS CORTO Y MS LARGO
INDICE_CORTO = 0
INDICE_LARGO = 0
For INDICE = 1 To NUM_TIEMPOS - 1
If SmartTags("TIEMPOS")(INDICE) < SmartTags("TIEMPOS")(INDICE_CORTO) And _
SmartTags("TIEMPOS")(INDICE) > 0 Then
INDICE_CORTO = INDICE
End If
If SmartTags("TIEMPOS")(INDICE) > SmartTags("TIEMPOS")(INDICE_LARGO) Then
INDICE_LARGO = INDICE
End If
Next
'SI LOS NDICE CORTO Y LARGO SON IGUALES NO SE HACE NADA
If INDICE_CORTO <> INDICE_LARGO Then
For INDICE = 0 To NUM_TIEMPOS - 1
SmartTags("MARCAR")(INDICE) = 0 'FONDO BLANCO
If INDICE = INDICE_LARGO Then
SmartTags("MARCAR")(INDICE) = 2 'FONDO AMARILLO
End If
If INDICE = INDICE_CORTO Then
SmartTags("MARCAR")(INDICE) = 1 'FONDO VERDE
End If
Next
End If
End If

En el script debemos adaptar la constante NUM_TIEMPOS al nmero de tiempos de


ciclo que deseemos mostrar. Bsicamente, lo que hace es ir incorporando, de manera
ordenada, los tiempos de ciclo descartando el ms antiguo. Como expresar el tiempo
en milisegundos puede ser excesivo, se divide entre cien para mostrarlo en dcimas de
segundo. Luego se repasa la tabla de tiempos buscando el ms breve y el ms largo,
asignando en el ndice correspondiente de la tabla MARCAR un uno si es el ms breve
o un dos si es el ms largo (el resto se mantienen a cero).
El siguiente paso es saber cundo ejecutar el script, y para ello tenemos la
variable PULSO CICLO (o el nombre que le hayas asignado). Vamos a sus eventos y
en Cambio de valor asignamos nuestro script, as logramos que se ejecute cada vez

que se detecte un pulso.

Ahora solo nos queda preparar nuestra pantalla de tiempos de ciclo, con diez (o los que
hayamos programado) campos de salida:

Para que cambien los colores de fondo de la representacin de los tiempos ms largo y
ms corto, debemos activar para cada campo de salida Animaciones -> Apariencia y

asignar como variable MARCAR con su ndice correspondiente.