Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EJERCICIOS
SIMATIC STEP 7 PROGRAMACIÓN AVANZADA
DEPARTAMENTO ELÉCTRICO
AUTÓMATAS PROGRAMABLES
Este manual de ejercicios resueltos y explicados intenta reforzar los
conocimientos teóricos de las instrucciones básicas de programa-
ción de los autómatas de SIEMENS para los modelos S7 300 y 400,
utilizando ejemplos de aplicación a distintos procesos en donde se
podría utilizar un autómata. Los ejercicios se encuentran resueltos
tomando como referencia S7 300 con CPU 315-2 DP con un modu-
lo de entradas y salidas digitales y un modulo de entradas y salidas
analógicas.
Titulo Página
2. Ejemplo de contadores 11
6. FC´s Parametrizables I 31
7. FC´s Parametrizables II 39
8. FB´s Parametrizables 43
Titulo Página
PROGRAMACIÓN FC1.
En este FC se programara la petición de ciclo explicada anteriormente y su temporiza-
ción.
PROGRAMACIÓN FC2.
En este FC se programan las distintas comparaciones utilizadas para ir acotando los dis-
tintos tiempos de activación de las luces del semáforo.
Como se realizo en ejercicios anteriores nos basaremos en el siguiente diagrama de tiem-
pos, obtenidos con las comparaciones de mayor e igual.
Para la obtención de las señales de parpadeo de las luces ámbar y verde se ha programado
la marca de ciclo de la CPU 255, como la frecuencia de parpadeo es la de 2 Hz, se ha uti-
lizado su tercer bit.
En la siguiente figura tenemos el simbólico utilizado en este programa.
En el primer segmento hemos colocado el arranque del motor condicionado a que el valor
del contador se encuentre inicializado en su valor de 200, y al activar la marcha activamos
la salida correspondiente del motor. El reset del mismo depende del pulsador de paro
(contacto NC), ó del temporizador que se activa transcurrido 10 seg., después de que el
contador llegue a 0. Si el motor parara se da por supuesto que se le ha realizado el mante-
Con el térmico cerrado (no fallo) y el motor (A5.2) en parado luz fija.
Con el motor en funcionamiento, la luz parpadea con frecuencia de 1 Hz.
Con el térmico abierto (fallo), la luz parpadea con frecuencia de 10 Hz.
Los sensores fotoeléctricos utilizados para dicha aplicación se pueden considerar como
contactos normalmente abiertos, al igual que el pulsador de reset.
RESOLUCIÓN.
Cuando una persona entra la secuencia de activación de las células de entrada, es la si-
guiente:
1. Se activa el sensor A.
2. Se activa el sensor B.
3. Se desactiva sensor A.
4. Se desactiva sensor B.
La proximidad comentada en el enunciado es el determinante que los dos sensores estén
activados antes de desactivarse el sensor A.
Para la salida la circunstancia es similar, invirtiendo simplemente el orden de los senso-
res.
PROGRAMACIÓN FC1.
Estas señales serán las utilizadas para poder contabilizar el número de personas reales que
se encuentran dentro de la sala, siendo necesario un contador que pueda incrementar y
decrementar.
PROGRAMACIÓN FC2.
En este FC vamos a colocar el contador.
PROGRAMACIÓN FC3.
Dentro de este FC se programaran las salidas de señalización con que dispone el sistema,
según el enunciado anterior.
El garaje tiene una capacidad máxima de 100 vehículos. Para poder acceder al interior del
mismo deberá de existir al menos una plaza libre. Se conocerá el número de vehículos
que hay en el interior por medio de una indicación luminosa con lámparas de diferentes
colores.
La demanda de entrada se realiza mediante el pulsador de petición de entrada PE. Con
cada impulso que se dé en él se solicita una entrada pero ésta no será atendida hasta que
no termine de realizarse la entrada pedida anteriormente.
Una vez solicitada la entrada, si hay plaza libre, la barrera sube hasta accionar el final de
carrera correspondiente. El vehículo comienza a entrar y lo detecta el sensor de entrada
SE. Tres segundos después de que el vehículo haya entrado se baja la barrera. Además se
deberá de tener en cuenta que si existe petición de entrada y el vehículo no entra en 10
segundos, la barrera deberá de bajarse.
La demanda de salida se realiza mediante el pulsador de petición de salida PS. Con cada
impulso que se dé en él se solicita una salida pero ésta no será atendida hasta que no ter-
mine de realizarse la salida pedida anteriormente.
Una vez solicitada la salida, la barrera sube hasta accionar el final de carrera correspon-
diente. El vehículo comienza a salir y lo detecta el sensor de salida SS. Tres segundos
después de que el vehículo haya salido se baja la barrera. Además se deberá de tener en
cuenta que si existe petición de salida y el vehículo no sale en 10 segundos la barrera de-
berá de bajarse.
EB 20 EB 21
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 1
En este estado, podemos comprobar que estos bits de entrada tienen un valor decimal
es -22163, y en hexadecimal A96D.
De esta forma vamos a realizar un programa que lea todas estas entradas al activar un
pulsador (E0.5) y si se cumplen nos active la salida A5.5 y A5.6, y si no se cumple la
salida A5.6 se activa intermitentemente.
Ambas salidas las podemos resetear con la entrada del pulsador E0.6.
3. TEMPORIZADORES IEC.
Los temporizadores son un tipo de datos especial de STEP 7, que son gestionados direc-
tamente por el propio PLC, y que su número está limitado por la potencia del mismo.
Pero ¿Qué ocurre si llegamos al máximo? ¿Y si la aplicación de control requiere más
temporizadores de los que me deja utilizar el PLC?
Es posible utilizar temporizadores ―software‖, que consisten en un bloque de función que
en el momento de la activación lee la fecha y la hora del PLC, le suma el retardo deseado,
y en cada ciclo de PLC compara la fecha y hora con el resultado de esa suma. Si es mayor
o igual, entonces ya ha pasado el tiempo y tendrá que realizar la acción correspondiente.
Estos temporizadores se llaman ―temporizadores IEC‖ porque se limitan a los tipos de
temporizadores recogidos en el estándar IEC1131-3. En el PLC están implementados en
ROM como Bloques de Función de Sistema (SFB), por lo que para utilizarlos hay que
crear un DB DE INSTANCIA diferente para cada llamada.
El límite de temporizadores IEC lo pone el tiempo de ciclo y la capacidad de memoria del
PLC, puesto que en realidad no son más que instrucciones de programa adicionales.
A cada llamada de un bloque de función que transfiere parámetros está asignado un blo-
que de datos de instancia. En el DB de instancia están depositados los parámetros actuales
y los datos estáticos del FB. Las variables declaradas en el FB definen la estructura del
bloque de datos de instancia. La instancia define la llamada de un bloque de función. Si,
por ejemplo, un bloque de función se llama cinco veces en el programa de usuario S7,
existen cinco instancias de dicho bloque.
Crear un DB de instancia. Antes de crear un bloque de datos de instancia debe existir el
FB asociado. El número de dicho FB se debe indicar al crear el bloque de datos de instan-
cia.
Para crear los DBs de instancia, dentro de la carpeta bloques del administrador SIMATIC,
Insertar Nuevo Objeto > Bloque de datos
Se puede acceder a estos bloques de dos formas: O bien nos ponemos ONLINE con el
PLC y copiamos de él (son los SFB 3, 4 y 5), o bien utilizamos la librería ―Standard Li-
brary‖ y vamos a la carpeta ―System Function Blocks‖.
A modo de ejemplo, este es el temporizador IEC con retardo a la conexión (SFB4
―TON‖):
Existen tres temporizadores IEC: SFB3 ―TP‖, SFB4 ―TON‖ y SFB5 ―TOFF‖, que son
respectivamente el temporizador Impulso, retardo a la conexión y retardo a la desco-
nexión.
Todos ellos se programan de la misma manera.
MUY IMPORTANTE: Antes de cargar en el PLC cualquier bloque que utilice un DB o
un DB de instancia (o en general, que llame a un bloque), hay que asegurarse de que el
bloque llamado ya se ha cargado previamente. En este caso, habría que cargar los DBs 14
y 24 antes que la modificación del OB1.
Una vez creado el FC parametrizable se harán 3 llamadas de este dentro del OB1.
2. INVERSIÓN DE GIRO.
Se quiere realizar un arranque con inversión de giro en el FC parametrizable 2 (FC2). Di-
cho FC contendrá los parámetros siguientes.
Una vez creado el FC parametrizable se harán 2 llamadas de este dentro del OB1.
Una vez creado el FC parametrizable se harán 2 llamadas de este dentro del OB1.
A continuación realizamos el programa, que nos servirá para arrancar cualquiera de los 3
motores, utilizando como entradas los parámetros asignados anteriormente en la tabla de
declaración. Como se puede observar la sintaxis exige empezar con el símbolo #.
A través de los parámetros de salida se transfieren los resultados al bloque que se está
llamando.
En segundo lugar realizamos el programa de ejecución para la inversión de giro de los
motores dentro del FC1 parametrizado.
En cada uno de los segmentos realizamos la llamada al FC1 y asignamos las entradas y
salidas correspondientes al control y protección de cada uno de los motores.
Podemos de esta forma realizar la comprobación correcta del funcionamiento del progra-
ma transfiriendo los bloques al autómata, o al simulador.
ARRANQUE ESTRELLA-TRIÁNGULO.
En esta ocasión además de las entradas lógicas de los pulsadores de marcha y paro, así
como el contacto del térmico, deberemos utilizar un temporizador para introducir la co-
nexión triangulo y eliminar la conexión estrella.
Como vemos en el enunciado deberemos de utilizar 2 parámetros, para ello:
TIEMPO con tipo de dato S5TIME, utilizado para introducir el valor de tempori-
zación de paso de estrella a triangulo.
Como salidas utilizaremos, las salidas a contactor de línea km1, contactor de estrella km2,
y el contactor de triangulo km3.
Crear un FC parametrizable para obtener un generador de impulsos estándar con las si-
guientes características:
1. Un generador de impulsos con un tiempo fijo de conexión de 1 segundo y 2 se-
gundos de desconexión.
2. Un generador de impulsos con preselección variable. Los tiempos en este caso se
podrían cambiar desde un terminal de operador o un sistema SCADA. En nuestro
caso podemos realizar una tabla de variables desde donde podemos forzar estos
valores.
Estas oscilaciones serán activadas mediante una entrada de interruptor.
Para introducir valores podemos colocar en el valor forzado los tiempos por ejemplo de
0,5 segundos, y observando variables y forzando variables, podemos comprobar el fun-
cionamiento de esta oscilación variable.
Podemos de esta forma introducir otros valores consiguiendo de esta forma la oscilación
que deseemos.
Forzando variables
Observar variable
Una vez creado el FB parametrizable se harán 3 llamadas de este dentro del OB1.
2. INVERSIÓN DE GIRO.
Se quiere realizar un arranque con inversión de giro en el FB parametrizable 2 (FB2). Di-
cho FB contendrá los parámetros siguientes.
Una vez creado el FB parametrizable se harán 2 llamadas de este dentro del OB1.
3. ESTRELLA TRIÁNGULO.
Se quiere realizar un arranque estrella-triángulo en el FB parametrizable 3 (FB3). Dicho
FB contendrá los parámetros siguientes.
Una vez creado el FB parametrizable se harán 2 llamadas de este dentro del OB1.
Vamos a realizar los 3 ejercicios de la práctica, viendo paso por paso, cómo funcionan los
FB´s parametrizables.
Abrimos el bloque haciendo doble clic sobre el mismo, y rellenamos su tabla de declara-
ción de variables. Las variables son las indicadas en el enunciado del texto.
Parámetros de entrada.
Parámetros de salida.
Al asociar el DB al FB, el DB será una tabla de variables copia exacta de la tabla de de-
claración de variables del FB.
Activamos la entrada E0.3 y abrimos los bloques de datos DB1 y DB2, poniéndonos ―on-
line‖, en ambos casos.
Como podemos observar la salida km1 del segundo bloque de datos se encuentra activada
(motor 2), mientras el primero esta desactivado.
En resumen tenemos un FB parametrizable, al cual se le realizan 3 llamadas, y cada una
de ellas esta asignada a un DB distinto.
Bloques de datos.
Esta estructura determina para instalaciones con muchas llamadas un gran número de
bloques de datos, que nos obliga a tener abiertos en ocasiones dificultando la visión y el
trabajo con los bloques de función.
La idea en estos casos es crear una multiinstancia, en donde solo se tendrá un bloque de
datos en donde se asociaran todas las llamadas que se realicen al bloque de organización.
EJERCICIO 1.
Existirá un pulsador de paro general, que nos detendrá todos los motores a la vez.
Pulsador de marcha.
Pulsador de paro General (Seta de emergencia).
ENTRADAS
Pulsador de paro individual.
Protección térmica.
SALIDAS Salida de relé a contactor
La idea es que se realice un FB1 para la programación del arranque directo y un FB2 para
los motores del arranque con inversión de giro.
En primer lugar creamos un proyecto nuevo, en el que insertaremos un nuevo objeto SI-
MATIC 300, en el Hardware importaremos el fichero del bastidor habitual, con que se
tendrá como siempre la configuración clásica del hardware.
1. Creación del bloque de función FB1. Se declararan los interfaces de entrada y sa-
lida que se utilizaran en la programación del arranque de los motores.
2. Creación del bloque de función FB10. Se declaran las llamadas de los FB´s en el
interface STAT, creando de esta forma la multiinstancia. De esta forma se podrá
realizar la llamada y programación de las entradas y salidas del FB1.
3. Creación del bloque de datos DB10. Este bloque se asociara al bloque de función
FB10, y contendra las entradas y salidas de los 4 motores con los que estamos tra-
bajando.
4. Llamada al bloque de función FB10, desde OB1, asociándolo al bloque de datos
creado anteriormente.
El paso 3, se puede evitar, porque al realizar la llamada al FB10 desde el OB1, y asociarlo
a un bloque de datos no existente, se crea automáticamente, como ocurre en cualquier
bloque de función.
NOTA: Las entradas de la marcha y del paro general, no sería necesario parametrizar,
puesto que siempre es la misma entrada del autómata.
Podemos crear en este momento una tabla de símbolos con las entradas y salidas que va-
mos a utilizar.
Segmento 1.
Segmento 2.
La temporización de arran-
que de cada uno de los mo-
tores con retardo a la co-
nexión se realiza con la me-
moria de la marcha general y
se desactiva únicamente con
su pulsador de paro o su pro-
tección térmica.
Segmento 3.
Para verlas podemos seleccionar las entradas (IN) del MOTOR1, o de cualquiera de los
otros motores.
Dentro del FB10, las direcciones son las mismas en cada uno de los motores, puesto que
la llamada de la multiinstancia es distinta en cada uno de los casos.
De esta forma en el FB10, nos quedaran 4 segmentos con las siguientes referencias:
Si abrimos el bloque de datos podemos ver que en su estructura aparecen todos los pará-
metros de cada uno de los motores.
En este DB las direcciones de cada una de las llamadas de las multiinstancias están refe-
ridas, como anteriormente se crearon a partir de los bytes 0, 10, 20 y 30.
1. Si todos los térmicos y pulsadores de paro tienen su estado de reposo, es decir ce-
rrados (por lo tanto 1), al activar la entrada E0.0, se produce el arranque de los
cuatro motores con un intervalo de 5 segundos.
2. Si algún térmico o pulsador de paro estuviera abierto o se abriera antes de produ-
cirse el arranque este motor no arrancaría.
3. Si una vez arrancado se activa algún pulsador de paro individual ó el térmico el
motor se parara, si se desea volver arrancar el motor será necesario volver activar
el pulsador de marcha general E0.0.
Una vez creado, en bloques de programa de S7, realizamos los siguientes pasos:
En la programación se pondrá un cruzamiento con las salidas para que si se quiere cam-
biar el sentido de giro se tenga que pasar obligatoriamente por el paro.
A continuación insertamos de las multinstancias, los 4 bloques en los segmentos del FB10
y asignamos las direcciones de las entradas y salidas utilizadas.
Hemos creado también una tabla de símbolos con las entradas y salidas utilizadas.
La sintaxis para obtener la lectura de estos datos booleanos es DB10.DBX2.0, es decir in-
dicar el numero del DB y a continuación con DBX indicar el numero del bit que se quiere
leer.
EJEMPLOS:
En este caso tenemos un salto absoluto, esto quiere decir que siempre se ejecuta, por lo
tanto el segmento 2, nunca se ejecuta, y si la entrada E0.0 no se encuentra activada, se ac-
tiva la salida A4.0.
Podemos hacer que el salto sea condicionado, por una entrada, cambiando simplemente el
segmento 1.
Esta condición puede ser ejecutada con valor de la entrada a 1, ó a 0.
BLOQUES DE DATOS.
Los bloques de datos, también llamados DB‘s, son áreas de datos donde se almacenan da-
tos de usuario. Un DB no contiene instrucciones S7.
Hay dos tipos de bloques de datos:
Bloques de datos globales: A sus datos pueden acceder todos los bloques.
Bloques de datos de instancia: Asociados a un bloque de función FB.
Los bloques de datos de instancia ya han sido utilizados en el ejercicio anterior, por lo
tanto vamos a trabajar únicamente con los datos globales.
Los DB Globales sirven para depositar datos con los que puede trabaja el programa que
estuviéramos realizando. Estos datos los puede utilizar cualquier tipo de bloque (OB, FC
y FB) para leer datos o escribir datos que se conservan dentro del DB.
Al contrario de los datos en el área de datos locales, los datos contenidos en un DB no son
borrados al cerrar el DB o al concluir el tratamiento del correspondiente bloque lógico.
Un DB global y un DB de instancia pueden estar abiertos al mismo tiempo.
Un DB no tiene área de instrucciones S7, sino que es una tabla de datos que forma una es-
tructura:
Dirección. La dirección absoluta es asignada por STEP 7, cada vez que se valida un re-
gistro con ENTER, y no es modificable. El formato de la dirección puede ser BIT, BYTE,
WORD,....
Se puede acceder también a este elemento a través de su dirección absoluta (después de
haber compilado y cargado el DB).
Nombre. Nombre simbólico con el que se accede a la dirección absoluta asignada.
Tipo. Tipo de dato asignado a la variable BOOL, INT, WORD, DWORD, ARRAY,
S5TIME….
Valor inicial. Valor inicial de la variable en formato compatible con el tipo de dato. Indi-
caremos el valor inicial en el caso que no coincida con el predeterminado.
Comentario. Campo para poder documentar la variable con un máximo de 80 caracteres.
Acceso a los datos de un DB.
Programación en KOP
Programación en FUP
Programación en AWL.
Una vez abierto el DB el acceso se realiza mediante carga (L) y transferencia (T).
No existe ninguna instrucción para cerrar un DB, solo se cierra abriendo otro DB.
EJEMPLOS:
L 5 Cargo 5 en ACU1
2. Método 2. La forma más sencilla consiste en acceder a los datos del DB indican-
do en la misma instrucción el número del DB. En este caso no es necesario abrir el
DB.
EJEMPLOS:
Una vez introducidos los datos, debemos ir al menú ―Ver‖→‖Datos‖, de esta forma el va-
lor inicial se copiara en el valor actual, podemos en las figuras anteriores la diferencia.
―Ver‖→‖Declaración‖
―Ver‖→‖Datos‖
Si el valor inicial hubiese sido modificado y quisiéramos que coincidiera con el valor ini-
cial, podemos ir al menú ―Edición‖→‖Inicializar bloque de datos‖.
Repetimos el mismo proceso con los 2 bloques de datos siguientes para las mezclas 2 y 3.
PROGRAMACIÓN:
Insertamos en la carpeta de bloques 2 bloques función, que denominaremos respectiva-
mente por defecto como FC1 y FC2.
Abrimos el bloque FC1 y realizamos los siguientes segmentos:
Con estos 2 segmentos podemos decir por lo tanto que simplemente en función de la se-
lección realizada se cargan los datos de la selección en las palabras MW0, MW2 y MW4.
Para que realmente se ejecute será necesario como siempre realizar la llamada desde el
bloque de organización OB1, por lo tanto abrimos el bloque y en el primer segmento car-
gamos el bloque función FC1.
La llamada al FC2, recordemos que se realiza desde el FC1.
En el resto de los segmentos se programaran los temporizadores con los tiempos de selec-
ción y la apertura de las válvulas.
A los 12 segundos desde su activación se para el mezclador, por lo que podemos desac-
tivar las entradas en espera de una nueva activación.
CUESTIONES:
1. ¿Es necesario mantener las entradas de selección, hasta que finalice el ciclo de
funcionamiento?
2. ¿Qué sucederá si una vez realizada una selección, se escoge una segunda mezcla?
¿Cuál de las 2 se hace efectiva?
Funcionamiento Manual.
Mientras tengamos accionado el pulsador E1.0, se activa la salida A5.0 de la electrovál-
vula y la correspondiente a la señalización A4.0, funcionando de forma intermitente, en
este caso a una frecuencia de 1 Hz.
Al dejar el pulsador E1.0, las salidas se desconectan.
Realizar dos programas con las siguientes indicaciones:
Programación de FC1.
Funcionamiento Automático.
Programación de FC2.
Funcionamiento Manual.
Recordemos de carga el hardware al autómata o simulador, así como todos para compro-
bación de su funcionamiento.
Solamente nos quedara realizar la llamada al FC1, desde el bloque de organización OB1 y
cargar el hardware (tenemos marca de ciclo) y evidentemente los bloques, al autómata o
simulador.
Realizadas estas cargas se puede comprobar el funcionamiento.
ENTRADAS SALIDAS
EN Entrada de habilitación
IN Valor a desplazar
Los parámetros de entradas y salidas de todas estas instrucciones son las mismas, por
lo que en las siguientes instrucciones no las vamos a repetir.
Descripción
Un estado de señal de 1 en la entrada de habilitación (EN) activa la operación Desplazar
entero a la derecha. Esta operación desplaza los bits 0 a 15 de la entrada IN bit a bit a la
derecha. La entrada N indica el número de bits a desplazar. Si N es superior a 16, la ope-
ración se comporta como si N fuera 16. Las posiciones que quedan libres a la izquierda se
rellenan con el estado de señal del bit 15 (que corresponde al signo de un entero), es de-
cir, se rellenan con ceros si el número es positivo o se rellenan con unos si es negativo. El
resultado de la operación de desplazamiento se determina consultando la salida OUT.
Descripción
Un estado de señal de "1" en la entrada de habilitación (EN) activa la operación Desplazar
palabra doble a la derecha. Esta operación desplaza los bits 0 a 31 de la entrada IN bit a
bit a la derecha. La entrada N indica el número de bits a desplazar. Si N es superior a 32,
la operación escribe un 0 en la salida OUT y pone los bits A0 y OV de la palabra de esta-
do a "0". Las posiciones que quedan libres a la izquierda se rellenan con ceros. El resulta-
do de la operación de desplazamiento se determina consultando la salida OUT.
Descripción
Un estado de señal de "1" en la entrada de habilitación (EN) activa la operación Desplazar
palabra doble a la izquierda. Esta operación desplaza los bits 0 a 31 de la entrada IN bit a
bit a la izquierda. La entrada N indica el número de bits a desplazar. Si N es superior a 32,
la operación escribe un 0 en la salida OUT y pone los bits A0 y OV de la palabra de esta-
do a "0". Las posiciones que quedan libres a la derecha se rellenan con ceros. El resultado
de la operación de desplazamiento se determina consultando la salida OUT.
Para la resolución del problema vamos a crear un FC1, donde vamos a utilizar el despla-
zamiento de 1 bit a la izquierda para poder detectar, la posición de la segunda botella des-
pués de la defectuosa.
En el primer segmento simplemente vamos a utilizar una memoria para activar el tren de
botellas activada con la marcha (NA) y desactivado con el pulsador de paro (NC).
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
MB11
MB10
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
MB11
CUESTIONES.
Ejercicio 1.
En un sistema de riego de una plantación, queremos que el sistema funcione a las 13:05
minutos, y que se pare a las 13:06 minutos.
Programar también la posibilidad que el sistema funcione solamente de lunes a viernes.
Ejercicio 2.
Queremos que en una fábrica de lunes a viernes una sirena funcione desde la 13:30 de la
tarde hasta la 13:32.
Ejercicio 3.
Crear una plantilla para poder realizar la conexión y desconexión de la sirena anterior pa-
ra que funciones entre unas horas determinadas.
Desde un terminal de operador o un sistema SCADA podremos programar ese reloj para
que la salida funcione cuando nos interese.
Para trabajar con los datos del reloj, se puede hacer de dos formas:
Una de ellas es la de trabajar con funciones especiales SFC.
Otra de las formas, es recuperar los datos del reloj del OB1
Si quiero trabajar con el reloj solo en el OB1, puedo trabajar con esas variables
temporales. En caso que quiera trabajar en otro módulo, tendré que cargar esas va-
riables temporales en unos registros (por ejemplo en un DB).
Los datos del reloj están en BCD, por lo tanto se deberá leerlos en hexadecimal.
RESOLUCIÓN EJERCICIO 1.
Creamos en primer lugar un bloque de datos con un tipo de dato ARRAY, que le damos
por nombre RELOJ, y como valor inicial B#16#0, (cero), y con longitud de Byte. Por lo
tanto tenemos 64 bits para la información de fechas, que cargaremos desde el LB12 hasta
el LB19.
En el primer segmento
vamos a realizar la lla-
mada al FC1 donde se va
a realzar el programa pa-
ra la ejecución de la
alarma.
En el segundo segmento
cargamos los primeros
32 bits en el DB1, a par-
tir del byte 0, y los si-
guientes 32 bits a partir
del byte 4.
Al realizar este programa en OB1, los datos del reloj estarán en:
Comparamos otra vez la palabra 3, con el valor 13:06, y si son iguales nos resetea la sa-
lida anterior.
RESOLUCIÓN EJERCICIO 2.
Antes de realizar el programa vamos a ver algunas instrucciones, de las cuales utilizare-
mos alguna de ellas.
OPERACIONES LÓGICAS ENTRE PALABRAS O DOBLES PALABRAS.
En la lista de comandos situados como siempre en la parte izquierda en programación
KOP ó FUP, encontramos una carpeta con las instrucciones de operaciones lógicas con
palabras.
RESOLUCIÓN.
Para este caso realzamos un programa con el mismo OB1, que el ejercicio anterior y con
el mismo DB1, de tal forma que la información de hora la tenemos alojada en las mismas
direcciones.
La primera entrada recoge los datos de reloj del byte 6 y 7, y realiza la operación con 16
bits de valor 1 (F), por lo tanto cuando un bit de la entrada de DBW6 valga 1 el resultado
es 1(serie de 1 y 1), y si el bit de entrada es 0, el resultado será 0 (serie de 0 y 1). Pode-
mos decir por lo tanto que la marca palabra MW0 tenemos el valor de la fecha.
Para poder ver su comprobación transferimos todos los bloques al autómata y podemos
realizar una tabla de variables donde se pueda forzar los valores de fechas horarias y día
de la semana.
Según la tabla de variables la hora actual son las17:35, la hora de inicio 17:36 y la hora
final 17:37.
Activación y desactivación de la salida.
Realizar en un FCs parametrizable que nos calcule la media de cuatro números. Los
números de entrada serán en formato de tipo entero y la media será un real. En la siguien-
te figura se puede ver cómo sería la parametrización del FC.
Realizar un FC parametrizable que nos devuelva el resultado de aplicar una regla de tres.
Para esto definiremos una serie de parámetros de entrada y de salida, como se muestra en
la figura siguiente se puede ver los parámetros que son necesarios para la resolución del
problema.
RESOLUCIÓN.
Las operaciones de enteros y dobles enteros, las tenemos en la
carpeta de instrucciones ―Números en coma fija‖, que se co-
rresponden con la suma, resta, multiplicación y división, para
números enteros y doble enteros. También se tiene en doble
entero la operación MOD_DI que nos obtiene el resto de una
división.
Todas las instrucciones tienen 3 entradas:
EN. Entrada de validación por defecto valor 1, siempre se eje-
cuta la operación.
IN1 y IN2. Primer y segundo valor a sumar, que puede tener
formato E, A, M, D, L o constante.
En cualquiera de las operaciones, el resultado ha de estar comprendido dentro de los lími-
tes de los números enteros.
Límites número enteros de 16 bits: -32.768 a +32.767
Límites número enteros de 32 bits: -2.147.483.648 a
+2.147.483.647
En caso de no ser así, se producirá:
Se activa el bit de estado OV (desbordamiento).
El resultado obtenido en OUT no será válido.
En ENO tendremos un cero.
Como ejemplo vamos a realizar una operación suma con en-
teros, asignando como entradas y salidas unas marcas.
También hemos utilizado el bit del sistema de desborda-
miento, que podemos encontrar en la carpeta de instruccio-
nes ―Bits de estado‖.
Sin desbordamiento.
Con desbordamiento.
Si nos ponemos ONLINE dentro del FC1, podremos ver que en el primer caso la entrada
de OV esta desactivada y en segundo caso activada.
Para el resto de operaciones no hay ninguna diferencia, salvo la correspondiente a la pro-
pia operación, pero su programación es idéntica en todos los casos.
RESOLUCIÓN EJERCICIOS.
Vamos a realizar, por lo tanto el ejercicio propuesto, que confeccionamos en dos FC´s pa-
rametrizables, con las entradas y salidas, indicadas en el enunciado. Para el FC1:
Resulta bastante claro que se realizan las sumas de los 4 números, mediante dos opera-
ciones que se vuelcan sobre la marca MW4, la cual se divide por 4, dándonos como salida
la media aritmética.
Para el FC2:
Valor1 Es_a
Valor2 resultado
La programación será:
Las instrucciones son sencillamente las operaciones correspondientes a una regla de tres
directa.
Podemos transferir los bloques y realizar una tabla de variables, para poder introducir va-
lores y comprobar, las operaciones realizadas en ambos casos.
En este caso vamos a utilizar el simulador, en lugar del autómata, por lo tanto ejecutamos
el PLCSIM , y realizamos una nueva simulación . Podemos fijar la posición para
que el simulador se encuentre siempre visible .
Insertamos marcas, y asignamos a cada una de ellas, la palabra asignada a cada uno de los
números de entrada, y también para la salida de la media aritmética, y abrimos la tabla de
valores con las marcas utilizadas.
Debemos de comentar que estamos operando con números enteros, por lo que si la opera-
ción no es entera, nos devuelve solo la parte entera. Por ejemplo en caso siguiente 200/3,
tiene como cociente 66, que es resultado que obtenemos en la marca MW26.
Podríamos calcular para el caso del cálculo de la media aritmética el resto, añadiendo un
segmento más que nos calcule este valor.
Esta operación se debe realizar con un formato de numero de doble entero, y recordemos
que en nuestro programa la suma de los 4 números de entradas se recogen en una palabra,
concretamente en la MW4, es decir que no podemos utilizar este valor como entrada de la
operación.
COMBUSTIBLE PRECIO/LITRO
ENTRADAS SALIDAS
RESOLUCIÓN.
Ejercicio 1.
Vamos a crear en primer lugar un simbólico con las entradas y salidas a utilizar.
Para calcular la velocidad debemos dividir el espacio (2 m) entre el tiempo, que nos dará
un número no entero, por lo que debemos trabajar con números reales, por lo tanto en los
segmentos 4 y 5 convertimos el entero en doble entero y luego se convierte a real.
Este acuse también resetea el temporizador, por de lo contrario el valor de MD58 sigue
manteniendo su valor y al soltar el pulsador S3, la memoria de acuse se volvería activar.
En el siguiente segmento vamos a crear la marca que nos pone a cero los contadores en el
caso de que el cliente introduzca un valor monetario superior a 110 euros.
A continuación se calcula el número de litros de cada unos de los combustibles, cada vez
que se realice la selección de cada uno de ellos.
Por último vamos a guardar estos valores en una única dirección, para luego poder seguir
operando con él.
Los bits 12 y 13 se utilizan para identificar el valor de la base de tiempos, que en nuestro
caso es 01 al trabajar en decimas de segundo.
Para modificar estos bits utilizaremos la instrucción WOR_W, en donde al valor MW58
le sumamos en la entrada IN2 el valor 2#0001000000000000. Recordemos que esta ope-
Para poder abrir una cerradura debemos introducir un valor numérico en la marca
MW0, (1234) el cual será introducido por un terminal de operador o a través de un
SCADA.
Si al accionar el pulsador E0.0, una vez introducida la clave, si esta es correcta la
cerradura se abrirá durante 5 segundos y se borrara la clave en la marca MW0.
Si nos equivocamos 3 veces, se bloqueara la cerradura y funcionara una sirena de
forma intermitente hasta que la paremos accionando el pulsador E0.0 habiendo co-
locado antes en la marca MW0 el valor 9999.
Programar en el OB100 la carga del valor de preselección 3 en el contador.
Hacer el programa necesario para que una vez marque algún fallo se dé un tiempo
de 15 segundos para abrir la cerradura, en caso de no hacerlo, se debe de activar la
alarma.
OB20 a OB23
OB30 a OB38
Son OB que se ejecutan cada cierto tiempo prefijado y con prioridades diferentes
OB40 a OB47
Son interrupciones de proceso. Se activa cuando en un proceso un registro ha superado unos lími-
tes máximos o mínimos admisibles. (Entradas analógicas, contadores de alta velocidad etc...)
OB80 Error de tiempo (Tiempo de ciclo OB84 Avería de la CPU. Error de la inter-
excedido).Si no está programado y detecta face MPI o de la periferia descentralizada.
el error, el PLC pasa a STOP Si no está programado y detecta el error, el
PLC pasa a STOP
OB81 Fallo de alimentación (S7-400) o
Fallo de batería OB85 Evento de arranque para un OB no
cargado. Si no está programado y detecta
OB82 Rotura de hilo de un módulo que
el error, el PLC pasa a STOP.
tenga capacidad de diagnostico. Si no está
programado y detecta el error, el PLC pasa OB86 Detección de fallo en un bastidor. Si
a STOP no está programado y detecta el error, el
PLC pasa a STOP.
OB83 Detección de presencia de módulo
(Extraer/insertar).Si no está programado y OB87 Detección de fallo en comunicación.
detecta el error, el PLC pasa a STOP
OB100 a 0B102
OB`s de modo de arranque (solo puede estar activado uno de ellos). Se selecciona en Admi-
nistrador→Hardware→CPU (picar dos veces) →pestaña ‗arranque‘.
OB121 OB122
Error de ejecución de programa. Error al intentar acceder a un módulo de datos
(entradas, salidas, etc...).
Detecta errores de programación.
Si no está programado y detecta el error, Si no está programado y detecta el error, el PLC
pasa a STOP.
el PLC pasa a STOP.
MÓDULOS DE ARRANQUE.
Rearranque (no en S7-300 y S7-400H)
Rearranque completo
Arranque en frío
En la tabla siguiente se indica qué OB llama al sistema operativo durante el arranque.
Rearranque OB 101
Cargamos los 3 bloques y los datos del sistema. Si pasamos a continuación la CPU a
RUN ó RUN-P, podemos ver como automáticamente la marca M200.0 se activa y tam-
bién el temporizador, y que cuando este llega a 0, la marca M200.0 se desactiva.
Si durante este tiempo intentamos activar el proceso E0.0, este no se activa, haciéndolo
una vez que se hubiera desactivado M200.0.
Las salidas se activaran según lo programado.
Cada vez que pasemos el autómata de STOP a RUN ó RUN-P, veremos que el proceso se
repite.
También podemos ver el funcionamiento cargando el programa en el autómata y compro-
bando que con el autómata en RUN, el proceso se realiza de la misma forma al quitar ten-
sión al autómata.
Podemos hacer las pruebas mediante el simulador, insertando los módulos de la figura,
con lo que se pueden hacer todas las pruebas precisas, que el alumno quiera practicar.
Las condiciones las vamos a plantear mediante la activación de una salida A4.0, que re-
presentara por ejemplo un proceso que se activa con un pulsador de marcha NA, y se des-
activa con un pulsador de paro NC.
En primer lugar vamos a insertar un bloque FC1, donde vamos a programar la parte co-
rrespondiente a un temporizador con tiempo variable y base de tiempos fija.
La base de tiempos fija recordemos que se controla con 2 bits, que pueden tener por valo-
res de 0 a 3. En función de estos valores el tiempo queda definido, con los siguientes va-
lores:
Como podemos ver en la figura el valor de MW2 asume el valor de 1000, pero el tempo-
rizador no asume el valor introducido, como se puede ver el autómata no pasa a STOP si-
gue en RUN, por lo tanto si introducimos un valor aceptable sigue en funcionamiento.
Podemos comprobar que la salida A4.0 funciona de forma intermitente al cumplirse las
condiciones de ejecución, lo que nos demuestra por lo tanto que el programa sigue en
funcionamiento.
Vamos a realizar ahora la parte del programa correspondiente al contador de tiempos, pa-
ra lo cual insertamos un nuevo bloque FC2.
Empezaremos por construir un contador de segundos, para ello utilizaremos la marca de
ciclo M255.5 con frecuencia 1 segundo.
Recordemos que el proceso funciona con T0, por lo tanto cada segundo se activa la entra-
da de habilitación, y por lo tanto MW10 se incrementa en 1 unidad cada segundo, por lo
tanto podemos decir que nos contabiliza el número de segundos de funcionamiento del
proceso.
Para contabilizar el número de horas simplemente tendremos en cuenta que cada 3.600
segundos aumentamos en 1 unidad la marca MW12 y ponemos la marca MW10 a 0.
De esta forma podemos decir que la marca MW12 nos contabiliza el número de horas en
funcionamiento.
PANEL
DE
TRABAJO
Ejercicio 1.
Realizar un contador analógico de 0 a 27 pasos
que se visualice en el voltímetro de 0 10V.
Ejercicio 2:
Onda ―diente de sierra‖
Simular una salida analógica en
diente de sierra, pero utilizando
instrucciones digitales (no entradas
analógicas).
Como se ve se tienen las mismas direcciones iníciales para los canales de entrada y salida
analógicos.
En el modulo de formación se tienen cableadas las entradas y salidas, que tienen que ser
palabras (16 bits).
FUNCIÓN SCALE
FUNCIÓN UNSCALE
Finalmente utilizaremos la función que nos des escala el valor de entrada, en la señal de
salida de 0 a 10 V, en los 27 pasos indicado en el enunciado.
Podemos utilizar el simulador para ver el funcionamiento del programa realizado, para
ello podemos insertar los módulos de marca MW0 y MD6 que van aumentando ambos
de la misma forma de 0 a 27, el primero en formato entero y el segundo en formato re-
al.
Insertamos también un modulo de salida analógica PAW288 en formato entero o regu-
lación de entero. Esta salida nos ira variando desde 0 a 27648, en 27 pulsos, por lo tan-
to el primer valor que veremos es (27648/27=1024) 1024, e incrementándose en este
valor hasta los 27648.
Las pruebas a realizar son idénticas al caso anterior, bien sea con el simulador ó con el
autómata.
De esta forma MD6 es un valor real que se encuentra comprendido entre 4 y 0, con perio-
dos de segundo.
Esta entrada se convierte en un valor
entre 10 y 0 en la salida analógica
PAW288.
Para realizar las comprobaciones, se
realizan como en los casos anteriores.
Se desea tener un bloque de datos de 12 palabras en formato INT, donde queremos que la
primera tenga por valor 10.
En el primer registro nos indica el número de registros que se podrá grabar en esta
tabla.
En el segundo registro, se nos indicará el numero de registros llenos (cada vez que
grabemos un valor en la tabla, ese registro incrementara en 1 su valor).
Cuando el primer y segundo registro de la tabla sean iguales (la tabla estará llena),
ya no se grabara ningún registro mas.
Cada vez que se accione la entrada E0.0, el valor que tenga en este momento la
entrada analógica PEW290 irá al primer registro libre de la tabla.
Cuando la tabla este llena funcionara de forma intermitente la salida A4.0.
A partir de la tabla creada en la primera parte del ejercicio, realizar una programación que
nos permita, que una vez que está llena la tabla, empecemos a sobrescribir, empezando
por el primer registro, de tal forma que tengamos siempre los últimos 10 datos grabados.
En este parte se realizara la modificación de tal forma que según lo realizado en la parte
1, cuando la tabla está llena tenemos una salida que nos avisa de esta circunstancia.
A partir de este momento podremos borrar todos los datos guardados, mediante la activa-
ción de la entrada E0.4 de tal forma que podamos seguir adquiriendo nuevos datos, de la
forma programada.
Se quiere guardar el valor de una entrada analógica y al mismo tiempo que nos quede re-
gistrado de forma paralela a qué hora, minuto, segundos y centésimas se ha grabado el da-
to.
Número de registros
10 registros
La función "Extraer el
elemento más reciente de
una tabla" LIFO (del
inglés Last In / First Out)
extrae el elemento más
nuevo de una tabla LIFO,
devolviéndolo como valor
de respuesta de la función. La cantidad de elementos de la tabla se decrementa en una
unidad.
La instrucción LIFO igual que ATT debe ir siempre con flanco, porque de no hacerlo
en 10 scanes nos enviara los 10 valores de la tabla a la salida MW10, quedando por lo
tanto solo el primer valor grabado.
En la entrada EN situamos la entrada de habilitación E0.1 a través de un flaco positi-
vo.
En la entrada de TABLE, indicamos cual es el primer registro de la tabla.
En La salida RET_VALUE, indicamos la marca en donde hacemos lectura de los va-
lores de la tabla.
El funcionamiento, será que si nosotros activamos la entrada E0.1, la marca MW10
tomara por valor el dato del registro 22.0 (8321) de la tabla de datos, y el valor de la
dirección 2.0 toma el valor de 9. (Estaba a 10 y disminuye en una unidad).
Si volvemos a activar la entrada E0.1, la marca tomara el valor de 7801de la dirección
20.0, y se descuenta en el registro 2.0 una unidad más, situándose en 8.
De esta forma se pueden ir extrayendo los distintos registros cada vez que se activa la
entrada E0.1, hasta llegar al primero de ellos.
Podemos ver en esta imagen del simulador en donde se insertado el bloque MW10,
como va tomando los
distintos valores de
la tabla.
En nuestra figura
tiene el valor del
último registro.
Lógicamente como
podemos fácilmente
comprender al extra-
er un dato podríamos
volver a grabar nue-
vamente otro dato en su lugar, mediante la función realizada en el bloque FC1.
Para poner este valor a 0, modificaríamos el 2º segmento del FC1, de tal forma
que cuando se cumpla la comparación de que las direcciones 0.0 y 2.0 sean igual a
10, con una instrucción de transferencia (MOVE) ponemos DB1.DBW2 a valor 0.
4. Para poder borrar los datos de la tabla de datos, podemos utilizar la función de sis-
tema FILL (SFC21), que podemos encontrarla en Librerías → Standard Library
→ System Funtion.
Estas funciones NO podremos transferirlas, ni hace falta, porque al ser funciones
del sistema ya se encuentran incluidas en la CPU.
Con la SFC 21 FILL es posible inicializar un área de memoria (ARRAY de desti-
no) con el contenido de otra área de memoria (ARRAY de origen). La SFC copia
el contenido en el ARRAY de destino indicado hasta que el área de memoria está
escrita por completo.
Esta instrucción se activa con la entrada E0.4, que nos pone la marca MW20 a 0, y
nos transfiere este valor al área de memoria del DB1, desde la posición 2.0 a los
siguientes 11 enteros contando desde esta posición. La sintaxis siempre deberá
empezar por P#.
De esta forma se borran los datos grabados incluyendo la posición 2.0 que nos in-
dica el número de ellos grabados.
Al estar todos a 0, podremos nuevamente grabar otros 10 datos, cada vez que acti-
vemos la entrada E0.0.
5. Creamos en primer lugar un bloque de datos DB2 que le damos por nombre RE-
LOJ, para almacenar los valores de tiempo.
También deberemos crear un bloque de datos DB3 donde grabar los datos del re-
loj.
En resumen los 3 bloques de datos son:
DB1. Bloque de datos donde se almacenan los datos de entrada analógicos
PEW288.
DB2.Bloque de datos donde se almacenan los valores de la hora y minutos.
DB3.Bloque de datos donde guardamos la hora, minutos, segundos y
centésimas de segundos en los cuales se almacena el dato en el bloque
DB1.
A continuación vamos a describir las características de los 3 bloques de datos.
BLOQUE DB1.
BLOQUE DB3.
En este caso se crean 2 matrices similares de 10 registros, más los 2 primeros que
nos indican el número de registros a grabar y el número de registros grabados.
El tipo de dato es WORD, y el valor inicial que nos indica el numero de registros
es de 10, es decir W#16#A.
Así pues de la dirección de palabra 4.0 hasta la 22.0. se grabaran la horas y
minutos de los datos analógicos almacenados.
De la dirección 28.0 hasta la 46.0 se guardaran los segundos y centésimas de se-
gundo.
En primer lugar programamos el bloque FUNCIÓN FC3, en donde utilizamos la
función FC84, que encontremos en Standard Librery TI-S7 Converting Blocks
FC84 ATT TABLE.
En el primer segmento vamos a programar las tres transferencias de datos que
vamos a realizar. Estas se realizaran cada vez que se activa la entrada E1.7, que
llevamos a través de un flaco positivo.
En el segundo segmento, vamos a programar una salida, que nos avise de que ya
se han grabado 10 datos, y que el bloque de datos de registros está lleno.
De esta forma podemos comprobar los registros de entrada que se almacenan y la hora en
el que se produce.
PROBLEMA 1.
Vamos a partir de que en un bloque función FC1, tenemos una programación para el fun-
cionamiento de un motor.
Programar el bloque de organización OB10, de tal forma que a partir de una fecha y de
una hora determinada, se pueda dar funcionamiento al mismo a través de su pulsador de
marcha.
PROBLEMA 2.
Realizar el mismo ejercicio utilizando las funciones incorporadas en las librerías Standard
Library.
Primera forma:
1. Ir al Administrador →Hardware (Picar dos veces sobre el) → Picar dos veces so-
bre CPU→ Seleccionar la pestaña ―Alarmas horarias‖.
Tenemos una memoria que se activa con un flanco positivo del pulsador de marcha E1.0,
y se desactiva con el pulsador de paro E1.1 ó con el térmico E1.2.
Tenemos en el RESET la marca M0.0 que se encuentra activa hasta que la marca MW10
tome el valor de 6, como podemos ver programado en el OB1.
Podremos comprobar que hasta que la marca MW10 tome un valor de 6, la salida no se
puede activar.
Existen otros FC`s dentro de la familia de bloques IEC, que nos permiten realizar conver-
siones, en la siguiente tabla podemos ver sus conversiones:
Las funciones del sistema SFC 28 a SFC 31, que se describen a continuación, se utilizan
para alarmas horarias.
Vamos a realizar por lo tanto la programación utilizando los bloques comentados ante-
riormente.
En primer lugar podemos programar el FC1, donde tenemos la programación del arranque
del motor, con una memoria en donde en el reset colocamos una marca M20.0, que se en-
contrara activada hasta la fecha que nosotros programemos imposibilitando el arranque
del motor.
A continuación pasamos la fecha y la hora a la que queremos que empiece el OB1, para
ello será necesario definir en el OB1 una variable temporal con formato DA-
TE_AND_TIME, y a continuación en el primer segmento realizamos la instrucción.
Esta marca MW10 la programamos dentro del bloque de organización OB10, que inser-
tamos en el administrador.
Ejercicio 1.
Ejercicio 2.
Queremos controlar esta temperatura como un valor entero comprendido entre 0 y 60º
centígrados, y almacenar en un bloque de datos las últimas 50 temperaturas tomadas cada
60 segundos.
Los ventiladores están accionados por motores asíncronos que disponen de un arranque
directo, sin inversión de giro.
Las ventanas se encuentran accionadas por pequeños motores asíncronos con inversión de
giro, y la posición de abierto o cerrado se detecta a través de finales de carrera.
Las ventanas pueden funcionar de forma manual o automática, para ello se dispone de un
interruptor de 2 posiciones, siendo su funcionamiento:
Para facilitar la realización del ejercicio las entradas y salidas a tener en cuenta son las si-
guientes:
Resolución Ejercicio 1.
En el mismo menú contextual, en la pestaña de alarmas cíclicas podemos ver otro tipo de
alarma, denominada cíclica, que es el OB35.
Para que una alarma de retardo pueda ser llamada por el sistema operativo, se han de
cumplir las siguientes condiciones:
En el bloque FC1, programamos el arranque del motor que se activa con un pulsador de
marcha y se desactiva con el pulsador de paro ó el térmico.
En el bloque OB1, en el primer segmento realizamos una llamada al bloque FC1, para
realizar el arranque del motor.
En el segundo segmento se realiza una llamada al bloque de organización OB20, para ello
insertamos de la librería de System Funtion Blocks, el bloque SFC32.
La entrada de habilitación
EN, se activa con un flan-
co negativo del contacto
normalmente cerrado del
térmico.
En nuestra CPU 315-2 DP solo se dispone del OB 35. Para comprobarlo podemos ir
Hardware, y en propiedades de la CPU comprobar las alarmas cíclicas de las que dispo-
nemos.
El OB 35, permite interrumpir la ejecución del OB1 a intervalos fijos de 100ms y ser eje-
cutado, este intervalo de tiempo se cuenta a partir de poner en RUN la CPU.
Es necesario procurar que el tiempo de ejecución de cada OB de alarma cíclica sea menor
que el tiempo de intervalo programado como repetición de la ejecución del OB35.
En caso de que no haya concluido todavía un OB de alarma cíclica, estando sin embargo
a punto de ser ejecutado de nuevo por haber transcurrido la cadencia temporal, se activa
el OB de error de tiempo OB 80. A continuación se produce la alarma cíclica causante del
error.
Resolución Ejercicio 2.
A continuación insertamos un bloque de datos con el nombre DB1, con la siguiente es-
tructura:
Insertamos una variable de tipo ARRAY, que ponemos por nombre SENSOR. El número
de registros van desde 1 a 52, de tipo ENTERO.
En el primer registro ponemos en Valor actual la cantidad de 50, para indicar que el
número de registros que tenemos es de 50. Recordemos que en segundo registro tendre-
mos el número de registros grabados.
RECORDAR: Que deberemos cargar el hardware para que la modificación tenga efecto.
De esta forma el OB35 interrumpe la ejecución del OB1, cada minuto ejecutándose. La
ejecución a realizar consta de 4 segmentos.
PROGRAMACIÓN OB 35
El primer registro de la tabla indica la cantidad máxima de elementos que puede tener
(longitud de tabla), y el segundo registro indica el primer elemento de la tabla. Los pará-
metros de la función, son los siguientes:
ERRORES DE PROGRAMACIÓN
En nuestro caso estamos trabajando con una tabla en donde la dirección 0, se corresponde
con el numero de registros a grabar, y en la segunda dirección, el numero de registros
grabados.
Por lo tanto el primer registro a copiar es el de la dirección 4.0, circunstancia que debe-
remos de tener en cuenta a la hora de parametrizar el bloque de FC.
PROGRAMACIÓN OB100
Esta marca se debe de poner por lo tanto con el valor de 2, una vez que se hubiera leído el
último dato grabado, por este motivo en el segmento anterior, cuando se rellena la tabla
de 50 datos, esta marca se coloca a 1 para que con el avance del puntero se ponga a 2.
Se puede comprobar que el valor de MW100, debe ser siempre superior en 2 unidades al
contador de datos registrados.
Cuando la temperatura sea mayor e igual a 35 grados se activa la memoria y cuando sea
menor e igual a 22 se resetea la memoria.
Los ventiladores deben de parar 10 segundos después de que las ventanas se cierren, es
decir cuando la temperatura baje por debajo de los 22 grados, las ventanas cerraran y 10
segundos después pararan los ventiladores.
Esta temporización NO la programaremos dentro del OB35, por que este bloque se eje-
cuta de forma cíclica y nos podría dar problemas temporales, por lo tanto se programara
en el FC1.
Insertamos un nuevo bloque FC2, que vamos a realizar de forma parametrizada para el
funcionamiento de los 2 ventiladores.
Los ventiladores se accionan por mando manual o automático y se paran también de for-
ma manual o automática.
PROGRAMACIÓN FC 3
La ventana 1 se activa (SET) con el mando manual con su final de carrera de cerrado pi-
sado y con el final de carrera de abrir sin pisar, ó con el mando manual y los dos finales
de carrera no pisados. (Hay que tener en cuenta que se debe admitir la ventana parcial-
mente abierta, y que por lo tanto en una posición intermedia se puede abrir más, hasta la
apertura total, parándolo su final de carrera de abrir).
El cierre de la ventana se realiza con el pulsador de marcha de cierre con el final de carre-
ra de abrir pisado y el final de carrera no pisado, ó con el pulsador de cierre y los 2 finales
de carrera no pisados, para cuando este ocupando una posición intermedia, al igual que
ocurría con su apertura.
La memoria de cierre se resetea con el pulsador de paro, ó con el final de carrera cuando
la ventana llegue al final de su recorrido.
Vamos a colocar estos segmentos en lenguaje AWL, que nos ocupara un poco menos y de
paso nos valdrá para conocer un poco más este lenguaje de programación.
De la misma forma se realizan las demás entradas y salidas de las memorias utilizadas.
PROGRAMACIÓN FC 4
Se resetea cuando la
ventana llega al final
de su recorrido detec-
tado con el final de
carrera de cerrar.
Al colocar un flanco
negativo, estamos
obligando a que la
memoria M52.1 este
activada y se desacti-
ve, es decir que la
temperatura venga de
35 a 22 grados.
PROGRAMACIÓN OB 1
En primer lugar realizamos la llamada al FC1, en donde se programa la lectura del dato
analógico de temperatura y la temporización del paro automático de los ventiladores.
Podemos ver las entradas y salidas asignadas a cada variable parametrizada en bloque de
ventiladores.
Vamos a comprobar otras cuestiones que podemos analizar, para comprobar informacio-
nes que nos pueden detectar en algunas ocasiones errores en la programación, para ello
volvemos al administrador y con el botón derecho del ratón desplegamos el menú contex-
tual y seleccionamos Datos de Referencia.
Los términos marcados con ―X‖ se corresponden a señales o marcas de bit, mientras que
las líneas laterales según se indican en la cabecera se corresponden con marcas de byte,
palabras o doble palabras.
La doble palabra MD14 (32 bits) contiene un numero real redondeado cuyo valor máximo
es de 60, y que por lo tanto ocupa espacio en los bytes 16 y 17, que es adonde se transfie-
re con la instrucción MOVE, por lo tanto se han eliminado 16 bits que tenían por valor
cero, sin modificar el valor de la entrada.
Vamos a ver con un mayor detalle este bloque, analizando alguna de sus posibilidades.
La tabla siguiente contiene las variables temporales (TEMP) del OB de error de progra-
mación. Como nombres de variable se han elegido los nombres por defecto del OB 121.
Vamos a tomar uno de los programas realizados anteriormente y vamos a realizar algún
fallo a propósito, para poder ver el funcionamiento del OB121.
Para ello vamos a insertar este bloque de organización y programamos los siguientes
segmentos: