Escolar Documentos
Profissional Documentos
Cultura Documentos
& =
1/30
Y en FUP tendramos:
Para poder programar circuitos ms complejos necesitaremos utilizar instrucciones con parntesis. Estas instrucciones son U() y O(). No obstante, podremos obviar el uso del parntesis y utilizamos las instrucciones U y O solas en una lnea. Veamos como programar el siguiente circuito:
E 0.0
A 4.0
E 0.1
E 0.2
E 0.3
E 0.4
2/30
Para terminar este apartado, veremos un ejemplo de circuito con entradas normalmente cerradas:
Marcas
Las marcas son bits internos de la CPU. Disponemos de una cantidad limitada de marcas. Esta cantidad depende de la CPU con la que estemos trabajando. Estos bits podremos activarlos o desactivarlos como si fueran salidas. En cualquier punto del programa los podremos consultar. A las marcas les llamaremos M. A continuacin tenemos que decir a que bit en concreto nos estamos refiriendo. En lenguaje AWL las marcas se representan por la letra M. Por ejemplo tenemos las marcas, M 0.0, M 10.7, M 4.5, etc. Uno de los usos habituales de las marcas es para simplificar circuitos complejos, como veremos en el siguiente ejemplo. Queremos resolver el circuito de la figura. En principio parece que esto es una cosa complicada. Lo podramos hacer dibujando directamente el circuito en KOP. Tambin lo podemos hacer pensando bien el circuito y con lo visto hasta ahora programarlo a travs de parntesis. Sin embargo lo resolveremos mediante marcas. Lo que conseguimos utilizando las marcas, es simplificar el circuito todo lo que nosotros queramos. De este modo programamos directamente el AWL de manera sencilla.
3/30
El programa en AWL queda como: U O O( U U U ) = U O = U U O = U U E E E E E M E E M E E E M E M 0.0 0.1 0.2 0.3 0.4 0.0 0.6 0.7 0.1 1.1 1.2 1.0 0.2 0.5 0.1
4/30
5/30
Condicin
Temporizador
U L SE U =
Salida
Adems de lo que hemos visto, en cualquier momento podemos hacer un RESET del temporizador. Para hacer un RESET necesitamos una condicin. En el momento se cumpla si al temporizador le corresponda estar a 1, automticamente se pondr a cero aunque por su modo de funcionamiento no le corresponda. El modo de funcionamiento SI es el siguiente:
Condicin
Temporizador
U L SI U =
Salida
A este temporizador tambin podemos aadirle un RESET en cualquier momento. Veamos tambin como programar estos dos temporizadores en KOP y en FUP respectivamente.
6/30
FUP
Veamos un ejemplo de uso de temporizadores. Tenemos un semforo con las tres luces verde, amarillo y rojo. Tenemos dos pulsadores de mando: un pulsador de marcha y un pulsador de paro.
Con el pulsador de marcha quiero que comience el ciclo. El ciclo de funcionamiento es el siguiente: 1/ Verde durante 5 seg. 2/ Verde + Amarillo durante 2 seg. 3/ Rojo durante 6 seg. El ciclo es repetitivo hasta que se pulse el pulsador de paro. En ese momento se apaga todo. Siempre que le d al pulsador de marcha quiero que empiece por el verde. Veamos cmo quedara el ejercicio resuelto en AWL: U S U L E A A S5T#5S 0.0 4.2 4.2 // // // // Al activar el pulsador de marcha Encender el verde Si se ha encendido el verde Cuenta 5 segundos
7/30
Condicin
Temporizador
Salida
U L SS U =
Reset
En el esquema de funcionamiento observamos que para que el temporizador se desactive tenemos que activar la seal de reset. El temporizador SV es equivalente al SI. El funcionamiento es el mismo, pero es independiente de la condicin de entrada. Una vez se ha detectado un flanco de subida de la entrada se ejecuta todo el ciclo del temporizador. Veamos el esquema de funcionamiento.
8/30
Temporizador
Salida
Temporizador
Salida
9/30
Si aadimos ms BEB, con otras salidas tenemos intermitentes cada uno con doble frecuencia que el anterior. El programa continuara de la siguiente manera: UN = BEB UN = BEB UN = BEB UN = BEB UN = BEB ........... ........... BE A A A A A A A A A A 4.0 4.0 4.1 4.1 4.2 4.2 4.3 4.3 4.4 4.4
10/30
La salida del contador est a 0 cuando el valor del contador sea 0, y 1 cuando el contador tenga un valor distinto de cero. Los contadores no cuentan nmeros negativos. Podemos trabajar con los contadores de dos formas distintas. La primera y ms sencilla es comprobar si su salida en 0 o 1 en funcin de si la cuenta vale cero o no vale 0 respectivamente. La segunda es comprobar el valor del contador utilizando instrucciones de comparacin. Para esto nos har falta comparar dos valores. Para comparar, al PLC le hace falta tener estos valores en dos registros internos que son el acumulador 1 y el acumulador 2. Para meter los valores en los acumuladores, usaremos la instruccin de carga (L). Cuando cargamos un valor, siempre se carga en el acumulador 1. Cuando volvemos a cargar otro valor, tambin se guarda en acumulador 1. Lo que tena en el acumulador 1 pasa al acumulador 2, y lo que tena en el acumulador 2 lo pierde. Una vez tengamos los valores en el acumulador, tendremos que compararlos. Para ello tenemos las siguientes instrucciones: > Mayor < Menor >= Mayor o igual <= Menor o igual == Igual <> Distinto
11/30
El funcionamiento que queremos es el siguiente: Cuando llega un coche y el parking est libre, queremos que se abra la barrera. A la salida no tenemos barrera. Cuando sale un coche simplemente sabemos que ha salido. En el parking caben 10 coches. Cuando el parking tenga menos de 10 coches queremos que est encendida la luz de libre. Cuando en el parking haya 10 coches queremos que est encendida la luz de ocupado. Adems queremos que si el parking est ocupado y llega un coche que no se le abra la barrera. Programa en AWL U U = U ZV U ZR L L <I S R ==I R S BE E A A A Z E Z Z 10 A A A A 0.0 4.6 4.0 4.0 1 0.1 1 1 4.6 4.7 4.6 4.7 // Si llega un coche // Y est libre // Abre la barrera // Si se he abierto la barrera // Cuenta uno con el contador 1 // Si sale un coche // Descuenta 1 con el contador 1 // Carga el contador 1 // Carga un 10 // Si en el contador hay menos de 10 // Enciende la luz de libre // Y apaga la de ocupado // Si el contador de coches vale 10 // Apaga la luz de ocupado // Y enciende la luz de libre
Esto sera una forma de hacerlo utilizando un contador y la funcin de comparacin. Como slo queremos hacer una comparacin, es decir slo nos interesa la cantidad de 10 coches para hacer el cambio de las luces, tenemos otra posibilidad de programarlo. Podemos hacerlo utilizando la salida binaria del contador. Veamos como quedara resuelto en AWL.
12/30
En este caso veremos tambin las soluciones en KOP y FUP para mostrar a qu bloques corresponden las instrucciones de contadores y comparadores.
13/30
14/30
Tipos de acceso
Hasta ahora los ejemplos que hemos visto accedan a las entradas y salidas del autmata bit a bit. Es posible sin embargo acceder a la memoria como bytes (8 bits), palabras (16 bits) o dobles palabras (32 bits). Para ello utilizaremos los sufijos B para referirnos a los bytes, W para referirnos a las palabras y D para referirnos a las dobles palabras. Para referirnos a bits se utiliza la letra X, aunque normalmente no es necesario indicarlo (como hemos visto en los ejemplos hasta ahora) puesto que el formato x.y (donde x es la zona de memoria e y el nmero de bit) lleva ya implcita la referencia a nivel de bit. De este modo, si queremos transferir 8 bits de la entrada E124 a la salida A124 haramos: L T EB AB 124 124
15/30
En estos ejemplos hemos usado las instrucciones L y T. Estas instrucciones sirven para transferir el operando desde o hacia el acumulador 1. El acumulador 1 es un registro interno del autmata de 32 bits. La instruccin L carga el operando en el acumulador, mientras que la instruccin T transfiere el contenido del acumulador 1 al operando. Las operaciones de transferencia se hacen en lenguaje KOP y FUP mediante la instruccin MOVE. En KOP:
En FUP:
La diferencia fundamental entre las instrucciones en KOP y FUP con respecto a las instrucciones L y T en AWL es que en KOP y FUP la instruccin MOVE es condicional, es decir, se ejecutar o no en funcin de la entrada EN, mientras que las instrucciones L y T de AWL son incondicionales, lo que significa que siempre se ejecutarn. Adems en los bloque MOVE disponemos de una salida ENO que indica si la operacin se ha realizado correctamente (1) o no (0). Siguiendo con el acumulador, este puede ser cargado con distintos valores: L L L L L L L C# S5T# <nmero> 2# B#16# W#16# D#16# Carga Carga Carga Carga Carga Carga Carga una constante de contador una constante de tiempo nmero decimal constante binaria 8 bits en hexadecimal 16 bits en hexadecimal 32 bits en hexadecimal
16/30
La instruccin SPA no tiene misterio, salta siempre a la direccin que le indiquemos. La instruccin SPB salta si el resultado de la ltima operacin de comparacin en los acumuladores es cierta. Veamos un ejemplo de uso de estas instrucciones: Queremos hacer dos contadores. Si el contador n 1 tiene un valor ms grande que el contador n 2, queremos que se enciendan todas las salidas. Si el contador n 1 tiene un valor ms pequeo que el contador n 2, queremos que se enciendan solamente las salidas pares. Si los dos contadores tienen el mismo valor queremos que se apaguen todas las salidas. Programa en AWL: U ZV U ZR U ZV U ZR L L <I SPB >I SPB ==I SPB BEA L T BEA L T BEA L T BE E Z E Z E Z E Z Z Z MENO MAYO IGUA W#16#5555 AW 4 W#16#FFFF AW 4 0 AW 4 0.0 1 0.1 1 1.0 2 1.1 2 1 2
Hay que tener en cuenta siempre poner un BEA antes de empezar con las metas, y otro BEA al final de cada una de las metas. En la ltima meta dejamos slo el BE ya que es la ltima instruccin del programa y la funcin del BE y la del BEA es la misma.
17/30
A estas instrucciones si les aadimos el sufijo N se convierten en negadas, as por ejemplo: SPBN SPZN Igual que el SPB pero negado Salta si el resultado es distinto de cero
En S7 tenemos una instruccin ms de salto que no existe en S5. Dicha instruccin es SPL. SPL salta el nmero de instrucciones que indiquemos en el acumulador. Para entender bien cmo usar esta instruccin veamos un ejemplo. Queremos hacer una mezcla de pintura. Tenemos tres posibles colores para hacer. El color ocre es el cdigo 1. El color verde es el cdigo 2. Y el color marrn es el cdigo 3. Dependiendo del cdigo que introduzcamos queremos que la mezcla sea distinta. Para formar el ocre queremos poner 60 gramos de amarillo, 20 gramos de azul y 20 gramos de rojo. Para formar el verde queremos 50 gramos de amarillo y 50 gramos de azul. Para formar el marrn queremos 40 gramos de amarillo, 30 de azul y 30 de rojo. Los colores los van a simular unas palabras de marcas. Es decir si queremos que se forme el ocre, lo que queremos es que en la palabra de marcas 0 haya un 60, etc. En el ejemplo, si seleccionamos como cdigo del color 0, saltar al primer SPA. En este salto estamos diciendo que salte a la meta de ERRO. Si el cdigo del color es 1 saltar al segundo SPA. Es decir, saltar a la meta de OCRE. Si el cdigo del color es 2, saltar al tercer SPA. Es decir, iremos a la meta de VERD. Por ltimo, si el cdigo de color es 3, saltaremos a la meta de MARR. Programa en AWL 0.0 L SPL SPA SPA SPA SPA L T T T BEA L T L T COLOR #COLOR ERRO ERRO OCRE VERD MARR 0 MW 0 MW 2 MW 4 60 MW 0 20 MW 2 INT
ERRO:
si si si si si
el el el el el
de de de de de
es es es es es
0 1 2 3 otro valor
OCRE:
18/30
En KOP y FUP slo tenemos dos instrucciones de salto, JMP y JPMN. Determinamos si la instruccin se ejecuta o no en funcin de lo que pongamos en su entrada.
Instruccin LOOP
La instruccin LOOP sirve para ejecutar un nmero determinado de veces un trozo de programa. Veamos un ejemplo: cont: L T ........ ........ L LOOP MW 0 cont 10 MW 0 // Hace MW = 10 // Instrucciones que se repetirn // Decrementa ACU1 y si es distinto de 0 salta a cont
Bloques de datos
Para referirnos a los bloques de datos en AWL utilizaremos el formato <nombre del bloque>.<direccin> <nombre del bloque>.<nombre de variable> Ejemplos: DB1.DBW 0 DB1.DBX 0 DB1.VALOR_1 // Se refiere a la palabra 0 del DB1 // Se refiere al primer bit (el 0) del DB1 // Se refiere a la variable VALOR_1 definida en el DB1 o bien
En general es preferible referirnos a las variables de los DB1 por los nombres que les hayamos asignado, pues de esta forma no tenemos que especificar el tipo de variable al que nos referimos. Para cmo insertar bloques de datos y otros ejemplos consultar el manual Introduccin a Step7.
Funciones
Los autmatas Siemens permiten definir bloques de funciones, o FCs. Estas funciones tienen partes de cdigo que puede ser llamado desde el programa principal en OB1, o desde otras funciones. Las funciones pueden ser sin parmetros o con parmetros. Para llamar a una funcin sin parmetros utilizaremos las instrucciones CC y UC. La primera, CC, es una llamada condicional y slo se ejecuta si el RLO de la operacin anterior es cierta. UC por el contrario en una llamada incondicional y se ejecutar siempre. U CC U UC E 0.0 FC 1 E 0.1 FC 2 // Llama a la FC1 si la entrada E 0.0 est activada // Llama a la FC2 siempre
19/30
Para llamarla utilizaremos el siguiente cdigo: CALL FC 1 VALOR_A := 7 VALOR_B := 8 RESULTADO := MW10 Esto sumar 7 + 8 y dejar el resultado en la marca 10. Consultar Introduccin a Step7 para ver ms informacin.
Cada una de estas instrucciones requieren de un parmetro que indica el nmero de bits a desplazar o rotar. Estas operaciones se realizan sobre el acumulador 1, por lo que antes de ejecutarlas tendremos que utilizar la instruccin L. L SRW T MW 0 2 MW 2
El programa carga la palabra de la marca 0, la desplaza dos bits a la derecha y la guarda en la marca 2. Al desplazar los bits sobrantes se descartan, y los nuevos se rellenan con 0. Por otro lado, al rotar los bits que salen por un lado entran por el otro.
20/30
Tambin dispone de un buen nmero de funciones para convertir tipos de datos. BTI ITB DTB BTD DTR ITD RND RND+ RNDTRUNC Cambia de BCD a entero de 16 bits. Cambia de entero de 16 bits a BCD. Cambia de entero de 32 bits a BCD. Cambia de BCD a entero de 32 bits. Cambia de entero doble a real. Cambia de entero a entero doble (32 bits). Redondeo Redondea por arriba Redondea por abajo Trunca la parte decimal. Queda una entero de 16 bits
Asimismo, disponemos de funciones para operar con nmeros reales. AWL +R -R *R /R KOP ADD_R SUB_R MUL_R DIV_R ABS SQRT SQR LN EXP SIN COS TAN ASIN ACOS ATAN Operacin Suma Resta Multiplicacin Divisin Valor absoluto Raz cuadrada Calcula el cuadrado Logaritmo natural o neperiano Elevar a e Seno Coseno Tangente Arco-seno Arco-coseno Arco-tangente
21/30
Deteccin de flancos
Cuando queramos detectar que una entrada o variables ha pasado de 0 a 1 o de 1 a 0 utilizaremos las instrucciones FP (flanco positivo) y FN (flanco negativo). Por ejemplo: U FP CC BE E 0.0 M 0.0 FC 1
Ejecutar la funcin FC1 cuando la entrada E0.0 pase de 0 a 1. En KOP esto se programara as:
22/30
// Si le damos al pulsador de marcha // Se activa la marca 0.1 // Y se desactiva la marca 0.3 // Empezar desde cero o pro donde iba. // Si est activa la marca 0.1 // Y llega un pulsa de la marca 0.0 // Y no est activa la marca 0.3 // Cuanta una unidad con el contador 1 // Carga el contador 1 // Carga un 60 // Cuando sean iguales // Activa la marca 0.2 // Y desactiva la marca 0.1 // Si est la marca 0.2 // Y llega un pulso de la marca 0.0 // Y no est la marca 0.3 // Descuenta 1 con el contador 1 // Carga el contador 1 // Carga un 0 // Si son iguales // Activa la marca 0.1 // Y desactiva la marca 0.2 // Si le damos al paro // Activa la marca 0.3
De esta manera podramos temporizar tiempos ms grandes de los que me permiten los temporizadores. Con un temporizador lo mximo que puedo temporizar es 999 unidades de la base de tiempos 3. Esto viene a ser dos horas y pico. Si quiero temporizar ms tiempo, puedo generarme yo una base de tiempos con un
23/30
24/30
Cuando le demos al pulsador de marcha, queremos que se ponga en marcha la cinta transportadora. La piel va cayendo por un lado del caballete. Cuando llegue a la mitad, queremos que se active el mbolo y que doble la piel por la mitad. Lo que pretendemos es que tenga el tamao que tenga la piel, siempre doble por la mitad. Tenemos que medir la piel de algn modo. Lo que vamos a hacer es generar dos trenes de impulsos de frecuencia uno el doble que el otro. Mientras est la primera clula activa, estaremos contando los pulsos de frecuencia menor con un contador. Mientras est activa la segunda clula estaremos contando los pulsos de frecuencia mayor con otro contador. Cuando la cuenta de los dos contadores sean iguales querr decir que la piel est por la mitad. Activaremos el mbolo durante 3 segundos.
25/30
// Generamos unos pulsos // de 20 milisegundos // con la marca 0.1 // // // // // // // // // // // // // // // // // // // Mientras est la primera clula activa y lleguen pulsos de frecuencia lenta Cuntalos con el contador 1 Mientras est activa la segunda clula Y lleguen los pulsos rpidos Cuntalos con el contador 2 Carga el contador 1 Carga el contador 2 Cuando sean iguales Activa el mbolo Cuando hayas activado el mbolo Cuenta 3 segundos Con el temporizador 3 Cuando acabes de contar Desactiva el mbolo Resetea el contador 1 Y resetea el contador 2 Si pulsamos el paro Para la cinta
26/30
El funcionamiento que queremos es el siguiente: Cuando le demos al pulsador de marcha, queremos que la escalera est activa. Eso no quiere decir que se ponga en marcha. Se pondr en marcha cuando llegue una persona. Cuando est en marcha, el funcionamiento que queremos es el siguiente: Cuando una persona pise, queremos que la escalera se ponga en marcha. A partir de cuando la persona suba al primer escaln, queremos que est en marcha 5 seg. que es lo que le cuesta a la persona subir. Si antes de acabar el ciclo sube otra persona queremos que tambin llegue al final de su trayecto. En resumen, queremos que la escalera est en marcha 5 seg. desde que la ltima persona subi al primer escaln. Cuando le demos al pulsador de paro, queremos que si hay alguna persona que est subiendo llegue al final de su trayecto, pero si llega otra persona ya no pueda subir. Programa en AWL U S U U L SA U = U R BE E M M E S5T#5S T T A E M 1.0 0.0 0.0 0.0 1 1 4.0 1.1 0.0 // // // // // // // // // // Si le damos al pulsador de marcha Activa la marca 0.0 Si est activa la marca 0.0 Y llega una persona Cuenta 5 segundos A partir de cuando empiece a subir Mientras no hayas acabado de contar Estar en marcha la escalera Si le damos al paro Resetea la marca 0.0
27/30
E0.0
Delante de cada parntesis que abramos tendremos que poner una condicin que har las funciones del contacto E 0.0 en el esquema. El Master Control Relay viene a ser como una activacin a desactivacin de un trozo de programa. La funcin que realiza es la conexin o desconexin de un circuito que represente un esquema elctrico. Esto slo sirve para operaciones de contactos. Dentro del Master Control Relay no podemos poner temporizadores o llamadas a otros bloques. El programa s que nos permite hacerlo, pero no funciona correctamente. Est pensado para utilizar contactos con asignaciones =. Viene a ser como un circuito elctrico. Lo que quede activado cuando no se ejecuta lo que hay dentro de los parntesis del Master Control Relay, se desactiva. Si dentro del Master Control Relay utilizamos instrucciones SET y RESET, no funciona como hemos dicho. Cuando deja de actuar lo que hay dentro de los parntesis, si estaba activado con un SET se mantiene activado. Si no hacemos un RESET desde fuera, no se desactiva. Veamos cuales son las instrucciones necesarias para hacer un Master Control Relay: MCRA U MCR( U = )MCR U MCR( U = )MCR U = MCRD // Activar al MCR E E A E E A E A 0.0 0.1 4.0 0.2 0.3 4.1 0.7 4.7
// Desactivar el MCR.
28/30
29/30
Solucin en FUP
30/30