Descripción: Este libro va dirigido en general a todas aquellas personas que por razones de trabajo o estudio, tienen ne...
Programación autómatas
de
simatic s7-300 (Lenguaje aWL) emiLio gonzáLez rueda
e-mail:
[email protected] www.canopina.com
Cano Pina, S.L. – Ediciones Ceysa © © Este producto está protegido por las leyes de propiedad intelectual. Está prohibida la reproducción o distribución de parte alguna de la presente edición, ya sea por medios electrónicos, mecánicos o cualquier otro, sin la previa autorización del editor. © de la presente edición: Cano Pina, S.L. – Ediciones Ceysa © © de la obra: el autor
TíTulo: Programación de Autómatas SIMATIC S7-300 (Lenguaje AWL) AuTor: Emilio González Rueda Edita: Cano Pina, S.L.- Ediciones Ceysa ISBN: 978-84-15884-61-3 Producción: Susana Encinas diseño
de PorTAdA:
Josep Costa i Ardiaca
Prólogo A quién va dirigido este libro Este libro va dirigido en general a todas aquellas personas que por razones de trabajo o estudio, tienen necesidad de conocer los autómatas SIEMENS de la clase SIMATIC S7-300.
Conocimientos previos, características y alcance de este libro Para un total aprovechamiento de lo que se explica en este libro, sería deseable que el lector tuviera ya conocimientos previos, aunque fueran elementales, sobre electricidad, neumática e informática en general. El libro hace especial énfasis en una metodología propia de programación de autómatas SIMATIC S7-300, consistente primeramente en la representación Grafcet de los procesos secuenciales considerados y posteriormente en la traducción a lenguaje AWL de estos procesos secuenciales. Así mismo, el lector que comienza en estos temas y el profesional que ya esté introducido en ellos, podrá observar como la técnica de programación que aquí se explica, en ocasiones puede parecer algo más compleja si se compara con otras técnicas de programación. Ahora bien, debe tenerse en cuenta que gracias a esta complejidad, el profesional puede obtener por este procedimiento, no solamente programas perfectamente estructurados, claros y fiables, sino algo de extrema importancia en procesos secuenciales, como es el obtener PROGRAMAS ULTRA RÁPIDOS CON TIEMPOS DE SCAN MÍNIMOS, totalmente inalcanzables con otras técnicas de programación convencional. Se trata, por tanto, de una técnica de programación segura y fiable, que por una parte puede usarse en general en cualquier caso de programación de procesos secuenciales y, por otra parte, es una técnica INSUSTITUIBLE si se trata de programar un proceso crítico donde los tiempos de scan del autómata deban ser muy pequeños. Con todo, el autor está elaborando un segundo libro como continuación de éste, en el que se explican las mismas materias, pero empleando técnicas de programación más conven-cionales (aunque como contrapartida, con tiempos de scan mucho más grandes), e incluso hacer extensiva esta técnica de programación a otros modelos de autómatas como OMRON o TELEMECÁNICA.
Material necesario para el aprendizaje
Sería aconsejable practicar los ejemplos de este libro, bien con un autómata real o bien con un programa de simulación. Así pues, el material adecuado para practicar los ejercicios de este libro, podría ser el siguiente: • Un ordenador personal (PC) como mínimo con: o Procesador Pentium III. o Memoria central de 64 MB . o Capacidad en disco libre de 500 MB. o Sistema operativo W98. o STEP-7, v5.0. • Un autómata S7-300 con 8 entradas y 8 salidas digitales, dotado de interruptores en sus entradas para simular contactos de entrada, así como un cable MPI para conectar el autómata al puerto serie del PC, o el simulador PLCSIM v5.0 de SIEMENS.
Lenguaje de programación
En este libro se hace uso exclusivamente del lenguaje de programación AWL de SIE-MENS, cuyas reglas se fijan en la norma DIN EN-61131-3 (int. IEC 1131-3).
Página web de especial interés
Evidentemente, en Internet es posible encontrar multitud de páginas web interesantes e incluso importantes, pero merece especial atención la página oficial de SIEMENS: http://www.ad.siemens.de/simatic/portal/index_76.htm Los nombres de productos que se listan a continuación (entre otros), son marcas registradas por SIEMENS AG: SIMATIC, SIMATIC NET, SIMATIC HMI, PLCSIM, STEP 7, AWL, KOP, FUP, NETPRO, MPI.
Índice 1
Elementos de un proceso industrial
2
Sistemas de numeración
3
Clases de registros
4
Operaciones lógicas
5
Los autómatas SIMATIC S7-300
6
Operaciones lógicas con Bits
7
STEP-7
8
Grafcet
9
Temporizadores y contadores
10
Operaciones FP y FN
11
Operaciones de carga, transferencia y comparación
12
Operaciones aritméticas y trigonométricas
13
Operaciones de desplazamiento y rotación
14
Operaciones de salto
15
Procesos en paralelo
16
Funciones (introducción)
17
Tipos de funciones
18
DBs y FBs
19
Direccionamiento
20
Algunos conceptos avanzados
21
SFCs
22
Cajón de sastre
ir a
Apéndice
Elementos de un proceso industrial
Capítulo 1
CAPÍTULO 1
Índice
Elementos de un proceso industrial 1.1
El proceso industrial
De una forma aproximada podemos decir que un proceso industrial es aquel que está formado por un conjunto de personas y máquinas que trabajan de manera coordinada, con objeto de crear un bien de consumo, donde el bien de consumo puede ser tan simple como un tapón de botella o tan complejo como un vehículo industrial. Ahora bien, lo cierto es que los procesos industriales, sean simples o complejos, se caracterizan cada vez más automatizados. Así pues, cada vez están más lejos los tiempos en que gracias a la habilidad manual de algunos artesanos, la sociedad se podía abastecer de bienes de consumo tan comunes como calzado, utensilios de cocina o ropa de vestir. Hoy en día, estos mismos bienes se fabrican con la ayuda de maquinaria sofisticada y en muchos casos con elementos de control electrónicos incorporados a estas máquinas que las hacen altamente rentables, ya que se consiguen elevados ciclos de producción. Así, hoy en día hablar de procesos industriales es casi lo mismo que hablar de procesos automatizados. Máquinas electrónicas tales como ordenadores, controles CNC, autómatas y robots, son totalmente corrientes en nuestras empresas, y el técnico que deba reparar estas máquinas o programar su funcionamiento o decidir la compra de nuevo material, debe conocer toda esta tecnología apasionante que constituye el mundo de la automatización industrial. 1.2
El sensor digital
En todo proceso industrial automatizado, es preciso captar señales que serán procesadas posteriormente. Uno de los sensores más comunes en las instalaciones industriales es el sensor digital, el que podemos imaginar como un interruptor eléctrico accionado por alguna variable física. Es el caso de los llamados “finales de carrera”, que son interruptores que se abren o se cierran según la fuerza que se haga sobre un elemento saliente en forma de rueda, varilla o pistón.
Fig.1.1. Finales de carrera OMRON.
11
Elementos de un proceso industrial
Capítulo 1
En el caso de los sensores inductivos, la variable física es un campo magnético que se ve influenciado por la presencia o ausencia en sus proximidades de materiales férricos, tales como el hierro o el acero en cualquiera de sus variantes. En estas condiciones, el sensor inductivo entrega un voltaje alto o bajo dependiendo de si la pieza férrica está dentro o fuera de su zona de acción.
Fig.1.2. Sensor inductivo SIEMENS.
Para materiales que no tienen características férricas, tales como madera, vidrio, cerámica, etc. se pueden usar sensores capacitivos. Estos sensores se fundamentan en la constante dieléctrica de la pieza que se aproxima a ellos, de tal forma que a su salida entregan un voltaje alto o bajo según el cuerpo a detectar esté o no en su zona de acción. Podemos citar también los sensores fotoeléctricos en general, dentro de los que tenemos por ejemplo los del tipo barrera, que entregan un voltaje alto o bajo según un elemento opaco, corte o no corte el haz de luz que pasa del cuerpo emisor hacia el receptor.
Fig.1.3. Sensores fotoeléctricos de barrera KEYENCE
Los sensores que detectan si una presión (por ejemplo de un gas en una tubería) está por encima o debajo de una determinada presión de consigna, reciben el nombre de presostatos, y si estos aparatos son eléctricos o electrónicos, a su salida nos entregan un voltaje alto o bajo según se de o no la circunstancia anterior. En fin, existen muchos más sensores de tipo digital en el mercado capaces de detectar variables físicas tan diferentes, como nivel de líquidos en tanques, presencia o ausencia de llama en un quemador industrial de gas, temperatura por encima o debajo de una temperatura de consigna, velocidad de un móvil por encima o debajo de una determinada velocidad prefijada, etc. Todos estos sensores, aun midiendo variables físicas de naturaleza totalmente diferente, tienen en común que la señal que entregan a su salida es (normalmente) una tensión eléctrica que pue12
Elementos de un proceso industrial
Capítulo 1
de ser alta (por ejemplo +24 VDC) o baja (por ejemplo 0 VDC). Cuando esto ocurre, decimos que el sensor es de tipo digital. 1.3
El sensor analógico
Cuando lo que se trata de medir no es la ausencia o presencia de una determinada variable física sino el valor que tiene dicha variable, entonces debemos emplear sensores analógicos, los que nos entregan a su salida, bien una tensión o bien una corriente proporcionales al valor que tenga dicha variable. Imaginemos que debemos medir el valor de una temperatura o el valor de una presión o la cantidad de litros por minuto del líquido que pasan por una tubería, en estos casos emplearemos sensores analógicos de temperatura, de presión o de caudal, con la precisión adecuada a cada caso. Lo mismo que antes hemos dicho para los sensores digitales referente a la gran cantidad de dispositivos existentes en el mercado, podemos decir lo mismo de los sensores analógicos, de los que existe una enorme variedad de modelos y características, dependiendo del tipo de variable que queramos medir y de la precisión que deseemos en la medida. Citemos por ejemplo un sensor de presión absoluta, capaz de medir presiones hasta 10 bar, y preparado para trabajar con líquidos corrosivos, que nos entrega a su salida una tensión máxima de 30 mV, con un error en la medida de ± 0.2%.
Fig.1.4. Sensor de presión OMEGA
Los termopares están formados por la unión de dos metales (especialmente elegidos), de tal forma que cuando se calienta la unión formada por estos metales, se genera un voltaje proporcional a la temperatura que se alcanza en la unión.
Fig.1.5. Termopares OMEGA
13
Elementos de un proceso industrial
1.4
Capítulo 1
El relé en general
El relé es sin duda un gran aliado dentro del mundo de los automatismos. Su funcionamiento podemos esquematizarlo en el siguiente dibujo:
A L B I
Fig.1.6. Principio del relé
Al cerrar el interruptor I, circula corriente por el devanado y el núcleo magnético (de hierro dulce) se transforma en un imán que atrae la pieza B (también de hierro dulce) sobre la A, cerrándose así el contacto eléctrico que hace que se encienda la lámpara L. La forma constructiva de un relé industrial puede ser muy variada en función del amperaje que los contactos puedan conmutar y de la tensión de funcionamiento, pudiéndose encontrar en el mercado relés que conmutan desde algunos miliamperios hasta unos 20 A. .
Fig.1.7. Relé industrial OMRON
1.5
El relé Reed
El relé Reed responde al mismo principio de funcionamiento que un relé normal, sólo que sus contactos de trabajo están encerrados dentro de una pequeña ampolla de vidrio en cuyo interior se ha introducido un gas inerte para evitar la oxidación de los contactos.
Fig.1.8. Principio del relé Reed
14
Elementos de un proceso industrial
Capítulo 1
Estos contactos están hechos de material ferromagnético y tienen forma de pequeñas varillas flexibles que están próximas entre si pero sin llegar a tocarse. En presencia de un campo magnético potente, tal como puede ocurrir al aproximar un imán a la ampolla de vidrio, las varillas se imantan y se atraen la una a la otra, con lo que se produce el contacto entre ambas, permitiendo así cerrar un circuito eléctrico. Este tipo de relé es muy seguro y se emplea ampliamente en la industria. 1.6
El contactor
El contactor podemos imaginarlo como un relé industrial capaz de trabajar con intensidades de corriente a partir de 20 A. Además de trabajar con elevadas intensidades de corriente, también es capaz de soportar fuertes sobrevoltajes en sus contactos procedentes de la interrupción de corrientes en los devanados de motores trifásicos, o incluso de la inversión brusca de corrientes en estos mismos devanados. Según la forma de trabajar el contactor, se agrupan en clases de funcionamiento tales como AC1, AC2, AC2’, AC3 y AC4, dependiendo del tipo de carga eléctrica que deba manejar el contactor.
Fig.1.9. Contactores SIEMENS
Además de la robustez de sus contactos eléctricos, el contactor se caracteriza por tener contactos eléctricos secundarios del tipo NA o NC, que son de estimable ayuda a la hora de realizar circuitos de maniobra con los contactos principales del contactor. Para nosotros, que en estos momentos sólo estamos interesados en el funcionamiento de los autómatas, el contactor debemos verlo como un elemento intermedio entre nuestro autómata y una carga eléctrica importante que deseamos manejar (por ejemplo, un motor trifásico con rotor en corto circuito). Dado que es evidente que desde un autómata no podemos excitar directamente una carga tan importante, el contactor, que sólo necesita en torno a 90 mA. para excitarse y cerrar sus contactos principales, nos resulta de gran ayuda porque nos basta desde el autómata enviar esta pequeña corriente al contactor, y éste será realmente el encargado de cerrar el circuito de potencia que ponga en marcha el motor.
15
Elementos de un proceso industrial
1.7
Capítulo 1
El cilindro neumático
El cilindro neumático está formado básicamente por un cilindro de metal (normalmente aluminio o aleaciones de aluminio capaces de soportar grandes esfuerzos) y en su interior un pistón perfectamente ajustado a la pared del cilindro que lleva un vástago de metal que sobresale por uno de sus extremos.
Fig.1.10. Cilindro neumático FESTO
El aire que penetra en el interior del cilindro es el que mueve el pistón que hay en su interior y éste a su vez, el que mueve el vástago del cilindro. Hay que hacer notar, que el aire que penetra en los cilindros neumáticos, ha de ser un aire totalmente limpio, carente de partículas pulverulentas en suspensión y estar totalmente seco. Para conseguir esto, se emplean filtros a base de materiales porosos y condensadores de humedad. 1.8
La electro válvula
Dado que los cilindros neumáticos funcionan con aire a presión y dado que los autómatas sólo disponen de señales eléctricas para gobernar los elementos que deben controlar, se hace necesario una pieza intermedia (la electro válvula) que permita transformar las señales eléctricas del autómata en acciones que controlen el funcionamiento de los cilindros neumáticos. El funcionamiento básico de una electro válvula se muestra más abajo en los dibujos, donde puede verse como el desplazamiento de una pieza (corredera) a derecha e izquierda, hace posible desviar el aire a presión que entra en la electro válvula, hacia los orificios superiores, de tal forma que en una posición de la corredera, el aire impulsa al émbolo del cilindro en un sentido, y en otra posición de la corredera el aire impulsa el émbolo en sentido contrario. Entre los modelos de electro válvulas más importantes que existen, podemos citar las del tipo 5/2 monoestables (izquierda) o las 5/3 biestables (derecha) con centro cerrado, de las que se adjunta un dibujo mostrando su principio de funcionamiento y el símbolo esquemático:
Fig.1.11. Electro válvulas 5/2 y 5/3
16
Elementos de un proceso industrial
Capítulo 1
Las del tipo 5/2 monoestables son adecuadas para controlar el movimiento de cilindros neumáticos de doble efecto con posiciones estables en los extremos del cilindro, mientras que las 5/3 biestables con centro cerrado son adecuadas para controlar cilindros neumáticos de doble efecto en los que se desea que el émbolo pueda detenerse, no sólo en los extremos del cilindro sino también en puntos intermedios del recorrido. Otro aspecto que diferencia unas electro válvulas de otras, es la tensión de excitación del solenoide, y como es lógico deberemos escoger aquellos modelos de electro válvulas que tengan una tensión de excitación del solenoide igual que la tensión de salida de nuestro autómata (normalmente, 24 VDC).
Fig.1.12. Electro válvula FESTO
1.9
Motores trifásicos
Los motores trifásicos en general, y muy en particular los asíncronos de rotor en corto circuito o “jaula de ardilla”, son sin duda piezas fundamentales en todo proceso industrial, por cuanto son motores robustos y fiables en su funcionamiento al no tener en su interior piezas que rocen las unas con las otras. Son motores muy sólidos, que tienen muy buenas prestaciones mecánicas, y quizás lo que es más importante, a precios muy competitivos. Su principio de funcionamiento se basa en los devanados de cobre que hay en el estator, que al ser conectados a tensión trifásica, crean un campo magnético giratorio en su interior. El rotor, formado por una pieza que recuerda la jaula de una ardilla (de ahí su nombre) reacciona a este campo magnético, creando su propio campo magnético pero desfasado 90º respecto al creado por el estator. Este desfase entre ambos campos magnéticos, es el causante de que el momento de la fuerza que tiende a hacer girar el rotor, sea siempre máximo, lo que permite usar estos motores en aplicaciones donde el arranque inicial ha de poseer un elevado par motor, como es el caso de los tornos eléctricos.
Fig.1.13. Motor trifásico SIEMENS
17
Elementos de un proceso industrial
Capítulo 1
Así, dependiendo del número de devanados que tenga el estator, múltiplos de tres (3), se consiguen motores que giren aproximadamente a: 3000 RPM, 1500 RPM, 1000 RPM, 750 RPM y 600 RPM. Otra variante de los motores trifásicos asíncronos de rotor en corto circuito, son los llamados moto reductores, los que están formados por el motor propiamente, acoplados a un mecanismo reductor de velocidad, tal como puede ser por ejemplo una corona dentada accionada por un tornillo sin fin solidario con el eje del motor. Sin embargo, tanto los motores trifásicos de devanados múltiples como los moto reductores, se están viendo relegados por la aparición de un nuevo elemento que casi podríamos decir que es revolucionario. Estamos hablando del variador de frecuencia, que permite a un coste muy aceptable, variar directamente la velocidad de giro de un motor trifásico asíncrono en corto circuito, con gran facilidad y haciendo trabajar al motor sin que éste pierda prestaciones tan importantes como es su par motor. Con todo, en estas aplicaciones hay que vigilar que a velocidades de giro muy bajas, el motor no se caliente, por cuanto el ventilador que llevan los motores trifásicos, es solidario con el motor mismo y lógicamente si el motor gira a pocas revoluciones el ventilador también, y es entonces cuando el motor puede calentarse peligrosamente. Siendo esto un problema, se resuelve con facilidad, simplemente proporcionando al motor un ventilador con motor eléctrico independiente que impulse hacia el motor el mismo caudal de aire independientemente de la velocidad de giro del motor.
18
Sistemas de numeración
Capítulo 2
CAPÍTULO 2
Índice
Sistemas de numeración 2.1 Sistema de numeración decimal El sistema de numeración que usamos en nuestra vida diaria, está formado por diez (10) cifras o signos numéricos, que son: Se escribe
Se pronuncia
0 1 2 3 4 5 6 7 8 9
Cero Uno Dos Tres Cuatro Cinco Seis Siete Ocho Nueve
Tenemos un total de diez (10) símbolos o signos numéricos, que todos conocemos perfectamente. Cuando tenemos que escribir una cantidad (entera), lo hacemos de la siguiente forma. Por ejemplo, imaginemos que tenemos 1492 naranjas. Escribiríamos: 1492 naranjas También hemos convenido que el primer número que empieza por la derecha se llama UNIDADES. Así, en el caso del número anterior, el “2” son las UNIDADES. El siguiente número empezando por la derecha y después de las UNIDADES, se ha convenido en llamarle DECENAS, y por tanto en nuestro número de ejemplo, el “9” son las DECENAS. Al siguiente número se ha convenido en llamarle CENTENAS, y en nuestro número de ejemplo el “4” son las CENTENAS. Al siguiente número, si lo hay, se le llamaría MILLARES o UNIDADES DE MILLAR, y en nuestro ejemplo los MILLARES seria el número “1”, etc. O sea que, según el convenio de numeración, los dígitos que forman los números enteros, según el lugar que ocupan dentro del número, reciben el siguiente nombre: Primer número empezando por la derecha Segundo número empezando por la derecha Tercer número empezando por la derecha Cuarto número empezando por la derecha Quinto número empezando por la derecha Sexto número empezando por la derecha Séptimo número empezando por la derecha Octavo número empezando por la derecha etc.
19
UNIDADES DECENAS CENTENAS UNIDADES DE MILLAR DECENAS DE MILLAR CENTENAS DE MILLAR UNIDADES DE MILLON DECENAS DE MILLON
Sistemas de numeración
Capítulo 2
Vamos a ver ahora qué significado tienen los números que hemos escrito en el ejemplo anterior. Cuando escribimos 1492 naranjas, realmente queremos decir que: Tenemos 2 naranjas sueltas Tenemos 9 cajas (decenas) de 10 naranjas cada caja Tenemos 4 cajas (centenas) de 100 naranjas cada caja Tenemos 1 caja (millares) de 1000 naranjas Observamos como las cajas, a partir de las decenas, son múltiplos de diez (10). Por ejemplo una caja de centenas, es diez (10) veces mayor que una caja de decenas. Una caja de millares, es diez (10) veces mayor que una de centenas, etc. Así pues, y teniendo en cuenta que la magnitud de una unidad se multiplica por diez (10) cuando pasamos a la unidad superior a su izquierda, el número anterior también se puede escribir así: 1492 = 1 x 10 x 10x 10 + MIL
4 x 10 x 10
+
CUATROCIENTOS
9 x 10 +
2
NOVENTA DOS
O así: 1 x 10 x 10 x 10 4 x 10 x 10 9 x 10 2 Es por esta razón que los números que usamos habitualmente decimos que están escritos en BASE DIEZ (10). Ahora entendemos el porqué. Sencillamente porque el número diez (10) es el que le da significado y valor numérico a la posición que ocupa cada dígito dentro del número total. Si por ejemplo el número anterior (1492) lo escribiéramos así: 1942 ¿Nos daría lo mismo? Claro está que no, ya que según lo que hemos dicho hasta aquí, el número 1942 significa: 1 x 10 x 10 x 10 9 x 10 x 10 4 x 10 2 Y salta a la vista que este segundo número, aunque tenga los mismos dígitos, es mayor que el anterior.
20
Sistemas de numeración
Capítulo 2
2.2 Sistema de numeración binario Ahora que ya entendemos como se forman los números, nos preguntamos si seria posible trabajar con “cajas” de menor capacidad, por ejemplo con cajas de capacidad dos (2). Veamos como haríamos esto. Imaginemos que tenemos un montón de naranjas en el suelo y nos han dicho que tenemos que contarlas, sólo que ahora las cajas que tenemos tienen capacidades de dos (2), cuatro (4), ocho (8), dieciséis (16), treinta y dos (32), sesenta y cuatro (64), etc. naranjas. Cogemos la primera naranja, después cogemos la segunda, y como tenemos dos (2) naranjas, las metemos en una caja de dos (2). Si ahora alguien nos preguntase cuantas naranjas hemos contado, podríamos decirle que hemos contado: 10 naranjas Esto es, no tenemos ninguna naranja suelta (cifra primera de la derecha) pero sí tenemos una (1) caja de dos (2) naranjas (cifra segunda empezando por la derecha). Si cogemos ahora dos (2) nuevas naranjas, junto con los dos (2) que ya teníamos, las podemos meter en una caja de cuatro (4), con lo que el número de naranjas hasta ahora será: 100
naranjas
Que significa que no tenemos ninguna naranja suelta, no tenemos tampoco ninguna caja de dos (2) pero si tenemos una (1) caja de cuatro (4). Si ahora cogemos una naranja mas, tendríamos 101 naranjas (una caja de cuatro (4) y una suelta) y si cogemos otra más, tendremos 110 naranjas (una caja de cuatro (4) y otra de dos (2), pero ninguna suelta). Se entiende que este procedimiento puede seguirse indefinidamente y que podemos escribir cualquier cantidad empleando únicamente dos (2) dígitos, que son el cero (0) y el uno (1). A estos números que emplean “cajas” que van de dos (2) en dos (2), o sea, con capacidad para 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, etc. unidades, se les llama números binarios o números escritos en base dos (2), y entendemos porqué se llaman así. Sencillamente porque el número dos (2) es el que le da significado y valor numérico a los dígitos del número binario total, lo mismo que antes pasaba con los número escritos en base diez (10). Observamos también, que solamente necesitamos dos (2) tipos de símbolos o dígitos para trabajar con números binarios, que son el cero (0) y el uno (1), frente a los diez (10) que se emplean normalmente en el sistema de numeración decimal. Hasta aquí queda claro que dada una cantidad de elementos a contar, lo mismo podemos escribirla con números en base diez (10) (sistema decimal), que con números en base dos (2) (sistema binario). Sin duda, ambos números tendrán aspecto distinto, pero ambos son iguales puesto que representan el mismo número de objetos o unidades contadas. Todo esto está bien, pero ¿cómo podemos hacerlo para pasar de un número escrito en base dos (2) a su equivalente en base diez (10)? La respuesta es sencilla. Simplemente tenemos que ir anotando las “cajas” existentes y su contenido. Veamos un ejemplo: 21
Sistemas de numeración
Capítulo 2
Número binario (escrito en base dos (2))…………. 1001101 Significado de cada dígito según su posición, empezando por la derecha: Nº de cajas 1 0 1 1 0 0 1
Unidades Cajas de dos (2) Cajas de cuatro (4) Cajas de ocho (8) Cajas de diez y seis (16) Cajas de treinta y dos (32) Cajas de sesenta y cuatro (64)
Naranjas 1 4 8 64
Total naranjas = 77 Bien, parece que esto no es tan difícil después de todo, pero ¿y si lo que queremos es transformar el número 77 escrito en base diez (10) en su equivalente en base dos (2)? ¿Cómo lo hacemos? Bien, en este caso el método consiste en dividir por dos (2) el número 77 (o el que nos den) hasta que la división ya no sea posible. Veamos esto: Dividendo
Divisor
Cociente
Resto
77
2
38
1
38
2
19
0
19
2
9
1
9
2
4
1
4
2
2
0
2
2
1
0
Una vez terminada la división, tomaremos el último cociente y los sucesivos restos en el orden marcado por las flechas, y con esto obtendremos el número binario equivalente, en este caso: 1001101. 2.3 Bit o Binit Dado un número binario cualquiera, como por ejemplo el anterior 1001101, ya que los dígitos que forman dicho número pertenecen a un número binario, a cada uno de ellos se le llama Binit. La palabra Binit procede del inglés “BINARY DIGIT”, tomando las tres primeras letras de “BINARY” (BIN) y las dos últimas de “DIGIT” (IT). Sin embargo, es práctica habitual llamar a los dígitos binarios con la palabra Bit (en lugar de Binit), lo que no es correcto, ya que como hemos dicho debe decirse Binit y no Bit, pero se ha extendido tanto este error, que también nosotros emplearemos la palabra Bit al hablar de dígitos binarios en lugar de Binit. Así pues, llamaremos Bit a un dígito binario cualquiera, sea cero (0) o uno (1).
22
Sistemas de numeración
Capítulo 2
2.4 Sistema de numeración octal Seguramente ya se habrá preguntado que si en definitiva el sistema de numeración decimal consiste en hacer “cajas” de 10, 100 (10 x 10), 1000 (10 x 10 x 10), etc. unidades de capacidad, y el sistema binario consiste en hacer “cajas” de 2, 4 (2x 2), 8 (2 x 2 x 2), 16 (2 x 2 x 2 x 2), etc. unidades de capacidad, entonces lo único que tenemos que hacer es coger “cajas” de la medida conveniente para así poder escribir nuestros números en la base que queramos. Efectivamente, las cosas son tan sencillas como hemos supuesto. Así pues, si por ejemplo queremos escribir números en base ocho (8) (base octal), tendremos que hacer “cajas” de 8, 64 (8 x 8), 512 (8 x 8 x 8), 4096 (8 x 8 x 8 x 8), etc. El número de símbolos empleados para los dígitos octales es también ocho (8) y son el 0, 1, 2, 3, 4, 5, 6 y 7. Por ejemplo, el número octal 3407, ¿a qué número decimal corresponde? Sabiendo lo que significa cada dígito, no tenemos más que aplicar lo que ya sabemos, y tendremos la solución a nuestra pregunta: Nº de cajas 7 0 4 3
Unidades sueltas Cajas de 8 (8) Cajas de 64 (8x8) Cajas de 512 (8x8x8)
Naranjas 7 256 1536
Total naranjas =
1799
¿Cómo pasaríamos ahora el número decimal 1799 a base octal? El sistema es similar al que ya vimos para pasar números decimales a binario, dividiendo sucesivamente por ocho (8) hasta que no se pueda más. Veamos el procedimiento: Dividendo 1799
Divisor
Cociente
Resto
8
224
7
224
8
28
0
28
8
3
4
Y volvemos a recuperar nuestro número original 3407, que en octal significa lo mismo que 1799 en base diez. 2.5 Sistema de numeración hexadecimal Bien, ya que nos hemos lanzado a escribir números en bases de numeración distintas a la nuestra habitual, la base diez (10), veamos por último una nueva base de numeración que suele emplearse bastante en temas de programación de autómatas. Nos estamos refiriendo a la base dieciséis (16) de numeración, también llamada base de numeración hexadecimal.
23
Sistemas de numeración
Capítulo 2
Los números expresados en esta base de numeración, emplean dieciséis (16) tipos diferentes de símbolos, y son: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F Observamos que además de los símbolos que ya conocemos que van del cero (0) hasta el nueve (9), aparecen las letras A, B, C, D, E y F, y nos quedamos un poco perplejos, ya que no estamos acostumbrados a ver letras con valor numérico. El caso es que dado que necesitamos dieciséis (16) símbolos diferentes para representar los dieciséis (16) dígitos que necesitamos para trabajar en base dieciséis (16), una de dos, o inventamos signos nuevos a partir del nueve (9) hasta llegar al dieciséis (16), o simplemente usamos las letras A, B, C, D, E y F pero interpretándolas, no como letras, sino como símbolos numéricos. Esto es justamente lo que se hace, o sea, asignamos o damos valor numérico a las letras A, B, C, D, E y F con el siguiente valor numérico: Dígito hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F
Valor numérico del dígito hexadecimal en base diez (10) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Así pues, el aspecto de un número hexadecimal puede ser el siguiente: O también:
A2B00AF 3BA0077
O también:
345
24
Sistemas de numeración
Capítulo 2
Alguien puede pensar que este último número no es un número hexadecimal ya que no tiene “letras”, pero obsérvese que el hecho de que en base dieciséis (16) un número pueda tener letras, no quiere decir que deba tenerlas necesariamente. Pensemos por ejemplo en el número decimal 1044. Este número no tiene 8’s ni 9’s, y sin embargo es un número decimal. Sin embargo es evidente que esto de escribir números en bases diferentes, puede llevar a confusión, a menos que sepamos exactamente en que base estamos trabajando. Es por esta razón, para evitar posibles confusiones, que se suele poner alguna indicación que advierta al lector de la base en la que se ha escrito el número en cuestión. Así por ejemplo: 1001110 3406 A05006
B O H
Nos estaría diciendo que 1001110 es un número binario (B), el número 3406 es un número octal (O), y el número A05006 es un número hexadecimal (H). Veamos ahora como lo hacemos para pasar de un número escrito en hexadecimal, a su equivalente en decimal. Si nos dieran un número hexadecimal, por ejemplo A05006, ¿cómo lo podríamos pasar a base diez (10)? Si tenemos en cuenta que ahora las “cajas” van de dieciséis (16) en dieciséis (16), esto es, ahora las “cajas” son de dieciséis (16), de doscientas cincuenta y seis (256 = 16 x 16), de cuatro mil noventa y seis (4096 = 16 x 16 x 16), de sesenta y cinco mil quinientas treinta y seis (65536 = 16 x 16 x 16 x 16), de un millón cuarenta y ocho mil quinientas setenta y seis (1048576 = 16 x 16 x 16 x 16 x 16), etc. tendremos: Nº de cajas 6 0 0 5 0 A
Unidades sueltas Cajas de 16 unidades Cajas de 256 unidades Cajas de 4.096 unidades Cajas de 65.536 unidades Cajas de 1.048.576 unidades
Naranjas
6
20.480 10.485.760
Total naranjas =
10.506.246
Claro que, por otra parte, ¿cómo pasaríamos un número decimal a base hexadecimal? Por ejemplo, el anterior número 10.506.246 en base diez (10), ¿será verdad que en hexadecimal es el A05006? Para comprobarlo, seguiremos el método ya conocido de ir dividiendo el número, en este caso el 10.506.246, por la base a la que se quiere pasar este número, en este caso dieciséis (16): Dividendo
Divisor
Cociente
Resto
10506246
16
656640
6
656640
16
41040
0
41040
16
2565
0
2565
16
160
5
160
16
10
0
25
Sistemas de numeración
Capítulo 2
Que leído en el orden indicado, nos da: (10)05006 = A05006 Que es el número original. 2.6 Paso del sistema binario a octal y viceversa Empecemos pintando la siguiente tabla:
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
Tomemos ahora un número binario cualquiera, por ejemplo el número: 10011011001101 Si lo que deseamos es transformar este número binario a su equivalente en base diez (10), empezaremos por hacer grupos de tres (3) dígitos, empezando por la derecha, de la siguiente forma: 010 011 011 001 101 Observamos que ha sido necesario añadir un cero (0) al ultimo grupo de números, ya que solo teníamos dos (2) números y necesitábamos tres (3), pero esto tampoco ha supuesto ningún problema, ya que los ceros añadidos por la izquierda, tampoco alteran el valor numérico del conjunto total. Bien, ahora debemos sustituir cada triada de números por su equivalente, según la tabla anterior. Así pues, nos quedará: 010 011 011 001 101 2 3 3 1 5 Y leemos el número 23315. Este número es el número octal equivalente al número binario 10011011001101, y observamos que fácil nos ha resultado pasar de binario a octal. Y para pasar un número de octal a binario, ¿cómo lo hacemos? Sencillamente, haremos uso de la misma tabla anterior e iremos sustituyendo directamente los números octales por sus triadas de números binarios. Veamos un ejemplo.
26
Sistemas de numeración
Capítulo 2
Dado el número octal 754031, vamos a pasarlo al número binario equivalente: 754031
111
101
100
000
011
001
Y juntando todos los números nos queda: 111101100000011001. 2.7 Paso del sistema binario a hexadecimal y viceversa Veamos ahora como pasaríamos un número binario a su equivalente en hexadecimal. Para ello, deberemos tener en cuenta la siguiente tabla de conversión: 0000 0001 0010 0011 0100 0101 0110 0111
0 1 2 3 4 5 6 7
1000 1001 1010 1011 1100 1101 1110 1111
8 9 A B C D E F
Si partimos del mismo número binario anterior, esto es, el número 10011011001101, ahora la regla consiste en formar grupos de cuatro (4) dígitos empezando por la derecha: 0010 0110 1100 1101 Nuevamente observamos como ha sido necesario añadir dos (2) ceros a la izquierda del número, que eran necesarios para tener grupos exactos de cuatro (4) dígitos, tal y como exige la regla. Bien, ahora se trata de asignar el número correspondiente, según la tabla anterior, a cada uno de los grupos de cuatro (4) dígitos: 0010 0110 1100 1101 2 6 C D Y leemos el número 26CD que en hexadecimal es lo mismo que el número binario 10011011001101. Sólo nos queda ahora pasar números hexadecimales a binarios, y el método también es muy sencillo, pues se trata de volver a aplicar la tabla anterior. Veamos un ejemplo. Nos dan el número hexadecimal A0DEF96. Para pasarlo a binario, sustituimos directamente cada dígito hexadecimal por la tétrada de números binarios de la tabla anterior, esto es: A0DEF96 Es equivalente a: 1010000011011110111110010110. 27
Sistemas de numeración
Capítulo 2
2.8 Código BCD La definición de código es la siguiente: “Es un conjunto de unidades de información relacionadas de forma sistemática y biunívoca con otro conjunto de signos y símbolos según unas determinadas reglas de traducción fijadas de antemano”. De la lectura anterior sobre la definición de código, deducimos que es posible crear infinidad de códigos distintos. Sin embargo en la práctica, solamente algunos códigos se han impuesto de forma generalizada, y entre ellos tenemos el código BCD, que se define según la siguiente tabla de conversión: 0 1 2 3 4 5 6 7 8 9
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Veamos como funciona esto. Si nos dan un número cualquiera escrito en base diez (10), tal como: 3891 Para pasarlo a código BCD, cambiaremos cada dígito por la tétrada de números correspondiente que indica la tabla anterior: 3891
0011
1000
1001
0001
Y reuniendo ahora estos números, tendremos: 11100010010001 Donde hemos suprimido los dos (2) ceros de la izquierda. A la vista de este número, podríamos pensar que se trata del número 3891 escrito en base dos (2), y para comprobar que esto no es así, convirtamos 3891 al número equivalente en base dos (2):
28
Sistemas de numeración
Dividendo 3891 1945 972 486 243 121 60 30 15 7 3
Capítulo 2
Divisor 2 2 2 2 2 2 2 2 2 2 2
Cociente 1945 972 486 243 121 60 30 15 7 3 1
Resto 1 1 0 0 1 1 0 0 1 1 1
Y nos queda 111100110011 que es distinto al número escrito en código BCD anterior. Por tanto, queda claro que un número escrito en código BCD, NO es de ninguna manera un número binario (aunque lo parezca), sino una codificación de un número real escrito en base diez (10).
29
Clases de registros
Capítulo 3
CAPÍTULO 3
Índice
Clases de registros 3.1 Biestables En electrónica digital se estudia un circuito especial que se conoce con el nombre de BIESTABLE. El biestable, como su nombre indica, tiene únicamente dos (2) estados estables, que quiere decir que a la salida de este elemento sólo podemos tener o un valor de tensión alto (normalmente +5 V.) o un valor de tensión bajo (normalmente 0 V.), pero en ningún caso un valor de tensión diferente a una cualquiera de estas dos (2) tensiones (a no ser que el biestable esté averiado). Si convenimos que el valor de tensión alto (+5 V.) de un biestable representa o equivale al numero “1” binario y que el valor de tensión bajo (0 V.) representa o equivale al numero binario “0”, entonces un biestable puede servirnos perfectamente para materializar los Bits de una maquina digital. 3.2 Registros Si un biestable puede almacenar un Bit, cuando queramos almacenar (o manipular) un conjunto de Bits, lógicamente emplearemos un conjunto de biestables. A estos conjuntos de biestables se les llama genéricamente REGISTROS que pueden estar formados en principio por un número cualquiera de biestables. 3.2.1
Bit
El Bit podemos representarlo como un registro formado por un único elemento de la siguiente manera: X
Donde “X” es el nombre que le hemos dado al Bit. Si en un momento determinado el Bit “X” tiene el valor “0”, podemos representarlo así: X 0
Y si este Bit toma el valor “1” y queremos representarlo, pondremos: X 1
31
Clases de registros
3.2.2
Capítulo 3
Nibble
La palabra NIBBLE se emplea para designar a registros formados por cuatro (4) Bits. Si al Bit lo hemos representado por un cuadrado y un nombre en la parte superior, al Nibble lo podemos representar como una serie de cuatro (4) pequeños cuadrados, de la siguiente manera: 3
2
1
0
Siendo la numeración que hemos puesto encima de cada cuadrado, el nombre que le damos a cada Bit (dentro del Nibble). 3.2.3
Byte
Llamamos Byte a un registro cualquiera que esté formado por ocho (8) Bits. Para representar un Byte gráficamente, lo haremos pintando ocho (8) cuadrados pequeños en sentido horizontal, y los numeraremos del cero “0” al “7” empezando por el que está más a la derecha: 7
6
5
4
3
2
1
0
Si quisiéramos representar el valor de un Byte para valores concretos de los Bits que lo forman, pondríamos (por ejemplo): 7
6
5
4
3
2
1
0
1
1
0
1
0
0
1
0
Siendo la forma de representación anterior totalmente correcta, resulta sin embargo más sencillo escribir directamente el valor numérico interno, prescindiendo de los cuadrados, de la siguiente forma: 11010010 Podemos simplificar aun más la forma de escribir el contenido numérico anterior, formando dos (2) grupos de números (dos (2) Nibbles), de la siguiente forma: 1101 0010 Y asociando cada Nibble al número hexadecimal de la tabla del apartado 2.7, tendremos: 1101 0010
D
2
32
Clases de registros
Capítulo 3
Con lo que podemos referirnos al contenido del Byte anterior simplemente escribiendo D2. Cuando se dispone de una gran cantidad de registros del tipo Byte, tal como pueden ser miles de Bytes, se hace uso de una unida superior al Byte que es Kilo Byte (KB), siendo el Kilo Byte la cantidad de 1.024 Bytes exactamente: 1 KB = 1.024 Bytes Si la cantidad de Bytes de que se está hablando supera el millón de Bytes, entonces se hace uso de una unidad superior al KB, que es el Mega Byte (MB), siendo el Mega Byte la cantidad de 1.024x1.024 Bytes exactamente: 1 MB = 1.024x1.024 Bytes = 1.048.576 Bytes Por ultimo, si la cantidad de Bytes de que se está hablando es superior al millar de MB, entonces se hace uso del Giga Byte (GB) que son exactamente 1.024x1.024x1.024 Bytes: 1 GB = 1.024x1.024x1.024 Bytes = 1.073.741.824 Bytes 3.2.4
Word
Si tenemos un conjunto de dieciséis (16) Bits, diremos que el registro formado por estos dieciséis (16) Bits, es un Word. O dicho con otras palabras, un Word es un registro formado por dieciséis (16) Bits. El Word, al igual que el Byte, se puede representar por un conjunto de pequeños cuadrados convenientemente numerados: 15 14 13
12 11 10
9
8
7
6
5
4
3
2
1
0
Si tenemos que representar los estados particulares de cada uno de los Bits que forman el Word en un momento determinado, podemos al igual que antes con el Byte, hacerlo de la siguiente manera (por ejemplo): 15 14
13 12 11 10
9
8
7
6
5
4
3
2
1
0
0
0
1
1
0
0
1
1
1
0
0
1
1
0
1
1
Si prescindimos del dibujo de los cuadros y de los números que hemos puesto encima, nos quedaría simplemente: 0100111100111001 Y si al igual que antes con los Bytes, hacemos grupos de cuatro (4) (Nibbles), tendremos: 0100 1111 0011 1001 Y si ahora traducimos cada Nibble por su equivalente hexadecimal según la tabla 2.7, tendremos: 0100 4
1111 F 33
0011 1001 3 9
Clases de registros
Capítulo 3
Con lo que el contenido del Word de ejemplo anterior quedaría simplemente como 4F39. 3.2.5
Double Word
El Double Word (doble palabra) es un registro formado por treinta y dos (32) Bits, que también al igual que el Byte y el Word podemos representar como un conjunto de treinta y dos (32) pequeños cuadrados numerados de la siguiente manera: 31
0
En este caso hemos pintado los cuadrados más pequeños, simplemente para que cupiesen en el papel, y también hemos suprimido los números intermedios que van del “0” al “31” puesto que el resto se sobrentiende perfectamente. No vamos a insistir aquí más sobre como representar el contenido numérico que pueda tener un Double Word, puesto que tendría el mismo tratamiento que en el caso del Word o del Byte. Esto es, haríamos grupos de cuatro (Nibbles) y pondríamos su equivalente en hexadecimal, según la tabla 2.7. Conviene sin embargo insistir aquí que el Double Word equivale a dos (2) Word, y como cada Word equivale a su vez a otros dos (2) Bytes, en definitiva el Double Word también equivale a cuatro (4) Bytes.
Word 1 Byte 3
Word 0 Byte 2
Byte 1
Byte 0
Podemos insistir aún más y decir que puesto que un Byte son dos (2) Nibbles, el Double Word equivale también a ocho (8) Nibbles, si bien esto ultimo no lo hemos representado en el dibujo por razones de claridad en el mismo. 3.2.6
Long Word
El Long Word (palabra larga) es por definición un registro formado por sesenta y cuatro (64) Bits, y lo mismo que hemos hecho con los demás registros, también el Long Word se puede representar gráficamente por una sucesión de sesenta y cuatro (64) cuadritos, numerados de derecha a izquierda desde el cero (0) al sesenta y tres (63). 63
0
A registros de esta longitud son aplicables todo cuanto hemos dicho para los registros anteriores, y así podemos decir que el Long Word equivale a dos (2) Double Word, a cuatro (4) Word, a ocho (8) Byte, a dieciséis (16) Nibble, y por supuesto a sesenta y cuatro (64) Bits. Hacemos notar, sin embargo, que actualmente los registros de sesenta y cuatro (64) Bits únicamente se emplean en informática, pero no en programación de autómatas SIEMENS.
34
Operaciones lógicas
Capítulo 4
CAPÍTULO 4
Índice
Operaciones lógicas 4.1 Introducción al álgebra de Bool George Bool nació el 2 de noviembre de 1815 en Lincoln (Inglaterra) y murió el 8 de diciembre de 1864 en Ballintemple (Irlanda). A él se debe la concepción de un nuevo tipo de álgebra aplicada al razonamiento lógico, que lleva su mismo nombre. El álgebra de Bool a diferencia del álgebra tradicional, no tiene que ver con el cálculo numérico, sino con el razonamiento lógico basado en dos únicas posibilidades: CIERTO o FALSO. Si en una conversación normal, admitimos que una determinada circunstancia puede que ocurra en todo o en parte, en el álgebra de Bool esto no es posible, ya que sólo se admite que la circunstancia de la que se está hablando, ocurra o no ocurra plenamente (no hay términos medios). Conceptos que usamos en la vida diaria tales como, “un poco”, “ligeramente”, “bastante”, “algunas veces”, etc., no tienen sentido en álgebra de Bool, donde solo existen dos opciones: “el hecho del que estamos hablando ocurre plenamente y es totalmente cierto”, o bien, “el hecho del que estamos hablando no ocurre de ninguna forma y es totalmente falso”. A estos dos estados posibles que puede tener un determinado fenómeno físico, se les suele representar a cada uno de ellos con las letras “H” y “L” (del ingles High y Low) o también con las palabras “TRUE” y “FALSE” o también con los números “1” y “0”, si bien en este último caso, los números “1” y “0” aquí no tienen valor numérico sino únicamente representan uno de los dos (2) estados posibles que pueda tomar un determinado fenómeno físico. A estos fenómenos físicos que solamente pueden tomar dos (2) (y únicamente dos (2)) estados, se les llama VARIABLES LÓGICAS. Un ejemplo de variable lógica puede ser el hecho de lanzar una moneda al aire. Si al hecho de salir cara le asignamos el valor “1” y al hecho de salir cruz le asignamos el valor “0”, entonces tenemos una variable lógica que sólo puede tomar uno de dos valores posibles, el “1” o el “0”. Otro ejemplo podría ser un interruptor de la luz. Si el interruptor sólo puede estar en el estado “CONECTADO” o “DESCONECTADO”, podemos asignar al estado “CONECTADO” el valor “1” y al “DESCONECTADO” el valor “0”, por lo que nuevamente estamos frente a una variable de tipo lógico. A las variables de tipo lógico, se las representa bien con una letra (A, B, C,…etc.) o bien las podemos representar con un nombre (MONEDA, INTERRUPTOR,… etc.) 4.2 Operaciones AND, OR y NOT De la misma manera que en el álgebra clásica se definen las operaciones de suma, resta, multiplicación y división entre números, aquí en el álgebra de Bool se definen también dos operaciones básicas entre los estados “1” y “0”, que son la operación AND y la operación OR. La operación AND se define de la siguiente forma:
35
Operaciones lógicas
Capítulo 4
Variable lógica A
Variable lógica B
A AND B
0 0 1 1
0 1 0 1
0 0 0 1
La tabla anterior representa todas las formas posibles de operar (con la operación AND) los estados “1” y “0”. Observamos que esta operación nos recuerda a la multiplicación clásica empleando solamente dos (2) números: el uno (1) y el cero (0), pero es necesario insistir una vez más, que no existe relación entre el “1” lógico del álgebra de Bool y el uno (1) numérico del álgebra tradicional. La tabla anterior la podemos también expresar con palabras de la siguiente manera: El resultado de una operación lógica AND entre dos (2) variables lógicas A y B será cierto (resultado “1”) cuando ambas variables lógicas sean ciertas (estado “1”), en caso contrario (esto es, cuando alguna de ellas al menos sea falsa o “0”) el resultado será falso o “0”. Para representar la operación AND entre dos (2) variables lógicas A y B, se puede hacer de la siguiente forma: A AND B Una segunda operación de gran importancia en el álgebra de Bool, es la operación OR, que se define según la siguiente tabla (llamada también tabla de la verdad de la operación OR): Variable lógica A
Variable lógica B
A OR B
0 0 1 1
0 1 0 1
0 1 1 1
Nuevamente no podemos evitar la tentación de comparar esta tabla con la operación suma del álgebra tradicional, entre los números uno (1) y cero (0), pero observamos como la última fila no es dos (2) como en la suma tradicional sino “1”. Así pues, no insistiremos más y aceptaremos que estas operaciones no tienen realmente relación con el álgebra que nos enseñaron cuando íbamos al colegio. Son DIFERENTES. También aquí podemos expresar con palabras la tabla anterior y podemos decir que la operación lógica OR entre dos (2) variables lógicas A y B es cierta o “1”, cuando al menos una variable lógica (o ambas) son ciertas o “1”. Solamente cuando ambas variables lógicas son falsas o “0”, el resultado de la operación es falso o “0”. Para representar la operación OR entre dos (2) variables lógicas A y B, se puede hacer de la siguiente forma: A OR B Por último nos queda la operación NOT (o NEGACION), que se puede representar colocando una pequeña raya horizontal sobre la variable lógica a la que se esté aplicando.
36
Operaciones lógicas
Capítulo 4
Así por ejemplo, la operación NOT sobre la variable lógica A se representaría de la siguiente forma:
Y se pronuncia “NOT A”. La tabla de la verdad de esta operación es la siguiente: Variable lógica A 0 1
1 0
También aquí podemos de una manera muy sencilla expresar con palabras la operación NOT, simplemente diciendo que la operación NOT sobre “0” es “1” y que la operación NOT sobre “1” es “0”. 4.3 Operaciones NAND, NOR, XOR y XNOR De las operaciones básicas definidas anteriormente AND, OR y NOT se derivan otras, que podríamos llamar compuestas por estar formadas por combinaciones de las operaciones básicas AND, OR y NOT. Tal es el caso de la operación NAND (NAND = NOT AND) cuya definición es la siguiente: Variable lógica A
Variable lógica B
A NAND B
0 0 1 1
0 1 0 1
1 1 1 0
Así, la operación NOR (NOR = NOT OR) se define de la siguiente manera: Variable lógica A
Variable lógica B
A NOR B
0 0 1 1
0 1 0 1
1 0 0 0
Y la operación XOR tiene la siguiente definición: Variable lógica A
Variable lógica B
A XOR B
0 0 1 1
0 1 0 1
0 1 1 0
37
Operaciones lógicas
Capítulo 4
La operación XNOR, la siguiente definición: Variable lógica A
Variable lógica B
A XNOR B
0 0 1 1
0 1 0 1
1 0 0 1
4.4 El Bit y la variable lógica del álgebra de Bool Cuando Bool hizo públicos sus estudios a cerca de lo que posteriormente se conocería como “álgebra de Bool”, éste no podía imaginar ni remotamente que sus estudios serían de enorme utilidad para el posterior desarrollo de la electrónica digital y de la obra cumbre de esta rama de la electrónica, los ordenadores digitales. Fue muchos años después, cuando empezaron a desarrollarse elementos electrónicos de funcionamiento TODO/NADA y células de almacenamiento de información digital, cuando se vio en el álgebra de Bool una poderosa herramienta para poder diseñar circuitos electrónicos digitales complejos. Para entonces, los ingenieros electrónicos acostumbrados a llamar Bit a la ausencia o presencia de un impulso eléctrico y, por otra parte, la similitud entre el concepto de variable lógica y lo anteriormente dicho de ausencia/presencia de impulso eléctrico, fue lo que hizo que ambos conceptos se usasen como iguales. Así pues, llamémosle variable lógica o llamémosle Bit, el caso es que estamos hablando del mismo concepto. Lo que para el álgebra de Bool es una variable lógica, en electrónica digital se le llama Bit, pero realmente estamos hablando de lo mismo en ambos casos, esto es, algo que puede tomar dos (2) estados y nada más que dos (2) estados. 4.5 Las operaciones AND, OR y NOT aplicadas a registros Si en 3.2 hemos visto qué se entiende por operaciones AND, OR y NOT entre variables lógicas (entre Bits), la operación lógica AND entre registros resulta de aplicar la operación AND entre los pares de Bits que forman las palabras lógicas que se operan. Así por ejemplo, si tenemos el Word A siguiente: 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
1
1
1
1
0
0
1
1
1
0
0
1
Y el Word B siguiente: 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
1
0
0
1
0
1
1
0
1
0
1
1
0
1
La operación AND entre el Word A y el Word B es: 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
0
1
0
1
0
0
1
0
1
0
0
1
Donde podemos comprobar que cada Bit del Word resultado, es consecuencia de realizar la operación AND, Bit a Bit entre los dos (2) Words según la siguiente expresión: (Bit “N” del Word A) AND (Bit “N” del Word B) = Bit “N” del Word resultado 38
Operaciones lógicas
Capítulo 4
Así, la operación OR entre los Words A y B anteriores, daría como resultado otro Word cuyos Bits serían el resultado de realizar la operación OR, Bit a Bit de los Words A y B. Veamos un ejemplo, tomando los mismos valores de A y B anteriores: Word A: 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
1
1
1
1
0
0
1
1
1
0
0
1
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
1
0
0
1
0
1
1
0
1
0
1
1
0
1
Word B:
(Word A) OR (Word B): 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
1
0
1
1
1
1
1
0
1
1
1
1
0
1
Siendo la operación realizada, la siguiente: (Bit “N” del Word A) OR (Bit “N” del Word B) = Bit “N” del Word resultado La operación NOT aplicada a un Word, resulta tan sencilla como cambiar los unos por ceros, y los ceros por unos, o lo que es lo mismo, se aplica la operación NOT individualmente Bit a Bit. Veamos un ejemplo: Word A: 15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
1
1
1
1
0
0
1
1
1
0
0
1
Resultado de aplicar NOT al Word A: 15 1
14 0
13 1
12 1
11 0
10 0
9 0
8 0
7 1
6 1
5 0
4 0
3 0
2 1
1 1
0 0
Hacemos notar que a esta operación, también se la conoce como “complemento a 1” del Word de que se trate. O sea, que aplicar el “complemento a 1” a un Word o realizar la operación NOT a este mismo Word, es lo mismo. Con esta breve introducción a las operaciones lógicas más importantes del álgebra de Bool, terminamos aquí de momento este tema, pero volveremos a ellas más adelante, cuando veamos el repertorio de operaciones lógicas que forman STEP-7.
39
Los autómatas SIMATIC S7-300
Capítulo 5
CAPÍTULO 5
Índice
Los autómatas SIMATIC S7- 300 5.1 Partes de un autómata S7-300 El autómata que vamos a estudiar aquí pertenece a la serie SIMATIC S7-300 y podemos decir que aproximadamente su estructura interior responde al siguiente esquema:
Imágenes del proceso: * PAE * PAA
Memoria para bloques de datos de instancia
Memoria para bloques de datos generales
Memoria local
Contadores
Temporizadores
Memoria de marcas
Memoria del programa
CPU
Memoria RAM
Memoria ROM (Sistema operativo)
ALU • • • • •
Unidad de control ACU1 ACU2 AR1 AR2 PSW
Módulo de memoria externa.
Canal serie
Módulos periféricos Bus periférico Módulos digitales: • Entradas • Salidas
Módulos analógicos: • Entrada • Salida
Fig.5.1
41
Módulos funcionales hardware.
Los autómatas SIMATIC S7-300
Capítulo 5
5.2 Memoria RAM La memoria RAM, se caracteriza por tener acceso aleatorio (Random Access Memory) y como se ve, se reparte para formar muchos tipos diferentes de memorias, cada una de ellas con un significado propio. Otra característica de la memoria RAM, es que no es capaz de retener la información cuando falla la tensión, por lo que si se quiere conservar la información de esta memoria, es necesario respaldar la tensión de la memoria con una pila tampón. Resumamos en una tabla, el espacio que se reserva a cada tipo de memoria, según el modelo de autómata: Operando 312
314
315
315-2
Descripción
Programa M T Z L DB DI E A PE PA
48 KB 256 B 256 256 256 B 511 512 128 B 128 B 1024 B 1024 B
48 KB 256 B 128 64 256 B 255 192 128 B 128 B 768 B 767 B
128 KB 2048 B 256 64 256 B 1023 2048 128 B 128 B 1024 B 2048 B
Programa de usuario Memoria de marcas Temporizadores Contadores Memoria local Bloques de datos generales Bloques de datos de instancia Entradas digitales (PAE) Salidas digitales (PAA) Entrada directa de periferia Salida directa a periferia
16 KB 128 B 128 32 256 B 511 512 128 B 128 B 1024 B 1024 B
Como se ha visto en la tabla anterior, el espacio que se reserva para almacenar el programa de usuario, puede oscilar entre 16 y 256 KB dependiendo del modelo de autómata que se elija, y éste es un dato importante a la hora de elegir uno u otro autómata, por tanto puede ocurrir que según el modelo que elijamos, no nos quepa el programa que pensamos meter. Iremos viendo más adelante, qué papel juega cada memoria y cómo hemos de trabajar con ellas. 5.3 Memoria ROM (sistema operativo) La memoria ROM (Read Only Memory), como su nombre indica, es de “sólo lectura”, y se emplea en este caso para almacenar el sistema operativo del autómata. El sistema operativo es el encargado de gestionar todos los recursos del autómata, tales como entradas, salidas, la gestión de las memorias, la gestión de datos, la gestión de las alarmas, la gestión de los buses de comunicación, etc. El sistema operativo, sin embargo, no realiza ningún trabajo a no ser que lo solicite el programa que escribe y deposita el usuario en su interior. 5.4 ALU ALU son las iniciales de Arithmetic and Logic Unit, o Unidad Lógica y Aritmética. O sea, es un circuito electrónico complejo que realiza operaciones lógicas y aritméticas de cierta complejidad, tales como sumar, restar, multiplicar y dividir números enteros o racionales, aparte de operaciones trigonométricas tales como cálculo de senos, cosenos, tangentes, etc., y también cálculo de raíces cuadradas, exponenciales y logaritmos. 42
Los autómatas SIMATIC S7-300
Capítulo 5
Siendo un circuito de vital importancia en el autómata, su funcionamiento es totalmente transparente para el usuario, se activa a través de instrucciones de STEP-7. 5.4.1
ACU1 y ACU2
Los acumuladores ACU1 y ACU2 son ambos registros de treinta y dos (32) Bits y juegan un papel importante en las instrucciones de comparación así como operaciones aritméticas. Como registros de treinta y dos (32) Bits que son, se pueden considerar formados por dos (2) registros de dieciséis (16) Bits cada uno, o por cuatro (4) registros de ocho (8) Bits (Bytes): Acumulador 1: 31
2322
1615
8 7
ACU1H ACU1HH
0
ACU1L ACU1HL
ACU1LH
ACU1LL
Acumulador 2: 31
2322
1615
8 7
ACU2H ACU2HH
0
ACU2L
ACU2HL
ACU2LH
ACU2LL
Veremos más adelante como se trabaja con estos acumuladores y el papel que juegan en las instrucciones aritméticas y de comparación. 5.4.2
AR1 y AR2
Los registros AR1 y AR2 (Address Register 1 y 2) juegan un papel muy importante cuando se trabaja con operandos del tipo puntero, que veremos en los próximos capítulos. Al igual que ACU1 y ACU2, son registros de treinta y dos (32) Bits. 5.4.3
PSW
El PSW (Program Status Word) o palabra de estado, es un registro formado por dieciséis (16) Bits, cada uno de ellos con un significado propio. Veamos este registro:
43
Los autómatas SIMATIC S7-300 15
…..
9
8 RB
BIT 0 1 2 3 4 5 6 7 8 9 al 15
Ocupación /ER RLO STA OR OS OV A0 A1 RB Sin uso
Capítulo 5 7
6
A1
A0
5
4
3
2
1
0
OV
OS
OR
STA
RLO
/ER
Significado Bit de primera consulta* Bit de resultado lógico Bit de estado* Bit OR (=0)* Bit de desbordamiento memorizado Bit de desbordamiento Indicador de resultado Indicador de resultado Bit de resultado binario -
* Este Bit no es interpretable directamente por el usuario. De todos estos Bits es de destacar el RLO, que como veremos más adelante juega un papel muy destacado en la toma de decisiones de nuestros programas. 5.5 Módulo de memoria externa El usuario tiene la opción de introducir su programa desde una PG/PC hacia el autómata y depositarlo en la memoria del programa, tal y como hemos visto en 5.2., o bien depositar su programa en un circuito construido con memoria no volátil y conectar después este circuito al autómata. Estas memorias externas, pueden ser una buena opción si el usuario desea despreocuparse completamente de la batería tampón (en lo que a retención del programa se refiere), pero son sin duda una solución más cara que la convencional basada en memoria tampón. 5.6 Canal serie Todos los autómatas de la serie SIMATIC S7-300, poseen un puerto serie de comunicaciones tipo MPI, que el usuario puede usar bien para conectarse al autómata desde un PG/PC o bien para conectar otros autómatas en red. Las redes MPI son exclusivas de SIEMENS y son muy útiles cuando los requerimientos de velocidad en la transmisión no son muy exigentes, pues nos permite realizar conexiones entre autómatas a precio muy reducido y de aceptables prestaciones. 5.7 Bus periférico El bus periférico permite la conexión entre la CPU del autómata y las tarjetas de entrada/salida, analógicas o digitales y módulos funcionales conectados al mismo bastidor que la CPU. 5.8 Las entradas digitales Como ya vimos en el Capítulo 1, en un proceso industrial hay muchos elementos que suministran información sobre cómo está el proceso. Entre ellos, los sensores digitales, que informan de manera primaria pero efectiva, sobre el posicionamiento de piezas mecánicas en general.
44
Los autómatas SIMATIC S7-300
Capítulo 5
Estos sensores digitales se conectan al autómata en puntos concretos llamados “entradas digitales”, que reciben las señales digitales procedentes de los sensores digitales y permiten al autómata tener información sobre lo que ocurre en el proceso industrial. En la práctica, es posible escoger entre diferentes modelos de entradas digitales, según los sensores digitales que dispongamos entreguen una tensión alterna o continua. Son muy comunes las entradas digitales que trabajan en corriente continua, con valores de +24 V (valor alto) y 0 V (valor bajo). En lo que sigue, y si no se dice lo contrario, supondremos que nuestras entradas digitales son de este tipo. 5.9
Las salidas digitales
Al igual que el autómata recibe información en forma digital procedente de los sensores digitales, una forma habitual que se elige para que el autómata de órdenes hacia los elementos externos, es también digital, por medio de una tensión alta o baja. También aquí la tensión que entrega el autómata puede ser en corriente alterna o continua, pero es muy corriente que sea en corriente continua en la forma de +24 VDC (valor alto) y 0 V (valor bajo). También aquí, igual que hacíamos con las entradas, si no se dice lo contrario, trabajaremos únicamente con estos valores. 5.10
Ejecución del programa
El programa se ejecuta en un autómata en tres (3) modos diferentes: • • •
Ejecución cíclica Ejecución por alarmas Ejecución por tiempo
Decimos que el programa se ejecuta cíclicamente cuando el funcionamiento responde al siguiente esquema:
Captura de datos de los periféricos. (PAE)
Ejecución del programa principal. Scan
Transferencia de datos hacia los periféricos. (PAA)
Fig.5.2 45
Los autómatas SIMATIC S7-300
Capítulo 5
Cada vez que el proceso comienza por la parte superior, se dice que comienza un “scan”. El tiempo que emplea el autómata en ejecutar un scan, se controla automáticamente con un temporizador llamado “Watch Dog Timer”, que avisa poniendo un Bit de alarma a “1”si el tiempo excede de una cantidad prefijada. La ejecución por alarmas tiene lugar cuando determinados bloques de programa (veremos esto más despacio cuando estudiemos los OB’s en el Capítulo 22) se ponen en funcionamiento cuando tienen lugar determinados eventos especiales llamados alarmas. Finalmente, decimos que un determinado programa se ejecuta por tiempos, cuando una señal temporal y periódica obliga a la CPU a interrumpir su funcionamiento normal (cíclico) para procesar otro bloque de programa de mayor prioridad. También veremos esto más despacio cuando estudiemos el funcionamiento de los OB’s en el Capítulo 22. 5.11
PAE y PAA
En la Fig. 5.2 hemos pintado un rectángulo con un rotulo que dice “Captura de datos de los periféricos (PAE)”. Efectivamente, al comienzo de cada ciclo de scan, el autómata no pasa directamente a procesar las instrucciones de nuestro programa, sino que emplea un tiempo, primero en leer la información analógica y digital que pueda haber en todos los periféricos, y después deposita esta información en una memoria organizada en Bytes, llamada PAE. Durante la ejecución del programa principal, STEP-7 no deposita inmediatamente los resultados que van destinados a la periferia de salida, sino que los almacena en la tabla PAA. Es al final de la ejecución del programa principal cuando STEP-7 recoge los datos que están en la PAA y los lleva a la periferia hacia los elementos de salida (digital y analógica).
Fig.5.3 46
Los autómatas SIMATIC S7-300
Capítulo 5
Desde el punto de vista estructural, tanto la PAE como la PAA están organizadas en Bytes. Veamos la PAE más despacio:
Fig.5.4
Observamos como para referirnos a un Byte entero de la memoria de entradas digitales (E), lo hacemos de la siguiente forma (por ejemplo): EB12 Que se interpreta como el Byte número 12 de la memoria de entradas digitales. Si queremos referirnos a una palabra de la memoria de entradas digitales (E), lo hacemos de la siguiente forma (por ejemplo): EW102 Que se interpreta como la palabra 102 de la memoria de entradas digitales (E), y que está formada por los Bytes EB102 y EB103. Finalmente para referirnos a un único Bit, lo hacemos de la siguiente forma (por ejemplo): E2.2
47
Los autómatas SIMATIC S7-300
Capítulo 5
Que se interpreta como el Bit número dos (2) del Byte dos (2) de la memoria de entradas digitales (E). Aunque lo visto no es más que un ejemplo, realmente SIEMENS mantiene esta forma de representar la información digital para todos los tipos de memoria de que dispone el autómata. Veamos ahora la PAA:
Fig.5.5
Vemos como aquí se mantiene la forma de representar Bits individuales, Bytes, Word y Double Words igual que en la memoria E. Así, A4.2 significa que se trata del Bit número dos (2) del Byte cuatro (4) de la memoria de salidas digitales (A). AB16 representa al Byte 16 de la memoria de salidas digitales (A). AW98 representa al Word noventa y ocho (98) de le memoria de salidas digitales (A), que está formada por los Bytes AB98 y AB99. AD120 representa la Double Word número ciento veinte (120) de la memoria de salida digitales (A), que está formada por las Words AW120 y AW122, y estos a su vez por los Bytes AB120, AB121, AB122 y AB123. 48
Los autómatas SIMATIC S7-300
Capítulo 5
Observamos que respecto a los Bits individuales, la forma general de referirnos a ellos, responde a la expresión: LETRA Byte.Bit Donde “LETRA” es una letra que representa el tipo de memoria (E para entradas digitales y A para salidas digitales), después pondremos el número del Byte al que pertenezca el Bit, pondremos después un punto (.) de separación y finalmente el número del Bit, que debe ser un número comprendido entre cero (0) y siete (7). Observamos también que el Word AW98, está formado por los Bytes AB98 y AB99, por lo que al estar ocupados ya estos Bytes, el Word siguiente al AW98 no es el AW99, sino el AW100, formado por los Bytes AB100 y AB101. O dicho con otras palabras, si ya tenemos ocupado el Word AW98, no podemos usar el AW99 porque estaríamos sobrescribiendo el Byte AB99 que tienen en común. Lo mismo podemos decir del Double Word AD120, que está formada por los Word AW120 y AW122, y que estos a su vez están formados por los Bytes AB120, AB121, AB122 y AB123. Por tanto, el primer Byte libre que tenemos es el AB124, y por tanto el Double Word que sigue al AD120 es el AD124. Podemos resumir diciendo que los Word llevan siempre un número par y los Double Word también, pero la numeración va de cuatro (4) en cuatro (4). Resumiremos lo dicho hasta aquí en la siguiente tabla: AW0 AW2 AW4 AW6 AW8 AW10 AW12 etc.…
= = = = = = =
AB0 + AB1 AB2 + AB3 AB4 + AB5 AB6 + AB7 AB8 + AB9 AB10 + AB11 AB12 + AB13
Y si hacemos lo mismo para los Double Word, tendremos: AD0 AD4 AD8 AD12 AD16 AD20 AD24 Etc. 5.12
= = = = = = =
AW0 + AW2 AW4 + AW6 AW8 + AW10 AW12 + AW14 AW16 + AW18 AW20 + AW22 AW24 + AW26
= = = = = = =
AB0 + AB1 + AB2 + AB3 AB4 + AB5 + AB6 + AB7 AB8 + AB9 + AB10 + AB11 AB12 + AB13 + AB14 + AB15 AB16 + AB17 + AB18 + AB19 AB20 + AB21 + AB22 + AB23 AB24 + AB25 + AB26 + AB27
La memoria de marcas
La memoria de marcas, como ya vimos al principio del capítulo, es una parte de la memoria RAM y es de uso genérico dentro del autómata, lo que quiere decir que podemos usarla para aquello que nos haga falta en cada momento. Por ejemplo, podemos guardar resultados parciales de operaciones lógicas o de operaciones aritméticas, caracteres alfanuméricos que posteriormente presentaremos en una pantalla, etc. 49
Los autómatas SIMATIC S7-300
Capítulo 5
La memoria de marcas tiene la misma estructura en Bytes que las que ya hemos visto, y la podemos representar de la siguiente forma:
Fig.5.6
El lector habrá observado que estamos haciendo uso de los mismos conceptos ya vistos para la memoria de entradas digitales (E) y para la memoria de salidas digitales (A), razón por la que no insistiremos más aquí.
50
Operaciones lógicas con Bits
Capítulo 6
CAPÍTULO 6
Índice
Operaciones lógicas con Bits 6.1 Operación lógica U En el apartado 4.2 vimos qué se entiende por operación AND y cómo se define en el Álgebra de Bool. La operación U en STEP-7 es la misma que la operación AND que vimos entonces, sólo que su aspecto es diferente. Allí para hacer la operación AND entre dos (2) Bits (por ejemplo A y B), escribíamos: A AND B Si después quisiéramos entregar el resultado de esta operación al Bit C, escribiríamos: C = A AND B Aquí en STEP-7 (y en lenguaje AWL, que es el que emplearemos habitualmente), si queremos hacer la operación AND entre los Bits (por ejemplo) E2.3 y E3.4, pondremos: U U
E2.3 E3.4
Y si ahora queremos entregar el resultado de esta operación a otro Bit, por ejemplo al A7.0, pondremos: U U =
E2.3 E3.4 A7.0
De esta forma, el Bit A7.0 recibe el resultado de la operación U entre los Bits E2.3 y E3.4., que de acuerdo con lo que ya vimos del Álgebra de Bool, el resultado será “1” únicamente cuando sean “1” los Bits E2.3 y E3.4 simultáneamente. ¿Qué ocurriría si en un momento determinado cambiasen las entradas E2.3 o E3.4? El lector debe tener siempre in mente, no solamente en este sencillo ejemplo sino a lo largo de todo el libro, lo que ya se explicó en el apartado 5.10 sobre el funcionamiento cíclico de los autómatas. El autómata está continuamente ejecutando el programa que hayamos introducido, por lo que detecta rápidamente cualquier variación que se produzca en las entradas. Si en un instante determinado, una o ambas entradas cambiasen de estado, el programa se actualizaría también. 6.2 El Bit RLO El Bit RLO lo vimos por primera vez en el apartado 5.4.3 pero poco sabemos de él. Sólo que está en el registro PSW y que las letras RLO significan “Resultado Lógico Operación”, pero nada más.
51
Operaciones lógicas con Bits
Capítulo 6
Realmente es uno de los Bits más importantes del PSW, ya que este Bit indica continuamente el resultado lógico de cualquier operación del tipo Bool. Esto es, en cualquier operación del tipo AND, OR, NOT o una combinación de éstas, el Bit RLO nos indica en cualquier momento cual es el resultado lógico de la operación en curso. 6.3 Operador de asignación “=” Realmente ya hemos hecho uso de este operador en el ejemplo anterior, pero allí no sabíamos que significaba y ahora conviene prestarle más atención para ver con más detalle como funciona. En el ejemplo anterior, U U =
E2.3 E3.4 A7.0
(1) (2) (3)
En las líneas (1) y (2) realizamos la operación U entre los Bits E2.3 y E3.4. Al finalizar la línea (2), el Bit RLO almacena ya el resultado lógico de las líneas (1) y (2) y al ejecutarse la línea (3), el operador de asignación “=”, asigna el valor que tiene el Bit RLO al Bit que está a la derecha del operador “=”, en este caso el Bit A7.0. El operador “=” asigna el valor que tenga el Bit RLO, al Bit que esté a su derecha.
Y esto es válido en cualquier momento, por lo que si el autómata realiza 1000 scan en un segundo, ejecutará 1000 veces el programa anterior y el operador “=” asignará 1000 veces por segundo el valor que tenga el Bit RLO al Bit A7.0, razón por la que el Bit A7.0 reflejará de forma instantánea cualquier variación que se produzca en E2.3 y/o E3.4. Ahora que ya sabemos qué es y cómo funciona el operador “=”, volvamos al ejemplo anterior para ver con más detalle aún el funcionamiento de las instrucciones. U U =
E2.3 E3.4 A7.0
(1) (2) (3)
La primera línea realmente lo que hace es asignar al Bit RLO, el valor que tenga E2.3 En la línea (2) se realiza la operación U entre RLO y el Bit E3.4, y finalmente en la línea (3) se asigna el valor que tenga RLO al Bit A7.0. 6.4 Operación lógica O La operación lógica O equivale a la operación OR que ya vimos en el apartado 4.2. Si allí la operación OR entre dos (2) Bits la escribíamos así: A OR B Y si queríamos asignar el resultado a un Bit C, poníamos: C = A OR B 52
Operaciones lógicas con Bits
Capítulo 6
Aquí en STEP-7 a esta operación la llamaremos operación O, y si por ejemplo los Bits que queremos operar son el E2.3 y E3.4, y el resultado asignárselo al Bit A7.0, pondremos: O O =
E2.3 E3.4 A7.0
(1) (2) (3)
Nuevamente podemos hacer aquí ahora un estudio detallado de las instrucciones anteriores y tendremos: En la línea (1) se asigna al Bit RLO el valor que tenga E2.3. En la línea (2) se realiza la operación O entre el Bit RLO y el Bit E3.4 y el resultado pasa a RLO, y finalmente en la línea (3) se asigna el valor del Bit RLO al Bit A7.0. 6.5 Operación lógica UN La operación UN actúa realmente como la pareja de instrucciones: U
N
Siendo U la operación que ya conocemos y N la operación NOT que vimos en 4.2. Dado un Bit cualquiera, primero aplicaremos la operación NOT a este Bit, que como sabemos le da la vuelta al Bit sobre el que se aplique, y después aplicaremos la operación U sobre el resultado anterior. Veamos un ejemplo para explicar el funcionamiento de esta operación: UN UN =
E2.3 E3.4 A7.0
En la primera línea, realizamos la operación NOT del Bit E2.3 y después el resultado se lo asignamos al Bit RLO. En la segunda línea realizamos la operación U entre RLO y NOT E3.4 y el resultado pasa a RLO. Y finalmente el valor final de RLO se lo asignamos al Bit A7.0. 6.6 Operación lógica ON La operación ON actúa también como la pareja de instrucciones O y NOT sobre : O
N
Aquí también es la operación N=NOT la primera que actúa sobre y después se realiza la operación O sobre el Bit resultante anterior. Veamos un ejemplo: ON ON =
E2.3 E3.4 A7.0
A “cámara lenta” seria así: en la primera línea realizamos la operación NOT sobre el Bit E2.3 y después pasamos al Bit RLO el resultado lógico anterior. En la segunda línea realizamos la operación O entre RLO y NOT E3.4, y el resultado se lo asignamos a RLO. Finalmente el valor de RLO se lo asignamos a A7.0. 53
Operaciones lógicas con Bits
Capítulo 6
6.7 Resumen de las operaciones U, O, UN y ON De lo visto hasta aquí, sobre todo si tenemos en cuenta el estudio detallado de cómo funcionan estas instrucciones, podemos llegar a la conclusión, de que manejar estas instrucciones es muy difícil. En realidad esto no es así y en la práctica, cuando trabajemos con estas instrucciones, basta con asignar mentalmente el valor “1” o “0” a cada línea lógica y operar los Bits resultantes. Veamos un ejemplo: U U UN U =
E2.0 E2.2 E2.4 E2.6 A7.0
Si en un instante determinado los valores de las entradas son: E2.0 = 1 E2.2 = 0 E2.4 = 0 E2.6 = 1 Los valores que toman las instrucciones anteriores, línea a línea, son: U U UN U =
E2.0 E2.2 E2.4 E2.6 A7.0
“1” “0” “1” “1” “0”
La primera línea es “1” puesto que E2.0 es “1”. La segunda línea es “0” puesto que E2.2 es “0”. La tercera línea es “1” puesto que E2.4 es “0”, pero la negación NOT le da la vuelta al “0” y lo transforma en “1”. La cuarta línea es “1” puesto que E2.6 es “1”. Finalmente si hacemos la operación U entre los resultados de las cuatro (4) líneas, nos da “0” puesto que la línea segunda es “0” y como ya sabemos, en la operación U, basta que un término sea “0” para que el resultado sea “0”. El mismo método simplificado podemos aplicar a operaciones O y ON. Por ejemplo, tomando los mismos valores para E2.0, E2.2, E2.4 y E2.6, tendremos: O O ON O =
E2.0 E2.2 E2.4 E2.6 A7.0
“1” “0” “1” “1” “1”
Ahora el resultado es “1”, ya que basta que un elemento sea “1” para que el resultado sea también “1”. 6.8 Operación lógica X La operación lógica X la vimos ya en 4.3, sólo que allí la llamábamos operación XOR.
54
Operaciones lógicas con Bits
Capítulo 6
Así pues, dados dos (2) Bits, por ejemplo E1.2 y E4.5, la operación X entre ambos Bits en lenguaje AWL se escribe así: X X
E1.2 E4.5
Y si queremos asignar el resultado a un Bit, por ejemplo la salida A124.0, pondremos: X X =
E1.2 E4.5 A124.0
Donde la salida A124.0 será “1” cuando el número de “1´s” sea un número impar. 6.9 Operación lógica XN La operación XN equivale a la operación lógica XOR NOT que también vimos en 4.3, sólo que aquí, al igual que hacíamos con la operación UN, aplicaremos primero la operación NOT sobre y luego la operación X sobre el resultado anterior. Veamos un ejemplo:
XN XN =
E1.2 E4.5 A124.0
Suponiendo que en un instante determinado los valores de E1.2 y E4.5 son: E1.2 = 0 E4.5 = 1 Nos daría como resultado A124.0 = 1, ya que al darle la vuelta a E1.2 y E4.5 nos queda la operación X entre “1” y “0”, con lo que el resultado es “1” por ser impar el número de “1’s”. 6.10
Uso de “U(“ y “)”
En ocasiones, para poder resolver un problema complejo, es necesario descomponer el problema complejo en otros de menor complejidad. Pensemos en el siguiente caso. Disponemos de cuatro (4) interruptores (A, B, C y D) y queremos montarlos de la siguiente manera: A
B
C
D
L
Fig.6.1 55
Operaciones lógicas con Bits
Capítulo 6
Observamos como los interruptores A y C están en paralelo entre ellos así como los interruptores B y D, y que a su vez la pareja de interruptores A-C está en serie con la pareja B-D. Si quisiéramos hacer un montaje equivalente al anterior usando un autómata, haríamos lo siguiente: A
B C
D
E124.0
A124.0
E124.1
A124.1
E124.2
A124.2
E124.3
A124.3
E124.4
A124.4
E124.5
A124.5
E124.6
A124.6
E124.7
A124.7
Entradas digitales
Salidas digitales
Fig.6.2
Las instrucciones equivalentes a poner A y C en paralelo son: O O
E124.0 E124.2
Así, las instrucciones equivalentes a poner B y D en paralelo son: O O
E124.1 E124.3
Y ahora nos queda poner en serie ambos bloques: U( O O ) U( O O )
E124.0 E124.2 E124.1 E124.3
Y ya sólo nos queda asignar el resultado a A124.0: U( O O ) U( O O ) =
E124.0 E124.2 E124.1 E124.3 A124.0 56
L
Operaciones lógicas con Bits
Capítulo 6
Obsérvese como los operadores “U (“ en primer lugar y “)” al final, nos permiten poner en serie los elementos que están entre los paréntesis “(“ y “)”. 6.11
Uso de “O(“ y “)”
Igual que antes, vamos a plantearnos el siguiente esquema eléctrico: A
B
C
D
L
Fig.6.3
En este circuito podemos decir que A está en serie con B, así como que C está en serie con D, y que ambas ramas están en paralelo entre sí. Igual que antes, si queremos resolver un circuito equivalente a éste pero con un autómata, la forma de conexión al autómata será la misma que en la Fig.6.2, razón por la que no la repetimos aquí otra vez. Las instrucciones AWL que equivalen a la rama serie superior son: U U
E124.0 E124.1
Y las instrucciones que equivalen a la rama serie inferior son: U U
E124.2 E124.3
Y si queremos reflejar que ambas ramas están en paralelo, pondremos: O( U U ) O( U U )
E124.0 E124.1 E124.2 E124.3
Y si queremos que el resultado aparezca en A124.0, pondremos: O( U U ) O( U U ) =
E124.0 E124.1 E124.2 E124.3 A124.0 57
Operaciones lógicas con Bits
Capítulo 6
Aquí ahora los operadores “O (“ y “)” nos permiten poner en paralelo lo que se encuentra entre los paréntesis “(“ y “)”. 6.12
Operación SET
La operación SET es muy sencilla, y se limita a poner a “1” el Bit RLO. Ejemplo: U E124.0 SET En este ejemplo, la operación U E124.0 puede dar como resultado “0” ó “1” según el valor de E124.0 sea igualmente “0” ó “1”. Ahora bien, independientemente del resultado lógico de esta operación (en definitiva, independientemente del valor que tenga RLO al llegar a la operación SET), esta operación pondrá a “1” el Bit RLO. 6.13
Operación CLR
La operación CLR es idéntica que la operación SET, sólo que pone a “0” el Bit RLO, independientemente del valor que tuviera RLO antes de ejecutarse CLR. Ejemplo: U E124.0 CLR Aquí, el programa al llegar a la altura de la operación CLR, pondrá a “0” el Bit RLO sin tener en cuenta el valor que tuviera RLO como resultado de operaciones lógicas anteriores. 6.14
Operación S
La operación S pone a “1” permanentemente , siempre y cuando el valor de RLO sea “1”. Ejemplo:
U U S
E124.0 (1) E124.1 (2) A124.0 (3)
Nota: Obsérvese que bastaría que RLO fuera “1” un instante (un pulso) para que se ejecutase la línea (3). E124.0 E124.1 A124.0
La salida A124.0 se pondrá a “1” permanentemente, si el resultado lógico (el Bit RLO) de las operaciones anteriores es “1”.
58
Operaciones lógicas con Bits
Capítulo 6
Así, si E124.0 y E124.1 son “1” simultáneamente, A124.0 se pondrá a “1” de forma permanente, entendiendo por “permanente” que aunque posteriormente el RLO pueda ser “0”, A124.0 continuará siendo “1”. 6.15
Operación R
La operación R es idéntica que la operación S, sólo que pone a “0” permanentemente si RLO=1. También aquí, una vez que se ponga a “0” por la acción de la operación R, queda a “0” independientemente de los valores posteriores de RLO. Ejemplo: U U R
E124.0 (1) E124.1 (2) A124.0 (3)
E124.0 E124.1 A124.0
NOTA: También aquí es aplicable lo que hemos dicho de la operación “S”, esto es, bastaría que RLO fuera “1” durante un instante (un pulso) para que se ejecutase la línea (3).
59
STEP-7
Capítulo 7
CAPÍTULO 7
Índice
STEP-7 7.1 El administrador de STEP-7 Primeramente pulsaremos dos (2) veces sobre el icono:
Fig.7.1
Que está (o debe estar) en el Escritorio de Windows, de allí saltaremos a la pantalla principal del Administrador de STEP-7:
Fig.7.2
El Administrador de STEP-7, aparecerá vacío si es la primera vez que accedemos a él, pero normalmente aparece con el último proyecto en el que hayamos estado trabajando. Empecemos por crear un proyecto que nos permita introducir nuestro programa. Para ello vayamos al menú “Archivo”, y tras pulsar con la flecha del ratón sobre este menú, veremos como se despliega de la siguiente forma:
61
STEP-7
Capítulo 7
Fig.7.3
Escogeremos la opción “Asistente Nuevo Proyecto”, tras lo que, aparece la imagen:
Fig.7.4
62
STEP-7
Capítulo 7
Haremos clic sobre “Siguiente>” y nos aparece la imagen:
Fig.7.5
Elegiremos (por ejemplo) la CPU 314, tras lo que haremos clic en “Siguiente>” y nos aparecerá la imagen:
Fig.7.6
A la que volvemos a responder con clic en “Siguiente>”, y aparecerá la imagen:
63
STEP-7
Capítulo 7
Fig.7.7
Aparece en la parte superior el nombre que STEP-7 asigna automáticamente a nuestros proyectos, en este caso S7_Pro1, pero que nosotros podemos cambiar por el nombre que queramos. Finalmente, al hacer clic sobre “Finalizar”, aparece el administrador general con nuestro proyecto (NOTA: Dependiendo de la versión de STEP-7, puede ser necesario oprimir el icono “Abrir proyecto/librería”, seleccionar el proyecto creado y abrirlo):
Icono de PLCSIM
Fig.7.8
64
STEP-7
Capítulo 7
7.2 PLCSIM PLCSIM es un programa que el lector, si lo desea, puede adquirir por separado, pues no está incluido dentro de STEP-7. Se trata sin duda de un magnífico simulador de autómatas SIEMENS, por lo que en este libro haremos mención frecuente de este simulador, pero evidentemente es mucho mejor disponer de un autómata SIEMENS conectado on-line con nuestro PC para así practicar los ejercicios que se vayan sugiriendo. El simulador PLCSIM se activa simplemente oprimiendo el icono correspondiente que está en la barra de herramientas del Administrador de STEP-7. Al hacerlo, aparece la ventana del simulador:
Fig.7.9
Donde la ventana de la izquierda corresponde a los mandos principales del autómata, la ventana del centro corresponde al Byte de entradas digitales EB124 y la ventana de la derecha al Byte de salidas digitales AB124. Invito al lector a que se familiarice con las opciones de este simulador, probando a insertar y borrar ventanas con entradas y salidas digitales, así como Bytes de memorias de marca, etc.
65
Grafcet
Capítulo 8
CAPÍTULO 8
Índice
Grafcet 8.1 Qué es Grafcet Grafcet procede de las palabras Graphe de Commande etape-transition y fue introducido en 1977 por la Association Française pour la Cybernétique Economique et Technique como un método gráfico evolucionado a partir de la redes de Petri que permite representar los automatismos secuenciales. Grafcet se define en la norma francesa UTE NF C 03-190 y posteriormente ha sido también definida por la norma internacional IEC-848, si bien en esta norma no se reconoce el nombre original Grafcet y se le cambia por el de Diagrama Funcional. Aquí en este libro sin embargo, emplearemos el nombre original GRAFCET, en honor de sus inventores. 8.2 Concepto de etapa en Grafcet Empecemos por poner un ejemplo introductorio. Supongamos que por la razón que sea hacemos el siguiente encargo textual a nuestro buen amigo Fulano:
Pedirle a Fulano que compre dos (2) barras de pan
“Mira Fulano, haz el favor de ir a la panadería que hay en la calle frente al portal de la casa, compras dos (2) barras de pan y me las traes”. ** Nuestro buen amigo Fulano, va a la panadería, compra las dos (2) barras de pan, nos las trae y nos dice:”Bien, aquí tienes las dos (2) barras de pan. ¿Puedo hacer algo más por ti?”. A lo que le respondemos: “Sí, por cierto. Hazme el favor de ir al estanco y comprar un paquete de cigarrillos y me lo traes.” ** Nuevamente nuestro amigo Fulano va al estanco, compra el paquete de cigarrillos y nos lo trae, diciéndonos: “Aquí estoy de nuevo. Ya he comprado el paquete de cigarrillos. ¿Puedo hacer algo más por ti? etc.… Obsérvese como en el ejemplo anterior, primeramente damos una orden, luego esperamos a que la orden se cumpla, y una vez la orden se ha cumplido, volvemos a dar otra orden. Volvemos a comprobar que la orden se ha cumplido y nuevamente volveríamos a dar una nueva orden, etc.…
67
No pasar mientras no se haya comprado el pan
Pedirle a Fulano que compre tabaco.
No pasar mientras no se haya comprado tabaco
Etc…
Fig. 8.1
Grafcet
Capítulo 8
El ejemplo anterior también podríamos ponerlo en forma gráfica de la siguiente forma: Vamos a poner ahora los dibujos anteriores, en un formato algo distinto, pero que básicamente representa las mismas ideas:
Pedirle a Fulano que compre dos (2) barras de pan.
1 Etapa 1
Ya ha comprado el pan
Pedirle a Fulano que compre tabaco
2
Ya ha comprado tabaco
Etapa 2
Etc. Fig. 8.2
En este último dibujo vemos como hay dos (2) partes. Parte 1, donde pedimos que Fulano nos compre pan (y la comprobación de que lo ha hecho), y parte 2, donde volvemos a encargarle que nos compre tabaco (y la comprobación de que lo ha hecho). Cada etapa lleva asociadas unas tareas a realizar, y después viene la comprobación de que estas tareas (u otras tareas asociadas al proceso) se han realizado. A la comprobación de que las tareas se han realizado, en Grafcet se le llama transición, y así diremos que la transición es cierta o falsa según se hayan realizado o no las tareas asociadas a la transición. Una “ETAPA” está formada por el conjunto de TODAS las tareas a realizar y por TODAS las transiciones que dependen de ella. Si tuviéramos que comparar Grafcet con algo, podríamos compararlo con una cadena formada por eslabones. En esta imaginaria “cadena”, al “eslabón” le llamamos etapa y ésta tendría la siguiente estructura:
BitDeEtapa N
Tareas: Tarea 1, Tarea 2, etc…
¿Tareas realizadas?
Fig. 8.3
68
Grafcet
Capítulo 8
Donde “N” es el número que asignamos a la etapa, “Tarea 1, Tarea 2, etc.” Es o son la/s tarea/s que asignamos a la etapa, “¿Tareas realizadas?” es la transición, la que sólo puede tomar dos (2) valores: CIERTO o FALSO (“1” o “0”), y “BitDeEtapa” es un Bit que si es “1” permite la ejecución de la etapa y si es “0” impide que la etapa se ejecute (NOTA: La transición no siempre consiste en verificar si las tareas asociadas a la etapa se han cumplido o no. La transición en general contiene una condición lógica que ha de ser cierta para poder pasar a la siguiente etapa). En Grafcet se llama secuencia a una serie de etapas encadenadas las unas con las otras como los eslabones de una cadena. Por ejemplo, el siguiente dibujo representa una secuencia:
1
Tarea1
2
Tarea 2
3
Tarea 3
Etc. Fig. 8.4
Así, dada una secuencia, se sobreentiende que la secuencia progresa siempre en sentido descendente. Si en alguna ocasión es necesario indicar que debe progresar hacia arriba, se indica con una línea y una flecha que indica el sentido ascendente del progreso: 1
Tarea 1
Transición 1 2
Tarea 2 Transición 2
3 Tarea 3 Transición 3 Fig. 8.5
69
Grafcet
Capítulo 8
En ocasiones es necesario indicar en el Grafcet que a partir de una etapa existen dos (2) o más caminos posibles. Esto se puede indicar así:
1
Transición 1a
Tarea 4
Tarea 1 Transición 1b
4
2
Transición 4
Tarea 2 Transición 2
3
Etc.
Tarea 3 Transición 3
Etc. Fig. 8.6
En este caso queremos indicar que al llegar a la etapa 1, tenemos dos (2) alternativas: irnos hacia la etapa 4 o irnos hacia la etapa 2. Si por ejemplo una vez realizada la Tarea1 de la etapa 1, se cumple la Transición 1a, la próxima etapa que se ejecute será la 4, pero si una vez realizada la Tarea1 la transición que se cumple es la Transición 1b, entonces la próxima etapa que se ejecute será la 2. Es importante hacer notar que en casos como este en que hay dos (2) o más alternativas, solamente una y nada más que una alternativa debe ser cierta, o lo que es lo mismo, las transiciones que controlan los caminos a seguir, deben ser excluyentes entre si, de tal forma que sólo una transición sea cierta y las demás falsas (no podemos tomar dos (2) caminos simultáneamente). Veamos ahora un ejemplo de Grafcet aplicado a un autómata. Se trata de dar la orden desde un autómata para que se cierre el contactor K1, y supongamos que hemos dispuesto los elementos de la siguiente forma: BE A124.0
E124.0 E124.1
K1
K1
M
Autómata Fig. 8.7
70
K1
Grafcet
Capítulo 8
Estos datos pasados a una tabla de Entradas/Salidas, nos quedarán así: Entradas digitales al autómata E124.0 Botón empezar (BE) E124.1 Contacto secundario de K1
A124.0
Salidas digitales del autómata Bobina del contactor K1
En este caso hemos dispuesto un “Botón empezar” que hemos conectado a la entrada E124.0. Uno de los contactos secundarios del tipo NA del contactor K1, lo hemos conectado a la entrada E124.1; la salida A124.0 del autómata la hemos conectado a la bobina de K1. Con este montaje pretendemos que al pulsar “BE”, el contactor K1 se cierre. Un contacto auxiliar NA de K1, informará al autómata que la operación se ha realizado, cuando en E124.1 se reciba un voltaje +24VDC. Veamos ahora como se representaría en Grafcet únicamente la etapa que se encarga de accionar el contactor y que comprueba que la maniobra se ha realizado: BitDeEtapa N
Cerrar contactor K1
¿Se ha cerrado el contactor? Fig. 8.8
Y si ahora cambiamos las frases por parámetros concretos, tendremos: M0.0 Hacer A124.0 = 1
N
¿E124.0=1?
Hacia etapa siguiente Fig. 8.9
Tenemos así los elementos típicos de una etapa Grafcet, esto es, una etapa donde se realizan tareas (en este caso cerrar un contactor) y una transición que caso de ser cierta, nos permitirá pasar a la etapa siguiente. Así observamos como en el Grafcet superior hemos expresado las ideas con palabras mientras que en el Grafcet inferior, hemos concretado las palabras y las hemos sustituido por parámetros concretos.
71
Grafcet
Capítulo 8
En general en Grafcet, al primer dibujo de este tipo que se hace, donde lo que se emplean son palabras, se le llama Grafcet de nivel 1 (G1) mientras que en al segundo dibujo, donde se sustituyen las palabras por parámetros técnicos concretos, se llama le Grafcet de nivel 2 (G2). Bien, hasta aquí tenemos ya de momento conocimientos suficientes de Grafcet para empezar con algunas cosas de interés. Más adelante, conforme necesitemos saber más, volveremos nuevamente a Grafcet, de momento con lo visto es suficiente. 8.3 Operación NOP 0 La operación NOP 0 no hace absolutamente nada en el autómata, excepto consumir tiempo. Se usa en ocasiones como operación de relleno y en otras ocasiones simplemente para perder tiempo. 8.4 Operación SPBN La operación SPBN es una operación de salto, que se usa para saltar a aquella línea del programa que tenga la etiqueta a su izquierda. La etiqueta ha de cumplir las siguientes condiciones: • •
Estar formada por un máximo de cuatro (4) caracteres, de los que el primero debe ser alfabético, pudiendo ser los otros tres (3) numéricos, alfabéticos o una combinación de ambos. Terminar con el símbolo dos puntos “:”.
Para que el salto se efectúe, es indispensable que el Bit RLO sea “0” inmediatamente antes de ejecutarse la operación SPBN . Por ejemplo: U M3.4 SPBN _000 _000: NOP 0 En este ejemplo, si el Bit M3.4 es “1”, entonces inmediatamente antes de ejecutarse SPBN _000, el Bit RLO será “1” también, con lo que el salto no llegará a producirse, y seguirán ejecutándose las operaciones que estén inmediatamente a continuación de SPBN _000. Si por el contrario el Bit M3.4 es “0”, entonces el Bit RLO será “0” también inmediatamente antes de la operación SPBN _000, y el salto se producirá, saltando el programa a la etiqueta “_000:” y continuándose allí el programa. 8.5 Formato cerrado En el apartado 8.2, al final del mismo, vimos un ejemplo de cómo se representa en Grafcet un caso real. Si quisiéramos traducir a lenguaje AWL la etapa Grafcet del ejemplo que pusimos allí, podríamos escribir:
72
Grafcet
Capítulo 8
U SPBN S U R S _000: NOP
M0.0 _000 A124.0 E124.0 M0.0 M0.1 0
//(1) //(2) //(3) //(4) //(5) //(6) //(7)
Si el “BitDeEtapa” es “1” hacer lo siguiente: Poner a “1” A124.0 Preguntar si E124.0=1, y si es cierto Poner a “0” M0.0 y a “1” M0.1.
Observamos como el Bit M0.0 en la línea (1) es el que permite que se ejecuten o no las operaciones comprendidas entre las líneas (3) y (6). Efectivamente, si M0.0 = 0, la operación SPBN _000 hará que el programa salte de la línea (2) a la línea (7) y en este caso las operaciones intermedias no se ejecutarán, pero si el Bit M0.0 en la línea (1) es “1”, entonces la operación SPBN _000 no se efectuará, el programa no saltará y se ejecutarán todas las operaciones de las líneas (2) a la (7). Ésta es precisamente la misión que tiene el BitDeEtapa que hemos definido en Grafcet, esto es, habilitar o deshabilitar la etapa según el BitDeEtapa esté o no esté a “1”. Si nos metemos dentro del paquete de operaciones, en la línea (3) tenemos la operación “S A124.0” que pone a “1” la salida A124.0, y la línea (4) se encarga de anular el BitDeEtapa de la etapa actual y activar el BitDeEtapa de la etapa siguiente, en el caso de que la transición (en este caso E124.0) sea cierta. Si expresamos esta misma idea de una forma general, partiendo de una etapa Grafcet también general, tendremos: BitDeEtapa N
Tareas: Tarea 1, Tarea 2, etc…
¿Transición cierta? Fig. 8.10
Y generalizando la idea anterior, podemos escribir:
_000:
U “BitDeEtapa” SPBN _000 --Tarea 1 Tarea 2 Cuerpo de la etapa ----Si la transición es cierta, anular la etapa actual y activar la siguiente. NOP 0
A esta plantilla la llamaremos plantilla en “formato cerrado”, ya que todas las operaciones a realizar están “encerradas” entre la operación “SPBN _000” y su meta “_000:”.
73
Grafcet
Capítulo 8
8.6 Etapa 0 Otro concepto importante en Grafcet es el de “Etapa 0”. En Grafcet, por Etapa “0” se entiende la etapa inicial del Grafcet. Diríamos que es el punto de partida del Grafcet y de donde arranca el proceso mismo. A esta etapa se la representa con una doble línea y se suele reservar para ella el número “0”, aunque realmente lo que caracteriza la etapa inicial no es el número “0” propiamente, sino el doble trazo. Tarea 0
0
Transición 0
Continúa
Fig. 8.11
8.7 El bloque de organización OB1 STEP-7, al igual que otros lenguajes de programación estructurados, hace uso de lo que podríamos llamar “cajas” en las que se encierran o se escriben partes concretas del programa que tienen una determinada misión. Así STEP-7, también hace uso de estas “cajas”, y uno de los tipos más importantes de “cajas” que se emplean son los llamados Bloques de Organización. A los Bloques de Organización se les representa con las letras “OB” (Organization Block) y le sigue un número que designa el número del bloque. Más adelante iremos viendo los distintos tipos que hay de bloques de organización en STEP-7, pero de momento empecemos con el más importante de todos ellos que es el OB1. El OB1 es el bloque de organización que alberga o contiene el programa principal. Realmente ya vimos este bloque en el apartado 5.10 cuando hablábamos de la forma cíclica de funcionar el programa en el autómata. Allí decíamos que primero se tomaban los datos de la periferia y se guardaban en la PAE, después el proceso ejecutaba el programa principal y finalmente se enviaban desde la PAA a la periferia los datos obtenidos en el programa principal. Bien, pues este bloque que contiene el programa principal y que se ejecuta cíclicamente, es precisamente OB1. 8.8 El bloque de organización OB100 El bloque de organización OB100 es otro de los bloques importantes de STEP-7. El bloque OB100 únicamente se ejecuta una vez cuando al girar la llave del frontal del autómata, se pasa del estado STOP al estado RUN.
74
Grafcet
Capítulo 8
Cuando esto ocurre, tal y como ya hemos dicho antes, el proceso ejecuta las instrucciones que pueda haber en OB100, UNA SOLA VEZ, hecho esto abandona OB100 y comienza a ejecutar las instrucciones de OB1 cíclicamente, y ya no vuelve a pasar más por OB100. Aprovechando este comportamiento de OB100, el programador es el que debe escribir las instrucciones que crea más convenientes en cada caso para OB100. Por ejemplo, una posible utilidad de OB100 podría ser la de inicializar algunas variables que después nos encontraremos en OB1. 8.9 Un ejemplo completo Con lo que sabemos, vamos a volver a plantearnos el ejemplo que pusimos al final de 8.2. Empezaremos por la tabla de Entradas/Salidas: Entradas digitales al autómata E124.0 Botón empezar (BE) E124.1 Contacto secundario de K1
Salidas digitales del autómata A124.0 Bobina del contactor K1
El Grafcet de nivel 1 (G1) será el siguiente: 0
Esperar
¿Botón empezar = ON?
1
Contactor = ON
¿Contacto secundario = ON?
Fig. 8.12
El Grafcet de nivel 2 (G2) será el siguiente: M0.0 Esperar
0
¿E124.0 = 1? M0.1 A124.0 = 1
1
¿E124.1 = 1? Etc. Fig. 8.13
75
Grafcet
Capítulo 8
Observamos que poner “E124.0=1” es lo mismo que poner con palabras “Botón empezar = ON”, poner “A124.0 = 1” es lo mismo que poner “Contactor = ON” y poner “E124.1=1” es lo mismo que poner “Contacto secundario = ON”, con la diferencia que al ser parámetros concretos, podemos manejarlos directamente con operaciones AWL. En el caso anterior, la flecha quiere indicar que faltaría continuar el Grafcet con nuevas etapas, pero en este caso vamos a terminar este Grafcet en este punto, ya que se trata solamente de un ejemplo introductorio. Si traducimos a lenguaje AWL las dos (2) etapas anteriores, tendremos: U SPBN
M0.0 _000
U R S _000: NOP 0
E124.0 M0.0 M0.1
U SPBN S U R S _001: NOP 0
M0.1 _001 A124.0 E124.1 M0.1 M0.2
//El cuerpo de la etapa está vacío puesto que no hay //tareas que hacer. //Si la receptividad de la transición es cierta, //(en este caso E124.0 =1), anular la etapa actual // y pasar a la siguiente.
//Cuerpo de la etapa en este caso. //Si la receptividad de la transición es cierta, //(en este caso E124.1 =1), anular la etapa actual M0.1=0, // y pasar a la siguiente M0.2=1.
El funcionamiento del programa sería así: Inicialmente la única etapa activa es la Etapa “0”. En esta etapa permanecemos mientras alguien no oprima el Botón Empezar (E124.0). Cuando alguien oprima este botón (E124.0=1) entonces se anula la Etapa “0” y pasamos a la etapa “1”, donde activamos el contactor (A124.0=1) y quedamos a la espera de que el contacto secundario (E124.1) nos confirme que efectivamente la orden ha sido cumplida (E124.1=1). Cuando esto sea así, anulamos la etapa actual “1” y activamos la “2” (suponiendo que exista). Nos queda una pregunta en el aire: ¿Quién activa inicialmente la etapa “0”? Recordando lo que hemos dicho anteriormente sobre OB100, para activar la Etapa “0” haremos uso del bloque OB100, en el que escribiremos las siguientes operaciones: SET S R
M0.0 M0.1
De esta forma, cuando el autómata entre en OB1, tendremos únicamente la etapa “0” activa y la etapa “1” inactiva, empezando así el programa correctamente. Recordando lo que ya vimos en el Capítulo 7, vamos a introducir nuestro programa en el autómata o bien en el simulador, para comprobar el funcionamiento de las operaciones anteriores. Para ello, haremos doble clic sobre el icono de STEP-7 en el Escritorio de Windows y saltamos a la ventana del Administrador de STEP-7.
76
Grafcet
Capítulo 8
Una vez en la ventana del Administrador de STEP-7, pulsaremos con la flecha de nuestro ratón sobre el nombre del proyecto, en este caso “S7_Pro1”, pero con el botón derecho del ratón, y elegiremos la opción “Insertar nuevo objeto/Programa S7”, tal y como muestra la imagen:
Fig. 8.14
Aceptaremos con el botón izquierdo del ratón, con lo que STEP-7 nos creará una carpeta nueva con el nombre “Programa S7(2)” que contiene a su vez la carpeta “Bloques”. Al hacer clic sobre esta última carpeta, en la parte derecha de la pantalla aparece el contenido de la carpeta “Bloques” y nos muestra el bloque OB1 ya creado, aunque vacío. Haremos nuevamente doble clic sobre este bloque OB1 y nos aparecerá la imagen:
Fig. 8.15
77
Grafcet
Capítulo 8
Al aceptar esta imagen, nos aparece otra nueva (según la versión que el lector tenga de STEP-7, puede tener un aspecto algo distinto):
Comenzar a escribir aquí
Fig. 8.16
Y ahora introduciremos nuestro programa a partir de donde marca la flecha, y tendremos:
No olvide oprimir este icono, después de haber escrito su programa
Fig. 8.17
78
Grafcet
Capítulo 8
Una vez escrito el programa, oprimiremos el icono “Guardar” y así guardaremos en disco nuestro trabajo. (NOTA: Obsérvese como el símbolo “//” permite añadir un comentario a la derecha de la operación.) Debemos volver ahora nuevamente a la ventana del Administrador general de STEP-7, para ello haga clic en el icono que contiene la huella de un zapato y un “7”, situado en la barra de herramientas inferior. No olvidemos que aún nos quedan por escribir una cuantas operaciones en OB100, puesto que ni siquiera tenemos el bloque OB100 a la vista, empecemos por crearlo. Para ello haga clic sobre el menú “Insertar” y elija la opción “Bloque S7/1 Bloque de organización” y aparecerá una ventana como la de la Fig. 8.15, donde tenemos que cambiar el número del bloque por el “100” para que se lea “OB100”. Una vez hecho esto, haremos clic en “Aceptar” y aparecerá pasados algunos segundos el nuevo bloque creado OB100 al lado del OB1. Para editar el nuevo bloque OB100 y escribir nuestras operaciones, haremos doble clic sobre el icono OB100 y aparecerá nuevamente una ventana muy similar a la de la Fig. 8.16. Nos situaremos más o menos donde indica la flecha de la Fig. 8.16 e introduciremos nuestro pequeño programa:
Fig. 8.18
Una vez hecho esto, haremos clic sobre el icono “Guardar” y después nuevamente clic sobre el icono que nos muestra el Administrador de STEP-7. 79
Grafcet
Capítulo 8
Bien, hasta aquí ya tenemos nuestro programa en memoria del PC, pero debemos introducirlo ahora o en el autómata o en el simulador. Si decidimos introducirlo en el autómata, no olvidemos dar tensión al autómata, y también poner la llave del frontal en la posición STOP, hecho esto, iremos al Administrador de STEP-7, seleccionaremos por ejemplo el bloque OB1 haciendo un solo clic sobre su icono, y una vez este seleccionado (se sabe que está seleccionado porque se pone de color azul oscuro) volveremos a hacer clic sobre el icono “Cargar”, tras lo que pasados algunos segundos, habremos conseguido cargar el bloque OB1 en el autómata. Debemos hacer lo mismo ahora con OB100, empezaremos por seleccionarlo, haciendo un clic sobre su icono y después un nuevo clic sobre el icono “Cargar”. Con esto tenemos ya el autómata cargado con el programa y sólo nos falta probarlo. Para ello giraremos la llave del frontal a la posición RUN y esperaremos algunos segundos hasta que las luces del frontal se estabilicen. No olvidemos que el bloque OB100 se ha ejecutado ya, cuando hemos pasado la llave del frontal desde la posición STOP a la RUN. Por tanto, nuestro programa se encuentra (o debería encontrarse) en estos momentos en la etapa “0”, por cuanto en la etapa OB100, no olvidemos que las órdenes que habíamos dado eran poner a “1” el Bit M0.0 y a “0” el Bit M0.1. Esta situación permanecerá así indefinidamente, y según nos indica el Grafcet de la Fig. 8.13, el proceso está esperando que alguien introduzca una tensión alta por E124.0. Al hacerlo así, la etapa “0” se desactiva y se activa simultáneamente la etapa “1”, donde la tarea que debe realizar es poner a “1” la salida A124.0. Observemos como el diodo LED de la salida A124.0 se enciende, indicando que A124.0 está a “1”, tal y como habíamos previsto. En estos momentos el programa está esperando a recibir una tensión alta por E124.1, confirmando que el contactor se ha cerrado. Si accionamos el interruptor de E124.1 e introducimos por esta entrada una tensión alta, el programa anulará la etapa “1” y activará la etapa “2” haciendo que M0.2 se ponga a “1”. Si la etapa “2” existe, el programa continuará hacia esta etapa y cuando ésta se cumpla, pasará a la etapa “3”, etc. Un caso particular: En algunos casos, la transición de la etapa siempre es cierta. Este es el caso normalmente cuando la/s tarea/s a realizar son órdenes internas al autómata cuya ejecución es instantánea y su comprobación se hace muy difícil o imposible. En estos casos en que la ejecución de las tareas es instantánea y además no tenemos forma de comprobar si las órdenes se han ejecutado correctamente o no, se recurre a poner a “1” la transición de esta etapa. Veamos el siguiente ejemplo: Se trata de diseñar una etapa en la que la tarea consiste en poner a “1”, por ejemplo el Bit A124.0.
80
Grafcet
Capítulo 8
Solución: Empezaremos pintando una tabla de las entradas y salidas del autómata y las asignaciones que hemos hecho: Entradas
Salidas A124.0
Pintaremos el Grafcet de nivel “1” y después el de nivel “2”: G1: BitDeEtapa N
Activar salida =1
G2: M0.0 A124.0 = 1
N =1
Representación de la etapa anterior, en formato cerrado: U M0.0 SPBN _001 S A124.0 SET R M0.0 S M0.1 _001: NOP 0
//Cuerpo de la etapa en este caso. //Pondremos “SET” cuando la transición sea “1”. //Anulamos la etapa actual caracterizada por M0.0, //y activamos la siguiente, caracterizada por M0.1.
Aquí en este caso no preguntamos si la transición es cierta puesto que es evidente que lo es. Ponemos la operación “SET”, anulamos la etapa actual y activamos la siguiente. Obsérvese además cómo indicamos que la transición es siempre cierta, con el símbolo “=1”.
81
Grafcet
Capítulo 8
Ejercicio 1 FCs
Control automático taladradora vertical
s Proyectar un circuito para el control automático de una taladradora vertical. Dicha máquina deberá realizar la siguiente función:
B
Ps
1º.- Mediante el pulsador B iniciamos el descenso de la herramienta, la cual, al llegar a un minirruptor fin de carrera FCb, debe interrumpir el descenso e iniciar la subida. 2º.- Al llegar en la subida a un minirruptor fin de carrera FBs, la herramienta debe detenerse. 3º.- El circuito deberá llevar un pulsador de emergencia Ps, mediante el cual pueda interrumpirse el descenso de la herramienta, para que automáticamente se inicie la subida. 4º.- Cuando la herramienta esté subiendo, de ninguna manera deberá poder iniciarse la bajada, aunque se pulse B.
b
Definido el diagrama del circuito, traducir a lenguaje STEP 7 a lógica cableada.
FCb
Aclaraciones: Se supone que el taladro tiene un mecanismo con dos (2) entradas marcadas SUBIR y BAJAR. Si la entrada SUBIR recibe un voltaje alto, el taladro subirá, y si la entrada BAJAR recibe el voltaje alto, el taladro bajará, y si ninguna entrada recibe tensión, el taladro estará quieto. Las tablas con los contactos de entradas/salidas son: Entradas E124.0 E124.1 E124.2 E124.3
B (botón empezar) FCs (fin de carrera superior). FCb (fin de carrera inferior) Ps (pulsador de emergencia).
Salidas A124.0 A124.1
G1:
SUBIR (subir taladro) BAJAR (bajar taladro)
G2: M0.0
0
NO SUBIR, NO BAJAR
0
¿Botón empezar?
A124.0=0, A124.1=0 E124.0=1
M0.1
1
BAJAR
1
¿Final de carrera inferior O Pulsador de emergencia? 2
SUBIR, NO BAJAR ¿Final de carrera superior?
82
A124.1=1
(E124.2=1) O (E124.3=1) M0.2
2
A124.0=1, A124.1=0 E124.1=1
Grafcet
Capítulo 8
Y la traducción de G2 a lenguaje AWL será: U SPBN R R U R S _000: NOP 0
M0.0 _000 A124.0 A124.1 E124.0 M0.0 M0.1
U SPBN S O O R S _001: NOP 0
M0.1 _001 A124.1 E124.2 E124.3 M0.1 M0.2
//Activar A124.1 (BAJAR). //Si el taladro ha llegado a su parte inferior //o alguien ha pulsado el paro de emergencia, //anular la etapa actual //y activar la próxima.
U SPBN S R U R S _002: NOP 0
M0.2 _002 A124.0 A124.1 E124.1 M0.2 M0.0
//Activar A124.0 (SUBIR) y desactivar //A124.1 (BAJAR). //Cuando el taladro llegue a su parte alta, //anular la etapa actual //y activar la etapa “0”.
//Poner a “0” las salidas A124.0 y A124.1 //Si alguien ha pulsado el botón empezar, //anular la etapa actual // y pasar a la siguiente.
Una vez hayamos introducido esta información en OB1 y guardado en disco, pasaremos primero a crear OB100 y después introduciremos lo siguiente: SET S R R
M0.0 M0.1 M0.2
Que también guardaremos en disco. Finalmente, volveremos al Administrador de STEP-7, seleccionaremos individualmente o en conjunto OB1 y OB100 y los introduciremos en el autómata (sin olvidarnos de poner previamente la llave del frontal en STOP). Al pasar la llave a RUN, podemos probar ahora nuestro programa. Aquí nuevamente, al pasar la llave de STOP a RUN se ha ejecutado una sola vez el bloque OB100, por lo que el autómata ha hecho A124.0=0 y A124.1=0, tal y como hemos programado, y después se queda esperando a que la transición E124.0=1, o lo que es lo mismo, a que alguien oprima el botón empezar B. Cuando esto ocurre, el autómata pasa a la etapa “1” donde pone a “1” la salida A124.1, y esto hace que la taladradora comience a bajar. 83
Grafcet
Capítulo 8
El programa espera en la etapa “1” a que su transición sea cierta, lo cual ocurrirá cuando o bien la taladradora llegue a su parte inferior y se active el final de carrera FCb (E124.2=1) o bien cuando alguien pulse el paro de emergencia Ps (E124.3=1) o incluso cuando ocurran ambas circunstancias a la vez. Cuando cualquiera de estas cosas ocurra, la transición será cierta y se anulará la etapa actual “1” y se activará la siguiente “2”. En la etapa “2”, el programa activa SUBIR y desactiva BAJAR, y así permanece hasta que detecta que el taladro ha llegado a la parte alta, que se lo indica FCs conectado a la entrada del autómata E124.1. Así pues, una vez E124.1=1, el programa desactiva la etapa “2” y activa la etapa “0”, permaneciendo en la etapa “0” hasta que alguien vuelve a pulsar el botón empezar B nuevamente y comienza otra vez el ciclo.
Ejercicio 2
Arranque directo
L1 L2 L3
PE
Arranque directo de un motor trifásico con rotor en corto circuito 1.- Elementos del esquema:
Q1
Q1 KM1 F1 M LM LF1 LBT
KM1 F1
Seccionador con fusibles incorporados Contactor de potencia Relé térmico de protección Motor trifásico Lámpara que señala motor en marcha Lámpara que señala disparo de F1 Lámpara que señala tensión en el circuito
2.- Funcionamiento Para poner en marcha, pulsar en S1 Para parar, pulsar en S2 El motor tambien se desconecta por disparo de F1 Lámparas de señalización de circuito bajo tensión (LBT), motor en servicio (LM) y disparo de relé térmico (LF1)
M 3∼
(NOTA: Es aconsejable que el lector realice un esquema eléctrico completo, donde aparezca el circuito de potencia anterior, el de maniobra, el autómata, los pulsadores y las lámparas de señalización.) S1
botón de marcha
S2
botón de paro
LM (motor = ON) LF1 (térmico)
RT = Relé térmico
84
Grafcet
Capítulo 8
La tabla con los contactos de entradas/salidas será: Entradas E124.0 S1 (botón de marcha) E124.1 S2 (botón de paro) E124.2 RT (relé térmico)
Salidas A124.0 A124.1
G1:
KM1 y LM LF1
1,2
Poner salidas=OFF
0
¿Botón de marcha=ON Y Relé térmico=OFF? Motor=ON; LM=ON
1
¿Relé térmico=ON?
¿Botón de PARO pulsado?
Motor=OFF LM=OFF LF1=ON
2
0
Relé térmico=OFF?
0
1,2
G2:
M0.0 A124.0=0; A124.1=0
0
(E124.0=1) Y (E124.2=0)
M0.1
A124.0=1
1
E124.1=1
E124.2=1 M0.2
2
0
A124.0=0 A124.1=1 E124.2=0
0
85
Grafcet
Capítulo 8
Antes de traducir nuestro Grafcet G2 a operaciones AWL, comentemos algunos detalles nuevos. Los números encima de la punta de flecha que están encima de la etapa “0”, indican los números de las etapas desde las que se llega a ésta. En este caso, las etapas “1” y “2”. Observamos también algo nuevo, y es la bifurcación que hay debajo de la etapa “1”. Esto significa que una vez el programa esté en la etapa “1”, podemos pasar desde aquí a la etapa “0” o a la etapa “2”, según sea cierta la transición “Botón de PARO está pulsado” o “Relé termico=ON”. La traducción de G2 a operaciones AWL, que pondremos en OB1, será: U SPBN R R U UN R S _000: NOP 0
M0.0 _000 A124.0 A124.1 E124.0 E124.2 M0.0 M0.1
U SPBN S U R S U R S _001: NOP 0
M0.1 _001 A124.0 E124.1 M0.1 M0.0 E124.2 M0.1 M0.2
//Poner el motor en marcha y encender lámpara LM. //Si alguien ha pulsado el botón de PARO, //anular la etapa actual //y volver a etapa “0”. //Si ha saltado el relé térmico, //anular la etapa actual //y activar la próxima.
U SPBN R S UN R S _002: NOP 0
M0.2 _002 A124.0 A124.1 E124.2 M0.2 M0.0
//Apagar motor, lámpara LM y //encender lámpara LF1. //Si alguien ha rearmado el relé térmico, //anular la etapa actual //y activar la etapa “0”.
//Poner a “0” las salidas A124.0 y A124.1 //Si alguien ha pulsado el botón de marcha Y //el relé térmico no está saltado, //anular la etapa actual // y pasar a la siguiente.
En cuanto a las instrucciones que pondremos en OB100, serán: SET S R R
M0.0 M0.1 M0.2
Como ya hemos hecho en ejercicios anteriores, guardaremos OB1 y OB100 en el disco del PC haciendo clic sobre el icono “Guardar”, volveremos al Administrador de STEP-7, seleccionaremos individualmente o en conjunto los bloques OB1 y OB100 y los introduciremos en el autómata con el icono “Cargar”, sin olvidarnos de poner en STOP el autómata previamente.
86
Grafcet
Capítulo 8
Una vez el programa en el autómata, pondremos la llave en la posición RUN, con lo que se ejecutarán las operaciones que hemos depositado en OB100, y el programa entrará en la etapa “0” donde pondrá las salidas A124.0 y A124.1 a “0” y se quedará esperando a que se cumpla la transición, la cual será cierta cuando E124.0=1 Y E124.2=0 (o lo que es lo mismo, que alguien pulse el botón de marcha Y que el relé térmico no esté saltado). Cuando se dé la circunstancia anterior, el programa anulará la etapa “0” y pasará a la etapa “1”, donde pondrá a “1” la salida A124.0, lo que producirá simultáneamente la puesta en marcha del motor y se encenderá la lámpara LM, tras esto el programa queda a la espera de que sea cierta o bien la transición de la izquierda “Botón de PARO pulsado” o bien la transición de la derecha “Relé térmico=ON” (pero no ambas). Si se cumple la transición de la izquierda E124.1=1 (o lo que es igual, “Botón de PARO pulsado = CIERTO”), entonces el programa anulará la etapa actual “1” y activará la etapa “0”, donde ya sabemos que las salidas se pondrán a “0”. Si por el contrario se cumple la transición de la derecha E124.2=1 (o lo que es igual, “Relé térmico=ON”), entonces se anulará la etapa actual “1” y se activará la etapa “2”. Si el programa activa la etapa “2”, lo primero que hará esta etapa es apagar el motor y la lámpara LM haciendo que A124.0 sea “0” y encendiendo la lámpara LF1 poniendo a “1” la salida A124.1. En esta etapa “2” permanecerá indefinidamente hasta que alguien rearme el relé térmico, con lo que la transición E124.2 volverá a “0” y el programa anulará la etapa actual “2” y activará la “0”, donde el programa queda a la espera de volver a empezar.
Ejercicio 3
Bomba de agua ON
OFF
FUNC TERMICO
BOMBA
El estado de disponibilidad o no de servicio, lo proporciona un selector de dos posiciones: Conectado (ON) Desconectado (OFF). La electrobomba se pondrá en marcha cuando el sensor de mínimo esté encendido y se apagará cuando, o bien se encienda el sensor de máximo, o bien salte el térmico o bien la desconectemos mediante el selector. Si la electrobomba está en servicio, deberá lucir una lámpara indicadora. Si salta el térmico se encenderá otra lámpara avisándolo.
(NOTA: Es aconsejable que el lector dibuje un esquema eléctrico completo, donde aparezca el circuito de potencia, el de maniobra, el autómata, los pulsadores y las lámparas de señalización.)
87
Grafcet
Capítulo 8
RT = Relé térmico Las tablas con los contactos de entrada/salida son: Entradas E124.0 E124.1 E124.2 E124.3 E124.4
Salidas A124.0 A124.1 A124.2
Selector en posición ON Selector en posición OFF Tanque lleno Tanque vacío RT (relé térmico)
Bomba Luz FUNCIONANDO Luz TERMICO
G1:
1,2
0
Poner salidas=OFF ¿El selector está en ON Y el tanque está VACIO Y el relé térmico no ha saltado?
1
Bomba=ON; Luz Func.=ON
¿Tanque lleno O Selector=OFF?
¿Relé térmico=ON? 2
0
Bomba=OFF Luz Func.=OFF Luz TERM.=ON ¿Relé térmico=OFF?
0
88
Grafcet
Capítulo 8
G2: 1,2 M0.0 0
A124.0=0; A124.1=0; A124.2=0 ¿(E124.0=1) Y (E124.1=0) Y (E124.2=0) Y (E124.3=1) Y (E124.4=0)?
M0.1
A124.0=1; A124.1=1
1
¿(E124.2=1) O ((E124.0=0) Y (E124.1)=1))?
M0.2
2
0
E124.4=1 A124.0=0 A124.1=1 A124.2=1 E124.4=0
0
Estos Grafcet G1 y G2, nos recuerdan mucho a los del Ejercicio 2, pero aquí su interpretación es diferente. La traducción a operaciones en lenguaje AWL será: U SPBN R R R U UN UN U UN R S _000: NOP 0
M0.0 _000 A124.0 A124.1 A124.2 E124.0 E124.1 E124.2 E124.3 E124.4 M0.0 M0.1
U SPBN S S O( U ) O( UN U ) R S
M0.1 _001 A124.0 A124.1 E124.2
//Poner a “0” las salidas A124.0, //A124.1 y //A124.2. //Si el selector está en la posición ON //Y no está en la posición OFF, //Y el sensor que marca lleno no está activado, //Y el sensor que marca tanque vacío si está activo, //Y el relé térmico no está activado, //entonces anular la etapa actual // y pasar a la siguiente.
//Poner bomba en marcha y //encender lámpara de luz FUNCIONANDO. //Si el tanque está lleno O
E124.0 E124.1
//el selector no está en posición ON //Y el selector si está en posición OFF
M0.1 M0.0
//Anular la etapa actual //y volver a etapa “0”. 89
Grafcet
Capítulo 8
U R S _001: NOP 0
E124.4 M0.1 M0.2
//Si ha saltado el relé térmico, //anular la etapa actual //y activar la próxima.
U SPBN R R S UN R S _002: NOP 0
M0.2 _002 A124.0 A124.1 A124.2 E124.4 M0.2 M0.0
//Apagar bomba, //apagar luz FUNCIONANDO y //encender luz TERMICO. //Si alguien ha rearmado el relé térmico, //anular la etapa actual //y activar la etapa “0”.
En cuanto a las instrucciones que pondremos en OB100, serán: SET S R R
M0.0 M0.1 M0.2
Ejercicio 4
Inversor de giro para motor trifásico
L1 L2 L3
1.- Esquema de potencia
Q1
KM1
L1, L2, L3 Q1 KM1, KM2 M
KM2
Acometida Seccionador con fusibles incorporados Inversor por contactor Motor trifásico
2.- Esquema de maniobra La selección de giro se hace por pulsadores, disponiendo el circuito de maniobra de lámparas de señalización de giro a derecha e izquierda y disparo de relé térmico.
F1
El paro se hace por medio del pulsador Pa.
M 3∼
(NOTA: Es aconsejable que el lector dibuje un esquema eléctrico, lo más completo posible donde aparezca el circuito de potencia, el de maniobra, el autómata, los pulsadores y las lámparas de señalización). Botón Gd (Girar dcha.)
Gd (Gira dcha.)
Botón Gi (Gira izda.)
Gi (Gira izda.) Rt (relé térmico)
Botón Pa (Parar)
90
Grafcet
Capítulo 8
La tabla con los contactos de entradas/salidas será: Entradas E124.0 E124.1 E124.2 E124.3
Salidas A124.0 A124.1 A124.2
Botón Gd (Girar dcha.) Botón Gi (Girar izda.) Botón Pa (Parar) Rt (Relé térmico)
G1:
Motor dcha. y lámpara Gd Motor izda. y lámpara Gi Lámpara Rt
Poner salidas = OFF
0
¿(Pulsador Gd) Y (NO Rt)?
¿(Pulsador Gi) Y (NO Rt)? Girar motor izda. .
Girar motor dcha.
1
Lámpara Gi = ON
2
Lámpara Gd = ON
No girar motor dcha..
No girar motor izda.
Lámpara Gd = OFF
Lámpara Gi = OFF
¿Botón Gi?
2
¿Botón Pa?
¿Botón Gd?
¿Rt = ON?
0
1
0
M0.0
G2:
0
0
(E124.1=1) Y (E124.3=0)
(E124.0=1) Y (E124.3=0) M0.1
M0.2
A124.0=1
A124.0=0
2
A124.1=1
A124.1=0
E124.1=1
2
E124.2=1
0
¿Rt = ON?
A124.0=0 A124.1=0 A124.2=0
0
1
¿Botón Pa?
E124.3=1
E124.0=1
0
1
91
E124.2=1
0
E124.3=1
0
Grafcet
Capítulo 8
La traducción a operaciones en lenguaje AWL será: U SPBN R R R U UN R S U UN R S _000: NOP 0
M0.0 _000 A124.0 A124.1 A124.2 E124.0 E124.3 M0.0 M0.1 E124.1 E124.3 M0.0 M0.2
//Poner a “0” las salidas A124.0, //A124.1 y //A124.2. //Si botón Gd está pulsado //Y no esta saltado el térmico, //anular la etapa actual // y pasar a la etapa “1”. //Si botón Gi está pulsado //Y no esta saltado el térmico, //anular la etapa actual // y pasar a la etapa “2”.
U SPBN S R U R S U R S U R S _001: NOP 0
M0.1 _001 A124.0 A124.1 E124.1 M0.1 M0.2 E124.2 M0.1 M0.0 E124.3 M0.1 M0.0
//Girar motor a dcha. y encender lámpara Gd. //Anular giro a izda. y apagar lámpara Gi. //Si botón Gi está pulsado, //anular etapa actual //y activar etapa “2”. //Si botón Pa está activado, //Anular la etapa actual //y volver a etapa “0”. //Si relé térmico ha saltado, //anular la etapa actual //y activar etapa “0”.
U SPBN S R U R S U R S U R S _002: NOP 0
M0.2 _002 A124.1 A124.0 E124.0 M0.2 M0.1 E124.2 M0.2 M0.0 E124.3 M0.2 M0.0
//Girar motor izda. y encender lámpara Gi //Anular giro dcha. y apagar lámpara Gd //Si alguien pulsa botón Gd, //anular la etapa actual //y activar la etapa “1”. //Si alguien pulsa botón Pa, //anular la etapa actual //y activar la etapa “0”. //Si ha saltado el relé térmico, //anular la etapa actual //y activar la etapa “0”.
En cuanto a las instrucciones que pondremos en OB100, serán: SET S R R
M0.0 M0.1 M0.2
92
Temporizadores y contadores
Capítulo 9
CAPÍTULO 9
Índice
Temporizadores y contadores 9.1 Qué es un temporizador En general llamaremos temporizador a cualquier dispositivo sea cual sea su naturaleza, capaz de permanecer en un estado durante un tiempo prefijado a partir de un evento concreto. En la vida diaria hacemos uso de temporizadores diferentes. Pensemos por ejemplo, cuando introducimos un alimento en un horno de microondas para calentarlo. El tiempo de calentamiento lo prefijamos con un mando incorporado en el aparato. O cuando ponemos un despertador por la noche para que nos despierte al día siguiente. Lo que hacemos en ambos casos es usar el microondas o el despertador como temporizador, etc. Si en los ejemplos anteriores los temporizadores eran piezas relativamente grandes, y que en cualquier caso podíamos tocar con las manos, en el caso de los autómatas, los temporizadores están constituidos por partes de la memoria RAM, como ya vimos en el apartado 5.2, conjuntamente con una forma especial de trabajar un oscilador maestro que existe en el interior del autómata. Son por tanto elementos electrónicos muy pequeños integrados en la CPU del autómata y cuyas características de funcionamiento son programables por el usuario. En cuanto al número de temporizadores que un autómata puede tener, depende del modelo elegido, tal y como ya vimos en la tabla del apartado 5.2. Desde el punto de vista de STEP-7, los temporizadores los podemos imaginar de la siguiente forma:
Tnº “BitDeDisparo”
S
“S5TIME”
TW
“BitDeReset”
R
Q
“BirReceptor”
DUAL
“WordDestino” (Binario)
DEZ
“WordDestino” (BCD)
Fig.9.1
Donde las flechas indican el sentido de entrada o salida de la información. Podemos resumir en una tabla el significado de cada elemento, de la siguiente forma:
93
Temporizadores y contadores
Capítulo 9
“BitDeDisparo” “S5TIME” “Tnº” “BitDeReset”
Es el Bit que pone en marcha el temporizador Es el tiempo que se carga en el temporizador Es el nombre del temporizador Es el Bit que pone a cero el temporizador Es el Bit que asignamos para recoger la información Es el Word que asignamos para recoger la información en formato Binario Es el Word que asignamos para recoger la información en formato BCD
“BitReceptor” “WordDestino”(Binario) “WordDestino”(BCD)
Aunque la tabla muestra con claridad el significado de cada elemento, podemos decir que el temporizador es como una “caja” a la que hay que suministrarle una información que es la representada por las flechas entrantes a la “caja”, y como consecuencia de esta información entrante, nos suministra una información saliente, representada por las flechas que salen de la “caja”. Los temporizadores se representan por la letra T mayúscula, seguida por un número que puede estar comprendido entre “0” y el número máximo que indique la tabla del apartado 5.2. Si bien en teoría es posible usar un temporizador en distintas partes del programa, en la práctica se recomienda usar un temporizador diferente cada vez que debamos utilizar uno. En realidad, esta es una política que el programador debería tener siempre presente, no solamente para los temporizadores sino en general cuando tenga que hacer uso de otros elementos del autómata, tales como memoria de marcas o contadores, que veremos posteriormente. Así pues, no olvide que una buena política de programación es: NO USAR LOS RECURSOS MÁS DE UNA VEZ
Volviendo a los temporizadores, hemos llamado “BitDeDisparo” al Bit que usemos para poner en marcha el temporizador, pero antes previamente deberemos haber introducido el tiempo en el mismo. Este tiempo, en el dibujo anterior viene representado por “S5TIME”, y esta expresión además de decirnos que debemos introducir un tiempo, nos dice que hemos de hacerlo precisamente en el formato usado por STEP-7 que se llama así: “S5TIME” El formato de tiempo “S5TIME” tiene el siguiente aspecto: S5T#aHbbMccSdddMS Siendo:
a bb cc ddd
= = = =
Horas Minutos Segundos Milisegundos
En este formato de tiempo “S5TIME”, el tiempo máximo que podemos manejar es de dos (2) horas, cuarenta y seis (46) minutos y treinta (30) segundos, o lo que es lo mismo, 9990 segundos. Veamos como representaríamos en formato “S5TIME”, una (1) hora, catorce (14) minutos y diez (10) segundos: S5T#1H14M10S 94
Temporizadores y contadores
O como representaríamos 1,5 segundos:
Capítulo 9
S5T#1S500MS
O 347 segundos: S5T#5M47S Es importante señalar, que STEP-7 admite que el usuario introduzca el tiempo en la unidad que desee, pues posteriormente STEP-7 nos lo cambia a las unidades convenientes. Así, en el ejemplo anterior, al escribir S5T#347S, STEP-7 nos lo cambia por S5T#5M47S. El “BitDeReset” como ya hemos dicho, es el Bit que pone a cero el temporizador. Esto quiere decir que si el temporizador aun no había agotado el tiempo que le habíamos introducido, con este Bit lo que hacemos es poner a “0” el tiempo restante (si es que todavía no es cero). El “BitReceptor” es el nombre que hemos dado al Bit que el programador designa para recibir el estado lógico (“1” o “0”) del temporizador en un momento determinado. Si la salida lógica del temporizador (salida Q) permanece a “1” mientras está temporizando, esta misma salida se pondrá a “0” cuando haya dejado de hacerlo. Si el programador está interesado en conocer el tiempo restante que aún le falta al temporizador para terminar, puede hacerlo por la salida DUAL, por donde el temporizador nos suministra este tiempo restante en formato Binario ocupando una palabra de dieciséis (16) Bits (un Word). La salida DEZ hace lo mismo que la DUAL, sólo que el tiempo restante hasta terminar la temporización nos lo suministra en formato BCD, ocupando una palabra de dieciséis (16) Bits (un Word). Para resumir lo dicho hasta aquí, pongamos un ejemplo que concrete lo que se ha explicado. Imaginemos que hemos de usar un temporizador. Elegiremos por ejemplo el temporizador T0 suponiendo que esté libre y no lo hayamos usado anteriormente. Deseamos cargar un tiempo de un (1) minuto y dieciséis (16) segundos en el temporizador, para lo que haremos uso del formato “S5TIME” siguiente: S5T#1M16S Deseamos que el temporizador se ponga en marcha cuando la entrada E124.0 pase de “0” a “1”, por lo que nuestro “BitDeDisparo” será en este caso precisamente E124.0. Tenemos previsto poner a cero el temporizador cuando la entrada E124.1 pase de “0” a “1”, por lo que nuestro “BitDeReset” será en este caso E124.1. Deseamos saber si el temporizador aún está temporizando o ha terminado ya, para lo que designamos por ejemplo el Bit M3.5 para recoger la salida Q del temporizador (después veremos como se hace), suponiendo que este Bit esté libre y no se haya usado con anterioridad. Si queremos saber el tiempo restante que aún queda por temporizar en formato Binario, el resultado podemos almacenarlo por ejemplo en la Word MW10 (suponiendo que esté libre) y si finalmente queremos almacenar este mismo tiempo pero en formato BCD, podemos hacerlo por ejemplo en la Word MW12, también suponiendo que esta palabra esté libre.
95
Temporizadores y contadores
Capítulo 9
Bien, hasta aquí tenemos idea de cómo funcionan los temporizadores en STEP-7, pero nos preguntamos cómo podemos hacerlo para introducir esta información en el autómata. Las ideas anteriores expresadas en lenguaje AWL serían así: U L Sx
“BitDeDisparo” “S5TIME” “Tnº”
Bit que pone en marcha el temporizador Tiempo que se carga en el temporizador Tipo y nombre del temporizador
U R
“BitDeReset” “Tnº”
Bit que pone a cero el temporizador Nombre del temporizador
L T
“Tnº” “WordDestino”(Binario)
Nombre del temporizador Word que asignamos para recoger la información en formato Binario
LC T
“Tnº” “WordDestino”(BCD)
Nombre del temporizador Word que asignamos para recoger la información en formato BCD
U =
“Tnº” “BitReceptor”
Nombre del temporizador Bit que asignamos para recoger la información
Donde no es obligatorio tener que escribir todas las operaciones que se indican anteriormente para poder trabajar con temporizadores. Por ejemplo, si lo único que deseamos es poner en marcha un temporizador y ver su estado reflejado en un Bit de marca, nos basta con usar las tres (3) primeras operaciones para poner en marcha el temporizador, y las dos (2) últimas para asignar el estado del temporizador al Bit de marca que deseemos. 9.2 Modelos de temporizadores STEP-7 tiene cinco (5) modelos diferentes de temporizadores que podemos usar según nuestras preferencias o según el problema que estemos resolviendo. Veamos qué modelos son estos. Modelo S-EVERZ (SE): El modelo S-EVERZ se representa con las letras SE y es un temporizador con retardo a la conexión. Gráficamente su comportamiento se puede representar así:
BitDeDisparo
Ejemplo:
SalidaLogica T
U L SE U =
E124.0 S5T#5S T0 T0 A124.0
Y expresado con palabras diríamos que este temporizador se activa un tiempo T después que BitDeDisparo pase de “0” a “1”, pero cuando BitDeDisparo cae a “0”, el temporizador también cae a “0”. Obsérvese como el temporizador no llega a activarse si la duración de BitDeDisparo no es mayor que T. 96
Temporizadores y contadores
Capítulo 9
Modelo S-AVERZ (SA): El modelo S-AVERZ se representa con las letras SA y es un temporizador con retardo a la desconexión. Gráficamente su comportamiento se puede representar así: Ejemplo:
BitDeDisparo SalidaLogica T
T
U L SA U =
E124.0 S5T#5S T1 T1 A124.2
Con palabras diremos que este temporizador se activa inmediatamente después que BitDeDisparo se pone a “1”, y que permanece activo un tiempo T después que BitDeDisparo cae a “0”. Modelo S-IMPULS (SI): El modelo S-IMPULS se representa con las letras SI y es un temporizador normal de impulso. Gráficamente su comportamiento se puede representar así: Ejemplo:
BitDeDisparo SalidaLogica T
T
U L SI U =
E124.2 S5T#5S T2 T2 A124.4
Con palabras diremos que el temporizador se activa inmediatamente después que BitDeDisparo pasa de “0” a “1”, y después permanece en “1” un tiempo T, después cae a “0”, excepto si BitDeDisparo ha caído a “0” antes que haya transcurrido el tiempo T, en ese caso el temporizador también cae a “0”. Modelo S-VIMP (SV): El modelo S-VIMP se representa con las letras SV y es un temporizador de impulso prolongado a la conexión. Gráficamente su comportamiento se puede representar así: BitDeDisparo
Ejemplo:
SalidaLogica T
T
U L SV U =
E124.5 S5T#5S T7 T7 A124.6
Con palabras diremos que el temporizador se activa inmediatamente después que BitDeDisparo pasa de “0” a “1” y permanece en “1” un tiempo T, después cae a “0” nuevamente. Obsérvese como aquí el tiempo que el temporizador está en “1” es independiente de la bajada a “0” de BitDeDisparo. Modelo S-SEVERZ (SS): El modelo S-SEVERZ se representa con las letras SS y es un temporizador de impulso prolongado a la desconexión.
97
Temporizadores y contadores
Capítulo 9
Gráficamente su comportamiento se puede representar así: BitDeDisparo BitDeReset SalidaLogica T
T
Aquí el temporizador se pone a “1” un tiempo T después que BitDeDisparo pase de “0” a “1” y cae a “0” si BitDeReset se pone a “1”. Veamos un ejemplo que resume lo que hemos dicho sobre temporizadores. Imaginemos que se desea encender durante 5 segundos una lámpara piloto después de accionar un pulsador. Si el pulsador lo conectamos a la entrada E124.0 y la lámpara a la salida A124.0, las operaciones serían las siguientes: U L SV
E124.0 S5T#5S T0
U =
T0 A124.0
//E124.0 es aquí BitDeDisparo //Cargamos 5 segundos //y los depositamos en el temporizador T0, //que hemos definido del tipo SV. //la salida lógica de T0 se la asignamos //a A124.0
Obsérvese como en este ejemplo tan sencillo (normalmente los casos reales también son sencillos), nos ha bastado con cinco (5) líneas de operaciones. La explicación de este ejemplo es la siguiente. Al accionar el pulsador, la entrada E124.0 pasa de “0” a “1” e inmediatamente lo hace también la salida A124.0 ya que es un reflejo directo de la salida lógica del temporizador. Por ser un temporizador del tipo SV, la duración de la salida sólo depende del tiempo que hayamos cargado en el mismo, por lo que tanto si el pulsador está o no está accionado, la salida permanecerá 5 segundos a “1” y después caerá a “0”. 9.3 Formato abierto En el apartado 8.5 vimos lo que llamábamos el formato cerrado de representación en lenguaje AWL de las etapas de Grafcet. Este formato es aplicable en general a todo tipo de operaciones y siempre que tengamos que traducir una etapa Grafcet a lenguaje AWL, emplearemos el formato cerrado. Sin embargo, en STEP-7 hay algunas operaciones tales como las que hacen uso de temporizadores (y las que usan contadores), que no admiten el formato cerrado que hemos visto anteriormente y necesitamos usar un formato distinto. Este nuevo formato, que llamaremos formato abierto, se define de acuerdo con la siguiente plantilla:
98
Temporizadores y contadores
Capítulo 9
U “BitDeEtapa” Tarea 1 Tarea 2 Cuerpo de la etapa --U “BitDeEtapa” Si la receptividad de la transición asociada a la etapa es cierta, anular la etapa actual y activar la siguiente. Esto es, en la construcción del formato abierto, anteponemos la operación “U BitDeEtapa” a cualquier operación que debamos hacer posteriormente. Veamos un ejemplo que resume lo que hemos dicho hasta aquí. Ejemplo: Se trata de activar un temporizador el que deseamos que esté 3 seg. activo a partir de su puesta en funcionamiento. M0.0 Hacer T0 = 3 seg. (SV)
N T0=0
Fig.9.2
Empecemos por explicar algunos aspectos nuevos que han aparecido en esta etapa Grafcet. En primer lugar, la tarea a realizar no es poner a “1” un Bit, sino cargar un temporizador con 3 segundos para que éste permanezca a “1” durante este tiempo y que este comportamiento sea independiente de cualquier otra circunstancia. Según esto, el temporizador lo elegiremos del tipo SV y lo anotaremos entre paréntesis para tenerlo en cuenta después cuando tengamos que traducir el dibujo Grafcet a operaciones AWL. En cuanto poner T0=0 en la transición, equivale a decir que ya han pasado 3 seg. desde que comenzó la etapa. Por tanto, la etapa Grafcet anterior en conjunto significa que debemos esperar en esta etapa 3 segundos antes de pasar a la siguiente. Si aplicamos lo que ya hemos dicho sobre formato abierto, pondremos: U L SV
M0.0 S5T#3s T0
U UN R S
M0.0 T0 M0.0 M0.1
Obsérvese como en el formato abierto se antepone la operación “U operaciones. 99
M0.0” al resto de las
Temporizadores y contadores
Capítulo 9
Ejercicio 1
PA (Pulsador de activación)
Entradas E124.0
Salidas
PA (Pulsador de activación)
A124.0
Salida 1
A124.1
Salida 2
G1: Esperar
0
¿PA? Esperar 5 seg. Salida 1 = ON
1
¿Han pasado 5 seg? Esperar 10 seg. Salida 2 = ON
2
¿Han pasado 10 seg? 0
100
Temporizadores y contadores
Capítulo 9
M0.0
G2:
Esperar
0 E124.0=1 M0.1
T0=5 seg (SV) A124.0 = T0
1 T0=0 M0.2
T1=10 seg (SV) A124.1 = T1
2 T1=0 0
Y la traducción a operaciones AWL en formato abierto será: U U R S
M0.0 E124.0 M0.0 M0.1
//Si estamos en la etapa “0”, //y E124.0 es “1”, //anular la etapa actual “0” //y activar la siguiente “1”.
U L SV
M0.1 S5T#5S T0
//Si estamos en la etapa “1”, //cargar 5 segundos //y depositarlos en T0 que se define del tipo SV.
U U =
M0.1 T0 A124.0
//Si estamos en la etapa “1” //asignar el estado lógico de T0 //a A124.0
U UN R S
M0.1 T0 M0.1 M0.2
//Si estamos en la etapa “1” //y T0 esta a “0” (ya ha temporizado), //anular etapa actual “1” //y activar la siguiente “2”.
U L SV
M0.2 S5T#10S T1
//Si estamos en la etapa “2” //cargar 10 segundos //y depositarlos en T1 que se define del tipo SV.
U U =
M0.2 T1 A124.1
//Si estamos en la etapa “2” //asignar el estado lógico de T1 //a A124.1
U UN R S
M0.2 T1 M0.2 M0.0
//Si estamos en la etapa “2” //y T1 esta a “0” (ya ha temporizado), //anular etapa actual “2” //y activar la siguiente “0”.
Pongamos ahora el OB100: SET S M0.0 R M0.1 R
M0.2
El lector puede comprobar ahora este programa introduciéndolo en el autómata y viendo como las salidas A124.0 y A124.1 evolucionan de acuerdo a lo previsto. 101
Temporizadores y contadores
Capítulo 9
Ejercicio 2
Rojo Ámbar Verde
Rojo Verde
Entradas PV (Pulsa verde)
E124.0
G1:
A124.0 A124.1 A124.2 A124.3 A124.4
Salidas Verde coches Ámbar coches Rojo coches Verde peatones Rojo peatones
G2:
0
Encender verde coches Apagar ámbar coches Apagar rojo coches Encender rojo peatones Apagar verde peatones
0
E124.0=1
¿PA?
1
Apagar verde coches Encender ámbar coches Apagar rojo coches Encender rojo peatones Apagar verde peatones Esperar 3 seg.
A124.0=0 A124.1=1 A124.2=0 A124.3=0 A124.4=1 T0=3 seg (SV)
M0.1 1
T0=0
¿Han pasado 3 seg?
2
A124.0=1 A124.1=0 A124.2=0 hes A124.3=0 A124.4=1
M0.0
Apagar verde coches Apagar ámbar coches Encender rojo coches Apagar rojo peatones Encender verde peatones Esperar 6 seg.
M0.2 2
A124.0=0 A124.1=0 A124.2=1 A124.3=1 A124.4=0 T1=6 seg (SV) T1=0
¿Han pasado 6 seg? 0
0 102
Temporizadores y contadores
Capítulo 9
Programación en lenguaje AWL del bloque OB1: U SPBN S R R R S U R S _000: NOP 0
M0.0 _000 A124.0 A124.1 A124.2 A124.3 A124.4 E124.0 M0.0 M0.1
//Si M0.0 es “1”, //ejecutar las operaciones que siguen. //poner a “1” la salida A124.0, //poner a “0” la salida A124.1, //poner a “0” la salida A124.2, //poner a “0” la salida A124.3, //poner a “1” la salida A124.4, //Si botón PV está pulsado //anular la etapa actual // y pasar a la etapa “1”.
U R S R R S
M0.1 A124.0 A124.1 A124.2 A124.3 A124.4
//Si M0.1 es “1”, //poner a “0” la salida A124.0, //poner a “1” la salida A124.1, //poner a “0” la salida A124.2, //poner a “0” la salida A124.3, //poner a “1” la salida A124.4,
U L SV
M0.1 S5T#3S T0
//Si M0.1 es “1”, //cargar 3 segundos, //y depositarlos en T0, que lo definimos del tipo SV.
U UN R S
M0.1 T0 M0.1 M0.2
//Si M0.1 es “1” //y T0 esta a “0” (ya ha temporizado) //anular etapa actual “1” //y activar etapa “2”.
U R R S S R
M0.2 A124.0 A124.1 A124.2 A124.3 A124.4
//Si M0.2 es “1” //poner a “0” la salida A124.0, //poner a “0” la salida A124.1, //poner a “1” la salida A124.2, //poner a “1” la salida A124.3, //poner a “0” la salida A124.4,
U L SV
M0.2 S5T#6S T1
//Si M0.2 es “1” //cargar 6 segundos, //y depositarlos en T1, que lo definimos del tipo SV.
U UN R S
M0.2 T1 M0.2 M0.0
//Si M0.2 es “1” //y T1 es “0” (ya ha temporizado), //anular etapa actual “2” //y activar etapa “0”.
Programación en lenguaje AWL del bloque OB100: SET S R R
M0.0 M0.1 M0.2
//Hacer RLO=1 //Si RLO=1, hacer M0.0=1 //Si RLO=1, hacer M0.1=0 //Si RLO=1, hacer M0.2=0
103
Temporizadores y contadores
Capítulo 9
9.4 Contadores El contador es también una herramienta interesante que nos permite resolver problemas complejos de programación allí donde es necesario llevar el contaje de una variable entera. Pensemos por ejemplo en cajas que deben contener un numero exacto de piezas menores (tornillos, tuercas, arandelas, etc.), o en procesos cuyo funcionamiento se basa en el contaje de unidades discretas, tales como los coches que puede haber en un aparcamiento o el numero de personas que han entrado en un local, etc. El uso de contadores nos permite resolver de forma inteligente problemas que nos encontramos en la resolución real de problemas complejos, por lo que conviene conocerlos con detalle. Al igual que los temporizadores los representábamos con un rectángulo que tenía entradas y salidas, también aquí podemos hacer lo mismo con los contadores: Znº “BitIncrementar”
ZV
“BitDecrementar”
ZR
“BitDeCarga” “NumeroACargar” “BitDeReset”
Q
S ZW
“BitReceptor”
DUAL
“WordDestino” (Binario)
DEZ
“WordDestino” (BCD)
R
Aquí el sentido de las flechas indica si la información debe proporcionarla el programador (flechas entrantes) o si es el contador el que nos proporciona información (flechas salientes). Si resumimos en una tabla los valores que hemos puesto en el dibujo, tendremos: “Znº” “BitIncrementar” “BitDecrementar” “BitDeCarga” “NúmeroACargar” “BitDeReset” “BitReceptor” “WordDestino”(Binario) “WordDestino”(BCD)
Es el nombre del contador Es el Bit que incrementa el contador Es el Bit que decrementa el contador Es el Bit que carga en el contador “NúmeroACargar” Es el número que deseamos cargar en el contador Es el Bit que pone a cero la cantidad que aún quede en el contador Es el Bit que recibe el estado “1” o “0” del contador. Es el Word que asignamos para recoger en formato Binario el número que aún quede en el contador. Es el Word que asignamos para recoger en formato BCD el número que aún quede en el contador.
104
Temporizadores y contadores
Capítulo 9
Los contadores se representan con la letra “Z” mayúscula seguida de un número que puede estar comprendido entre “0” y el número máximo que se indica en la tabla del apartado 5.2. También aquí aconsejamos al lector que use únicamente una sola vez cada contador, dentro de la política general de NO USAR LOS RECURSOS MÁS DE UNA VEZ. El uso y funcionamiento de los contadores es simple e intuitivo. Se trata (o nos las podemos imaginar) de cajas que sirven para contar cantidades enteras. Una vez definido el contador que vamos a emplear, debemos cargarlo inicialmente con un número que será el número que posteriormente incrementaremos o decrementaremos. Para hacer esto, además de introducir el número a cargar por la entrada ZW, deberemos hacer entrar por la entrada S el flanco positivo del “BitDeCarga”. Si no cargamos el contador con ninguna cantidad inicial, el contador parte con la cantidad “0”, por lo que el contador inicialmente únicamente admitirá ordenes de incrementar, ya que no es posible decrementar un contador por debajo de “0”. Una vez cargado un número inicial, el contador se incrementará una unidad, cada vez que entre un flanco positivo por la entrada ZV del “BitIncrementar”. Mientras el contador almacene un número que no sea “0”, la salida lógica Q del contador será “1”. Sin embargo, si por la entrada ZR entran flancos positivos del “BitDecrementar”, por cada flanco positivo que entre, disminuirá en una unidad el contador, y cuando su valor llegue a “0”, por la salida Q obtendremos el valor “0”. Si nos interesa poner a “0” el valor de un contador, deberemos introducir un flanco positivo por la entrada R, y esto hará que el contador se ponga a “0”. La salida Q ya hemos dicho que permanece a “1” si el valor del contador no es “0”, y pasará a ser “0” si el contenido del contador es también “0”. En cuanto a la salida DUAL, por aquí el contador nos suministra una Word con el valor Binario del valor actual que tenga el contador, mientras que por la salida DEZ nos suministra la misma información, pero en formato BCD. Lo expresado anteriormente de forma gráfica, podemos expresarlo también en lenguaje AWL de la siguiente manera: U ZV
“BitIncrementar” “Znº”
Bit que incrementa el contador Modo de funcionamiento y nombre del contador
U ZR
“BitDecrementar” “Znº”
Bit que decrementa el contador
U L S
“BitDeCarga” C#NNN “Znº”
Bit que carga el número NNN en el contador Carga del número NNN Orden de cargar el número NNN en contador
U R
“BitDeReset” “Znº”
El “BitDeReset” pone a “0” el contador. Orden de poner a “0” el contador de nombre “Znº”.
L T
“Znº” “WordDestino” (Binario)
Carga el valor residual del contador en formato binario y lo transfiere a “WordDestino”
LC T
“Znº” “WordDestino”
Carga el valor residual del contador en formato BCD y lo transfiere a “WordDestino”.
U =
“Znº” “BitReceptor”
El valor lógico del contador, se lo asigna a “BirReceptor”.
Modo de funcionamiento y nombre del contador
105
Temporizadores y contadores
Capítulo 9
Ejercicio 3 Se tiene una cinta transportadora por donde circulan pequeñas piezas metálicas, que van cayendo a una caja que está esperando en la parte inferior. La cinta la gobierna un motor trifásico. Una barrera fotoeléctrica permite contar las piezas que van cayendo a la caja. Una vez en la caja han caído diez (10) piezas, la cinta se para. En ese momento debe encenderse una lámpara piloto anunciando que la caja está llena. Cuando esto ocurre, un empleado/a retira la caja llena y coloca otra vacía manualmente, tras esto oprime un pulsador BE y el proceso vuelve a empezar.
Barrera fotoeléctrica
Pulsador BE
Caja llena
Tabla de entradas/salidas: Entradas E124.0 Pulsador BE E124.1 Barrera fotoeléctrica
Salidas A124.0 Hacia contactor de motor trifásico A124.1 Hacia lámpara “Caja llena”
106
Temporizadores y contadores
Capítulo 9
G1: Poner contador a 10
0
¿Pulsador BE?
1
Conectar motor Apagar lámpara Decrementar contador cada vez que pase pieza
¿Han caído 10 piezas? Apagar motor Encender lámpara
2 =1
0
G2:
2 M0.0 Z0= 10
0
E124.0=1 M0.1 1 C
A124.0=1 A124.1=0
Impulso procedente de barrera fotoeléctrica Z0=Z0-1
Z0=0 M0.2
A124.0=0 A124.1=1
2 =1
0
Empezaremos por explicar el funcionamiento del Grafcet G1. 107
Temporizadores y contadores
Capítulo 9
El proceso está a la espera de que alguien pulse el botón BE. Mientras tanto, el proceso permanece en la etapa “0”. En esta etapa, la tarea a realizar consiste en cargar un contador con el valor diez (10). Si alguien pulsa BE, el proceso pasa a la etapa “1”, donde las tareas a realizar son: Poner en marcha el motor de la cinta, apagar la lámpara que indica que la caja está llena y decrementar el contador cada vez que la barrera fotoeléctrica detecte que ha caído una pieza en la caja. En la etapa “1” se debe permanecer, hasta que se hayan contado diez (10) piezas. Una vez que se hayan contado diez (10) piezas, el proceso pasa a la etapa “2” donde se da la orden de parar la cinta transportadora y de encender la lámpara que indica que la caja está llena, tras lo que, sin esperar nada más, ya que la transición siempre es cierta, pasa nuevamente a la etapa “0”, donde el ciclo vuelve a empezar. Una vez entendido el funcionamiento general del proceso, observamos como hay algunos conceptos nuevos que no habíamos visto hasta ahora. Por ejemplo, en la etapa “1” de G2, hemos puesto tres (3) tareas a realizar en esta etapa. Las dos (2) primeras ya las conocemos, pues se trata simplemente de poner las salidas a “1” o a “0” según convenga, pero la tercera tarea dice que debemos decrementar el contador cada vez que la barrera fotoeléctrica detecte que ha caído una pieza en la caja. Esto es, no se trata de decrementar el contador simplemente porque estemos en la etapa “1”, sino que además de estar en la etapa “1” ponemos como condición que la barrera fotoeléctrica detecte que cae pieza. Esta idea de condicionar una tarea a una circunstancia (a un evento), en Grafcet se representa escribiendo la letra “C” mayúscula en el rectángulo que describe la tarea a realizar, y además por la parte superior del rectángulo, por encima de un trazo vertical, se pone el evento o circunstancia que condiciona la tarea. Observamos también como la transición de la etapa “2” siempre es cierta, y esto se representa con el símbolo “=1”. Sólo nos queda ahora, escribir las operaciones a realizar en lenguaje AWL, tomando como referencia el Grafcet G2 anterior:
Etapa 0
U L S
M0.0 C#10 Z0
//Si M0.0 es “1”, //cargar el número diez (10) //y depositarlo en Z0.
U U R S
M0.0 E124.0 M0.0 M0.1
//Si M0.0 es “1”, //y E124.0 es “1” (pulsador BE), //anular etapa actual “0” //y activar etapa “1”.
108
Temporizadores y contadores
Etapa 1
Etapa 2
Capítulo 9
U S R
M0.1 A124.0 A124.1
//Si M0.1 es “1”, //poner en marcha motor cinta //y apagar lámpara de caja llena.
U U ZR
M0.1 E124.1 Z0
//Si M0.1 es “1”, //y ha caído una pieza en la caja //decrementar Z0.
U UN R S
M0.1 Z0 M0.1 M0.2
//Si M0.1 es “1”, //y Z0 está a “0”, //anular etapa actual “1” //y activar la siguiente “2”.
U SPBN
M0.2 _002
//Si M0.2 es “1”, //ejecutar las operaciones siguientes:
A124.1 A124.0
//encender lámpara, //parar cinta,
M0.2 M0.0
//anular la etapa actual “2” // y pasar a la etapa “0”.
S R SET R S _002: NOP 0
Obsérvese como las etapas “0” y “1” se han escrito en formato abierto, por cuanto estamos trabajando con contadores, que deben tratarse en este formato. En cambio la etapa “2” que no contiene ni temporizadores ni contadores, la hemos escrito en formato cerrado. Nos falta ahora OB100: SET S M0.0 R M0.1 R M0.2 A la vista de este ejemplo y de otros anteriores que ya hemos visto, quizás el lector se pregunte si no seria posible hacer uso de un único formato (cerrado o abierto) para traducir todas las etapas de Grafcet a lenguaje AWL. Por la misma naturaleza de las operaciones de STEP-7, la respuesta es que esto NO es posible.
Ejercicio 4 Tenemos una caja metálica que funciona como una hucha, y que está dotada de los mecanismos que se indican en el dibujo:
Pulsador BE
109
Temporizadores y contadores
Capítulo 9
Un mecanismo de entrada y otro de salida, permiten por una parte introducir o extraer monedas y por otra parte informan al autómata que se han introducido o extraído monedas. Se dispone de un pulsador BE que al ser pulsado inicialmente, carga en la hucha (y de forma transparente para este caso) diez (10) monedas de 1 . Se desea diseñar un programa que ponga a “1” todas las salidas del Byte AB124, cuando en el interior de la hucha no haya ninguna moneda. Tabla de entradas/salidas: Entradas E124.0 Pulsador BE E124.1 Entra moneda E124.2 Sale moneda
Salidas AB124 No hay monedas
G1: Poner contador a 10
0
¿Botón empezar?
1
Apagar salidas de AB124
¿Ha salido 1 euro?
¿Ha entrado 1 euro? Incrementar contador
2
3
=1
1
Decrementar contador
¿Hay monedas?
¿No hay monedas? Encender salidas de AB124
4
1
=1 0
110
Temporizadores y contadores
G2:
Capítulo 9
4 M0.0 0
2,3
Z0=10
E124.0=1 M0.1 1
AB124=0
E124.1=1
M0.2
Z0=Z0+1
2
3
=1
1
E124.2=1
M0.3
Z0=Z0-1
Z0>0 1
Z0=0 AB124=”1”
4
=1 0
Prácticamente todo cuanto aparece en este Grafcet ya nos es familiar por haberlo visto en otros anteriores, así pues pasamos a comentar directamente el funcionamiento del mismo. Inicialmente el proceso se encuentra en la etapa “0”, donde la única tarea que tiene que hacer en esta etapa es cargar un contador con el número diez (10). Si alguien pulsa el botón BE, entonces el proceso pasa a la etapa “1”, donde la tarea encomendada es poner a “0” todas las salidas del Byte AB124. En esta etapa el proceso se queda esperando a que alguien introduzca o extraiga una moneda. Si por ejemplo se introduce una moneda, el proceso pasa a la etapa “2” donde la tarea consiste en incrementar el contador, y una vez hecho esto y sin más comprobaciones (ya que la transición en la etapa “2” siempre es cierta) pasa automáticamente a la etapa “1” donde vuelve a quedar a la espera. Si por el contrario se ha extraído una moneda, entonces el proceso pasa a la etapa “3” donde la tarea encomendada es decrementar el contador en una unidad. Una vez hecho esto, puede ocurrir que aún queden monedas en la hucha o bien que no quede ninguna moneda. En el primer caso, el proceso volverá a la etapa “1” quedando a la espera nuevamente, y en el segundo caso de que no quedasen más monedas, entonces el proceso entraría en la etapa “4” donde la tarea consiste en poner a “1” todas las salidas del Byte AB124, tras lo que, ya que la transición de la etapa “4” siempre es cierta, el proceso volvería a la etapa “0” y quedaría nuevamente a la espera.
111
Temporizadores y contadores
Capítulo 9
Nos queda ahora traducir a lenguaje AWL todo lo que está representado en G2 y que escribiremos directamente en OB1: U L S
M0.0 C#10 Z0
//Si M0.0 es “1”, //cargar el número diez (10) //y depositarlo en Z0.
U U R S
M0.0 E124.0 M0.0 M0.1
//Si M0.0 es “1”, //y E124.0 es “1” (pulsador BE), //anular etapa actual “0” //y activar etapa “1”.
U SPBN R R R R R R R R U R S U R S _001: NOP 0
M0.1 _001 A124.0 A124.1 A124.2 A124.3 A124.4 A124.5 A124.6 A124.7 E124.1 M0.1 M0.2 E124.2 M0.1 M0.3
//Si M0.1 es “1”, //realizar las siguientes acciones: //hacer A124.0=0 //hacer A124.1=0 //hacer A124.2=0 //hacer A124.3=0 //hacer A124.4=0 //hacer A124.5=0 //hacer A124.6=0 //hacer A124.7=0 //Si E124.1=1 (ha entrado 1 euro) //anular etapa actual “1” //y activar la etapa “2”. //Si E124.2=1 (se ha extraído 1 euro) //anular etapa actual “1” y //activar la etapa “3”.
U ZV
M0.2 Z0
//Si M0.2=1, //incrementar el contador Z0.
U R S
M0.2 M0.2 M0.1
//Si M0.2=1, //anular etapa actual “2”, //y activar la etapa “1”.
U ZR
M0.3 Z0
//Si M0.3=1, //decrementar Z0.
U U R S
M0.3 Z0 M0.3 M0.1
//Si M0.3=1, //y aun hay monedas (Z0>0), //anular la etapa actual “3” //y activar la etapa “1”.
U UN R S
M0.3 Z0 M0.3 M0.4
//Si M0.3=1, //y no quedan monedas (Z0=0), //anular etapa actual “3” //y activar etapa “4”.
Etapa 0
Etapa 1
Etapa 2
Etapa 3
112
Temporizadores y contadores
Etapa 4
U SPBN S S S S S S S S SET R S _004: NOP 0
Capítulo 9
M0.4 _004 A124.0 A124.1 A124.2 A124.3 A124.4 A124.5 A124.6 A124.7
//Si M0.4=1, //realizar las siguientes acciones: //hacer A124.0=1 //hacer A124.1=1 //hacer A124.2=1 //hacer A124.3=1 //hacer A124.4=1 //hacer A124.5=1 //hacer A124.6=1 //hacer A124.7=1
M0.4 M0.0
//anular etapa actual “4” //y activar etapa “0”.
En cuanto a OB100, no debemos olvidar poner también lo siguiente: SET S R R R
M0.0 M0.1 M0.2 M0.3
Con objeto de que quede activa únicamente la etapa “0” y todas las demás queden desactivadas cuando comience a ejecutarse el programa principal de OB1. NOTA: Al lector que ya tenga experiencia en programación de autómatas, puede parecerle extraño el empleo reiterativo de la operación “S” para poner a “1” ocho (8) Bits, cuando hay operaciones más simples que hacen lo mismo. Efectivamente esto es así, y si aquí no se ha hecho uso de estas operaciones, es por mantener un orden de aprendizaje y no distraer al lector en operaciones nuevas que de momento no son importantes. Así, el empleo de la operación SET en las etapas “2” y “4” aquí no es imprescindible hacerlo, pero se ha hecho por mantener el mismo esquema de programación en todas las etapas que tienen transiciones siempre ciertas.
113
Operaciones FP y FN
Capítulo 10
CAPÍTULO 10
Índice
Operaciones FP y FN 10.1
Operación FP
La operación “FP” detecta el flanco de subida de un BitDeEntrada. Para que funcione, hay que prestarle a esta instrucción un BitDeTrabajo. El resultado se refleja en RLO, que se hace “1” durante el scan actual. BitDeEntrada
RLO
Es “1” durante el scan actual La operación FP se escribe así: U FP
“BitDeEntrada” “BitDeTrabajo”
(1) (2) (3)
La líneas (1) y (2) testean constantemente si BitDeTrabajo pasa de “0” a “1”. Cuando esto ocurre, en la línea (3) y como resultado de las líneas (1) y (2), el Bit RLO valdrá “1” durante todo el scan actual. Posteriormente, en el siguiente scan, el Bit RLO caerá a “0”. Es importante entender esta mecánica de funcionamiento, y puesto que el Bit RLO no está presente en el programa de una manera explicita, deberemos tenerlo en cuenta mentalmente. 10.2
Operación FN
La operación FN detecta el flanco de bajada de un BitDeEntrada, haciendo que RLO permanezca a “1” durante el scan actual. BitDeEntrada RLO
La operación FN se escribe así: U FN
“BitDeEntrada” “BitDeTrabajo”
115
(1) (2) (3)
Operaciones FP y FN
Capítulo 10
Al igual que con FP, aquí en la línea (3) el Bit RLO permanecerá a “1” durante el scan actual, y ya que esto no se refleja explícitamente en el programa, deberemos tenerlo en cuenta mentalmente. Ejemplo: U FN S
“BitDeEntrada” “BitDeTrabajo” A124.0
(1) (2) (3)
Aquí la salida A124.0 pasará a ser “1” permanentemente, cuando BitDeEntrada pase de “1” a “0”. Esto se debe a que al estar haciendo uso de la operación FN, el Bit RLO valdrá “1” justo antes de ejecutarse la línea (3), y justo en el instante que BitDeEntrada pase de “1” a “0”. Ahora bien, ya que la operación “S” que está en la línea (3) se ejecuta únicamente si RLO vale “1”, en el instante en que RLO vale “1” coincidiendo con el flanco negativo de BitDeEntrada, en ese instante se ejecutará la línea (3) y A124.0 se pondrá a “1” permanentemente. BitDeEntrada RLO A124.0
10.3
Formato neutro
Las instrucciones FP y FN no pueden ejecutarse ni según el formato cerrado ni según el formato abierto. Que no puedan ejecutarse según el formato cerrado parece normal, ya que estas instrucciones necesitan refrescarse en cada ciclo de scan del autómata, y en un formato cerrado esto no es posible, ya que las operaciones que están comprendidas entre la operación “SPBN ” y , una vez que el BitDeEtapa ha pasado a ser “0”, quedan aisladas y no se ejecutan. Sin embargo no es tan evidente que tampoco puedan ejecutarse en un formato abierto y para ello lo mejor que podemos hacer es poner un ejemplo, para entender las razones. Tendremos: “BitDeEntrada” = E124.0 M0.0 PC
N =1
116
BitReceptor = M10.1
Operaciones FP y FN
Capítulo 10
Donde las letras “PC” (pulso condicionado) significan en este caso que “BitReceptor = M10.1” tendrá valor unitario durante un breve espacio de tiempo (forma de impulso), siempre y cuando “BitDeEntrada = E124.0” sea “1” en el transcurso de la etapa N. Las instrucciones AWL serán: U U FP =
M0.0 E124.0 M10.0 M10.1
Obsérvese que nuestra intención es que estando previamente el Bit M0.0 a “1”, aparezca entonces el flanco positivo en E124.0. Y efectivamente, si las cosas ocurren así, las instrucciones anteriores funcionan perfectamente y sin ningún problema. Ahora bien, pudiera ocurrir que fuera al revés, esto es, que estuviera previamente E124.0 a “1” y que entonces el Bit M0.0 pasase de “0” a “1”. Ocurriría entonces, que las instrucciones anteriores detectarían un flanco positivo, pero no sería el de E124.0 que es lo que deseamos, sino que sería el flanco positivo de M0.0. Así pues, ya que lo anterior es incierto (y por tanto peligroso), tenemos que reconocer que ni el formato cerrado ni el abierto nos permiten tratar adecuadamente estas instrucciones. Para resolver este dilema, emplearemos un nuevo tipo de etapa Grafcet que no haga uso del BitDeEtapa, de la siguiente manera: “BitDeEntrada” = E124.0 PC
N
BitReceptor = M10.1
=1
Las operaciones que asociaremos a esta etapa según lo dicho, serán: U FP =
E124.0 M10.0 M10.1
Estas etapas que no dependen de ningún BitDeEtapa las llamaremos etapas neutras, y su traducción en lenguaje AWL, formato neutro, para diferenciarlas del formato cerrado y formato abierto que ya hemos visto. Por no depender de ningún BitDeEtapa, se ejecutarán scan tras scan del autómata, y aunque estarán dentro de nuestro Grafcet, no se regirán por la mecánica que imponen los BitDeEtapa. Estas etapas las colocaremos preferentemente al principio de nuestro programa. Bit independiente Llamaremos Bit independiente al Bit que habiendo sido generado por otro Bit, podemos ponerlo a “0” o a “1” de manera permanente. U FP S
E 124.0 M0.0 M0.1 este es un Bit independiente
117
Operaciones FP y FN
Capítulo 10
Ejemplo: Se desea hacer A124.0 = 1 si E124.0 pasa de “0” a “1”, y A124.0 = 0 si E124.1 pasa de “0” a “1”. Entradas
Salidas
E124.0 Poner a “1” A124.0 E124.1 Poner a “0” A124.0
A124.0
G2:
1,2
E124.0 PC
10
M10.1
=1 E124.1 11
PC =1
M0.0 0
Esperar
E124.0↑ ≡ M10.1=1
M0.1
E124.1↑ ≡ M10.3=1
M0.2
A124.0=1
1
M10.3
A124.0=0
2
=1
=1
0
0
118
Operaciones FP y FN
Capítulo 10
Y las operaciones en lenguaje AWL serán: OB1: U FP =
E124.0 M10.0 M10.1
//Si E124.0 se hace “1”
U FP =
E124.1 M10.2 M10.3
//Si E124.1 se hace “1”
Etapa 0
U SPBN U R S U R S _000: NOP 0
M0.0 _000 M10.1 M0.0 M0.1 M10.3 M0.0 M0.2
//Si M0.0=1, //realizar las siguientes operaciones: //Si M10.1=1 //hacer M0.0=0 //y M0.1=1. //Si M10.3=1 //hacer M0.0=0 //y M0.2=1
Etapa 1
U SPBN S R S _001: NOP 0
M0.1 _001 A124.0 M0.1 M0.0
//Si M0.1=1, //realizar las siguientes operaciones: //hacer A124.0=1 //y M0.1=0 //y M0.0=1.
Etapa 2
U SPBN R R S _002: NOP 0
M0.2 _002 A124.0 M0.2 M0.0
//Si M0.2=1, //realizar las siguientes acciones: //hacer A124.0=0 //y M0.2=0 //y M0.0=1.
M0.0 M0.1 M0.2
//Hacer RLO=1 //Si RLO=1, hacer M0.0=1 //y M0.1=0 //y M0.2=0.
Etapa 10
Etapa 11
//M10.1 será “1” durante un scan
//M10.3 será “1” durante un scan
OB100: SET S R R
119
Operaciones de carga, transferencia y comparación
Capítulo 11
CAPÍTULO 11
Índice
Operaciones de carga, transferencia y comparación 11.1 Números enteros de dieciséis(16) Bits Por definición, un número entero de dieciséis(16) Bits, es aquel que en binario ocupa un registro de dieciséis (16) Bits. Así pues, y según lo anterior, el número de dieciséis (16) Bits más grande será el siguiente: 1111111111111111 Que corresponde al número en base diez (10): 65.535 Y el número más pequeño de dieciséis(16) Bits será lógicamente: 0 Por tanto, el mayor número entero es el “65.536” y el menor número entero es el “0”. Si queremos trabajar con números enteros de dieciséis(16) Bits, pero teniendo en cuenta su signo, entonces se reserva el Bit número quince (15) como Bit de signo, de tal forma que si este Bit es “0” se entiende que se trata de un entero positivo, y si es “1” se entiende que se trata de un entero negativo. Por ejemplo, según este convenio el número binario: 0111111111111111 Representa a número entero positivo “+32767”, y el número: 1000000000000000 Representa al número entero negativo “-32768”, siendo respectivamente el mayor y menor número entero de dieciséis (16) Bits con signo que podemos manejar (NOTA: la representación del número -32768 anterior, se ha hecho en complemento a dos (2), que se obtiene de conseguir primeramente el complemento a uno del número binario y sumarle después uno (1)). Obsérvese que si queremos trabajar con números enteros con signo que ocupen dieciséis (16) Bits, la capacidad de representar números enteros se divide prácticamente por dos (2) respecto al método que no tiene en cuenta el signo, por lo que el programador debe tener en cuenta esta circunstancia a la hora de trabajar con números enteros que ocupen dieciséis (16) Bits, pues según le demos valor de signo al Bit número quince (15), el número cambia completamente. 11.2 Números enteros de treinta y dos (32) Bits Con los números enteros de treinta y dos (32) Bits, podemos hacer lo mismo que antes con los de dieciséis (16), esto es, considerar que todos los Bits tienen valor numérico o bien darle al último Bit de la izquierda (Bit treinta y uno (31)) el valor de signo, con el mismo convenio de antes: Si es “0” diremos que es positivo y si es “1” diremos que es negativo.
121
Operaciones de carga, transferencia y comparación
Capítulo 11
Así pues, si tomamos los treinta y dos (32) Bits con valor numérico, el mayor número entero posible en este formato será: 11111111111111111111111111111111 Que corresponde al número decimal: 4.294.967.295 Que es el mayor número entero sin signo que podemos representar con treinta y dos (32) Bits. También aquí el menor número que podemos representar será lógicamente el: 0 Si al igual que antes reservamos el Bit treinta y uno (31), el que está más a la izquierda, como Bit de signo, entonces el mayor número entero con signo que podemos representar por este procedimiento es: 01111111111111111111111111111111 Que corresponde al número decimal: +2.147.483.647 Y el número negativo más pequeño será: 10000000000000000000000000000000 Que corresponde al número decimal: -2.147.483.648 (NOTA: Nuevamente esta representación del número entero con signo de treinta y dos (32) Bits, corresponde a la representación en complemento a dos (2) del número binario original, que se obtiene primeramente consiguiendo el complemento a uno (1) del número binario original, donde simplemente se cambian los unos por ceros y viceversa, y después se le suma uno (1)). 11.3 Números en coma flotante de treinta y dos (32) Bits STEP-7 emplea treinta y dos (32) Bits para trabajar con números en coma flotante, según el siguiente reparto (norma ANSI/IEEE Standard 754-1985): Veintitrés (23) Bits para la mantisa = m Ocho (8) Bits para el exponente = e Un (1) Bit par el signo de la mantisa = S La fórmula que se emplea para formar el número, conocidos los valores anteriores, es: Número = (1,m) ∗ 2 elevado (e-Bias) Siendo:
1 < e < 254 Bias = 127
122
Operaciones de carga, transferencia y comparación
Capítulo 11
Según lo anterior, el número más bajo posible expresado en coma flotante será: Número en coma flotante más pequeño = (1,0) ∗ 2 elevado a (1-127) = 1,0 ∗ 2 elevado a (-126) = 1,175 495E-38 Y el número en coma flotante más grande será 2-2 elevado a (-23) ∗ 2 elevado a (254-127) = 22 elevado a (-23) ∗ 2 elevado a (+127) = 3,402 823E+38 Como resumen, diremos que según la norma ya mencionada ANSI/IEEE Standard 754-1985, son números validos negativos los comprendidos entre: -3,402823E+38
hasta
-1,175495E-38
Mientras que para números positivos son válidos los comprendidos entre: +1,175495E-38
hasta
+3,402823E+38
Incluyendo el número “0”. Como el lector ha podido apreciar, la definición de lo que se entiende por número en coma flotante en STEP-7, es compleja y difícil. Ahora bien, como regla práctica y como resumen práctico de lo dicho hasta aquí sobre números en coma flotante, sólo debe recordar algo muy sencillo, y es que a efectos de programación de autómatas SIEMENS, un número en coma flotante es aquel que simplemente tiene un punto decimal de separación entre la parte entera y sus decimales. Ejemplos: +3.7 -22.056 +3.14159264 etc. 11.4 Resumen práctico en cuanto a números enteros y en coma flotante De lo dicho hasta aquí el lector puede sacar en conclusión que todo esto de los números enteros y en coma flotante es realmente muy complejo y difícil de manejar. Realmente en la práctica todo esto es mucho más simple de lo que parece, sólo ha de recordar la diferencia entre números enteros con signo y sin signo (recuerde, el Bit de la izquierda), si son enteros de dieciséis (16) Bits o de treinta y dos (32). En cuanto a los números en coma flotante, las cosas aún son más sencillas, si ha de trabajar con números que tengan parte decimal (números con “coma” que en STEP-7 son números con “punto”), entonces no hay duda que debe trabajar en coma flotante. ¡Así de simple! 11.5 Operaciones L y T En el Capítulo 5 vimos que los acumuladores ACU1 y ACU2 son registros de treinta y dos (32) Bits y que estos a su vez pueden subdividirse en otros registros más pequeños.
123
Operaciones de carga, transferencia y comparación
Capítulo 11
Las operaciones L y T tienen precisamente mucho que ver con estos dos (2) acumuladores, en la forma que se explica a continuación. Imaginemos que queremos depositar en la posición de memoria MW10 el número 1324. Para realizar esta operación, dado que STEP-7 no dispone de ninguna operación en lenguaje AWL que permita depositar directamente el número 1324 en la palabra MW10, deberemos realizar esta operación en dos fases: 1º
Cargar el acumulador ACU1 con el número 1324
2º
Transferir una copia del contenido del acumulador ACU1 a la Word MW10.
Esto mismo escrito con operaciones AWL seria así: L T
1324 MW10
Donde aquí la operación “L ” permite cargar constantes enteras con signo que como mucho ocupen dieciséis (16) Bits, comprendidos entre +32767 y – 32768, ambos inclusive. La operación “T” (transferir), transfiere el contenido (realmente una copia del contenido) de ACU1 a la posición de memoria MW10. ¿Y si quisiéramos depositar en el Double Word MD14 un número entero mayor que +32767 o menor que -32768, como lo haríamos? Veamos la siguiente operación: L T
L#+850000 MD14
Observamos que la operación que carga el acumulador ACU1 ahora tiene la forma de: L
L#
Donde puede ser cualquier número entero con signo comprendido entre: +2.147.483.647
y
-2.147.483.648
ambos inclusive. Si se tienen que manipular números en coma flotante (números decimales), entonces el formato es el siguiente: L T
Donde es cualquier número en coma flotante comprendido entre: +1,175495E-38
hasta
+3,402823E+38
-1,175495E-38
hasta
-3,402823E+38
124
Operaciones de carga, transferencia y comparación
Capítulo 11
Incluyendo el número cero (0). Obsérvese que el registro al que transferimos el número en coma flotante, ha de ser de treinta y dos (32) Bits, para que la operación sea coherente, ya que un número en coma flotante, ocupa también treinta y dos (32) Bits. Además de permitirnos trabajar con números enteros con signo de dieciséis (16) Bits, treinta y dos (32) Bits, y números en coma flotante con signo que ocupan treinta y dos (32) Bits, STEP-7 nos permite trabajar con constantes enteras sin signo de ocho (8), dieciséis (16) y treinta y dos (32) Bits escritos en base hexadecimal, según las siguientes plantillas: L L L
B#16# W#16# DW#16#
Siendo cualquier número entero sin signo hexadecimal de dos (2) cifras comprendido entre 0 y FF. Así, siendo cualquier número entero sin signo hexadecimal de cuatro (4) cifras comprendido entre 0 y FFFF. Y también, siendo cualquier número entero sin signo hexadecimal de ocho (8) cifras comprendido entre 0 y FFFFFFFF. Pongamos como ejemplos los siguientes: L T
B#16#EF MB2
L T
W#16#FAFB MW30
L T
DW#16#A23FCE00 MD40
En el primer ejemplo, cargamos ACU1 con el número hexadecimal “EF” y después lo transferimos al Byte MB2. En el segundo ejemplo, cargamos ACU1 con el número hexadecimal “FAFB” y después lo transferimos al Word MW30, y finalmente en el tercer ejemplo, cargamos el acumulador ACU1 con el número hexadecimal “A23FCE00” y después lo transferimos a la Double Word MD40. Obsérvese como en todos los casos hay una coherencia entre el tamaño del número que se carga en ACU1 y el tamaño del registro al que transferimos el número. Por ejemplo, no tendría sentido escribir algo así: L T
W#16#FAFB MB30
Ya que estamos intentado meter en un registro de ocho (8) Bits (un Byte) el número hexadecimal “FAFB”, que en Binario ocupa dieciséis (16) Bits. Continuando con este tema de manejar números, citemos también otros dos (2) métodos que tiene STEP-7 con los que podemos cargar el ACU1 (y después transferir) números escritos en Binario que tengan longitudes de dieciséis (16) o treinta y dos (32) Bits, según las siguientes plantillas: 125
Operaciones de carga, transferencia y comparación
L L
Capítulo 11
2# 2#
Donde y son respectivamente números binarios cualesquiera que tengan un máximo de dieciséis (16) y treinta y dos (32) Bits respectivamente. Por ejemplo: L T
2#1111010100011100 AW124
L 2#11110000111100001111000011110000 T MD12 Observe el lector como nuevamente mantenemos siempre una coherencia entre el tamaño del número que queremos transferir y el tamaño del registro donde queremos depositar el número. Hasta aquí hemos visto algunas de las formas más usuales de cargar y transferir constantes que se emplean en STEP-7, pero en ocasiones lo que deseamos no es depositar una constante en una posición de memoria, sino depositar en una posición de memoria el contenido de otra posición de memoria. Por ejemplo, ¿cómo podríamos transferir el contenido de MB14 a la posición de memoria MB20? La solución es la siguiente: L T
MB14 MB20
Aquí cargamos el contenido de MB14 en ACU1 y después transferimos el contenido de ACU1 a MB20, con lo que tenemos lo que pretendíamos, que era llevar MB14 a MB20. La misma técnica podemos emplearla para copiar o mover información residente en memoria en registros de dieciséis (16) o treinta y dos (32) Bits. Veamos algunos ejemplos: L T
MW10 MW2
L T
MD40 MD20
Hasta aquí hemos hecho uso exclusivamente del acumulador ACU1, pero veamos ahora como trabaja el acumulador ACU2, con el siguiente ejemplo: L L
MW10 W#16#ABCD
(1) (2)
En la operación (1), cargamos ACU1 con el contenido de la Word MW10, y en la operación (2) volvemos a cargar ACU1 con la constante “ABCD”. A simple vista parece que estas operaciones son contradictorias, pues primeramente cargamos ACU1 con la Word MW10 y después volvemos a cargar ACU1 con la constante “ABCD”, por lo que parece que al realizar la segunda carga del acumulador, se destruye o borra lo que habíamos cargado en la primera operación de carga.
126
Operaciones de carga, transferencia y comparación
Capítulo 11
Lo que realmente ocurre es que en la primera operación, el ACU1 se carga efectivamente con la Word MW10, pero al realizar la segunda operación de carga, primeramente el contenido del ACU1 pasa al acumulador ACU2, y después el ACU1 realiza la carga de la constante “ABCD”, de tal forma que la situación al final de la operación (2), es la siguiente: Contenido de ACU1 = Contenido de MW10 Contenido de ACU2 = Constante hexadecimal “ABCD” ¿Qué pasaría si encadenamos no dos (2), sino tres (3) operaciones “L”? Por ejemplo: L L L
MW10 W#16#ABCD MB14
(1) (2) (3)
En la operación (1), el ACU1 se cargaría con el contenido de MW10, después en la operación (2) primeramente el contenido de ACU1 (MW10) pasaría a ACU2 y después ACU1 se cargaría con la constante “ABCD”, y finalmente en la operación (3) primeramente el contenido de ACU1 (o sea, la constante “ABCD”) pasaría a ACU2 y después ACU1 se cargaría con el contenido del Byte MB14, con lo que el resultado final después de la operación (3) sería el siguiente: Contenido de ACU1 = Contenido de MB14 Contenido de ACU2 = Constante hexadecimal “ABCD” Obsérvese que de la misma forma que ACU2 recoge el contenido de ACU1 en cada operación “L”, no hay ningún registro que recoja el contenido de ACU2, por lo que encadenar tres (3) o más operaciones “L” conduce a una pérdida de información. 11.6 Operaciones de comparación ==I, I, >I, =I y I =I I =
MW10 MW20 M3.0
(1) (2) (3) (4)
La operación (1) carga ACU1 con el contenido de MW10. La operación (2) carga ACU1 con el contenido de MW20, y MW10 que estaba en ACU1, pasa a ACU2. Finalmente en la operación (3) si ACU2 > ACU1, que es lo mismo que decir que el contenido de MW10 es mayor que el contenido de MW20, RLO se pondrá “1” (en caso contrario, RLO se pondrá a “0”) y en la operación (4) el valor de RLO se lo pasamos al Bit M3.0, con lo que del valor “1” ó “0” que tenga M3.0 deduciremos si MW10 es o no es mayor que MW20. 11.7
Operaciones de comparación ==D, D, >D, =D y D =D =D =
MD10 MD20 M3.0
(1) (2) (3) (4)
Después de realizar la operación (2), el ACU2 contiene MD10 y ACU1 contiene MD20, y en la operación (3) el RLO se pondrá a “1” si ACU2 es mayor o igual que ACU1, que es lo mismo que decir si MD10 es mayor o igual que MD20, y este valor de RLO en la operación (4) se lo pasamos al Bit M3.0, por lo que según M3.0 valga “1” o “0” deduciremos si MD10 es mayor o igual que MD20, o no lo es. 11.8 Operaciones de comparación ==R, R, >R, =R y R =R R =
MD10 1.162E+2
//Si el contenido de MD10 tomado como número en coma flotante //es mayor que la constante 1.162E+2 (o sea, 116.2), //hacer RLO=1, en caso contrario hacer RLO=0, y después //asignar el valor de RLO al Bit M1.0.
M1.0
Ejercicio 1 Diseñar un programa que ponga a “1” la salida A124.0 si EB124 es menor que EB125, que ponga a “1” la salida A124.1 si EB124 es igual que EB125 y que ponga a “1” A124.2 si EB124 es mayor que EB125. Empezaremos por pintar la tabla de entradas/salidas: Entradas
Salidas
EB124 EB125
A124.0 A124.1 A124.2
EB124EB125
El Grafcet de nivel 2 (G2) será: M0.0 Esperar
0
EB124EB125
M0.3
=1
=1
0
0
A124.0=0 A124.1=0 A124.2=1
3
0
La traducción a lenguaje AWL de G2 sería: En OB1: U SPBN L L I R S _000: NOP
M0.0 M0.3 0
//anular etapa actual “0” y activar la “3”.
U SPBN S R R R S _001: NOP
M0.1 _001 A124.0 A124.1 A124.2 M0.1 M0.0 0
//Si M0.1=1, //realizar las siguientes operaciones: //Hacer: A124.0=1 // A124.1=0 // A124.2=0 //Anular etapa actual “1” y //activar la siguiente “0”.
U SPBN R S R R S _002: NOP
M0.2 _002 A124.0 A124.1 A124.2 M0.2 M0.0 0
//Si M0.2=1, //realizar las siguientes operaciones: //Hacer: A124.0=0 // A124.1=1 // A124.2=0 //Anular etapa actual “2” y //activar la siguiente “0”.
U SPBN R R S R S _003: NOP
M0.3 _003 A124.0 A124.1 A124.2 M0.3 M0.0 0
//Si M0.3=1, //realizar las siguientes operaciones: //Hacer: A124.0=0 // A124.1=0 // A124.2=1 //Anular etapa actual “3” y //activar la siguiente “0”.
SET S R R R
M0.0 M0.1 M0.2 M0.3
Ejercicio 2 Diseñar un programa que ponga a “1” todas las salidas de AB124 si E124.0=1. En caso contrario, que se apaguen las salidas de AB124. Empezaremos por pintar la tabla de entradas/salidas: Entradas E124.0
Salidas A124.0 A124.1 A124.2 A124.3 A124.4 A124.5 A124.6 A124.7
130
Operaciones de carga, transferencia y comparación
Capítulo 11
El Grafcet G2 será: M0.0 Esperar
0
E124.0=1
M0.1
AB124 =1
1
E124.0=0
M0.2
AB124=0
2
=1
=1 0
0
Con el Grafcet G2 anterior podemos escribir ahora las operaciones AWL, que serán las siguientes: //Si M0.0=1, U M0.0 SPBN _000 //realizar las siguientes operaciones: U E124.0 //Si E124.0=1, R M0.0 //anular etapa actual “0” y S M0.1 //activar etapa siguiente “1”. UN E124.0 //Si E124.0=0, R M0.0 //Anular etapa actual “0” y S M0.2 //activar la siguiente “2”. _000: NOP 0
En OB100:
U SPBN L T R S _001: NOP
M0.1 _001 B#16#FF AB124 M0.1 M0.0 0
//Si M0.1=1, //realizar las siguientes operaciones: //Cargar ACU1 con “FF” //y traspasarlo a AB124 //Anular etapa “1” //y activar etapa “0”.
U SPBN L T R S _002: NOP
M0.2 _002 0 AB124 M0.2 M0.0 0
//Si M0.2=1, //realizar las siguientes operaciones: //Cargar ACU1 con “0” //y traspasarlo a AB124 //Anular etapa “2” //y activar etapa “0”.
SET S R R
M0.0 M0.1 M0.2
131
Operaciones aritméticas y trigonométricas
Capítulo 12
CAPÍTULO 12
Índice
Operaciones aritméticas y trigonométricas 12.1
Preámbulo
Antes de abordar los temas siguientes, donde se hace constantemente mención del PSW y de los Bits que lo componen, veamos primeramente este apartado que explica brevemente la forma de consultar el estado de estos Bits. En el apartado 5.4.3 decíamos que PSW es un registro de dieciséis (16) Bits y que se podía representar de la siguiente forma: 15
…..
9
8 RB
BIT 0 1 2 3 4 5 6 7 8 9 al 15
Ocupación /ER RLO STA OR OS OV A0 A1 RB Sin uso
7
6
5
4
3
2
1
0
A1
A0
OV
OS
OR
STA
RLO
/ER
Significado Bit de primera consulta* Bit de resultado lógico Bit de estado* Bit OR (=0)* Bit de desbordamiento memorizado Bit de desbordamiento Indicador de resultado Indicador de resultado Bit de resultado binario -
Las operaciones lógicas U, UN, O, ON, X, XN que ya hemos visto, nos permiten averiguar el estado de los Bits RB, A1, A0, OV y OS, con arreglo a la siguiente tabla: ==0 0 >0 =0 0 SUMA = -65536 65534 >= SUMA > 32767 -65535 0 65534 >= RESTA > 32767 -65535 0 COCIENTE = 32768 División por cero
A1 0 0 1 1 1
A0 0 1 0 0 1
OV 0 0 0 1 1
OS 1 1
Las zonas sombreadas representan operaciones no válidas(Bit OV=1). Ejemplo: L L /I T
MW12 EW10
//El contenido de MW12 lo dividimos por el //contenido de EW10 y el resultado de la división
MD14
//lo depositamos en MD14.
De tal forma que MW14 contiene el resto y MW16 contiene el cociente. El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.5
Operación *I
La operación *I multiplica el contenido de ACU2L por el de ACU1L y deposita el resultado en ACU1 como entero doble ocupando los treinta y dos (32) Bits. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = PRODUCTO = ACU2L * ACU1L Al realizar la multiplicación de ACU2L y ACU1L, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si
Bits afectados del PSW al realizar la operación *I → PRODUCTO = 0 -32768 = PRODUCTO > 0 PRODUCTO > 32768 PRODUCTO < -32768
135
A1 0 0 1 1 0
A0 0 1 0 0 1
OV 0 0 0 1 1
OS 1 1
Operaciones aritméticas y trigonométricas
Capítulo 12
Las zonas sombreadas representan operaciones no válidas(Bit OV=1). Ejemplo: L L *I T
MW12 EW10
//El contenido de MW12 lo multiplicamos por el //contenido de EW10 y el resultado de la operación
MD14
//lo depositamos en MD14.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.6
Operación +
La operación “+” suma una constante entera con signo de dieciséis (16) Bits o treinta y dos (32) Bits a ACU1L o ACU1 respectivamente y deposita el resultado en ACU1L o ACU1 respectivamente. De formar esquemática podríamos poner: ACU1L = ACU1L + ACU1 = ACU1 + Donde y pueden estar comprendidos entre: -32768 = +32767 -2.147.483.648 = +2.147.483.647 En esta operación no quedan afectados los Bits de PSW. Ejemplo: L L +I + T
MW12 EW10
//El contenido de MW12 lo sumamos con el //contenido de EW10 y al resultado de la operación
100 MW14
//le volvemos a sumar 100. Finalmente la suma total //la depositamos en MW14.
MD8 ED12
//El contenido de MD8 lo sumamos con el //contenido de ED12 y al resultado de la operación
L#-300 MD16
//le volvemos a sumar -300. Finalmente la suma total //la depositamos en MD16.
Ejemplo: L L +D + T 12.7
Operación +D
La operación +D suma el contenido de ACU2 con el de ACU1 y deposita el resultado en ACU1 como entero doble ocupando los treinta y dos (32) Bits. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = SUMA = ACU2 + ACU1 136
Operaciones aritméticas y trigonométricas
Capítulo 12
Al realizar la suma de ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si Si
Bits afectados del PSW al realizar la operación +D → SUMA = 0 SUMA -2.147.483.648 = > 0 SUMA = -4.294.967.296 SUMA 4.294.967.294 >= > 2.147.483.647 SUMA -4.294.967.295 0 RESTA 4.294.967.294 >= > 2.147.483.647 RESTA -4.294.967.295 0 DIVISIÓN = 2.147.483.648 DIVISIÓN POR CERO
A1 0 0 1 1 1
A0 0 1 0 0 1
OV 0 0 0 1 1
OS 1 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1). Ejemplo: L L /D T
MD12 ED16
//El contenido de MD12 lo dividimos por el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.10 Operación *D La operación *D multiplica el contenido de ACU2 por el contenido de ACU1 y deposita el resultado en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = PRODUCTO = ACU2 * ACU1 Al realizar la multiplicación de ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si
Bits afectados del PSW al realizar la operación *D → PRODUCTO = 0 -2.147.483.648 = PRODUCTO > 0 PRODUCTO > 2.147.483.647 PRODUCTO < -2.147.483.648
Las zonas sombreadas representan operaciones no válidas (Bit OV=1).
138
A1 0 0 1 1 0
A0 0 1 0 0 1
OV 0 0 0 1 1
OS 1 1
Operaciones aritméticas y trigonométricas
Capítulo 12
Ejemplo: L L *D T
MD12 ED16
//El contenido de MD12 lo multiplicamos por el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.11 Operación MOD La operación MOD divide el contenido de ACU2 por el contenido de ACU1 y deposita el resultado en ACU1. El resultado sólo contiene el resto de la división y no el cociente (el cociente se obtiene con la operación /D). De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = RESTO = ACU2 (MOD) ACU1 Al realizar la operación MOD entre ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla:
Si Si Si Si
Bits afectados del PSW al realizar la operación MOD → RESTO = 0 RESTO -2.147.483.648 = > 0 DIVISION POR CERO
A1 0 0 1 1
A0 0 1 0 1
OV 0 0 0 1
OS 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1). Ejemplo: L MD12 L ED16 MOD T MD20
//El contenido de MD12 lo dividimos por el //contenido de ED16 y el resultado de la operación //lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.12 Operación +R La operación +R suma el contenido de ACU2 y ACU1 como números en coma flotante y deposita el resultado en ACU1, también como número en coma flotante. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = SUMA = ACU2 + ACU1 Al realizar la operación +R entre ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla:
139
Operaciones aritméticas y trigonométricas
Si Si Si Si Si Si Si Si
Capítulo 12
Bits afectados del PSW al realizar la operación +R en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA SUMA > +3.402823E+38 +1.175494E-38 < SUMA < +3.402823E+38 +1.401298E-45 < SUMA < +1.175494E-38 SUMA = +0,-0 -1.175494E-38 < SUMA < -1.401298E-45 -3.402823E+38 < SUMA < -1.175494E-38 SUMA < -3.402823E+38
A1 1 1 1 0 0 0 0 0
A0 1 0 0 0 0 0 1 1
OV 1 1 0 1 0 1 0 1
OS 1 1 1 1 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L L +R T
MD12 ED16
//El contenido de MD12 lo sumamos con el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.13 Operación -R La operación -R resta el contenido de ACU2 y ACU1 como números en coma flotante y deposita el resultado en ACU1, también como número en coma flotante. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = RESTA = ACU2 - ACU1 Al realizar la operación -R entre ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si Si Si Si
Bits afectados del PSW al realizar la operación -R en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA RESTA > +3.402823E+38 +1.175494E-38 < RESTA < +3.402823E+38 +1.401298E-45 < RESTA < +1.175494E-38 RESTA = +0,-0 -1.175494E-38 < RESTA < -1.401298E-45 -3.402823E+38 < RESTA < -1.175494E-38 RESTA < -3.402823E+38
A1 1 1 1 0 0 0 0 0
A0 1 0 0 0 0 0 1 1
OV 1 1 0 1 0 1 0 1
OS 1 1 1 1 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L L -R T
MD12 ED16
//Al contenido de MD12 le restamos el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 140
Operaciones aritméticas y trigonométricas
Capítulo 12
12.14 Operación *R La operación *R multiplica el contenido de ACU2 y ACU1 como números en coma flotante y deposita el resultado en ACU1, también como número en coma flotante. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = PRODUCTO = ACU2 * ACU1 Al realizar la operación *R entre ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Bits afectados del PSW al realizar la operación *R en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA PRODUCTO > +3.402823E+38 +1.175494E-38 < PRODUCTO < +3.402823E+38 +1.401298E-45 < PRODUCTO < +1.175494E-38 PRODUCTO = +0,-0 -1.175494E-38 < PRODUCTO < -1.401298E-45 -3.402823E+38 < PRODUCTO < -1.175494E-38 PRODUCTO < -3.402823E+38
Si Si Si Si Si Si Si Si
A1 1 1 1 0 0 0 0 0
A0 1 0 0 0 0 0 1 1
OV 1 1 0 1 0 1 0 1
OS 1 1 1 1 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L L *R T
MD12 ED16
//El contenido de MD12 lo multiplicamos por el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.15 Operación /R La operación /R divide el contenido de ACU2 por el de ACU1 como números en coma flotante y deposita el resultado en ACU1, también como número en coma flotante. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = COCIENTE = ACU2 / ACU1 Al realizar la operación /R entre ACU2 y ACU1, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si Si Si Si
Bits afectados del PSW al realizar la operación /R en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA COCIENTE > +3.402823E+38 +1.175494E-38 < COCIENTE < +3.402823E+38 +1.401298E-45 < COCIENTE < +1.175494E-38 COCIENTE = +0,-0 -1.175494E-38 < COCIENTE < -1.401298E-45 -3.402823E+38 < COCIENTE < -1.175494E-38 COCIENTE < -3.402823E+38
141
A1 1 1 1 0 0 0 0 0
A0 1 0 0 0 0 0 1 1
OV 1 1 0 1 0 1 0 1
OS 1 1 1 1 1
Operaciones aritméticas y trigonométricas
Capítulo 12
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L L /R T
MD12 ED16
//El contenido de MD12 lo dividimos por el //contenido de ED16 y el resultado de la operación
MD20
//lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.16 Operación ABS Esta operación calcula el valor absoluto del contenido de ACU1 como número en coma flotante de treinta y dos (32) Bits y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = ABS (ACU1) La operación ABS no depende de los Bits, ni modifica los Bits del PSW. Ejemplo: L ABS T
MD12
//El valor absoluto de MD12
MD20
//lo depositamos en MD20.
12.17 Operación SQR Esta operación calcula el cuadrado del contenido de ACU1 como número en coma flotante de treinta y dos (32) Bits y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = CUADRADO = ACU1 2 Al realizar la operación SQR, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Bits afectados del PSW al realizar la operación SQR en coma flotante→ Si NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA Si CUADRADO > +3.402823E+38 Si +1.175494E-38 < CUADRADO < +3.402823E+38 Si +1.401298E-45 < CUADRADO < +1.175494E-38 Si CUADRADO = +0,-0
A1 1 1 1 0 0
A0 1 0 0 0 0
OV 1 1 0 1 0
OS 1 1 1 -
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L SQR T
MD12 MD20
//Calculamos el cuadrado del contenido de MD12 //y el resultado //lo depositamos en MD20.
142
Operaciones aritméticas y trigonométricas
Capítulo 12
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.18 Operación SQRT Esta operación calcula la raíz cuadrada del contenido de ACU1 como número en coma flotante de treinta y dos (32) Bits y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = RAIZ CUADRADA =
ACU 1
Al realizar la operación SQRT, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Bits afectados del PSW al realizar la operación SQRT en coma flotante→ Si NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA Si R.CUADRADA > +3.402823E+38 Si +1.175494E-38 < R.CUADRADA < +3.402823E+38 Si +1.401298E-45 < R.CUADRADA < +1.175494E-38 Si R.CUADRADA = +0,-0
A1 1 1 1 0 0
A0 1 0 0 0 0
OV 1 1 0 1 0
OS 1 1 1 -
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L MD12 SQRT T MD20
//Calculamos la raíz cuadrada del contenido de MD12 //y el resultado //lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.19 Operación EXP Esta operación calcula el número “e” elevado al contenido de ACU1 como número en coma flotante de treinta y dos (32) Bits y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = EXPONENCIAL = eACU1 Al realizar la operación EXP, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si
Bits afectados del PSW al realizar la operación EXP en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA R.CUADRADA > +3.402823E+38 +1.175494E-38 < R.CUADRADA < +3.402823E+38 +1.401298E-45 < R.CUADRADA < +1.175494E-38 R.CUADRADA = +0,-0
A1 1 1 1 0 0
A0 1 0 0 0 0
OV 1 1 0 1 0
OS 1 1 1 -
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación.
143
Operaciones aritméticas y trigonométricas
Capítulo 12
Ejemplo: L EXP T
MD12 MD20
//Realiza la operación “e” elevado al contenido de MD12 //y el resultado //lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.20 Operación LN La operación LN calcula el logaritmo neperiano del contenido de ACU1 como número en coma flotante de treinta y dos (32) Bits y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = L. NEPERIANO = LN (ACU1) Al realizar la operación LN, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Si Si Si Si Si Si Si Si
Bits afectados del PSW al realizar la operación LN en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA L.NEPERIANO > +3.402823E+38 +1.175494E-38 < L.NEPERIANO < +3.402823E+38 +1.401298E-45 < L.NEPERIANO < +1.175494E-38 L.NEPERIANO = +0,-0 -1.175494E-38 < L.NEPERIANO < -1.401298E-45 -3.402823E+38 < L.NEPERIANO < -1.175494E-38 L.NEPERIANO < -3.402823E+38
A1 1 1 1 0 0 0 0 0
A0 1 0 0 0 0 0 1 1
OV 1 1 0 1 0 1 0 1
OS 1 1 1 1 1
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L LN T
MD12 MD20
//Calcula el logaritmo neperiano del contenido de MD12 //y el resultado //lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.21 Operación SIN La operación SIN calcula el seno del contenido de ACU1 como ángulo en coma flotante de treinta y dos (32) Bits medido en radianes y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = SENO = SIN (ACU1) Al realizar la operación SIN, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla:
144
Operaciones aritméticas y trigonométricas
Si Si Si Si Si Si
Capítulo 12
Bits afectados del PSW al realizar la operación SIN en coma flotante→ NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA +1.175494E-38 < SENO < +3.402823E+38 +1.401298E-45 < SENO < +1.175494E-38 SENO = +0,-0 -1.175494E-38 < SENO < -1.401298E-45 -3.402823E+38 < SENO < -1.175494E-38
A1 1 1 0 0 0 0
A0 1 0 0 0 0 1
OV 1 0 1 0 1 0
OS 1 1 1 -
Las zonas sombreadas representan operaciones no válidas (Bit OV=1), y donde en cualquier caso el Bit RLO no queda afectado por esta operación. Ejemplo: L SIN T
MD12 MD20
//Calcula el seno del contenido de MD12 //y el resultado //lo depositamos en MD20.
El programador debe investigar (si lo considera necesario) como quedan afectados los Bits A1, A0, OV y OS para garantizar que el resultado de la operación es el que se desea. 12.22 Operación COS La operación COS calcula el coseno del contenido de ACU1 como ángulo en coma flotante de treinta y dos (32) Bits medido en radianes y el resultado lo deposita en ACU1. De una forma simplificada podríamos expresar esta idea de la siguiente forma: ACU1 = COSENO = COS (ACU1) Al realizar la operación COS, y dependiendo del resultado de la misma, pueden variar los Bits que forman el PSW (ver apartado 5.4.3) según la siguiente tabla: Bits afectados del PSW al realizar la operación COS en coma flotante→ Si NÚMERO NO VÁLIDO U OPERACIÓN NO PERMITIDA Si +1.175494E-38 < COSENO DBW < Número > DBX DI < Número > DIB < Número > DID < Número > DIW < Número > DIX
Ejemplo 2#11110000110 A 124.0 AB124 AD16 AW100 B#16#EF B(3,4) B(3,4,6,7) C#234 D#2004-2-10 DB 1 DBB 2 DBD 16 DBW 4 DBX 14.0 DI 4 DIB 6 DID 8 DIW 4 DIX 2.6
DW#16#
DW#16#1234ABCD
E EB < Número > ED < Número > EW < Número > L L# LB < Número > LD < Número > LW < Número > M MB < Número > MD < Número > MW < Número > P# PAB < Número > PAD < Número > PAW < Número > PEB < Número > PED < Número > PEW < Número >
E124.2 EB8 ED20 EW10 L 10.2 L#123456 LB 2 LD 4 LW 4 M 10.0 MB20 MD40 MW14 P#M10.0 PAB11 PAD8 PAW8 PEB4 PED20 PEW2 S5T#1H12M15S 500MS T2 T#14D23H5M2 S500MS TOD#14:16:2.50 0 W#16#120B Z10
S5T#HMSMS
T < Número >
T#DHM SMS TOD#
W#16# Z < Número >
Comentario Constante binaria: 11110000110 Bit “0” del Byte “124” de salida digital Byte “124” de salida digital Double Word “16” de salida digital Word “100” de salida digital Cifras hexadecimales “EF” Una pareja de Bytes: “3,4” Dos parejas de Bytes:”3,4,6,7” Constante BCD: “234” Fecha 2004-2-10 Bloque de datos número “1” Byte “2” de un bloque de datos Double Word “16” de un bloque de datos Word “4” de un bloque de datos Bit “0” del Byte “14” de un bloque de datos Bloque de datos de instancia número “4” Byte “6” de un bloque de datos de instancia Double Word “8” de bloque datos instancia. Word “4” de un bloque de datos de instancia. Bit “6” del Byte “2” de bloque datos instancia Cifras hex. “1234ABCD” Bit “2” del Byte “124” de entrada digital Byte “8” de entrada digital Double Word “20” de entrada digital Word “10” de entrada digital Bit “2” del Byte “10” de memoria local. Constante “123456” Byte “2” de memoria local Doble Word “4” de memoria local Word “4” de memoria local Bit “0” del Byte “10” de memoria marcas Byte “20” de memoria marcas Double Word “40” de memoria marcas Word “14” de memoria marcas Puntero M10.0 Byte “14” de salida de periferia Double Word “8” de salida de periferia Word “8” de salida de periferia Byte “4” de entrada de periferia Double Word “20” de entrada de periferia Word “2” de entrada de periferia Hora S5TIME = 1 Hora, 12 Minutos,15 Segundos, 500 Milisegundos Temporizador número “2” Hora TIME = 14 Días, 23 Horas, 5 Minutos,2 Segundos, 500 Milisegundos Hora TOD = 14 Horas, 16 Minutos, 2 Segundos, 500 Milisegundos. Cifras hexadecimales “120B” Contador número “10”
275
Operandos y operaciones de Step-7 para S7-300
Apéndice
Operaciones: Operación
Operando Comentario E RLO=1 si E =1 A< Byte.Bit > RLO=1 si A =1 M< Byte.Bit > RLO=1 si M =1 L< Byte.Bit > RLO=1 si L =1 DBX< Byte.Bit > RLO=1 si DBX =1 DIX< Byte.Bit > RLO=1 si DIX =1 U AO[AR1,CP] RLO=1 si AO[AR1,CP] =1 AO[AR2,CP] RLO=1 si AO[AR2,CP] =1 [AR1,CP] RLO=1 si [AR1,CP] =1 [AR2,CP] RLO=1 si [AR2,CP] =1 T < Número> RLO=1 si T < Número> =1 Z < Número> RLO=1 si Z < Número> =1 Nota: AO=Área Operando ; CP = Constante Puntero ; G = EB, AB, PEB, MB, LB, DBB ó DIB H = EW, AW, PEW, MW, LW, DBW ó DIW ; I = ED, AD, PED, MD, LD, DBD ó DID E< Byte.Bit > RLO=1 si E =0 A< Byte.Bit > RLO=1 si A =0 M< Byte.Bit > RLO=1 si M =0 L< Byte.Bit > RLO=1 si L =0 DBX< Byte.Bit > RLO=1 si DBX =0 DIX< Byte.Bit > RLO=1 si DIX =0 UN AO[AR1,CP] RLO=1 si AO[AR1,CP] =0 AO[AR2,CP] RLO=1 si AO[AR2,CP] =0 [AR1,CP] RLO=1 si [AR1,CP] =0 [AR2,CP] RLO=1 si [AR2,CP] =0 T < Número> RLO=1 si T < Número> =0 Z < Número> RLO=1 si Z < Número> =0 E< Byte.Bit > RLO=1 si E =1 A< Byte.Bit > RLO=1 si A =1 M< Byte.Bit > RLO=1 si M =1 L< Byte.Bit > RLO=1 si L =1 DBX< Byte.Bit > RLO=1 si DBX =1 O DIX< Byte.Bit > RLO=1 si DIX =1 AO[AR1,CP] RLO=1 si AO[AR1,CP] =1 AO[AR2,CP] RLO=1 si AO[AR2,CP] =1 [AR1,CP] RLO=1 si [AR1,CP] =1 [AR2,CP] RLO=1 si [AR2,CP] =1 T < Número> RLO=1 si T < Número> =1 Z < Número> RLO=1 si Z < Número> =1 E< Byte.Bit > RLO=1 si E =0 A< Byte.Bit > RLO=1 si A =0 M< Byte.Bit > RLO=1 si M =0 L< Byte.Bit > RLO=1 si L =0 DBX< Byte.Bit > RLO=1 si DBX =0 DIX< Byte.Bit > RLO=1 si DIX =0 ON AO[AR1,CP] RLO=1 si AO[AR1,CP] =0 AO[AR2,CP] RLO=1 si AO[AR2,CP] =0 [AR1,CP] RLO=1 si [AR1,CP] =0 [AR2,CP] RLO=1 si [AR2,CP] =0 T < Número> RLO=1 si T < Número> =0 Z < Número> RLO=1 si Z < Número> =0 E< Byte.Bit > Ejemplo: XN E12.2 A< Byte.Bit > Ejemplo: XN A14.6 X M< Byte.Bit > Ejemplo: XN M12.1 L< Byte.Bit > Ejemplo: XN L30.0 DBX< Byte.Bit > Ejemplo: XN DBX2.3 DIX< Byte.Bit > Ejemplo: XN DIX10.5 276
Operandos y operaciones de Step-7 para S7-300 X
XN
UW OW XOW UD OD XOD
U UN O ON X XN
FP
FN
AO[AR1,CP] AO[AR2,CP] [AR1,CP] [AR2,CP] T < Número> Z < Número> E< Byte.Bit > A< Byte.Bit > M L DBX DIX AO[AR1,CP] AO[AR2,CP] [AR1,CP] [AR2,CP] T < Número> Z < Número> ==0 >0 P# L# T Z T Z EB AB PAB MB LB DBB DIB G[AR1,CP] G[AR2,CP] B[AR1,CP] B[AR2,CP]
Apéndice
Carga ACU1LL con B [AR1,CP] Carga ACU1LL con B [AR2,CP] Carga ACU1L con EW Carga ACU1L con AW Carga ACU1L con PEW Carga ACU1L con MW Carga ACU1L con LW Carga ACU1L con DBW Carga ACU1L con DIW Carga ACU1L con H[AR1,CP] Carga ACU1L con H[AR2,CP] Carga ACU1L con W [AR1,CP] Carga ACU1L con W [AR2,CP] Carga ACU1 con ED Carga ACU1 con AD Carga ACU1 con PED Carga ACU1 con MD Carga ACU1 con LD Carga ACU1 con DBD Carga ACU1 con DID Carga ACU1 con I[AR1,CP] Carga ACU1 con I[AR2,CP] Carga ACU1 con D [AR1,CP] Carga ACU1 con D [AR2,CP] Carga ACU1 con Carga ACU1LL con Carga ACU1L con Carga ACU1 con Ejemplo: L ‘A’ Ejemplo: L ‘AB’ Ejemplo: L ‘ABC’ Ejemplo: L ‘ABCD’ Ejemplo: L D#2004-2-13 (carga ACU1 con D#2004-2-13) Ejemplo: L S5T#32S100MS (carga ACU1 con S5T#32S100MS) Ejemplo: L TOD#10:15:32.0 (carga ACU1 con TOD#10:15:32.0) Ejemplo: L T#2D4H10M20S100MS T#2D4H10M20S100MS T#2D4H10M20S100MS) Ejemplo: L C#123 (carga ACU1 con “123” como cifras BCD) Ejemplo: L P#A124.0 (carga ACU1 con P#A124.0) Ejemplo: L L#987654321 (carga ACU1 con L#987654321) Ejemplo: L 3.87 (carga ACU1 con 3.87) Ejemplo: L T2 (carga ACU1 con el valor de temporización) Ejemplo: L Z0 (carga ACU1 con el valor de contaje) Ejemplo: LC T2 (carga ACU1 con el tiempo en formato BCD) Ejemplo: LC Z0 (carga ACU1 con el contaje en formato BCD)
Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T
EB10 (transfiere ACU1LL a EB10) AB12 (transfiere ACU1LL a AB12) PAB20 (transfiere ACU1LL a PAB20) MB14 (transfiere ACU1LL a MB14) LB20 (transfiere ACU1LL a LB20) DBB2 (transfiere ACU1LL a DBB2) DIB4 (transfiere ACU1LL a DIB4)
Ejemplo: T MB[AR1,P#0.0] (transfiere ACU1LL a MB[AR1,P#0.0]) Ejemplo: T MB[AR2,P#0.0] (transfiere ACU1LL a MB[AR2,P#0.0]) Ejemplo: T B[AR1,P#2.0] (transfiere ACU1LL a B[AR1,P#2.0]) Ejemplo: T B[AR2,P#2.0] (transfiere ACU1LL a B[AR2,P#2.0])
279
Operandos y operaciones de Step-7 para S7-300 EW AW PAW MW LW DBW DIW H[AR1,CP]
T
LAR1
LAR2
TAR1
TAR2 TAR L T L
+I -I *I /I
H[AR2,CP] W[AR1,CP] W[AR2,CP] ED AD PAD MD LD DBD DID I[AR1,CP] I[AR2,CP] D[AR1,CP] D[AR2,CP] AR2 DBD DID < Número > CP LD < Número > MD < Número > DBD DID < Número > CP LD < Número > MD < Número > AR2 DBD DID < Número > LD < Número > MD < Número > DBD DID < Número > LD < Número > MD < Número > STW STW DBNO DINO DBLG DILG
Apéndice
Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T
EW10 (transfiere ACU1L a EW10) AW12 (transfiere ACU1L a AW12) PAW20 (transfiere ACU1L a PAW20) MW14 (transfiere ACU1L a MW14) LW20 (transfiere ACU1L a LW20) DBW2 (transfiere ACU1L a DBW2) DIW4 (transfiere ACU1L a DIW4)
Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T
ED12 (transfiere ACU1 a ED12) AD12 (transfiere ACU1 a AD12) PAD20 (transfiere ACU1 a PAD20) MD16 (transfiere ACU1 a MD16) LD20 (transfiere ACU1 a LD20) DBD4 (transfiere ACU1 a DBD4) DID4 (transfiere ACU1 a DID4)
Ejemplo: T MW[AR1,P#0.0] (transfiere ACU1L a MW[AR1,P#0.0]) Ejemplo: T M[AR2,P#0.0] (transfiere ACU1L a M[AR2,P#0.0]) Ejemplo: T W[AR1,P#2.0] (transfiere ACU1L a W[AR1,P#2.0]) Ejemplo: T W[AR2,P#2.0] (transfiere ACU1L a W[AR2,P#2.0])
Ejemplo: T Ejemplo: T Ejemplo: T Ejemplo: T
MD[AR1,P#0.0] (transfiere ACU1 a MD[AR1,P#0.0]) MD[AR2,P#0.0] (transfiere ACU1 a MD[AR2,P#0.0]) D[AR1,P#2.0] (transfiere ACU1 a D[AR1,P#2.0]) D[AR2,P#2.0] (transfiere ACU1 a D[AR2,P#2.0])
Ejemplo: LAR1 (AR1= ACU1) Ejemplo: LAR1 AR2 (AR1 = AR2) Ejemplo: LAR1 DBD4 (AR1= DBD4) Ejemplo: LAR1 DID8 (AR1 = DID8) Ejemplo: LAR1 P#M100.0 (AR1 = P#M100.0) Ejemplo: LAR1 LD8 (AR1 = LD8) Ejemplo: LAR1 MD12 (AR1 = MD12) Ejemplo: LAR2 (AR2 = ACU1) Ejemplo: LAR2 DBD4 (AR2 = DBD4) Ejemplo: LAR2 DID8 (AR2 = DID8) Ejemplo: LAR2 P#M100.0 (AR2 = P#M100.0) Ejemplo: LAR2 LD8 (AR2 = LD8) Ejemplo: LAR2 MD12 (AR2 = MD12) Ejemplo: TAR1 (ACU1 = AR1) Ejemplo: TAR1 AR2 (AR2 = AR1) Ejemplo: TAR1 DBD4 (DBD4 = AR1) Ejemplo: TAR1 DID8 (DID8 = AR1) Ejemplo: TAR1 LD8 (LD8 = AR1) Ejemplo: TAR1 MD12 (MD12 = AR1) Ejemplo: TAR2 (ACU1 = AR2) Ejemplo: TAR2 DBD4 (DBD4 = AR2) Ejemplo: TAR2 DID8 (DID8 = AR2) Ejemplo: TAR2 LD8 (LD8 = AR2) Ejemplo: TAR2 MD12 (MD12 = AR2) Ejemplo: TAR (intercambia AR1 y AR2) Ejemplo: L STW (ACU1L = PSW) Ejemplo: T STW (PSW = ACU1L) Ejemplo: L DBNO (ACU1 = Número del DB global) Ejemplo: L DINO (ACU1 = Número del DB de instancia) Ejemplo: L DBLG (ACU1 = longitud del DB global)
Ejemplo: L DILG (ACU1 = longitud del DB de instancia)
Ejemplo: +I (ACU1L = ACU2L + ACU1L) Ejemplo: -I (ACU1L = ACU2L - ACU1L) Ejemplo: *I (ACU1L = ACU2L * ACU1L) Ejemplo: /I (ACU1L = ACU2L / ACU1L) 280
Operandos y operaciones de Step-7 para S7-300
Ejemplo: +D (ACU1 = ACU2 + ACU1) Ejemplo: -D (ACU1 = ACU2 - ACU1) Ejemplo: *D (ACU1 = ACU2 * ACU1) Ejemplo: /D (ACU1 = ACU2 / ACU1) Ejemplo: MOD (ACU1 = resto de ACU2 / ACU1) Ejemplo: +R (ACU1 = ACU2 + ACU1) Ejemplo: -R (ACU1 = ACU2 - ACU1) Ejemplo: *R (ACU1 = ACU2 * ACU1) Ejemplo: /R (ACU1 = ACU2 / ACU1) Ejemplo: NEGR (cambia el signo de AR1 como nº real) Ejemplo: ABS (valor absoluto de AR1) Ejemplo: SQRT (ACU1=raiz cuadrada de ACU1) (real) Ejemplo: SQR (ACU1= cuadrado de ACU1) (real) Ejemplo: LN (ACU1= log. neper. de ACU1) (real)
+D -D *D /D MOD +R -R *R /R NEGR ABS SQRT SQR LN EXP SIN ASIN COS
Ejemplo: EXP (ACU1 = nº “e” elevado a ACU1) (real)
Ejemplo: SIN (ACU1 = seno de ACU1 en rad. ) (real)
Ejemplo: ASIN (ACU1 = arco seno de ACU1 en rad.) (real)
Ejemplo: COS (ACU1 = coseno de ACU1 en rad. ) (real) Ejemplo: ACOS (ACU1 = arco coseno de ACU1 en rad.)
ACOS
(real)
TAN ATAN +
+AR1 +AR2
==I I =I ==D D =D ==R R =R SLW
Apéndice
CP CP
SLW SLD
SLD SRW
SRW SRD
Ejemplo: TAN (ACU1 = tangente de ACU1 en rad.) (real) Ejemplo: ATAN (ACU1 = arco tang. de ACU1 en rad.) (real)
Ejemplo: + 14 (suma 14 a ACU1) Ejemplo: +AR1 (AR1 = AR1 + ACU1L) Ejemplo: +AR1 P#14.0 (AR1 = AR1 + P#14.0) Ejemplo: +AR2 (AR2 = AR2 + ACU1L) Ejemplo: +AR2 P#14.0 (AR2 = AR2 + P#14.0) RLO = 1 si ACU2L=ACU1L RLO = 1 si ACU2LACU1L RLO = 1 si ACU2L=ACU1L RLO = 1 si ACU2=ACU1 RLO = 1 si ACU2ACU1 RLO = 1 si ACU2=ACU1 RLO = 1 si ACU2=ACU1 RLO = 1 si ACU2ACU1 RLO = 1 si ACU2=ACU1 Ejemplo: SLW (desplaza ACU1L a izda. según ACU2LL) Ejemplo: SLW 7 (desplaza ACU1L a izda. 7 veces) Ejemplo: SLD (desplaza ACU1 a izda. según ACU2LL) Ejemplo: SLD 5 (desplaza ACU1 a izda. 5 veces) Ejemplo: SRW (desplaza ACU1L a dcha. según ACU2LL) Ejemplo: SRW 4 (desplaza ACU1L a dcha. 4 veces) Ejemplo: SRD (desplaza ACU1 a dcha. según ACU2LL)
281
Operandos y operaciones de Step-7 para S7-300 SRD SSI
SSI SSD
SSD RLD RLD RRD RRD RLDA
RRDA TAW
CALL UC CC AUF BE BEA BEB TDB SPA SPB SPBN SPBB
Ejemplo: SRD 18 (desplaza ACU1 a dcha. 18 veces)
Ejemplo: SSI (desplaza ACU1L a dcha. según ACU2LL) (int.) Ejemplo: SSI 6 (desplaza ACU1L a dcha. 6 veces) (int.) Ejemplo: SSD (desplaza ACU1 a dcha. según ACU2LL) (int.) Ejemplo: SSD 27 (desplaza ACU1 a dcha. 27 veces) (int.)
Ejemplo: RLD (rota ACU1 a izda. según ACU2LL) Ejemplo: RLD 30 (rota ACU1 a izda. 30 veces) Ejemplo: RRD (rota ACU1 a dcha. según ACU2LL) Ejemplo: RRD 29 (rota ACU1 a dcha. 29 veces)
Ejemplo: RLDA (rota ACU1 una posición a izda. a través de A1) Ejemplo: RRDA (rota ACU1 una posición a dcha.a través de A1)
Ejemplo: TAW (ACU1LL y LH serán ACU1LH y LL)
TAD TAK ENT LEAVE PUSH POP INC DEC BLD NOP BTI BTD DTR ITD ITB DTB RND RNDRND+ TRUNC INVI INVD NEGI NEGD
Apéndice
Ejemplo: TAD (ACU1LL,LH,HL y HH serán ACU1HH,HL,LH y LL)
“0” ó “1”
FB ,DB SFB ,DB
FC SFC FB FC FB FC DB DI
Ejemplo: TAK (ACU1 = ACU2 y ACU2 = ACU1) Ejemplo: ENT (ACU3=ACU2 y ACU4= ACU3) Ejemplo: LEAVE (ACU2= ACU3 y ACU3= ACU4) Ejemplo: PUSH (ACU2=ACU1) Ejemplo: POP (ACU1=ACU2) Ejemplo: INC 13 (ACU1LL=ACU1LL+13) Ejemplo: DEC 27 (ACU1LL=ACU1LL-27) Ejemplo: BLD 0 (Permite visualizar bloques) Ejemplo: NOP 0 (operación nula) Convierte ACU1 de BCD a entero Convierte ACU1 de BCD a entero doble Convierte ACU1 de entero doble a real Convierte ACU1 de entero a entero doble Convierte ACU1 de entero a BCD Convierte ACU1 de entero doble a BCD Convierte ACU1 de real a entero doble Convierte ACU1 de real a entero doble = real Parte entera con redondeo Complemento a 1 de ACU1L Complemento a 1 de ACU1 Complemento a 2 de ACU1L Complemento a 2 de ACU1 Ejemplo: CALL FB1,DB1 Ejemplo: CALL SFB1,DB1 Ejemplo: CALL FC1 Ejemplo: CALL SFC1 Llamada incondicional a FB Llamada incondicional a FC Llamada condicional a FB Llamada condicional a FC Abrir bloque de datos general Abrir bloque de datos de instancia
Final de bloque Final de bloque absoluto Fin de bloque si RLO=1 Intercambia el DB y el DI abiertos Salto incondicional a Salto a si RLO=1 Salto a si RLO=0 Salto a si RLO=1 y hacer RB=RLO 282
Operandos y operaciones de Step-7 para S7-300 SPBNB SPBI SPBIN SPO SPS SPU SPZ SPP SPM SPN SPMZ SPPZ SPL LOOP MCR( )MCR MCRA MCRD
Apéndice
Salto a si RLO=0 y hacer RB=RLO Salto si RB=1 Salto si RB=0 Salto si OV=1 Salto si OS=1 Salto si la operación no es posible Salto si resultado = 0 Salto si resultado > 0 Salto si resultado < 0 Salto si resultado 0 Salto si resultado = 0 Salto según lista de saltos y ACU1L Salto si ACU1L0. Decrementa ACU1L Abrir zona de MCR Cerrar zona MCR Activar MCR Desactivar MCR
283
Bibliografía Lista de operaciones S7-300 Editado por SIEMENS Configurar el hardware y la comunicación con STEP 7 V5.0 Editado por SIEMENS SIMATIC NET NCM S7 para PROFIBUS Manual-Tomo 1 de 2 Editado por SIEMENS Lista de instrucciones (AWL) Para S7-300 y S7-400 Editado por SIEMENS S7-GRAPH para S7-300/400 Programación de controles secuenciales Editado por SIEMENS STEP 7 V5.1 Introducción y ejercicios prácticos Editado por SIEMENS Programar con STEP 7 V5.0 Editado por SIEMENS S7-HiGraph for S7-300/400 Editado por SIEMENS SIMATIC NET Redes de par trenzado industrial Editado por SIEMENS Software estándar para S7-300 y S7-400 Funciones estándar Segunda parte Editado por SIEMENS Comunicación con SIMATIC Editado por SIEMENS SIMATIC NET Redes PROFIBUS Editado por SIEMENS Software de sistema para S7-300 y S7-400 Funciones estándar y funciones de sistema Editado por SIEMENS NCM S7 para PROFIBUS Guía rápida Editado por SIEMENS S7-PLCSIM para probar programas S7 Editado por SIEMENS Manual de Baja Tensión Marcombo Boixareu Editores Automatització industrial amb GRAFCET Edicions Universitat Politecnica de Catalunya Autómatas programables Andre Simon. Edit. Paraninfo Automatización Problemas resueltos con autómatas programables Edit. Thomson-Paraninfo Diseño básico de automatismos eléctricos Edit. Paraninfo Neumática SMC International Training Edit. Paraninfo Autómatas programables Balcells J., Romeral J.L. Edit. Marcombo Automating with STEP-7 in STL and SCL Hans Berger Editado por SIEMENS Problemas de diseño de automatismos Francisco Ojeda Cherta Edit. Paraninfo
285