Professional Documents
Culture Documents
Instrucciones avanzadas
PRÓLOGO
Esta documentación forma parte de una serie de manuales que un grupo de profesores de
tres institutos de educación secundaria de Catalunya, como son:
Este grupo de trabajo continúa trabajando en cada uno de los temas para poder ir
actualizando día a día esta documentación, es por ello, que nos podéis enviar vuestras
sugerencias a través de la información que encontrareis en la web dedicada a este grupo
de trabajo y que desde aquí os invitamos a participar.
www.iespalauausit.com/edcai/index.php
Esperamos que el esfuerzo y dedicación que hemos realizado pueda ayudar a mejorar
vuestra labor educativa.
INDICE:
1. SISTEMAS DE NUMERACION.
SISTEMA DECIMAL
En un sistema decimal, nos encontramos que cada dígito puede tener los siguientes valores:
0123456789
SISTEMA BINARIO
En un sistema binario, nos encontramos que cada dígito puede tener los siguientes valores:
0 y 1
Un número binario se puede leer en decimal y hexadecimal
32 + 0 + 8 + 4 + 0 + 1 + = 45
En este caso que es un byte, el bit mas alto o sea el bit 7 es el que determina el signo si el bit 7 es igual a 1
el signo es negativo, sino será positivo.
Si trabajáramos con una palabra, el bit mas alto o sea el bit 15 seria el que determinaría el signo si el bit 15
es igual a 1 el signo es negativo, sino será positivo.
128 + 0 + 32 + 0 + 8 + 4 + 0 + 1 + = 173
SISTEMA HEXADECIMAL
En un sistema hexadecimal, nos encontramos que cada dígito puede tener los siguientes valores (16):
0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15)
D 1 8
El número binario hexadecimal E57A equivale al número binario 1110 0101 0111 1010
CODIGO BCD
En un código BCD, nos encontramos con lo que se llama binario codificado decimal.
Ese binario se puede leer en decimal
7 6 5 4 3 2 1 0
1x2 + 0x2 + 0x2 + 1x2 + 0x2 + 1x2 + 1x2 + 0x2 = 150
10 0 1 0110
9 6
2. MÓDULOS DE ORGANIZACIÓN.
OB30 a OB38 Son OB que se ejecutan cada cierto tiempo prefijado y con prioridades diferentes
OB Base de tiempo Valor prefijado
Prefijado para la prioridad
• OB 30 5s 7
• OB 31 2s 8
• OB 32 1s 9
• OB 33 500 ms 10
• OB 34 200 ms 11
• OB 35 100 ms 12
• OB 36 50 ms 13
• OB 37 20 ms 14
• OB 38 10 ms 15
OB100 a 0B102 OBS de modo de arranque (solo puede estar activado uno de ellos).
Se selecciona en Administrador-ÆHardware---ÆCPU (picar dos veces)Æpestaña
‘arranque’.
3. BLOQUES DE FUNCIÓN.
Las Funciones, son módulos que se ejecutan al ser llamados desde otros módulos.
• Cuando se les llama, la función actúa como una subrutina del programa.
• Cuando termina de ejecutar el módulo, el programa retorna al módulo desde donde fue llamado, en la
instrucción posterior al salto.
Todos los valores de la declaración local, menos los temporales, se almacenan en un bloque de datos
(DB de Instancia).
4 MÓDULOS DE DATOS.
Los módulos de datos, son áreas de memoria de la CPU que se utilizan para almacenar datos.
• Los DB mantienen su valor ante un corte de tensión, siempre que tengamos la pila tampón de respaldo.
En caso de no tener pila, solo mantendrán su valor los DB configurados en el área de elementos
remanentes de la CPU. En las CPUs actuales que van con Memory Card, mantienen la memoria todos los
DBs
• Los módulos de datos globales, pueden ser utilizados por todos los módulos del programa.
• Todos 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 OPN DB (en KOP) o AUF DB (en AWL).
• Los datos permanecen almacenados en el DB aunque se cierre el DB.
5. ACUMULADORES.
Los acumuladores son registros auxiliares en la CPU que se utilizan para el intercambio de datos,
operaciones de comparación y operaciones aritméticas.
El S7-300 tiene dos acumuladores de 32 bits y el S7-400 tiene cuatro.
Carga: (L)
La operación de carga, siempre va al ACCU1 (las posiciones no utilizadas se ponen a 0), o sea si cargo un
Byte, los 24 bits restantes se ponen a 0.
El registro que antes de la carga estaba en el ACCU1, se desplaza al ACCU2.
Transferencia:(T)
La operación de transferencia solo transfiere el valor que haya en ACCU1 y el ACCU1 queda invariable.
(Copia el valor del ACCU1 en un registro).
ACCU1
0000 0000 0000 EB0 L EB0
31 24 23 16 15 8 7 0
ACCU1
0000 0000 EB0 EB1 L EW0
31 24 23 16 15 8 7 0
ACCU1
MB0 MB1 MB2 MB3 L MD0
31 24 23 16 15 8 7 0
ACCU1
MB0 MB1 MB2 MB3 T AB0
T AB0
ACCU1
MB0 MB1 MB2 MB3 T AW0
T AW0
ACCU1
MB0 MB1 MB2 MB3 T AD0
T AD0
-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.
0000000000000000 AW124
1 011100111001010 AW124
FC1
E126.0 MOVE
EN ENO
Programación en AWL
U E 126.0
SPBNB _001
L EW 124
T AW 124
_001: NOP 0
-En este caso queremos enviar diferentes constantes a una misma palabra.
-PAW752 es una salida analógica que trabajara entre valores 0 y 27648. Con esos valores, dará una señal
exterior de tensión que estará entre 0 y 10 Voltios que en nuestro caso seria la consigna de velocidad de un
variador de frecuencia de tal modo que 0 V serian 0 rpm y 10 V serian 1500 rpm.
-En este caso tengo seis pulsadores del E124.0 al E124.5. Accionando los pulsadores en orden ascendente
queremos que la salida analógica nos de valores de 0, 2, 4, 6, 8 y 10 voltios.
-Cuando accione la entrada E124.6, un potenciómetro que dará de 0 a 10 V a la entrada analógica PEW752
enviara su valor a la salida analógica PAW752.
FC2
E124.0 MOVE
1 EN ENO
0 IN OUT PAW752
E124.1 MOVE
2 EN ENO
E124.2 MOVE
3 EN ENO
E124.3 MOVE
4 EN ENO
E124.4 MOVE
5 EN ENO
E124.5 MOVE
6 EN ENO
E124.6 MOVE
6 EN ENO
Nota: Probar que ocurre cuando acciono dos pulsadores al mismo tiempo.
-Indicar que solución puedo tomar para que el ultimo valor activo sea el efectivo.
-Una vez probado el ejercicio, calcular los valores que tendríamos que enviar para tener 1, 3, 5, 7 y 9 voltios
de salida en PAW752.
-Realizaremos la preselección de un temporizador con un valor variable. Cada vez que accionemos el
E124.0, el temporizador cogerá como preselección el valor que tenga en ese momento el MW0. El valor de
MW0, debe estar en BCD o en tiempo Simatic, en caso contrario el temporizador no lo entenderá y el PLC
en caso de no estar programado el OB121, se ira a STOP.
MW0
MB0 MB1
0010 0011 1001 0101 = W#16#2395
Base T. Centenas Decenas Unidades
-Una vez se haya activado el temporizador, aunque cambie el valor de MW0, el temporizador seguirá
trabajando con el valor que tenia al ponerse en marcha.
-Para cargar el valor del temporizador, lo podremos ver en BCD (MW4) o en Binario (MW2).
-El valor cargado en BCD, contiene el valor y la base de tiempos. No obstante el MW4 lo podemos visualizar
en BCD (formato hexadecimal) o en tiempo Simatic.
FC3
T1
E124.0 S_EVERZ A124.0
1 S Q
R DEZ MW4
Nota: Cuando se coloca un tiempo en formato S5T (Tiempo Simatic), ajusta automáticamente el valor a 3
dígitos y adapta la base de tiempos.
Forzar valores en el MW0 (Hexadecimal) con diferentes bases de tiempos en el digito 3 y diferentes valores
en los dígitos 0 al 2 y comprobar que tiempo Simatic coge.
Para llenar el bote pequeño, la electro válvula (A124.0) debe funcionar 3 segundos.
Para llenar el bote mediano, la electro válvula (A124.0) debe funcionar 8 segundos.
Para llenar el bote grande, la electro válvula (A124.0) debe funcionar 15 segundos.
Tendremos tres pulsadores que seleccionaran el tipo de bote a llenar.
Nota: El tiempo que enviamos a MW0, lo podemos expresar en tiempo Simatic (S5T#15S) o en BCD
W#16#1150.
• Nota: Indica como funcionaria el circuito si el segmento 4 estuviera programado delante del
segmento 1.
FC4
E124.0 MOVE
1 EN ENO
E124.1 MOVE
2 EN ENO
E124.2 MOVE
3 EN ENO
E124.0 A124.1 T1
4
SV
MW0
E124.1
E124.2
T1 A124.1
5
A124.1
P M G
-El operario primero accionara el selector E124.0 y después pondrá en un terminal de operador o en un
SCADA un valor al MW0 (preselección del número de piezas que deseamos controlar en ese proceso). Una
vez hecho esto accionara el pulsador E124.1 que cargara 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 la
lámpara A124.7.
-El operario retira entonces la caja llena, pone una caja vacía y repite el proceso (Pone la nueva
preselección en MW0 y acciona de nuevo el pulsador E124.1 con lo cual el ciclo comienza de nuevo.
FC5
E124.7 E124.0 Z1
ZR
E124.1 E124.0 Z1
SZ
MW0
Z1 E124.0 A124.0
A124.0
E124.7
A124.7
E124.0
E124.1
NOTA: Un comparador, actúa como un contacto en el que habrá un 1 cuando se cumpla la comparación.
FC6 AWL
E124.0 A124.0
CMP==I
1
MW0 IN1
MW2 IN2
E124.1 A124.1
CMP<>I
2
MW0 IN1
MW2 IN2
E124.2 A124.2
CMP>I
3
MW0 IN1
MW2 IN2
E124.3 A124.3
CMP<I
4
MW0 IN1
MW2 IN2
E124.4 A124.4
CMP>=I
5
MW0 IN1
MW2 IN2
E124.5 A124.5
CMP<=I
6
MW0 IN1
MW2 IN2
Si queremos realizar una comparación de un Byte o de números en formato hexadecimal, deberemos hacer
la comparación en AWL.
Ejemplo:
-Queremos que cuando el valor de la EW124 sea igual al valor H2A4D se active la salida A124.7
-Queremos que cuando el valor del EB126 sea igual a 73 se desactive la salida A124.7
Programación en AWL
L EW 124
L W#16#2A4D
==I
S A 124.7
L EB 126
L 73
==I
R A 124.7
-Para poner en funcionamiento un proceso, se deben de dar ciertas condiciones. Estas son que algunas
entradas deben estar a 0 y otras a 1.
-Este ejercicio resuelto de forma tradicional, implicaría la colocación de 16 contactos en serie con el
elemento a activar.
EB124 EB125
.7 .6 .5 .4 .3 .2 .1 .0 .7 .6 .5 .4 .3 .2 .1 .0 EW124
1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 1
FC7
E126.0 A124.0
CMP==I
1 S
EW124 IN1
-22163 IN2
E126.1 A124.0
EW124 IN1
-22163 IN2
A124.0
-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.
-Si al accionar el pulsador E124.0 la clave es correcta, funcionara la cerradura A124.0 (segmento 1 )
durante 5 segundos y borraremos la clave correcta de MW0. (segmento 3).
-Si nos equivocamos tres veces, se bloqueara la cerradura y funcionara una sirena (A124.7) de forma
intermitente hasta que la paremos accionando el pulsador E124.0 habiendo colocando antes en MW0 el
valor 9999.(segmento 5).
-Ejercicio: Hacer el programa necesario para que una vez marque algún fallo demos un tiempo de 15
segundos para abrir la cerradura, en caso de no hacerlo, debe de activarse la alarma.
OB100
E0.0 Z1
1 SZ
C#3
FC8
E124.0 Z1 A124.0
CMP==I
1 S
MW0 IN1
1234 IN2
A124.0 T1
2 SE
S5T#5S
T1 MOVE A124.0
3 EN ENO R
0 IN OUT MW0
E124.0 M2.0 Z1
CMP<>I
4 P ZR
MW0 IN1
1234 IN2
E124.0 Z1
CMP==I
5 SZ
SZ
C#3
MW0 IN1
9999 IN2
A124.0
Z1 M255.3 A124.7
6
Se trata de programar en dos bloques de programa diferentes el mismo circuito pero con funcionamiento
diferente,
Y desde el OB1 dependiendo del estado de la entrada E124.0, deberá funcionar un tipo u otro de
funcionamiento.
La función WAND__W coge los 16 bits de IN1 y los 16 bits de IN2, realiza la operación serie (bit a bit) de
los bits de la misma posición (dentro de su palabra) y el resultado lo envía a OUT.
FC9
E124.0 WAND_W
1 EN ENO
MW0 IN1
OUT MW4
MW2 IN2
La función WOR__W coge los 16 bits de IN1 y los 16 bits de IN2, realiza la operación paralelo (bit a bit) de
los bits de la misma posición (dentro de su palabra) y el resultado lo envía a OUT.
E124.1 WOR_W
2 EN ENO
MW0 IN1
OUT MW4
MW2 IN2
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).
E124.2 WXOR_W
3 EN ENO
MW0 IN1
OUT MW4
MW2 IN2
-Tendríamos un terminal de operador o un SCADA donde pondríamos el valor al MW0. Cuando accionemos
el E124.4, el temporizador se activara con MW10 como valor de preselección (segundos).
-Para lograr esto, primero deberemos de hacer un filtro para que los bits 12 a 15 no afecten a la base de
tiempos del temporizador y después haremos una función paralelo para poner la base de tiempos.
Nota: Si enviamos al PLC el OB121(Detecta errores de programación) aunque sea vacío y hay un error, el
PLC no se ira a STOP aunque indicara con el leed SF que hay un error.
FC10
T2
E124.4 S_EVERZ A124.2
2 S Q
MW0 TW DUAL
R DEZ
- (Segmento 1)Suma de números enteros: ADD_I suma los registros que tenga en IN1 e IN2 y envía el
resultado a OUT. (OUT= IN1+IN2).
- (Segmento 2)Resta de números enteros: SUB_I resta los registros que tenga en IN1 e IN2 y envía el
resultado a OUT. (OUT= IN1-IN2).
- (Segmento 3)Multiplicación de números enteros: MUL_I multiplica los registros que tenga en IN1 e IN2 y
envía el resultado a OUT. (OUT= IN1*IN2).
- (Segmento 4)División de números enteros: DIV_I divide los registros que tenga en IN1 e IN2 y envía el
resultado a OUT. (OUT= IN1/IN2).
-La función MOD, recupera el resto de esa división (solo en dobles palabras).
-En cualquier de estas cuatro operaciones, el resultado ha de estar comprendido dentro de los limites de los
números enteros.
FC11
E124.0 ADD_I
1 EN ENO
MW2 IN2
OV M255.3 A124.0
E124.1 SUB_I
2 EN ENO
MW2 IN2
OV M255.3 A124.1
E124.2 MUL_I
3 EN ENO
MW2 IN2
OV M255.3 A124.2
E124.3 DIV_I
4 EN ENO
MW2 IN2
OV M255.3 A124.3
-La creación de este contador con preselección tiene algunas ventajas respecto al contador normal.
-Con un contador normal (Z1) puedo contar como máximo hasta el valor 999, mientras con este puedo
contar hasta 32767 o si en lugar de trabajar con una palabra (MW0) trabajo con una doble palabra puedo
llegar al valor de 2147483647.
-Su valor es más fácil de leer en un sistema SCADA ya que tendremos el valor directamente en decimal.
-Si le pongo como preselección una variable, esta también podrá ser un número binario y podré poner su
valor directamente en decimal.
-El registro que recibe el incremento puede ser una palabra de un DB (bloque de datos), con lo cual siempre
tendrá memoria.
Funcionamiento:
1º Segmento, cada vez que accionemos el E124.0 incrementara en 1 el valor del MW0
2º Segmento, cada vez que accionemos el E124.1 decrementara en 1 el valor del MW0
3º Segmento, cuando accionemos el E124.2, el valor del MW0 se pone a 0.
4º Segmento, cuando el valor de MW0 sea igual o superior a 10, se activara la salida A124.4
-Una vez probado, cambiar el valor 10 por el registro MW10 y comprobar que el valor que ponga en MW10
será a partir de ese momento la preselección de ese “contador”.
Ejercicios:
-Crear un programa en el que incrementando el valor de un registro sea limitado entre los valores 0 y 10
(después del 10 seguirá el 0)
-Crear un programa en el que incrementando y decrementando el valor de un registro sea limitado entre los
valores 4 y 10. Cargar el OB100 el valor de 4 (para iniciar).
FC12
E124.0 M2.0
ADD_I
1 P ENO
MW0 IN1
OUT MW0
1 IN2
E124.1 M2.1
SUB_I
2 P ENO
MW0 IN1
OUT MW0
1 IN2
E124.2 MOVE
3 EN ENO
0 IN OUT MW0
A124.4
CMP>=I
4
MW0 IN1
10 IN2
-Mediante un generador de impulsos y una operación incremento hemos creado un contador de tiempos.
-El MW0 contara los segundos y el MW2 contara las horas de funcionamiento de un motor (A124.0).
-Si incluimos un comparador, conseguiremos que cuando el motor lleve por ejemplo 5000 horas nos indique
que le debemos hacer un mantenimiento preventivo.
FC13
E124.0 A124.0
1 S
E124.1 A124.0
2 R
MW0 IN1
OUT MW0
1 IN2
E124.2 MOVE
5 EN ENO
0 IN OUT MW0
MOVE
EN ENO
0 IN OUT MW2
M255.5 A124.7
CMP > I
6
MW2 IN1
5000 IN2
En este caso, la salida A124.7 se activara cuando el motor lleve 60 segundos de funcionamiento y no 5000
horas.
- (Segmento 1)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).
- (Segmento 2)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).
- (Segmento 3)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).
- (Segmento 4) 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).
- (Segmento 5)Raíz cuadrada: SQRT realiza la raíz cuadrada de IN y envía el resultado a OUT.
- (Segmento 6)Elevar al cuadrado: SQR eleva al cuadrado el valor que hay en IN y envía el resultado a
OUT.
- (Segmento 7)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.
FC14
E124.0 ADD_R
1 EN ENO
MD0 IN1
OUT MD8
MD4 IN2
E124.1 SUB_R
2 EN ENO
MD0 IN1
OUT MD8
MD4 IN2
E124.2 MUL_R
3 EN ENO
MD0 IN1
OUT MD8
MD4 IN2
E124.3 DIV_R
4 EN ENO
MD0 IN1
OUT MD8
MD4 IN2
E124.4 SQRT
5 EN ENO
E124.5 SQR
6 EN ENO
E124.6 ABS
7 EN ENO
FC1 FC2
L MB20 L MB20
INC 1 DEC 1
T MB20 T MB20
Para crear la plantilla, debemos de rellenar la tabla de declaración de variables y definir estas.
FC15
#T2 #T1
SE
#TIEMPO_OFF
#T1 #T2
SE
#TIEMPO_ON
#T1 #GENERADOR
OB1
FC15
1 EN ENO
GENERA
MW0 TIEMPO_OFF M10.0
DOR
MW2 TIEMPO_ON
T10 T1
T11 T2
FC15
3 EN ENO
GENERA
S5T#2S TIEMPO_OFF M10.1
DOR
S5T#1S TIEMPO_ON
T12 T1
T13 T2
-Queremos hacer una plantilla con la cual podamos calcular el resultado del tanto por ciento de un valor.
Para crear la plantilla, debemos de rellenar la tabla de declaración de variables y definir estas.
FC16
MUL_R DIV_R
1 EN ENO EN ENO
MD4 Valor
E124.2 FC16
2 EN ENO
Tanto por
MD20
Ciento
Resultado MD28
MD24 Valor
L DBW[MD0]
T MW10
Ejercicio 1.
-Queremos que unos datos grabados en 20 palabras del DB1 puedan ser movidas al MW10.
1º Para ello crearemos primero el DB1 con los siguientes valores actuales.
AUF DB 1
L DBW [MD 0]
T MW 10
Ejercicio 2
-Queremos realizar la suma de dos palabras del DB1 y mover el resultado al MW20.
AUF DB 1
L DBW [MD 0]
L DBW [MD 4]
+I
T MW 20
-Tenemos un proceso idéntico para realizar tres tipos de mezclas de dos productos.
-En ese proceso, se hace una mezcla de una cantidad de un material con otra cantidad de otro material
durante un tiempo determinado.
-La única diferencia que existe en el proceso, la cantidad del producto A ( va por tiempo de apertura de una
válvula), la cantidad del producto B y el tiempo de mezclado de los dos productos.
Al accionar un pulsador se abren las dos electro vá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.
Ir a “Ver” “Datos”
Ir a “Edición” “Inicializar bloques de datos” (con esto el valor inicial se copiara en el valor actual).
FC19
E124.0 PEQU
1 JMPN
DB1
2 OPN
PEQU
E124.1 MEDI
3 JMPN
DB2
4 OPN
MEDI
E124.2 GRAN
5 JMPN
DB3
6 OPN
GRAN
E124.0 FC20
7 EN ENO
E124.1
E124.2
FC20
MOVE
1 EN ENO
MOVE
2 EN ENO
MOVE
3 EN ENO
OB1
FC19
1 EN ENO
E124.7 T1
2 SV
MW0
T2
SV
MW2
T3
SV
MW4
T1 A124.0
3
T2 A124.1
4
T3 A124.2
5
PRODUCTO A PRODUCTO B
A124.0 A124.1
A124.2
M SELECCIÓN MEZCLA
E124.1
E124.0
E124.2
MARCHA PROCESO
E124.7
-En este ejercicio, mediante el E124.0 seleccionaremos el número de DB que queremos abrir y al leerse el
FC2 se cargaran los datos de ese DB en MW0, MW2 y MW4.
-Al accionar el E124.7 se pondra en marcha el proceso
Nota: La instrucción AUF en AWL es igual a OPN en KOP.
AUF DB10 (Esto significa “Abre el DB10”)
Si MW210=1 AUF DB 1
Si MW210=2 AUF DB 2
Si MW210=3 AUF DB 3
.................................................
.................................................
Si MW210=’N’ AUF DB ‘N’
FC19
1 IN2
MOVE
CMP==I
2 EN ENO
4 IN2
CMP==I
MW210 IN1
0 IN2
FC 20
EN ENO
4
NOTA: Si tuviéramos el mismo proceso con 20 datos diferentes, crearíamos 20 DBs, pondríamos esos
datos desde el DB1 al DB20 y en el primer comparador del segmento 2 sustituiríamos el valor 4 por el valor
21.
-Razonar que ocurriría si el segmento 3 lo ponemos delante del segmento 2. Cambiarlo y comprobar su
funcionamiento.
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
Los datos del reloj están en BCD, por lo tanto deberé leerlos en hexadecimal:
Ejercicio 1 :
-En este ejercicio, queremos que a las 5 y 15 de la tarde, se ponga en funcionamiento el riego (A124.0) y
que se pare a las 5 y 17 de la tarde.
-Programar después el mismo funcionamiento, pero que solo funcione de lunes a viernes.
DB6
Dirección Nombre Tipo Valor inicial Comentario
0.0 STRUCT
+0.0 Reloj ARRAY[1..8] B#16#0
*2.0 BYTE
=16.0 END_STRUCT
OB1
Dirección Declaración Nombre Tipo Valor Comentario
inicial
0.0 Temp -------------------- -----------------------
1.0 Temp -------------------- -----------------------
2.0 Temp -------------------- -----------------------
----- Temp -------------------- -----------------------
12.0 Temp OB1_DATE_TIME DATE__AND_TIME
MOVE MOVE
1 EN ENO EN ENO
FC21
2 EN ENO
Al realizar este programa en OB1, los datos del reloj estarán en:
DB6.DBB0 (Año)
DB6.DBB1 (Mes)
DB6.DBB2 (Día)
DB6.DBB3 (Hora)
DB6.DBB4 (Minuto)
DB6.DBB5 (Segundos)
DB6.DBB6 (Décimas y Centésimas)
DB6.DBB7 (Milésimas, día de la semana)
FC21
L DB6.DBW3
L W#16#1715
==I
S A124.0
L DB6.DBW3
L W#16#1830
==I
R A124.0
-Ejercicio 2
-Queremos que de lunes a viernes una sirena funcione desde la 1 y 30 de la tarde hasta la 1 y 32
Para poder solucionar el ejercicio, debemos filtrar el día de la semana en una palabra o en un byte para
poder realizar comparaciones con el. (En este caso lo hemos puesto en MW0)
FC22
Ejercicio 3
-Creación de una plantilla para poder realizar la conexión y desconexión de un elemento entre unas horas
determinadas.
-Desde un terminal de operador o un sistema SCADA podremos programar ese reloj (forzando las MW20 y
MW22) para que la salida funcione cuando que nos interese
Para crear la plantilla, debemos de rellenar la tabla de declaración de variables y definir estas.
FC23
Declaración Nombre Tipo Comentario
In HORA_INICIO WORD
In HORA_FINAL WORD
Out SALIDA BOOL
In_out
temp REAL
L DB6.DBW3
L #HORA_INICIO
== I
S #SALIDA
L DB6.DBW3
L #HORA_FINAL
== I
R #SALIDA
OB1
MOVE MOVE
1 EN ENO EN ENO
E124.2 FC23
2 EN ENO
MW20 HORA_INICIO
SALIDA A124.0
MD22 HORA_FINAL
-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.
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 limite (-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.
-En este caso, queremos controlar el valor de temperatura de una sonda que da 0 Voltios a 0ºC y 10 Voltios
a 100ºC y queremos tener en MD100 el valor real de esa temperatura.
FC24
FC105
SCALE
1 EN ENO
RET_
PEW752 IN MW0
VALUE
0.0 LO_LIM
E124.0 BIPOLAR
UNIPOLAR
27648 27648
PEW752 PEW752
13824 13824
0 0
0V 5V 10 V 0ºC 50ºC 100ºC
0º PEW752 100º MD10
SONDA DE TEMPERATURA RESULTADO ESCALADO DE PEW752
BIPOLAR
+27648
Sonda de PLC PEW752
temperatura
0 a 100ºC
0- 10 V
PEW752
PAW12
8
0
0ºC 50ºC 100ºC
MD10
-27648
-La función UNSCALE sirve para desescalar el valor (máximo y mínimo) de una 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 10 V
Si vale 1, daremos valores de salida entre –27648 y +27648) .Salida analógica de
–10V a +10 V
OUT Valor de salida escalado . Formato INT 16 bits.
ENO Vale 0 si el valor de IN es superior al limite 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.
-En este caso, queremos controlar la velocidad de un motor mediante un convertidor de frecuencia.
El variador tiene una consigna de 0- 10 Voltios.
Con 0 voltios, el motor ira a 0 rpm y con 10 voltios, ira a 1500 rpm
Iremos dando un valor a MD100 entre 0 y 1500, ese valor se convertirá en un valor en la salida analógica
entre 0 y 27648, que a su vez hará que la salida analógica de una señal entre 0 y 10 Voltios..
FC25
FC 106
UNSCALE
1 EN ENO
0.0 LO_LIM
E124.0 BIPOLAR
Ejercicio 1 : Añadir a este ejercicio las líneas del ejercicio E2 colocando en los IN de la función mover:
0.0, 300.0, 600.0, 900.0, 1200.0 y 1500.0 y en todos los OUT colocar MD10.
El colocar .0 se añade para decirle que ese valor es un número real.
-Queremos tener una alarma de mínimo y una de máximo de una temperatura. La temperatura la lee la
entrada analógica PEW752.
-Debe de activarse la alarma de máxima cuando el valor de la temperatura supere los 90ºC
-Debe de activarse la alarma de mínima cuando el valor de la temperatura este por debajo de 40ºC.
-El E124.0 es el pulsador de enterado. Al accionarlo se borra la alarma de mínimo y de máximo
-Las alarmas de mínimo o máximo, no volverán a activarse hasta que su valor no suba (mínima) o
baje(máxima) del valor de la consigna y se den de nuevo las condiciones de activación de las alarmas.
-Para poder colocar las consignas de máxima y mínima, debo hacer una regla de tres y así deduzco que:
Tendré 90ºC cuando el valor en PEW752 sea de 24883.
Tendré 40ºC cuando el valor en PEW752 sea de 11059.
FC26
M1.0 A124.0
CMP>I
1 P S
PEW752 IN1
24883 IN2
M1.1 A124.1
CMP<I
2 P S
PEW752 IN1
11059 IN2
E124.0 A124.0
3 R
A124.1
R
-Queremos tener una alarma de mínimo y una de máximo de una temperatura. La temperatura la lee la
entrada analógica PEW752.
-Debe de activarse la alarma de máxima cuando el valor de la temperatura supere los 90ºC.
-Debe de activarse la alarma de mínima cuando el valor de la temperatura este por debajo de 40ºC.
-El E124.0 es el pulsador de enterado. Al accionarlo se borra la alarma de mínimo y de máximo -Las
alarmas de mínimo o máximo, no volverán a activarse hasta que su valor no suba (mínima) o baje(máxima)
del valor de la consigna y se den de nuevo las condiciones de activación de las alarmas.
-En este caso, utilizando la función SCALE, ya tengo en MD10 en formato REAL el valor de la temperatura
que lee el PEW752, con lo cual puedo realizar la comparación de forma directa.
-Si en lugar de poner las constantes 90.0 y 40.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).
FC27
SCALE
1 EN ENO
0.0 LO_LIM
E0.0 BIPOLAR
M2.0 A124.0
CMP>R
2 P S
MD10 IN1
MD20 IN2
M2.1 A124.1
CMP<R
3 P S
MD10 IN1
MD30 IN2
NOTA: Cuando pongamos una constante en formato REAL, aunque la constante no tenga decimales como
en nuestro caso, tenemos que poner 40.0 si solo ponemos 40 el entiende que es un número entero y no
tiene cabida en una función de números reales.
E124.0 A124.0
4 R
A124.1
Editar el DB10:
-Queremos tener un bloque de datos de 12 palabras en formato INT (números enteros).
-Queremos que el valor que tenga la primera palabra de datos sea 10
DB10
Dirección Nombre Tipo Valor inicial Comentario
0.0 STRUCT
+0.0 Temperatura ARRAY[1..12]
*2.0 INT
=24.0 END_STRUCT
Ir a Ver Datos
Ir a Edición Inicializar bloques de datos poner valor 10 en valor actual de la palabra 0.0 Salvar
-Funcionamiento:
-Cuando en la entrada EN tenga un 1, se grabara un dato en la tabla (si no pusiéramos flanco, en este caso
en 10 scanes quedaría la tabla llena).
-Cuando el primer y el segundo registro de la tabla sean iguales (la tabla estará llena), ya no se grabara
ningún registro más.
-Cada vez que accione el E124.0, el valor que tenga en ese momento la entrada analógica PEW752 ira al
primer registro libre de la tabla.
-Cuando la tabla este llena (DBW0 será igual a DBW2), funcionara de forma intermitente la salida A125.0
FC28
E124.0 M0.0 ATT
1 P EN ENO
PEW752 DATA
DB10.DBW0 TABLE
M255.4 A125.0
CMP==I
2
DB10.DBW0 IN1
DB10..DBW2 IN2
-Funcionamiento:
PEW752 DATA
DB10.DBW0 TABLE
M255.4 A125.0
CMP==I
2
DB10.DBW0 IN1
DB10..DBW2 IN2
-En este ejercicio, podemos comprobar que cuando la tabla esta llena de datos, sobrescribimos de nuevo la
tabla.
-Con esto conseguiríamos tener siempre grabados los diez últimos datos.
FC30
E124.0 M0.0 ATT
1 P EN ENO
PEW752 DATA
DB10.DBW0 TABLE
MOVE
CMP==I
2 EN ENO
DB10.DBW0 IN1
0 IN OUT DB10.DBW2
DB10..DBW2 IN2
E17.4. GRABACIÓN DE UNA TABLA DE DATOS (III). BORRADO DE DATOS. FUNCION FILL.
-En este ejercicio, podemos comprobar como borramos todos los datos de una tabla.
- (Segmento 2 y 3)Al accionar el pulsador E124.1, cargamos el valor 0 en DBW2 y durante 10 scanes
escribimos el valor 0 en todos los registros de la tabla. (DBW2 quedara con valor 10).
- (Segmento 4) Al soltar el pulsador E124.1 pondremos a DBW2 al valor 0, con lo cual la tabla quedara
preparada para poder grabar nuevos datos.
PEW752 DATA
DB10.DBW0 TABLE
0 IN OUT DB10.DBW2
E124.1 ATT
3 EN ENO
W#16#0000 DATA
DB10.DBW0 TABLE
0 IN OUT DB10.DBW2
-Queremos guardar el valor de una entrada analógica y al mismo tiempo que nos quede registrado de forma
paralela a que hora y minuto se ha grabado ese dato.
-Para ello primero utilizaremos el DB6 (tenemos en el los datos del reloj) el DB10 ya usado anteriormente y
además debemos crear un DB11 donde grabar los datos del reloj.
DB11
=22.0 END_STRUCT
En el primer registro de la tabla, debemos indicar el número de registros que queremos grabar. En nuestro
caso son 10 por lo tanto como el formato del registro esta en hexadecimal deberemos colocar W#16#A.
Ir a “Ver” “Datos”.
-Para salvar la hora y minuto deberemos trabajar con DBW3 (DBB3 es la hora y DBB4 son los minutos)
-En nuestro caso para ser mas operativos y poder ver antes los resultados usaremos DBW4 (DBB4 son los
minutos y DBB5 son los segundos)
FC32
E124.0 M0.0 ATT
1 P EN ENO
PEW752 DATA
DB10.DBW0 TABLE
ATT
EN ENO
DB6.DBW4 DATA
DB11.DBW0 TABLE
M255.4 A125.0
CMP==I
2
DB10.DBW0 IN1
DB10..DBW2 IN2
Se trata de extraer las botellas defectuosas de un proceso de colocación de etiquetas, por motivos de
contrucción no es posible colocar el dispositivo extractor y la derivació de la cinta transportadora en el lugar
de la detección de la etiqueta, es por ello que se deberà registrar la botella defectuosa y después de haber
contabilizado la segunda botella después de la detectada como defectuosa, realizar la extracción de la
misma mediante la actuación de un cilindro.
ENTRADAS. SALIDAS.
Dispositivo para
colocar etiqueta
a las botellas
Detector_Etiqueta Detector_Botella
[E124.2] [E124.3]
E124.4 E124.5
Botellas defectuosas
Botellas correctas
Primera forma:
1º Ir al Administrador Hardware (Picar dos veces sobre el) Picar dos veces sobre CPU
Seleccionar la pestaña “Alarmas horarias” En periodicidad seleccionar cada cuanto tiempo queremos
que actúe (1 minuto) En fecha y hora poner a partir de que momento queremos que empiece ( fecha
23.10.02, hora 12:54) Compilar y transferir el Hardware a la CPU.
ADD_I
1 EN ENO
1 IN2
Probar el ejercicio transfiriendo el OB10 y en la tabla de estado visualizar el valor de MW10 en decimal.
Segunda forma:
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 empezar”
(definirla en el OB1 con formato de DATE_AND_TIME)
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
cual va a ser su peridiocidad (PERIOD) y donde va el código de error (RET_VAL)
PERIOD W#16#0000 = una vez
W#16#0201 = cada minuto
W#16#0401 = cada hora
W#16#1001 = diaria
W#16#1201 = semanal
W#16#1401 = mensual
W#16#1801 = anual
W#16#2001 = al final del mes
3º Mediante la función SFC30 (ACT_TINT) de Librerías de Standard Library de System Function Blocks,
activamos o desactivamos la ejecución del OB10.
OB1
D_TOD_DT
EN ENO
TOD#15:23:45.0 IN2
SET_TINT
EN ENO
W#16#201 PERIOD
E124.0 ACT_TINT
EN ENO
ADD_I
EN ENO
1 IN2
OB1
E124.0 M20.0 SRT_D_INT
P EN ENO
T#2S DTIME
W#16#1 SIGN
E124.1 A124.0
R
OB20
SET
= A124.0
• El OB35, permite interrumpir la ejecución del OB1 a intervalos fijos y ser ejecutado.
• El intervalo de tiempo es respecto al momento que la CPU se pone en RUN.
• Hay que asegurarse que el tiempo de ejecución del programa del OB35 es menor que el tiempo de
intervalo programado como repetición de la ejecución del OB35.
1º Ir al Administrador Hardware (Picar dos veces sobre el) Picar dos veces sobre CPU
Seleccionar la pestaña “Alarmas cíclicas” En periodicidad seleccionar cada cuanto tiempo queremos
que actúe (1 a 60000 ms), poner 125 ms Compilar y transferir el Hardware a la CPU.
OB35
ADD_I
EN ENO
1 IN2
CMP==I MOVE
EN ENO
MW10 IN1
0 IN OUT MW10
256 IN2
Comprobar que con los bits 0 al 7 de MW10, hemos creado generadores de impulsos (MB11).
-El sistema operativo de la CPU llama al OB 121 cuando aparece un error durante la ejecución del
programa.
-Cuando se produzca un error si en el autómata no esta programado el OB121, el PLC se pone en STOP y
se ilumina el led SF
-Cuando se produzca un error si en el autómata esta programado el OB121, el PLC sigue en RUN y se
ilumina el led SF.
Ejemplos: -Dentro del programa se llama a un bloque que no fue cargado en la CPU
-Se numera una entrada o una salida que no existe.
-Se numera un temporizador o contador inexistente.
-Error en llamada a DB o DB inexistente.
-Llamada a un FC no cargado.
OB121
MOVE
EN ENO
MOVE
EN ENO
MOVE
EN ENO
MOVE
EN ENO
OB121_SW_FLT
B#16#29 Acceso de escritura a un registro con un puntero cuyo dirección binaria es diferente a 0
B#16#24 Error en área de lectura
B#16#25 Error en área de escritura
B#16#26 Error en dirección de temporizador
B#16#27 Error en dirección de contador
B#16#30 Acceso a un DB global protegido contra escritura
B#16#31 Acceso a un DB de instancia protegido contra escritura
B#16#32 Error de número de DB en el acceso a un DB global
B#16#33 Error de número de DB en el acceso a un DB de instancia
B#16#34 Error de número de FC en la llamada a FC
B#16#3A Acceso a un DB no cargado, el número de DB esta dentro del área admisible
B#16#3C Acceso a un FC no cargado, el número de FC esta dentro del área admisible
B#16#3D Acceso a un SFC no cargado, el número de SFC esta dentro del área admisible
B#16#3E Acceso a un FB no cargado, el número de FB esta dentro del área admisible
B#16#3F Acceso a un SFB no cargado, el número de SFB esta dentro del área admisible
OB121_FLT_REG
En la mayoría de los casos indica el número de registro afectado (decimal).
OB121_BLK_TYPE
Tipo de bloque en el que ha aparecido el error (en S7–300 no se consigna aquí un valor vigente):
B#16#88: OB
B#16#8A: DB
B#16#8C: FC
B#16#8E: FB
OB121_BLK_NUM (decimal)
Número del bloque donde ha aparecido el error
NOTA:-Transferir todos los módulos a excepción del FC34, e ir localizando los errores de
programación realizados.
OB1
E124.0 MOVE
EN ENO
DB2
E124.1 FB 80
EN ENO
E124.2 FC 34
EN ENO
E124.3 FC 100
EN ENO
FC34
E124.5 T1230
SA
T12 A124.1
FC100
E124.7 A1240.6
E124.6 A124.7
DB1
Dirección Nombre Tipo Valor inicial Comentario
0.0 STRUCT
0.0 Primer_valor WORD W#16#0
2.0 Segundo_valor WORD W#16#0
4.0 Tercer_valor WORD W#16#0
=6.0 END_STRUCT
DB2
Dirección Nombre Tipo Valor inicial Comentario
0.0 STRUCT
0.0 Valor_tiempo_1 WORD W#16#0
2.0 Valor_tiempo_2 WORD W#16#0
4.0 Valor_tiempo_3 WORD W#16#0
=6.0 END_STRUCT
1º Seleccionar “Sistema
de destino”
2º Clicar sobre
”Información del
módulo”
3º Clicar sobre
búfer de
diagnóstico
4º En esta casilla
me saldrá
información sobre
el error
-Activar la entrada E124.3 y comprobar en la tabla de variables los valores que me darán los datos del error
ocurrido.
Infracción del
área al escribir.
Número erróneo
Error ocurrido
Clicar y se abrirá el
bloque y el segmento
donde esta el error
-Activar la entrada E124.0 y comprobar en la tabla de variables los valores que me darán los datos del error
ocurrido.
Infracción del
área al leer.
Núumero erróneo
Error ocurrido
-Activar la entrada E124.1 y comprobar en la tabla de variables los valores que me darán los datos del error
ocurrido.
Acceso a un DB
no cargado
Número del DB
Error ocurrido
-Activar la entrada E124.2 y comprobar en la tabla de variables los valores que me darán los datos del error
ocurrido.
Acceso a un FC
no cargado.
Número FC
Error ocurrido
-Transferir el FC34 al PLC y activar de nuevo la entrada E124.2 y comprobar en la tabla de variables los
valores que me darán los datos del error ocurrido.
Error en dirección
de un temporizador
Número erróneo.
Error ocurrido