Infoplc Net Ejercicios de Programacic3b3n Resueltos Con Step 7

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 71

1.

CONCEPTOS PREVIOS SOBRE LOS PLCs

Antes de proceder a la programacin de nuestra CPU, conviene repasar brevemente algunos


conceptos previos sobre los PLCs.

1.1. Sistema Operativo o Firmware.

Todos los PLCs disponen de un sistema Operativo o firmware que se encarga de los
siguientes aspectos:

Gestin de las funciones internas.


Transferencia de datos entre los diferentes bloques internos del PLC.
Diagnstico y Supervisin de los elementos internos.
Diagnstico y gestin de la memoria.
Gestin y Comunicacin con los perifricos o interfaces de E/S.
Ejecucin y supervisin del programa de usuario.
Gestin de los puertos de comunicacin (RS-232, RS 485, Profibus, etc.)

1.2. Juego de instrucciones.

Todos los PLCs disponen de un juego de instrucciones (generales y especficas) que el


programador debe conocer para una mejor programacin y aprovechamiento del PLC.

1.3. Memoria de la CPU.

Todos los PLCs disponen de una memoria estructurada, tal como se indica en la figura. La
capacidad o tamao de esta memoria, junto con la velocidad de procesamiento de la CPU y su
juego de instrucciones determinar la potencia de la CPU.

Los PLC disponen de Bits o reas de memoria especiales dentro del mapa de memoria:

rea de variables (V). Aqu podemos almacenar cualquier tipo de datos.


rea de imagen de entradas (I). Donde encontraremos los datos de las entradas digitales.
rea de imagen de salidas (Q). Zona donde encontraremos los datos de las salidas digitales.
rea de marcas (M). Se utilizan para almacenar informacin temporal (bits de activacin, etc.)
rea de marcas especiales (SM). Cada bit tiene un significado y funcin propia.
rea de temporizadores (T). Donde se almacena informacin o datos sobre temporizadores.
Pg. 1
rea de Contadores (C). Donde se almacena informacin o datos sobre contadores.
rea de Acumuladores (AC). Donde se almacena informacin o datos sobre los
acumuladores.
rea de Entradas analgicas (AI). Donde encontraremos los datos de las entradas
analgicas.
rea de Salidas analgicas (AQ). Donde encontraremos los datos de las salidas analgicas.

Disposicin y estructura de la memoria del PLC.

Por otro lado, la memoria de una CPU est estructurada en registros de 8 bit (1 Byte). El
acceso a los datos en la memoria se puede realizar en forma de Bit, Byte, Palabra o Doble
palabra. El uso de un tipo de direccionamiento u otro depender del tipo de variable (E/S
digital, E/S analgica, marcas, etc.).

1.4. Formatos de representacin numrica.

Los datos utilizados en un PLC pueden ser muy diferentes. Se debe seleccionar el tipo exacto
de formato a utilizar. Por regla general, existen 3 formatos de representacin numrica:
Binario, Hexadecimal y BCD. As mismo, hay tres formatos de nmeros: Entero (Int), Doble
entero (DInt) y Real (R)

Pg. 2
Binario: Representa nmeros naturales mayores o iguales que cero. Ejemplo: 0; 01; 10; 11;
100...
Rangos: Palabra: 2#0 2#1....1 (16 unos) Doble palabra: 2#0 2#1....1 (32 unos)

Hexadecimal:

Rangos: Byte: B#16#0 B#16#FF Palabra: W#16#0 W#16#FFFF Doble palabra:


DW#16#0 DW#16#FFFFFFFF

BCD: BCD Decimal codificado en binario. Cada 4 bits representan un dgito. Hay 2 formatos:
de 3 cifras y de 7 cifras.

Palabra (16 bits): BCD de 3 cifras con signo. Ejemplo: +310

Signo: 0000 -> positivo


1111 -> negativo
Rango: -999 999

Doble palabra (32 bits): 7 cifras con signo. Rango: Lo que cabe en ACU1: 9999999

Entero (Int): Un nmero entero es un nmero binario de 16 bits que


tiene
como signo el bit ms significativo.

Lmite:
N positivos: 215-1 = 32767 (El 0 se considera positivo)
N negativos: 215= - 32768 (Se hace el complemento a 2: cambiando ceros por unos y
sumando 1.

Ejemplo: el entero -3 sera -- 3 = 0000 0000 0011 --- C1= 1111 1111 1100 -- +1 = 1111 1111
1101 = -3)

Nmeros dobles enteros (DInt): Son nmeros binarios de 32 bits.

Lmite: N positivos: 231-1 = 2147483647 (El 0 se considera


positivo)
N negativos: 231 = -21474863648

Nmeros reales (R): Se puede expresar de forma exponencial o como quebrados. Son
nmeros binarios de 32 bits que constan de 2 partes:

Mantisa : los 3 bytes ms altos

Exponente : el byte ms alto

Pg. 3
1.5. Ciclo de ejecucin de los PLCs.

Las CPU S7-300, S7-400 y S7-1200 de Siemens ejecutan cclicamente el programa OB1 y
todos sus bloques asociados. No obstante, en el primer ciclo de ejecucin, y slo en este, se
ejecuta el contenido del bloque de organizacin OB100. ste podemos utilizarlo para
establecer condiciones iniciales, forzar variables al inicio del proceso, etc.

1.6. Tipos de ejecucin del programa de los PLCs.

1.7. Lenguajes de programacin (Norma ISO IEC-1131).

La mayora de los entornos de


programacin nos permiten programar
en los lenguajes ms populares:

Lista de instrucciones (AWL).


Diagrama de Contactos (KOP).
Diagrama de Funciones (FUP).

Tambin podemos utilizar la


programacin secuencial de funciones
(SFC) o GRAFCET. Asi, por ejemplo, el
Administrador Step 7 de Siemens
dispone de S7-GRAPH para tal
cometido.
Pg. 4
2. Ejercicios de programacin resueltos con Step 7.

EJERCICIO 1. Contactos en serie (Instruccin U)

Automatizar el siguiente circuito en los tres lenguajes AWL, KOP y FUP.

Solucin en AWL
U E 0.0
U E 0.1
= A 4.0

Solucin en KOP

Solucin en FUP

Pg. 5
EJERCICIO 2. Contactos en paralelo (Instruccin O)

Automatizar el siguiente circuito en los tres lenguajes AWL, KOP y FUP.

Solucin en AWL

U E 0.0
O E 0.1
= A 4.0

Solucin en KOP

Solucin en FUP

Pg. 6
EJERCICIO 3. Contactos en Serie-Paralelo (instrucciones con parntesis)

Automatizar el siguiente circuito en los tres lenguajes AWL, KOP y FUP.

Solucin en AWL U E 0.0


O(
U E 0.1
U E 0.2
)
O
U E 0.3
U E 0.4
Solucin en KOP = A 4.0

Solucin en FUP

Pg. 7
EJERCICIO 4. Contactos Negados (instrucciones ON y UN).

Automatizar el siguiente circuito en los tres lenguajes AWL, KOP y FUP. Se desea que se active la
salida cuando accionemos los dos pulsadores. En un contacto queremos que d seal cuando se
cierre fsicamente el contacto. En el otro caso queremos que d seal cuando se abra fsicamente el
contacto.

Solucin en AWL
UN E 0.0
U E 0.1
= A 4.0

Solucin en KOP

Solucin en FUP

Pg. 8
EJERCICIO 5. Programacin con Marcas.

Las marcas son bits internos de la CPU. Disponemos de una cantidad limitada de marcas dependiendo
de la CPU con la que estemos trabajando. Los bits de marca podemos activarlos y desactivarlos como si
fueran salidas, y podremos consultarlos en cualquier punto del programa.
Las marcas se pueden direccionar como bit (M), byte (MB), palabra (MW) o doble-palabra (MD). Por
ejemplo:
Bit de marcas: M 0.0, M 10.7, M 4.5, etc.
Byte de marcas: MB20, MB100, MB50, etc.
Palabra de marcas: MW100, MW200, etc.
Doble-Palabra de marcas: MD100, MD200, etc.

Veamos un ejercicio de aplicacin

Para resolver el circuito elctrico de la figura, podemos simplificar el circuito utilizando marcas, quedando
por programar un circuito tan sencillo como vemos en la figura.
Solucin en AWL
U E 0.0
O E 0.1
O(
U E 0.2
U E 0.3
U E 0.4
)
= M 0.0
U E 0.6
O E 0.7
= M 0.1
U E 1.1
U E 1.2
O E 1.0
= M 0.2
U E 0.5
U M 0.1
= M 0.3
U M 0.0
U(
U M 0.3
O M 0.2
)
= A 4.0

Solucin en KOP Solucin en FUP

Pg. 9
EJERCICIO 6. Instrucciones SET y RESET

Las instrucciones SET y RESET son instrucciones de memoria. Si programamos un SET de una salida o
de una marca con unas condiciones, se activar cuando se cumplan dichas condiciones. Aunque las
condiciones dejen de cumplirse, no se desactivar hasta que se haga un RESET de la salida o marca.

Estas instrucciones tienen prioridad. Dependen del orden en que las programemos. Siempre va a
tener prioridad la ltima que programemos.

Veamos por qu ocurre esto.

Existen dos registros internos que se llaman PAE (imagen de proceso de entradas) y PAA (imagen
de proceso de salidas).

Antes de ejecutarse el OB1, se hace una copia de las entradas reales en la PAE. Durante la
ejecucin del OB1, el PLC no accede a la periferia real para hacer sus consultas, lo que hace en
realidad es acceder a este registro interno. Este registro se refresca cada vez que comienza un
nuevo ciclo de scan.

Segn se van ejecutando las instrucciones, el PLC no accede a las salidas reales para activarlas o
desactivarlas. Accede al registro interno PAA y pone 0 o 1.

Slo cuando termina cada ciclo de scan accede realmente a las salidas. Entonces lo que hace es copiar
lo que hay en la PAA en las salidas reales. En nuestro caso, si hacemos un SET y un RESET dentro
del mismo ciclo de scan, al final de cada ciclo har efecto lo ltimo que hayamos programado.

Veamos un ejercicio de aplicacin

El circuito de la figura corresponde a un enclavamiento elctrico. Esto hace las funciones de dos
pulsadores, uno de marcha y otro de paro. Es la forma ms cmoda de programar dos pulsadores.

Esto lo podramos programar tal y como aparece en la figura, pero si lo hacemos mediante instrucciones
SET y RESET quedara de la siguiente manera:

Solucin en AWL Solucin en KOP Solucin en FUP

U E 0.0
S A 4.0
U E 0.1
R A 4.0

Pg. 10
EJERCICIO 7. Observacin de variables.

El administrador Step 7 nos permite conocer en todo momento el valor que toma una variable durante la
ejecucin del programa e incluso forzar su estado. Este es particularmente til para hacer un
seguimiento y para depuracin del programa que ejecuta el PLC.

Supongamos a modo de ejemplo el siguiente programa, al que deseamos hacer un seguimiento de su


ejecucin en el PLC desde el propio Administrador Step 7. Como es lgico, ser imprescindible estar
conectado al PLC mediante el interface MPI-PC.

U E 0.0
U E 0.1
UN E 0.2
U E 0.3
O E 0.4
= A 4.0

Desde el men Test > Observar, o bien pulsando sobre el icono que representa unas gafas, podremos
conocer en tiempo real el estado de ejecucin de nuestro programa. En las imgenes siguientes vemos
el resultado segn estemos operando en AWL, KOP o FUP. Observe como al accionar alguno de los
contactos, varan tanto su valor como su representacin grfica.

Pg. 11
EJERCICIO 8. Tablas de variables (Observacin y Forzado de variables)

