Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NIVELIYNIVELII
http://industrial.uv.es
NDICE
Adems, con el software NETPRO (incluido en el STEP 7 a partir de la versin 5.x) podre-
mos visualizar de forma grfica, las redes y conexiones entre los diferente equipos. Adems po-
dremos manejar estos enlaces a las redes con el ratn de la programadora de forma grfica.
En el primer proyecto que vamos a realizar en el curso, vamos a insertar un solo equipo.
Dentro del equipo vamos a incluir tanto el hardware que estemos utilizando, como los blo-
ques de programacin (programa propiamente dicho).
Esto nos aportar varias ventajas. La programadora sabr el equipo que vamos a gastar
en nuestro trabajo. Adems sabr las tarjetas que tenemos instaladas y las opciones de las que
dispone cada tarjeta. Si intentamos utilizar alguna instruccin que no soporta nuestra CPU, nos
avisar indicndonos que aquella instruccin es imposible. Adems cuando entremos en la opcin
Propiedades del objeto de cualquier objeto que tengamos en la instalacin, tendremos disponi-
bles las propiedades de ese objeto en concreto.
Cada vez que hagamos un proyecto nuevo tendremos que definir un hardware nuevo para
cada uno de los equipos que tengamos en la red.
Para generar un nuevo proyecto, podemos ir bien al men Archivo > nuevo, o bien al bo-
tn que tiene como icono una hoja en blanco.
Aparece una ventana en la que podemos decir si queremos crear un proyecto nuevo o una
librera nueva.
A continuacin le damos el nombre que queramos al proyecto. Una vez tenemos el nom-
bre, aceptamos y observaremos que tenemos una ventana con el nombre de nuestro proyecto en
la parte izquierda y con la red MPI en la parte derecha.
El icono de la red MPI aparece por defecto. Es necesario que tengamos al menos una red
MPI porque la programacin de la CPU se hace a travs del puerto MPI de la CPU.
Vamos a rellenar el proyecto. Lo primero que tenemos que hacer es insertar los equipos
que van a formar parte de nuestro proyecto. En este caso vamos a insertar un solo equipo. Para
ello, vamos al men de insertar y elegimos el equipo con el que vayamos a trabajar. En este ca-
so tenemos un equipo 300.
Veremos que en nuestra ventana del proyecto se ha creado un equipo. Hacemos doble clic
sobre el equipo, y en la parte derecha de la ventana, veremos que aparece un icono que se llama
Hardware.
Hacemos doble clic sobre l y entramos el editor de hardware. En principio veremos que
est todo en blanco. Para insertar los mdulos que nosotros tenemos en nuestro equipo, tendre-
mos que abrir el catlogo. Suele estar abierto por defecto. Si no lo est, podemos abrirlo con el
botn que representa un catlogo, o desde dentro del men de Ver, con la opcin Catlogo.
(Tambin funciona con la combinacin de teclas Ctrl K).
Una vez tengamos el catlogo abierto, desplegamos la cortina del equipo que tengamos
que definir. En este caso desplegamos la cortina de SIMATIC 300.
Lo primero que tenemos que insertar es un bastidor. Desplegamos la cortina de los basti-
dores, y vemos que tenemos un perfil soporte. Hacemos doble clic sobre el perfil soporte. Vere-
mos que en la instalacin del hardware se sita en la posicin cero.
Tenemos que comprobar que esta referencia coincida con la referencia del elemento que
tenemos nosotros.
En la posicin 3 no podemos insertar cualquier mdulo. Es una posicin reservada para los
mdulos IM. Estos mdulos sirven para realizar configuraciones en ms de una lnea de bastidor.
En nuestro caso tenemos una nica lnea de bastidor. No tenemos tarjeta IM. En este caso tene-
mos que dejar la posicin 3 libre.
Veremos que debajo de esta tabla, se va creando otra en la que podemos ver los elemen-
tos que vamos creando con sus referencias y adems con las direcciones que le corresponde a
cada uno de los mdulos.
Una vez hemos terminado la configuracin, tenemos que guardarla. Estamos trabajando
con dos CPU a la vez. Estamos trabajando con la programadora y con el PLC. Tenemos que
guardar la informacin en ambos sitios. Con el icono que representa un disquete, guardamos la
informacin en la programadora, y con el icono que representa un PLC y una flecha que entra,
guardamos la informacin en el PLC. Una vez tenemos la informacin guardada, salimos del edi-
tor de hardware.
Veremos que volvemos a la misma ventana en la que estbamos antes, es decir, volvemos
al administrador de SIMATIC. En nuestro proyecto, tenemos el equipo. Vemos que al lado del
equipo hay un + . Si desplegamos todo lo que tenemos, vemos que dentro del equipo est la CPU,
la carpeta para el programa, los bloques y las fuentes. Si pinchamos encima de los bloques, ve-
mos que en la parte derecha tenemos los datos de sistema y el OB 1.
Es el primer bloque que vamos a programar. Aparece por defecto, aunque est vaco.
Estando en el administrador de SIMATIC vemos que tenemos abierta una ventana con
nuestro proyecto que acabamos de crear. En los iconos de la parte superior vemos que tenemos
uno seleccionado que representa un PC y un PLC cortados por una doble barra roja. Este es el
icono de offline. A su lado vemos que tenemos otro icono que representa el mismo PC y el mis-
mo PLC pero unidos con una lnea verde. Este es el icono de online.
Versiones 3 y 4 Versin 5
Si aparecen bloques que no sean los de sistema ( SFCs o SFBs) quiere decir que en el
PLC tenemos algn programa. Antes de empezar con nuestro programa vamos a borrar todo lo
que tenga el PLC.
Para ello pinchamos encima de la CPU de online. En esta posicin vemos al men Sistema
Destino, y elegimos la opcin Borrado Total.
A la hora de trabajar sobre los distintos bloques, lo podemos hacer tanto en offline como
en online. A la hora de guardar lo que hemos programado, lo podemos guardar tanto en la pro-
gramadora como en la CPU, tanto si estamos trabajando en online como si estamos trabajando
en offline.
A la hora de trabajar con los distintos bloques, tenemos que tener en cuenta que en un
momento dado podemos llegar a estar trabajando con tres bloques con el mismo nombre a la vez.
Por ejemplo, supongamos que estamos trabajando con un OB 1. El bloque que estamos viendo en
la pantalla de la programadora, mientras no lo guardemos en ningn sitio, lo tenemos nicamente
en la RAM. Se puede dar el caso de que tengamos un bloque en el PLC, tengamos otro bloque
diferente guardado en disco duro, y acabemos de hacer una modificacin y la tengamos en la
pantalla de la programadora pero todava no la hayamos transferido. Si teniendo el bloque en la
pantalla pinchamos el icono de guardar o el icono de transferir al autmata, estaremos guar-
dando el disco duro o en el autmata lo que tengamos en la pantalla. Pero si volvemos a la panta-
lla principal (Administrador de Simatic) sin haber guardado previamente el bloque en disco duro, y
transferimos algn bloque arrastrndolo con ayuda del ratn, vamos a transferir lo ltimo que hu-
bisemos guardado en disco duro, y no las ltimas modificaciones que hemos hecho en el bloqu
OB Bloques de sistema.
FC Funciones.
FB Bloques de funcin.
DB Bloques de datos.
FB: Bloques de funcin. En principio funcionan igual que las FC. La diferencia est
en que las FB se guardan la tabla de parmetros en un mdulo de datos. Esto tiene
dos ventajas. Una es que podemos acceder a los parmetros desde cualquier punto
del programa. Otra es que cada vez que llamemos a la FB no es necesario que le
demos todos los parmetros . Los parmetros que no rellenemos, se tomarn por de-
fecto los ltimos que hayamos utilizado.
UDT: Tipo de datos. Nos podemos definir nuestros propios tipos de datos para lue-
go utilizarlos en los DB.
Teora
Nos aparece una ventana en la que tenemos que elegir el lenguaje de programacin.
o FUP: Funciones.
Supongamos que lo que queremos programar son dos contactos en serie. Veamos como
quedara hecho en cada uno de los tres lenguajes:
Solucin en KOP:
( )
Solucin en FUP:
Curso STEP 7, nivel I y nivel II. Pg. 16 de 247
http://industrial.uv.es
Solucin en AWL:
U E 0.0
U E 0.1
= A 4.0
BE
Tenemos que dar nombre a cada uno de los contactos. Tendremos que direccionar las en-
tradas y salidas de que disponemos.
0 4 8 12
PS CPU 1 5 9 13
2 6 10 14
3 7 11 15
Las direcciones son las mismas independientemente de que las tarjetas sean de entradas
o de salidas. Como vemos, tenemos ocupados 4 bytes para cada posicin de tarjeta. Si tenemos
tarjetas de 2 bytes, estamos perdiendo estas dos direcciones.
PS CPU
Tambin es independiente de que las tarjetas sean de entradas o de salidas. Como vemos,
para cada puesto de tarjeta tenemos reservados 16 bytes.
288
290
PS CPU 0 4 292
294
288
1 5 290
( )
Vemos que lo que tenemos son dos contactos en serie.
Tenemos que asignar nombre a cada uno de los contactos. A las entradas les vamos a
llamar E y a las salidas les vamos a llamar A. Esto corresponde a las iniciales en alemn (Lengua-
je SIMATIC). Tambin podemos cambiar y elegir las iniciales en ingls. (Lenguaje IEC). El cambio
lo podemos hacer en el men Herramientas Preferencias. De aqu en adelante trabajaremos
con lenguaje SIMATIC.
A parte de darles nombre a las entradas y a las salidas, tenemos que darles una numera-
cin.
La siguiente tarjeta en nuestro caso es una tarjeta de salidas, ocupar las posiciones 4 y 5.
Por tanto tendremos disponibles 16 entradas (desde la 0.0 hasta la 1.7) y 16 salidas (des-
de la 4.0 hasta la 5.7)
Las direcciones que no estamos utilizando, las podramos utilizar en periferia descentrali-
zada.
El siguiente ejercicio lo podramos resolver en los tres lenguajes que nos permite el STEP
7. AWL, KOP y FUP.
SOLUCIN EN AWL
U E 0.1
= A 4.0
BE
Una vez tenemos el programa hecho, podemos cambiarlo de lenguaje. Esto lo podremos
hacer siempre y cuando el programa sea traducible. En este caso, por ejemplo, la instruccin BE
no existe ni en KOP ni en FUP. Si intentamos traducir esto nos va a decir que no es traducible.
SOLUCION EN KOP
SOLUCIN EN FUP
Teora
INSTRUCCIN O
Con esta instruccin unimos varias condiciones en paralelo. La instruccin nos sirve tanto
para instrucciones de primera consulta como para el resto de condiciones.
E 0.0
A 4.0
E 0.1 ( )
SOLUCIN EN AWL
O E 0.1
= A 4.0
BE
SOLUCIN EN KOP
Teora
INSTRUCCIONES O( Y U(
Hasta ahora hemos visto la manera de unir varias condiciones en serie y condiciones en
paralelo.
Tambin podemos combinar series con paralelos. Para ello, nos har falta utilizar los pa-
rntesis. (Solamente si hacemos la programacin en instrucciones)
Para abrir el parntesis lo haremos siempre al lado de una instruccin. Por ejemplo U(
O(
Tambin podemos obviar los parntesis. Para ello dejaramos la instruccin que abre el
parntesis sola en una lnea, y luego no cerramos el parntesis.
E 0.0
( )
E 0.3 E0.4
Vemos que en el circuito tenemos contactos en serie junto con contactos en paralelo. Ya
hemos visto que los contactos en serie se programan con la instruccin U, y que los contactos
en paralelo se programan con la instruccin O. Ahora tenemos que unir ambas instrucciones
para formar el circuito que queremos programar.
Para hacer algunas de estas uniones nos har falta utilizar los parntesis. Veamos cmo
quedara el circuito resuelto:
SOLUCIN EN AWL
U E 0.0
O(
U E 0.1
U E 0.2
U E 0.3
U E 0.4
= A 4.0
BE
Del mismo modo, tambin podemos utilizar la instruccin del parntesis para la instruccin
U.
SOLUCIN EN KOP
SOLUCIN EN FUP
Teora
INSTRUCCIONES UN Y ON.
UN E 0.0
UN E 0.1
.........
Esto significa que cuando no est cerrado el contacto E0.0, y cuando no est cerrado el
contacto E 0.1, ........
Esto nos sirve para programar contactos que son normalmente cerrados.
Veremos a lo largo del curso que la letra N la podemos aadir a ms instrucciones. Lo que
conseguimos es negar lo que dice la instruccin precedente.
Vamos a ver cmo podemos programar contactos que son normalmente cerrados y que-
remos que la actuacin sea cuando abrimos el contacto en lugar de cuando lo cerramos.
Veamos cmo resolveramos el siguiente circuito elctrico. Lo que queremos es que se ac-
tive 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
BE
SOLUCIN EN FUP
1. 6. Marcas
Teora
Las marcas son bits internos de la CPU. Disponemos de una cantidad limitada de marcas.
Esta cantidad depende de la CPU con la que estemos trabajando.
En principio parece que esto es una cosa complicada. Lo podramos hacer dibujando direc-
tamente el circuito en KOP. Tambin lo podemos hacer pensando bien el circuito y con lo visto
hasta ahora programarlo a travs de parntesis.
Lo que conseguimos utilizando las marcas, es simplificar el circuito todo lo que nosotros
queramos. De este modo programamos directamente el AWL de manera sencilla.
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
=M 0.3
U M 0.0
U(
U M 0.3
O M 0.2
=A 4.0
BE
De esta manera, utilizando contactos auxiliares, (marcas) queda resuelto el circuito de ma-
nera sencilla.
El ejercicio lo hemos resuelto de modo ms largo pero sin tener que pensar mucho.
SOLUCIN EN KOP
SOLUCIN EN FUP
Teora
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 desac-
tivar hasta que se haga un RESET de la salida o marca.
Estas instrucciones tienen prioridad. Dependen del orden en que las programemos. Siem-
pre va a tener prioridad la ltima que programemos.
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 ac-
tivarlas 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.
Esto lo podemos programar tal cual lo vemos en el circuito elctrico. Para ello lo haramos
utilizando lo que hemos visto hasta ahora.
Tambin lo podramos hacer utilizando dos instrucciones nuevas que hacen eso exacta-
mente.
SOLUCIN EN AWL
U E 0.0
S A 4.0
U E 0.1
R A 4.0
BE
Esto hace las funciones de dos pulsadores, uno de marcha y otro de paro. Es la forma ms
cmoda de programar dos pulsadores.
SOLUCIN EN KOP
SOLUCIN EN FUP
Teora
U E 0.0
U E 0.1
UN E 0.2
U E 0.3
O E 0.4
= A 4.0
Es un programa de un solo segmento que lo podemos ver tanto en AWL como en KOP o
en FUP.
PROGRAMA EN KOP
Tambin podemos seleccionar esta opcin con un icono que representa unas gafas.
Estas columnas las podemos configurar nosotros. Para cambiar la configuracin de las co-
lumnas, lo podemos hacer entrando en el men Herramientas > Preferencias. Por defecto vemos
tres columnas. Lo que vemos es el estado real del contacto, el RLO (resultado de la operacin
lgica), y el valor del acumulador 1.
El estado real del contacto ser 1 si el contacto en cuestin est cerrado, y ser 0 si el
contacto est abierto.
Ahora vamos a ver el programa en KOP y luego en FUP y vamos a ver el mismo men
TEST > OBSERVAR.
Aqu lo que veremos ser una lnea de color segn se van cumpliendo las instrucciones
que tenemos escritas.
KOP
Teora
Adems de lo que hemos visto en el ejercicio anterior, podemos abrir una tabla en la que
podemos observar las variables que nosotros queramos.
Estas tablas son un bloque ms dentro del proyecto. Hasta ahora tenamos el OB 1. Si ge-
neramos una tabla, tendremos el OB 1 y la VAT 1. Podemos tener ms de una tabla. La numera-
cin de las tablas ser VAT y a continuacin un nmero. Cuando pinchemos en los bloques del
proyecto, veremos las tablas que tenemos.
Para poder abrir la tabla tenemos que estar bien dentro de un bloque de
ONLINE/OFFLINE, o bien desde el administrador de SIMATIC pinchando en la parte izquierda
encima del nombre de la CPU en ONLINE. En las nuevas versiones lo podemos hacer desde
cualquier punto del administrador de SIMATIC.
Podemos observar bits, bytes, palabras, etc. A continuacin podemos decirle en qu for-
mato queremos observar la variable.
A continuacin tenemos dos columnas para los valores. En una de ellas vemos el valor ac-
tual de las variables, y en la siguiente podemos escribir el valor que queremos que tenga la varia-
ble. Esta ltima columna es para forzar valores.
Para poder observar y forzar estos valores, tenemos unos botones en la barra de herra-
mientas.
Hay un botn que representa unas gafas con una rayita al lado. Con este botn lo que po-
demos hacer es una visualizacin instantnea. Observamos los valores que tienen las variables
en ese instante y se quedan fijos en la pantalla. Si se producen cambios en las variables no los
vemos reflejados en la pantalla.
Tenemos otro botn que representa unas gafas solamente. Con esto podemos hacer una
observacin continua. Si se produce algn cambio en las variables, se refleja en la pantalla.
Despus tenemos unos botones que representan unos rayos. Estos son para forzar va-
riables. Podemos hacer un solo forzado o podemos hacer un forzado continuo.
Una vez forzado un valor, veremos que el valor actual de la variable es el que acabamos
de forzar.
Ejercicio resuelto
Si lo tenemos en modo automtico queremos que el nivel se mantenga entre las dos bo-
yas. Cuando el agua llegue al nivel de abajo queremos que se ponga en marcha la bomba, y
cuando el agua llegue al nivel de arriba queremos que se pare la bomba.
Adems tenemos un rel trmico que acta tanto cuando tenemos la bomba en funciona-
miento manual como cuando la tenemos en funcionamiento automtico. Cuando salta el rel, que-
remos que se pare la bomba y que nos avise con un indicador luminoso en el cuadro de mando.
Adems tenemos una luz de marcha que nos indica cuando est en marcha la bomba.
Las boyas en reposo (sin que el agua las rebase) tienen contactos NA. Cuando el agua las rebasa
sus contactos se cierran.
E0.3
E0.2
E0.0 E0.1
Segmento 1: MANUAL
Segmento 2: AUTOMTICO
BE
Si hacemos la prueba de este circuito veremos que no funciona correctamente. Vemos que
en modo manual s que funciona pero en modo automtico no para la bomba cuando debera.
Para resolver este circuito correctamente, nos hace falta utilizar marcas auxiliares. En un
mismo bloque no podemos activar la misma salida dos veces con condiciones diferentes porque
se interfieren entre ellas.
Segmento 1 : MANUAL
Segmento 2: AUTOMTICO
Ahora ya no funciona el trmico en el modo manual. Al utilizar marcas diferentes para cada
tipo de funcionamiento, el trmico slo acta sobre la marca de modo automtico. Slo estamos
haciendo un reset de una de las marcas que activan la bomba. Nos falta resetear la otra marca.
Tendremos que aadir las siguientes lneas.
Otra posible solucin sera programar el paro de la bomba por apertura del rel trmico en
el ltimo segmento. Los paros de emergencia se suelen programar al final.
Ahora podemos hacer todas las objeciones que queramos y corregir sobre lo que ya tene-
mos hecho.
KOP
1. 11. Temporizadores
Teora
TEMPORIZADORES SE Y SI
5 haga algo.
Cond. U E 0.0
L S5T#5S
T SE T 1
Temp. U T 1
= A 4.0
Salida
Adems de lo que hemos visto, en cualquier momento podemos hacer un RESET del tem-
porizador. Para hacer un RESET necesitamos una condicin. En el momento se cumpla si al tem-
porizador le corresponda estar a 1, automticamente se pondr a cero aunque por su modo de
funcionamiento no le corresponda.
Cond. U E 0.0
L S5T#5S
Temp. SI T 1
U T 1
Salida = A 4.0
Veamos como podramos programar estos dos temporizadores en KOP y en FUP respecti-
vamente.
KOP
Adems de los temporizadores que hemos que hemos visto en ejercicios anteriores, tene-
mos tres ms llamados temporizadores con memoria. Son los temporizadores SS, SV y SA.
es el siguiente:
Cond.
U E 0.0
Temp. T L S5T#5S
SS T 1
U T 1
Salid. = A 4.0
Cond.
U E 0.0
T L S5T#4S
Temp. SV T 2
U T 2
= A 4.1
Salida
Cond.
U E 0.3
T L S5T#6S
Temp. SA T 5
U T 5
= A 5.3
Salida
Teora
Hacemos doble clic encima de Smbolos. Entramos en una tabla donde podemos definir
los nombres que queramos y decir a qu contacto corresponde cada nombre.
Los nombres que definamos aqu son de mbito global. Los podremos utilizar en cualquier
bloque del programa.
Al escribirlos en el programa, sabremos que son de mbito global porque aparecern escri-
tos entre comillas.
Nosotros escribiremos el nombre que hemos definido, y veremos que el programa le aade
unas comillas. Esto nos indica que es un smbolo global. Luego veremos que tambin podemos
tener smbolos locales.
A la hora de ver el programa en AWL, KOP o FUP, podremos ver o no estos smbolos.
Tenemos dentro del men VER > MOSTRAR > REPRESENTACIN SIMBLICA para ver
o no los smbolos. Tambin tenemos la opcin informacin sobre el smbolo para ver a qu con-
tacto corresponde cada uno de los smbolos.
Nosotros podremos acceder a estos contactos por su nombre en cualquier sitio del pro-
grama.
AWL
KOP
FUP
Ejercicio resuelto
Por las cintas transportadoras van a circular cajas grandes y pequeas indistintamente. El
tamao de las cajas con respecto a las clulas que tenemos en la segunda cinta es el siguiente:
C. G.
C.P
SOLUCIN EN AWL
mantenido)
SE T 1 //Con el T 1
BE
Para arreglar esto podemos utilizar marcas remanentes en lugar de trabajar directamente
con las salidas.
De este modo el sistema se acordara de las cajas que estaban circulando antes del corte
de suministro.
U M 0.0
= A 4.0
U M 0.1
= A 4.1
U M 0.2
= A 4.2
Curso STEP 7, nivel I y nivel II. Pg. 63 de 247
http://industrial.uv.es
U M 0.3
= A 4.3
Marcas remanentes son aquellas que ante un corte de tensin mantienen su valor. Por de-
fecto, tenemos los primeros 16 bytes de marcas remanentes.
No obstante, la cantidad de marcas remanentes que queremos las definimos nosotros. Pa-
ra ello, vamos al administrador de SIMATIC. Pinchamos encima de Equipo 300. En la parte de-
recha aparece el icono del Hardware. Entramos en el hardware. Una vez dentro, pinchamos con el
botn derecho encima de la CPU. Entramos en el men Propiedades del objeto.
Veremos que aparecen unas fichas. Una de ellas se llama Remanencia. Entramos en es-
ta ficha. Vemos que podemos definir la remanencia de las marcas como nosotros queramos. Le
decimos la cantidad de bytes remanentes de marcas que queremos.
U MARCHA
S 1_CINTA
U CELULA_1
S 2_CINTA
R 1_CINTA
..........
..........
KOP
FUP
Teora
A parte del final que hemos visto (BE), existen otros dos finales. Estos son BEB y BEA.
Veamos para qu podemos utilizar cada uno de ellos.
BEB: Es un final condicional. Esto quiere decir que ser un final o no dependiendo de si se
cumple o no la condicin (RLO) que tenemos antes del BEB.
BEA: Es un final absoluto. Siempre que se lea la instruccin BEA terminar el programa.
La diferencia con el BE es que podemos escribir detrs de l.
Si est activa la entrada E 0.0 queremos que funcione un trozo de programa. Si est activa
la entrada E 0.1 queremos que funcione otro trozo de programa. Si no est activa ninguna de las
dos, no queremos que funcione nada.
U E 0.0
Salta a meta 1
U E 0.1
Salta a meta 2
BEA
Meta1:..............
.................
.................
BEA
Meta2:..............
..................
...............
BE
El BEA es una instruccin incondicional. Cada vez que el PLC la lea va a terminar el pro-
grama.
U E 0.0
= A 4.0
U E 0.1
BEB
U E 0.2
= A 4.2
BE
Si no est activa la E 0.1 funcionara todo el programa. Si est activa la E 0.1 slo funcio-
nara la primera parte del programa.
1. 15. Contadores.
Teora
Veamos como podemos programar un contador. A los contadores les llamaremos Z. Vea-
mos todo lo que podemos hacer con un contador:
U E 0.0
------------------------------------------------
U E 0.1
------------------------------------------------
U E 0.2
L C#10
------------------------------------------------
U E 0.3
------------------------------------------------
= A 4.0
Esto es todo lo que podemos hacer con un contador. No es necesario que para cada con-
tador utilicemos todas las posibilidades ni en este orden.
El contador va a almacenar un valor. Ser la cuenta que lleve el contador en cada momen-
to.
A parte de esto, nosotros tambin podemos acceder a Z1 con instrucciones de bit. De este
modo estamos consultando el bit de salida del contador.
Adems de esto podemos consultar el valor del contador y trabajar con l como nmero
entero.
Con los contadores, podemos trabajar de dos modos distintos. Una forma es cargar ini-
cialmente un valor en el contador. Luego podemos saber cuando ha llegado a cero. Tenemos un
bit de salida que nos da cambio cuando pasamos de un valor distinto de cero a cero.
Otra forma de trabajar con los contadores, es comenzar a contar desde cero y comparar
con los valores con los cuales queramos que ocurra algo.
Para esto nos har falta comparar dos valores. Para comparar, al PLC le hace falta tener
estos valores en dos registros internos que son el acumulador 1 y el acumulador 2.
Para meter los valores en los acumuladores, tenemos la instruccin de carga. (L).
Una vez tengamos los valores en el acumulador, tendremos que compararlos. Para ello te-
nemos las siguientes instrucciones:
Ejercicio resuelto
A 4.6
A 4.7
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.
Adems queremos que si el parking est ocupado y llega un coche que no se le abra la ba-
rrera.
SOLUCIN EN AWL
LZ 1 //Carga el contador 1
L 10 //Carga un 10
BE
Como slo queremos hacer una comparacin, es decir slo nos interesa la cantidad de 10
coches para hacer el cambio de las luces, tenemos otra posibilidad de programarlo. Podemos ha-
cerlo utilizando la salida binaria del contador. Veamos como quedara resuelto en AWL.
SOLUCIN AWL
L C#10 //Carga un 10
S Z 1 //Mete el 10 en el contador
BE
Solucion en FUP
Ejercicio resuelto.
E 0.6 E 0.7
M P
E 0.0
E 1.7 Rel sobrecarga
E 1.0 E1.1 A 4.1
A 4.0
E 0.0
Queremos que cuando alguien pise en la goma del suelo, se abra la puerta. Motor de aper-
tura A 4.0. La puerta se est abriendo hasta que llegue al final de carrera. Cuando llega al final de
carrera, comienza a cerrarse. (Motor A 4.1). Se est cerrando hasta que llega al final de carrera.
Adems tenemos un rel trmico. Queremos que cuando salte el rel trmico se pare la
puerta hasta que lo rearmemos. Cuando haya saltado el rel trmico 5 veces queremos que se
bloquee la puerta.
***************************
L C#5 //Carga un 5
BE
KOP
FUP
Ejercicio resuelto.
Cuando le demos al pulsador de marcha, queremos que se ponga en marcha la cinta trans-
portadora. La piel va cayendo por un lado del caballete. Cuando llegue a la mitad, queremos que
se active el mbolo y que doble la piel por la mitad.
Lo que pretendemos es que tenga el tamao que tenga la piel, siempre doble por la mitad.
Tenemos que medir la piel de algn modo. Lo que vamos a hacer es generar dos trenes
de impulsos de frecuencia uno el doble que el otro.
Mientras est la primera clula activa, estaremos contando los pulsos de frecuencia menor
con un contador. Mientras est activa la segunda clula estaremos contando los pulsos de fre-
cuencia mayor con otro contador.
Cuando la cuenta de los dos contadores sean iguales querr decir que la piel est por la
mitad. Activaremos el mbolo durante 3 segundos.
SOLUCIN EN AWL
U T 1
=M 0.0
U T 2
=M 0.1
LZ 1 //Carga el contador 1
LZ 2 //Carga el contador 2
SE T 3 //Con el temporizador 3
R Z 1 //Resetea el contador 1
BE
Ejercicio propuesto: Resolver el problema en KOP y en FUP con las instrucciones que se
han visto anteriormente.
Ejercicio resuelto
Cuando le demos al pulsador de marcha, queremos que la escalera est activa. Eso no
quiere decir que se ponga en marcha. Se pondr en marcha cuando llegue una persona.
Cuando una persona pise, queremos que la escalera se ponga en marcha. A partir de
cuando la persona suba al primer escaln, queremos que est en marcha 5 seg. que es lo que le
cuesta a la persona subir.
Si antes de acabar el ciclo sube otra persona queremos que tambin llegue al final de su
trayecto. En resumen, queremos que la escalera est en marcha 5 seg. desde que la ltima per-
sona subi al primer escaln.
Cuando le demos al pulsador de paro, queremos que si hay alguna persona que est su-
biendo llegue al final de su trayecto, pero si llega otra persona ya no pueda subir.
BE
Solucin en KOP.
Solucin en FUP:
Teora
E0.0
Delante de cada parntesis que abramos tendremos que poner una condicin que har las
funciones del contacto E 0.0 en el esquema.
Esto slo sirve para operaciones de contactos. Dentro del MASTER CONTROL RELAY no
podemos poner temporizadores o llamadas a otros bloques. El programa si que nos permite ha-
cerlo pero no funciona correctamente.
Est pensado para utilizar contactos con asignaciones =. Viene a ser como un circuito
elctrico. Lo que quede activado cuando no se ejecuta lo que hay dentro de los parntesis del
Master Control Relay, se desactiva.
Si dentro del Master Control Relay utilizamos instrucciones SET y RESET, no funciona
como hemos dicho. Cuando deja de actuar lo que hay dentro de los parntesis, si estaba activado
con un SET se mantiene activado.
Veamos cuales son las instrucciones necesarias para hacer un MASTER CONTROL
RELAY:
U E 0.0
MCR(
U E 0.1
= A 4.0
)MCR
U E 0.2
MCR(
U E 0.3
= A 4.1
)MCR
U E 0.7
= A 4.7
Siempre, delante de cada parntesis tenemos que poner una condicin. Hace la funcin
del contacto E 0.0 del grfico anterior.
Vemos que cada parntesis funciona slo cuando tenemos activa su condicin. Cuando su
condicin no est activa el trozo de programa en cuestin deja de funcionar y las salidas se des-
activan. Es como si realmente quitsemos tensin a ese trozo de programa.
Esto no ocurre si el trozo de programa se deja de leer por cualquier otra causa. Si hace-
mos un salto o una meta, o programamos otros bloques, cuando no se ejecuta una parte del
programa, las salidas se quedan como estaban. Si estaban activas cuando dej de ejecutar-
se ese trozo de programa, continan activas. Esto no ocurre con el MCR.
En el ejemplo que hemos hecho, la ltima parte no est dentro de ningn parntesis, aun-
que si que est dentro de la activacin del MCR. Esta parte de programa si que funciona siempre.
Lo que podemos activar o desactivar es lo que tenemos dentro de los parntesis y siempre
va precedido de una condicin.
Solucin en KOP:
Solucin en FUP
Teora
Hasta ahora hemos trabajado con bits. Escribamos instrucciones del tipo:
U E 0.0
= A 4.0
Si quisisemos hacer esto mismo pero con todas las entradas y todas las salidas, podra-
mos hacerlo bit a bit, o trabajando directamente con la palabra de entradas y la palabra de salidas
en bloque.
Hemos visto como podemos acceder a los bits de entrada, salida o marcas.
EB 0 AB 4 MB 0
EW 0 AW 4 MW 0
ED 0 AD 4 MD 0
Esto son la doble palabra de entradas 0, la doble palabra de salidas 4 y la doble palabra de
marcas 0.
Para trabajar con todo esto tenemos las instrucciones de carga y transferencia.
Instruccin de carga: L
Instruccin de transferencia: T
o Ejercicio resuelto.
Queremos que lo que metamos por las entradas nos salga por las salidas.
Para ello tenemos dos formas de hacerlo. Una forma sera pasar los bits uno a uno. Por
ejemplo:
U E 0.0
= A 4.0
U E 0.1
= A 4.1
.....
.....
L EW 0
T AW 4
BE
Con esto lo que estamos haciendo es una copia de las entradas en las salidas.
Hay que tener en cuenta que las operaciones de carga y transferencia son incondicionales.
Esto quiere decir que no debemos hacer programas como el siguiente:
U E 0.0
L MW 0
T AW 4
En este caso el autmata no dara error pero no hara caso a la entrada. Tanto si estuviera
como si no, la operacin de carga y transferencia se ejecutara.
Esta operacin tambin la podemos hacer en KOP y en FUP con la instruccin MOVE.
Solucin en KOP
Solucin en FUP
Teora
Nosotros podemos introducir valores en las palabras, bytes o dobles palabras. Veamos
como podemos cargar valores.
Para introducir datos en el acumulador, lo podemos hacer con diferentes formatos. Haga-
mos un repaso de los que hemos visto hasta ahora.
El autmata por defecto, va leyendo una instruccin detrs de otra. Mientras no le digamos
lo contrario esto es lo que va a hacer. Nosotros podemos intercalar en nuestro programa instruc-
ciones de salto. De este modo le decimos al autmata que se vaya a ejecutar un trozo de progra-
ma determinado, al que nosotros le habremos puesto un nombre (metas). El nombre de las metas,
tiene que estar compuesto como mximo de cuatro dgitos de los cuales el primero necesariamen-
te tiene que ser una letra.
Estas instrucciones nos sirven para saltar a trozos de programa que se encuentren dentro
del mismo bloque en el que nos encontramos. Con estas instrucciones no podemos ir de un blo-
que a otro.
Ejercicio resuelto
Queremos hacer dos contadores. Si el contador n 1 tiene un valor ms grande que el con-
tador n 2, queremos que se enciendan todas las salidas. Si el contador n 1 tiene un valor ms
pequeo que el contador n 2, queremos que se enciendan solamente las salidas pares. Si los
dos contadores tienen el mismo valor queremos que se apaguen todas las salidas.
SOLUCIN EN AWL
U E 0.0
ZV Z 1
U E 0.1
ZR Z 1
U E 1.0
ZV Z 2
U E 1.1
ZR Z 2
L Z 1
L Z 2
<I
SPB MENO
>I
SPB MAYO
==I
SPB IGUA
BEA
MENO: L W#16#5555
T AW 4
BEA
MAYO: L W#16#FFFF
BEA
IGUA: L 0
T AW 4
BE
Hay que tener en cuenta siempre poner un BEA antes de empezar con las metas, y otro
BEA al final de cada una de las metas.
En la ltima meta dejamos slo el BE ya que es la ltima instruccin del programa y la fun-
cin del BE y la del BEA es la misma.
Solucin en KOP:
En estos dos lenguajes, no hubiera sido necesario el uso de las metas. La carga y la trans-
ferencia la podamos haber hecho condicional con los resultados de las comparaciones de los
valores de los contadores. El programa hubiera quedado ms corto. Lo que hemos hecho aqu ha
sido exactamente el mismo programa en cada uno de los tres lenguajes para ver como hacemos
lo mismo en los diferentes lenguajes.
Teora
Un bloque de datos es una tabla en la que almacenamos datos. Aqu no vamos a progra-
mar nada. Los datos los podemos almacenar en distintos formatos.
Para guardar un dato, tenemos que poner nombre a la variable, definir el formato en el
que lo queremos, y el valor inicial.
Tenemos que tener en cuenta que esta columna de valor actual tambin la transferimos
tanto de ONLINE a OFFLINE como al contrario.
Ejercicio resuelto.
Vamos a crear un bloque nuevo. Vamos a hacer un bloque de datos. En estos bloques lo
nico que vamos a introducir son datos. No vamos a programar nada. Va a ser una tabla con da-
tos los cuales podemos leer y podemos escribir nuevos valores en los datos.
Tenemos que insertar un bloque nuevo. Pinchamos en la parte derecha con el botn dere-
cho del ratn y aparece una ventana donde le decimos que queremos insertar un nuevo objeto.
Una vez lo tenemos creado veremos que sale el icono del DB junto con los dems blo-
ques.
Le podemos dar el nmero de DB que nosotros queramos. Por ejemplo podemos hacer el
DB 1.
El DB es una tabla en la que tenemos que rellenar los datos. Tenemos varios campos para
rellenar.
El siguiente campo es el nombre. Es obligatorio dar un nombre a cada dato que vayamos a
introducir.
A continuacin tenemos que definir el tipo de datos que va a ser. Si no sabemos como de-
finir un tipo de datos pinchamos en la casilla correspondiente con el botn derecho del ratn y
podemos elegir el tipo de datos que queremos.
A continuacin tenemos que definir el valor inicial. Tenemos que poner el valor en el for-
mato que corresponde. Si no sabemos el formato o no queremos ningn valor inicial, por defecto
nos pone un 0, pero escrito en el formato correcto.
VALOR_1 INT 0
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
Vamos a ver como leemos un valor y lo metemos en una marca, y como escribimos un va-
lor y luego lo vamos.
Vamos a leer el valor 3.0 que tenemos en VALOR_2 y vamos a ponerlo en la doble palabra
de marcas 100. Tiene que ser en una doble palabra de marcas porque es un nmero real.
AUF DB 1
L DBD 2
T MD 100
L 8
T DB1.DBW6
BE
Vamos a entrar en el DB y vamos a ver como vemos este nuevo dato que hemos introdu-
cido.
Vemos que el DB tiene una nueva columna que es la de datos actuales. Aqu veremos que
tenemos el nuevo valor. Esta pantalla no refresca valores. Hace una lectura cuando abrimos la
ventana. Si hacemos algn cambio y queremos visualizarlo, tendremos que cerrar y abrir de nue-
vo la pantalla.
Para ver el dato que acabamos de introducir, tenemos que hacer la operacin en ONLINE.
Si vamos a ver datos en OFFLINE, veremos los datos actuales de la CPU del PC. El PC no ha
ejecutado programa. Veremos que los valores iniciales son los mismos que los actuales.
Tenemos que tener en cuenta que estos valores se guardan en disco duro. Cada vez que
transfiramos el programa bien de OFFLINE a ONLINE o viceversa, tambin se transfieren los valo-
res actuales.
Inicializacin de un DB.-
Si queremos dejar el DB como estaba al principio con sus valores iniciales para comenzar
el proceso de nuevo, vamos al men de edicin y tenemos la posibilidad de reinicializar bloque de
datos. Los valores actuales se cambian por los valores iniciales. A partir de ah hace lo que se le
diga por programa.
Si el DB ha adquirido unos valores distintos de los iniciales los guarda en esta columna de
valores actuales. Cada vez que transferimos al autmata el DB tambin estamos transfiriendo esta
columna de valores actuales aunque no la veamos.
Ejercicio resuelto
Tenemos una cinta transportadora que lleva los productos. Lo que queremos es que los
productos que se salgan del peso estipulado tanto por arriba como por abajo, se desechen.
Adems tenemos unas luces indicadoras de producto bueno o de producto malo. Quere-
mos que mientras est la pieza debajo de la clula detectora, se encienda la luz correspondiente.
E E 1.2 A 4.1
BUENA
A 4.2
A 4.0 A 4.7
Para ello vamos a tener en un mdulo de datos los lmites de peso tanto superior como in-
ferior.
Con el byte 0 de entradas vamos a simular los pesos de las piezas que circulan por la cin-
ta. Queremos que cuando la pieza tenga un peso comprendido entre los lmites correctos se en-
cienda una luz que nos indique que la pieza es correcta. Cuando pase una pieza que su peso se
salga de los lmites queremos que nos indique una luz que la pieza es mala y a la vez que se abra
una trampilla para que la pieza salga de la cinta.
SOLUCIN AWL
SPB M001
R A 4.2
BE
Para completar el ejercicio, nos falta hacer el mdulo de datos donde vamos a guardar el
lmite superior y el lmite inferior de pesado para las piezas.
En el DB1 vamos a crear dos palabras de datos. Tenemos que definir un tipo para cada
uno de los datos. En este caso van a ser dos nmeros enteros. Diremos que son de tipo (INT).
Tambin podemos suponer que son valores reales. Para ello lo deberamos haber tenido
en cuenta a la hora de programar.
Para comparar nmeros reales tenemos otra instruccin, y adems los nmeros reales se
guardan en dobles palabras, no en palabras simples.
Para guardar los datos deberamos haber utilizado la doble palabra de datos 0 y la doble
palabra de datos 4.
Teora
Queremos que si la entrada E 0.0 est activa funcione una parte del programa. Y que si no
est activa funcione la otra parte del programa.
Para ello vamos a hacer dos mdulos FC y desde el OB indicaremos cuando tiene que ac-
ceder a uno y a otro.
Para crear las 2 FCs, lo hacemos del mismo modo que hicimos para crear un nuevo DB.
En este caso insertamos una funcin.
Una vez tengamos creadas las dos FCs ya podemos entrar en ellas y hacer su programa.
SOLUCIN AWL:
OB1:
U E 0.0
CC FC 1 //Llamada condicional.
UN E 0.0
CC FC 2 //Llamada condicional.
BE
U E 1.0
= A 4.0
BE
FC2:
U E 1.1
= A 4.1
Hemos visto que para hacer llamadas condicionales a FCs sin parmetros en AWL, tene-
mos la instruccin CC. Si quesiramos hacer una llamada a una FC sin parmetros pero de modo
incindicional, utilizaramos la instruccin UC.
Para hacer la llamada, tenemos que abrir el catlogo, y seleccionar la funcin a la que que-
remos llamar.
Teora
L MW 0
SLW 2
T MW 2
Al desplazar, se mueven todos los bits dos posiciones a la izquierda, y por la parte derecha
entran dos ceros.
2. 7. Planta de embotellado
Ejercicio resuelto
10.6 10.5 10.4 10.3 10.2 10.1 10.0 11.7 11.6 11.5 11.3 11.0
Vemos que en la lnea tenemos tres mquinas. Una taponadora, una lacadora y una sella-
dora.
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.
Las botellas pasan de posicin a posicin cada segundo. Con la clula fotoelctrica que
tenemos detectamos cuando pasa una botella o cuando pasa un hueco.
En cada FC vamos a programar una de las operaciones que necesitamos realizar. Des-
pus desde la OB 1 diremos cuando necesitamos realizar cada una de la operaciones.
En otra FC vamos a hacer la activacin de las mquinas cuando lleguen las botellas deba-
jo de ellas
Para programar cada una de las FCs slo nos preocupamos de programar la maniobra o
la accin que queremos hacer. No nos preocupamos de cuando la tiene que hacer.
Despus desde la OB1 ya pensaremos cuando se tiene que ejecutar cada una de las ope-
raciones que hemos definido.
Ejercicio propuesto: resolver este ejercicio en KOP y en FUP con las instrucciones que
hemos visto en ejercicios anteriores.
Teora
Cuando programamos una FC tenemos que llamarla desde algn sitio para que se ejecu-
te.
A continuacin vamos a hacer una FC que sume 2 + 3, y otra FC que sume A + B.
Cuando estamos sumando 2 + 3, estamos haciendo una FC sin parmetros. Siempre su-
ma lo mismo y el resultado siempre ser 5.
UC FC 1 Llamada incondicional.
CC FC 1 Llamada condicional.
De este modo se ejecuta la funcin de manera condicional o incondicional, con los datos
que hemos definido dentro de la propia FC.
Cuando estamos sumando A + B, estamos haciendo una FC parametrizable. Cada vez que
la llamemos, tendremos que darle unos valores a A y a B para que el autmata sepa lo que tiene
que sumar.
Para darle estos valores, lo que tenemos que hacer es llamar a la FC con CALL FC 1.
Al hacer la llamada de este modo, el programa accede a la FC y nos pide todos los par-
metros de entrada y salida que hayamos definido. Entonces nosotros le damos los valores que
queremos que sume cada vez que le llamamos.
Una vez la tenemos programada, la podemos llamar tantas veces como queramos. La ins-
truccin CALL que utilizamos para llamar a las FC con parmetros, es siempre incondicional.
Ejercicio resuelto
Vamos a hacer dos FC similares. Van a ser dos bloques que van a realizar la misma ope-
racin pero en una de ellas va a ser con unos valores fijos, y en la otra va a ser parametrizable.
Para crear una FC nueva, vamos a la ventana del administrador de SIMATIC. Pinchamos
en la parte izquierda encima de bloques. En la parte derecha pinchamos con botn derecho y co-
gemos la opcin de insertar nuevo objeto. Insertamos una funcin.
Siempre que se ejecute est funcin nos sumar los mismos valores.
Para que la funcin se ejecute, alguien tendr que llamarla. Si no, la CPU slo ejecuta la
OB1.
Desde la OB1 tendremos que hacer una llamada a una FC sin parmetros.
Tenemos dos posibilidades de hacer la llamada. Podemos hacer una llamada condicional o
incondicional.
OB1
U E 0.0
CC FC 1
BE
UC FC 1
BE
Son los dos tipos de llamada que tenemos para funciones sin parmetros. Con el primer
bloque accedera a la FC 1 siempre y cuando estuviera la entrada E 0.0 activa.
Vamos a ver como podramos hacer una FC parametrizable. Esto quiere decir que no
siempre tendra que sumar los mismos valores.
Cuando entramos en la FC vemos que en la parte superior hay una tabla. En esta tabla es
donde tenemos que definir los parmetros.
Tenemos una lnea de IN, otra de OUT, otra lnea de IN/OUT y otra lnea de TEMP.
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 fun-
cin.
A cada una de las variables, tenemos que definirle un tipo. En este caso son todas de tipo
entero.
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.
A la hora de llamar a la funcin tendremos que decirle cuanto vale cada valor.
Vemos que para hacer una llamada a una FC con parmetros, hay que utilizar la instruc-
cin CALL.
Cuando utilizamos esta instruccin el programa va a ver los parmetros que tiene definidos
esa funcin y nos pide los valores de estos parmetros.
Slo nos pide los valores de lo que hayamos definido como entrada o como salida.
Lo que hayamos definido como temporal no nos lo pide. Lo que hemos definido como tem-
poral, son resultados intermedios que nosotros no tenemos que darles ningn valor.
Al hacer esta llamada, la FC 1 se ejecuta con los valores que le hemos dado. Hace la su-
ma correspondiente, y el resultado nos lo deja donde le hemos dicho.
Cuando sale de la FC 1, ya no se acuerda de los valores que le hemos dado. Cada vez
que tengamos que ejecutar la FC 1, tendremos que darle de nuevo unos valores.
Si tenemos una FC con parmetros y hacemos una llamada como si fuese una FC sin pa-
rmetros la CPU se ir a STOP. Si una FC tiene parmetros, le tendremos que decir en la llamada
cuanto valen los parmetros para que pueda ejecutar la operacin. Si no es as no puede ejecutar
nada.
Por ejemplo, en el caso que tenemos en este ejemplo, la FC realiza una suma. Si no le de-
cimos los valores que tiene que sumar y dnde me tiene que dejar el resultado, no lo podr hacer.
Veamos como hacemos una FC que sume en KOP y en FUP y vemos como la llamamos y
le rellenamos los parmetros.
Solucin en KOP
Como podemos observar, en KOP y en FUP todo puede ser condicional. Basta con poner
una condicin en el parmetro EN.
2. 9. Sistemas de numeracin
Teora
Veamos las razones por las cuales se gastan estos sistemas de numeracin.
El sistema binario es el sistema que utilizan los PLC. Se compone de 1 y 0 que es real-
mente lo que ocurre en las mquinas. Hay tensin o no hay tensin.
o Sistema decimal:
2 1 4
Los dgitos 2, 1 y 4 corresponden a la cantidad de potencias de diez con el ndice del lugar
que ocupan, que tenemos que sumar.
o Sistema binario:
El sistema binario se forma exactamente igual que el sistema decimal slo que con poten-
cias de 2 y con dos dgitos.
1 1 0
22 21 20
El 110 binario, representa el 6 decimal. Vemos que tenemos que calcular una serie de po-
tencias y despus efectuar la suma. Si tuviramos que traducir el nmero: 11101111000101011,
nos llevara un rato ver a qu nmero decimal corresponde.
Veamos cmo haramos la operacin inversa. Supongamos que tenemos el nmero 6 de-
cimal y queremos saber a qu nmero binario corresponde.
6 2
0 3 2
1 1 2
1 0
Vamos dividiendo por dos hasta que el resultado nos de cero. Los restos de abajo hacia
arriba son el nmero en binario. En este caso nos queda 110.
Vamos que tambin nos lleva un trabajo un poco costoso. Si quisisemos traducir el nme-
ro 29.856 nos llevara un rato de trabajo.
o Sistema Hexadecimal
Como no conocemos 16 nmeros para formar los 16 dgitos, utilizaremos letras. Los 16
smbolos del sistema hexadecimal son: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
2 B 1
Vemos que la sistemtica es la misma que para el sistema decimal y que para el sistema
binario.
689 16
049 43 16
01 11 2 16
2 0
Vamos dividiendo sucesivamente entre dos hasta que el resultado de cero. Con los restos
de abajo hacia arriba tenemos el nmero hexadecimal.
2 B 1
El nmero en binario sera el 0010 1011 0001. Cmo hemos hecho la conversin? Vamos
traduciendo dgito a dgito. Cada dgito hexadecimal corresponde a 4 dgitos en binario.
Nunca vamos a tener potencias mayores. Estos clculos los podemos hacer de cabeza.
Siempre son sencillos.
1 9 2
Crear un nmero codificado en BCD es muy sencillo desde el sistema decimal. Es la mis-
ma sistemtica que pasar un nmero de hexadecimal a binario.
2 7
0010 0111
Tenemos que tener en cuenta que no es lo mismo binario que binario BCD.
Por ejemplo veamos como traducimos el nmero 10 decimal a binario y a binario BCD.
En el cdigo BCD no existen todas las combinaciones de dgitos. En cambio en binario si.
No podemos representar el nmero 13 en decimal con una sola cifra, luego 1101 no es
ningn nmero en cdigo BCD.
Teora
L T 1
L Z 3
L S5T#5S
L C#10
Para poder hacer esto, existen instrucciones como las que siguen:
LC T 1
LC Z 3
Estas instrucciones hacen una carga de los valores que tengan los contadores o tempori-
zadores, pero codificada en BCD.
Para ello tengo que tener en cuenta el formato en el que se carga en el acumulador cada
una de las cosas para comparar cosas iguales.
U E 0.0
L S5T#5S
SE T 1
U T 1
= A 4.0
L T 1
Con esto estamos cargando el valor que tenga en ese instante el temporizador. Podemos
hacer lo que queramos con este valor.
L T 1
L S5T#3S
<I
= A 4.1
Con esto lo que pretendemos hacer es que cuando el temporizador tenga un valor inferior
a 3 segundos, se active la salida 4.1.
Para subsanar este problema, tenemos que decirle que haga las dos cargas en el mismo
formato.
L S5T#10S
LC T 1
=I
...........
De esta manera estamos haciendo una carga codificada del temporizador. El valor de los
10 segundos me lo hace por defecto en BCD. Ahora la carga del valor que tenga el temporizador
tambin me la va a hacer en BCD porque le he dicho que me haga una carga codificada.
U E 0.0
L S5T#8S
SE T 1
L S5T#5S
LC T 1
<I
= A 4.0
>I
= A 4.1
Esta instruccin no existe como tal en KOP ni en FUP. Veamos como podramos hacer es-
tas comparaciones en estos lenguajes.
Como podemos ver, el propio temporizador lleva dos parmetros de salida llamados DUAL
y DEZ. En este caso, en la MW20, tendremos el valor del temporizador codificado en BCD, y en la
MW30 tendremos el valor del temporizador en binario.
Ejercicio resuelto.
Por ejemplo, hay operaciones que son exclusivas de los nmeros reales. No podremos uti-
lizarlas con nmeros enteros. Por ejemplo no podremos utilizar la raz cuadrada, ni tampoco po-
dremos utilizar la divisin ni cualquier operacin tpica de nmeros reales.
Cuando realizamos una operacin, todos los operandos que intervienen tienen que tener el
mismo formato. Por ejemplo, si el resultado de una raz es un nmero real, lo que introduzcamos
para calcular la raz cuadrada tambin tendr que ser un nmero real.
Este programa va a sumar lo que valga VALOR_A con lo que valga VALOR_B, al resultado
le va a resta el VALOR_C y el resultado final me lo va a dejar en la variable que se llama
RESULTADO.
Lo que no podemos hacer son operaciones de nmeros reales. Por ejemplo, la divisin y
multiplicacin son operaciones de nmeros reales. Si nosotros queremos multiplicar dos por cua-
tro, tendremos que convertir primero estos nmeros a nmeros reales.
Todo este tipo de operaciones lo podemos hacer tambin en KOP o en FUP. Para poder
seleccionar las operaciones en estos otros lenguajes, abrimos el catlogo y vamos a ver las ope-
raciones de nmeros enteros. Este catlogo tambin nos sirve para acordarnos de como se escri-
ben las operaciones en AWL y saber las operaciones que tenemos disponibles.
Veamos las operaciones que podemos realizar. Las podemos realizar en cualquiera de los
tres lenguajes.
Aqu vemos las operaciones que podemos realizar tanto en KOP como en FUP con nme-
ros enteros.
Ejercicio resuelto.
Para realizar otro tipo de operaciones y sobre todo para mezclar operaciones de nmeros
reales con nmeros enteros, nos va a hacer falta muchas veces cambiar de formato las variables
que tengamos definidas.
Por ejemplo si queremos dividir 8 entre 4, tendremos que convertir estos nmeros enteros
en nmeros reales ya que la divisin es una operacin de nmeros reales.
Adems los nmeros enteros los tenemos en 16 bits y los nmeros reales los tengo en 32
bits. Tendremos que hacer una transformacin de longitud y luego una transformacin de formato.
Con estas operaciones, lo que hacemos son cambios de formato sin perder informacin. El
nmero que queda despus de la conversin es exactamente el mismo que antes de ella solo que
en otro formato.
Por ejemplo, con este tipo de operaciones no podramos convertir un nmero real en ente-
ro. Si tenemos el nmero 2.3, al pasarlo a entero tendramos que dejar un 2. Aqu si que estamos
perdiendo informacin. Las instrucciones ITR o RTB no existen. Estas operaciones en las que
despreciamos parte del valor las hacemos con estas otras instrucciones:
L 8
T MW 10
L MW 10
ITD
T MD 20
DTR
T MD 30
SQRT
T MD 40
TRUNC
T MW 50
Aqu estamos gastando instrucciones de ms, pero as podemos observar como se van si-
guiendo los pasos en las palabras de marcas.
En la tabla de observar / forzar variables podemos ver cmo hace los cambios y en qu
se convierte el 8 inicial que hemos introducido.
Ejercicio resuelto
Una forma de hacerlo es utilizar nmeros reales para todo. As no hay problemas de forma-
tos. Vamos a ver cmo haramos una divisin de reales.
Si nos damos cuenta en las direcciones que nos ha asignado, veremos que cada real ocu-
pa una doble palabra.
L #VALOR_A
L #VALOR_B
T #RESULTADO
OB 1
CALL FC 1
VALOR_A:= 8.0
VALOR_B:= 4.0
RESULTADO:= MD 0
Los valores que le pongamos tienen que ser reales. Si queremos dividir 8 entre 4 como en
este caso, tenemos que escribir 8.0 y 4.0 para distinguir el 8 y 4 enteros del 8.0 y 4.0 reales.
La MD 0 estar en el acumulador. Lo que habr all ser una serie de ceros y unos. Si no-
sotros observamos esto en binario veremos la serie de ceros y unos. Veremos algo parecido a
esto: 001111001...........
Tendremos que decirle que queremos observarlo en formato real. As a la hora de traducir
ya sabe que una parte de los ceros y unos corresponde a la parte entera, y otra corresponde a la
parte decimal.
Si nos situamos con el cursor en el lugar donde tenemos que rellenar un parmetro, al pul-
sar F1 nos sale directamente la ayuda del tipo de datos que se nos est pidiendo en ese parme-
tro. Nos dice la longitud del tipo de datos, como se forma en el acumulador y un ejemplo de cmo
tenemos que escribirlo.
Veamos lo que haramos si quisisemos mezclar nmeros reales con nmeros enteros.
Ejemplo:
Por ejemplo, supongamos que queremos sumar 5+9 y hacer su raz cuadrada.
Hemos tenido que hacer dos cambios de formato. Tenamos que convertir un entero en un
real. En principio un entero est en 16 bits y un real son 32 bits. Primero hemos hecho un cambio
de tamao y luego un cambio de formato.
A la hora de sacar el resultado, lo hemos truncado para que nos vuelva a quedar un ente-
ro.
Ejercicio propuesto: Hacer varias de estas operaciones en KOP y en FUP con los instruc-
ciones que se han visto anteriormente.
Ejercicio resuelto.
El PLC tiene que decidir las horas de luz y las horas de oscuridad que va a tener el galline-
ro.
Se trata de optimizar las horas de luz y las horas de oscuridad para obtener la mayor can-
tidad de huevos posible.
Llevaremos la cuenta de los huevos que han puesto hoy en un contador, y los huevos que
pusieron ayer en otro contador.
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. En-
tonces lo que haremos ser aumentar en 5 los minutos de luz y los minutos de oscuridad. De ma-
nera que les hacemos el da ms largo.
Si hoy han puesto los mismos huevos que ayer, supondremos que las gallinas estn indife-
rentes. Entonces lo que haremos ser disminuir en 1 los minutos de luz y los minutos de oscuri-
dad. Iremos haciendo el da ms corto poco a poco hasta que pongan menos huevos.
En principio haremos dos DBs para guardarnos los datos que luego vamos a utilizar. Ha-
remos un DB que se llame puestas, y all guardaremos los huevos que han puesto hoy y los hue-
vos que pusieron ayer.
A continuacin haremos una FC 1. All haremos los dos contadores para simular los hue-
vos que pusieron ayer y los huevos que han puesto hoy.
Finalmente haramos una OB 1 para decidir cuando tenemos que acceder a cada uno de
los bloques que hemos hecho.
FC1
U E 0.0
ZV Z 1
U E 0.1
ZR Z 1
U E 1.0
ZV Z 2
U E 1.1
ZR Z 2
L Z 1
T PUESTAS.HUEVOS_HOY
L Z 2
T PUESTAS.HUEVOS_AYER
BE
FC2
L PUESTAS.PUESTAS_HOY
L PUESTAS.PUESTAS_AYER
>I
SPB CONT
<I
SPB TRIS
==I
SPB INDI
BEA
CONT: L TIEMPOS.MINUTOS_LUZ
L TIEMPOS.DATO_CONT
Curso STEP 7, nivel I y nivel II. Pg. 159 de 247
http://industrial.uv.es
-I
T TIEMPOS.MINUTOS_LUZ
L TIEMPOS.MINUTOS_OSC
L TIEMPOS.DATO_CONT
-I
T TIEMPOS.MINUTOS_OSC
BEA
TRIS: L TIEMPOS.MINUTOS_LUZ
L TIEMPOS.DATO_TRIS
+I
T TIEMPOS.MINUTOS_LUZ
L TIEMPOS.MINUTOS_OSC
L TIEMPOS.DATO_TRIS
+I
T TIEMPOS.MINUTOS_OSC
BEA
INDI: L TIEMPOS.MINUTOS_LUZ
L 1
-I
T TIEMPOS.MINUTOS_LUZ
L TIEMPOS.MINUTOS_OSC
L 1
-I
T TIEMPOS.MINUTOS_OSC
BE
La FC1 la va a tener que estar haciendo siempre. Siempre tiene que estar vigilando si hay
un nuevo huevo y registrar la cuenta en su correspondiente DB.
La FC2 la tendr que hacer en realidad 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.
UC FC 1
U E 0.5
FP M 0.0
CC FC 2
BE
Ejercicio propuesto: Resolver el problema en KOP y en FUP con las instrucciones vistas
anteriormente.
Ejercicio resuelto.
SPA y SPB
En S5 son los saltos que utilizamos para saltar entre distintos bloques de programa. En S7
son los saltos que utilizamos para saltar a otros puntos de programa siempre dentro del mismo
bloque.
SPA y SPB no sirven en STEP 7 para saltar de unos bloques a otros. Para ello tenemos
las llamadas a otras FCs que hemos visto antes. Tenemos las llamadas condicionales y las lla-
madas incondicionales
U E 0.0 U E 0.0
.......
Tenemos otros saltos como: SPB SPBN SPBB SPBNB SPO SPS
Si al salto SPB le aadimos una N, tenemos el salto SPBN. Estamos negando el significa-
do del salto SPB. Significa que saltara cuando no se cumpla la condicion.
Si al salto SPB le aadimos la letra B, tenemos el salto SPBB. Con este salto, saltamos
cuando se cumple la condicin y adems nos guardamos el valor del RLO en ese instante.
Antes de utilizar el salto tenemos que cargar un nmero. Dependiendo del nmero que
pongamos aqu saltar a una meta o a otra. Si ponemos un nmero que se sale del rango, (canti-
dad de SPA que tenemos a continuacin del salto) saltar a una meta determinada. A la que indi-
camos en el salto SPL.
En el ejemplo que vamos a hacer, si nos salimos del rango no queremos que haga nada.
Si nos vamos al catlogo de KOP o de FUP, veremos que no tenemos tantos tipos de sal-
tos. Slo tenemos el salto llamado JUMP. Con esta instruccin, saltaremos si se cumple la condi-
cin. En KOP y en FUP, siempre podemos poner delante de la instruccin que sea un contacto
con la condicin que queremos que se ejecute.
Nosotros saltaremos siempre con este salto y pondremos delante la condicin que quera-
mos.
Tambin tenemos el salto JMPN. Esto significa que saltaremos cuando no se cumpla la
condicin precedente.
Para situar posteriormente las metas, tenemos LABEL.
Ejercicio resuelto
Queremos hacer una mezcla de pintura. Tenemos tres posibles colores para hacer.
Dependiendo del cdigo que introduzcamos queremos que la mezcla sea distinta.
Para formar el ocre queremos poner 60 gramos de amarillo, 20 gramos de azul y 20 gra-
mos de rojo.
Los colores los van a simular unas palabras de marcas. Es decir si queremos que se forme
el ocre, lo que queremos es que en la palabra de marcas 0 haya un 60, etc.
En el ejemplo, si seleccionamos como cdigo del color 0, saltar al primer SPA. En este
salto estamos diciendo que salte a la meta de ERRO. Si el cdigo del color es 1 saltar al segun-
do SPA. Es decir, saltar a la meta de OCRE. Si el cdigo del color es 2, saltar al tercer SPA. Es
decir, iremos a la meta de VERD. Por ltimo, si el cdigo de color es 3, saltaremos a la meta de
MARR.
SOLUCIN EN AWL
FC 1
L #COLOR
SPL ERRO
T MW 2
T MW 4
BEA
OCRE: L 60
T MW 0
L 20
T MW 2
L 20
T MW 4
BEA
VERD: L 50
T MW 0
L 50
T MW 2
L 0
T MW 4
BEA
MARR: L 40
T MW 0
L 30
T MW 2
L 30
T MW 4
BE
Cuando utilizamos el SPL no ponemos BEA antes de las metas. Directamente detrs de
los SPA que queramos poner, ponemos la meta a la que tiene que saltar en caso de que nos sal-
OB 1
CALL FC 1
COLOR:= 1
BE
Veremos que si ponemos un cdigo de color que no existe, el programa no hace nada.
Estar haciendo lo que pone en la meta ERRO, que es finalizar el programa sin hacer nada.
Ejercicio propuesto: Realizar el programa en KOP y en FUP con las instrucciones vistas
anteriormente.
Ejercicio resuelto
SET: Pone el RLO a 1 incondicionalmente. Cuando queremos que una instruccin condi-
cional se ejecute siempre, aadimos la instruccin SET justo antes de la instruccin en cuestin.
SAVE: Hace una copia en el registro BIE del valor actual del RLO.
En un momento determinado del programa nos puede interesar saber si la salida se activ
porque la condicin que se cumpla era la primera.
Cuando queramos consultar si este bit est activo, escribiremos la instruccin: U BIE
U E 0.0
U E 0.1
SAVE
O(
U E 0.2
O E 0.4
= A 4.0
U E 1.2
U E 1.3
= A 4.1
U A 4.0
U BIE
= A 4.7
BE
Estas instrucciones tambin las tenemos en KOP y en FUP. Lo que ocurre es que su utili-
zacin es diferente. El comando SAVE en KOP est definido como una bobina. Esto quiere decir
que tiene que ser un final de segmento. La rama por la que queremos controlar si pas la seal,
tenemos que dibujarla dos veces.
En el segundo segmento dibujamos el circuito que queremos resolver. Dibujamos las tres
ramas y la asignacin de la salida correspondiente.
En un tercer segmento, hacemos la consulta del bit guardado con el SAVE y le asignamos
la salida 4.7.
2. 18. Flancos
Ejercicio resuelto.
Por ejemplo, tenemos una FC que hace un desplazamiento de bits. Queremos que haga el
desplazamiento cuando le demos a la entrada E 0.0.
Si escribimos:
U E 0.0
CC FC 1
BE
Mientras tengamos activa la E 0.0 estar saltando a la FC 1.Por rpido que hagamos el
cambio a la entrada seguro que se ejecuta ms de un ciclo de scan. Se har ms de un despla-
zamiento de bits.
Si queremos que slo lo haga una vez, deberamos utilizar los flancos.
U E 1.1
FP M 0.0
CC FC 1
BE
FC1
L EB 0
T MW 2
L MW 2
SRW 1
T AW 4
BE
U E 1.0
ZV Z 1
U E 1.1
ZV Z 2
L Z 1
L Z 2
>I
FP M 0.0
CC FC 1
BE
En el momento en que Z1 pase a ser mayor que Z2 se har el desplazamiento de los bits.
Posteriormente aunque Z1 siga siendo mayor que Z2 ya no se har ms saltos.
Para detectar un flanco positivo o negativo de la entrada E 0.0 lo haramos del siguiente
modo:
KOP
Teora
Vamos a hacer un ajuste de valores analgicos. Vamos a suponer que tenemos un tanque
de lquido que como mnimo va a contener 5 litros de lquido, y como mximo va a contener 400
litros.
Dentro del tanque vamos a tener una sonda de nivel con la que queremos saber los litros
de lquido que contiene.
400L
5L
Por otro lado sabemos que nuestra sonda puede medir entre 0 y 27648 tericamente.
Lo primero que vamos a hacer es calcular el valor real al que podemos llegar con la entra-
da analgica que tenemos.
Vamos a transferir el valor de la entrada analgica a una palabra de marcas y vamos a ob-
servar el valor de la palabra de marcas.
L PEW 288
T MW 10
Lo nico que tenemos que hacer es una regla de tres. Para hacer los clculos tenemos
que tener en cuanta un par de cosas. Lo primero que tenemos que saber es que los valores reales
slo los podemos almacenar en dobles palabras.
SOLUCIN EN AWL
FC 3
IN VALOR_SONDA INT
IN NIVEL_SUPERIOR REAL
IN NIVEL_INFERIOR REAL
L #VALOR_SONDA
ITD
DTR
T #V_SONDA_REAL
L #NIVEL_SUPERIOR
L #NIVEL_INFERIOR
-R
T #RANGO
L #V_SONDA_REAL
L 27648.0
/R
L #RANGO
*R
L #NIVEL_INFERIOR
T #VALOR_GRADUADO
BE
OB1
CALL FC 3
VALOR_SONDA:= #PEW288
NIVEL_SUPERIOR:= 400.0
NIVEL_INFERIOR:= 5.0
VALOR_GRADUADO:= MD 0
En la doble palabra de marcas podemos ver el valor graduado del nivel que est midiendo.
Es necesario que sea una doble palabra de marcas porque el valor que queremos observar es un
valor real. Es el resultado de operaciones reales.
Adems a la hora de observar el valor, lo vamos a tener que hacer en formato de nmero
real. Si lo intentamos ver en formato de nmero entero veremos un valor de algo que no sabemos
interpretar.
Ejercicio resuelto.
Lo que hemos visto en el ejercicio anterior, tambin lo podemos hacer con unas FCs ya
programadas.
Lo nico que tenemos que hacer es traer esta funcin a nuestro proyecto y hacer una lla-
mada. Rellenamos los parmetros que nos pide y ya tenemos la funcin hecha.
Al utilizar estas funciones ya hechas, tenemos una ventaja. Nos ofrecen informacin en
caso de producirse algn tipo de error en el escalado.
Ejercicio resuelto
Vamos a suponer que tenemos las mquinas distribuidas en dos polgonos. Dentro de ca-
da polgono tenemos tres plantas y dentro de cada planta tenemos 4 mquinas.
De cada una de esas mquinas tenemos que controlar los datos que hemos comentado
antes.
Para ello nos vamos a crear unos UDT del tipo que nos interese.
Para nosotros el UDT 1 va a ser el tipo de datos que asignaremos a cada una de las m-
quinas.
Ya tenemos definido un tipo de datos. Ahora cada mquina ser de tipo UDT 1.
Dentro de cada mquina estamos incluyendo implcitamente cada uno de los tres datos
que hemos dicho antes.
Le llamamos DATOS.
Dentro de cada una de estas lneas, estn implcitas tres plantas dentro de cada una de las
cuales hay cuatro mquinas, dentro de cada una de las cuales hay tres datos.
Ahora la ventaja que tenemos a parte de habernos ahorrado escribir muchos datos, es la
manera de acceder a los datos.
Si de memoria tenemos que saber en que direccin se encuentra cada uno de los datos,
tendramos que estar mirando cada vez el DB para saber a que direccin tenemos que acceder.
Ahora si dentro del DB seleccionamos el men Ver > datos veremos todos los datos que
hemos creado con el nombre que tienen.
De este modo, podemos acceder por su nombre al dato que queramos. Por ejemplo, po-
demos acceder a la temperatura de la mquina dos de la planta tres del polgono 1 de la siguiente
manera:
DATOS.POLI1.PLANTA3.MAQ2.TEMP
De este modo no tengo por qu saber qu direccin tiene esta lnea dentro del DB. Accedo
a cada cosa por su nombre.
Vamos a ver como ejemplo cmo accederamos a dos de los datos que tenemos en el DB.
Por ejemplo vamos suponer que queremos poner en marcha una de las mquinas con la
entrada E0.0. (Mquina tres de la planta dos del polgono 1)
U E 0.0
= DATOS.POLI1.PLANTA2.MAQ3.MARCHA
Si hacemos esto y luego vamos a observar el valor actual del mdulo de datos, veremos
que hemos introducido un uno en este bit.
Vamos a ver como leeramos una temperatura. Suponemos que la entrada analgica va a
ser la temperatura de la mquina.
L PEW 288
L DATOS.POLI1.PLANTA1.MAQ1.TEMP
T PAW 288
Ejercicio resuelto
Podemos hacer operaciones lgicas con palabras. Las operaciones lgicas se realizan bit
a bit.
L MW 0
L MW 2
UW
T MW 4
Ejercicio resuelto
TEORA PREVIA: Concepto de operacin lgica.
Vamos a exponer un ejercicio en el que utilizaremos la operacin XOR. Si hacemos un
XOR entre dos palabras, el resultado que obtendremos ser:
Si los dos bits coinciden el resultado ser cero. Si los dos bits son distintos e, resultado
ser 1.
Veamos un ejemplo:
0001_1001_0101_0110
0101_0000_1110_1000
0100_1001_1011_1110
Si observamos el resultado, all donde veamos un 1 significa que en ese bit difieren las
dos palabras anteriores de las cuales hemos hecho una XOR
Supongamos que nosotros tenemos una serie de alarmas en la instalacin. Algunas de
ellas sern contactos normalmente cerrados y otros sern contactos normalmente abiertos. Unos
debern permanecer a uno para estar en estado correcto, y otros debern estar a cero para estar
correctamente.
Supongamos que la secuencia buena de las alarmas es la siguiente:
11100010
Lo que queremos es que en caso de que alguna alarma salte, parpadee la salida A4.0. y
adems nos indique la alarma que ha sido disparada en al byte de salidas 5.
Ejercicio propuesto: Resolver esto mismo en KOP y en FUP utilizando las instrucciones
vistas anteriormente.
Ejercicio propuesto: Hacer ejemplos utilizando las otras operaciones lgicas con palabras,
en cada uno de los tres lenguajes.
3. OPERACIONES DE SISTEMA.
3. 1. Deteccin de errores.
Teora.
Cuando el PLC se va a STOP o simplemente nos da un error, nos ofrece un men de in-
formacin donde nos dice cual es el problema por el cual se encuentra en este estado.
Vamos a hacer un ejemplo en el cual introduzcamos errores para que el PLC se vaya a
STOP y nos de un error y luego le pediremos informacin sobre el error.
OB 1
U E 0.0
CC FC 1
BE
FC 1
UC FC 2
BE
FC 2
U E 0.7
CC FC 4
BE
Vamos a la ficha de Bufer de diagnstico. En esta ficha podremos ver las 100 ltimas
causas por las cuales el PLC se ha ido a STOP.
A continuacin vamos a la ficha de Pilas. Aqu podemos ver el camino que ha seguido el
PLC antes de irse a STOP. En nuestro caso veremos que ha ejecutado el OB 1, ha saltado a la
FC 1, despus a la FC2, y se ha quedado colgado aqu.
En la parte inferior izquierda, vemos que tenemos un botn que se llama USTACK. Si pin-
chamos all veremos el estado en el que estaba la CPU en el instante en el que se fue a Stop.
En la parte izquierda de la ficha nos da informacin del estado del PLC cuando se fue a
STOP. Adems tenemos un botn que dice 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 tena-
mos con nuestro programa, etc.
3. 2. Instruccin LOOP
Teora
Veamos un ejemplo. Las instrucciones necesarias para utilizar la instruccin son las si-
guientes:
L 20
META: T MB 0
..............
..............
L MB 0
LOOP META
..........
Primero estamos cargando un 20. A continuacin viene la meta del LOOP. Cuando se lee
la instruccin LOOP, el PLC decrementa en una unidad lo que hay en el ACU 1. Si es distinto de
cero, salta a meta. En el momento en que al decrementar una unidad se encuentra con un cero,
ya no ejecuta ms saltos a la meta.
El byte de marcas cero, lo utilizamos por si dentro del bucle vamos a tocar lo que hay en el
ACU 1.
Si dentro del bucle no vamos a utilizar el acumulador, no son necesarias las instrucciones
de carga y transferencia.
Ejercicio resuelto
Curso STEP 7, nivel I y nivel II. Pg. 195 de 247
http://industrial.uv.es
L 5
META: T MB 0
L 5
L MB 0
==I
S A 4.0
L 4
L MB 0
==I
S A 4.1
L 3
L MB 0
==I
S A 4.2
L 2
L MB 0
==I
S A 4.3
L 1
L MB 0
==I
S A 4.4
L 0
L MB 0
==I
S A 4.5
L MB 0
LOOP META
Curso STEP 7, nivel I y nivel II. Pg. 196 de 247
http://industrial.uv.es
BE
Con esto veremos que se encienden las salidas 4.0, 4.1, 4.2 4.3 y 4.4. La 4.5 no se en-
ciende. Dentro del bucle la MB 0 nunca vale cero. Cuando vale cero ya no se ejecuta el bucle.
Esta instruccin no la tenemos como tal en KOP ni en FUP. En caso de necesitar de una
instruccin as, tendremos que hacernos nosotros el funcionamiento a partir de las instrucciones
de salto que tenemos.
Veamos un listado de los OBs que tenemos disponibles y despus probamos a ejecutar-
los con ejemplos que contengan errores.
OBs
Los OBs son la comunicacin entre el sistema operativo de la CPU y el programa de
usuario. Con los OBs podemos:
o Arrancar la CPU.
Nmero OB Nombre OB
OB1 Principal.
OB101 Rearranque.
o OB 1: Programa cclico.
o Alarmas horarias.
Arrancan mediante una llamada a la SFC 32. Arrancan despus de un tiempo preestable-
cido. Puede anularse una alarma que todava no ha sido arrancada. (SFC 33)
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.
Si el evento ocurre en otro canal del mismo mdulo, no puede activarse momentneamen-
te ninguna alarma de proceso. En S7 300 se pierden. En S7 400 no se pierden. Se ejecutan
cuando acaban.
o OB de error de tiempo
Si en un mismo ciclo se llama dos veces al OB 80 debido a la superacin del tiempo de ci-
clo, la CPU pasa a STOP. Es posible evitar esto llamando a la SFC 43 en un lugar adecuado.
SFCs
o Parmetros ms importantes
RB a cero significa que ha aparecido un error. Existe una tabla de cdigos de error genera-
les para los valores de RET_VAL.
- Contadores.
- Temporizadores.
Copia lo que cabe tanto si el campo destino es mayor o menor que el campo fuente. No
existen informaciones de error especficas.
- SFC 22: Con esta funcin podemos crear un bloque de datos. Se hace con el parmetro
CREAT_DB. No contiene valores inicializados. La longitud de los DBs debe ser un nmero par.
- SFC 23: Con esta funcin podemos borrar un bloque de datos. DEL_DB.
Con esta funcin podemos aprovechar el espacio. No hay control sobre si la compresin
se ha realizado correctamente. Se puede controlar llamando a la SFC 25 cclicamente.
Con la SFC 44 REPL_VAL, se transfiere un valor al ACU 1 del nivel de programa causan-
te del error.
La SFC 44 slo debe ser llamada en el OB de error sncrono (OB 121, OB 122)
Puede continuar el programa en caso de error. Utiliza el nuevo valor que hay en el ACU 1.
- SFC 0 SET_CLK para ajustar la hora. Con esto se ajusta la fecha y la hora de la CPU.
Si el reloj es un maestro, la CPU arranca tambin la sincronizacin de la hora al llamar a la SFC 0.
Los intervalos de sincronizacin se ajustan con STEP 7.
Se ha de tener en cuenta que el tipo de datos DT debe ser generado previamente con la
FC 3 D_TOD_DT antes de asignarlo al parmetro de entrada.
- SFC 48: Sincronizacin de relojes esclavos. Transmite la fecha y la hora desde el reloj
maestro de un segmento de bus a todos los relojes esclavos de este mismo segmento de bus.
- Ajustar el contador de horas de funcionamiento con la SFC 2. Con esto se ajusta el con-
tador de horas de funcionamiento de la CPU a un valor preestablecido. Es posible ajustar una
cantidad especfica de contadores para cada CPU.
- SFC 64 lee el cronmetro del sistema de la CPU. Si se sobrepasa el cronmetro del sis-
tema, se comienza a contar desde cero.
Con la SFC 57 se transfieren todos los registros de un mdulo que han sido configurados
con STEP 7 en el correspondiente SDB, al mdulo.
Ejercicio resuelto.
Vamos a hacer un programa con el cual la CPU se vaya a STOP por un error de tiempo.
OB1
L 50000
META: U E 0.0
= A 4.0
LOOP META
BE
Como vemos este programa lo que hace es ejecutar 50000 veces este bucle. Si ponemos
un nmero suficientemente grande, no se podr ejecutar el bloque completo dentro del tiempo
definido como ciclo de scan. En cuanto esto ocurra, la CPU se ir a stop por un error de tiempo.
Podemos programar algo en la OB 80. De este modo, cuando ocurra un fallo de tiempo, en
lugar de irse la CPU a STOP, lo que har ser ejecutar lo que ponga en este bloque.
Se ha ido a STOP porque le faltaba un mdulo. Si vamos a ver el segundo error veremos
que es un error de tiempo.
Probamos ahora el programa. Veremos que el autmata sigue dando un error pero no se
va la CPU a STOP. Adems podemos comprobar que sigue funcionando.
Dentro del bucle podemos hacer una llamada a la SFC 43. Esta funcin lo que hace es re-
lanzar el tiempo de ciclo.
Para ver lo que hace la SFC 43, podemos ir al administrador de SIMATIC y pinchar con el
interrogante de ayuda encima de la SFC 43. Se abrir una ventana en la que nos explica lo que
hace la SFC 43.
De este modo cada vez que se ejecuta el ciclo, tenemos ms tiempo de ciclo de scan. Po-
demos dejar el PLC bloqueado y que se quede durante varios minutos sin terminar el OB1.
Si hacemos lo que hemos dicho, conseguiramos que el OB1 tardara en ejecutarse mucho
tiempo y que no diera ningn error y que no se fuera a STOP.
Esto es peligroso porque se est leyendo el bloque cada varios segundos. Si tenemos
alarmas programadas u otras operaciones que tenga que ejecutar el PLC, slo se dar cuenta de
que lo tiene que ejecutar cada vez que lea la instruccin.
Puede darse el caso de que salte una alarma y hasta el cabo de unos segundos no reac-
cione el PLC.
Ejercicio resuelto.
o OB 100.
Lee este bloque una sola vez y a continuacin pasa a leer el OB 1 de manera cclica. Has-
ta que no se ejecuta un nuevo rearranque no se vuelve a leer el OB 100.
Vamos a programar el OB 100. Vamos a decirle en el OB 100 que ponga unos valores a
unas palabras de marcas.
Luego haremos un OB 1 que utilice estos datos de las palabras de marcas y posteriormen-
te que los modifique. Veremos que cada vez que rearrancamos el autmata, toma los valores que
hemos definido como iniciales.
OB100
L 10
T MB 100
L 8
T MB 101
BE
OB 1
L MW 100
T AW 4
U E 0.0
SPB M001
BEA
M001: L W#16#FFFF
BE
Cada vez que activemos la E 0.0, estaremos cambiando el valor de la palabra de marcas
100. Se quedar con este valor hasta que rearranquemos el autmata.
En l cargamos todos los datos importantes de inicializacin de proceso. Cada vez que
arranquemos de nuevo, se tomarn los valores iniciales.
Si no hacemos esto, los DB se guardan los valores actuales. Si por cualquier causa en un
DB hay datos que no son los iniciales, cada vez que transfiramos al autmata, estamos transfi-
riendo los valores actuales.
o OB 101.
Es similar al OB 100.
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 em-
pieza 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.
Solucin en AWL
OB 100
M001: UN M 0.0
L S5T#3S
SE T 1
UN T 1
BE
A continuacin programaramos el OB 1.
Teora.
Para programar este tipo de alarmas, vamos de nuevo al hardware. Pinchamos con el bo-
tn derecho encima de la CPU. Entramos en propiedades del objeto.
En este caso no tenemos que decirle que tenemos la alarma activa. Slo con programar el
OB correspondiente tenemos suficiente.
Tenemos que decirle cada cuanto tiempo queremos que se ejecute el OB de la alarma.
En este caso vamos a hacer un ejemplo que ejecute el OB 21 cada dos segundos.
Ejemplo de OB 21:
UN A 5.0
= A 5.0
De este modo tendremos un intermitente del tiempo que hayamos programado en la alar-
ma.
Teora
Para programar este tipo de alarmas, acudimos de nuevo al hardware, y entramos con el
botn derecho en propiedades del objeto.
Nosotros programamos una accin (por ejemplo activar una entrada), y un tiempo. Al cabo
de este tiempo que definimos despus de haberse dado la accin, se ejecutar el OB que corres-
ponda.
Tenemos que tener cuidado de no programar este tipo de alarmas en un bloque que se
ejecute todos los ciclos. Si hacemos esto, nunca acabar de contar el tiempo definido, y por tanto
no se ejecutar el OB en cuestin.
Teora.
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, pin-
chamos encima de la CPU con el botn derecho, y entramos en propiedades de la CPU.
Nosotros vamos a programar la alarma. Para ello tendremos que decirle que la alarma est
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 la OB 10 vamos a programar:
OB10
L W#16#FFFF
T AW 4
BE
OB1
U A 4.7
L S5T#10S
SE T 1
U T 1
R A 4.7
R A 4.6
R A 4.5
R A 4.0
U E 0.0
= A 4.0
BE
De este modo podremos comprobar que cada minuto se ejecuta el OB 10, y que mientras
tanto, se est ejecutando el resto del programa.
El OB10, se ejecutar cada minuto desde la fecha y hora que le dimos de comienzo.
Teora
Estas alarmas tambin las podemos programar con las SFC 28 y 30.
Con una llamada a la SCF 30 activamos la alarma. Con una llamada a la SFC 28 le deci-
mos cada cuanto tiempo queremos que se active, y desde cuando queremos que se active.
Para decirle desde cuando queremos que se active, tenemos que darle un formato de fe-
cha y hora.
Como parmetro de entrada por salida tampoco podemos poner un parmetro de formato
fecha y hora. Despus desde la OB 1 tendramos que introducir el parmetro y hemos dicho que
no podemos trabajar con 64 bits.
A la FC que hagamos, le daremos como parmetros dos entradas. Una ser de formato fe-
cha y la otra ser de formato hora. Estos dos formatos son de 32 y 16 bits cada uno.
Teora.
Tambin podemos crear un programa como archivo fuente o como archivo de texto en un
editor de texto.
Los programas de la CPU estn formados bsicamente por los bloques que programamos,
la configuracin y la conexin a las distintas redes que vayamos a utilizar.
Podemos hacer todos los bloques juntos y compilarlos de una sola pasada.
Hemos dicho que el programa se compone de los bloques + la configuracin. Con el editor
de textos podemos hacer los bloques, pero no la configuracin.
Para crear un proyecto completo, tendremos que hacer la configuracin normalmente con
el administrador de SIMATIC, y luego crear los bloque a parte en un editor de textos.
El programa lo podemos hacer directamente con el editor de textos. No nos hace falta para
nada el STEP 7. Pero a la hora de transferir el programa a la CPU, tendr que estar completo con
su configuracin y hecho en STEP 7.
Tenemos que tener en cuenta escribir un ; detrs de cada instruccin. Adems tenemos que
respetar los espacios que luego se nos van a requerir en Step 7.
Creamos un proyecto en STEP 7. Lo podemos crear sin decirle el equipo que tenemos.
Desde esta fuente nueva podemos entrar en el editor haciendo doble clic en ellas
Para crear los bloques en el editor de textos podemos utilizar plantillas ya existentes.
Las plantillas las podemos modificar sin incluyen algo que no nos interesa.
Al compilar es cuando se generan los bloques. Slo se generan los que no contengan erro-
res.
Para generar un archivo fuente, tenemos que tener en cuenta las siguientes reglas genera-
les:
o Los comentarios deben comenzar con dos barras inclinadas (//), y la entrada
de comentarios debe finalizarse con la tecla enter.
o El OB1 que es el que llama a otros bloques tiene que estar al final. Cada
uno de los otros bloques tiene que estar detrs de los bloques a los que lla-
ma.
o Tabla de declaracin.
o Fin de bloque.
Para ello tenemos que pasar obligatoriamente por el formato de fuente. Podemos hacer un
bloque a travs de una fuente y protegerlo o tener un bloque ya programado desde el Step 7 y
querer programarlo.
Una vez tengamos el bloque programado, tenemos una opcin en el men de archivo que
nos genera la fuente.
Para poder acceder a esta opcin, tenemos que estar dentro del bloque del cual queremos
tener la fuente.
Una vez le ponemos nombre, nos permite seleccionar qu bloques de los que tenemos
creados, son los que queremos incluir en la fuente. En este caso hemos generado una fuente que
se llama ejemplo, y vamos a incluir solamente el OB 1.
Figura 68. Seleccin de bloques sobre los que queremos generar la fuente
Para proteger bloques, tenemos que estar en formato fuentes. Podemos llegar aqu bien
porque hemos creado directamente una fuente o porque hemos convertido un bloque como aca-
bamos de hacer en este caso.
Para que el bloque quede protegido en la fuente tenemos que aadir la palabra:
KNOW_HOW_PROTECT delante de la definicin de las variables del bloque.
Ahora solo tenemos que compilar el bloque. Cuando compilamos bloques, se generan au-
tomticamente los bloques que tengamos en la fuente. Tenemos que tener en cuenta que no exis-
tan como bloques en el Step 7. Si existen, nos dar un error a la hora de compilar y no se genera-
r el bloque.
Cuando creemos el bloque con una plantilla de bloques, esta palabra de proteccin ya vie-
ne escrita. Veremos que aparece con // delante. De momento est como comentario. Si queremos
proteger estos bloques, slo tenemos que quitar esta doble barra.
Teora.
Adems de las SFC de gestin del reloj que hemos visto anteriormente, tenemos una op-
cin en el men con la que podemos cambiar la hora de la CPU desde la maleta de programacin.
Veremos una ventana con la hora actual de la CPU. Situndonos encima con el ratn, po-
demos cambiar la hora y la fecha.
Adems esta operacin la podemos hacer por programa. Tenemos la funcin SFC 0 para
escribir la fecha y hora de la CPU. Como hemos visto anteriormente, no podemos mover un for-
mato de fecha y hora. Tendremos que hacer una FC en la llamemos a la SFC 0. Primero tenemos
que montarnos el formato de fecha y hora con la FC 3 de la librera. Como parmetros de la nueva
FC que estamos haciendo, tendremos dos palabras. Una ser de tipo fecha y la otra ser de tipo
Ejercicio resuelto.
DEFINICIN Y SOLUCIN
Vamos a activar una luz durante medio minuto todos los das
Como operacin final de este ejercicio tendremos que comparar si la hora actual es a la
vez mayor que la de inicio y menor que la de fin.
Para hacer este tipo de comparaciones tenemos unas funciones dentro de las libreras que
ya estn hechas y slo tenemos que utilizarlas.
Las funciones que estn hechas nos hacen esta comparacin pero no slo con la hora,
sino con formato de fecha + hora.
En consecuencia tendremos que fabricarnos unos formatos de fecha + hora para poder
compararlos.
Lo que vamos a hacer es en principio leer la fecha + hora de la CPU. Con esto tendremos
la fecha + hora actual. Esto lo hace la funcin SFC 1.
Vamos a separar este formato en fecha y hora y nos quedaremos con la fecha de hoy. Es-
to lo hace la FC 6 de la librera.
Esta fecha la juntaremos con la hora de inicio y con la hora de fin que nosotros queramos
para activar la salida.
De este modo ya tenemos la hora de inicio y la hora de fin con la fecha de cada da. He-
mos conseguido lo que queramos.
Vamos a comparar esta hora + fecha de inicio y de fin con la fecha + hora actual.
En los tres formatos la fecha siempre va a coincidir. Siempre ser la fecha de hoy. Lo que
en realidad estamos comparando es la hora.
Antes que nada vamos a ver las funciones que tenemos que gastar de las libreras.
Primero vamos a entrar con la ayuda en cada una de estas funciones para ver los parme-
tros que me va a pedir cada una de ellas.
RET_VAL: Nos va a pedir un valor entero donde nos dejar algn cdigo de error en caso
de producirse.
CDT: Ser una variable de formato fecha y hora donde nos dejar la fecha y la hora ledas
de la CPU.
Vamos a la FC3:
RET_VAL: Nos va a devolver la fecha y la hora que le hemos dado juntas en un formato fe-
cha y hora.
Vamos a la FC6:
Vamos a la FC14:
RET_VAL: Nos pide una salida de tipo binario. Este bit se activar si la primera entrada que
hemos metido es mayor que la segunda.
Vamos a la FC23:
RET_VAL: Nos pide una salida de tipo binario. Este bit se activar si la primera entrada es
ms pequea que la segunda entrada.
Para poder utilizar todas estas funciones tenemos que tenerlas dentro de nuestro proyecto.
La primera cosa que tenemos que hacer es traerlas a nuestro proyecto para poderlas llamar y
poderlas utilizar.
Vamos a crear una FC que no tenga el mismo nmero que las que tenemos que utilizar.
Vamos a hacer por ejemplo la FC2.
FC2
IN HORA_INICIO TIME_OF_DAY
IN HORA_FIN TIME_OF_DAY
CALL SFC 1
RET_VAL:= #ERROR
CDT:= #FECHA_Y_HORA_ACTUAL
CALL FC 6
IN:= #FECHA_Y_HORA_ACTUAL
RET_VAL:= #FECHA_ACTUAL
CALL FC 3
IN1:= #FECHA_ACTUAL
RET_VAL:= F_H_INICIO
CALL FC 3
IN1:= FECHA_ACTUAL
IN2:= #HORA_FIN
RET_VAL:= F_H_FIN
CALL FC 14
DT1:= #FECHA_Y_HORA_ACTUAL
DT2:= #F_H_INICIO
RET_VAL:= #BIT_1
CALL FC 23
DT1:= #FECHA_Y_HORA_ACTUAL
DT2:= #F_H_FIN
RET_VAL:=#BIT_2
U #BIT_1
U #BIT_2
= #SALIDA
BE
Ahora nos queda hacer una OB1 para decir cuando tiene que ejecutarse esta FC y ade-
ms con que valores tiene que ejecutarse.
OB1
HORA_INICIO:= TOD#8:23:00
HORA_FIN:= TOD#8:23:30
SALIDA:= A 4.0
BE
En estos parmetros le decimos a la hora que queremos que se active la salida y a la hora
que queramos que se desactive la salida, y adems la salida que queremos que se active.
El hacerlo como parmetro, nos da adems la ventaja de poder cambiar desde aqu estos
datos sin tener que entrar en la FC que hemos programado.
Si nos interesa guardar esta FC en una librera, lo que tenemos que hacer es el proceso
inverso al de antes. Abrimos o creamos una librera nueva, y arrastramos la FC a la librera que
nos interesa.
Ejercicio propuesto: Resolver esto en KOP y en FUP con las instrucciones vistas anterior-
mente.
Ejercicio resuelto.
Luego lo que tenemos que hacer es una comparacin entre este cdigo interno y el par-
metro que yo le estoy introduciendo del da de la semana que yo quiero.
Estos bits son los cuatro ltimos del formato de fecha y hora.
Nosotros no podemos manejar 64 bits. No podemos pasar como parmetro 64 bits, ni po-
demos cargar y transferir. Los acumuladores son de 32 bits. Como mximo podemos mover for-
matos de 32 bits.
Para trabajar con este tipo de formatos tenemos unas FC hechas en unas libreras que nos
permiten cambiar este formato de 64 bits y transformarlo en formatos de 32 bits.
Tenemos una FC que nos corta el formato de fecha y hora y nos lo convierte en formato de
slo fecha.
Tenemos otra FC que nos corta el formato fecha y hora y nos devuelve slo la hora.
Tenemos otra FC que lee el formato fecha y hora y nos devuelve un nmero entero que co-
rresponde al da de la semana.
Primero tenemos que ir al men de Archivo y abrir una librera. Esto lo hacemos desde el
Administrador de Simatic.
Una vez estemos all tenemos que seleccionar las Libreras estndar de la versin 3.
Aqu dentro encontramos varias carpetas de librera. Si vamos a los bloques de la librera
IEC vemos que la FC 7 se llama DT_DAY. Es la que nos convierte un formato fecha y hora en un
formato Da de la semana.
Vemos que como parmetros nos va a pedir un formato fecha y hora y nos devuelve un en-
tero que es el da de la semana con el cdigo que podemos ver en la ayuda.
Ahora slo nos queda hacer el programa. Tendremos primero que llamar a la SFC 1 para
leer la fecha y la hora que tenemos en la CPU. Una vez tengamos la fecha y la hora, tendremos
que sacar de all el da de la semana.
Una vez tengamos el da de la semana, compararemos con un nmero entero para decirle
el da de la semana que queremos que haga algo.
FC3
CALL SFC 1
SDT:= FECHA_HORA
RET_VAL:= ERROR
CALL FC 7
SDT:= FECHA_HORA
RET_VAL:= DIA_SEMANA
L DIA_SEMANA
L DIA
==I
= SALIDA
OB1
CALL FC 3
SALIDA:= A4.0
DIA:= 3
Teora.
AUF DB 3
U T 2
CC FC 7
L Z 4
...........
En todas estas instrucciones estamos gastando nmeros que no tienen nada que ver con
los bits. Hacen referencia al DB n 3, o al temporizador n 2, etc.
Veamos como podemos sustituir estos nmeros por un direccionamiento indirecto. Vamos
a escribir en el lugar donde antes estaba el nmero, un registro que contenga el nmero que no-
sotros queremos.
Como vemos todos estos nmeros son nmeros enteros. Los sustituiremos por un registro
en el que tengamos un entero. Esto ser una palabra. La palabra podr ser de datos, de marcas,
de salidas, de variables locales, etc.
Veamos en unos ejemplos muy sencillos como hacemos esta sustitucin y comprobemos
que funciona.
L 5 AUF DB 10
T MW 2 L 20
........... U T [DBW10]
..............
L EB 1
Curso STEP 7, nivel I y nivel II. Pg. 235 de 247
http://industrial.uv.es
T MW 10
U E 0.0
L S5T#5S
SE T [MW10]
U T [MW10]
= A 4.0
Con esto tenemos programados 255 temporizadores. En la CPU 314 slo pueden funcio-
nar 128, pero nosotros tenemos programados 255 que son todas las combinaciones que podemos
poner en el byte de entradas 1.
L MW 10
T AB 4
L DBD 3
T EW 0
...............
En estos casos tambin estamos gastando nmeros enteros. Estamos accediendo a la pa-
labra de marcas 10 o al byte de salidas 4, etc. En estos casos si que nos estamos refiriendo a bits.
Por ejemplo, al hacer referencia a la palabra de marcas 10, nos referimos a los bits desde
el 10.0 hasta el 11.7.
A la hora de hacer un direccionamiento indirecto tenemos que tener en cuenta que esto
son bits. Tendremos que cambiar estos nmeros por uno registros en los que contenga la direc-
cin de los bits a partir de los cuales tenemos que tomar 8, 16 o 32 bits dependiendo de si quere-
mos acceder a un byte, palabra o doble palabra.
Para ello lo haremos con dobles palabras metiendo en ellas un formato puntero.
Formato de puntero:
L P#4.7 L P#1.0
T MD 2 T MD 2
U E 0.0 L EB [MD2]
= A [MD2] T MW [MD2]
BE BE
L P#0.3 L P#0.0
LAR1 LAR2
U E [AR1,P#1.2] L EB [AR2,P#1.0]
= A 4.0 T MW [AR2,P#100.0]
BE BE
Ejercicio resuelto.
Supongamos que queremos controlar la cantidad de piezas que lleva fabricada una em-
presa. La empresa abre a las ocho de la maana y queremos controlar la cantidad de piezas que
tenemos fabricadas cada dos horas, hasta las 6 de la tarde.
Queremos rellenar este DB con un direccionamiento indirecto. Vamos a hacer una sola
carga y transferencia para rellenar todas las posiciones.
Vamos a comenzar el programa. Primero tenemos que hacer un contador que nos cuente
la cantidad de piezas que llevamos hechas.
OB1
U E 0.0
ZV Z 1
Nosotros haremos que pasen los valores al DB cada 10 segundos en lugar de cada dos
horas para poderlo probar.
UN M 20.0
L S5T#10S
U T 1
= M 20.0
Ahora, la escritura de las distintas casillas del DB las vamos a hacer en la FC 1. Entrare-
mos a la FC 1 cada vez que se active la marca 0.0. Adems tenemos que tener un control de la
cantidad de veces que hemos entrado a la FC para desde all dentro saber a qu casilla tenemos
que acceder.
U M 20.0
FP M 50.0
ZV Z 2
CC FC 1
BE
Lo primero que tenemos que saber es la cantidad de veces que hemos entrado para saber
a que casilla tenemos que acceder. Si es la primera vez que entramos queremos acceder a la
casilla que tiene direccin 2. Si es la segunda vez que entramos, tenemos que acceder a la direc-
cin 4. Si es la tercera vez que entramos tenemos que acceder a la direccin 6, etc.
FC 1
L Z 2
T MW 0
L MW 0
SLW 1
T MW 2
En la MW 2 tenemos 2, 4, 6, 8,..... dependiendo la vez que estemos entrando. Son las di-
recciones a las que queremos ir. En realidad las direcciones tienen formato de puntero. Es decir,
las direcciones a las que queremos ir son 2.0, 4.0, 6.0, .....
Curso STEP 7, nivel I y nivel II. Pg. 239 de 247
http://industrial.uv.es
Para ello vamos a utilizar dobles palabras. Adems tendremos que utilizarlas en formato
puntero. Nosotros tenemos la parte entera. Nos falta el .0 de cada una de estas direcciones. Esto
lo conseguimos desplazando la doble palabra tres posiciones a la derecha.
L MW 2
T MD 4
SLD 3
T MD 8
AUF DB 1
L Z 1
T DBW [MD8]
Si lo dejamos as, cuando acabe con las cinco posiciones que hemos definido, se ir a
stop, porque buscar la direccin 12.0 para escribir en el DB y no la encontrar.
L Z 2
L 5
==I
R Z 1
R Z 2
BE
Teora
Hasta ahora hemos visto que para comparar valores tenamos las instrucciones compues-
tas por el smbolo de comparacin y a continuacin una I o una R dependiendo de si lo que vamos
a comparar son nmeros reales o son nmeros enteros.
Adems podemos comparar dos dobles palabras independientemente de que sean enteros
o reales.
Veamos un ejemplo.
L MD 0
L MD 4
>D
= A 4.0
BE
Con esto comparamos si la serie de ceros y unos que hay en una doble palabra es mayor
o menor que la serie que tenemos en la otra palabra. No importa el formato en el que tengamos
las palabras.
Teora
Vamos a hacer un pequeo programa para poder ver despus las referencias cruzadas.
OB1
U E 0.0
CC FC 1
BE
FC1
U E 0.1
CC FC 2
BE
FC2
U E 1.0
L S5T#3S
SE T 1
U T 1
= A 4.0
L EW 0
T MW 10
BE
Dentro de referencias cruzadas, tenemos arriba una serie de botones. Si nos paramos en-
cima de ellos con el ratn, nos va indicando la funcin de cada uno de ellos.
Vamos a ir pinchando en todos y vamos a ir viendo lo que hace cada uno aprovechando el
programa que hemos hecho antes.
Aqu podemos ver de los bits que estamos utilizando, los que estamos gastando como bits
sueltos, los que estamos gastando como byte completo y los que estamos gastando como pala-
bra.
Donde nos seala con un circulito, es un bit que lo estamos gastando suelto. En los bits
que vemos una cruz significa que los estamos utilizando dentro de un byte, palabra o doble pala-
bra. Esto nos lo indica en la columna que tenemos al lado.
Aqu lo que vemos es la estructura en rbol del proyecto. Vemos los mdulos que son lla-
mados y desde qu mdulos son llamados. En este caso vemos que a la FC 1 se le llama de mo-
do condicional desde el OB 1. A la FC2 se le llama de modo condicional desde la FC 1.
Tambin vemos que tenemos una FC 4 que no la llama nadie en este proyecto.
En todas las ventanas que hemos ido entrando, vemos lo que tenemos seleccionado en el
filtro. El filtro es el botn que lleva dibujado un embudo y un lpiz. All le decimos lo que queremos
ver (entradas, salidas, marcas, etc.) y adems le decimos los bytes que queremos ver.
Aqu vemos aquellos operandos a los que le hemos dado nombre, pero no hemos utilizado
en el proyecto. Esto se supone que ser un error. Si le he dado nombre se supone que lo debera
haber gastado en el programa.
Aqu vemos lo contrario que en el men anterior. Vemos los operandos que hemos gasta-
do pero no le hemos dado nombre en el simblico.
Una vez que estemos all, tendremos que ir al men Edicin > buscar.