Escolar Documentos
Profissional Documentos
Cultura Documentos
Documentación de referencia:
Grupo trabajo EDCAI http://www.iespalauausit.com/edcai/html/indexcast.htm
Blog de Íñigo Gútiez: http://programacionsiemens.com/
Web Siemens: http://siemens.es/sce
YouTube: https://www.youtube.com/playlist?list=PL6w-_JQPzf2EdJkV9_-IVwaxtgbsddp1V
• SF (rojo) Indicador de error de Hardware, fallo del firmware del equipo, instrucción de programa
incorrecta, asignación de parámetros de sistema erróneos, errores aritméticos internos, errores
de tiempo, Flash-Eprom externa errónea, fallo de la batería, fallo de acceso a la periferia (no para
la periferia integrada en la CPU).
• BF (rojo) Error de bus
• DC5V (verde) Alimentación de 5 Voltios para CPU y para el bus S7-300, correcta.
• FRCE(amarillo) Petición de forzado permanente activo.
• RUN (verde) CPU en estado Run .
• STOP (amarillo) CPU en estado Stop.
• La interface MPI es el enlace entre la CPU y el ordenador (18´7 kb) o para comunicar una red MPI.
• La velocidad de transmisión es de 187’5 Kb,
• Mediante este conector se puede conectar el autómata a una red profibus, ya sea como master o
como esclavo. En caso de no disponer de este conector, habrá que utilizar una tarjeta de
comunicaciones CP 342-5 acoplada a la CPU.
IES Cavanilles. Alicante Página 1
6. Conexión Alimentación
• En estos bornes se realiza la alimentación de la CPU a 24 V DC que le será proporcionada por una
fuente de alimentación normalmente enganchada al rack.
24 E/D Entradas digitales, 8 en cada grupo (por defecto EB124, EB125 y EB126)
1. Marcas:
• MB0 a MB255 (2048 Marcas) por defecto las primeras 128 son remanentes (del MB0 al MB15),
configurable en la CPU del PLC.
2. Contadores:
• Tiene 256 Contadores, del Z 0 al Z 255. Del Z 0 al Z 7 por defecto son con memoria. Su margen de
contaje es de 0 a 999 s
3. Temporizadores:
• Tiene 256 Temporizadores, del T0 al T255. Por defecto no hay ninguno con memoria. Su margen
de tiempo es de 10 ms. a 9990 segundos.
4. Generadores de impulsos:
• Tiene un total de ocho generadores de impulsos. Se tienen que configurar en el área de Marcas y
puede ser el byte de marcas que nosotros queramos. Normalmente configuraremos el último, el
byte MB255.
5. Bloques OB:
Son bloques de organización. Cada OB tiene una función determinada. El OB1 es el único bloque de ejecución
cíclica. Es el que ejecuta la CPU sin que nadie le llame. Los demás OB´s tienen una función determinada. Se
IES Cavanilles. Alicante Página 2
ejecutan cuando les corresponda sin que nadie les llame desde ningún sitio del programa. Tenemos OB´s
asociados a diferentes errores de la CPU, a alarmas, etc. Los principales disponibles:
6. Bloques FC:
Son Funciones. Son trozos de programa que crea el usuario. Realizan una función determinada dentro del
proyecto. Se ejecutan cuando se las llama desde algún punto de mi programa. Pueden ser parametrizables o
no. Además de las FC´s creadas por el usuario, existen bibliotecas con funciones predefinidas SFC´s. Se utilizan
exactamente igual, aunque no podemos entrar en ellas para ver la programación.
7. Bloques FB:
Son Bloques de función. En principio funcionan igual que las FC. La diferencia está en que las FB se guardan la
tabla de parámetros en un módulo de datos DB. Esto tiene dos ventajas. Una es que podemos acceder a los
parámetros desde cualquier punto del programa. Otra es que cada vez que llamemos a la FB no es necesario
que le demos todos los parámetros. Los parámetros que no rellenemos, se tomarán por defecto los últimos
que hayamos utilizado.
Son Módulos de datos. En estos bloques no realizamos programa. Son áreas de memoria organizadas en tablas
en las que guardamos datos. Luego podremos leerlos y escribir sobre ellos.
• Hay un total de 127, del DB1 al DB127 (el DB0 es de sistema y se reserva para él).
Para controlar el error producido por esta diferencia, aparece el Tiempo de Vigilancia.
SCL
S7 Graph
A los diferentes programas y entornos de programación de los PLC de la serie S7 300 se accede desde
el Administrador Simatic. Los PLC posteriores al año 2007 se pueden programar mediante el nuevo
paquete de programación TIA Portal.
Realizar el siguiente programa en lenguaje KOP. La CPU utilizada es 313C. Simular el programa. El nombre del
proyecto será: Ejercicio1a
ejer2:
Realizar el programa anterior pero cambiando los bits de entrada y salida, de tal forma que sean bits
consecutivos a los anteriores. El nombre del proyecto será: Ejercicio1b. Simular el programa.
Abrir los dos proyectos a la vez. Copiar el FC1 del Ejercicio1b al Ejercicio1a. Realiza los cambios necesarios para
que el OB1 del Ejercico1a tenga dos FC, y que al simular obtengamos el resultado de ambos ejercicios.
• La memoria de carga: permite almacenar el programa de usuario sin asignación simbólica de operandos
o comentarios (éstos se almacenan en el disco duro del ordenador). La memoria de carga puede ser
RAM o Flash-EPROM. En la memoria de carga se almacena no solo el programa sino también los datos
del sistema.
La memoria de trabajo (RAM integrada): contiene las partes del programa S7 relevantes para la
ejecución del programa. La ejecución del programa tiene lugar exclusivamente en el área
correspondiente a las memorias de trabajo y del sistema.
La memoria del sistema (RAM): contiene los elementos de memoria que cada CPU pone a disposición
del programa de usuario, tales como: la imagen de proceso de las entradas y salidas, marcas,
temporizadores y contadores. Contiene además las pilas de bloques y de interrupción. La memoria del
sistema de la CPU ofrece además una memoria temporal (pila de datos locales) asignada al programa
para los datos locales del bloque llamado. Estos datos sólo tienen vigencia mientras esté activo el
bloque correspondiente (la zona de la tabla de declaración de una OB, o una FC).
Por lo tanto, nuestro programa tendrá un consumo de memoria de carga y otro de memoria de trabajo. En
ninguno deberemos de superar la memoria de trabajo, ya que no es posible su ampliación, por lo que nos
veremos obligados a cambiar de CPU. La memoria de carga sí que puede ser ampliada mediante Flash o RAM
externas.
Para conocer la memoria que ocupa un programa, en el administrador de Step 7 seleccionamos un bloque de
S7, y presionando el botón derecho accedemos a sus propiedades, que nos indicarán tanto el tamaño de la
memoria de carga requerida por el mismo, como el de la memoria de trabajo.
Para conocer cuánto nos ocupa todo el programa, incluyendo los datos de sistema, deberemos de seleccionar
el subdirectorio bloques, y visualizar sus propiedades. Los datos de sistema, la carpeta SDB de nuestro
proyecto, contienen la configuración Hardware del equipo, que hemos proyectado en Hardware de S7.
E entrada
A salida
M marca
P periferia (acceso directo)
L datos locales
T temporizador
Z contador
DB módulo de datos
Cada uno de estos tipos se puede direccionar en 4 posibles modos (salvo T y Z):
SALIDAS EXTERNAS:
Realizar el siguiente fragmento de programa, sustituyendo los grupos de contactos (OR, AND) por marcas.
Utilizar la tabla de símbolos y asignar los bits de entrada y salida como “inx” o “outx”, siendo x el bit. Dar de
alta las marcas en la tabla de variables y visualizar el estado de estas.
Cuando un proceso se repite o simplemente es una forma habitual que tenemos para resolver un
problema, podemos utilizar las FC.
En primer lugar creamos una FC, como en los casos anteriores, pero ahora hay que añadir en el
“Interface” de la función, unas etiquetas.
En el siguiente ejemplo utilizamos tres etiquetas, dos en el apartado de “IN”: “paro” y “marcha”. Y la
otra en “OUT”: “motor”. Y a continuación escribiremos el fragmento de programa, utilizando dichas
etiquetas.
ejer4:
El sentido del pasillo es el marcado por la flecha. Cuando la fotocélula A detecta una presencia, enciende la
lámpara 1 y el ventilador. Cuando la fotocélula B detecte presencia. Apagará la lámpara 1 y encenderá la
lámpara 2. Finalmente la fotocélula C apagará todo el sistema. Crear la plantilla FC2, en la que esté el pulsador
de marcha y el de paro de todo el sistema. Utilizar una marca como salida de la plantilla FC2, para controlar el
sistema.
15 … 8 7 6 5 4 3 2 1 0
RB A1 A0 OV OS OR STA RLO /ER
La salida A125.0 es "0" si: El estado en la entrada E 125.0 es "1" O el estado en E125.1 Y E125.2 es "1".
Conector ---( # )--- es un elemento intercalado que cumple una función de asignación; el conector almacena el
RLO actual (el estado de señal del flujo de corriente) en el <operando> que se haya especificado.
Si se conecta en serie con otros elementos, la operación ---( # )--- se inserta igual que un contacto.
Se puede crear la negación del conector anteponiéndole el elemento ---|NOT|--- (invertir el resultado lógico).
Guardar ---(SAVE) (Cargar resultado lógico (RLO) en registro RB) almacena el RLO en el bit del resultado binario
(RB) de la palabra de estado.
La operación SAVE resulta especialmente útil antes de salir de un bloque, permite añadir un tratamiento de
error a continuación del bloque.
Si programamos un SET de una salida o de una marca con unas condiciones, se activará cuando se cumplan
dichas condiciones. Aunque las condiciones dejen de cumplirse, no se desactivará hasta que se haga un RESET
de la salida o marca.
Explicación: 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 ejecución 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. Según
se van ejecutando las instrucciones, el PLC no accede a las salidas reales para activarlas o desactivarlas. Accede
al registro interno PAA y pone “0” o “1”. Sólo 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.
El funcionamiento básico es el mismo para las dos: Teniendo el valor de “1” en la entrada de Set y “0” en la
entrada de Reset, el operando de la bascula toma el valor de “1”. Pero si tiene el valor de “0” en la entrada de
Set y “1” en la entrada de Reset, el operando de la bascula toma el valor de “0”.
En el caso de que tanto la entrada de Set y Reset, sean de “0”, el valor del operando no varia.
La diferencia está en el caso de que ambas entradas tengan el valor de “1”, en tal caso el operando tendrá el
valor de “1” en la R-S y de “0” en la S-R.
En el Step7 hay una serie de librerías (funciones encapsuladas o plantillas) con las que podemos optimizar el
código de nuestros programas. En concreto existen la FC82 y FC83. Funcionamiento:
Función 83 (Set): Al poner un 1 en EN, se ponen a Set a N elementos a partir de S_BIT (En este caso se activaran
las salidas A124.0, A124.1, A124.2 y A124.3. Cuando pongamos un 1 en EN, si la función se ejecuta
correctamente, tendremos un 1 en ENO.
Función 82 (Reset): Al poner un 1 en EN, se ponen a Reset a N elementos a partir de S_BIT (En este caso se
desactivaran las salidas A124.0, A124.1, A124.2 y A124.3. Cuando pongamos un 1 en EN, si la función se ejecuta
correctamente, tendremos un 1 en ENO.
El ejercicio consiste en realizar el programa control de una grúa puente mediante un autómata. La grúa puente
está instalada en una planta de manipulación de bloques de mármol. Mediante unos carriles instalados en el
techo, la grúa puente puede desplazar los bloques de mármol en las cuatro direcciones: Norte, Sur, Este y Oeste.
También se puede controlar la altura del gancho desde donde se enganchan los bloques de mármol.
Apartado A:
Desde un mando controlaremos los movimientos de la grúa puente. Los pulsadores del mando están
conectados a las siguientes entradas del autómata:
Para controlar el motor (M1) que produce el desplazamiento de norte-sur y el motor (M2) que produce
el desplazamiento de este-oeste. Se utilizan las siguientes salidas del autómata:
1) Salida M1_N, accionara el contactor que produce un sentido de giro en el motor M1, que realiza el
desplazamiento de la grúa puente en la dirección norte.
2) Salida M1_S, accionara el contactor que produce un sentido de giro en el motor M1, que realiza el
desplazamiento de la grúa puente en la dirección sur.
3) Salida M2_E, accionara el contactor que produce un sentido de giro en el motor M2, que realiza el
desplazamiento de la grúa puente en la dirección este.
4) Salida M2_O, accionara el contactor que produce un sentido de giro en el motor M2, que realiza el
desplazamiento de la grúa puente en la dirección oeste.
Para asegurar que la grúa puente no sobrepasa los limites del área de trabajo (se puede variar) se han
instalado unos finales de carrera que detectaran que la grúa puente ha llegado al limite. Se conectaran
a las siguientes entradas del autómata:
En el momento que el final de carrera detecte que la grúa puente ha llegado al limite del área de
trabajo, la grúa puente se detiene. No pudiendo desplazarse en esa dirección aunque el operario
accione el correspondiente pulsador
Apartado B:
En el mando de la grúa puente hay dos pulsadores que controlan la subida o bajada del gancho. Si el
operario deja de pulsar, el gancho no se detendrá. Con el accionamiento de otro pulsador se detiene el
gancho sea cual sea su movimiento. Los pulsadores del mando están conectados a las siguientes
entradas del autómata:
Para controlar el motor (M3) que produce el desplazamiento de subir-bajar. Se utilizan las siguientes
salidas del autómata:
1) Salida M3_A, accionara el contactor que produce un sentido de giro en el motor M3, que realiza el
desplazamiento del gancho hacia arriba.
2) Salida M3_B, accionara el contactor que produce un sentido de giro en el motor M3, que realiza el
desplazamiento del gancho hacia abajo.
Para asegurar que el gancho no sobrepasa los límites del carrete, se han instalado unos finales de
carrera que detectaran los extremos del carrete. Se conectaran a las siguientes entradas del autómata:
Cuando activo de forma constante la E124.0, hacemos que la salida A124.0 funcione durante 1 Scan cuando la
entrada E124.0 pasa de 0 a 1 (sube).
Cuando desactivamos la E124.0, hacemos que la salida A124.1 funcione durante 1 Scan cuando la entrada
E124.0 pasa de 1 a 0 (baja).
Nota: Tanto el flanco positivo, como el negativo, deben de ir acompañados de una marca que no se puede
repetir.
Ejemplos de aplicaciones:
A. En el primer y segundo segmento, hemos creado un telerruptor. Cada vez que accionemos el E124.0
provocaremos que la salida A124.0 cambie de estado. Razonar el circuito.
B. En el tercer y cuarto segmento, condicionamos el funcionamiento de la salida A124.2 a seguir un orden
de conexión de entradas concreto. Primero debemos accionar la E124.3 y a continuación la E124.2. En
caso de hacerlo al revés, la salida no funcionara. Razonar el circuito.
El temporizador se activa por la entrada “S”, decrementando el valor de temporización en una unidad y en el
intervalo indicado por la base de tiempo hasta alcanzar el valor 0. El valor de temporización se puede cargar en
los formatos binario, hexadecimal o decimal codificado en binario (BCD).
Para cargar un valor de temporización redefinido, se observarán las siguientes reglas sintácticas.
W#16#wxyz
S5T#aH_bM_cS_dMS
Por cada temporizador se reserva una palabra (16 bits). El valor de tiempo puede estar en un rango de 10 ms a
9.990s (2 horas, 46 minutos y 30 segundos). Los valores no deben exceder 2H_46M_30S. Los valores con un
margen o una resolución demasiado grandes (p. ej. 2H_10MS) se redondean de tal forma que correspondan a
la tabla para el margen y la resolución.
S_IMPULS (SI). Arranca el temporizador indicado cuando hay un flanco creciente en la entrada de arranque S.
El temporizador funciona mientras el estado de señal en la entrada S sea "1", pero como máximo durante el
tiempo indicado por el valor de temporización en la entrada TW.
El estado de señal en la salida Q es "1" mientras que funcione el temporizador. Si el estado de señal en la
entrada S cambia de "1" a "0" antes de transcurrir el intervalo de tiempo, el temporizador se para. En este caso
el estado de señal en la salida Q es "0". El temporizador se pone a 0 si la entrada de desactivación R del
temporizador se pone a "1" mientras funciona el temporizador. El valor de temporización actual y la base de
S_VIMP (SV). Arranca el temporizador indicado cuando hay un flanco creciente en la entrada de arranque S. El
temporizador continúa en marcha durante el tiempo predeterminado, indicado en la entrada TW, aunque el
estado de señal en la entrada S se ponga a "0" antes de haber transcurrido el intervalo de tiempo. El estado de
señal en la salida Q es "1" mientras el temporizador esté en marcha. El temporizador vuelve a arrancar con el
valor de temporización predeterminado si el estado de señal en la entrada S cambia de "0" a "1" mientras está
en marcha el temporizador. El temporizador se pone a “0” si la entrada de desactivación R del temporizador se
pone a "1" mientras el temporizador está funcionando. El valor de temporización actual y la base de tiempo se
ponen a “0”.
El valor de temporización actual queda depositado en las salidas DUAL y DEZ. El valor de temporización en la
salida DUAL está en código binario, el valor en la salida DEZ está en formato decimal codificado en binario. El
valor de temporización actual equivale al valor inicial de TW menos el valor de temporización que ha
transcurrido desde el arranque del temporizador.
S_EVERZ (SE). Arranca el temporizador indicado cuando hay un flanco creciente en la entrada de arranque S. El
temporizador continúa en marcha con el valor de temporización indicado en la entrada TW mientras el estado
de señal en la entrada S sea positivo. El estado de señal en la salida Q será "1" si el tiempo ha transcurrido sin
que se produjeran errores y si el estado de señal en la entrada S es "1". Si el estado de señal en la entrada S
cambia de "1" a "0" mientras está en marcha el temporizador, éste se para. En este caso, el estado de señal en
la salida Q será "0".
El temporizador se pone a 0 si la entrada de desactivación R del temporizador se pone a "1" mientras funciona
el temporizador. El valor de temporización y la base de tiempo se ponen a 0. Entonces el estado de señal en la
salida Q es "0". El temporizador también se pone a 0 si en la entrada de desactivación R el valor es "1",
mientras el temporizador no está en marcha y el RLO en la entrada S es "1".
El valor de temporización actual queda depositado en las salidas DUAL y DEZ. El valor de temporización en la
salida DUAL está en código binario, el valor en la salida DEZ está en formato decimal codificado en binario. El
valor de temporización actual equivale al valor inicial de TW menos el valor de temporización que ha
transcurrido desde el arranque del temporizador.
S_SEVERZ (SS). Arranca el temporizador indicado cuando hay un flanco creciente en la entrada de arranque S.
Para arrancar un temporizador tiene que producirse necesariamente un cambio de señal. El temporizador
continúa en marcha con el valor de temporización indicado en la entrada TW aunque el estado de señal en la
entrada S se ponga a "0" antes de que haya transcurrido el tiempo. El estado de señal en la salida Q será "1" si
ha transcurrido el tiempo, independientemente del estado de señal que tenga la entrada S. El temporizador
vuelve a arrancar con el valor de temporización indicado si el estado de señal en la entrada S cambia de "0" a
"1" mientras el temporizador está en marcha. El temporizador se pone a 0 si la entrada de desactivación R del
temporizador se pone a "1", independientemente del RLO en la entrada S. Entonces el estado de señal en la
salida Q es "0".
El valor de temporización actual queda depositado en las salidas DUAL y DEZ. El valor de temporización en la
salida DUAL está en código binario, el valor en la salida DEZ está en formato decimal codificado en binario. El
valor de temporización actual equivale al valor inicial de TW menos el valor de temporización que ha
transcurrido desde el arranque del temporizador.
S_AVERZ (SA). Arranca el temporizador indicado cuando hay un flanco decreciente en la entrada de arranque
S. Para arrancar un temporizador tiene que producirse necesariamente un cambio de señal. El estado de señal
en la salida Q será "1" si el estado de señal en la entrada S es "1", y también mientras el temporizador esté en
marcha. El temporizador se para si el estado de señal en la entrada S cambia de "0" a "1" mientras el
Administrador Equipo Simatic 300, seleccionar Hardware, y doble pulsación con el ratón.
Nota: Podemos poner el byte de marcas que queramos del 0 al 255. Por comodidad ponemos el MB255 ya que
al ser el último no corremos el riesgo de equivocarnos y utilizarlo de forma simultánea para otra cosa.
El ejercicio consiste en utilizar una instalación convencional de una caldera de calefacción y mejorar el
rendimiento de la caldera (alargar la vida de la instalación) y optimizar el ahorro de energía. El autómata
controla el encendido y apagado de la caldera a través de su entrada de control, a la que normalmente se le
conecta el único termostato de una instalación. Esta entrada es conocida como “entrada del termostato
ambiente”. Es una entrada libre de tensión. Cuando se conecta la caldera, esta realiza dos funciones básicas:
1) Calentar el agua que circulara por los radiadores, provocando el calentamiento de la vivienda.
2) Activar una bomba de agua que es la encargada de generar la presión necesaria para facilitar el
recorrido de agua caliente por todo el circuito.
La caldera solo está encendida cuando una o más válvulas están abiertas, permitiendo de este modo la
recirculación del circuito de agua, evitando de este modo la sobre presión. El autómata recibe la información
de la temperatura de cada zona mediante los contactos libres de tensión de los termostatos. Cuando un
termostato detecta una temperatura más baja de la que tiene programada cierra el contacto.
Si no hay ninguna válvula abierta y la caldera esta apagada, cuando un termostato indica la falta de
temperatura en su zona, el autómata abrirá de forma instantánea la válvula correspondiente, pero la
caldera será conectada tras pasar 10 segundos. Este retardo protege a la instalación de una posible
sobre presión. La sobre presión es producida por la lentitud con la que se abren las válvulas, pudiendo
darse el caso de estar entregando presión la caldera al circuito y no estar abierta ninguna válvula. En
una instalación sin autómata se soluciona añadiendo en el circuito una válvula de seguridad, que
puede facilitar la circulación si se alcanzara una presión elevada en la instalación.
En el caso de tener la caldera conectada con una o más válvulas abiertas y los termostatos detectan la
sobre temperatura en sus zonas, el autómata no desconectará la caldera y las válvulas al mismo
tiempo. Cuando el último de los termostatos indique al autómata que no necesita de más temperatura
en su zona el autómata apagara en primer lugar la caldera y tras una temporización de 15 segundos
desconectara la última de las válvulas.
IES Cavanilles. Alicante Página 34
Generador de impulsos programable con dos Temporizadores.
Utilizando dos temporizadores con retardo a la conexión SE, se construye un generador de señal programable,
y añadiendo otra salida obtenemos un generador de impulsos programable.
Para el caso de utilizar solo el generador de impulsos, el siguiente ejemplo se realiza con un solo contador.
Para poder ver con el simulador el funcionamiento de del generador de impulsos, seleccionaremos el modo
“Ciclo individual”, y ejecutamos el programa “Ciclo a ciclo”.
Administrador Equipo Simatic 300, seleccionar Hardware, y doble pulsación con el ratón.
Solo podemos escribir una cantidad, y estas determinaran las marcas, temporizadores y contadores a partir de
0.
Y en salida del Interface de la FC1, un elemento: Salida, de tipo Bool para la salida del PLC.
En el caso de que la plantilla la tengamos que utilizar posteriormente y no queramos modificar el contenido, la
podemos “guardar con protección contra escritura”. Si la depositamos en el mismo proyecto, nos pedirá que
cambiemos de nombre, por ejemplo FC101.
Al OB100 NO hay que llamarlo desde ningún otro módulo, pues se ejecuta de manera automática, pero
Solo puede haber un OB100, cuando se tenga que realizar varios acciones, se Irán añadiendo.
Para crear el OB100: Insertar nuevo objeto -> Bloque de organización -> seleccionar OB100
Funcionamiento Automático:
Al accionar el pulsador E124.0, se activa la salida A124.0 (electroválvula) y la salida A124.7 (Piloto) funciona de
forma intermitente lento.
Al cabo de 15 segundos de funcionar, se desconectan las salida A124.0 y A124.7. Quedando a la espera de una
nueva pulsación.
Funcionamiento Manual:
Mientras mantengamos accionado el pulsador E124.0, se activa la salida A124.0 (electroválvula) y la salida
A124.7 (Piloto) funciona de forma intermitente rápido.
Para la realización del ejercicio se ha de usar una función para cada tipo de funcionamiento
(manual/automático) y sólo podremos utilizar remanencias en marcas.
Solución propuesta:
Existen contadores ascendentes, descendentes y ascendentes/descendentes. Se verá sólo el tercero al ser los
otros dos una particularización de éste.
Los elementos con los que se puede trabajar con un contador son los siguientes:
El valor al que se inicializa el contador viene dado por el dato asociado a la entrada ZW. El contador se inicializa
a este valor y estará preparado para contar cuando se produzca un flanco de subida en el valor lógico asociado
a la entrada S.
Una vez activado el contador, ZV y ZR incrementan y decrementan, respectivamente, la cuenta cuando el valor
lógico conectado a su entrada pasa de 0 a 1.
La puesta a cero del contador se puede forzar anticipadamente con un flanco de subida en la entrada R.
Con las salidas DUAL y DEZ se puede conocer el valor actual de la cuenta, tanto como número entero como en
código BCD.
Finalmente la salida Q estará a 1 desde que se activa el contador y mientras el valor de la cuenta sea distinto de
0, y estará a 0 antes de activarlo, después de resetearlo, o desde el momento en que la cuenta llega a cero. En
este caso, para activar de nuevo el contador, será necesario un flanco de subida en S.
El operario pone en marcha el proceso mediante el selector E124.0, al accionar el pulsador E124.1 carga el valor
de preselección, esto provoca que la cinta A124.0 se ponga en marcha al instante.
Hay un detector de piezas E124.7 que cuenta las piezas que pasan. Cuando ha contado las piezas
preseleccionadas (el contador llega a 0), se para la cinta y se pone en marcha de forma intermitente el
zumbador A124.7.
El operario retira entonces la caja llena, pone una caja vacía y acciona de nuevo el pulsador E124.1 y el ciclo
comienza de nuevo.
Ejemplo
Realizar el ejemplo del lateral, creando 3 contadores, uno de cada tipo
en una FC, a los que se asocirá una DB de instancia a cada uno de ellos
en los que almacenar los datos de contaje.
Comprobar, con el PLC o con el simulador, como se comportan las
salidas en cada uno de los casos y las prioridades en caso de actuar
simultáneamente sobre más de una extrada de activación.
Los contadores IEC utilizan una palabra (16 bits) para almacenar el valor
en entero (INT), por lo que tomarán valores entre -32768 y 32767.
Ejemplo
Realizar el ejemplo del lateral, creando 3 temporizadores, uno de cada
tipo en una FC, a los que se asocirá una DB de instancia a cada uno de
ellos en los que almacenar los datos de contaje.
Comprobar, con el PLC o con el simulador, como se comportan las
salidas en cada uno de los casos.
La necesidad de un bloque de datos de instancia para cada temporizador o contador IEC, hace que
normalmente no se utilicen de forma individual, sino que se integren en un bloque de función (FB). Dentro del
FB definiremos todos los temporizadores o contadores que necesitemos en esa parte del programa y
almacenaremos sus datos en un único DB de instancia asociado a ese bloque de función.
Una vez creado, lo editaremos creando las variables tipo STAT dentro del bloque,
haciendo referencia al tipo de objeto que usaremos, mediante el número de SFB (lo
podemos ver a través de la biblioteca).
Esto es, SFB0 para un contador CTU, SFB1 para un contador CTD, SFB2 para un
contador CTUD, SFB03 para un temporizador de impulso TP, SFB4 para un
temporizador TON y SFB5 para un temporizador TOF.
En este ejemplo introducimos 3 temporizadores, uno de cada tipo. Si revisamos la estructura creada, veremos
que para cada temporizador se han creado las variables correspondientes del temporizador, se han asignado al
tipo de dato (BOOL, INT, REAL…) y al tipo de variable IN, OUT, IN/OUT…
Tener en cuenta que NO se puede llamar más de una vez a cada uno de los temporizadores, pero sí que se
pueden crear tantos temporizadores como necesitemos y estarán todos en un único bloque de función y en
una única DB.
Comentar también que es posible hacer una FB parametrizable con temporizadores IEC, de forma que al ser
llamada indiquemos los bits o valores que nos pudieran interesar. Por ejemplo, si queremos poder modificar
los tiempos para cada uno de los temporizadores del ejercicio anterior, crearemos 3 variables de entrada de
tipo TIME y las asociaremos a las entradas PT de cada uno de ellos.
Las etiquetas de las metas, están compuestas por cuatro caracteres de los cuales al menos 1 tiene que ser una
letra. Ha de coincidir (Mayúsculas o minúsculas) la etiqueta del salto y la etiqueta de la meta.
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 bloque a otro. Nos sirven para todo
tipo de bloques de programación.
Debemos tener en cuenta que cuando realizamos un salto, dejamos de ejecutar las líneas de programa que
saltamos, por tanto si había algo en marcha, continuará en marcha y no se podrá parar hasta que se vuelvan a
ejecutar estas instrucciones.
En el instante de pasar a modo RUN, activamos E125.0, E125.1 y E125.2. En ese instante se activara la
salida A124.0 y el temporizador a la conexión T0, iniciara la temporización. El programa permanecerá
en un “bucle finito”, hasta que el T0 alcance su temporización, instante en el que se producirá la salida
del bucle y la salida A124.2 se activara, recordar que la entrada E125.2 ya se había activado.
En el instante de pasar a modo RUN, activamos solo E125.0 y E125.2. En ese instante se activara la
salida A124.0. El programa permanecerá en un “bucle infinito”. Tras superar el tiempo máximo
programado del ciclo de SCAN, el PLC pasara a modo de STOP, indicando con el LED SF del frontal, que
se ha producido un error de Hardware o Software.
Cuando se produce un error de Hardware o Software, el sistema operativo llama a un bloque de organización,
el OB80, siempre y cuando se halla cargado al PLC (el OB121 será llamado entonces si falta un bloque). Veamos
una posible solución al problema anterior.
Ojo: la mejor solución es el evitar utilizar estructuras de programa que provoquen “bucles”. La estructura
ideal es la de estructura “pasante”.
Tenemos 3 formatos o tamaños de números: Entero (INT), doble entero (DINT) y real (REAL).
Un número entero es un número binario de 16 bits que tiene como signo el bit más significativo.
Límite: Nº positivos: 32767 (El 0 se considera positivo)
Nº negativos: -32768
DOBLE ENTERO: Los números dobles enteros se denominan como D.
Ejemplo: 4.83
El punto es obligatorio
Atendiendo a su tamaño, existen diversos tipos de datos con los que el STEP7 trabaja:
En el modelo S7-300, tenemos 2048 bits de MARCAS, que se identificarían de la M0.0 a la M255.7, para poder
operar bit a bit. Cuando se requiere operar en grupos de 8 bits = 1 byte, tendremos 256 grupos de 8 bits y se
identifican como MB0 al MB255. También nos permiten agrupar estos 2048 bits en grupos de 16 bits y de 32
bits, identificados como MW y MD respectivamente.
Veamos un ejemplo:
La función MOVE es ejecutada cuando tenemos un 1 en la entrada EN, entonces el valor que hay en IN es
copiado en OUT. (El valor en IN permanece inalterable).
Los formatos en IN y en OUT pueden ser de 8 ,16 y 32 bits. (Los formatos en IN y en OUT pueden ser
Diferentes).
E entrada: EB, EW
A salida: AB, AW
M marca: MB, MW
P periferia (acceso directo) PEB, PEW
L datos locales
D palabra doble (32 bits).
Constantes 25 (el valor esta en decimal)
Veamos un ejemplo de mover datos de un canal entero de entrada (8 bits) a un canal de salida (8 bits).
Para poder visualizar los valores, utilizaremos la tabla de variables y repetiremos la misma variable hasta tres
veces, para poder ver el valor en Hexadecimal, Binario y Decimal.
En el siguiente ejemplo movemos tres constantes a unas variables de marca de distinto tamaño.
Ojo: Cuando se introduce el valor en la marca, se puede poner como “C#5” o “C#50”, y el Sept7 lo traduce
directamente a Hexadecimal.
E entrada: EW, ED
A salida: AW, AD
M marca: MW, MD
P periferia (acceso directo) PEW, PED
L datos locales
D palabra doble (32 bits).
Constantes 25 (el valor esta en decimal)
NOTA: Un comparador, actúa como un contacto en el que hay valor 1 cuando se cumple la comparación.
Ejemplo de comparar: comprobar cuando es mayor el valor de “20” que el del contador.
Ejer9: Realizar la comparación de cuando el valor de un temporizador a la conexión (SE), es mayor que un
tiempo expresado en formato “S5T#xxS”. Utilizar como tiempo del SE = 20S, y el valor a compara de 10S.
Puedes usar la comparación con el valor absoluto o comparando los datos que hay en las palabra de marcas
asociada al temporizador con otra palabra.
IES Cavanilles. Alicante Página 58
Ejer10: Clave para abrir una cerradura:
Para poder abrir una cerradura, debo de poner en MW0 el valor “1234”. Este valor seria introducido por un
terminal de operador o por un SCADA. Luego para el ejercicio utilizaremos la entrada E125.0, para cargar en el
MW0 el valor de “1234”.
Si al accionar el pulsador E124.0 y la clave es correcta, funcionara la cerradura (salida A124.0 activa) durante 5
segundos y borraremos la clave correcta del MW0, cargando un cero en MW0.
Si nos equivocamos tres veces seguidas (tres pulsaciones en la entrada E124.0 y el valor del MW0 no es
“1234”), se bloqueara la cerradura y funcionara una sirena (salida A124.7) de forma intermitente hasta que la
paremos accionando el pulsador E124.0, habiendo colocando antes en MW0 el valor “9999”.
Solución propuesta:
OB1
Mejora: Hacer el programa necesario para que una vez se produzca algún fallo, demos un tiempo de 15
segundos para abrir la cerradura, en caso de no hacerlo, debe de activarse la alarma, se bloqueara la cerradura
y funcionara una sirena (salida A124.7) de forma intermitente hasta que la paremos accionando el pulsador
E124.0, habiendo colocando antes en MW0 el valor “9999”.
Operación AND entre palabras WAND_W: La función WAND__W coge los 16 bits de IN1 y los 16 bits de IN2,
realiza la operación AND (bit a bit) de los bits de la misma posición (dentro de su palabra) y el resultado lo envía
a OUT. Habrá un 1 cuando ambos bits tengan valor 1.
Operación OR entre palabras WOR_W: La función WOR__W coge los 16 bits de IN1 y los 16 bits de IN2, realiza
la operación OR (bit a bit) de los bits de la misma posición (dentro de su palabra) y el resultado lo envía a OUT.
Habrá un 1 cuando alguno de los bits operados sea 1.
Operación OR exclusiva entre palabras WXOR_W: La función WXOR__W coge los 16 bits de IN1 y los 16 bits de
IN2, realiza la operación OR exclusiva (bit a bit) de los bits de la misma posición (dentro de su palabra) y el
resultado lo envía a OUT . (tendré un 1 cuando los bits de IN1 e IN2 sean diferentes).
Ojo: para evitar que se incremente continuamente en cada ciclo de scan, se han de utilizar los Flancos.
SUB_I resta los registros que tenga en IN1 e IN2 y envía el resultado a OUT. (OUT= IN1-IN2).
MUL_I multiplica los registros que tenga en IN1 e IN2 y envía el resultado a OUT. (OUT= IN1*IN2).
DIV_I divide los registros que tenga en IN1 e IN2 y envía el resultado a OUT. (OUT= IN1/IN2).
En cualquier de estas cuatro operaciones, el resultado ha de estar comprendido dentro de los limites de los
números enteros.
Cuando el motor haya funcionado durante 5000 horas, un indicador nos avisara para la realización de un
mantenimiento preventivo.
Solución propuesta
El sistema se pone en marcha con la entrada E124.0, que activa el funcionamiento del motor A124.0 y se
detiene con la entrada E124.1. Resetearemos el tiempo de funcionamiento del sistema con la entrada E124.2.
Mediante un reloj de pulsos de 0,5s contaremos las horas (3600 segundos en MW0) que está el sistema en
marcha. Estas horas las acumularemos en otro registro MW2. Con una comparación de MW2 con las horas
previstas de mantenimiento activaremos la señal de aviso.
IES Cavanilles. Alicante Página 62
Ejercicio 11: Realizar las modificaciones necesarias para que una vez superado el límite de horas de
funcionamiento nos avise cada hora, durante 1 minuto, de la necesidad de realizar el mantenimiento
preventivo.
Suma de números reales: ADD_R suma los registros que tenga en IN1 e IN2 y envía el resultado a OUT.
(OUT= IN1+IN2).
Resta de números reales: SUB_R resta los registros que tenga en IN1 e IN2 y envía el resultado a OUT.
(OUT= IN1-IN2).
Multiplicación de números reales: MUL_R multiplica los registros que tenga en IN1 e IN2 y envía el
resultado a OUT. (OUT= IN1*IN2).
División de números reales: DIV_R divide los registros que tenga en IN1 e IN2 y envía el resultado a
OUT. (OUT= IN1/IN2).
Elevar al cuadrado: SQR eleva al cuadrado el valor que hay en IN y envía el resultado a OUT.
Valor absoluto de un número: ABS toma el valor de IN (sea positivo o negativo) y lo envía a OUT
siempre con signo positivo.
Calcular las funciones trigonométricas siguientes en un ángulo como número en coma flotante (32 bit)
El número que se introduce en el parámetro de entrada N indica el número de bits a desplazar. Las posiciones
que quedan libres después de ejecutar la operación de desplazamiento se rellenan con ceros o, si es hacia la
izquierda, y con el estado de señal del bit de signo (0 significa positivo y 1 significa negativo), si es hacia
derechas.
Las operaciones de rotación sirven para rotar bit a bit todo el contenido de la entrada IN, hacia la izquierda o
hacia la derecha. Las posiciones libres de los bits se rellenan con los estados de señal de los bits que se
desplazan fuera de la entrada IN. El número que se introduce en el parámetro de entrada N indica el número
de bits que se va a rotar.
Veamos como desplazar un bit a lo largo de una palabra a modo de registro de desplazamiento usando la
instrucción SHL_W y un reloj de pulsos de 1 segundo (0,5 s a ON y 0,5 s a OFF). El bit que se desplazará será el
valor (0 ó 1) que tenga la entrada E124.0 y que este desplazamiento se muestre en los bytes de salida A124 y
A125.
Activando el simulador, tendremos que el valor de la entrada E124.0 se trasladará a la salida A125.0 y se irá
desplazando 1 bit hacia la izquierda cada segundo a lo largo de los Bytes de salidas 124 y 125.
Queremos controlar el un túnel de pintura al que llegarán piezas de diferente tamaño a través de una cinta.
El sistema se pondrá en servicio con un pulsador de marcha (NA)(E124.1) que hará que se ponga en
funcionamiento el motor de la cinta (A124.0). Como en la zona de pintura hay condiciones que inutilizarían los
sensores, el control de la válvula de pintura (A124.1), la resistencia de secado (A124.2) y la ventilación (A124.3)
se ha de hacer directamente con los pulsos del encoder (usar un bit de pulsos) del motor de la cinta. La cinta
avanzará a velocidad rápida (usar pulsos de 1 segundo), en la parte inicial un sensor (NC)(E124.2) controlará la
entrada de una pieza y la longitud de la misma.
A los 9 pulsos de encoder desde la entrada de la pieza, se deberá activar la válvula de pintura y la velocidad de
la cinta pasará de rápida a lenta (usar pulsos de 2 segundos), permaneciendo en esta situación hasta que se
haya pintado completamente. A los15 pulsos del encoder desde la entrada, la pieza entrará en la zona de
secado, donde una resistencia y un ventilador se activarán. Una vez completado el proceso (que haya pasado la
pieza completa a pintar), la velocidad de la cinta volverá a ser rápida hasta que otra pieza llegue a la zona de
pintura.
En cualquier momento un pulsador de emergencia (NC) (E124.0) podrá detener la instalación, parando el motor,
cortando la válvula de pintura, la resistencia de secado y el ventilador. El sistema deberá ‘memorizar’ la
posición de las piezas y se restablecerá el servicio desenclavando el pulsador de emergencia y activando un
pulsador de marcha (NA) (E124.1).
Señalización:
Esto sólo sirve para operaciones de contactos. Dentro del MASTER CONTROL RELAY no podemos poner
temporizadores/contadores o llamadas a otros bloques. El programa si que nos permite hacerlo pero no
funciona correctamente.
Está pensado para utilizar contactos con asignaciones “=“. Viene a ser como un circuito eléctrico. Lo que quede
activado cuando no se ejecuta lo que hay dentro de los paréntesis del MCR, se desactiva.
Si dentro del MCR utilizamos instrucciones SET y RESET, no funciona como hemos dicho. Cuando deja de actuar
lo que hay dentro de los paréntesis, si estaba activado con un SET se mantiene activado. Si no hacemos un
RESET desde fuera, no se desactiva.
Veamos cuales son las cuatro instrucciones necesarias para hacer un MCR:
Vemos que cada paréntesis funciona sólo cuando tenemos activa su condición. Cuando su condición no está
activa el trozo de programa en cuestión deja de funcionar y las salidas se desactivan. Es como si realmente
quitásemos tensión a ese trozo de programa.
Call: Llamar a una FC/SFC sin parámetros. Llama a una función (FC) o a una función sistema (SFC) que no tiene
parámetros
RET: Retorno, sirve para salir de los bloques condicionalmente. Para emplear esta salida se necesita una
combinación lógica previa.
Bloques de datos globales: Los bloques de datos globales, pueden ser utilizados por todos los módulos
del programa. Los FB, FC y OB pueden leer o escribir datos en los DB globales. Para grabar o leer datos,
antes hay que abrir el módulo con “OPN DB”.
Un DB de instancia no necesita abrirse con ninguna instrucción, se abre se lee y se escribe en él de forma
automática. Al empezar a leer el bloque de función (FB), se carga del DB una copia de las variables locales en el
bloque de función, se ejecuta el bloque y cuando acaba, deposita el valor actual de las variables locales en el
DB de instancia.
Para guardar un dato, tenemos que poner nombre a la variable, definir el formato en el que lo queremos, y el
valor inicial.
El valor inicial siempre es el mismo. Su propio nombre ya lo indica, es el valor inicial. Cuando este valor cambie,
se almacenará en otra columna que es el valor actual. Aunque al abrir el DB no veamos esta columna, tenemos
que tener en cuenta que también existe.
14 bytes ocupados alternando variables Sólo 10 bytes agrupando los tipos de variable
En nombre, escribiremos el nombre con el que podremos identificar la variable dentro del DB1. En valor inicial,
pondremos el valor que tendrá la primera vez que utilicemos el DB1. Finalmente, en el comentario añadiremos
más información sobre la variable.
Introducimos las variables mediante desde el menú ‘Insertar’ o mediante el botón derecho ‘Línea de
declaración’ delante o detrás de la variable actual.
Tras rellenar el nombre de la variable, seleccionamos la casilla de tipo, y pulsando con el botón derecho del
ratón (o desde la opción del menú), seleccionamos el dato a utilizar: Datos simples o datos compuestos.
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.
En ese proceso, se hace una mezcla de una cantidad del producto A con otra cantidad de otro producto B
durante un tiempo determinado.
Al accionar un pulsador se abren las dos electroválvulas que dan paso a los productos y se pone en marcha el
mezclador. Según van pasando los tiempos, se cierra la válvula A, se cierra la válvula B y se para el mezclador.
En cada DB, Menú > Ver > Datos (CTRL+F4) Menú > Edición > Inicializar bloque de datos
OB1
OBs de alarma horaria: (OB10 a OB17) Realiza una interrupción horaria. En el S7-300, solo tenemos la OB10.
• Una sola vez, cada minuto, cada hora, cada día, cada semana, cada mes, cada año, a final de mes.
• Arranque único: útil para avisar desde un display de un determinado evento que ocurrirá en una
fecha determinada a una hora determinada.
• Arranque cíclico: útil para labores de mantenimiento (engrase de maquinaria, aviso de revisión de
motores, etc...).
OBs de alarma de retardo (OB20 a OB23) Realiza una interrupción de retardo. Se ejecuta al cabo de un tiempo
de llamar al OB. En el S7-300, solo tenemos la OB20.
En el ejemplo, al cabo de 10
segundos de activar la E124.0, se
activará la salida A124.0
OBs de alarmas cíclicas (OB30 a OB38) Son OB que se ejecutan cada cierto tiempo prefijado y con prioridades
diferentes. En el S7-300, solo tenemos la OB35.
OBs de alarma de proceso (OB40 a OB47) Son interrupciones de proceso que se activan cuando en un proceso
o un registro ha superado unos límites máximos o mínimos admisibles. (Entradas analógicas, contadores de alta
velocidad etc...)
Por ese motivo, los controles SIMATIC S7-300 disponen de la elaboración de alarmas de proceso. Junto con las
tarjetas con capacidad para elaborar alarmas de proceso, que se puede llamar, sin prácticamente demora de
tiempo, a un programa adaptado al evento correspondiente. Las alarmas de proceso se pueden equiparar con
las interrupciones.
En los S7 400 se dispone de 8 alarmas de proceso (en los S7 300 únicamente la OB40) que se asociarán a los
eventos que generen los módulos en cuestión. Un ejemplo sería el tratamiento de las alarmas generadas por el
desbordamiento de las entradas analógicas de un módulo de S7.
Con ayuda de las SFCs 39 a 42 es posible bloquear o retardar y habilitar de nuevo las alarmas de proceso.
La parametrización de las alarmas de proceso de un módulo puede efectuarse no sólo con STEP 7 sino también
con las SFCs 55 a 57.
La tabla siguiente describe las variables temporales (TEMP) de un OB de alarma de proceso. Como nombres de
variables se han elegido los nombres por defecto del OB 40.
Ejemplo de uso del OB 40, queremos que la activación de una entrada física nos dispare una acción en el PLC a
través del OB 40. La activación de la OB se ha de hacer en un módulo que tenga capacidad de activar un fallo de
HW, para ello debemos entrar en la configuración del dispositivo y configurarlo.
Una vez configurado el HW, deberemos programar la acción, en este caso activaremos una marca y a través de
ella una salida física.
OB40
OB1
Este programa sólo puede probarse directamente con el PLC, las interrupciones de entrada digital no
pueden simularse.
El disparador de ejecución del OB40 se activa con un flanco, realiza la acción programada allí y después
prosigue con la ejecución del OB1 y el resto del programa.
Si tenemos varios dispositivos que disparan al OB40, deberemos consultar los datos de proceso de la
misma para ver que tarjeta y dirección es la que ha provocado el disparo.
Actividad:
• OB80 Error de tiempo (Tiempo de ciclo excedido). Si no está programado y detecta el error, el PLC
pasa a STOP.
• OB82 Rotura de hilo de un módulo que tenga capacidad de diagnostico. Si no está programado y
detecta el error, el PLC pasa a STOP.
• OB85 Evento de arranque para un OB no cargado. Si no está programado y detecta el error, el PLC
pasa a STOP.
• OB86 Detección de fallo en un bastidor. Si no está programado y detecta el error, el PLC pasa a
STOP.
OBs de modo de arranque (OB100 a 0B102) (solo puede estar activado uno de ellos). Se selecciona en
Hardware > Arranque.
• OB100 Rearranque completo. (Arranque en Caliente). Mantiene el estado de los elementos que
tenga con memoria. Se ejecuta al pasar la CPU de STOP a RUN. Primero lee el OB100 y después el OB1
(empezando por la primera instrucción).
• OB101 Rearranque. (Solo en S7-400). Mantiene el estado de los elementos que tenga con memoria.
Se ejecuta al pasar la CPU de STOP a RUN. Primero lee el OB101 y después sigue leyendo en el punto
donde dejo de leer al pasar al estado STOP.
• OB102 Arranque en frío. Pone todos los elementos a 0 (incluso los que tienen memoria). Se ejecuta
al pasar la CPU de STOP a RUN. Primero lee el OB102 y después el OB1 (empezando por la primera
instrucción).
IES Cavanilles. Alicante Página 80
OBs de error (OB121 y OB122).
• OB122 Error al intentar acceder a un módulo de datos (entradas, salidas, etc...) .Si no está
programado y detecta el error, el PLC pasa a STOP.
Administrador Simatic > Sistema Destino > Diagnóstico/configuración > Ajustar la Hora
En el mismo podemos incluso igualar la hora de nuestro PLC con la actual del ordenador.
Los S7 300/400 disponen de las SFC0 (SET_CLK) y SFC1 (READ_CLK) para la lectura de la fecha y hora actual de
aquellas CPU’s que posean reloj hardware. Antes de realizar la llamada a dicha función de sistema, es necesario
generar en una DB una variable de tipo DATE_AND_TIME. Dicha variable se compone de 8 bytes, en los cuales
se va a almacenar tanto la fecha como la hora actual del PLC. Las fechas admisibles abarcan:
La siguiente tabla contiene un ejemplo para el jueves 5 de diciembre de 2013, 1:05 horas y 5,25 segundos. Se
representan los contenidos de los Bytes que contienen la información de la fecha y hora.
La lectura y modificación de la fecha y hora es complicada sin usar un interfaz HMI y será necesario usar
bloques de datos para almacenar los datos del reloj.
Sincronización de relojes en S7. En aquellos sistemas de automatización en los cuales se distribuya el control
en varios PLC’s S7 conectados a un sistemas de visualización, suele ser interesante la sincronización de los
relojes de los diferentes PLC’s. Esto nos permitirá modificar la fecha y hora actual de uno de ellos desde la OP o
el scada, y que esta modificación quede reflejada en los demás relojes de las restantes CPU’s de la instalación.
Contar tiempo del sistema. En ciertas ocasiones puede ser interesante conocer el tiempo que transcurre entre
dos eventos dentro del sistema operativo del S7.
Un caso podría ser conocer el tiempo que tarda un telegrama de comunicaciones en ser contestado por el
receptor desde que sale de nuestra CPU. También podría ser interesante el tiempo consumido por una
subrutina en procesarse.
Para estos menesteres podemos usar la SFC64, que nos indica el valor actual del reloj del sistema. Dicho reloj
cuenta desde 0 hasta 2147483647 ms. (600 horas aprox.). Transcurrido este tiempo comienza de nuevo a
contar desde 0. La precisión del cronómetro es de 10 ms. en los S7 300 y de 1 ms. en los S7 400.
Cada vez que se produce un rearranque, el cronómetro del sistema pasa a 0 y comienza a contar, hasta que el
autómata pasa a STOP.
El OB10 interrumpe al OB1 y puede ejecutarse a intervalos determinados o en una fecha concreta, es el único
bloque de alarmas horarias disponible para la serie 300 (aunque otros se pueden llamar por programa). Las
alarmas horarias se pueden activar:
Una vez, en una fecha determinada (indicación de hora absoluta con fecha)
Periódicamente, indicando la fecha de arranque y la frecuencia de repetición (p. ej., cada minuto,
cada hora, cada día).
Las alarmas horarias sólo se pueden tratar si se ha parametrizado la alarma horaria y el correspondiente
bloque de organización está contenido en el programa de usuario. En caso contrario se escribe un aviso
de error en el búfer de diagnóstico y se efectúa un tratamiento asíncrono del error. (OB80).
Las alarmas horarias periódicas deben corresponder a una fecha real. No será posible la repetición
mensual de un OB 10 cuyo tiempo de arranque sea 31.1. En este caso, el OB sólo sería arrancado en los
meses que tengan realmente 31 días (por lo tanto no en febrero, ni en abril, ni en junio, etc.)
Una alarma horaria activada durante el arranque (rearranque completo (en caliente) o rearranque) se
ejecuta sólo tras finalizar el arranque.
Los OBs de alarmas horarias desactivados por parametrización no se pueden arrancar. La CPU reconoce
un error de programación y pasa a STOP.
Tras un rearranque completo (en caliente) será preciso reactivar todas las alarmas horarias ajustadas
(p.ej. mediante la SFC 30 ACT_TINT en el programa de arranque).
Para trabajar mediante el OB10 podemos hacerlo de dos formas, bien configurarlo mediante el HW, indicando
la fecha y la periodicidad con la que queremos que se se realice la interrupción o bien usando las funciones y
librerías estándar de sistema para hacerlo.
Crear el OB 10 y realizar un programa que incremente una unidad en el MW10 y vigilar dicha área de memoria
mediante una tabla de estado en decimal.
A través de la tabla de variables o del PLCSIM se puede ver como se incrementa el valor de MW10 cada minuto
1º Mediante la función FC3 (D_TOD_DT) de Librerías de Standard Library de IEC Function Blocks pasamos la
fecha y hora a la que queremos que empiece el OB10 a la variable temporal “Hora_inicio” (definirla en el OB1
con formato de DATE_AND_TIME). Poner el día y hora actuales.
2º Mediante la función SFC28 (SET_TINT) de Librerías de Standard Library de System Function Blocks,
indicamos cual es el OB con el que queremos trabajar(OB_NR), a que hora queremos que empiece (SDT) y cuál
va a ser su peridiocidad (PERIOD) y dónde va el código de error (RET_VAL)
4º Finalmente creamos el OB10 con la función de incrementar 1 unidad cada vez que sea llamado
OB10
Con las interrupciones horarias podríamos habilitar el encendido (usando el OB10) y el apagado (usando el
OB11, por ejemplo), de un riego, alumbrado, calefacción…
Ejemplo 3: Utilización del OB35 para la interrupción del OB1 a intervalos fijos.
La forma más simple de usar el reloj es hacerlo desde el OB1 u OB35, donde existe una variable temporal
(OB1_DATE-TIME y OB35_DATE_TIME) en la que se almacena el valor del reloj del PLC a partir del byte 12. Para
utilizarla puede ser llamada directamente desde cualquier instrucción en cualquiera de estos OB.
Una vez que tengamos la fecha y hora cargada en una variable ya podemos operar con los datos del reloj
usando las funciones de sistema (desde Standard Library > IEC Function Blocks) que nos permiten trabajar con
fechas y horas.
Destacamos:
FC1 (AD_DT_TM) Suma un intervalo (formato TIME) a una hora (formato DT) y
da como resultado una hora nueva (formato DT).
FC3 (D_TOD_DT) Compila los formatos de datos DATE y TIME_OF_DAY (TOD)
y los convierte al formato de datos DATE_AND_TIME (DT).
FC6 (DT_DATE) Toma la fecha y hora actual y nos da la fecha (DATE).
FC7 (DT_DAY) Toma la fecha y hora actual y nos da el día de la semana
(DAY).
FC8 (DT_TOD) Toma la fecha y hora actual y nos da la hora actual (TOD)
FC9 (EQ_DT) Compra dos fechas y devuelve un 1 si son iguales
FC12 (GE_DT) Compara dos fechas y devuelve 1 si la primera es mayor o
igual
FC14 (GT_DT) Compara dos fechas y devuelve 1 si la primera es mayor
FC18 (LE_DT) Compara dos fechas y devuelve 1 si la primera es menor o
igual
FC23 (LT_DT) Compara dos fechas y devuelve 1 si la primera es menor
FC28 (NE_DT) Compara dos fechas y devuelve 1 si son diferentes
FC34 (SB_DT_DT) Resta la diferencia entre dos fechas y da la diferencia en
formato TIME
FC35 (SB_DT_TM) Resta un tiempo a una fecha y da el resultado en formato
DATE (fecha y hora)
Sin embargo, ninguna de estas funciones nos permite trabajar con las horas de forma cómoda, ni programar
acciones a unas determinadas horas.
Una posible solución sería usar un direccionamiento indirecto basado en un puntero y una matriz, pero
requiere hacerlo en AWL y no resulta muy intuitivo. Puedes ver un ejemplo de este tipo en la web de Siemens:
http://support.automation.siemens.com/WW/view/es/22819915
Para utilizarla en cualquier otro bloque, (en una FC por ejemplo), será necesario llamar la hora del PLC desde la
función de sistema SFC1 (READ_CLK). Por defecto no aparece en la biblioteca, pero podemos llamarla en AWL
(en la imagen) o conectarnos al sistema on-line y arrastrarlo desde el mismo. En todo caso será necesario crear
una variable temporal #Fecha_hora (en el ejemplo) en formato DATE_AND_TIME.
Una vez depositada la fecha en una variable de la FC, se trabajaría de forma idéntica a como se hace en la OB1
u OB35, mediante las funciones de sistema de comparación de fechas y horas.
Nuevamente resulta poco intuitivo el trabajar con fechas. La solución más habitual en cualquiera de los casos
es llevar los datos a una DB, con lo que podremos acceder a ellos desde cualquier bloque o función.
Para trabajar con el reloj de forma más cómoda vamos a crear una DB en la que almacenar los datos, con la
posibilidad de acceder a los mismos desde cualquier bloque o función Para ello en la DB1 (por ejemplo)
tendremos que crear una estructura de [ARRAY] (matriz), de la siguiente forma:
Identificamos los datos de la DB1 con el nombre de RTC y le damos una estructura:
ARRAY [1..8] Matriz de 8 valores en formato BYTE y los colocaremos a partir del byte 0 (B#16#0)
Si lo hacemos desde el OB1 u OB35, ya tendremos los datos del reloj en la variable temporal (OB1_DATE-TIME
y OB35_DATE_TIME, a partir del byte 12), por lo que NO es necesario llamar la SFC1. En cualquier otro bloque
de función FC tendremos que llamar la SFC1 y definir una variable temporal en formato (DATE_TIME) en el que
almacenarlo.
Con lo visto anteriormente, hacer un programa que active la salida A124.0 los jueves entre las 14:15 y las 18:00
horas.
La hora la hemos llamado a un bloque FC1 mediante la SFC1 depositada en la variable temporal de esa FC1 con
el nombre #Fecha_hora y la hemos llevado a un bloque de datos DB1, tal y como hemos visto anteriormente
con la función MOVE.
Existen dos parámetros que determinan una entrada o una salida analógica:
El tipo de sonda (en el caso de entradas), o el tipo de actuador (en el caso de salidas), a
conectar (4-20 mA, 0-10 V, etc...).
La resolución a alcanzar en la lectura o escritura. Cuanta mayor sea la resolución, mayor será
la exactitud de la lectura y menor el error entre el valor real y el almacenado en el autómata.
Por contra, también será mayor el tiempo de conversión analógico / digital y por lo tanto las
variaciones en el proceso tardarán más en reflejarse en el PLC.
Sin embargo, como puede haber tarjetas con rangos bipolares (+/-), se utiliza el bit de mayor peso
para el signo (S), por lo que los valores efectivos serían de -32768 a +32767. En el caso de señales
unipolares (sólo valores positivos), los datos negativos son ignorados.
Además, parte de ese rango se reserva para un margen de saturación y desborde del valor de la
entrada o salida. En la práctica los valores nominales van de -27648 a + 27648.
La más utilizada en la industria es 0-10V. El Simatic S7 300 posee el rango +/-10V. El inconveniente de
este tipo de lectura es que al ser una tensión, las distancias sin atenuación de la señal debido a caídas
de tensión en el cable son relativamente cortas, por lo que la sonda debe estar cerca del cuadro
eléctrico donde se encuentre el módulo analógico.
Dentro de las medidas de intensidad se suelen utilizar principalmente dos tipos: 0-20 mA. y 4-20 mA.
Las medidas por intensidad es el más utilizado en la lectura analógica, ya que permite grandes
distancias al ser la lectura por corriente, y a la vez es fácil reconocer la rotura del hilo, ya que por
debajo de 4 mA indica el mal funcionamiento del sensor.
Las sondas PT100 se utilizan para la medida de la temperatura en procesos que oscilen entre 850ºC y
–200ºC. La PT100 es una termo-resistencia que varía su resistividad en función de la temperatura en
contacto con la misma. A través de dos hilos (1 canal del módulo de entradas analógicas), se hace
circular por la PT100 una corriente constante. Otros dos hilos toman la medida de la resistencia en
los extremos de la sonda, con lo que se obtiene la variación de resistencia, y al ser conocida su
linealidad con respecto a la temperatura en los márgenes anteriormente citados, se obtiene ésta.
Salidas a tensión de 0 a 10 V y de 1 a 5 V.
Nota: Para otros sensores analógicos consultar el manual de producto A5E00105507-08 y el del módulo y
sensor correspondientes.
IES Cavanilles. Alicante Página 94
Conexión de entradas Analógicas
Existen dos partes en una lectura analógica: la parte correspondiente al módulo de entradas
analógicas del PLC, y la correspondiente al propio transductor o aparato de campo que genera la
magnitud.
Para leer una sonda de 0-10 V pasiva se cablea como muestra la figura. En Hardware, se selecciona
en tipo de medición V, y en margen +/-10V. El PLC suministra la tensión al sensor.
El transductor de medida a 2 hilos es alimentado a través de los bornes del módulo de entradas
analógicas con protección contra cortocircuitos. El transductor de medida a 2 hilos convierte
entonces la magnitud medida en una intensidad. Los transductores a 2 hilos deben ser sensores de
medida aislados.
Al medir la resistencia, el módulo suministra una corriente constante a través de los bornes IC+ e IC-.
La corriente constante se conduce a través de la resistencia a medir. Dicha corriente se mide luego
como caída de tensión. Es importante que los conductores de corriente constante conectados se
enlacen directamente con la termorresistencia/resistencia.
Las mediciones con conexiones a 4 o 3 hilos parametrizadas compensan las resistencias de potencia,
alcanzando así una precisión mucho mayor que al medir con una conexión a 2 hilos. Las mediciones
con conexión a 2 hilos captan no sólo la resistencia en sí, sino también las resistencias de potencia.
La tensión producida en la termorresistencia se mide con alta impedancia a través de los bornes M+
y M-. Efectúe la conexión con la polaridad correcta del conductor conectado (aplicar IC+ y M+, así
como IC - y M- a la termorresistencia). Asegúrese también en esta conexión de que los conductores
conectados IC+ y M+ , así como los conductores IC- y M-, queden enlazados directamente con la
termorresistencia.
Para la conexión a 3 hilos a módulos con 4 bornes debe colocarse normalmente un puente entre M-
e IC-. Cerciórese también en esta conexión de que los conductores conectados IC+ y M+ queden
enlazados directamente con la termorresistencia. La figura muestra la interconexión básica.
Para la conexión a 2 hilos deben colocarse en el módulo puentes entre M+ e IC+ y entre M- e IC-. Las
resistencias de potencia se incluyen en la medición.
En la compensación interna es posible formar la unión fría en los bornes del módulo de entradas
analógicas. En este caso es necesario llevar los conductores de compensación hasta el módulo
analógico. El sensor de temperatura interno mide la temperatura del módulo y genera una tensión
de compensación adecuada. Con la compensación interna no se obtiene la misma precisión que con
la compensación externa.
La pestaña de entradas nos permitirá seleccionar los La pestaña de salida nos permite seleccionar los siguientes
siguientes parámetros: parámetros:
Tipo: V, I, desactivada. Tipo: V, I, desactivada.
Margen: 0-10V, +/-10V, 0-20mA, 4-20mA,+/-20mA. Margen: 0-10V, +/-10V, 0-20mA, 4-20mA,+/-20mA.
En la entrada 4, está reservada para una PT100.
Recordar que tras una configuración HW tendremos que compilar y guardar los cambios y transferirlos después al PLC.
Hay que recordar que los valores nominales están entre -27648 y +27648, aunque el rango de la
señal es más amplio ya que incluye los rebases y desbordamientos (-32768 a +32767).
Por tanto, bastaría con hacer la comparación (INT) con ese valor y activar la señal de alarma
correspondiente.
Cuando el valor de la PEW752 esté por debajo de 3318 (equivalentes a 1,2 V medidos en el sensor),
se activará la salida de alarma de nivel bajo A0.1.
Si nuestro depósito tuviera una altura de 15 metros, donde el sensor detectaría 0 V para el depósito
vacío y 10 V para el depósito lleno, el nivel de alarma se activaría cuando el depósito bajase de 1,8
metros (los 1,2 voltios del sensor).
Estos tipos de cálculos pueden ser algo laboriosos y dados a confusiones. Existen una serie de
funciones integradas que nos facilitan el trabajo con señales analógicas. De esta forma en vez de con
los valores de conversión, trabajemos directamente con los valores de magnitud medida, escalados
al rango de trabajo que nos está midiendo el sensor.
Así tendremos la función SCALE para escalar el valor de las entradas y UNSCALE para des-escalar el
valor de las salidas.
La función SCALE sirve para escalar el valor de una entrada analógica entre dos valores (máximo y
mínimo). También podríamos escalar cualquier otro registro que no sea una entrada analógica.
Parámetros:
EN: Cuando tengamos un 1 se ejecuta la función. Si hay un 0, la función es saltada (no se ejecuta).
IN: Valor de entrada (número de entrada analógica). Formato entero 16 bits INT.
HI_LIM: Valor máximo deseado de salida (OUT). Número REAL, doble palabra o constante (32 bits).
LOW_LIM: Valor mínimo deseado de salida (OUT). Número REAL, doble palabra o constante.
BIPOLAR: Si vale 0 (trabajamos con valores entre 0 y 27648). Entrada analógica de 0 a 10 V.
Si vale 1 (trabajamos con valores entre –27648 y +27648) Entrada analógica de –10V a +10 V.
OUT: Valor de salida escalado entre el valor máximo y mínimo. Formato REAL.
ENO: Vale 0 si el valor de IN es superior o inferior al límite (-27648 o + 27648). En este caso, además en OUT
sale el valor máximo o el mínimo según se rebase en positivo o en negativo.
RET_VALUE: Registro de error.
Vale W#16#0000 si el escalado se ha hecho correctamente.
Vale W#16#0008 si IN sale de los limites máximo o mínimo.
Ejemplo: Sobre el ejemplo anterior del nivel del depósito, realizamos el escalado de la entrada entre
0 y 15 m, depositando el resultado en la MD52, lo que nos mostrará el valor en metros que tiene el
depósito en cada momento. Comprobamos que para el valor 3318 obtenemos aproximadamente 1,8
metros en el nivel del depósito.
NOTA 1: En este caso BIPOLAR debe estar desactivado (medimos de 0 a 10V), pero como en modo KOP no permite
poner a ese valor FALSE, lo asignamos a una marca que estará desactivada (M100.0, por ejemplo).
NOTA 2: Recordar que 15.0 y 0.0 representan valores REALES de 32 bits. Cuando pongamos una constante en
formato REAL, aunque la constante no tenga decimales, tenemos que poner 100.0 si solo ponemos 100 el
PLC entiende que es un número entero y no tiene cabida en una función de números reales.
Gráficamente se podría representar (caso de 0-10V o 4-20mA): Para el caso de +/-10V (BIPOLAR)
La función UNSCALE sirve para desescalar el valor (máximo y mínimo) de un registro sobre una salida
Analógica. También podríamos desescalar cualquier otro registro que no sea una salida analógica.
Parámetros:
EN: Cuando tengamos un 1 se ejecuta la función. Si hay un 0, la función es saltada.
IN: Valor de entrada .Registro en formato REAL 32 bits.
HI_LIM: Valor máximo deseado del valor de entrada (IN). Número REAL, doble palabra o constante
LOW_LIM: Valor mínimo deseado del valor de entrada (IN). Número REAL, doble palabra o constante
BIPOLAR: Si vale 0, daremos valores de salida entre 0 y 27648). Salida analógica de 0 a 10V
Si vale 1, daremos valores de salida entre –27648 y +27648) .Salida analógica de –10V a +10V
OUT: Valor de salida escalado. Formato INT 16 bits.
ENO: Vale 0 si el valor de IN es superior al límite inferior o al superior (HI_LIM o LOW_LIMIT). En este caso,
además en OUT sale el valor máximo o el mínimo según se rebase en por encima o por debajo. (0 o
27648).
RET_VALUE: Registro de error.
Vale W#16#0000 si el escalado se ha hecho correctamente.
Vale W#16#0008 si IN sale de los limites máximo o mínimo.
Ejemplo:
Actividad 1: Fuerza un valor inferior a 0 o superior a 1500 y comprueba que ocurre en el AW752 y en
el MW0
Ejercicio:
Añadir a este ejercicio cuatro movimientos de datos a MD10 con los valores 0.0, 300.0, 600.0, 900.0,
1200.0 y 1500.0.
Debe de activarse la alarma de máxima cuando el valor del depósito supere los 12,5 m.
Debe de activarse la alarma de mínima, de forma intermitente cuando el nivel del depósito
este por debajo de 2 m.
Actividad: Realizar el mismo ejercicio con escalado y poniendo los datos en una palabra.
En este caso, utilizando la función SCALE, ya tengo en MD10 en formato REAL el valor del nivel que
lee el PEW752, con lo cual puedo realizar la comparación de forma directa.
Si en lugar de poner las constantes 12.5 y 2.0 ponemos dos registros en formato Real, desde un
terminal de operador o desde un sistema Scada podríamos cambiar los valor de consigna con solo
forzar los valores que nos interesen a MD20 (consigna de máxima) y MD30 (Consigna de mínima).