Adems de lo visto en el ejercicio anterior, podemos abrir y configurar una tabla en la que podemos
observar las variables que deseemos.

Estas tablas son bloques ms dentro del proyecto, y podemos insertarlas desde el administrador
abriendo el men Insertar > Bloque S7 > Tabla de variables. Observe como ahora dentro de nuestro
proyecto y junto al bloque de organizacin OB1 nos aparecer nuestra tabla con el nombre VAT_1.

Podemos acceder a la tabla, bien abrindola directamente en la carpeta de Programa S7, o bien a
travs del men Sistema Destino > Observar/Forzar variables.

Una vez abierta la tabla deberemos escribir las variables que deseamos observar y/o forzar en la
columna Operando, e indicar el formato de visualizacin. El estado de las variables se nos mostrar en
la columna Valor de estado. Si deseamos forzar el valor de una variable utilizaremos la columna Valor
de forzado. En la figura hemos forzado E0.0 a 1.

Para poder observar y forzar las variables tenemos que ejecutar nuestro programa en el PLC
y conectarnos con el ONLINE mediante el botn gafas de la barra de herramientas.

El botn de las que representa unas gafas con una rayita al lado slo nos permitir una visualizacin
instantnea de las variables. Si se producen cambios en las variables no los veremos reflejados en la
pantalla.

Los botones que representan unos rayos son para forzar variables. Podemos hacer un solo
forzado o hacer un forzado continuo.

Pg. 12
EJERCICIO 9. Simulacin con PLCSIM

PLCSIM es un simulador incluido dentro del software de SIMATIC STEP 7. Con este simulador
podremos comprobar nuestro programa en el PC sin necesidad de tener conectado el autmata.

Los pasos a seguir son:

1. Configure el hardware del proyecto. Compile y Guarde la configuracin.


2. Escriba el programa del PLC en OB1. Compile y Guarde el programa.
3. Abra PLCSIM desde INICIO>SIMATIC>STEP7>S7-PLCSIM Simular mdulos. Abriremos una
ventana tal como muestra la figura.

4. Proceda ahora a la carga de todo el proyecto (hardware+programas) desde la ventana del


administrador tal y como lo hara para el PLC.
5. Desde el men Insertar podr abrir elementos de visualizacin tales como entradas, salidas, marcas,
temporizadores, etc. En nuestro caso hemos insertado un elemento de entradas (EB0), uno de salidas
(AB0) y otro de marcas (MB0).

6. Tan slo nos queda poner en modo RUN el simulador y comprobar el funcionamiento del programa.
Para activar las entradas del PLC tendr que hacer clic sobre las pestaas de la ventana EB0. Los
bits de salidas y las marcas debern activarse de acuerdo con el programa cargado.
7. Como ejercicio prctico le proponemos que resuelva con marcas y simule la siguiente funcin:

Pg. 13
TEMPORIZADORES

El administrador Step 7 nos ofrece cinco tipos de temporizadores. Elegir el temporizador apropiado
depender de las necesidades del programador. Indicamos aqu un breve resumen y descripcin de
estos:

SMBOLO Descripcin
S_IMPULS Temporizador de impulso El tiempo mximo que la seal de salida permanece a 1 corresponde al
valor de temporizacin t programado. La seal de salida permanece a 1
durante un tiempo inferior si la seal de entrada (S) cambia a 0.

S_VIMP - Temporizador de impulso La seal de salida permanece a 1 durante el tiempo programado,


prolongado independientemente del tiempo en que la seal de entrada est a 1.

S_EVERZ - Temporizador de retardo La seal de salida es 1 solamente si ha finalizado el tiempo


a la conexin programado y la seal de entrada sigue siendo 1.

S_SEVERZ - Temporizador de La seal de salida cambia de 0 a 1 solamente si ha finalizado el tiempo


retardo a la conexin con memoria programado, independientemente del tiempo en que la seal de salida
est a 1.

S_AVERZ - Temporizador de retardo La seal de salida es 1 cuando la seal de entrada es 1 o cuando el


a la desconexin temporizador est en marcha. El temporizador arranca cuando la seal
de entrada cambia de 1 a 0.

Pg. 14
rea de memoria

Los temporizadores tienen un rea reservada en la memoria de la CPU. Esta rea de memoria reserva
una palabra de 16 bits para cada operando de temporizador. La programacin con KOP asiste 256
temporizadores.

Cuando se dispara un temporizador, el contenido de la palabra de temporizacin 1 se utiliza como valor


de temporizacin. Los bits 0 a 11 de la palabra de temporizacin almacenan el valor de temporizacin
en formato decimal codificado en binario (formato BCD: cada grupo de cuatro bits contiene el cdigo
binario de un valor decimal). Los bits 12 a 13 almacenan la base de tiempo en cdigo binario.

La figura muestra el contenido de la palabra de temporizacin cargado con el valor 127 y una base de
tiempo de 1 segundo.

Valor de temporizacin. Tipo de datos S5TIME

Los bits 0 a 9 de la palabra de temporizacin contienen el valor de temporizacin en cdigo binario. Este
valor indica un nmero de unidades. La actualizacin decrementa el valor de temporizacin en una
unidad y en el intervalo indicado por la base de tiempo hasta alcanzar el valor 0. El valor de
temporizacin se puede cargar en los formatos binario, hexadecimal o decimal codificado en binario
(BCD). El rea de temporizacin va de 0 a 9 990 segundos. Para cargar un valor de temporizacin
redefinido, se observarn las siguientes reglas sintcticas.

El valor de temporizacin se puede cargar en cualquiera de los siguientes formatos:

w#16#wxyz siendo: w= la base de tiempo (es decir, intervalo de tiempo o resolucin). xyz = el
valor de temporizacin en formato BCD

S5T#aH_bM_cS_dMS siendo: H (horas), M (minutos), S (segundos), MS (milisegundos); a,


b, c, d los define el usuario

La base de tiempo se selecciona automticamente y el valor de temporizacin se redondea al prximo


nmero inferior con esa base de tiempo.

El valor de temporizacin mximo que puede introducirse es de 9 900 segundos 2H_46M_30S.

Ejemplos:

S5TIME#4S --> 4 segundos


s5t#2h_15m --> 2 horas y 15 minutos
S5T#1H_12M_18S --> 1 hora 12 minutos y 18 segundos

Pg. 15
Base de tiempo

Los bits 12 y 13 de la palabra de temporizacin contienen la base de tiempo en cdigo binario. La base
de tiempo define el intervalo en que se decrementa en una unidad el valor de temporizacin. La base de
tiempo ms pequea es 10 ms, la ms grande 10 s.

Base de tiempo Base de tiempo en cdigo binario

10 ms 00
100 ms 01
1s 10
10 s 11

Los valores no deben exceder 2H_46M_30S. Los valores con un margen o una resolucin demasiado
grandes (p. ej. 2H_10MS) se redondean de tal forma que correspondan a la tabla para el margen y la
resolucin.

El formato general para el tipo de datos S5TIME tiene los siguientes valores lmite para el margen y la
resolucin:

Resolucin Mrgen

10MS a 9S_990MS 10MS a 9S_990MS


100MS a 1M_39S_900MS 00MS a 1M_39S_900MS
1S a 16M_39S 1S a 16M_39S
10S a 2H_46M_30S 10S a 2H_46M_30S

Ejemplo con temporizador de retardo a la conexin (S_EVERZ):

Si el estado de seal de la entrada E 0.0 cambia de "0" a "1" (flanco creciente), se activa el temporizador
T5. Si transcurre el tiempo de dos segundos y el estado de seal en la entrada E 0.0 sigue siendo "1", la
salida A 4.0 ser "1". Si el estado de seal de la entrada E 0.0 cambia de "1" a "0", el temporizador se
para y la salida A 4.0 ser "0". (Si el estado de seal de la entrada E 0.1 cambia de "0" a "1", el
temporizador se pone a 0, tanto si estaba funcionando como si no).

El valor de temporizacin actual queda depositado en la salida DUAL y DEZ. El valor de temporizacin
en la salida DUAL est en cdigo binario, el valor en la salida DEZ est en formato decimal codificado en
binario. El valor de temporizacin actual equivale al valor inicial de TW menos el valor de temporizacin
que ha transcurrido desde el arranque del temporizador.

Veamos ahora un ejemplo prctico del uso de temporizadores.

Pg. 16
EJERCICIO 10. CONTROL DE UN SEMFORO

Tenemos un semforo con las tres luces verde, mbar y rojo. Disponemos tambin de dos
pulsadores de mando: un pulsador de marcha y un pulsador de paro. El ciclo comienza tras pulsar el
pulsador de marcha, siguiendo la siguiente secuencia indicada. El ciclo es repetitivo hasta que se pulse
el pulsador de paro. En ese momento se apaga todo. Siempre que le d al pulsador de marcha quiero
que empiece por el verde.

1/ Verde durante 5 seg.

2/ Verde + Amarillo durante 2 seg.

3/ Rojo durante 6 seg

Solucin en AWL

U E 0.0 //Al activar el pulsador de marcha


S A 4.2 //Encender el verde
U A 4.2 //Si se ha encendido el verde
L S5T#5S //Cuenta 5 segundos
SE T 1 //Con el temporizador 1
U T 1 //Y cuando acabes de contar
S A 4.1 //Enciende el amarillo
U A 4.1 //Si se ha encendido el amarillo
L S5T#2S //Cuenta 2 segundos
SE T 2 //Con el temporizador 2
U T 2 //Y cuando acabes de contar
S A 4.0 //Enciende el rojo
R A 4.1 //Apaga el amarillo
R A 4.2 //Y apaga el verde
U A 4.0 //Si se ha encendido el rojo
L S5T#6S //Cuenta 6 segundos
SE T 3 //Con el temporizador 3
U T 3 //Cuando acabes de contar
S A 4.2 //Enciende el verde
R A 4.0 //Y apaga el rojo
U E 0.1 //Si se activa el pulsador de paro
R A 4.0 //Apaga el rojo
R A 4.1 //Apaga el amarillo
R A 4.2 //Apaga el verde

Pg. 17
Solucin en KOP

Pg. 18
Solucin en FUP

Pg. 19
EJERCICIO 11. Control de un Sistema de Cintas transportadoras (Temporizadores)

Tenemos tres cintas transportadoras dispuestas como indica la figura. Por las cintas transportadoras
van a circular cajas grandes y pequeas indistintamente. El tamao de las cajas es detectado por tres
sensores. Para cajas grandes los tres sensores se activan. Para las pequeas slo el primero de
ellos.

El funcionamiento del sistema debe ser el siguiente:

Cuando le demos al pulsador de marcha queremos que se ponga en marcha la cinta n 1. Cuando
llegue la primera caja a la cinta n 2, queremos que se pare la cinta n 1 y que se ponga en marcha la
cinta n 2. En la cinta n 2 detectamos si la caja es grande o pequea. Si es grande, queremos que
se ponga en marcha la tercera cinta hacia arriba, y si es pequea queremos que se ponga en
marcha la tercera cinta hacia abajo. La cinta n 2 se para cuando la caja ya est abandonando la cinta
n2. La cinta n 3 se para a los 10 seg. de haberse puesto en marcha. A continuacin se pone en
marcha de nuevo la primera cinta y vuelve a comenzar el ciclo.

SOLUCIN:

Pg. 20
OPERACIONES DE SALTO

Step 7 pone a disposicin del programador varias operaciones de salto de programa. Estas operaciones
se pueden utilizar en todos los bloques lgicos: bloques de organizacin (OBs), bloques de funcin
(FBs) y funciones (FCs).

Se dispone de las operaciones de salto siguientes:

---(JMP)--- Salto absoluto


---(JMP)--- Salto condicional
---(JMPN)--- Saltar si la seal es 0

Las operaciones de salto requieren un operando o meta. La meta indica el destino a donde se desea
saltar en el programa. sta se introduce encima de la bobina de salto, y se compone de cuatro
caracteres como mximo. El primer carcter ha de ser una letra del alfabeto; los restantes caracteres
pueden ser letras o nmeros (p.ej. SEG3).

La meta de destino (LABEL) ha de encontrarse siempre al principio de un segmento. Para introducirla


hay que seleccionar LABEL en el cuadro KOP.

---(JMP)--- Salto absoluto. En el ejemplo de la figura 1, la operacin de salto --(JMP) tiene como
nombre de operando o meta fin. Al ejecutarse el segmento 2, el programa saltar a la meta de destino
(LABEL) del segmento 4. En este caso, no se ejecutar lo programado en el segmento 3. Esto se
conoce como salto absoluto.

---(JMP)--- Salto condicional. La figura 2 muestra que la operacin de salto est condicionada a que
E0.1 = 1

---(JMPN)--- Salto condicional si la seal es 0. La figura 3 muestra que la operacin de salto est
condicionada a que E0.1 = 0. Ni no se introduce este contacto, se tratara de un salto absoluto.

Figura 1. Salto absoluto. Figura 2. Salto condicional si E0.1=1. Figura 3. Salto condicional si E0.1=0

Pg. 21
EJERCICIO 12. Lmpara intermitente de 1 segundo
Como ejemplo de uso de las operaciones de salto, vamos a programar un intermitente utilizando un
solo temporizador de 1 segundo. Queremos que la lm para est activa un segundo y no activa
otro segundo. Queremos que haga esto sin ninguna condicin previa.

Solucin en KOP:

Solucin en AWL: Solucin en FUP:

Pg. 22
EJERCICIO 13. Control de un semforo con luz amarilla intermitente (Temporizadores y Saltos)

Tenemos un semforo con las tres luces verde, mbar y rojo. Disponemos tambin de dos
pulsadores de mando: un pulsador de marcha y un pulsador de paro. El ciclo comienza tras pulsar el
pulsador de marcha, siguiendo la siguiente secuencia indicada. El ciclo es repetitivo hasta que se pulse
el pulsador de paro. En ese momento se apaga todo. Siempre que le d al pulsador de marcha quiero
que empiece por el verde.
Como puede verse, el funcionamiento es idntico al del ejercicio n 10, pero con el ciclo modificado.
Aqu, la luz amarilla queda intermitente.

1/ Verde durante 5 seg.

2/ Amarillo intermitente durante 2 seg.

3/ Rojo durante 6 seg

Solucin en KOP

Pg. 23
CONTADORES

En Step 7 los contadores se referencian como Z. Para stos se reserva un rea de memoria de 256
palabras de 16 bits por contador. De esta forma podremos utilizar hasta 256 contadores, dependiendo
del tipo de CPU que utilicemos.

Los bits 0 a 9 de cada palabra de contaje contienen el valor de contaje en cdigo binario. El valor fijado
por el usuario se transfiere del acumulador al contador al activarse ste. El valor de contaje puede estar
comprendido entre 0 y 999. Dentro de este margen se puede variar dicho valor utilizando las
operaciones Incrementar y Decrementar contador.

Para poner el contador a un valor determinado hay que introducir un nmero de 0 a 999, por ejemplo
127, en el siguiente formato: C# 127. C# sirve para indicar el formato decimal codificado en binario
(formato BCD: cada conjunto de cuatro bits contiene el cdigo binario de un valor decimal).

Los bits 0 a 11 del contador contienen el valor de contaje en formato BCD. La siguiente figura muestra
el contenido del contador despus de haber cargado el valor de contaje 127 y el contenido de la palabra
de contaje despus de haber activado el contador.

CONTADOR para Incremento-Decremento (ZAEHLER)

El contador se activa al producirse un flanco positivo en las entradas ZV (incremento) o ZR


(decremento). Si activamos ZV, el valor del contador se incrementa en 1, siempre y cuando el valor del
contador sea menor de 999. Si activamos ZR, el valor del contador se decrementa en 1, siempre y
cuando el valor del contador sea mayor de 0. Si activamos ambas entradas a la vez, se procesan las
dos operaciones y el valor de contaje se mantiene invariable.

El contador se desactiva cuando se produce un flanco positivo en la entrada R (reset), en cuyo caso el
contador pone el valor de contaje a 0.

La salida Q ser siempre 1 si el valor de contaje es mayor de 0. La salida Q ser 0 si el valor de contaje
es 0.

El valor del contador (0-999) se introduce en la entrada ZW con el formato C#xxx (ejemplo C#40).

La entrada S pone el valor del contador al valor de preseleccin indicado en ZW.

La salida DUAL muestra el valor actual del contador en formato de nmero entero.

La salida DEZ muestra el valor actual del contador en formato BCD.

Pg. 24
Ejemplo de funcionamiento:

Un cambio del estado de seal de 0 a 1 en la entrada E 0.2 pone el


contador Z 10 al valor 55.

Si el estado de seal de E 0.0 cambia de 0 a 1, el valor del contador Z


10 se incrementa en uno, a menos que el valor de Z 10 sea igual a
999.

Si la entrada E 0.1 cambia de 0 a 1, Z 10 se decrementa en uno, a


menos que el valor de Z 10 sea igual a 0.

Si E 0.3 cambia de 0 a 1, el valor del contador de Z10 se pone a 0.


El estado de seal de la salida A 4.0 es 1, a menos que Z 10 sea
igual a 0.

Pg. 25
CONTADOR para Incremento (Z_VORW)

Si activamos mediante un flaco positivo la entrada ZV, el valor del contador se incrementa en 1, siempre
y cuando el valor del contador sea menor de 999. El contador se desactiva y se pone a 0 si se produce
un flanco positivo en la entrada R. El resto de E/S funcionan igual que el contador anterior.

Ejemplo de funcionamiento:

Un cambio del estado de seal de 0 a 1 en la entrada E 0.2 pone el


contador Z 10 al valor 901.

Si el estado de seal de E 0.0 cambia de 0 a 1, el valor del contador Z


10 se incrementa en uno, a menos que el valor de Z 10 sea igual a
999.

Si E 0.3 cambia de 1 a 0, el valor del contador Z10 se pone a 0.

El estado de seal de la salida A 4.0 es 1, a menos que Z 10 sea


diferente de 0.

Pg. 26
CONTADOR para Decremento (Z_RUECK)

Si activamos mediante un flaco positivo la entrada ZR, el valor del contador se decrementa en 1,
siempre y cuando el valor del contador sea menor de 999. El contador se desactiva y se pone a 0 si se
produce un flanco positivo en la entrada R. El resto de E/S funcionan igual que el contador anterior.

Ejemplo de funcionamiento:

Un cambio del estado de seal de 0 a 1 en la entrada E 0.2 pone el


contador Z 10 al valor 89.

Si el estado de seal de E 0.0 cambia de 0 a 1, el valor del contador se


decrementa en uno, a menos que el valor de Z 10 sea igual a 0.

El estado de seal de la salida A 4.0 es 1 si Z 10 es diferente de 0.

Si E 0.3 cambia de 0 a 1, el valor del contador Z10 se pone a 0.

Pg. 27
EJERCICIO 14. Control de un Parking. (Contadores y Comparadores)

El funcionamiento parking queremos


que sea el siguiente:

Cuando llega un coche y el parking


est libre, queremos que se abra la
barrera. A la salida no tenemos
barrera. Cuando sale un coche
simplemente sabemos que ha salido.

En el parking caben 10 coches.


Cuando el parking tenga menos de
10 coches queremos que est encendida la luz de libre. Cuando en el parking haya 10 coches
queremos que est encendida la luz de ocupado.

Adems, queremos que si el parking est ocupado y llega un coche que no se le abra la barrera.

SOLUCIN EN AWL SOLUCIN EN KOP

Pg. 28
TEMPORIZADORES SI, SE, SS, SV y SA.

Adems de los temporizadores que hemos que hemos visto en ejercicios anteriores, tenemos otros
dos (SI y SE), y adems otros tres (SS,SV y SA) llamados temporizadores con memoria.

T em po r iz ado r de i mp u lso ( S I )

Este temporizador se comporta igual que el temporizador S_IMPULS. Este arranca con el valor de
temporizacin programado, tras recibir un flanco positivo. El temporizador sigue contando con el valor
determinado mientras la entrada est activa. Si el valor de entrada cambia de 1 a 0 antes de finalizar el
tiempo indicado, se para el temporizador. En este caso, la consulta si el estado de seal es 1, produce
un 0 como resultado. Las unidades de tiempo son d (das), h (horas), m (minutos), s (segundos) y ms
(milisegundos).

Ejemplo:
Si se produce un flanco positivo (cambio de 0 a 1) en E0.0, el
temporizador T5 se pone en marcha. El temporizador contina en
marcha con el valor indicado de 2 segundos mientras el estado de
seal de E 0.0 sea 1. Si el estado de seal de E 0.0 cambia de 1 a
0 antes de finalizar el tiempo indicado, se para el temporizador.

El estado de seal de la salida A 4.0 es 1 mientras el temporizador


est en marcha.

Ejemplos de valores de temporizacin:

S5T#2s = 2 segundos S5T#12m_18s = 12 minutos y 18 segundos

Temporizador de retardo a la conexin (SE)


Este es equivalente al temporizador S_EVERZ. Cuando la seal de activacin produce un flanco positivo,
el temporizador arranca con el valor de temporizacin programado. El valor de salida ser 1 mientras la
entrada de activacin sea 1. Si la seal de activacin pasa de 0 a 1 el temporizador se para y la salida se
hace 0.

Ejemplo:

Si el estado de seal de la entrada E 0.0 cambia de 0 a 1 (es decir,


si se produce un flanco positivo en el RLO), el temporizador T5
arranca. Si al finalizar el tiempo indicado, el estado de seal de la
entrada E 0.0 an es 1, la salida A 4.0 es 1. Si el estado de seal
de la entrada E 0.0 cambia de 1 a 0, el temporizador se para y la
salida A 4.0 es 0.

Temporizador de retardo a la conexin con memoria (SS)

El temporizador SS es equivalente al temporizador SE. El funcionamiento es similar. La diferencia


est en que el funcionamiento del temporizador es independiente de la entrada.

Este temporizador una vez arrancado (flaco positivo a la entrada) contina con el valor de temporizacin
aunque la entrada cambie a 0 antes de finalizar el tiempo. La salida es 1 cuando finaliza el tiempo
programado. El temporizador arranca (dispara) nuevamente con el valor indicad o si el RLO cambia de
0 a 1 mientras el temporizador est en marcha.

Pg. 29
Ejemplo:

Si el estado de seal de la entrada E 0.0 cambia de 0 a 1 (es decir,


si se produce un flanco positivo en el RLO), el temporizador T 5
arranca. El temporizador contina funcionando aunque cambie de
1 a 0 en la entrada E 0.0. Si el estado de seal de E 0.0 cambia de
0 a 1 antes de finalizar el tiempo, el temporizador arranca
nuevamente. El estado de seal de la salida A 4.0 es 1 cuando el
tiempo ha finalizado.

Temporizador de impulso prolongado (SV)

Este temporizador una vez arrancado (flaco positivo a la entrada), contina funcionando con el valor
programado aunque la entrada cambie de 1 a 0 antes de finalizar el valor temporizado. Mientras el
temporizador est en marcha la salida est a 1.

El temporizador arranca (se dispara) nuevamente si la entrada cambia de 0 a 1 mientras el


temporizador est en marcha.

Ejemplo:

Si el estado de seal de E 0.0 cambia de 0 a 1, el temporizador


T5 se pone en marcha. Este contina en marcha sin atender al
flanco negativo en el RLO. Si el estado de seal de E 0.0 cambia
de 0 a 1 antes de finalizar el tiempo indicado, el temporizador se
dispara nuevamente. El estado de seal de la salida A 4.0 es 1
mientras el temporizador est en marcha

Temporizador de retardo a la desconexin (SA)

El temporizador arranca si se produce un flanco negativo en el RLO (es decir, si el RLO cambia de 1 a
0). Mientras est en marcha o la entrada es 1 la salida ser 1. El temporizador vuelve a ponerse a 0 si el
RLO cambia de 0 a 1 mientras est en marcha. El temporizador no vuelve a arrancar mientras el RLO
no cambie de 1 a 0.

Ejemplo:

El temporizador arranca si el estado de seal de la entrada E 0.0


cambia de 1 a 0. Si el estado de la seal de E 0.0 cambia de 0 a 1,
el temporizador se desactiva. El estado de seal de la salida A 4.0
es 1 si el estado de seal de la entrada E 0.0 es 1 o si el
temporizador est en marcha.

Pg. 30
EJERCICIO 15. Control de una Puerta Corredera (Temporizadores + Contadores).

Queremos controlar un acceso


mediante una puerta corredera. El
funcionamiento de la puerta es el
siguiente:

Queremos que cuando alguien


pise en la goma del suelo, se
abra la puerta (Motor A4.0). La
puerta se a b r e hasta que llegue
al final de carrera (E0.0). Cuando
llega al final de carrera, comienza a
cerrarse (Motor A 4.1), hasta que
llega al final de carrera (E0.1).

Tenemos dos pulsadores de


control. El de marcha (M) y el de
paro (P). Cuando le demos al pulsador de marcha queremos que el funcionamiento sea el que
hemos explicado anteriormente. Cuando le demos al de paro queremos que deje de funcionar. Es
decir, si alguien pisa la goma no queremos que se abra la puerta.

Tambin queremos que cuando salte el rel trmico (E1.7) se pare la puerta hasta que lo
rearmemos (E1.6). Cuando haya saltado el rel trmico 5 veces queremos que se bloquee la puerta.

El sistema volver a funcionar cuando desbloqueemos la puerta.

SOLUCIN EN AWL SOLUCIN EN KOP

U E 0.6 //Si le damos al pulsador de marcha


S M 0.0 //Activa la marca 0.0
U E 0.7 //Si le damos al pulsador de paro
R M 0.0 //Desactiva la marca 0.0
U E 0.0 //Si alguien pisa la goma
U M 0.0 //Y est la puerta en marcha
U Z 1 //Y el contador 1 tiene un valor distinto de 0
S A 4.0 //Y activa el motor de abrir
U E 1.0 //Si llega el final de carrera
R A 4.0 //Para el motor de apertura
S A 4.1 //Y pon en marcha el motor de cierre
U E 1.1 //Si se ha cerrado la puerta
R A 4.1 //Para el motor de cierre
UN E 1.7 //Si ha saltado el rel trmico
ZR Z 1 //Descuenta una unidad en el contador 1
R A 4.0 //Y para el motor de abrir
R A 4.1 //Y para el motor de cerrar
U E 1.6 //Si activamos la entrada 1.6
L C#5 //Carga un 5

S Z 1 //Y mtelo en el contador 1


BE // Fin del programa

Pg. 31
EJERCICIO 16: CONTAR Y DESCONTAR CADA SEGUNDO (Intermitente + contadores).

Queremos hacer un contador que a partir de que le demos al pulsador de marcha, comience a
contar una unidad cada segundo hasta llegar a 60. Cuando llegue a 60 queremos que siga
contando una unidad cada segundo pero en sentido descendente.

Queremos que haga la siguiente cuenta:

0, 1, 2, 3, 4, .........., 58, 59, 60, 59, 58, 57,............, 2, 1, 0, 1, 2, .......

Cuando le demos al pulsador de paro queremos que deje de contar. Cuando le demos de nuevo al
pulsador de marcha probaremos dos cosas:

1) Que siga contando por donde iba.


2) Que empiece a contar otra vez desde cero.

SOLUCIN EN AWL

UN M 0.0 //Hacemos que la marca 0.0


L S5T#1S //Se active un ciclo cada segundo
SE T 1
U T 1
= M 0.0
U E 0.0 //Si le damos al pulsador de marcha
S M 0.1 //Se activa la marca 0.1
R M 0.3 //Y se desactiva la marca 0.3
(R Z 1) Empezar desde cero o pro donde
U M 0.1 //Si est activa la marca 0.1
U M 0.0 //Y llega un pulsa de la marca 0.0
UN M 0.3 //Y no est activa la marca 0.3
ZV Z 1 //Cuanta una unidad con el
contador 1
L Z 1 //Carga el contador 1
L 60 //Carga un 60
==I //Cuando sean iguales
S M 0.2 //Activa la marca 0.2
R M 0.1 //Y desactiva la marca 0.1
U M 0.2 //Si est la marca 0.2
U M 0.0 //Y llega un pulso de la marca 0.0
UN M 0.3 //Y no est la marca 0.3
ZR Z 1 //Descuenta 1 con el contador 1
L Z 1 //Carga el contador 1
L 0 //Carga un 0
==I //Si son iguales
S M 0.1 //Activa la marca 0.1
R M 0.2 //Y desactiva la marca 0.2
U E 0.1 //Si le damos al paro
S M 0.3 //Activa la marca 0.3
BE

Pg. 32
VALORES ANALGICOS DE ENTRADA/SALIDA

Aunque los PLCs trabajan internamente con datos digitales, tambin pueden admitir seales
analgicas que pueden tomar valores infinitos en el tiempo. Para ello es preciso que dichos PLCs estn
provistos de mdulos que realicen conversiones A/D para las entradas y conversiones D/A para las
salidas. De esta forma, cualquier PLC puede procesar y admitir valores analgicos procedentes por
ejemplo de un sensor o dispositivo analgico, al mismo tiempo que pueden entregar seales analgicas
ya procesadas para cualquier actuador analgico.

Estas entradas y salidas analgicas pueden ser en forma de tensin o de corriente dependiendo del
tipo de PLC utilizado. Los valores de configuracin tpicos son:

TENSIN: +/- 10 V , +/- 5 V, 0 a 5 V y de 0 a 10 V.


INTENSIDAD: +/- 20 mA, 0-20 mA y de 4-20 mA

Las seales E/S son procesadas por el PLC como informacin en tamao palabra (16 bits). El acceso
a esta palabra se realiza con las instrucciones:

PEW x para Entrada analgica en S/300 PEW 0 a 65534 IW 0 a 65534 para S7-1200
PAW x para Salida Analgica en S7-300 PAW 0 a 65534 QW 0 a 65534 para S7-1200

El direccionamiento de las palabras de entrada/salida analgicas depende de la direccin de comienzo


del mdulo. Si el mdulo analgico se coloca en el slot 4, su direccin de comienzo estndar es 256. La
direccin de comienzo de cada mdulo adicional se incrementa en 16 bytes. Esta direccin estndar se
puede comprobar en la tabla de configuracin hardware en la vista detallada.

Pg. 33
Los valores de las E/S analgicos se transforman en un nmero entero de 16 bits.

Los nmeros enteros son nmeros que incluye a los nmeros naturales distintos positivos (1, 2, 3, ...),
los negativos (..., 3, 2, 1) y al 0. Los nmeros enteros no tienen parte decimal.

EJEMPLO: +2, -1, 0, +12, -435, etc.

En realidad esto es as porque los convertidores A/D y D/A generalmente utilizan registros de 2 Byte (16
bit) de memoria para su funcionamiento.

No obstante, no debemos confundir estos 16 bits con la resolucin de los convertidores A/D y
D/A. La resolucin oscilar segn el tipo de tarjeta entre 15 bits mas signo (+S) y 8 bits. Como es lgico,
cuantos ms bits de resolucin tengan los convertidores, mayor definicin y precisin, y mayor ser la
exactitud de la lectura o escritura. Por contra, tambin ser mayor el tiempo de conversin y por lo tanto
las variaciones en el proceso tardarn ms en reflejarse en el PLC.

Si la resolucin de los convertidores es menor a 15 bits (+ S) el dato es justificado a la izquierda con


ceros en los bits menos significativos.

De forma genrica la distribucin del rea de entradas y Salidas que se utiliza es la siguiente:

Pg. 34
Rango de datos para E/S analgicas

En el rea de 16 bits los valores posibles son: 216 = 65536 (valor entero) (E/S unipolar).

Si la E/S es bipolar (+/-) necesitamos un bit de signo (S) y ahora los valores seran: -32768 a +32768.

EJEMPLO: Para un mdulo de entradas de 12 bits la resolucin ser: 212 = 4096. Pero nosotros
veremos X cantidad de resolucin, dependiendo de la tarjeta analgica.

- Tarjeta 8 bits= 28 =256 (28) de resolucin x 128 (27) = 32768 cantidad de resolucin.

- Tarjeta 12 bits= 212 =4096 (212) de resolucin x 8 (23) = 32768 cantidad de resolucin.

Dado que hay que tener en cuenta los valores de rebasamiento y desbordamiento, la resolucin en la
prctica es 27648.

Por ejemplo, para una entrada de +/- 10 V y medidas entre 0 y 1000 litros obtendr:

0 Litros ------ 0 500 Litros ------ 13824 1000 Litros ------ 27648

Lmites de lectura

Pg. 35
EJERCICIO 17. Configuracin del PLC para E/S analgicas. Lectura y Escritura en E/S analgicas.

Supongamos que disponemos de un sensor de presin que nos da una tensin entre 0 y 10 V para
valores de presin comprendidos entre 0 y 100 mBares. Queremos que dicho sensor nos controle
linealmente la apertura de una electrovlvula que dispone para su apertura de una entrada de tensin
con un rango entre 0 V (cerrada) y 10 V (mxima apertura).

Tambin queremos que cuando se alcance una presin de 80 mBares se active una seal luminosa de
aviso.

En primer lugar procederemos a la configuracin de las E/S analgicas del PLC. En HW Config veremos
las direcciones de E/S asignadas para las E/S analgicas. En nuestro caso la direcciones asignadas por
defecto han sido: PEW 752 PEW761 para las 5 entradas analgicas (AI5), y PAW 752 PAW 755
para las 2 salidas analgicas (A02). Estas direcciones se pueden cambiar actuando sobre las
propiedades de lasa E/S.

Si no cambiamos nada, la direccin de la primera entrada analgica ser PEW 752 y la direccin para la
primera salida analgica ser PAW 752.

A continuacin, deberemos asegurarnos que tanto la entrada elegida, as como la salida, estn
configuradas para trabajar en los rangos enunciados anterioremente, 0-10 V para la entrada y 0-10V
para la salida.

Pg. 36
Esto la haremos abriendo las propiedades de E/S picando dos veces sobre el slot 2.3 del bastidor. El
resultado deber ser el siguiente:

Finalmente, procederemos a realizar la programamcin del OB1.

Como los valores de la entrada podrn variar entre 0 y 27648 para los valores de 0 y 10V
respectivamente. Haciendo una regla de tres tendrmos el valor de la entrada para 80 mBares.

Valor de entrada para 80 mBares = (80x27648)/100 = 22118,4

SOLUCIN EN KOP

Pg. 37
ESCALADO Y DESESCALADO DE VALORES ANALGICOS

El escalado de los valores analgicos nos permite trabajar y comparar en las mismas unidades que la
variable controlada, en vez de trabajar con los valores numricos dados por los convertidores A/D de las
entradas analgicas. De esta forma podremos directamente operar en nuestro programa con unidades
tales como grados, metros, gramos, litros, etc. Por ejemplo:

Entrada Entrada Entrada Entrada (I) con Rango nominal de Temperatura


Nivel Presin
(V) (V) (I) desviacin del 20% conversin Rango bipolar
+10 V +5 V 20 mA 20 mA +27648 300 C 800 litros 100 mB
6400
0 0 0 4 0 (V-I) 0 C 0 0
I(20%)
-10 V -27648 -300 C

Escalado Unipolar:

Dado que lo que se pretende en el escalado es establecer una relacin lineal entre los valores que
entrega el convertidor A/D de la entrada analgica (0 a 32000), y los valores de la variable controlada
(litros, grados, etc.), utilizaremos la ecuacin de la recta para establecer dicha relacin. Las siguientes
grficas nos permitirn deducir la expresin matemtica que nos exprese el valor de dicha variable.

El escalado unipolar solo se desarrolla en el rango de valores positivos (0 a 32000) o negativos (0 a -


32000).

Con un escalado unipolar con una desviacin del 20% como es el caso de las entradas analgicas con
valores 4-20 mA, el lmite inferior del rango de valores esta al 20% del valor superior (6400 en lugar de
32000).

Finalmente, la expresin matemtica para el escalado de valores analgicos la obtendremos aplicando


la propia ecuacin de la recta:

OUT = [(HI_LIM LO_LIM) / (K2 K1)] x (IN K1) + LO_LIM

Parmetro Descripcin
OUT Valor de la variable escalada (litros, metros, mB, etc.)
HI_LIM Valor lmite superior de la escala (por ejemplo: 1000 Litros, 500 C, etc.)
HI_LIM Valor lmite inferior de la escala (por ejemplo: 0 Litros, 20 C, etc.)
K2 Valor lmite superior de la entrada analgica (32000)
K1 Valor lmite inferior de la entrada analgica (0) o 6400 para entradas 4-20 mA
IN Valor de la entrada analgica (0-32000) --- 0-10V , 0-20 mA, etc.

Pg. 38
Veamos un ejemplo:
Disponemos de un depsito de agua con capacidad entre 0-1000 litros. Para la lectura de nivel tenemos
un sensor analgico conectado a la entrada PEW752 y calibrado para una tensin unipolar entre 0-10V.

Si el depsito esta al 60 % de capacidad, el valor escalado resultante aplicando la anterior ecuacin


ser:

Valor de IN (60%) = 27648 x 0,6 =16589

OUT = [(HI_LIM LO_LIM) / (K2 K1)] x (IN K1) + LO_LIM = [(1000 0)/(27648-0)] x (16589 0) + 0 = 600 L

Si en lugar de un sensor de tensin (0-10V) utilizamos un sensor de corriente 4-20 mA, se hace
necesario utilizar un offset del 20% del valor analgico en la CPU para compensar.

El resultado para el llenado del 60% sera ahora el siguiente:

Valor de IN (60%) = (27648-5530) x 0,6 + 5530 =18801

OUT = [(HI_LIM LO_LIM) / (K2 K1)] x (IN K1) + LO_LIM = [(1000 0)/(27648-5530)] x (18801 5530) + 0 =
600 L

Pg. 39
Escalado Bipolar

El escalado bipolar se desarrolla en el rango de


valores positivo y negativo. La figura muestra un
ejemplo de un valor de entrada analgica que va
de -32000 a +32000.

NOTA ACLARATORIA: En las grficas explicativas


hemos utilizado valores de hasta 32000 para
indicar el valor mximo de la seal analgica. Sin
embargo, en la teora anteriormente explicada
sobre la conversin A/D que se produce en los
mdulos analgicos, este valor es realmente de
32768 (registro de 16 bit equivalente a 15 bit +
signo). Sin embargo, recuerde que en la prctica el
lmite mximo que se utiliza es de 27648. Los
valores comprendidos entre 27648 y 32768 son
utilizados por la CPU para conocer e indicar el
posible rebose y desbordamiento que se pueda
producir en los niveles de entrada.

Veamos el ejemplo de aplicacin con escalado bipolar:

Disponemos de un depsito de lquido y deseamos conocer su temperatura en un rango comprendido


entre +50 C y -50 C. Para ello hemos utilizado una sonda de temperatura en la entrada PEW752 que
comprende medidas entre +50 C y -50 C, y cuyo acondicionador est calibrado para la entrega de una
tensin bipolar de +/- 10 V. Deseamos hacer el escalado de la entrada analgica para cualquier valor.

Como ejemplo haremos los clculos para +25C. El resultado sera el siguiente:

Valor de IN (+25C) = (27648-0) x 0,25 = 13824

OUT = [(HI_LIM LO_LIM) / (K2 K1)] x (IN K1) + LO_LIM = [(50 (-50)/(27648-(-27648)] x (13824 (-27648) +
(-50) = (100/55296) x 41472-50 = 25 C

Pg. 40
TIPOS DE DATOS EN STEP 7

En SIMATIC S7 existen diferentes tipos de datos, bajo los cuales pueden representarse diferentes
formatos numricos. A continuacin, se muestra una lista completa de los tipos de datos.

Tipo y Tamao Rango y notacin numrica Ejemplo


Formato-Opciones
descripcin en Bits (Valores mximo y mnimo)
BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE
BYTE (Byte) 8 Nmero Hexadecimal B#16#0 a B#16#FF B#16#10
WORD (Palabra) 16 Nmero Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000
Nmero Hexadecimal W#16#0 a W#16#FFFF W#16#1000
BCD C#0 a C#999 C#998
Nmero Decimal sin
B#(0,0) a B#(255,255) B#(10,20)
signo
2#0 a
DWORD (Doble 2#1000_0001_0001_1000_10
32 Nmero Binario 2#1111_1111_1111_1111_1111_11
Palabra) 11_1011_0111_1111
11_1111_1111
DW#16#0000_0000 a
Nmero Hexadecimal DW#16#00A2_1234
DW#16#FFFF_FFFF
Nmero Decimal sin
B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)
signo
Nmero Decimal con
INT (Entero) 16 -32768 a 32767 1
signo
Nmero Decimal con
DINT (Int,32 bit) 32 L#-2147483648 a L#2147483647 L#1
signo
REAL (Nmero
Nmero en coma Mximo: +/-3.402823e+38
en coma 32 1.234567e+13
flotante IEEE Mnimo: +/-1.175495e-38
flotante)
S5TIME S5T#0H_0M_0S_10MS a
Tiempo S7 en pasos S5T#0H_1M_0S_0MS
(Tiempo 16 S5T#2H_46M_30S_0MS and
de 10 ms S5TIME#1H_1M_0S_0MS
Simatic) S5T#0H_0M_0S_0MS
Tiempo IEC en pasos
TIME -T#24D_20H_31M_23S_648MS a T#0D_1H_1M_0S_0MS
32 desde 1ms, entero con
(Tiempo IEC) T#24D_20H_31M_23S_647MS TIME#0D_1H_1M_0S_0MS
signo
DATE Fecha IEC en pasos
16 D#1990-1-1 a D#2168-12-31 DATE#1994-3-15
(Fecha IEC) de 1 da
TIME_OF_DAY Tiempo en pasos de
32 TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3
(Fecha y Hora) 1ms
CHAR
8 Caracteres ASCII A, B etc. B
(Carcter)

CALCULOS CON NMEROS ENTEROS (INT Y DINT)

Con nmeros enteros, son posibles las operaciones unitarias matemticas de suma, resta,
multiplicacin y divisin. No obstante, no se tienen en cuenta los lugares tras el punto decimal, lo cual
genera errores de redondeo con la divisin.

Operacin Tamao en Bits Funcin


+I 16 Suma el contenido de la palabra baja de los ACCUs 1 y 2 y guarda el resultado en la
palabra baja del ACCU 1.
-I 16 Resta el contenido de la palabra baja de los ACCUs 1 y 2 y guarda el resultado el la
palabra baja del ACCU 1.
*I 16 Multiplica el contenido de la palabra baja de los ACCUs 1 y 2 y guarda el resultado (32
Bit) en ACCU 1.
/I 16 Divide el contenido de la palabra baja del ACCU 2 con la palabra baja del ACCU 1. El
resultado es almacenado en la palabra baja del ACCU 1. El resto es almacenado en la
palabra alta del ACCU 1.
+D 32 Suma los contenidos de los ACCUs 1 y 2 en el ACCU 1.
-D 32 Resta los contenidos de los ACCUs 1 y 2 en el ACCU 1.
*D 32 Multiplica los contenidos de los ACCUs 1 y 2 en el ACCU 1.
/D 32 Divide el contenido del ACCU 2 con el contenido del ACCU 1 y guarda el resultado en
el ACCU 1.
MOD 32 Divide el contenido del ACCU 2 con el contenido del ACCU 1 y guarda el resto en el
ACCU 1.

Jos Mara Hurtado Torres Pg. 41


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
CLCULO CON NMEROS EN COMA FLOTANTE (REAL)

Con nmeros en coma flotante, se pueden elaborar mltiples operaciones matemticas. Aqu se
consideran las posiciones a la derecha del punto decimal.

Operacin Funcin

+R Suma de nmeros en coma flotante (32 Bit, IEEE-FP) contenidos en los ACCUs 1 y 2 y guarda el
resultado (32 bits) en el ACCU 1.

-R Resta de nmeros en coma flotante (32 Bit, IEEE-FP) contenidos en los ACCUs 1 y 2 y guarda el
resultado (32 bits) en el ACCU 1.
*R Multiplicacin de nmeros en coma flotante (32 Bit, IEEE-FP) contenidos en los ACCUs 1 y 2 y guarda el
resultado (32 bits) en el ACCU 1.
/R Divisin de nmeros en coma flotante (32 Bit, IEEE-FP). Se divide el contenido del ACCU 2 por el del
ACCU 1. El resultado (32 bits) se guarda en el ACCU 1.
SQRT Calcula la raz cuadrada del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda
el resultado (32 bits) en el ACCU 1.
SQR Calcula el cuadrado del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
LN Calcula el logaritmo neperiano del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y
guarda el resultado (32 bits) en el ACCU 1.
EXP Calcula el nmero e del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
SIN Calcula el seno del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
COS Calcula el coseno del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
TAN Calcula la tangente del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
ASIN Calcula el arcoseno del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda el
resultado (32 bits) en el ACCU 1.
ACOS Calcula el arcocoseno del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda
el resultado (32 bits) en el ACCU 1.
ATAN Calcula el arcotangente del nmero en coma flotante (32 Bit, IEEE-FP) contenido en el ACCU 1 y guarda
el resultado (32 bits) en el ACCU 1.

TIPOS DE DATOS- OPERACIONES DE CONVERSIN

Dado que frecuentemente los nmeros no existen para posteriores procesamientos de formatos
numricos, estos nmeros deben de ser ajustados con la ayuda de operaciones de conversin.

Operacin Funcin

BTI Conversin BCD a entero (16 Bit). Esta operacin convierte un nmero BCD contenido en el
ACCU 1 en un entero (16 Bit). El resultado se deposita en el ACCU1
BTD Conversin BCD a entero (32 Bit). Esta operacin convierte un nmero BCD contenido en el
ACCU 1 en un entero (32 Bit). El resultado se deposita en el ACCU1
ITB Entero (16 Bit) convertido a BCD. Esta operacin convierte un nmero entero (16 bits) contenido en el
ACCU 1 en un nmero BCD. El resultado se deposita en el ACCU1
ITD Entero (16 Bit) convertido a entero (32 bits). Esta operacin convierte un nmero entero (16 bits)
contenido en el ACCU 1 en un nmero entero (32 bits). El resultado se deposita en el ACCU1
DTB Entero (32 Bit) convertido a BCD. Esta operacin convierte un nmero entero (32 bits) contenido en el
ACCU 1 en un nmero BCD. El resultado se deposita en el ACCU1
DTR Entero (16 Bit) convertido a real (32 bits, IEEE-FP). Esta operacin convierte un nmero entero (16 bits)
contenido en el ACCU 1 en un nmero real (32 bits, IEEE-FP). El resultado se deposita en el ACCU1
(32 Bit, IEEE-FP).
RND Redondeo a entero. Esta operacin redondea el nmero convertido al entero superior.
Cuando la fraccin del nmero convertido sea de 5 o superior, se redondea al entero superior.
RND+ Redondeo al siguiente entero superior. Esta operacin redondea el nmero convertido al siguiente
entero superior.
RND- Redondeo al entero inferior. Esta operacin redondea el nmero convertido al valor de su parte entera.
TRUNC Redondeo truncado. Esta operacin toma slo la parte entera del nmero.

Jos Mara Hurtado Torres Pg. 42


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Conversin de nmero entero (16 bits) a nmero real en coma flotante (32 bits)

Las entradas analgicas, como por ejemplo PEW752 nos dan valores enteros (0-27648). Si queremos
procesar estos valores para hacer clculos matemticos o simplemente un escalado de valores, es
preciso realizar una conversin de entero a real.

Dado que dicha conversin no es directa, primero haremos una conversin de entero de 16 bits a entero
de 32 bit. En AWL lo haremos con la instruccin ITD y en KOP con la funcin I_DI.

Posteriormente, convertiremos el valor entero de 32 bits en un nmero Real en coma flotante de 32 bits.
En AWL lo haremos con la instruccin DTR y en KOP con la funcin DI_R.

El resultado en AWL y en KOP sera el siguiente:

El valor en formato real estara contenido en la doble palabra MD100

Jos Mara Hurtado Torres Pg. 43


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 18. Control de llenado de un depsito mediante sensor analgico. Escalado mediante
la funcin FC105

Se desea supervisar el llenado de un depsito de manera que la electrovlvula EV1 se active para el
llenado del depsito cuando a ste le queden tan slo 50 litros, y que se desactive cuando tenga 950
litros. Para el control, se dispone de un sensor de nivel analgico calibrado para la lectura entre 0 y 1000
litros. La seal que entrega el sensor de nivel est comprendida entre 0 y 10 V para los niveles mnimo y
mximo respectivamente.

Como podemos observar en la tabla, para los valores unipolares entre 0 y 10 V de la entrada analgica,
el convertidor A/D interno del PLC entregar valores enteros comprendidos entre 0 y 27648
respectivamente.

El escalado de estos valores lo realizaremos mediante la funcin Escalar valores SCALE (FC105)
disponible en Step 7.

La funcin FC105 toma un valor entero en la entrada IN y lo convierte en un valor real, convirtindolo a
escala en un rango comprendido entre un lmite inferior (LO-LIM) y un lmite superior (HI_LIM). El
resultado de la funcin SCALE es un nmero real que se obtiene en la salida OUT.

La funcin FC 105 realiza la siguiente operacin:

Las constantes K1 y K2 se aplican de forma diferente, dependiendo de si el valor de entrada


es BIPOLAR o UNIPOLAR.
BIPOLAR: Se supone que el valor entero de entrada debe estar entre 27648 y 27648, por lo
tanto, K1 = 27648.0 y K2 = +27648.0
UNIPOLAR: Se supone que el valor entero de entrada debe estar entre 0 y 27648, por lo
tanto, K1 = 0.0 y K2 = +27648.0

Parmetros de la
funcin FC 105

Jos Mara Hurtado Torres Pg. 44


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
En primer lugar, vamos a representar grficamente los valores necesarios para la funcin FC 105.

Antes de resolver el ejercicio, vamos a proceder a la simulacin con PLCSIM para conocer el
comportamiento de la funcin FC105.

La funcin se ejecuta cuando el estado de seal de la entrada E 124.0 es 1 (activada). Dado que
nuestro sensor es unipolar (0-10V), la entrada BIPOLAR la hacemos 0 mediante E124.1.

En este ejemplo, hemos introducido en la entrada PEW752 el valor entero 13824 correspondiente a un
nivel de 5 voltios en el sensor. Dicho valor quedara escalado en la salida OUT entre los valores 0.0
(LO_LIM) y 1000.0 (HI_LIM). El resultado de la operacin ser ahora un nmero real que obtenemos a
travs de la salida OUT y quedar escrito en la doble palabra MD100

Si la funcin se ejecuta sin errores, los estados de seal de la salida de habilitacin (ENO) y de la salida
A124.0 se ponen a 1 (activadas), y el valor de respuesta toma el valor W#16#0000.

IN PEW752 = 13824 (0 a 27648)


HI_LIM 1000.0
LO_LIM 0.0
OUT MD100 = 500 Litros

Jos Mara Hurtado Torres Pg. 45


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
SOLUCIN

Escalamos los valores contenidos en la entrada PEW752 (0-


27648) a valores entre 0 y 1000 Litros.
El resultado es un nmero real depositado en MD100.

Si el nivel del depsito es menor o igual a 50 litros, abrimos


la electrovlvula EV1 (A124.3)

Si el nivel del depsito es mayor o igual a 950 litros,


cerramos la electrovlvula EV1 (A124.3)

Jos Mara Hurtado Torres Pg. 46


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 19. Regulacin de velocidad de un ventilador. Desescalado mediante la funcin FC106

Un ventilador gira entre 0 y 1400 r.p.m en funcin de los valores 0 - 10 V obtenidos en la salida analgica
PAW752. Queremos que al accionar la entrada E124.1 gire a 500 r.p.m., y al accionar la entrada E124.2
gire a 1000 rpm.

Hemos visto anteriormente que cuando trabajamos con entradas analgicas, el escalado nos permite
programar directamente con valores de ingeniera (temperatura, presin, caudal, nivel, etc), lo cual nos
facilita la programacin.

Ahora trataremos el caso contrario, es decir, necesitamos controlar la tensin (V) o intensidad (I) que
deber entregar una salida analgica, segn valores de ingeniera (en nuestro rpm). Necesitaremos por
tanto, hacer un desescalado de valores de ingeniera a valores enteros entre 0-27648, que son los que
realmente entiende el convertidor D/A del mdulo analgico del PLC. La figura siguiente explica el
proceso:

Sonda
temperatura
0-500 C

Sensor (0-20 mA) A/D Registro 16 bit (0-27648) asociado a PEW752 ESCALADO (FC105)(0-500 C) P

Programa OB1 (0-500 C) DESESCALADO (FC106) Registro (0-27648) asociado a PAW752 D/A (0-10V

El desescalado lo realizaremos mediante la funcin Desescalar valores (UNSCALE) FC106. sta


funcin toma en la entrada IN un valor real que est ajustado a escala en un rango comprendido entre un
lmite inferior y un lmite superior (LO_LIM y HI_LIM), y lo convierte en un valor entero. El resultado se
escribe en la salida OUT.

La funcin FC 106 realiza la siguiente operacin:

Las constantes K1 y K2 se aplican de forma diferente, dependiendo de si el valor de entrada


es BIPOLAR o UNIPOLAR.
BIPOLAR: Se supone que el valor entero de entrada debe estar entre 27648 y 27648, por lo
tanto, K1 = 27648.0 y K2 = +27648.0
UNIPOLAR: Se supone que el valor entero de entrada debe estar entre 0 y 27648, por lo
tanto, K1 = 0.0 y K2 = +27648.0

Parmetros de la
funcin FC 105

Jos Mara Hurtado Torres Pg. 47


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
SOLUCIN

Cuando activemos la entrada E124.1 transferimos a


la doble palabra MD50 (real) el dato 500 rpm.

Cuando activemos la entrada E124.2 transferimos a


la doble palabra MD50 (real) el dato 1000 rpm.

Al activar E124.0, el valor contenido en MD50 es


desescalado entre 0 y 1400 rpm. El valor resultante lo
obtenemos en la salida analgica PAW752.

Si la salida analgica PAW752 la hemos configurado


previamente para entregar tensiones entre 0 a 10 V.
La tensin que obtendremos para 1000 r.p.m ser de
7,15 V y de 3,58 V para 500 r.p.m.

Jos Mara Hurtado Torres Pg. 48


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
TRABAJAR CON BLOQUES DE DATOS (DB)

Los bloques de datos (DB) son reas de datos del programa de usuario (OB1) en las que se almacenan
datos en forma de una tabla organizada. Estos datos pueden ser utilizados directamente desde el
programa de usuario (OB1) o desde bloques de funcin (FB).

En un bloque de datos (DB) no se programa nada. Se utilizan para almacenar valores iniciales y leer o
escribir datos actuales de determinadas variables, que posteriormente pueden ser usadas por el
programa de usuario.

Para guardar un dato, tenemos que poner nombre a la variable, definir el formato en el que lo
queremos, y el valor inicial. El valor inicial siempre es el mismo, su propio nombre ya lo indica. Cuando
este valor cambie, se almacenar en otra columna que es el valor actual.

Los bloques de datos se introducen en Step 7 mediante la secuencia indicada en la figura:

Para poderla ver el contenido, tenemos que ir al men Ver > datos, o abrir directamente el bloque
en la carpeta del proyecto.

A continuacin, definiremos el nombre de la variable, el tipo y el valor inicial.

Jos Mara Hurtado Torres Pg. 49


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Una vez completado el bloque, procederemos a guardarlo y a cargarlo en el autmata junto al OB1.

Para acceder a los datos de un DB tenemos dos posibilidades. Podemos abrir primero un DB y luego
acceder directamente a la palabra de datos, o podemos decir cada vez a que DB y a que palabra de
datos queremos acceder.

AUF DB 1 L DB1.DBW 0
L DBW 0 T MW 10
T MW 10 BE
BE

Para acceder a un dato, le llamamos DB.... Puede ser DBB si es un byte, DBW si es una palabra, DBD
si es una doble palabra o DBX 0.0 si es un bit.

Tambin podemos dar un nombre al DB y acceder a los datos por su nombre.

Por ejemplo en el DB que hemos creado antes podramos acceder a los datos del siguiente modo:

L DATOS.VALOR_1 DATOS es el nombre del DB y VALOR_1 es el nombre del dato.

Ejemplo:

Leemos el valor Temperatura y la llevamos a MD50. Escribimos el valor 34 en la variable PIEZAS.


Observe que aunque el valor inicial de piezas era 6, al ejecutar el programa la variable ha pasado a
valer 34.

Hemos utilizado el simulador PLCSIM para comprobar el funcionamiento de nuestro programa.

Jos Mara Hurtado Torres Pg. 50


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 20. CONTROL DE PESADO. Creacin y manejo de DBs.

Tenemos una cinta transportadora por donde se desplazan piezas. Queremos hacer la seleccin de
stas segn su peso, de forma que las piezas que se salgan de un margen de peso estipulado tanto por
arriba como por debajo se desechen a travs de una trampilla. Tenemos unas luces indicadoras de
pieza buena o mala. Queremos que mientras est la pieza debajo del sensor de peso se encienda la luz
correspondiente.

La cinta se ha de detener para el pesado de las piezas durante 5 segundos; pasado ese tiempo
continuar su recorrido. La trampilla se abrir solo durante 3 segundos cuando la pieza defectuosa se
site sobre el sensor de posicin SP2.

Se consideran piezas buenas aquellas que tengan un peso entre 4 y 5 Kg.

El pesado lo vamos a realizar mediante una sonda analgica calibrada para pesos entre 0 y 10 Kg. Para
este rango de medida, la sonda nos dar valores de tensin entre 0 y 10 Voltios.

SOLUCIN:
Jos Mara Hurtado Torres Pg. 51
Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Configuramos en primer lugar la CPU, en nuestro caso una S7-314C-2DP, y definimos nuestra tabla de
smbolos.

Seguidamente procederemos a insertar un bloque de datos DB1 que utilizaremos para definir los pesos
lmite inferior y superior. Una vez configurado queda como indica la siguiente figura:

Programa en KOP

Jos Mara Hurtado Torres Pg. 52


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
PROGRAMACIN ESTRUCTURADA. Trabajar con Funciones (FCs)

La programacin estructurada se refiere al control de ejecucin de un programa. La regla general es


que las instrucciones se ejecuten sucesivamente una tras otra, pero diversas partes del programa se
ejecutan o no dependiendo de que se cumpla alguna condicin. Adems, hay instrucciones (los bucles)
que deben ejecutarse varias veces, ya sea en nmero fijo o hasta que se cumpla una condicin
determinada.

Algunos lenguajes de programacin ms antiguos como Fortran o Basic, se apoyaban en una sola
instruccin para modificar la secuencia de ejecucin de las instrucciones mediante una transferencia
incondicional de su control (con la instruccin goto, del ingls "go to", que significa "ir a"). Pero estas
transferencias arbitrarias del control de ejecucin hacen los programas muy poco legibles y difciles de
comprender. A finales de los aos sesenta, surgi una nueva forma de programar que reduce a la
mnima expresin el uso de la instruccin goto y la sustituye por otras ms comprensibles.

Jos Mara Hurtado Torres Pg. 53


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Esta forma de programar se basa en un famoso teorema, desarrollado por Edsger Dijkstra, que
demuestra que todo programa puede escribirse utilizando nicamente las tres estructuras bsicas de
control siguientes:

Secuencia: el bloque secuencial de instrucciones, instrucciones ejecutadas sucesivamente, una


detrs de otra.

Seleccin: la instruccin condicional con doble alternativa, de la forma " if condicin then
instruccin-1 Else instruccin-2 ".

Iteracin: el bucle condicional "while condicin do instruccin", que ejecuta la instruccin


repetidamente mientras la condicin se cumpla.

Los programas que utilizan estas estructuras de control bsicas, se llaman programas estructurados.

sta es la nocin clsica de lo que se entiende por programacin estructurada (llamada tambin
programacin sin goto) que hasta la aparicin de la programacin orientada a objetos se convirti en la
forma de programar ms extendida. Una caracterstica importante en un programa estructurado es que
puede ser ledo en secuencia, desde el comienzo hasta el final sin perder la continuidad de la tarea que
cumple el programa, lo contrario de lo que ocurre con otros estilos de programacin.

Cuando en la actualidad se habla de programacin estructurada, nos solemos referir a la divisin de un


programa en partes ms manejables (usualmente denominadas segmentos, mdulos o subrutinas). As,
la visin moderna de un programa estructurado es un compuesto de segmentos, los cuales puedan
estar constituidos por unas pocas instrucciones. Cada segmento, mdulo o subrutina tiene solamente
una entrada y una salida, asumiendo que no poseen bucles infinitos y no tienen instrucciones que jams
se ejecuten.

En el Step 7, las posibilidades de estructuracin del programa pueden ser diversas, tal como indica la
siguiente figura:

Dependiendo de los requerimientos del proceso, el programa puede ser estructurado en bloques
diferentes, donde podemos almacenar el programa de usuario y dems datos relacionados.

Bloques de Organizacin (OBs). Estos bloques constituyen la interface entre el sistema


operativo del PLC y el programa de usuario. El programa completo puede almacenarse en un
OB, que es ejecutado cclicamente por el sistema operativo (programa lineal) o puede dividirse y
almacenarse en distintos bloques (programa estructurado). El programa principal es siempre el
bloque de organizacin llamado OB1.

Funciones (FCs). Una funcin (FC) es como una subrutina. Una FC es un bloque lgico que
generalmente realiza una operacin especfica con una serie de valores de entrada. La FC
almacena los resultados de esta operacin en posiciones de memoria. stas se utilizan para
realizar operaciones estndar y reutilizables, p. ej. en clculos matemticos, operaciones
lgicas, etc. Los FCs se puede llamar varias veces en diferentes puntos de un programa. Esto
facilita la programacin de tareas que se repiten con frecuencia. Las FC no tienen bloques de
Jos Mara Hurtado Torres Pg. 54
Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
datos DB asociados. Step 7 dispone de una extensa librera de bloques FC ya programados. Un
ejemplo claro son las ya conocidas FC105 y FC106 que hemos utilizado anteriormente para el
escalado y desescalado de E/S analgicas.

Bloques de funcin (FB). Un bloque de funcin (FB) es como una subrutina con memoria.
El FB almacena los parmetros de E/S en una memoria variable integrada en un bloque de
datos (DB), o en un DB "instancia". Los bloques de funcin estn concebidos para tareas muy
repetitivas o funcionalidades complejas, como tareas de control en lazo cerrado.

Bloques de datos (DB). Los bloques de datos (DB) son reas de datos del programa de usuario
en las que los datos son distribuidos de forma estructurada.

EJERCICIO 21. Programacin estructurada con FCs

Queremos que si la entrada E 124.0 est activa funcione una parte del programa contenido en FC1,
y que si no est activa funcione otra parte del programa contenido en FC2. Desde el OB1
indicaremos cuando tiene que acceder a uno y a otro.

Programa en FC1: Cuando pulsemos E124.1 activar la salida A124.0 durante 5 segundos.
Programa en FC2: Cuando pulsemos E124.1 activar la salida A124.0 durante 10 segundos.

Para crear las 2 FCs, lo hacemos del mismo modo que hicimos para crear un nuevo DB. Una vez
tengamos creadas las dos FCs ya podemos entrar en ellas y escribir su programa.

Jos Mara Hurtado Torres Pg. 55


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
PROGRAMA OB1 PROGRAMA FC1 PROGRAMA FC2

LLAMADAS A LAS FCs CON Y SIN PARMETROS

Cuando programamos con FCs tenemos que llamarla desde el OB1 para que se ejecute. Esta llamada
puede ser de tipo incondicional o condicional. Adems, podemos programar las FCs con o sin
parmetros. La siguiente figura muestra la diferencia.

Jos Mara Hurtado Torres Pg. 56


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
En el segmento 3 del OB1, hacemos una llamada incondicional a la funcin FC2 sin parmetros. sta
siempre sumar lo mismo (6+19), y el resultado siempre ser 25. El resultado lo tendremos presente en
MW40.

En los segmentos 1 y 2 estamos haciendo una llamada incondicional y condicional respectivamente a la


funcin FC1. Sin embargo, observe que esta funcin es parametrizable, dado que desde el OB1 se nos
pedir los valores a sumar. Estos valores pueden ser ahora diferentes. En el primer segmento, la FC1
nos suma 8+25 y deposita el resultado en MW30, en el segundo segmento sumamos 5+10 y
depositamos el resultado en MW20.

Para hacer una funcin FC con parmetros, tan slo tenemos que rellenar la tabla de variables superior
que nos aparece en la pantalla al abrir la FC.

NOTA: si la tabla de variables est oculta pulse y arrastre con el ratn sobre la lnea indicada.

Veremos que tenemos varios campos para definir:

La de IN sirve para definir los datos de entrada a la funcin.

La lnea de OUT sirve para definir las salidas de la funcin.

Jos Mara Hurtado Torres Pg. 57


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
La lnea de IN/OUT sirve para definir los valores que dentro de la funcin pueden ser entradas y salidas.

La lnea de TEMP sirve para definir valores intermedios. Son valores que no son entradas ni salidas de
la funcin. Son resultados intermedios que no nos interesa ver desde fuera de la funcin.

Tenemos que definir tambin el nombre de la variable y el tipo de datos. Observe que en nuestro caso
hemos introducido VALOR1 y VALOR2 como entradas INPUT. Como salida OUT hemos definido
RESULTADO. La almohadilla no la escribimos nosotros. Esto nos indica que es una variable local.
Slo la podemos utilizar con su nombre dentro de la FC 1 que es donde la hemos definido.

De este modo tenemos una funcin que suma nmeros enteros pero no le hemos dicho qu nmeros.
Cada vez que la utilicemos sern nmeros distintos.

EJERCICIO 22. Control de produccin de un gallinero. (Programacin estructurada, bloques de


datos, flancos.)

Para llevar el control de produccin del gallinero, tenemos que optimizar las horas de luz y las horas de
oscuridad que va a tener el gallinero con objeto de obtener la mayor cantidad de huevos posible.

Jos Mara Hurtado Torres Pg. 58


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Llevaremos el control de los huevos que ponen las gallinas mediante dos
contadores; uno para llevar la cuenta de los huevos puestos hoy, y otro con los
huevos que pusieron el da anterior.

El funcionamiento deber ser el siguiente:

Si hoy han puesto ms huevos que ayer, supondremos que las gallinas estn
contentas. Entonces lo que haremos ser disminuir en 8 los minutos de luz y los
minutos de oscuridad. De manera que les hacemos el da ms corto.

Si hoy han puesto menos huevos que ayer, supondremos que las gallinas estn tristes. Entonces lo que
haremos ser aumentar en 5 los minutos de luz y los minutos de oscuridad. De manera que les
hacemos el da ms largo.

Si hoy han puesto los mismos huevos que ayer, supondremos que las gallinas estn indiferentes.
Entonces lo que haremos ser disminuir en 1 los minutos de luz y los minutos de oscuridad. Iremos
haciendo el da ms corto poco a poco hasta que pongan menos huevos.

SOLUCIN:

Haremos una programacin estructurada por bloques.

En primer lugar haremos dos bloques de datos (DBs) donde guardaremos los datos que luego vamos a
utilizar.

DB1 Se llamar PUESTAS, y en el guardaremos los huevos puestos hoy y los que pusieron ayer.

Haremos un DB2 que se llame TIEMPOS. All meteremos los minutos iniciales de luz y de oscuridad
que va a tener el gallinero, y adems la cantidad de minutos de luz y de oscuridad que tendramos que
sumar o restar en su caso.

Para contar los huevos, haremos una funcin FC1 llamada CONTADOR con dos contadores; uno para
contar los huevos puestos hoy y otro para los huevos puestos ayer. Los datos de los contadores los
enviaremos a sus correspondientes variables en DB1. Las puestas de huevos la simularemos mediante
contactos.

Jos Mara Hurtado Torres Pg. 59


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Con otra funcin FC2 llamada COMPARATIVA haremos la comparacin de las puestas de huevos de
ayer y de hoy, y segn los resultados llevaremos a cabo las operaciones correspondientes.

Jos Mara Hurtado Torres Pg. 60


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Finalmente, en el programa principal OB1 decidiremos cuando tenemos que acceder a cada uno de los
bloques que hemos hecho.

La FC1 la va a tener que estar siempre activa. Siempre tiene que estar vigilando si hay un nuevo huevo
y registrar la cuenta en su correspondiente DB.

La FC2 la tendr que ejecutarse cada da. Tendramos que hacer un temporizador con la suma de los
minutos de luz y de oscuridad y cuando pase el da que haga la comparacin y la suma o resta de los
tiempos.

Podemos acortar los tiempos para la simulacin con PLCSIM.

Jos Mara Hurtado Torres Pg. 61


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
INSTRUCCIONES DE DESPLAZAMIENTO Y ROTACIN

Step 7 dispone de 8 instrucciones para desplazamiento y rotacin de bit:

La entrada IN contiene la palabra o doble palabra a desplazar o rotar.


La entrada N nos indica la cantidad de posiciones que se tienen que mover los bit.
El resultado se entrega en OUT.

Veamos un ejemplo con la instruccin SHR_W (Desplazar 16 bit a la derecha)

Si MW10 contiene 00001011001110101 y MW = 3 , el desplazamiento ser de 3 posiciones a la


derecha. El resultado en MD20 sera el siguiente:

MW10 0001 0110 0111 0101

MW20 0000 0010 1100 1110 101 (se introducen 3 ceros desde la izquierda)

Si en lugar de desplazar lo que hacemos es rotar, lo que ocurre es que lo que se pierde por un lado
entra por el lado contrario. Esta operacin la hace en el acumulador. Slo podemos rotar dobles
palabras porque el acumulador es de 32 bits. Veamos un ejemplo con ROR_DW (Rotar 32 bit a la
derecha).

Para MW5 = 2

Jos Mara Hurtado Torres Pg. 62


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 23. Desplazamiento de bits.

Queremos que un bit del byte de salidas AB124 vaya desplazndose de izquierda a derecha y de
derecha a izquierda, comenzando por el bit de la salida A124.0. La velocidad de desplazamiento
ser de 1 segundo.

El resultado visto con PLCSIM sera el siguiente:

SOLUCIN:

Jos Mara Hurtado Torres Pg. 63


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 24. Planta Embotelladora (Desplazamiento y rotacin de bits. Programacin
estructurada).

Tenemos una planta de embotellado distribuida en lnea con tres mquinas: una taponadora, una
etiquetadora y una selladora.

Las botellas se desplazan de posicin a posicin en la cinta cada segundo. Queremos que cuando las
botellas lleguen debajo de las mquinas, stas se pongan en marcha, pero si llega un hueco no
queremos que las mquinas acten. Con el sensor S1 (E124.0) detectamos cuando pasa una botella
o cuando pasa un hueco.

SOLUCIN:

Platearemos el problema, considerando 16 posiciones sobre la cinta. Cada posicin estar relacionada
con un bit en un registro de 16 bits (en nuestro caso la palabra MW10).

Cuando S1 detecte una botella, la marca M10.4 se pondr a 1 y procederemos al desplazamiento hacia
la derecha de este bit. El tiempo en cada posicin lo fijaremos en 1 segundo mediante un generador de
pulsos. Cuando este bit se site en las marcas M11.4 (taponadora), M11.2 (etiquetadora) y M11.1
(selladora) se activar la salida correspondiente a cada mquina para que ejecute su proceso.

Para entender la distribucin de marcas sobre la figura tenemos que tener en cuenta como se
produce el desplazamiento de un bit hacia la derecha con la instruccin SHR_W. La figura siguiente
nos lo aclara:

Para conocer mejor la utilidad de las funciones FC, vamos a resolver el problema utilizando 4 FCs y
una OB1.

En cada FC vamos a programar una de las operaciones que necesitamos realizar. Despus desde el
OB1 diremos cuando necesitamos realizar cada una de las operaciones.

Jos Mara Hurtado Torres Pg. 64


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
FC1 Generador de pulsos de 1 segundo

FC2 Con esta funcin vamos a meter un 1 en el bit 10.4 del registro de marcas MW10 cada vez
que se detecte una botella.

FC3 Con esta funcin vamos a desplazar el bit M10.4 hacia la derecha. Observe en el grfico
anterior como se produce este desplazamiento.

FC4 - En esta vamos a proceder a la activacin de las mquinas cuando lleguen las botellas debajo
de ellas.

Jos Mara Hurtado Torres Pg. 65


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
Ahora tan slo nos queda programar el OB1 para organizar cundo se tienen que ejecutar cada
una de estas FC.

OB1- Programa principal.

Ejecucin incondicional de FC1.

Ejecucin incondicional de FC2.

Ejecucin condicional de FC3. Ejecuta FC3 cuando M0.0 se active. En


nuestro caso cada segundo.

Ejecucin incondicional de FC4.

La simulacin del programa con PLCSIM le resultar til

Jos Mara Hurtado Torres Pg. 66


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
DETECCIN DE ERRORES. Men Informacin del mdulo.

En ocasiones, la CPU se nos va a STOP o simplemente nos da un error. Para estos casos, STEP 7 nos
ofrece un men de informacin donde nos dice cual es el problema por el cual se encuentra la CPU en
ese estado.

Desde el men principal de la ventana de programacin, podemos acceder a dicho men a travs de
Sistema de destino>informacin del mdulo. Se nos mostrar una ventana como la siguiente:

En la pestaa de Bfer de diagnstico se nos indica los pasos que ha seguido la CPU, con indicacin
del error.

La pestaa Pilas se nos indicar el camino que ha seguido la CPU antes de irse a STOP o generar el
error.

Si tenemos activo el botn USTACK veremos el estado en el que estaba la CPU en el instante en el que
se fue a Stop. Adems tenemos el botn Abrir bloque. Si pinchamos en este botn se abrir el bloque
que contena el error y nos sealar con el ratn la instruccin que contiene el error.

Adems tenemos otras fichas en las cuales nos da ms informacin del mdulo. Podemos ver el tiempo
mximo, el tiempo mnimo y el tiempo real del ciclo de scan.

Podemos ver la cantidad de memoria que estamos ocupando o el ciclo de scan que tenamos con
nuestro programa, etc.

Jos Mara Hurtado Torres Pg. 67


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
BLOQUES DE ORGANIZACIN (Otros OBs)

Los bloques de organizacin (OBs) son la comunicacin entre el sistema operativo de la CPU y el
programa de usuario. Con los OBs podemos:

- Arrancar la CPU.
- Ejecucin cclica o intermitente temporalmente.
- Ejecucin a determinadas horas del da.
- Ejecucin despus de transcurrir un tiempo preestablecido.
- Ejecucin al producirse errores.
- Ejecucin al producirse alarmas de proceso.

Cada uno de los OBs tienen una prioridad asignada.

Tenemos la posibilidad de cambiar nosotros esta prioridad. No se pueden ejecutar nunca dos OBs a la
vez.

Relacin de OBs disponibles en Step 7:

OB1 Principal.
OB10.........0B17 Alarmas horarias.
OB20.........OB23 Alarmas de retardo (SFC 32)
OB30.........OB38 Alarmas cclicas.
OB40.........OB47 Alarma de proceso.
OB80 Error de tiempo (SFC 43 redispara tiempo)
OB81 Fallo de alimentacin.
OB82 Alarma de diagnstico.
OB83 Alarma insertar/extraer mdulos.
OB84 Avera CPU.
OB85 Error de ejecucin.
OB86 Fallo de DP o en bastidor.
OB87 Error de comunicacin.
OB100 Rearranque completo.
OB101 Rearranque.
OB121 Error de programacin.
OB122 Error acceso a la periferia.

Descripcin de algunas OBs.

OB 1: Programa cclico principal.

OB10...0B17 ALARMAS HORARIAS:

Se activan llamando a la SFC 30. Si no estn activadas la CPU no las lee. Se programan con la SFC
28. Cuando se ejecutan una vez se anulan. Tambin se pueden ejecutar peridicamente.

Si la CPU realiza un rearranque completo, cada OB de alarma horaria configurado mediante una SFC
adopta otra vez la configuracin ajustada con STEP 7. No puede ejecutar dos OBs de alarma a la vez.

Jos Mara Hurtado Torres Pg. 68


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
OB20...OB23 ALARMAS DE RETARDO:

Arrancan mediante una llamada a la SFC 32. Arrancan despus de un tiempo preestablecido. Puede
anularse una alarma que todava no ha sido arrancada. (SFC 33). Un rearranque completo borra
cualquier evento de arranque de un OB de alarma de retardo.

OB30.........OB38 ALARMAS CCLICAS:

Tienen un valor de tiempo prefijado. No puede durar ms tiempo la ejecucin del OB que el tiempo de
volver a arrancar.

OB40...OB47 ALARMAS DE PROCESO:

Dentro de las alarmas de proceso, las prioridades se establecen con STEP 7. La activacin se
parametriza con STEP 7. No se pueden ejecutar dos a la vez.

OB DE ERROR DE TIEMPO:

Si no es programada la CPU pasa a STOP cuando se produce un error de tiempo. Si en un mismo ciclo
se llama dos veces al OB 80 debido a la superacin del tiempo de ciclo, la CPU pasa a STOP. Es
posible evitar esto llamando a la SFC 43 en un lugar adecuado.

OB 100 REARRANQUE COMPLETO:

Cuando la CPU realiza un rearranque completo, accede al OB 100. Lee este bloque una sola vez y a
continuacin pasa a leer el OB 1 de manera cclica. Hasta que no se ejecuta un nuevo rearranque no se
vuelve a leer el OB 100. Normalmente se utiliza para establecer las condiciones iniciales de un proceso.

El OB 100 tambin es til para retardar el arranque. El tiempo de ciclo de scan slo afecta al OB 1.
Nosotros podemos programar un bucle con un temporizador de 3 segundos dentro del OB 100, de
manera que cuando ponemos la CPU en marcha, hasta los tres segundos no se empieza a leer el OB 1
y por consiguiente no se empieza a ejecutar el programa. Esto nos puede ser til en instalaciones en las
que tengamos, por ejemplo, variadores de frecuencia que necesiten unos segundos para estar a punto y
empezar el programa.

Jos Mara Hurtado Torres Pg. 69


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 25. (Trabajo con OB100). Retardo de arranque del PLC.

Retardar la ejecucin del OB1 durante 10 segundos utilizando el OB100.

SOLUCIN:

Programaramos en OB100 lo siguiente:

EJERCICIO 26. (Trabajo con OBs de Alarma Cclica). Intermitente de 2 segundos.

Queremos que la salida A124.0 del PLC se ponga en modo intermitente cada 2 segundos.

Para esto vamos a configurar la alarma cclica OB35 del PLC. Esto lo hacemos abriendo desde HW
Config las propiedades de la CPU. En la pestaa Alarmas cclicas definimos el tiempo de ejecucin
cclico de OB35 en 2000 mseg.

A continuacin, insertaremos un OB35 junto al OB1 y lo programamos de la siguiente manera:

Finalmente, cargaremos sobre la CPU, la configuracin y los correspondientes OB1 y OB35.

Jos Mara Hurtado Torres Pg. 70


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares
EJERCICIO 27. (Trabajo con OBs de Alarma Horaria).

Queremos que cada minuto a partir de una fecha y hora determinada se ejecute un programa que nos
active el byte de salidas AB124.

Para programar este tipo de alarmas, tenemos que hacerlo a travs del hardware. Vamos a hacer un
proyecto nuevo, y vamos a entrar en el hardware. Una vez lo tengamos definido, pinchamos encima de
la CPU con el botn derecho, y entramos en propiedades de la CPU.

Veremos que tenemos varias fichas. Vamos a la ficha de alarmas horarias. Dependiendo de la CPU que
tengamos, tendremos unos OB disponibles para programar alarmas. Por ejemplo, si tenemos una CPU
313C-2DP veremos que slo tenemos disponible el OB10.

Para programar la alarma tendremos que activar la casilla activa. Adems tendremos que decirle cada
cuanto tiempo queremos que se produzca, y desde cuando queremos que se active.

Esto significa que cada cierto tiempo, se va a acceder a la OB 10. Se ejecutar lo que all diga y el
programa seguir luego por donde iba.

Luego tendremos que programar el OB10. Lo que no habr que hacer, ser programar una llamada al
OB 10. A los OB no se les llama.

En OB10 tendramos lo siguiente:

OB10 - Programa que se ejecutar cada minuto.

0B1- Para poner las salidas nuevamente a cero.

Jos Mara Hurtado Torres Pg. 71


Departamento de Electricidad-Electrnica I.E.S. Himilce - Linares

También podría gustarte