Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tiaportal 150129112402 Conversion Gate01 PDF
Tiaportal 150129112402 Conversion Gate01 PDF
STEP7
Automatización Industrial
Índice
TEMA – Principios de Programación en STEP7
1. – Programas en la CPU
2. – Edición de Programas
2.1 – IEC 1131-3
2.2 – Instrucciones/Operandos/Módulos
3. – Estructura de Programas
4. – Tipos de Módulos
4.1 – Módulos de Sistema
4.2 – Módulos de Usuario
5. – Tipos de Procesamiento
6. – Tiempos de Ciclo y Respuesta
7. – Proyectos STEP7
Programas en la CPU
• En una CPU corren dos programas
• Sistema operativo: Está contenido en cada CPU y organiza todas las funciones y
procesos de la CPU no relacionados con una tarea de control específica.
Entre sus funciones están:
• gestionar el arranque normal y completo del PLC/API
• actualizar la imagen del proceso de entradas y salidas
• llamar al programa de usuario
• detectar alarmas y llamar a los programas de atención a las mismas
• reconocer y tratar los errores
• administrar las áreas de memoria
• comunicar con unidades de programación y otros sistemas de supervisión
• Programa de usuario: Hay que crearlo y cargarlo la CPU. Contiene todas las funciones
necesarias para la tarea de control de una aplicación específica.
Entre las tareas del programa de usuario están:
• definir las condiciones de arranque (completo ó normal) de la CPU
• tratar datos del proceso (funciones combinatorias, valores analógicos, ....)
• reaccionar a alarmas
• tratamiento de perturbaciones en el funcionamiento normal del programa
Edición de un Programa
Programa
conjunto de todas las instrucciones y convenciones para el tratamiento de las
señales, por medio de las cuales se actúa sobre la instalación a controlar
(proceso), de acuerdo con unas órdenes de control
Estructura Representación
•Técnica modular • FBD / FUP
•Segmentos • LAD / KOP
•Comentarios • STL / AWL
Instrucción
Instrucción
unidad más pequeña autónoma del programa y constituye una orden de
trabajo para el procesador
Operación
Instrucción Operando
002: A I 1.0
Parámetro
Parte operacional Operando Identificador del operando
Dirección relativa de la instrucción en el
Identificación Parámetro módulo respectivo
Operandos
S1
I 0.0 &
A I 0.0 I 0.0 I 0.1 Q 4.5
S2
AN I 0.1 Q 4.5
= Q 4.5
I 0.1 =
H1
Receta A FC1
FB1
Receta B
OB1 OB1 OB1 FC2
Mezclador FB2
Descarga
FC3
OB1
1ª instrucción
2ª instrucción
..
..
..
.
última instrucción
Programación Lineal
Programación Dividida
FC >=1
OB1 &
=
Ingrediente_A
(CALL)
Ingrediente_B &
(CALL)
>=1
FC =
Mezclador
(CALL)
>=1
Descarga
(CALL) FC &
=
>=1
FC =
Ejecución de un Programa Dividido
Procesamiento
del programa
Procesamiento
Instrucción que llaman del programa
otros módulos
Fin de módulo
FC FB
OB1
Sistema Operativo
FB FC
SFC
SFB
Otros
OBs
Programación Estructurada II
OB1 Motor
>=1
&
=
Descarga
>=1
&
=
&
=
=
Estructura del Programa
Procesar
módulo 7
Lamar al Llamar al
...
..
módulo 32 módulo X
..
Procesar
. Retornar
Módulo 10
Retornar
Retornar
módulo 10
Retornar
Retornar
Inicio
del OB 1 FB 10
ciclo
Tren CINTA A
CALL FB 10 CALL FC 50
Sistema operativo
FC 50
DB inst. 10 Acciona-
miento
FB 20
CINTA B
CALL FB 20
CALL FC 50
DB inst. 2
Tipos de Módulos de Programa
Ciclo
Tiempo OB
FB FC SFB
Módulo de
Proceso Organización
Error FB FB SFC
Módulos de Usuario
Tipo de Módulo Características
Organización (OB) - Interfase de usuario entre el sistema operativo y el programa
- Prioridades establecidas de (1a 29)
- Información especial de inicio en la pila de datos locales
- Definen la estructura del programa de usuario
Módulos de
Funciones - Integrados en el sistema operativo de la CPU
del Sistema - Un usuario puede llamar esta función
(SFB) (con memoria).
Alarmas de Proceso OB 40 a OB 47 de 16 a 23
Alarma de OB 60 25
multiprocesamiento
Error de redundancia OB 70 y OB 72 25 y 28
Errores asíncronos OB 80 a OB 87 26
Ciclo no prioritario OB 90 29
Arranque OB 100 a OB 102 27
Errores síncronos OB 121y OB 122 la del OB del error
Ejecución Cíclica I
Conectar
Programa
Ciclo
principal
Ejecución Cíclica II
Programa
Ciclo principal
Interrup- Programa
Alarma de alarma
ción
Interrup- Tratamiento
Error ción de errores
Profundidad de anidamiento
Inicio
del
ciclo
OB 1 FB 1 FC 1
Sistema operativo
DB inst. 1
FB 2 FB 1 SFC 1
DB inst. 2 DB inst. 1
DB 1
FC 1
Llamadas a los Módulos
Ejecución
del programa
Ejecución
Instrucción que llama a
del programa
otro módulo
Fin de módulo
Tiempo de Ciclo II
• La figura muestra la función del tiempo de vigilancia del ciclo en la
ejecución del programa en las CPUs
Funciones – FC´s
• Son módulos programables. Con parámetros absolutos o fromales
• Un FB contiene:
• un programa que se ejecuta cada vez que se le llama desde otro módulo
• facilitan la programación de funciones complejas de uso frecuente
FBs y DBs de Instancia
• A cada llamada de un FB que transfiere parámetros está asignado un DB
de instancia
FC 10 DB
Acceso desde
global
todos los bloques
(DB 20)
FC 11
SFBs:
• Es un FB integrado en la CPU
• Forman parte del S.O.
• No se cargan como parte integrante del programa
• Al igual que los FBs, son módulos “con memoria”
• Hay que crear los DBs de instancia y cargarlos en la CPU como parte
intrgrante del programa.
• Las CPUs ofrecen SFBs:
• para la comunicación vía enlaces configurados
• para las funciones especiales
SFCs:
• Es una función programada integrada en la CPU
• Las SFC se pueden llamar desde el programa de usuario
• Forman parte del S.O.
• No se cargan como parte integrante del programa
• Al igual que las FCs, las SFCs son módulos “sin memoria”
• Las CPUs ofrecen SFCs para un conjunto muy amplio de aplicaciones
Byte de datos 0
FBD/FUP DB45
FB7 Llamada al FB7 (a través del
EN ENO módulo de datos de instancia
DB45) y asignación de parámetros.
I 1.0 Start ejecutar M2.1
I 1.1 Stop
Dirección actual MW20 Longitud
de los datos FB parámetro formal
Sección de declaración
y
Sección de programa
o
Datos
Interfase
Descripción breve
Ejemplo de Programación Estructurada
LT LT LT a b
Botón de la selección
del tanque LT
0 0 0 0
LT A
Ingrediente
Ingrediente B
= Q 4.0
cíclico) .
Eventos (tiempo de interrupción, interrupción de .
proceso, etc.) .
.
Llamada a otros módulos OBs, FBs, FCs, etc.
Q4.3
PII PIQ
Byte 0 Programa Byte 0
Byte 1 de usuario Byte 1
Byte 2 1 Byte 2
A( .
.
.
O I 2.0 . 1
. O Q 4.3 .
. ) .
AN I 2.7
AN I 0.5
AN I 0.3
= Q 4.4
Tiempo de Ciclo
Definición: El tiempo de ciclo es el tiempo que transcurre durante un
ciclo de programa. Está constituido por:
Programa de usuario
PII S.O. A I 1.0 PIQ PII
= Q 4.0
Tiempo de Respuesta
El tiempo de respuesta es el tiempo que transcurre entre el reconocimiento de una señal
de entrada y el cambio de estado de la señal de la salida correspondiente. Depende de:
• Tiempo de ciclo
• Retardo en las entradas y salidas
• Tiempos de rotación adicionales en la red Profibus
Tiempo de reacción
Retardo de
los módulos
de entrada
1
I 1.0 0
1
Q 4.0 0
tiempo
Módulos de STEP7
Seleccionar un Módulo para la Edición
• La herramienta Programar Módulo S7 (KOP, AWL) se puede utilizar para editar
módulos off-line (almacenados en el dispositivo de programación) o bien on-line
(módulos que están en la CPU).
Hay que indicar la opción deseada y seleccionar el módulo.
Partes de un Módulo
Tabla de
Declaración
de Variables
Sección de
Código
Word Bits S7
8 7 6 5 4 3 2 1 0
BR CC0 CC1 OV OS OR STA RLO /FC
1. Al iniciar el primer chequeo el bit /FC es cero por lo que una instrucción Y lógica reflejará el bit de
estado (STA) hacia el Resultado de Operación lógica (RLO) . En este caso, la dirección de E 1.0 es 1 por lo que el
STA es 1 y el resultado de la lógica (RLO) será 1. Es decir, en la primera operación lee el STA de la primera
instrucción y lo copia en el RLO de la primera instrucción.
2. En la segunda línea el bit /FC es ahora 1 que indica que esta línea tiene que usar el RLO de la anterior dirección
I1.0 con el STA de la actual direccion I1.1. Como STA = 1 en I1.1, el RLO de la linea procesada es 1 . Es decir, lee el
RLO de I1.0 (instrucción anterior) y el STA de I1.1 (instrucción actual) y realiza una AND logica, que es lo que dice
la instrucción (si fuese O haria OR logica), y el resultado lo copia al RLO de I1.1 (instrucción actual).
3. Lo mismo ocurre en la segunda línea, pero esta vez de 1 hace que el actual RLO = 0. Es decir, AND entre RLO de
I1.1 y STA de M0.0, almacenandolo en STA de M0.0)
4. La cuarta es la instrucción de asignación que toma el RLO y lo escribe en la direccion/es correspondientes (en
las otras instrucciones las lee –- marcas, entradas --, en asignaciones, set y reset las escribe). En este caso final
RLO = 0 por lo que la salida será OFF. (Si M0.0 fuese 1, entonces la operación se evaluará como TRUE haciendo el
RLO = 1 activando la salida Q1.0).
Operaciones de Y lógica.
Esto lo vas a pillar enseguida verás. Imagina que tienes dos entradas que cuando están las dos a true (1),
tenemos que activar una salida. La logica sería así:
U E 0.0
U E 0.1
= A 1.0
Es decir, iniciamos el segmento leyendo lo que hay en el E0.0 y le hacemos un AND con el E0.1 y su
resultado se lo asignamos a la salida A1.0.
O de otra forma, cargamos el E0.0 en el RLO y luego hacemos un AND de la E0.1 con el RLO y se lo
asignamos a la A1.0
Operación O lógica
En buena lógica (nunca mejor dicho), podrías pensar que la forma correcta de hacer un OR sería:
U E0.0
O E0.1
= A1.0
O E0.0
O E0.1
= A1.0
¿Por qué?
Lógicamente hacen lo mismo. Pero me gusta más hacerlo así porque de hecho, cuando traduces un OR de
KOP a AWL así lo representa. Mejor que escribamos todos de la misma manera ¿no?
Como en el caso anterior leería el estado del E0.0 y lo volcaría en el RLO (imaginemos un cero).
Luego un:
O E0.1
Y aquí haría un OR con el RLO. Imaginemos que el E0.1 estuviera a uno. El resultado del OR sería un
bonito uno.
= A1.0
E igualamos el uno a la salida A1.0. ¿Sencilo no? Vayamos ahora con los paréntesis.
Como puedes imaginar, en cuanto queramos realizar combinaciones un poco más elaboradas
necesitaremos paréntesis para poder realizar estas lógicas.
U( ..) //UN(..) que valdrá para realizar un (N)AND con el contenido interior al paréntesis
O(..) // ON(..) que valdrá para realizar un (N)OR con el contenido interior del paréntesis.
X(..) // XN(..) que valdrá para realizar una (N)XOR con el contenido interior del paréntesis
En definitiva en lo que se basa es en realizar la combinatoria interior del paréntesis y luego ejecutar la
operación asociada al paréntesis.
Los paréntesis pueden anidarse metiendo paréntesis dentro de otros paréntesis. Así, odríamos hacer algo
similar a lo anteriores ejemplos:
U(
U E0.0
O E0.1
O(
U E0.2
U E0.3
= A1.0
En este caso primero resolvería la combinatoia interior de los paréntesis por separado y luego realizaría el
OR entre el resultado de los paréntesis.
Hay que añadir que el caso del OR es un poco especial ya que si dentro del paréntesis del OR la
combinatoria es de AND exclusivamente, el paréntesis se podría haber obviado quedando esa parte así:
U E0.2
U E0.3
Igualación (=)
Set (S)
Reset (R)
Con esos operandos, se cierra la consulta actual y se abre una nueva (además del inicio del programa)
Da igual por tanto lo siguiente que hagas (U,O, UN…) porque lo que se hará es una lectura del operando
en el RLO. Es decir, si la siguiente a una igualación es
= A1.0
UN E1.0
U E1.1
= A1.2
Lo que hará es leer el estado de la E1.0, le cambiará el signo y lo cargará en el RLO. No hará un NAND
con nadie. Simplemente realizará la carga en el RLO.
Ya hemos visto la logica binaria, pero ahora vamos a emplearlo a temporizadores y contadores. ¿¿Os
habeis preguntado porque cuando cargamos un temporizador SE sigue contando?? La primera idea es
que se siga CUMPLIENDO LA CONDICION….Pues la respuesta es que mientras el RLO no cambie
sigue contando.
Un SET no es mas que fijar a uno una variable booleana. Como la has fijado, esta variable seguirá a uno
aun cuando las condiciones de ponerla a uno desaparezcan.
Se diferencia de una igualación (asignacion) en que en esta, el resultado final es dependiente en todo
momento de las condiciones para estar a uno o a cero. Mientras que todas las condiciones se cumplan la
variable estara a uno. Cuando una o varias de las condiciones no se cumpla, la señal cae, sera false, 0.
Aquí no. Una vez dadas las condiciones la señal estará a uno indefinidamente… o hasta que se le haga un
RESET. Y es que el RESET lo que hace es fijar a cero la variable. Como en el caso anterior, aunque las
condiciones de reset desaparezcan, la señal seguirá a cero y no recobrará su estado de uno hasta un nuevo
SET.
Pues lo primero que habría que darte un capón por hacer un programa en el que el set y reset se de
simultáneamente.
Como bien sabes, si ambas condiciones se dan simultáneamente y seguidas una de otra, la que sobrevivirá
del envite será la segunda.
¿Qué pasa si mezco Set, Reset e igualaciones?
Espero que esto no se te haya pasado siquiera por la cabeza… cárcel directamente. Punto. Y sin galletas
en el desayuno hasta nuevo aviso.
O E0.0
O E0.1
S A 1.0
U E0.2
U E0.3
R A1.0
¿Chupado no?
Como bien imaginarás, la señal A1.0 se pondrá a uno, cuando el OR formado por la E0.0 y E0.1 de como
resultado un uno poniendo el RLO a uno.
Igualmente, la A1.0 se podrá a cero, cuando el AND de la E0.2 y E0.3 se ponga a uno poniendo el RLO
también a uno haciendo por tanto el reset.
En definitiva, el Set y el Reset se ejecutarán forzando la marca o salida en una dirección u otra, cuando el
RLO esté a uno y pasando olímpicamente del Set o Reset cuando el RLO esté a cero.
¿Fácil no?
Unas instrucciones muy interesantes son las de forzar el RLO, es decir, cargar en el RLO un cero o un
uno de forma incondicional hasta que haya una nueva operación de combinatoria booleana:
Por ejemplo:
U E0.1
U E0.2
SET
= A1.0
¿Cuánto valdrá A1.0?
Pues efectivamente, la salida A1.0 estará forzada a uno ya que da igual lo que pase con la combinación de
las dos entradas ya que luego se fuerza el RLO a uno y se iguala su valor a la A1.0
Flancos en AWL
Positivo (FP)
Negativo (FN)
Los pulsos como bien sabes son instrucciones que ponen el RLO a uno cuando se cumple el escalon de
subida de cero a uno (el positivo) o que el RLO previo pase de uno a cero (el negativo).
Necesitan una marca auxiliar que es la que almacena la información de cómo estaba el RLO en el ciclo
anterior.
U E0.0
FP M1.0
= A1.0
Lo que hará este mini ejemplo será: Mientras que la marca E0.0 esté a cero, la el RLO tras el pulso estará
a cero. Cuando la entrada pase a uno, entonces en ese ciclo de scan el pulso pondrá el RLO a 1 haciendo
que la salida A1.0 se active en ese ciclo de scan. En el ciclo siguiente aún estando la entrada a uno, la
salida volverá a cero ya que el RLO a la salida del pulso estará a cero.
U E0.0
FN M1.0
= A1.0
El comportamiento sería igual salvo que esta vez, el RLO después del FN se pondrá a uno cuando la señal
de la E0.0 pase de estar a uno a estar a cero. Análogamente al caso anterior sólo estará a uno en ese ciclo
de scan, volviendo a cero en los sucesivos con independencia de que la salida siga a cero en este caso.
Operaciones con Bits de Estado
Automatización Industrial
Índice
TEMA – Operaciones con Bits de Estado
1. – Descripción de los Bits de Estado
2. – Modificación de los Bits de Condición
3. – Evaluación de Bits de la Palabra de Estado
4. – Operaciones sobre el RLO
Bits de Estado – Palabra de Estado
Definición
• Los Bits de Estado son bits indicadores de operación (flags)
• Son utilizados por la CPU para controlar las operaciones binarias y las actualiza durante el
procesamiento digital.
• La palabra de estado contiene bits a los que se puede acceder con el operando de
operaciones lógicas con bits y con palabras.
Dependiendo de la CPU, los bits /FC, STA y OR no se copian en el ACU1, se ponen a “0”
Ejemplos
Ejemplo 1:
SET ;
S M 8.0; // Pone a 1 marca
R M 8.1; // Pone a 0 marca
CLR ;
S C 1; // Pone a 0 el
// flanco del set del contador
Ejemplo 2:
SET ;
SAVE; // Pone BR a 1
...
AN OV;
SAVE; // Pone BR a 0 con overflow
...
Tipos de datos en S7
Formato de variables numéricas “matematizables” (con operaciones de cálculo)
INT (número entero) 16 Número entero con signo -32768 hasta 150
Identificador: I
W 32767
Formatos de tiempo
S5TIME 16 Tiempo S7 en S5T#0H_0M_0S_10MS
pasos de hasta S5T#0H_1M_0S_0MS
(tiempo SIMATIC) 10 ms (valor estándar)
W S5T#2H_46M_30S_0MS S5TIME#0H_1H_1M_0S_0MS
www.campusabierto.es ©Adolfo Molina
Tipos de datos en S7
Número hexadecimal
DW#16#0000_0000 hasta DW#16#00A2_1234
DW#16#FFFF_FFFF
www.campusabierto.es ©Adolfo Molina
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Introducción a los Tipos de Datos en STEP 7
Tipos de datos • Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)
elementales
• Tipos de Datos Matemáticos (INT, DINT, REAL)
(hasta 32 bits)
• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)
• Tiempo (DATE_AND_TIME)
Tipos de datos
complejos • Array (ARRAY)
(mayores de 32 bits)
• Estructura (STRUCT)
• Cadena de Caracteres (STRING)
PLC’s
Página 2
Curso 2009/10
TIPOS DE DATOS DE BIT – TAMAÑO
– Byte (8 bits) _ _ _ B
Zona de
memoria: E Tam BBB.b
Número de byte
• E -> Entradas y bit (0-7), en su
• A -> Salidas caso
• T -> Temporizadores
• Z -> Contadores Tamaño del Dato que
• M -> Marcas vamos a usar (bit por
• DB -> Módulos de datos omisión): B, W, D
• P -> Acceso directo (PA, PE)
PLC’s
Página 4
Curso 2009/10
DIRECCIONAMIENTO 2/3
124 124
125
125
125
125
PLC’s
Página 5
Curso 2009/10
DIRECCIONAMIENTO 3/3
• Tipos de datos:
– Entero (en cualquiera de los sistemas numéricos anteriores)
– Real (coma flotante) Ver ayuda
Admin. Simatic
– Carácter Tipos de datos simples
– Tiempo: cantidad de tiempo, hora, S5T, fecha
– Puntero
PLC’s
Página 7
Curso 2009/10
Tipos de Datos Elementales en STEP 7
Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo
BOOL 1 1ó0
BYTE 8 B#16#A9 o B169
WORD 16 W#16#12AE o W4782
DWORD 32 DW#16#ADAC o DW44460
CHAR 8 'w'
S5TIME 16 S5T#5s_200ms
INT 16 123
DINT 32 65539
REAL 32 1.2 o 34.5E-12
TIME 32 T#2D_1H_3M_45S_12MS
DATE 16 D#1993-01-20
TIME_OF_DAY 32 TOD#12:23:45.12
PLC’s
Página 8
Curso 2009/10
Números en COMA FLOTANTE (1/2)
31 30 23 22 21 ………... 2 1 0
...
PLC’s
Página 9
Curso 2009/10
Números en COMA FLOTANTE (2/2)
• Ejemplo:
1#10000000#11000000000000000000000
PLC’s
Página 10
Curso 2009/10
ACUMULADORES (1/2)
PLC’s
Página 12
Curso 2009/10
CARGA Y TRANSFERENCIA 1/7
• Ejemplos:
– LC Z0 --> Carga el contenido del contador en el acumulador en BCD.
PLC’s
Página 14
Curso 2009/10
CARGA Y TRANSFERENCIA 3/7
• Ejemplos:
PLC’s
Página 15
Curso 2009/10
CARGA Y TRANSFERENCIA 4/7
PLC’s
Página 16
Curso 2009/10
CARGA Y TRANSFERENCIA 5/7
MB32 MB33
T MB32 MB32
PLC’s
Página 17
Curso 2009/10
CARGA Y TRANSFERENCIA 6/7
PLC’s
Página 18
Curso 2009/10
CARGA Y TRANSFERENCIA 7/7
PLC’s
Página 19
Curso 2009/10
EJERCICIO (Entregable 4)
PLC’s
Página 20
Curso 2009/10
Módulos de Datos
y
Tipos de datos
Automatización Industrial
Índice
TEMA – Módulos de Datos y Tipos de Datos
1. – Tipos de Módulos de Datos
2. – Edición de Módulos de Datos
3. – Llamada a Módulos de Datos
4. – Acceso a Módulos de Datos
5. – Tipos de Datos
5.1 – Tipos de Datos Elementales
5.2 – Tipos de Datos Estructurados
Introducción
DB DB
OB
FB FC SFB
Módulo de DB DB
organización
FB FB SFC
8 bits
Global
(normalmente usados) Byte datos 0
Instancia (local)
Byte datos 8191
Edición de Módulos de Datos (I)
Datablock c:\class\machine1\db10
FC 15 FC 16 DB 12
Del OB 1
:OPN DB 12 :
: :
: :
:L DB :L DB
:T DB :T DB
: :
: :
CALL FC 16 :
: :OPN DB 13
: :
:L DB
DB 13
:L DB
:T DB :T DB
: :
: :
Al OB 1
:BE :BE
Declaración:
15 12 11 8 7 4 3 0
15 12 11 8 7 4 3 0 15 12 11 8 7 4 3 0
7 6 5 4 3 2 1 0
Código ASCII
Representación de Números (I)
INT:
• Una variable de tipo de dato INT representa un entero que es
almacenado en 16 bits (una palabra) en coma fija
• No tiene un identificador especial
• Los bits 0-14 representan el valor de la variable
• El bit 15 representa el signo (“0” -> positivo ; “1” -> negativo)
• Números negativos son almacenados en forma de complemento a dos
• El rango posible desde +32.767 (7FFFhex) a -32.768 (8000hex)
15 14 .......0
S 214..... ..... 2 2 21 2 0
REAL:
Representación de Tiempos (I)
S5TIME:
15 14 .......0
0 2 1 0
10 10 10 10
Base de tiempo Valor de tiempo
S5TIME#500ms (=0050hex)
S5T#2h46m30s (=3999hex)
15 14 .......0
14
15
2 2 ..... ..... 2 21 20
2
Ejemplos:
DATE#1990-01-01 (=0000hex)
D#2168-12-31 (=FF62hex)
Representación de Tiempos (III)
TIME:
Ejemplos:
TIME#24d20h31m23s647ms (=7FFF_FFFFhex)
TIME#0ms (=0000_0000hex)
Ejemplos:
TIME_OF_DAY#00:00:00 (=0000_0000hex)
TOD#23:59:59.999 (=0526_5BFFhex)
Representación de Tiempos (V)
DATE_AND_TIME:
• El tipo de dato DATE_AND_TIME representa un tiempo consistente
en fecha y momento del día
• Se puede utilizar la abreviación DT en lugar de DATE_AND_TIME
como un número si signo en coma fija
• La representación interna es de 64 bits
•Se indica como Año-Mes-Día -h:min:s.ms
Ejemplo: DT#1995-02-02-08:30:01.999
COMPONENTES
GEOMÉTRICOS
TIPO
GEO_COMPONENTES
STRUCT
CIRCULO: ENTERO
TRIANGULO: PALABRA
Antes de utilizar los datos locales dinámicos del tipo STRING, el usuario los debe inicializar p.ej. mediante una
secuencia AWL tal como:
Estructura de un UDT
Después de abrir un UDT se visualiza en una nueva ventana de trabajo la tabla de este tipo de datos
de usuario en modo "Declaración".
• La primera y la última línea contienen ya las declaraciones STRUCT y END_STRUCT,
respectivamente, que indican el comienzo y el fin del tipo de datos de usuario.
• Puede editar el tipo de datos de usuario comenzando a partir de la segunda línea de la tabla
de declaración en las columnas correspondientes.
• Los tipos de datos de usuario pueden estar formados por:
•tipos de datos simples,
•tipos de datos compuestos o
•tipos de datos de usuario ya existentes
UDT: Ejemplo en AWL
TYPE UDT 20
STRUCT
arranque : BOOL; //variable del tipo BOOL
teórico : INT; //variable del tipo INT
alor : WORD; //variable del tipo WORD
END_STRUCT;
END_TYPE
Step 7 Elementary Data Types
Type and Siz Format Range and Number Example in STL
Descripti e Options Notation
on in (lowest to highest values)
Bit
s
BOOL 1 Boolean TRUE/FALSE TRUE
(Bit) text
BYTE 8 Hexadeci B#16#0 to B#16#FF L B#16#10
(Byte) mal L byte#16#10
number
WORD 16 Binary 2#0 to L
(Word) number 2#1111_1111_1111_1111 2#0001_0000_0000_0000
Hexadeci W#16#0 to W#16#FFFF L W#16#1000
mal L word#16#1000
number
BCD C#0 to C#999 L C#998
Decimal B#(0,0) to B#(255,255) L B#(10,20)
number L byte#(10,20)
unsigned
DWORD 32 Binary 2#0 to L
(Double number 2#1111_1111_1111_1111_ 2#1000_0001_0001_1000
word) 1111_1111_1111_1111 _
1011_1011_0111_1111
Hexadeci W#16#0000_0000 to L DW#16#00A2_1234
mal W#16#FFFF_FFFF L dword#16#00A2_1234
number
Decimal B#(0,0,0,0) to L B#(1, 14, 100, 120)
number B#(255,255,255,255) L byte#(1,14,100,120)
unsigned
INT 16 Decimal -32768 to 32767 L 101
(Integer) number
signed
DINT 32 Decimal L#-2147483648 to L L#101
(Double number L#2147483647
integer) signed
REAL 32 IEEE Upper limit +/- L 1.234567e+13
(Floating- Floating- 3.402823e+38
point point Lower limit +/-1.175495e-
number) number 38
S5TIME 16 S7 time in S5T#0H_0M_0S_10MS to L S5T#0H_1M_0S_0MS
(SIMATI steps of S5T#2H_46M_30S_0MS L
C time) 10ms and S5TIME#0H_1H_1M_0S_
(default) S5T#0H_0M_0S_0MS 0MS
TIME 32 IEC time T#24D_20H_31M_23S_64 L T#0D_1H_1M_0S_0MS
(IEC in steps of 8MS L
time) 1 ms, to TIME#0D_1H_1M_0S_0
integer T#24D_20H_31M_23S_64 MS
signed 7MS
DATE 16 IEC date D#1990-1-1 to L D#1996-3-15
(IEC date) in steps of D#2168-12-31 L DATE#1996-3-15
1 day
TIME 32 Time in TOD#0:0:0.0 to L TOD#1:10:3.3
_OF_DA steps of 1 TOD#23:59:59.999 L
Y (Time) ms TIME_OF_DAY#1:10:3.3
CHAR 8 ASCII A', 'B' etc. L 'E'
(Character characters
)
S5TIME NOTES
S5TIME Format
I/O Signals
0 to
I E Input bit BOOL
65535.7
0 to
Q A Output bit BOOL
65535.7
Marker Memory
0 to
M M Memory bit BOOL
65535.7
Peripheral I/O
Logic Blocks
FC FC Function FC 0 to 65535
Data Blocks
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Introducción
Área de instrucciones
Lenguajes posibles:
AWL(inglés, aleman),
KOP,
FUP
Propiedades de bloques
Autor del bloque
Fecha y hora de creación..........
PLC’s
Página 2
Curso 2009/10
Introducción
PLC’s
Página 3
Curso 2009/10
Operaciones lógicas a nivel de bit
¿Qué son ?
Parte del conjunto de instrucciones que permiten desarrollar
operaciones con operandos binarios de un bit.
¿Cuáles son ?
X or exclusiva
= asignación
PLC’s
Página 4
Curso 2009/10
Operaciones lógicas a nivel de bit
PLC’s
Página 5
Curso 2009/10
Operaciones lógicas a nivel de bit
PLC’s
Página 6
Curso 2009/10
Operaciones lógicas a nivel de bit
PLC’s
Página 7
Curso 2009/10
Operaciones lógicas a nivel de bit
• Realiza la operación
AND de dos bits. Diagrama de
contactos
PLC’s
Página 8
Curso 2009/10
Operaciones lógicas a nivel de bit
• Realiza la O E124.2
operación OR de
AWL O E125.0
dos bits. E 124.2
E 125.0
=A 125.0
• En diagrama de
contactos equivale
a una conexión KOP
paralelo. A 125.0
PLC’s
Página 9
Curso 2009/10
Operaciones lógicas a nivel de bit
AWL
AWL
KOP
KOP
O E124.1
E 124.1 A 124.0 U E124.1 E 124.0
A 124.0
ON E124.0
UN E124.0
E 124.0
E 124.1 =A 124.0
=A 124.0
PLC’s
Página 10
Curso 2009/10
Operaciones lógicas a nivel de bit
FUP
KOP
AWL
PLC’s
Página 11
Curso 2009/10
Operaciones lógicas a nivel de bit
PLC’s
Página 12
Curso 2009/10
Operaciones lógicas a nivel de bit
PLC’s
Página 13
Curso 2009/10
OPERACIONES CON SÓLO RLO
NOT negar RLO SET activar RLO (=1) CLR desactivar RLO (=0)
SAVE
SAVE almacena el RLO (resultado lógico) en el bit RB (bit de resultado binario).
PLC’s
Página 14
Curso 2009/10
OPERACIONES CON MEMORIA (I/IV)
PLC’s
Página 15
Curso 2009/10
OPERACIONES CON MEMORIA (II/IV)
PLC’s
Página 16
Curso 2009/10
OPERACIONES CON MEMORIA (III/IV)
U E 124.0 U E 124.0
S A 124.0 Prevalece R A 124.0 Prevalece
el Reset el Set sobre
U E 124.1 sobre el Set U E 124.1 el Reset
R A 124.0 S A 124.0
PLC’s
Página 17
Curso 2009/10
OPERACIONES CON MEMORIA (IV/IV)
Tiempo de ciclo
U E 124.0
S A 124.0
U E 124.1
R A 124.0
PLC’s
Página 18
Curso 2009/10
MARCAS
PLC’s
Página 19
Curso 2009/10
EJERCICIO (Entregable 1)
PLC’s
Página 20
Curso 2009/10
Operaciones Binarias y de
Memoria
Automatización Industrial
Índice
TEMA – Operaciones Binarias y de Memoria
1. – Palabra de Estado
2. – Instrucciones de Bit
3. – Operaciones Lógicas Binarias
4. – Consideraciones sobre Sensores
5. – Operaciones de Memoria
5.1 – Detectores de Flanco
5.2 – Operaciones SR/RS
6. – Consideraciones sobre Primera Consulta
Palabra de Estado (I)
• Contiene bits con información de estado
• Las operaciones interpretan o activan los bits de estado
• La palabra de estado tiene 16 bits
215..... 28 27 26 25 2 4 23 2 2 21 20
BR CC1 CC0 OV OS OR STARLO/FC
# O I 0.1
&
O I 0.2
A I 0.1 NOT = Q 4.1
A I 0.2
= Q 4.1
XOR S
>=1
=
SR_FF RS_FF
R Q
S Q
R S
Operaciones Lógicas Binarias II
Operación
A Función “Y” = Función de asignación
AN Función “YN” # Conector intermedio
A( Y - abrir paréntesis FP Función de flanco positivo
AN( NO-Y abrir paréntesis FN Función de flanco negativo
O Función “O” NOT Función negación
ON Función “ON” S Función set de un biestable
O Función “O” de funciones “Y” R Función reset de biestable
O( O - abrir paréntesis SAVE Salvar RLO en RB
ON( NO-O abrir paréntesis
X Función O-EXCLUSIVA
XN Función NO-O-EXCLUSIVA
X( O-EXCLUSIVA abrir paréntesis
XN( NO-O-EXCLUSIVA abrir paréntesis
) Cerrar paréntesis
O I 0.3
I 0.3 >=1
Q 4.1 O I 0.4
I 0.4 = = Q 4.1
Operación lógica binarias IV
Operación lógica “O” de funciones “Y”
A I 0.0
I 0.0 & A I 0.1
O
I 0.1 >=1
A I 0.2
I 0.2 & A I 0.3
Q 4.0
I 0.3 = = Q 4.0
A(
Operación lógica “Y” de funciones “O” O I 0.0
O I 0.1
I 0.0 >=1 )
A(
I 0.1 &
O I 0.2
I 0.2 >=1 O I 0.3
Q 4.1
)
I 0.3 =
= Q 4.1
• Invertir una
entrada
binaria
• Asignación
• Conector
I 0.2 SAVE
• Activar salida
I 0.1 &
Q 4.0
I 0.2 S
• Desactivar salida
I 0.1 &
Q 4.0
I 0.2 R
Ejemplo (I)
I 0.0 I 0.1 I 0.2 Q 1.0
.
I 0.0 I 0.3 I 0.5
I 0.3 I 0.4
I 0.1 I 0.4
I 0.2 I 0.5
Q 4.0
A I 0.0
A I 0.1
I 0.0 &
I 0.1
A I 0.2
O
I 0.2
>=1 A I 0.3
I 0.3 & A I 0.4
O
I 0.4 A I 0.5
= Q 4.0
I 0.5 = Q 4.0
Ejemplo (II)
A(
I 0.0 >=1 A(
O I 0.0
I 0.1 &
O I 0.1
)
I 0.2 >=1 A(
O I 0.2
I 0.3 >=1 O I 0.3
)
I 0.4 & O I 0.4
)
I 0.5 >=1 A(
O I 0.5
I 0.6 = Q 4.0 O I 0.6
)
= Q 4.0
Consideraciones sobre Sensores
ENUNCIADO: Accionar la salida cuando esté activado S1 y no esté activado S2
S1 S2 S1 S2
S1 S2
S1 S2
Ejemplo (III)
I 0.0 I 0.1 I 0.2 Q 4.1
I 0.2 I 0.5
A(
Q 4.1 O I 0.0
O I 0.3
I 0.0 >=1 O I 0.5
I 0.3 )
I 0.5 A(
&
O I 0.1
I 0.1 >=1
O I 0.4
)
I 0.4
A I 0.2
I 0.2 = Q 4.1
= Q 4.1
Ejemplo (IV)
X(
I 0.0 >=1 A(
I 0.1 & O I 0.0
O I 0.1
)
I 0.2 >=1 A(
O I 0.2
I 0.3 O I 0.3
XOR )
I 0.4 A I 0.4
)
I 0.5 & X(
A I 0.5
A(
I 0.6 >=1 Q 4.0 O I 0.6
O I 0.7
I 0.7 = )
)
= Q 4.0
Ejemplo (V)
A I 0.0
A I 0.1
I 0.0 & M 0.0 A I 0.2
& NOT
I 0.1 # = M 0.0
A M 0.0
I 0.2 A(
A(
M 1.1 X I 0.3
I 0.3 XOR X I 0.4
# >=1 )
I 0.4 DB5.DBX 3.2 NOT
M 2.2 Q 4.0 = M 1.1
A M 1.1
# #
I 0.5 = O(
A I 0.5
= M 2.2
A M 2.2
)
)
NOT
= DB5.DBX 3.2
A DB5.DBX 3.2
= Q 4.0
Ejemplo (VI-a)
Circuitos de Mando Circuito de Potencia
1-50 Hz 220v L1
L1 L2
L3
F1F
F3F F2F
SOQ 1 3 5
K1M K1M
2 4 6
S1B K1M K1M
1 3 5
K1M H1 H2 F3F
N 2 4 6
Símbolo Operando Comentario U1 V1 W1
F3F I 0.0 Sobreintensidad (NC) M
SOQ I 0.1 Paro (NC) 3-
%P
S1B I 0.2 Marcha (NA)
K1M Q 4.0 Relé
H1 Q 4.1 Lámpara señalización “desconectado”
H2 Q 4.2 Lámpara señalización “conectado”
Ejemplo (VI-b)
A I 0.0
I 0.0 & A I 0.1
I 0.1 A(
I 0.2 >=1 Q 4.0 O I 0.2
= O Q 4.0
Q 4.0
)
= Q 4.0
Q 4.1
&
Q 4.0 = AN Q 4.0
= Q 4.1
Q 4.2
& A Q 4.0
Q 4.0 = = Q 4.2
Operaciones de Memoria
A(
A I 0.1
O I 0.1
O
O Q 4.0
A Q 4.0
)
A I 0.0
A I 0.0
= Q 4.0
= Q 4.0
0 Tiempo
0 Tiempo
I 0.3 A(
POS A I 0.3
BLD 100
FP M 0.0
& Q 4.0 )
M 0.0 M_BIT Q
A I 0.4
= = Q 4.0
I 0.4
Detector Flanco de Señal (1 --> 0)
Compara el estado de la señal del <Operando1>con el estado de señal de la consulta
precedente, que se ha almacenado en en “M_BIT”. Si se produce un cambio de “1” a “0”,
la salida Q será “1”.
I 0.3 A(
NEG A I 0.3
BLD 100
FN M 0.0
& Q 4.0 )
M 0.0 M_BIT Q
A I 0.4
= = Q 4.0
I 0.4
Flip-Flop SR
• Biestable preponderante al reset (R)
• Esta operación es afectada por el “Master Control Relay (MCR)”
A I 0.1
M 1.0
I 0.1 A I 0.2
& SR S M 1.0
S
I 0.2 A I 0.3
I 0.3 Q 4.1 A I 0.4
&
R M 1.0
I 0.4 R Q =
A M 1.0
= Q 4.1
Flip-Flop RS
• Biestable preponderante al set (S)
• Esta operación es afectada por el “Master Control Relay (MCR)”
A I 0.1
M 0.0 A I 0.2
I 0.1 & R M 0.0
R RS
I 0.2 A I 0.3
Q 4.0 A I 0.4
I 0.3 & S M 0.0
I 0.4 S Q = A M 0.0
= Q 4.0
Divisor Binario
I 0.7
M 1.0 Segmento 1
I 0.7 & Q 5.0
Q 5.0 M 1.0 S
AN I 0.7
AN Q 5.0
R M 1.0
Báscula JK
I 0.7
M 2.1
Segmento 2
M 2.0 &
& & I 0.0 M 10.0
M 10.1 S
M 10.0
M 2.0 &
I 0.1
R S M 10.1 R Q
Q Q Segmento 3
M 2.0 &
M 10.1
& & M 10.0 S
M 10.1
M 2.0 &
R S M 10.0 R Q
Segmento 4
M 10.1 & Q 5.0
/Q Q Q 5.0
Electrobomba
A I 0.0
Con. Desc.
AN I 0.2
Nivel Máximo
AN I 0.3
Selector S M 1.0
ON I 0.1
ON I 0.0
Luz de Luz disparo
Funcionamiento relé térmico Nivel Mínimo O I 0.2
R M 1.0
Bomba
A M 1.0
Asignación de Entradas
= Q 5.0
I 0.0 Selector
I 0.1 Relé térmico
I 0.2 Boya nivel máximo A I 0.0
I 0.3 Boya nivel mínimo
Asignación de Salidas = Q 5.1
Q 5.0 Electrobomba
Q 5.1 Señalización de
estado operativo
Q 5.2 Señal. relé térmico
AN I 0.1
Asignación de Marcas = Q 5.2
M 1.0 Marca auxiliar
electrobomba
Consideraciones sobre Primera Consulta
RLO estado de señal
Div.. Ingeniería
Div Ingeniería de
Sistemas y Automática
Automática
Instrucciones Básicas:Operaciones lógicas con bits 1
Bibliografía
l Título: “Step7 Avanzado”
l Autor: José Martínez Torres
l Descargar de la página web
l Manual Siemens “Step7-AWL para S7-300 y S7-400”
l Manual Siemens “Step7-KOP para S7-300 y S7-400”
l Manual Siemens “Step7-FUP para S7-300 y S7-400”
l Título: “Automating with Step7 in STL and SCL”
l Autor: Hans Berger
l ISBN: 3-89578-140-1
1
Índice
Índice
2
Operaciones lógicas con bits
l Las operaciones lógicas con bits operan con dos
dígitos, 1 y 0.
§ Estos dos dígitos constituyen la base de un sistema numérico
denominado sistema binario. Los dos dígitos 1 y 0 se
denominan dígitos binarios o bits.
§ En el ámbito de los contactos y bobinas, un 1 significa activado
(”conductor”) y un 0 significa desactivado (”no conductor”).
l Las operaciones lógicas con bits interpretan los
estados de señal 1 y 0, y los combinan de acuerdo
con la lógica del Álgebra de Boole.
l Estas combinaciones producen un 1 ó un 0 como resultado
y se denominan ”resultado lógico” (RLO). Las operaciones
lógicas con bits permiten ejecutar las más diversas
funciones.
3
Índice
Operaciones básicas
4
Operaciones básicas
Operaciones básicas
l Serie
SOLUCIÓN EN AWL
U E 0.0
U E 0.1
= A 4.0
l Paralelo
SOLUCIÓN EN AWL
U E 0.0 (también O E 0.0)
O E 0.1
= A 4.0
5
Operaciones básicas
l Contactos negados
SOLUCIÓN EN AWL
UN E 0.0
U E 0.1
= A 4.0
Índice
6
Instrucciones de terminación de
cadenas lógicas
Instrucciones de terminación de
cadenas lógicas
7
Instrucciones de terminación de
cadenas lógicas
l Las instrucciones SET y RESET son instrucciones de memoria.
l 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.
l Estas instrucciones tienen prioridad. Dependen del orden en que
las programemos. Siempre va a tener prioridad la última que
programemos.
l 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.
Instrucciones de terminación de
cadenas lógicas
l RLO
l Las instrucciones vistas hasta ahora son consultas y asignaciones. Esto significa:
el procesador examina el estado de las señales de entrada, salida y marcas y le
asigna a un estado de señal a las salidas y a las marcas.
l Dos o más primeras consultas generan una operación lógica. El resultado de
estas consultas es el resultado de la operación lógica (RLO). El resultado de la
operación lógica proveniente de una operación lógica AND o una OR puede ser
asignado a una salida o a una marca.
l Primera Consulta
l La instrucción que hace la primera consulta después de una asignación se
denomina de primera consulta. Esto significa que se genera un resultado de la
operación lógica completamente nuevo, independiente del resultado previo de la
operación lógica. Carece de importancia si la instrucción de primera consulta es
una AND o una OR. RLO estado de se ñal
8
Instrucciones de terminación de
cadenas lógicas
Índice
9
Combinación de operaciones
básicas
Combinación de operaciones
básicas
10
Combinación de operaciones
básicas
l Utilización de parentesis
SOLUCIÓN EN AWL
U E 0.0
O(
U E 0.1
U E 0.2
)
O
U E 0.3
U E 0.4
= A 4.0
Ejercicio 1
Control automático taladradora vertical
Proyectar un circuito para el control automático de una
FCs taladradora vertical. Dicha máquina deber á realizar la
siguiente función:
11
Ejercicio 1: Resolución
Asignación de variables
Pulsador B E0.0
Pulsador de emergencia Ps E0.1
Final de carrera bajada FCb E0.2
Final de carrera subida FCs E0.3
Actuador bajada Rb A4.0
Actuador subida Rs A4.1
Ejercicio 2
2.- Funcionamiento
Para poner en marcha, pulsar en S1.
Para parar, pulsar en S2
El motor tambi én se desconectará por disparo de F1
Lámparas de señalizaci ón de circuido bajo tensión (LBT), motor en servicio
(LM) y disparo de relé térmico (LF1)
12
Ejercicio 2: Resolución
Asignación de variables
Pulsador S1 E0.0
Pulsador S2 E0.1
Relé térmico F1(n.c) E0.2
Lámpara LBT A4.0
Lámpara LM A4.1
Lámpara LF1 A4.2
Índice
13
Función memoria
l MARCAS
l Las marcas son bits internos de la CPU. Disponemos de
una cantidad limitada de marcas. Esta cantidad depende
de la CPU con la que estemos trabajando.
l Estos bits podremos activarlos o desactivarlos como si
fueran salidas. En cualquier punto del programa los
podremos consultar.
l A las marcas les llamaremos M. A continuación tenemos
que decir a que bit en concreto nos estamos refiriendo. Por
ejemplo tenemos las marcas, M 0.0, M 10.7, M 4.5, etc.
Función memoria
U(
U E 0.2 M0.2
U E 0.3
U E 0.4
O E 0.1
O E 0.0 l Ejemplo MARCAS
) SOLUCIÓN EN AWL
U( U E 0.0
O E 1.0 O E 0.1
O O(
U E 1.1 U E 0.2
U E 1.2 U E 0.3
O U E 0.4 M0.0
U E 0.5 )
U(
O E 0.7
= M 0.0 M0.3
U E 0.6
O E 0.6 O E 0.7
) = M 0.1 M0.4
) U E 1.1
= A 0.4 U E 1.2
O E 1.0
= M 0.2
U E 0.5
U M 0.1
= M 0.3
U M 0.0
U(
U M 0.3
O M 0.2
)
= A 4.0
14
Función Memoria
l Si el sensor es un pulsador (momentáneamente
conectado), entonces la señal está activada tanto
tiempo como mantengamos accionado el pulsador.
Para poder almacenar el estado de esta operación,
deberemos emplear la Función memoria.
Funci ón memoria
S1 K1 S3 S4
K2
S2
K1 K2
prioridad a la prioridad a la
desconexión conexión
Flip -flop
S1 S Q K1
Función Memoria
S2 R
l Función memoria en un PLC
l En un PLC, la función memoria se elabora mediante el flip-flop S-R.El flip-
flop dispone de dos entradas: una para la instrucción de activación S y otra
para la instrucción de desactivación R.
l Set
l Un "1" en la entrada de SET , activa la función memoria. La salida Q del
flip-flop alcanza el valor de señal "1".
l Reset
l Un "1" en la entrada de RESET , desactiva la función memoria. La salida Q
del flip-flop alcanza el valor de señal "0".
l Debemos analizar el caso de que en ambas entradas se alcance al
valor “1”. Según el flip-flop que utilicemos (Set/Reset o Reset/Set) la
prioridad será a la desconexión o a la conexión respectivamente.
l El valor de señal “0" en cualquiera de las dos entradas no modifica el
valor del resultado del flip-flop. (prevalece el valor antiguo)
15
Función Memoria
Instrucciones de Set y Reset
KOP FUP AWL
E1.1 A9.0
R U E1.1
R A9.0
Función Memoria
l Ejemplo
16
Función Memoria
Flip-flop "Prioridad al Set"
M0.2
Set/reset
el flip flop E1.4 RS_FF A9.4
R Q Reset/set U E1.4
E1.5 flip flop R M0.2
U E1.5
S
S M0.2
U M0.2
= A9.4
Reset/set
flip flop
Función Memoria
Flip-flop "Prioridad al Reset"
M0.0
Set/reset
el flip flop E1.2 SR_FF A9.3
Set/reset U E1.2
S Q flip flop S M0.0
U E1.3
E1.3 R M0.0
R U M0.0
= A9.3
Set/reset
flip flop
17
E 0.3
E 0.2
Ejemplo
l Depósito de agua
l Tenemos un depósito de agua. Para manejarlo tenemos un selector de
mando. Podemos seleccionar modo manual(E 0.0) o modo automático
(E 0.1). Si seleccionamos modo manual, lo que queremos es que mientras esté
conectada, la bomba esté funcionando(A 4.0), y cuando desconectemos
que se pare la bomba. No queremos que se haga caso a las boyas de nivel.
l Si lo tenemos en modo automático queremos que el nivel se mantenga
entre las dos boyas. Cuando el agua llegue al nivel de abajo(E 0.2)
queremos que se ponga en marcha la bomba, y cuando el agua llegue al
nivel de arriba(E 0.3) queremos que se pare la bomba.
l Además tenemos un relé térmico(E 0.7) que actúa tanto cuando tenemos la
bomba en funcionamiento manual como cuando la tenemos en
funcionamiento automático. Cuando salta el relé, queremos que se pare la
bomba y que nos avise con un indicador luminoso en el cuadro de mando(A
4.7).
l Además tenemos una luz de marcha que nos indica cuando está en marcha
la bomba(A 4.1).
Ejemplo:solución
SOLUCIÓN EN AWL
Segmento 1: MANUAL
U E 0.0 //Si activamos en modo manual
= A 4.0 //Pon en marcha la bomba
= A 4.1 //Enciende la luz de marcha
Segmento 2: AUTOMÁTICO
U E 0.1 //Si está en automático
U E 0.7 //Y está bien el relé
U E 0.2 //Y está activo el nivel de abajo
UN E 0.3 //Y no está activo el nivel de arriba
S A 4.0 //Pon en marcha la bomba
S A 4.1 //Y enciende la luz de marcha
U E 0.1 //Si está en automático
U E 0.7 //Y está bien el relé
UN E 0.2 //Y no está activo el nivel de abajo
U E 0.3 //Y se ha activado el nivel de arriba
ON E 0.7 //O ha saltado el relé
R A 4.0 //Para la bomba
R A 4.1 //Apaga la luz de marcha
UN E 0.7 //Si ha saltado el relé
= A 4.7 //Avísame con la luz de
18
Ejemplo:solución
l Si hacemos la prueba de este circuito veremos que
no funciona correctamente. Vemos que en modo
manual sí que funciona pero en modo automático
no para la bomba cuando debería.
l Para resolver este circuito correctamente, nos hace
falta utilizar marcas auxiliares. En un mismo bloque
no podemos activar la misma salida dos veces con
condiciones diferentes porque se interfieren entre
ellas.
l Memoria imagen de salidas y entradas
Ejemplo:solución
19
Ejemplo:Manual
Ejemplo:Automático
20
Ejemplo:Automático
Funcionamiento Incorrecto
Ejemplo:solución
Correctamente
Segmento 1 : MANUAL U M 0.0 //Si está activa la marca 0.0
U E 0.0 //Si está en manual O M 0.2 //O está activa la marca 0.2
= M 0.0 //Activa la marca 0.0 = A 4.0 //Pon en marcha la bomba
= M 0.1 //Y activa la marca 0.1
U M 0.1 //Si está activa la marca 0.1
Segmento 2: AUTOMÁTICO
U E 0.1 //Si está en automático O M 0.3 //O la marca 0.3
U E 0.7 //Y está el relé bien = A 4.1 //Enciende la luz de marcha
U E 0.2 //Y está activo el nivel inferior
UN E 0.3 //Y no está activo el nivel superior
S M 0.2 //Activa la marca 0.2
S M 0.3 //Y activa la marca 0.3
U E 0.1 //Si está en automático
U E 0.7 //Y está el relé bien
UN E 0.2 //Y no está activo el nivel inferior
U E 0.3 //Y se ha activado el nivel superior
ON E 0.7 //O ha saltado el relé
R M 0.2 //Desactiva la marca 0.2
R M 0.3 //Y desactiva la marca 0.3
UN E 0.7 //Si no está el relé
= A 4.7 //Activa la luz de relé.
21
Ejemplo: Automático
22
Ejemplo: solución
l Ahora ya no funciona el térmico en el modo
manual. Al utilizar marcas diferentes para
cada tipo de funcionamiento, el térmico sólo
actúa sobre las marcas de modo automático.
Sólo estamos haciendo un reset de una de
las marcas que activan la bomba. Nos falta
resetear la otra marca. Tendremos que
añadir las siguientes líneas.
UN E 0.7 //Si ha saltado el relé
R M 0.0 //Desactiva la marca 0.0
R M 0.1 //Y desactiva la marca 0.
Ejemplo: solución
l Ahora podemos hacer todas las objeciones que queramos y
corregir sobre lo que ya tenemos hecho.
l Por ejemplo, en este caso no he tenido en cuenta la situación de
que después de haber estado en manual o en automático,
volvamos a la posición de reposo. En automático he hecho sets
a ciertas marcas. Cuando volvamos a la posición de reposo esas
marcas tendrán que volver a cero. De lo contrario podría darse el
caso de que estando en la posición de reposo, tengamos la
bomba en marcha. Para remediar esto podría añadir las
siguientes instrucciones:
UN E 0.0
UN E 0.1
R A 4.0
R A 4.1
23
Índice
E1.0 U E1.6
SAVE (SAVE)
SAVE
A8.1
RB
( )
U RB
= A8.1
24
Índice
Flancos
Evaluación de Flanco
Flanco Positivo Flanco Negativo
RLO
1
0
Tiempo
Diagrama del estado de la señal
Lista de Instrucciones
U E 1.0
Diagrama KOP E 1.0
FP M 1.0
= A 4.0
E1.0 M1.0 A4.0 M 1.0
P
A 4.0
Diagrama FUP
Un tiempo de ciclo
25
Flancos
l En ocasiones necesitamos que una determinada acción sólo se
realice una vez mientras se cumplan las condiciones para la
activación de la misma.
l Una gran cantidad de sets de variables mejorarían si se les aplicase
una señal de flanco positivo a sus condiciones de activación.
l La señal de flanco, tanto positivo como negativo en el Step 7
requiere de una marcha que no puede ser utilizada en otra parte del
programa, por lo que es importante simbolizarla como exclusiva de
ese flanco en cuestión
26
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Diagnosis e información del sistema
• Herramientas de diagnosis:
• Herramientas de diagnosis:
– Visualización del estado del programa
– Test con tabla de variables.
• Se puede OBSERVAR y FORZAR variables
• Se puede mostrar las valores de las variables: E, A, M, T, Z, bloques de datos y periferia.
• Procedimiento para observar / forzar variables:
1. Crear y Editar una tabla de variables VAT.
2. Establecer enlace on-line: Sistema de destino > Establecer enlace con
3. Dentro de la tabla, configurar condiciones de disparo: Variable > Condiciones de disparo
4. Activar las funciones de test: Variable > Observar y Variable > Forzar
5. Guardar tabla editada: Tabla > Guardar o Tabla > Guardar como
PLC’s
Página 3
Curso 2009/10
Diagnosis e información del sistema
Crear y abrir una VAT:
PLC’s
Página 4
Curso 2009/10
Diagnosis e información del sistema
Forzado permanente
• El programa de CPU no puede cambiarlo
• Admdor. Simatic --> “Sistema destino” --> “Mostrar
valores de forzado permanente” --> “Variable”
• “forzado permanente” para forzarla
• “anular” para eliminarlo.
• Se enciende el led FRCE
PLC’s
Página 5
Curso 2009/10
Diagnosis e información del sistema
Ciclo/Marca de ciclo
• Tiempo de vigilancia
• Marcas de ciclo
Cargar configuración
hardware,
una vez elegida marca de ciclo
PLC’s
Página 6
Curso 2009/10
Diagnosis e información del sistema
Marcas de ciclo
son marcas que cambian periódicamente su valor binario (relación impulso - pausa: 1:1).
Active la casilla de verificación si desea utilizar una marca de ciclo e introduzca el número del byte de
marcas.
Nota: El byte de marcas seleccionado no puede ser utilizado para almacenar datos temporalmente.
PLC’s
Página 7
Curso 2009/10
Diagnosis e información del sistema
Cada bit del byte de marcas de ciclo lleva asignada una duración de período/frecuencia:
Bit 7 6 5 4 3 2 1 0
T (s): 2 1,6 1 0,8 0,5 0,4 0,2 0,1
Frecuencia (Hz): 0,5 0,625 1 1,25 2 2,5 5 10
• Para verlo
L MB100
T AB100 y se lo transferimos a la CPU.
PLC’s
Página 8
Curso 2009/10
Diagnosis e información del sistema
PLC’s
Página 9
Curso 2009/10
Diagnosis e información del sistema
– Bloques: cuántos módulos hay, cuáles son, qué tamaño pueden tener...
PLC’s
Página 10
Curso 2009/10
Diagnosis e información del sistema
PLC’s
Página 11
Curso 2009/10
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Contadores
• Instrucciones disponibles:
– cargar un valor prefijado,
– leer su contenido,
– incrementar, decrementar, resetear.
PLC’s
Página 2
Curso 2009/10
Contadores
Carga valor 0
Carga valor de acumulador AC1 en contador direccionado
PLC’s
Página 3
Curso 2009/10
Contadores
U E124.5
ZR Z5 --> Decrementa Z5 si E124.5 cambia de 0 a 1 (RLO de 0 a 1)
U E124.7
R Z5 --> Pone Z5 a 0 con el cambio positivo de E124.7
L Z5
T MW4 -->Transfiere el contenido de Z5 a la palabra M4 en binario
LC Z5
T MW7 --> Transfiere el contenido de Z5 a la palabra M4 en BCD
U Z5
= A124.3 --> Pone un 1 en A124.3 si Z5 es distinto de 0
PLC’s
Página 4
Curso 2009/10
EJERCICIO (Entregable 3)
Salida Entrada
PLC’s
Página 5
Curso 2009/10
Operaciones de Cómputo
Automatización Industrial
Índice
TEMA – Operaciones de Cómputo
1. – Operaciones de Computo – Tipos de Contadores
2. – Formato de la Palabra de Cómputo
3. – Orden de las Instrucciones de Contadores
4. – Carga y Lectura de Contadores
5. – Parámetros de Contadores
6. – Operaciones de Contaje
Operaciones de Cómputo – Contadores
Características
• Los contadores tienen reservada un área de memoria específica en la CPU
• Para cada contador están reservados 16 bits
• Tiene acceso a la zona de contadores:
• sólo las operaciones de contaje
• Un contador permite:
• contar hacia arriba
• contar hacia abajo
• se le puede fijar un valor de 0 a 999 unidades
• se puede hacer poner a “0”
• Permiten contar impulsos de baja frecuencia (unos pocos Hz)
• Para contar impulsos de frecuencias superiores es necesario hardware específico
Operaciones de Cómputo
Incrementador Decrementador
FBD/LAD FBD/LAD
C2 C3
S_CU S_CD
I 1.0 CU I 2.0 CD
I 1.2 S CV AW 8 I 2.2 S CV AW 10
C#100 PV CV_BCD MW 4 C#100 PV CV_BCD MW 6
I 1.3 R Q Q 4.1 I 2.3 R Q Q 4.3
T QW 6 Borrar
R – I 0.3
Consultas Binarias Salida Binaria
Q - Q 1.0
A C 1
5
= Q 4.0 Valor de
contador
CV, CV_BCD 0
L C# 38
Preselección de Tiempo
(codificado en BCD)
Valor del contador (0..999) S_CDU
- Constante C#
- Palabra de Datos
- Palabra de Entradas IW PV CV
- Palabra de Marcas MW CV_BCD
Lectura de un Contador - Palabra de Salidas QW
R Q
- .......
L C 2 LC C 2
ACU 1
C# 7
1
I 0.0
0 R S PV
1 _
I 0.1 I 0.0
0
Binario
!=0 CV
7 16 bits
C 1
S C 1 S C 1
L C#7 C# 7
S CV
PV C V_BC D
S C 1
NOP 0 I 0.1 S CV R Q
Q 4.5
C# 7 PV PV_BC D
NOP 0
NOP 0 R Q Q 4.5
A C 1
= Q 4.5
Operaciones de Contaje – Borrar un Contador “R” e Incrementar “ZV”
Cronograma Esquema Eléctrico
Estados de
señal
1
I 0.0
0 I 0.1
1
I 0.1
0
R S PV
7
C 1
+
I 0.0
0 !=0 CV
Binario
16 bits
1
Q 4.5
0 Q 4.5
T iem po
R C 1
NOP 0 I 0.0 CU CU
A I 0.1
R C 1 S CV I 0.1 S
PV CV_BCD
CV
NOP 0 PV C V_BC D R Q
NOP 0 I 0.1 R Q Q 4.5 Q 4.5
A C 1
= Q 4.5
Operaciones de Carga y
Transferencia
Automatización Industrial
Índice
TEMA – Operaciones de Carga y Transferencia
1. – Operaciones de Carga y Transferencia
2. – Efecto sobre los Acumuladores
3. – Funciones del Acumulador
4. – Funciones de Sistema para la Transferencia de Datos
Operaciones de Carga y Transferencia
Las Operaciones de Carga y Transferencia permiten
• intercambiar informaciones entre las diferentes zonas de operandos
• preparar temporizaciones y valores de contador para su posterior tratamiento
• cargar valores constantes necesarios para la ejecución del programa
• hay funciones de:
- carga - transferencia
- funciones entre acumuladores - funciones del sistema (SFC 20,21 y 81)
Acumulador 1 Acumulador 2
L IB n L QB n L PIB n L MB n
L IW n L QW n L PIW n L MW n
L ID n L QD n L PID n L MD n
31 24 23 16 15 8 7 0
0000 0000 0000 IB 0 L IB 0
31 24 23 16 15 8 7 0
0000 0000 IB 0 IB 1 L IW 0
31 24 23 16 15 8 7 0
IB 0 IB 1 IB 2 IB 3 L ID 0
31 24 23 16 15 8 7 0 ACU 1
Ejemplos de Direccionamiento
Carga de constantes Descripción
Direccionamiento inmediato
L +27 Carga la constante entera de 16 bits ”27” en ACU1
L L#-1 Carga la constante entera de 32 bits ”-1” en ACU1
L 2#1010101010101010 Carga la constante binaria de 16 bits en ACU1
L DW#16#A0F0BCFD Carga la constante hexadecimal en ACU1
L ’FIN’ Carga los caracteres ASCII deseados en ACU1
L T#500 ms Carga el valor de temporización en ACU1
L S5T#2s Cargar un temporizador S5
L C#100 Carga un valor de computo en BCD en ACU1
L B#(100,12) Carga la constante de 2 bytes
L B#(100,12,50,8) Carga la constante de 4 bytes
L B#16#F1 Cargar número de dos dígitos hexadecimales en ACU 1
L P#10.0 Carga el puntero intraárea en ACU1
L P#I20.6 Carga el puntero interárea en ACU1
L P#name Cargar la dirección de variable local
L -25 Carga el número real en ACU1
L D# 1995-01-20 Carga la fecha
L TOD#13:20:33.125 Carga de un tiempo (la hora) en 32 bits
Operaciones de Transferencia
• La función transferencia (T - transfer) pone el contenido del acumulador1 en el
operando especificado (todos los tipos de datos en 8, 16 o 32 bits)
• Las operaciones de transferencia son incondicionales
• Operandos ubicados en la memoria:
T IB n T QB n T PQB n T MB n
T IW n T QW n T PQW n T MW n
T ID n T QD n T PQD n T MD n
31 24 23 16 15 8 7 0 ACU 1
T QD 4 T QW 4 T QB 4
31 24 23 16 15 8 7 0
0000 0000 IB 0 IB 1 L IW 0
31 24 23 16 15 8 7 0
IB 0 IB 1 IB 2 IB 3 L ID 0
Instrucción Transferir
31 24 23 16 15 8 7 0
Byte 3 Byte 2 Byte 1 Byte 0
T QD 4 T QW 4 T QB 4
Efecto sobre el ACU 2 – Operaciones de Carga
Informaciones
Información ACU 2 ACU 1 procedentes
perdida
Word dWord c Word bWord a de la PII
L IW 7
Word dWord c Word bWord a 0 IW 7 IW 7
L IW 9
Word bWord a 0 IW 7 0 IW 9 IW 9
Información Informaciones
ACU 2 ACU 1
perdida procedentes
YYYY ZZZZ de la PII
L ID 0
YYYY ZZZZ ID 0 ID 0
L ID 4
ZZZZ ID 0 ID 4 ID 4
CAD: cambia bytes en todo el acumulador 1. El byte de mayor peso con el byte
de menor peso y los dos bytes intermedios entre sí
L - Carga T - Transferencia
MOVE
(Todos los tipos de datos con 8, 16, 32 bits)
EN ENO
Ejemplos:
L +5 // Carga una constante de 16-bit
L L#523123 // Carga una constante de 32-bit
IN O L B#16#EF // Carga un byte hexadecimal
L 2#0001_0110_1110_0011
// Carga un valor binario de 16-bit
EN - Habilitar entrada L TOD#1:10:3.3
ENO -Habilitar salida // Carga un tiempo de 32-bit
IN - Valor de entrada
(todos los tipos de datos T MB0 // Transferir un valor al byte de
con longitud 8, 16, 32 bit) memoria 0
O - Dirección del resultado T AD256 // Transferir un valor a la doble
(todos los tipos de datos doble palabra de salida 256
con longitud 8, 16, 32 bit)
Funciones del Sistema para Transferencia de Datos
Están disponibles las siguientes funciones del sistema para la transferencia de datos
SFC 20 BLKMOV
SFC 21 FILL
SFC 81 UBLKMOV
SFC Parámetros Declaración Tipo dato Descripción
81 SRCBLK INPUT ANY Fuente de donde copiar datos
RET_VAL OUTPUT INT Información de error
DSTBLK OUTPUT ANY Destino donde copiar los datos
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Introducción a los Tipos de Datos en STEP 7
Tipos de datos • Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)
elementales
• Tipos de Datos Matemáticos (INT, DINT, REAL)
(hasta 32 bits)
• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)
• Tiempo (DATE_AND_TIME)
Tipos de datos
complejos • Array (ARRAY)
(mayores de 32 bits)
• Estructura (STRUCT)
• Cadena de Caracteres (STRING)
PLC’s
Página 2
Curso 2009/10
TIPOS DE DATOS DE BIT – TAMAÑO
– Byte (8 bits) _ _ _ B
Zona de
memoria: E Tam BBB.b
Número de byte
• E -> Entradas y bit (0-7), en su
• A -> Salidas caso
• T -> Temporizadores
• Z -> Contadores Tamaño del Dato que
• M -> Marcas vamos a usar (bit por
• DB -> Módulos de datos omisión): B, W, D
• P -> Acceso directo (PA, PE)
PLC’s
Página 4
Curso 2009/10
DIRECCIONAMIENTO 2/3
124 124
125
125
125
125
PLC’s
Página 5
Curso 2009/10
DIRECCIONAMIENTO 3/3
• Tipos de datos:
– Entero (en cualquiera de los sistemas numéricos anteriores)
– Real (coma flotante) Ver ayuda
Admin. Simatic
– Carácter Tipos de datos simples
– Tiempo: cantidad de tiempo, hora, S5T, fecha
– Puntero
PLC’s
Página 7
Curso 2009/10
Tipos de Datos Elementales en STEP 7
Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo
BOOL 1 1ó0
BYTE 8 B#16#A9 o B169
WORD 16 W#16#12AE o W4782
DWORD 32 DW#16#ADAC o DW44460
CHAR 8 'w'
S5TIME 16 S5T#5s_200ms
INT 16 123
DINT 32 65539
REAL 32 1.2 o 34.5E-12
TIME 32 T#2D_1H_3M_45S_12MS
DATE 16 D#1993-01-20
TIME_OF_DAY 32 TOD#12:23:45.12
PLC’s
Página 8
Curso 2009/10
Números en COMA FLOTANTE (1/2)
31 30 23 22 21 ………... 2 1 0
...
PLC’s
Página 9
Curso 2009/10
Números en COMA FLOTANTE (2/2)
• Ejemplo:
1#10000000#11000000000000000000000
PLC’s
Página 10
Curso 2009/10
ACUMULADORES (1/2)
PLC’s
Página 12
Curso 2009/10
CARGA Y TRANSFERENCIA 1/7
• Ejemplos:
– LC Z0 --> Carga el contenido del contador en el acumulador en BCD.
PLC’s
Página 14
Curso 2009/10
CARGA Y TRANSFERENCIA 3/7
• Ejemplos:
PLC’s
Página 15
Curso 2009/10
CARGA Y TRANSFERENCIA 4/7
PLC’s
Página 16
Curso 2009/10
CARGA Y TRANSFERENCIA 5/7
MB32 MB33
T MB32 MB32
PLC’s
Página 17
Curso 2009/10
CARGA Y TRANSFERENCIA 6/7
PLC’s
Página 18
Curso 2009/10
CARGA Y TRANSFERENCIA 7/7
PLC’s
Página 19
Curso 2009/10
EJERCICIO (Entregable 4)
PLC’s
Página 20
Curso 2009/10
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Operaciones con AC. Comparación (I)
PLC’s
Página 2
Curso 2009/10
Operaciones con AC. Comparación (II)
Ejemplo:
PLC’s
Página 3
Curso 2009/10
Operaciones con AC. Comparación (III)
• Ejemplo:
PLC’s
Página 4
Curso 2009/10
Operaciones con AC. Aritméticas (I)
• Una vez cargados los acumuladores, se opera, dependiendo del formato del dato:
I, D, R (entero 16 bits, entero 32 bits, real o coma flotante)
- , + , * , / , MOD (resto de división de enteros dobles) ; xI xD xR
• En CPU’s de 4 acumuladores:
– El resultado queda en ACU1,
– ACU3 pasa a ACU2, y
– ACU4 se duplica en ACU3 y AUC4.
PLC’s
Página 6
Curso 2009/10
Operaciones con AC. Aritméticas (II-b)
PLC’s
Página 7
Curso 2009/10
Operaciones con AC. Aritméticas (III)
PLC’s
Página 8
Curso 2009/10
Ops. Avanzadas (nºs reales)
PLC’s
Página 9
Curso 2009/10
Conversiones entre tipos de datos (I)
PLC’s
Página 10
Curso 2009/10
Conversiones entre tipos de datos (II)
PLC’s
Página 11
Curso 2009/10
Conversiones entre tipos de datos (III)
• Ejemplos:
PLC’s
Página 12
Curso 2009/10
Conversiones entre tipos de datos (IV)
doble
Un real 32bits IEEE-FPE
-
inferior
+
mayor
superior
un real en entero de 32 bits
PLC’s
Página 13
Curso 2009/10
Conversiones entre tipos de datos (V)
PLC’s
Página 14
Curso 2009/10
Conversiones entre tipos de datos (VI)
• Ejemplos:
PLC’s
Página 15
Curso 2009/10
Ops. Lógicas a nivel de Palabra W y Doble Palabra D (I)
• Operan con W (16 bits) o con D (32 bits) bit por bit, según lógica de Boole.
• Operación lógica entre
ACU1 y ACU2 ACU1 y constante
PLC’s
Página 16
Curso 2009/10
Ops. Lógicas a nivel de Palabra W y Doble Palabra D (II)
Ejemplos:
PLC’s
Página 17
Curso 2009/10
Ops. de desplazamiento y rotación (I)
• Los desplazamientos rellenan con 0, aunque hay instrucciones que permiten mantener el signo:
– SSD Ambas provocan un desplazamiento a dcha del ACU1 o ,
– SSI ACU1-L pero manteniendo el signo
• Cuando no se indique n, éste será el contenido del byte bajo del ACU2
PLC’s
Página 18
Curso 2009/10
Ops. de desplazamiento y rotación (II)
¿?
PLC’s
Página 19
Curso 2009/10
Ops. de desplazamiento y rotación (III)
• Ejemplos de Desplazamiento:
L EW 124
SLW 6 Desplaza los bits de la palabra baja de ACU1 seis posiciones a la izqda.
T MW 20
L MW 10
SSI 4 Desplaza cuatro posiciones a la dcha y repite signo
T MW 20
• Ejemplos de Rotación:
L MD 10
RLD 3 Rota todos los bits del ACU1 tres posiciones a la izqda.
T MD 20
PLC’s
Página 21
Curso 2009/10
EJERCICIO (Entregable 5)
Las dos raíces resultantes (r1 y r2) serán almacenadas en las marcas
r1_real: MD0 r1_imaginaria: y MD4
r2_real: MD8 r1_imaginaria: y MD12
PLC’s
Página 22
Curso 2009/10
Operaciones de Comparación
Automatización Industrial
Índice
TEMA – Operaciones de Comparación
1. – Operaciones de Comparación
1.1 – Comparar Números Enteros
1.2 – Comparar Números Enteros Dobles
1.2 – Comparar Números en Coma Flotante
2. – Ejemplos
Operaciones de Comparación
• Las operaciones de comparación permiten comparar dos valores en formato
byte, palabra o doble palabra
• Para poder comparar, los operandos deben estar uno en cada acumulador
• La ejecución de las operaciones no depende del RLO
• El resultado es binario. Si se cumple la comparación, el RLO es “1”; si no, es “0”
• Las operaciones de comparación no modifican los contenidos de los ACUs
A(
A(
Ejemplo: CMP I 0.0 & L MD 0
L MD 4
<>D <>D
IN1 Q 4.0
MD 0 )
= A I 0.0
MD 4 IN2 = Q 4.0
Comparar Números en Coma Flotante
• La operación Comparar números en coma flotante ejecuta una operación de
comparación cuya base son números en coma flotante.
• Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado.
• Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de
la comparación es “1”, en caso contrario es “0”.
• No existe la negación del resultado.
A(
Ejemplo: CMP I 0.0 &
L MD 0
L MD 4
<R <R
IN1 Q 4.0
MD 0 )
A I 0.0
MD 4 IN2 = = Q 4.0
Ejemplos 1
Comparación en el comienzo Comparación en operaciones lógicas:
de una operación lógica: O Input2
L MW 120 O(
L 512 L MW 122
>I L 200
A Input1 <=I
= Output1 )
O Input3
= Output2
L “DB_Global”.CompVal1
Comparación de DINT: L “DB_Global”.CompVal2
<D
= “DB_Global”.CompResult
L #Valact
Comparación de REAL: L #CALIBRE
>=R
S #Recali
Ejemplo – Semáforo
STL
Cronograma 1 A I 0.1
Rojo Q 4.0
0
< 60 > AN M 2.0
1 L S5T#1S
Verde Q 4.1
0
< 20
SD T 1
1 A T 1
Naranja Q 4.2 = M 2.0
0
> 5 <
Tiempo en sg. A M 2.0
CU C 1
I 0.0 & T1 ***
M 2.0 S_ODT L C 1
S5T#1S C1 L 60
TV
BI # M 2.0
S_CDU
== I
BCD R Q 4.0
R Q # CU
CD S Q 4.1
S CV
PVCV_BCD
R Q
L C 1
L 75
CMP Q 4.0
== I
==I S Rojo
C1 IN1
2
S Q 4.2
+60 M 1.0
IN2 Q 2 R Q
Q 4.1 L C 1
CMP Verde L 80
S
==I == I
C1 IN1 M 1.1
+75 IN2 Q 2 R Q R Q 4.1
Q 4.2 R Q 4.2
CMP S Naranja S Q 4.0
==I
C1
IN1 M 1.2 R C 1
+80 2 R Q
IN2 Q
Ejemplo – Señalización de Nivel de Llenado
Se desea vigilar el llenado de un depósito,
Ejemplo STL señalizando cuando se alcanza un límite superior
A I 0.2 (15) y un límite inferior (5). Cuando el depósito
R C 4
I 0.0 está totalmente vacío deberá ponerse a cero el
A I 0.0
CU C 4 contador de caudal C4.
15
A I 0.1 Ocupación de las Entradas y Salidas:
CD C 4 I 0.0 - Emisor de caudal, tubería de entrada
L C 4 I 0.1 - Emisor de caudal, tubería de salida
10
L 5 I 0.2 - Pulsador para poner a “0” el contador
<= I Q 4.0 - Señalizador de nivel por debajo de 5
= Q 4.1 Q 4.1 - Señalizador de nivel por encima de 15
5
L C 4
L 15 Del diagrama mostrado se podrá reconocer el
I 0.1
>= I estado del contador (= contenido del depósito) y su
= Q 4.0 reacción sobre las entradas I 0.0 e I 0.1, así como el
efecto sobre los diodos luminiscentes (Q 4.0 y Q
1
I 0.2 4.1).
0
El diodo luminiscente de salida Q 4.0 luce mientras
1 12x se alcance o se sobrepase el límite superior (15).
8x I 0.0
0 El diodo luminiscente de salida Q 4.1 luce mientras
1
I 0.1 se alcance o se baje del límite inferior (5).
0
1
Q 4.0
0
1
Q 4.1
0
Tiempo
Automatización Industrial
Índice
TEMA – Operaciones Matemáticas
1. – Operaciones Aritméticas Básicas
1.1 – Operaciones Aritméticas Básicas con Números Enteros Simples
1.2 – Operaciones Aritméticas Básicas con Números Enteros Dobles
1.3 – Operaciones Aritméticas Básicas con Números Reales
2. – Operaciones Aritméticas Avanzadas
2.1 – Funciones Trigonométricas
2.2 – Funciones Logarítmicas y Exponenciales
2.3 – Otras Funciones
3. – Operaciones de Conversión
4. – Operaciones de Desplazamiento y Rotación
5. – Operaciones Lógicas con Palabras
6. – Operaciones con Bits de la Palabra de Estado
Operaciones Aritméticas Básicas
• Las funciones aritméticas combinan dos valores digitales en los acumuladores
• Se incluyen es este apartado las operaciones aritméticas básicas
• El resultado queda en el ACU1
• Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de la
operación.
• Hay funciones para números en coma fija y coma flotante
• Se contemplan las operaciones:
• suma
• resta
• multiplicación
• división
• adición de constantes
• incremento
• decremento
Representación General
• La estructura semántica de una operación aritmética es:
Funcion
Cargar Dirección1
EN ENO
Cargar Dirección2
Función aritmética IN1
Transferir Resultado
IN2 OUT
EN ENO ( )
Estado de señal de los bits de la palabra de estado: resultado del cálculo fuera del área válida
Estado de señal de los bits de la palabra de estado: operaciones aritméticas con números enteros dobles +D, /D y MOD
Números Reales (I)
Suma de REAL (+R) ADD_R
• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL EN
• La suma queda en ACU1 IN1 OUT
IN2 ENO
• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.
• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área válida
Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área no válida
Ejemplos:
L Valor1 L Valor2 L Valor3
+ B#16#21 + -33 + L#-1
T Resultado1 T Resultado2 T Resultado3
Decremento e Incremento
Decremento (DEC n) Incremento (INC n)
Estructura semántica
Cargar Dirección1 Cargar Dirección1
Decrementar Valor Incrementar Valor
Transferir Resultado Transferir Resultado
Ejemplos:
L ValorInicial L ValorFinal
INC 5 DEC 7
T ValorInicial T ValorFinal
Representación General
• La estructura semántica de una operación aritmética avanzada es: Funcion
Cargar Dirección1 EN ENO
Función matemática
Transferir Resultado IN OUT
Funciones Trigonométricas (I)
Funciones Trigonométricas Ejemplo:
SIN
La potencia eléctrica P=V*I*senϕ
• Existen las funciones trigonométricas: EN OUT L PHI
- seno (SIN) SIN
- coseno (COS) IN ENO L Corriente
- tangente (TAN) TAN *R
• La entrada es un ángulo en radianes en L Tension
EN OUT *R
formato de número REAL en ACU1
T Potencia
IN ENO
IN ENO
Operaciones de Conversión
• Las funciones de conversión convierten el tipo de datos del valor del ACU1
Conversión de Reales
Conversión: Números REAL L MD33
RND
RND: Convierte real a doble entero. Redondea a más próximo (ROUND) T MD69
TRUNC:Convierte real a doble entero. Trunca el número (TRUNC)
RND+: Convierte real a doble entero superior (CEIL)
RND-: Convierte real a doble entero inferior (FLOOR)
IN OUT
Otras Operaciones de Conversión
Otras funciones de conversión ABS
INVI: Complemento a uno de INT (INV_I) EN ENO
INVD: Complemento a uno de DINT (INV_DI)
NEGI: Complemento a dos de INT (NEG_I) IN OUT
NEGD: Complemento a dos de DINT (NEG_DI)
NEGR: Negación de número REAL, cambio de signo (NEG_R)
ABS: Valor absoluto de un número REAL (ABS)
Operaciones de Transferencia
Operación MOVE
MOVE
• Permite inicializar variables con valores determinados. EN ENO
• El valor indicado en la entrada IN se copia en el
operando indicado de la salida OUT. ENO y EN IN OUT
tienen el mismo estado de señal.
• Se puede copiar todos los tipos de datos de 8, 16 ó 32
bits de longitud.
Operaciones de Desplazamiento y Rotación
• Las funciones de desplazamiento permiten desplazar el contenido del ACU1 hacia la
derecha o hacia la izquierda
• Se pueden utilizar con palabras y dobles palabras
• Devuelven el resultado en el ACU1
• Se contemplan las operaciones:
• desplazamiento
• rotación
Funciones de Registro
Se contemplan las siguientes funciones de registro:
Funciones de Registro Palabra Doble palabra
con nº posiciones con nº posiciones con nº posiciones con nº posiciones
como parámetro en ACU2 como parámetro en ACU2
Desplazar a la izquierda SLW n (SHL_W) SLW SLD n (SHL_DW) SLD
Desplazar a la derecha SRW n (SHR_W) SRW SRD n (SHR_DW) SRD
Desplazar con el signo SSI n (SHR_I) SSI SSD n (SHR_DI) SSD
Rotar a la izquierda - - RLD n (ROL_DW) RLD
Rotar a la derecha - - RRD n (ROR_DW) RRD
Rotar izqui. con CC1 - - RLDA -
Rotar derecha con CC1 - - RRDA -
Desplazamientos
Desplazamiento izquierda (palabra) SLW Desplazamiento izquierda (doble palabra) SLD
“0” “0”
CC1
S CC1 S CC1
ACU1 ACU1
SHL_W
EN ENO L MW50
* SLW 5
MW50 IN
T MW12
(MW4 = 5) MW4 N O MW12
Rotaciones
Rotar a la izquierda RLD Rotar izquierda a través de CC1 RLDA
CC1 CC1
ACU1 ACU1
ROR_DW
* L MD60
EN ENO
RRD 4
MD60 IN T MD50
MW6 N O MD50
* Estado de señal del último bit desplazado:
(MW6 = 4)
Operaciones Lógicas con Palabras
• Las funciones lógicas de palabras combinan los contenidos del ACU1 y ACU2 bit a bit.
• El resultado queda en el ACU1
• Hay funciones para palabras o dobles palabras
• Se dispone de funciones:
• AND
• OR
• OR Exclusiva
Cargar Dato1
Operación lógica con constante
Transferir Resultado
WAND_W L MW10
L MW20
EN ENO AW
MW10 IN1 T MW30
WOR_W
L MW32
EN ENO
L MW44
MW32 IN1 OW
T MW34
MW44 IN2 OUT MW34
WXOR_W L MW26
EN ENO L MW28
XOW
MW26 IN1 T MW24
MW28 IN2 OUT MW24
Ejemplos de Operaciones Lógicas con Palabras
Ejemplo 1 Ejemplo 3
L IW 0 // Valor 1 L Valor1
L MW 144 // Valor 2 L Valor2
AW // Operación lógica AW
T MW 146 // Resultado L Valor3
OW
T Resultado
Ejemplo 2
L MW 148 Ejemplo 4
AW W#16#807F L Valor4
T MW 150 L Valor5
L MD 152 XOW
OD DW#16#8000_F000 AW W#16#FFF0
T MD 156 T Resultado2
Operaciones de Salto
Automatización Industrial
Índice
TEMA – Operaciones de Salto
1. – Instrucciones de Salto
1.1 – Salto Incondicional
1.2 – Salto Condicional
2. – Distribuidor de Saltos
3. – Bucles
4. – Saltos Condicionados
Introducción
Principios de Saltos
• Permiten interrumpir la ejecución lineal del programa. STEP 7 soporta varias
instrucciones de Salto a Etiquetas (“ir a etiqueta”)
• Consta de una condición de salto y una etiqueta de salto (dirección)
• La etiqueta consta de cuatro caracteres. No debe comenzar con carácter numérico
• Los saltos pueden ser hacia delante o hacia atrás. Siempre dentro de un módulo
– Salto Incondicional
– Salto Condicional, basado en el RLO, BR, OV / OS, CC1 y CC0
– ...
Ejemplo:
Salto L C 10 Condicion
L 50
>I
Si se ejecuta el salto las JC GR50 Salto condicional
instrucciones situadas Programa Programa si no
entre el salto y la etiqueta ........ se cumple condición
no se procesan JU SHAR
GR50: Programa en Programa si se
etiqueta de salto cumple la condición
Etiqueta SHAR:
Introducciones de Salto
Operaciones de Salto en STL
JU Etiqueta Salto Inconcicional
JC Etiqueta Salto si RLO = 1
JCN Etiqueta Salto si RLO = 0
JCB Etiqueta Salto si RLO = 1 y salva RLO
JNB Etiqueta Salto si RLO = 0 y salva RLO
JBI Etiqueta Salto si BR = 1
JNBI Etiqueta Salto si BR = 0
JZ Etiqueta Salto si resultado de operación igual a 0
JN Etiqueta Salto si resultado de operación distinto a 0
JP Etiqueta Salto si resultado de operación mayor que 0
JPZ Etiqueta Salto si resultado de operación mayor o igual a 0
JM Etiqueta Salto si resultado de operación menor que 0
JMZ Etiqueta Salto si resultado de operación menor o igual a 0
JUO Etiqueta Salto si resultado de operación inválido
JO Etiqueta Salto si overflow
JOS Etiqueta Salto si overflow memorizado
JL Etiqueta Distribuidor de saltos
LOOP Etiqueta Bucle por salto
Instrucciones de Salto Incondicional
Salto Incondicional (JMP)
El Salto Incondicional se ejecuta independientemente de cualquier condición; este salto no
lee ni se ve afectado por los bits de la palabra del estado.
FUP AWL
Segmento 1 Segmento 1
CAS1 JU CAS1
.... JMP .
.
.
.
.
.
.
.
.
.
Segmento X .
Segmento X
CAS1 CAS1: A I 0.4
R Q 4.1
Q 4.1
I 0.4 R
A I 0.0 A I 0.0
A I 1.0 A I 1.0
JCN REC2 JNB REC2
• Salto si BR = 1 (JBI)
• Salto si BR = 0 (JNBI)
• Salto si OV = 1 (JO)
• Salto si OS = 1 (JOS)
STL: Saltos Condicionales Basados en CC1 y CC0
Salto Condicionales Basados en CC1 y CC0
• Cuando se ejecuta en el programa un cálculo matemático, los bits CC1 y CC0 se
actualizan en la palabra del estado.
• Los bits CC1 y CC0 se evalúan en las siguientes instrucciones de salto de la tabla
Sí ¿ Contador de
Bucle <>0 ?
No
Continuar
STL: Función Bucle
Saltos Condicionados
FC100
Si
? No Si
? No
JU M2 AN I 0.5 AN I 0.1
JC M3 JC M1
M1 -
A I 0.6 A I 0.2
A I 0.0
C = Q 4.3 A = Q 4.0
JC M1 JU M2
M3 A I 0.7
M2 -
= Q 1.4 M1 A
=
I 0.3
Q 4.1
B
M3 - M2 A I 0.4
= Q 4.2
BE ? No
Si
D M4 AN I 2.0
= Q 4.5
A ? No
Si
A I 2.1
JC M4
B ? No
Si ? C
Si
No
Ejemplos de Saltos:Incidencia sobre Temporizadores
FC10
A I 0.0 Salto a meta1 con entrada a 1
JC MET1
A I 0.2 Temporizador
L S5T#1S
SD T 0
A I 0.3
R T 0
A I 0.4 Contador
CU C 1
A I 0.5
CD C 1
A I 0.6
L C#10
S C 1
A I 0.7
R C 1
L C 1 Carga y Transferencia
T QW 6
L C 1 Comparación
L C#12
==I
= Q 4.1
A T 0 Salida temporizador
= Q 4.2 dentro de salto
MET1 A T 0
= Q 4.3
BE
JU FIN
FC11
DB10 OB1
0 S5T#1S A I 1.0
2 S5T#2S CALL FC 10 L MW 10
4 S5T#3S CALL FC 11 SE T 20
6 S5T#4S BE A T 20
8 S5T#5S = Q 4.0
BE
FC10
OPN DB 10
L DBW 0
A I 0.0
JC META
L DBW 2
A I 0.1
JC META
L DBW 4
A I 0.2
JC META
L DBW 6
A I 0.3
JC META
L DBW 8
A I 0.4
JC META
BEU
META T MW 10
BE
A M 10.0
JC ALA1
A M 10.1
JC ALA2
A M 10.2
JC ALA3
BE
Ejemplos de Saltos: Cinta Transportadora
FC20
Reconocimiento Nomb CINTA
Expulsor A I 0.0
de pieza defectuosa Evaluación de orden de
AN M 1.0 desplazar
= M 2.0
S M 1.0
AN I 0.0
R M 1.0
AN M 2.0
BEC
M0: L -16
SSI 2 //Desplazar con signo a derecha
T QW 4
BEU
M1: L 16
SSI 2
T QW 4
BEU
M2: L -16
SRW 2
T QW 4
BEU
M3: L 16
SRW 2
T QW 4
Saltos en Step 7 (I) – SPA , SPB y SPBN (If -
Then-Else)
Las operaciones de saltos en Step 7 son parecidas conceptualmente a los que nos podemos encontrar en
otros lenguajes: interrumpen la ejecución normal del programa (secuencial) y lo retoman en una etiqueta
dada.
Constan de una condición de salto y una dirección donde saltar (la etiqueta).
La etiqueta puede tener como máximo 4 caracteres y el primer carácter no puede ser un número.
Los saltos pueden ser incondicionales y condicionados.
Se distinguen en los nombres de las etiquetas entre mayúsculas y minúsculas (“aaa” no es la misma
etiqueta que “AAA”)
En la entrada de hoy vamos a ver un salto incondicional (SPA) y dos condicionados (SPB y SPBN). Te
mostraré en futuras entradas más saltos para poder hacer un CASE o un FOR-NEXT, pero de momento
veremos estos que son los más simples y probablemente más habituales.
….
SPA pepe
pepe: NOP 0
La instrucción NOP 0 es una instrucción nula. No hace nada de nada. Ocupa 2 bytes en memoria y lleva un
minúsculo tiempo de ejecución. Además sólo es programable en AWL.
La operación de salto SPA en general no irá sola ya que salvo en ocasiones que quieras evitar la ejecución
de una parte del código porque estés depurando alguna parte, no tiene mucha utilidad en sí misma.
Saltos en Step 7
Estas dos operaciones de salto son condicionadas, es decir, dependen del estado del RLO:
SPB: Se ejecutará el salto cuando el resultado de la operación booleana sea true (RLO = 1)
SPBN: Se ejecutará el salto cuando el resultado de la operación booleana sea FALSE (RLO = 0)
En definitiva es lo que podríamos llamar los IF- THEN de otros lenguajes de programación.
….
Condición booleana
SPB pepe
pepe: NOP 0
….
Condición booleana
SPBN pepe
pepe: NOP 0
Como bien indica la sintáxis el salto se produce si y sólo si se produce la condición de salto (RLO=0 ó 1
dependiendo de si elijes SPB o SPBN). Esto implica, y quiero dejarlo bien claro aunque sea una obviedad,
que el código que está bajo la condición de salto y la etiqueta se ejecutará normalmente si la condición de
salto no se satisface.
Para que tengas una idea de cómo hacer un IF-THEN-ELSE… la estructura sería del estilo
Condición IF
SPB Etiq1
(Codigo ELSE)
SPA Etiq2
Etiq1: NOP 0
Etiq2: NOP 0
Como puedes ver, hemos combinado el SPB con el SPA de forma que:
Como veis estas instrucciones empiezan a ser interesantes ya que nos van a dar bastante juego a la hora de
realizar nuestros programas.
¿Cuándo los voy a usar?
En general vas a usar estas instrucciones cuando el código a evitar o no no lleven aparejado un FC/FB ya
que en otro caso, es más simple crear una booleana que te active la llamada a la funcion FB/FB que no
andar con saltos.
Es decir, la usaré dentro de los FC/FB cuando el código a ejecutar o a esquivar sea pequeño y no merezca
tener un FC/FB para ello ya que si el código va a ser muy largo, bajo mi punto de vista es mejor
englobarlo en una función para un mejor seguimiento y depuración.
inShare
En la última entrada vimos los saltos en Step 7 más comunes. Hoy te voy a mostrar un nuevo tipo de
salto, que si provienes de la programación en otros lenguajes, te va a sonar. Se trata de hacer bucles tipo
FOR-NEXT mediante la instrucción LOOP en Step 7.
Realmente la instrucción es muy sencilla: LOOP Etiqueta. Para explicarlo bien, vamos a desgranar el
siguiente código:
(Código)
L 10 –> Lo primero que hacemos es cargar en el acumulador el número de ciclos del bucle.
NEXT: T MW10 -> Transferimos el valor del ACU-1 a nuestra marca de contador de ciclos
[unordered_list style="bullet"]
[/unordered_list]
Hay que tener en cuenta que es necesario una variable (en nuestro ejemplo MW10) de 16bits que sea
entera no negativa. El salto puede ser hacia delante o hacia atrás, pero la forma de hacer un FOR-NEXT
tradicional es como se muestra.
L 10
Tras ello, generamos cual va a ser nuestra meta de salto (Llamarla NEXT creo que es bastante adecuada
por su significado) y transferimos el valor del ACU-1 al contador de ciclos.
NEXT: T MW10
Como nota podrás pensar… en el post sobre los saltos dijiste que lo mejor es poner la Meta seguido de
NOP 0 y ahora estás usando la instrucción directamente. Correcto. Es cierto que lo escribí y lo
mantengo. De hecho aquí podría hacer lo mismo y poner un
NEXT: NOP 0
T MW 10
… pero sin que sirva de precedente creo que es más intuitivo y fácil de entender que el NEXT va
asociado intrínsecamente al contador de ciclos por lo que evitamos el poner a instrucción nula ya que
siempre, siempre, siempre, ha de ponerse la transferencia del contador de ciclos tras la meta, por tanto,
seguido es más adecuado en este caso ¿no crees?
Bien, sigamos. Una vez transferido el valor a MW10 (recordemos que vale 10), ejecutaremos el código
que queramos. Ojo, sin usar MW10 salvo de lectura, no carguéis sobre él valores ya que desvirtuaría el
valor del contador.
L MW10
LOOP NEXT
Lo que hacemos es cargar el valor del contador (10 en la primera iteración) y ejecutar LOOP. Como vale
10 >0, le resta una unidad (9) y salta a NEXT.
Es decir, saltará a NEXT: T MW10 y por tanto ahora el contador de ciclos valdrá 9 ya que es lo que
tenemos en el acumulador 1!!
Luego volverá a ejecutar el código que queramos, cargará nuevamente este valor 9, le restará la unidad y
devolverá un 8 para que se lo transfiramos al contador de ciclos.
¿Fácil verdad? Espero que no os haya parecido una explicación para niños de párvulos pero es que hay
veces que con el tema de los acumuladores, mucha gente se lía un poco.
Finalmente os he preparado un ejemplo que creo que os va a gustar. Se trata de realizar un filtrado de una
señal analógica de esta forma:
[unordered_list style="bullet"]
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Control del flujo del programa: Ops. de Salto
PLC’s
Página 2
Curso 2009/10
Operaciones de Salto incondicional
Ejemplo:
PLC’s
Página 3
Curso 2009/10
Ejemplo con Operaciones de Salto
PLC’s
Página 4
Curso 2009/10
Operaciones de Salto condicional (I)
PLC’s
Página 5
Curso 2009/10
Operaciones de Salto condicional (II)
• Ejemplo:
PLC’s
Página 6
Curso 2009/10
Operaciones de Salto condicional (III)
PLC’s
Página 7
Curso 2009/10
Ops. de Salto: Bucle
• La instrucción utilizada para el bucle es LOOP y el operando será una meta para
que salte a ella en cada iteración.
L MB 10
LOOP PROX decrementa ACU1-L y salta si ACU1-L <>0
PLC’s
Página 8
Curso 2009/10
Ops. de fin de bloque (I)
PLC’s
Página 9
Curso 2009/10
EJERCICIO (Entregable 6)
PLC’s
Página 10
Curso 2009/10
Depende de la
Equivalente IEC Tipo Arranque
señal arranque
* TP: no se redispara con arranques próximos
www.campusabierto.es Curso de Programación de Autómatas
SI
Disparo
SV Reset
Tiempo
Valor
booleano
Disparo
SE
Reset
Tiempo
Valor
booleano
Disparo
SS Reset
Tiempo
Valor
booleano
Disparo
Reset
SA
Tiempo
Valor
booleano
www.campusabierto.es Curso de Programación de Autómatas
Operaciones con Temporizadores S7-300/400
Modos de funcionamiento:
• Impulso (SI).
• Impulso prolongado (SV).
• Retardo a la conexión (SE).
• Retardo a la conexión con memoria (SS).
• Retardo a la desconexión (SA).
1
Carga de un valor de temporización
El valor de temporización se debe cargar en la parte baja del ACU para
desde allí transferirlo al temporizador mediante el set que determine
el modo de temporización adecuado.
Registros afectados: ER
Ejemplo:
4
Temporizador como impulso prolongado (SV)
Instrucción: SV
Si el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca y continua en marcha incluso si
el RLO cambia a 0 antes de que el temporizador termine. Mientras el tiempo esta corriendo, la salida vale 1.
Registros afectados: ER
Ejemplo:
5
Temporizador como retardo a la conexión (SE)
Instrucción: SE
El temporizador arranca cuando hay un flanco creciente en el RLO (al ejecutar esta instrucción). El temporizador
continua en marcha con el valor de temporización indicado en el ACU 1 mientras sea positivo el estado de señal
en la entrada (el RLO). El estado de la salida es 1 si el tiempo ha transcurrido sin errores y si el estado de la
entrada (RLO) es 1. Si la entrada (RLO) cambia de 1 a 0 mientras está en marcha el temporizador, éste cambia el
estado de la salida a 0. Registros afectados: ER
Ejemplo:
6
Temporizador como retardo a la conexión (SS)
Instrucción: SS
Si la entrada (RLO en la ejecución de la instrucción) cambia de 0 a 1, el temporizador arranca y continua
corriendo incluso si la entrada (RLO) cambia a 0, antes que el temporizador termine de contar. Si el tiempo ha
concluido la salida continua a 1 independientemente del estado de la entrada (RLO). Solo se puede poner a 0 la
salida mediante un Reset. El temporizador vuelve a arrancar con el valor de temporización indicado en el ACU 1 si
el estado de la señal en la entrada (RLO) cambia de 0 a 1 mientras el temporizador está en marcha.
Registros afectados: ER
Ejemplo:
7
Temporizador como retardo a la desconexión (SA)
Instrucción: SA
Si la entrada (RLO en la ejecución de la instrucción) cambia de 1 a 0, el temporizador arranca y continua
corriendo. Si la entrada (RLO) cambia a 1 antes que el temporizador termine de contar, se resetea el
temporizador. Mientras el tiempo está corriendo, la salida vale 1.
Registros afectados: ER
Ejemplo:
8
Elección del Temporizador adecuado
9
Borrado de un Temporizador AWL S7-300/400
Instrucción: R T
Esta instrucción borra (reinicia) el temporizador indicado. El temporizador vuelve al estado de
reposo, es decir parado y con la salida igual a 0.
Registros afectados: ER
Ejemplo:
10
Re-arranque de un Temporizador AWL S7-300/400
Instrucción: FR T
Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta
habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha,
es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque
continúa procesándose con un RLO de 1. Registros afectados: ER
Ejemplo:
U E 2.0 //Empleamos la entrada 2.0 como re-arranque
FR T 1 //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1
U E 2.1 //Empleamos la entrada 2.1 como entrada del temporizador
L S5T#5s //Introducimos un valor de temporización de 5 segundos
SI T 1 //Empleamos el temporizador 1 como impulso
U T 1 //Leemos la salida del temporizador
= A 4.0 //Copiamos la salida del temporizador a la salida 4.0
Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta
habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha,
es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque
continúa procesándose con un RLO de 1. Registros afectados: ER
Ejemplo:
U E 2.0 //Empleamos la entrada 2.0 como re-arranque
FR T 1 //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1
U E 2.1 //Empleamos la entrada 2.1 como entrada del temporizador
L S5T#5s //Introducimos un valor de temporización de 5 segundos
SI T 1 //Empleamos el temporizador 1 como impulso
U T 1 //Leemos la salida del temporizador
= A 4.0 //Copiamos la salida del temporizador a la salida 4.0
Instrucciones: L T y LC T
Con la instrucción "L T" introducimos en el ACU 1 (parte baja) el valor del temporizador
especificado en binario. El valor en ACU 1 puede ser introducido en otro temporizador.
Con la instrucción "LC T" introducimos en el ACU 1 (parte baja) el valor del temporizador
especificado en BCD. En esta codificación no es posible pasar el valor de ACU 1 a otro
temporizador.
Ejemplos:
13
Operaciones con Temporizadores S7-300/400
TEMPORIZADORES “SE” Y “SI”
Temporizadores sin memoria: Tenemos los temporizadores “SE” y ”SI”. Analicemos cada
uno de ellos.
5º haga algo.
Además de lo que hemos visto, en cualquier momento podemos hacer un RESET del
temporizador. Para hacer un RESET necesitamos una condición. En el momento se
cumpla si al temporizador le correspondía estar a 1, automáticamente se pondrá a cero
aunque por su modo de funcionamiento no le corresponda.
15
Temporizadores SE y SI S7-300/400
Tenemos un semáforo con las tres luces verde, amarillo y rojo. Tenemos dos pulsadores
de mando: un pulsador de marcha y un pulsador de paro.
El ciclo es repetitivo hasta que se pulse el pulsador de paro. En ese momento se apaga
todo. Siempre que le dé al pulsador de marcha quiero que empiece por el verde.
16
Temporizadores SE y SI S7-300/400
18
Automatización de un depósito AWL S7-300/400
Se tiene un tanque de líquidos para su operación se tiene un selector de mando. Podemos seleccionar modo
manual o modo automático. Si seleccionamos modo manual, lo que queremos es que mientras esté conectada, la
bomba esté funcionando, y cuando desconectemos que se pare la bomba. No se quiere atender a la señalización
de nivel. En modo automático el nivel se debe mantener entre los detectores de nivel. Se dispone de una
protección térmica de motor con indicador luminoso en el panel de control.
Segmento 1: MANUAL
Segmento 2: AUTOMÁTICO
Para resolver este circuito: nos hace falta utilizar marcas auxiliares.
En un mismo bloque no podemos activar la misma salida dos veces
con condiciones diferentes porque se interfieren entre ellas.
Segmento 2: AUTOMÁTICO
21
Automatización de un depósito AWL S7-300/400
Ahora ya no funciona el térmico en el modo manual. Al utilizar marcas diferentes para cada tipo de
funcionamiento, el térmico sólo actúa sobre las marcas de modo automático. Sólo estamos
haciendo un reset de una de las marcas que activan la bomba. Nos falta resetear la otra marca.
Tendremos que añadir las siguientes líneas.
Otra posible solución sería programar el paro de la bomba por apertura del relé térmico en el último
segmento. Los paros de emergencia se suelen programar al final.
Ahora podemos hacer todas las objeciones que queramos y corregir sobre lo que ya tenemos
hecho. 22
Automatización de un depósito AWL S7-300/400
Por ejemplo, puedo querer asegurarme que cuando se pone en marcha en modo manual no está a
la vez en modo automático. Se puede suponer que por error se pueden dar las dos circunstancias a
la vez y quiero evitar ese error.
U E 0.0
UN E 0.1
Ahora ya tenemos la base del programa. Podemos añadir todo lo que creamos que sea necesario o
conveniente. Por ejemplo, en este caso no se ha tenido en cuenta la situación de que después de
haber estado en manual o en automático,volvamos a la posición de reposo. En automático he hecho
sets a ciertas marcas. Cuando volvamos a la posición de reposo esas marcas tendrán que volver a
cero. De lo contrario podría darse el caso de que estando en la posición de reposo, tengamos la
bomba en marcha. Para remediar esto podría añadir las siguientes instrucciones:
UN E 0.0
UN E 0.1
R A 4.0
R A 4.1
.......
23
Control cintas transportadoras AWL S7-300/400
Funcionamiento: Es un automatismo para seleccionar cajas por su tamaño. La cinta
transportadora A4.0 está activa esperando una caja. Cuando se activa el sensor E0.0 la cinta A4.1
se pone en marcha, y la cinta A4.0 se detiene. Para seleccionar la caja hay dos sensores: E0.1 y
E0.2, este último también indica que la caja sale de la cinta.
• Si la caja es grande se activarían los 2 sensores a la vez, por lo que la caja se desplazaría por la
cinta transportadora A5.0 que funcionaría durante 5 seg.
• Si la caja es pequeña nunca se activarían los dos sensores a la vez, y pasaría a la cinta para cajas
pequeñas A5.1 que funcionaría 4 seg. Una vez que la caja salga de la cinta intermedia A4.1
podremos procesar otra caja activando A4.0.
Las cajas van llenando dos contenedores. Como opción, se podrá poner dos contadores que
cuenten las cajas grandes y pequeñas, y que cuando lleguen a 7 cajas grandes y 5 pequeñas, se
detenga el proceso hasta que el operario sustituya los contenedores por otros vacíos y le dé a un
pulsador de acuse de recibo.
24
Automatización de un sistemas de cintas AWL S7-
300/400
//Activación de las cintas
UN A 4.1 //Si no está activada la cinta intermedia
= A 4.0 //que se activa la primera cinta
U E 0.0 //Si sensor de llegada de caja a la cinta intermedia
S A 4.1 //activar la cinta intermedia
U E 0.1
U E 0.2 //Si se activan los dos sensores
S M 0.0 //Es que es una caja grande, lo guardo en una marca
U E 0.2 //Cuando se activa el sensor de salida de la cinta
FN M 0.1 //intermedia por flanco positivo
= M0.2 //Lo guardo en una marca
Automatización Industrial
Índice
TEMA – Operaciones de Temporización
1. – Operaciones de Tiempo
2. – Orden de las Instrucciones
3. – Cargar una Temporización
4. – Salida de una Temporización
5. – Elección del Temporizador Apropiado
6. – Elección del Temporizador Apropiado
7. – Programación de Temporizadores
8. – Ejemplos de Programación de Temporizadores
8.1 – Generador de Impulsos
8.2 – Generador de Onda Cuadrada Simétrica
8.3 – Generador de Onda Cuadrada Asimétrica
8.4 – Arranque Estrella/Triángulo
Introducción
Operaciones de Tiempo
Operación Operando Significado
SP Arrancar como Impulso una Temporización
La temporización se arranca con el flanco creciente del RLO.
Con el RLO a “0” se pone a “0” la temporización.
Cualquier consulta durante la temporización indica estado de señal “1”.
SE Arrancar como Impulso Prolongado una Temporización
La temporización se arranca con el flanco creciente del RLO.
Un RLO a “0” no afecta la temporización.
Cualquier consulta durante la temporización indica estado de señal “1”.
SD Arrancar como Retardo a la Conexión una Temporización
La temporización se arranca con el flanco creciente del RLO.
Con el RLO a “0” se pone a “0” la temporización.
Las consultas indican estado de señal “1” cuando ha transcurrido la
temporización y en la entrada sigue aplicando el RLO.
SS Arrancar como Retardo a la Conexión Memorizada una Temporización
La temporización se arranca con el flanco creciente del RLO.
Un RLO a “0” no afecta la temporización.
Las consultas indican estado de señal “1” cuando ha transcurrido la
temporización.
El estado de señal es “0” cuando la temporización ha sido borrada con la
operación “R”.
SF Arrancar como Retardo a la Desconexión una Temporización
La temporización se arranca con el flanco decreciente del RLO.
Con el RLO a “1” se ajusta la temporización a su valor inicial.
Las consultas indican estado de señal “1” mientras el RLO a la entrada sea “1” o
corra la temporización.
R Reponer (borrar) una Temporización
La temporización se repone al valor inicial mientras el RLO sea “1”.
Un RLO “0” no afecta la temporización.
Las consultas indican estado de señal “0” mientras la temporización se reponga o
no haya sido todavía arrancada.
Identificador Parámetro AG S7-300
T 0 ... 127
Tipos de Temporizadores
Impulso
Arrancar
A I 0.0
L S5T#2S Poner a 0
SP T 1
Salida Q T <T T
Impulso
Prolongado
Arrancar
A I 0.1 Poner a 0
L S5T#2S
SE T 2 Salida Q T T T
Retardo a la
Conexión
Arrancar
A I 0.2 Poner a 0
L S5T#2S
SD T 3 Salida Q T T <T
Retardo a la
Conexión Arrancar
Memorizado
Poner a 0
A I 0.3
L S5T#2S Salida Q T T T
SS T 4
Retardo a la
Desconexión
Arrancar
A I 0.4 Poner a 0
L S5T#2S
SF T 5 Salida Q T T
Tipos de Temporizadores
Señal de entrada
Impulso (SP) t
Retraso a la conexión
memorizado (SS) t
Retraso a la
desconexión (SF) t
Elección del Temporizador Apropiado
L T 0 Arrancar
T DBW 6 I 0.0
LC T 0 Poner a cero
T QW 6 I 0.1
Corre el << T >>
CONSULTAS tiempo
BINARIAS Estado en Q
A T 0
Valor de
= Q 4.0 temporización
BI, BCD
Formato de la Palabra de Tiempo
15 12 11 8 7 4 3 0
• Para fijar el valor de tiempo hay que respetar las siguientes reglas sintácticas
- S5T#aHbbMccSdddMS
siendo: a=horas, bb=minutos, cc=segundos y ddd=milisegundos
- La base de tiempos se selecciona automáticamente y el valor del temporizador
se redondea al próximo número inferior con esa base de tiempo
DBW 10 - - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
126
- - 0 1 0 0 1 1
IW 126 127
0 0 1 1 0 0 1 1
333.1
Configuración de la Palabra - - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
para la Preselección del
Tiempo (333 x 0,1s)
Valor de Temporización (0..999 BCD)
Bits de Estado de los Temporizadores
(en preselección sin significado) Base de Tiempos
Lectura de un Temporizador
Tiempo actual en T1
L T1 LC T1
ACU 1
Base de
Tiempo Valor de Temporización
Valor de Temporización 15 13 12 10 9 0
15 10 9 0
LC T 10
L T 10
Dual BCD
15 10 9 0
0 0 0 0 0 0 15 13 12 11 8 7 4 3 0
ACU 1 0 0 ACU 1
102 101 100
Base de Valor de Temporización
Tiempo
Temporizador en modo Impulso
Cuadro FBD Parámetro Tipo de Area de Descripción
datos memoria
No. TIMER T Número de identificación del temporizador.
El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, Entrada de arranque
C
TV S5TIME I, Q, M, D, L Valor de temporización preseleccionado
o constante (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, Entrada de desactivación
C
BI WORD I, Q, M, D, L Tiempo restante (formato de entero)
BCD WORD I, Q, M, D, L Tiempo restante (formato BCD)
Q BOOL I, Q, M, D, L Estado del temporizador
Estados de
señal
1 I 0.0
I 0.0
0
1 T1
Q 4.5
0 Q 4.5
Tiempo en s
5s T1: Relé de tiempo con contacto de
paso al conectar
Estados de
señal
I 0.0
1
I 0.0
0
T2
1
Q 4.5 Q 4.5
0
Tiempo
T2: Relé de tiempo con formación de
t t paso al conectar
Estados de
señal
1
I 0.0 I 0.0
0
1
Q 4.5
0
T3
Tiempo en s
9s 9s Q 4.5
2
1
I 0.0 I 0.1
0
1
I 0.1
0 H 1 I 0.0 H 1
1
Q 4.5 T 4
0
T iem po en s Q 4.5 H 1
t t 4
H 1: R elé auxiliar
1 I 0.0
I 0.0
0
1
Q 4.5
0 T5
Tiempo en s
t t Q 4.5
1s - n * tp
A T 17
= Q 4.5
7 6 5 4 3 2 1 0
0.1 seg. (10 Hz)
0.2 seg. (5 Hz) – parpadeo
0.4 seg. (2.5 Hz) – intermitencia rápida
0.5 seg. (2 Hz)
0.8 seg. (1.25 Hz) – intermitencia
1.0 seg. (1 Hz)
1.6 seg. (0.625 Hz) – intermitencia lenta
2.0 seg. (0.5 Hz)
Cronograma Ejemplo
Se desea que la marca 2.0
1 funcione como un generador de
I 0.0
0 impulsos de periodo 2 segundos
1
M 2.0
0
Tiempo
< 2s > < 2s > < 2s >
STL FBD
A(
A I 0.0
AN T 2
L S5T#3S
SD T 1
NOP 0
NOP 0
NOP 0
A T 1
)
= Q 4.0
A Q 4.0
L S5T#5S
SD T 2
NOP 0
NOP 0
NOP 0
NOP 0
Segmento 2 Temporizador
A Q 4.0
Q 4.0 T1
AN Q 4.2 &
L S5T#3s S_ODT
SD T 1 Q 4.2
∆ Y ∆ 2 S BI
NOP0
NOP0 S5T# 3S
NOP0 TV BCD
NOP0
T T R Q
Segmento 3 Estrella
A Q 4.0
L Y T ∆ AN Q 4.2 Q 4.0
Q 4.0 Q 4.1 Q 4.2 AN T 1
= Q 4.1
Q 4.2 &
T1 Q 4.1
Segmento 4 Triángulo
A Q 4.0
A( Q 4.0
AN Q 4.1 Q 4.1
A T 2 &
O Q 4.2 &
T1
)
= Q 4.2 >=1
Q 4.2 Q 4.2
Ejemplo – Arranque Estrella/Triángulo II
ST L FBD STL FBD
Segm ento 1 Línea Segmento 1 Línea
A I 0 .0 A I 0.0
A( I 0 .0
O I 0 .1
A( I 0.0
O Q 4 .0 O I 0.1
) & O Q 4.0
I 0 .1
= Q 4 .0 ) I 0.1 &
>= 1 = Q 4.0
Q 4 .0 Q 4 .0
>=1
Q 4.0 Q 4.0
Segm ento 2 T emporizador
A Q 4 .0
A N Q 4 .2 Q 4.0 T 1 Segmento 2 Temporizador
& A Q 4.0
L S5 T# 3s S _O D T T1
Q 4.2 AN Q 4.2 Q 4.0
SD T 1 2 S BI &
N OP 0 L S5T#3s S_ODT
N OP 0 SD T 1 Q 4.2
S 5T # 3S TV BC D 2 S BI
N OP 0 NOP0
N OP 0 NOP0
R Q S5T# 3S TV BCD
NOP0
NOP0
Segm ento 3 Estrella R Q
A Q 4 .0
A N Q 4 .2 Q 4 .0
AN T 1 Segmento 3 Estrella
= Q 4 .1
Q 4 .2 & A Q 4.0
T1 Q 4 .1 AN Q 4.2 Q 4.0
AN T 1
Segm ento 4 T emporizador de Retardo = Q 4.1
Q 4.2 &
A Q 4 .0 T1 Q 4.1
Q 4.0 T 2
A N Q 4 .2 &
L S 5T #1 00 ms S _O D T
SD T 2 Q 4.1 Segmento 4 Triángulo
2 S BI
A Q 4 .2 A Q 4.0
R T 2 S 5T # 10 0M S
A I 0.3 Q 4.0
N OP 0 TV BC D
A(
N OP 0 I 0.3
Q 4.2 R Q
AN Q 4.1
N OP 0 A T 2 Q 4.1
SFB 3 TP
Generador de pulsos
SFB 4 TON
On delay
SFB 5 TOF
Off delay
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Simbólicos
PLC’s
Página 2
Curso 2009/10
Simbólicos
PLC’s
Página 3
Curso 2009/10
Flancos
• Se necesita una marca auxiliar que almacena el estado anterior, para poder
compararlos. Puede usarse cualquier marca.
PLC’s
Página 4
Curso 2009/10
Temporizadores
• Tipos de temporizadores
– SI - Temporizador de impulso
El tiempo máximo que la señal de salida permanece a 1 corresponde al valor de
temporización To programado.
La señal de salida permanece a 1 durante un tiempo inferior si la señal de entrada
cambia a 0.
PLC’s
Página 6
Curso 2009/10
Temporizadores
• Resumen
tipos
temporizadores
PLC’s
Página 7
Curso 2009/10
Temporizadores
• Tipos de temporizadores
– SE - Temporizador con retardo a la conexión
La señal de salida es 1 solamente si ha finalizado el tiempo programado y (AND)
la señal de entrada sigue siendo 1.
PLC’s
Página 8
Curso 2009/10
Temporizadores
• Resumen
tipos
temporizadores
PLC’s
Página 9
Curso 2009/10
Temporizadores
PLC’s
Página 10
Curso 2009/10
Temporizadores
• Inicialización:
U E124.0 L S5T#10S
L S5T#10S U E124.0
SI T0 SI T0
• Reseteo de un temporizador
• Ejemplo:
U E124.1
R T0
• Consulta de la salida
• Ejemplo:
U T0
= A124.0
PLC’s
Página 11
Curso 2009/10
Temporizadores
E X.x
RLO
A-
T0
T T T T
T
PLC’s
Página 12
Curso 2009/10
Temporizadores
E X.x
RLO
A-
T0
T T T
T
PLC’s
Página 13
Curso 2009/10
Temporizadores
E X.x
RLO
A-
T0
T T T
T T
PLC’s
Página 14
Curso 2009/10
Temporizadores
E X.x
RLO
A-
T0
T T
T T
PLC’s
Página 15
Curso 2009/10
Temporizadores
E X.x
RLO
Reset
A-
T0
T T T
T
PLC’s
Página 16
Curso 2009/10
Temporizadores
PLC’s
Página 17
Curso 2009/10
Temporizadores
SV SE SA SS
PLC’s
Página 18
Curso 2009/10
EJERCICIO (Entregable 2)
PLC’s
Página 19
Curso 2009/10
Tipos de temporizadores IEC
TP - Temporizador de impulsos.
TON - Temporizador a la conexión.
TONR -Temporizador a la conexión con memoria.
TOF - Temporizador a al desconexión.
Si eres un programador procedente del entorno de los S7-200, observarás que hay un
cambio radical en la forma que se utilizan dichos temporizadores. Si estás habituado a la
programación de los temporizadores hardware de los S7-300, también tendrás que
adaptarte al nuevo concepto ya que comprobarás que son bastante diferentes,. Sin
embargo, si alguna vez has utilizado los temporizadores software (Temporizadores IEC)
de la librería Standard Library>Systems Funciton Blocks del STEP 7, no tendrá ninguna
dificultad con los temporizadores de los S7-1200, ya que son prácticamente idénticos.
El siguiente tutorial se basa en el temporizador TON, pero puede ser utilizado de forma
similar con los demás tipos.
Se puede decir que esta es una solución muy "eléctrica" similar a la utilizada en los
automatismos cableados con relés.
En este caso no es necesario asignar ninguna bobina a la salida Q del temporizador. Sin
embargo, los contactos asociados deben leer el valor de dicha salida directamente del DB
a instancia. Para ello cada contacto debe tener la siguiente sintaxis: "Nombre del DB".Q
(en nuestro ejemplo "Temp_1".Q).
Ejemplo 3: Uso de un solo temporizador para acciones a diferentes valores
de tiempo.
La variable debe tener el formato de doble entero (DInt) y debe escribirse en la salida ET
del temporizador. El tiempo se almacena en ella en formato de milisegundos. Por tanto,
las operaciones de comparación deben hacerse teniendo esto en cuenta.
En el siguiente ejemplo se muestra como la salida Q0.6 se activa si el tiempo de
temporizador es mayor o igual a 3 segundos (3000ms) y la Q0.7 lo hace si el tiempo es
superior o igual a 8 segundos (8000ms).
De igual forma que para la salida Q del del DB a instancia, es posible leer la salida ET
(que tiene formato DInt) y operar con ella en las comparaciones sin necesidad de crear
ninguna variable intermedia.
En las comparaciones se puede utilizar una constate numérica en ms o directamente
emplear el dato en formato TIME:
Tema 6 Ejemplo
Ejemplo Programación
Estructurada
Div.
Div. Ingeniería de
Sistemas
Sistemas yy Automática
Automática Programación estructurada 1
FB
Programación estructurada 2
FB
Programación estructurada 3
FC
Programación estructurada 4
LLAMADA DESDE OB1
Programación estructurada 5
Mutiinstancia
MULTIINSTANCIA
Para ello se tiene que crear un
nuevo FB de orden superior (en
nuestro ejemplo, el FB10) y llamar
desde el mismo al FB1, que ha
permanecido invariable, como
"instancia local". En cada llamada,
el FB1 subordinado deposita sus
datos en el bloque de datos DB10
del FB10 de orden superior, con lo
cual no se tienen que asignar más
DBs al FB1. Todos los FBs
acceden a un único bloque de
Supongamos que su tarea de automatización requiere otros datos (aquí, el DB10).
controles de motor, p.ej., para un motor que funciona con aceite
de colza, para un motor de hidrógeno, etc.
Procediendo de la misma forma que lo hemos hecho
hasta ahora, utilizaríamos el FB1 asignándole un nuevo
DB por cada control adicional.
Programación estructurada 6
FB10
Programación estructurada 7
DB10
Programación estructurada 8
OB1
Programación estructurada 9
Tecnología en Automatización y Accionamientos -SCE
Manual de formación
para soluciones generales en automatización
Totally Integrated Automation (T I A )
MÓDULO B4
Bloques de datos
Este documento fue suministrado por SIEMENS Siemens A&D SCE (Tecnología en Automatización y
Accionamientos, Siemens A&D, coopera con la Educación) para formación. Siemens no hace ningún tipo de
garantía con respecto a su contenido.
El préstamo o copia de este documento, incluyendo el uso e informe de su contenido, sólo se permite dentro de
los centros de formación.
En caso de excepciones se requiere el permiso por escrito de Siemens A&D SCE (Mr. Knust: E-Mail:
michael.knust@hvr.siemens.de). Cualquier incumplimiento de estas normas estará sujeto al pago de los posibles
perjuicios causados. Todos los derechos quedan reservados para la traducción y posibilidad de patente.
Agradecemos al Ingeniero Michael Dziallas, a los tutores de las escuelas de formación profesional, así como a
todas aquellas personas que nos han prestado su colaboración para la elaboración de este documento.
PÁGINA:
1. Introducción.................................................................................................. 4
Información
Programación
Ejercicio Ejemplo
Notas
1. INTRODUCCIÓN
Programación Básica
De STEP 7
2 - 3 días Módulos A
Funciones Adicionales
de Programación STEP 7
2- 3 días Módulos B
Comunicación IT
con SIMATIC S7
1- 2 días Módulo E
En este módulo, el lector aprenderá sobre como utilizar los Bloques de Datos para almacenar
información.
Requirements:
Requisitos:
2 STEP 7
1 PC
3 PC Adapter
4 SIMATIC S7-300
Los Bloques de Datos (DBs) pueden ser utilizados en el programa para salvar información en la CPU.
Tienen una capacidad de memoria de hasta 8 KBytes ( 8192 Bytes ).
Existen dos tipos de Bloques de Datos. DBs Globales , en los cuales todos los OBs, FBs y FCs
pueden guardar o leer datos y DBs de Instancia, los cuales se encuentran asignados a un FB en
particular.
En los DBs, se pueden almacenar diferentes tipos de datos (p.e. BOOL o WORD ) de manera
aleatoria.
La estructura de un DB se genera a través de la herramienta Editor KOP/ AWL//FUP: Programar
Bloques de STEP7 .
En la estructura del programa STEP 7, los bloques de datos se encuentran de la siguiente manera:
OB 1 FB 1 DB 10 DB 11
DB de Instancia
Solo datos
locales al FB1
BE
UC FC2
OB = Bloque de Organización
FB = Bloque de Función
FC = Función
DB = Bloque de Datos
Los Bloques de Datos son generados y abiertos como cualquier otro tipo de bloque en la herramienta
Editor KOP/ AWL//FUP: Programar Bloques. Sirven para almacenar datos e información de
estados.
Por esto, los valores se seleccionarán con los interruptores 'S0' a 'S7' y visualizados en un módulo de
‘Display’ de salidas. La representación numérica del valor a almacenar se representa con estos
interruptores, donde el interruptor S7 tendrá el mayor peso del valor y el interruptor S1 el menor peso.
Entradas:
- Interruptor S0 = E 0.0
- Interruptor S1 = E 0.1
- Interruptor S2 = E 0.2
- Interruptor S3 = E 0.3
- Interruptor S4 = E 0.4
- Interruptor S5 = E 0.5
- Interruptor S6 = E 0.6
- Interruptor S7 = E 0.7
Salidas:
- Display = AW4
Para poder generar este ejemplo del programa, deben de los seguirse los siguientes pasos (Por eso el
programa se distribuye con la creación de la configuración del hardware):
Administrador SIMATIC.lnk
10. Cada registro del DB tiene un Nombre, Tipo, Valor Inicial y Comentario (opcional).
En el momento en que se pasa al campo siguiente, se le genera una dirección en le DB que no
puede ser alterada.
El bloque de datos será salvado y cargado el PLC . El selector de modo del PLC deberá
Nombre simbólico
con el que se Tipo de dato Valor inicial en formato Comentario
accede a la asignado (ver compatible con el tipo para
dirección absoluta tabla abajo) al de dato seleccionado ( documentación
asignada. registro. opcional ). ( opcional ).
La dirección absoluta es asignada por
STEP 7, cada vez que se valida un
registro con ENTER.
El formato de la dirección puede ser
BIT, BYTE, WORD, ....
Se puede acceder también a este
elemento a través de su dirección
absoluta (después de haber compilado
y cargado el DB).
11. El contenido de los valores del bloque de datos se puede modificar. No es recomendable hacerlo
a través del campo Valor Inicial. Se debe de hacer a través de la opción de menú Datos ( → Ver
→ Datos).
12. Es ahora cuando se puede introducir un nuevo valor en el campo Valor Actual y salvarlo en el
disco duro con así como cargarlo en la CPU con ( → Valor Actual → → ).
13. Para poder acceder a los registros del DB en el programa STEP 7, el OB1 debe ser abierto con
un doble click en el icono asociado del Administrador SIMATIC ( → Administrador SIMATIC →
OB1).
Ejemplo:
L DB 20. DBB2 Cargamos el byte de datos 2 del DB20 en el ACCU 1
L DB 22. DBW4 Cargamos el byte de datos 4 del DB22 en el ACCU 1
A DB 2. DBX5.6 Consultamos el estado del bit de datos 5.6 del DB2.
Para poder acceder a un elemento de datos, primero se debe abrir su correspondiente DB a través de
las instrucciones OPN DB o OPN DI. Una vez hecho esto, varios bits de datos (DBX/DIX),bytes de
datos (DBB/DIB), palabras de datos (DBW/DIW) o dobles palabras de datos (DBD/DID) pueden ser
procesadas en diferentes operaciones binarias o aritméticas.
Al utilizar la instrucción OPN DI se abre un DB de Instancia. Esta instrucción puede utilizarse también
con DBs globales, cuando 2 DBs permanecen abiertos al mismo tiempo.
Ejemplo:
OPN DB 20 Abrimos el DB20
OPN DI 22 Abrimos el DB22
L DBW 0 Cargamos la palabra de datos 0 del DB20 en el ACCU 1
T MW 1 Transferimos el contenido del ACCU 1 a la palabra de marcas 1
A DIX 0.0 Operación AND sobre el bit de datos 0.0 del DB22 con
A E 1.0 el bit de entradas 1.0
= A 4.0 Asignamos el resultado al bit de salidas digitales 4.0
Ejemplo:
CALL FB1, DB19
CONTADOR:= EW 0 La Variable CONTADOR corresponde con la dirección EW 0.
SALIDA:= A 4.0 La variable SALIDA corresponde con la dirección A 4.0.
15. Con el Editor KOP/ AWL//FUP: Programar Bloques, se dispone de una herramienta para
generar el programa STEP 7.
La selección del elemento de datos se realiza a través de los diferentes interruptores, como se
muestra en la imagen de abajo.
Cuando se hayan contemplado todas las posibilidades de selección con los interruptores (S0 a
16. Cuando el selector de modo del PLC se ponga en RUN, el programa comienza su ejecución.
Activando sólo uno de los interruptores S0 a S7, el valor almacenado en el correspondiente
registro del bloque de datos es visualizado en el módulo de salidas a través de la dirección AW4.
Automatización Industrial
Índice
TEMA – Módulos de Función
1. – Llamadas a Módulos
2. – Partes de un Módulo
2.1 – Variables Locales
3. – Funciones FC´s
4. – Módulos de Función FB´s
5. – Parámetros de Funciones
5.1 – Parámetros Formales
5.2 – Parámetros Actuales
6. – Módulos de Función y Módulos de Datos
6.1 – Módulos de Datos a Instancia
6.2 – Módulos de Multi-Instancia
Llamada a Módulos
Módulo que llama Módulo llamado
(OB, FB, FC, SFB, SFC) (FB, FC, SFB, SFC)
Ejecución del
Programa
Ejecución del
Instrucción que llama Programa
a otro módulo
(FB, FC, SFB, SFC)
Ejecución del
Programa
Instrucción que llama Ejecución del
a otro módulo Programa
Fin de Módulo:
• BEC. Fin de módulo condicionado al RLO
• BEU. Fin de módulo incondicional
• BE. Fin de módulo. Última sentencia del módulo
Uso del Parámetro EN/ENO
EN ENO
Partes de un Módulo
Tabla de
Declaración
de Variables
Sección de
Código
Datos Locales
– Variables Temporales
– Parámetros
Ejemplo:
FB “Totalizador” DB “TotalizadorDato”
Dirección Declaración Nombre Tipo Dirección Declaración Nombre Tipo
0.0 temp In INT 0.0 temp In INT
2.0 stat Total INT 2.0 stat Total INT
L #In
L #Total
+I
T #Total
Funciones FC´s
Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro
módulo. Cuando se la llama, la función actúa como una subrutina del programa.
Cuando termina de ejecutar su código, el control se devuelve al módulo y al
segmento desde el cual fue llamada.
Ejecución
del programa
Ejecución del
Instrucción que llama Programa
a otro módulo
Copia la parte de
declaración local del FB
DB10 FB1
Llamada a un
módulo con los Área de
parámetros Declaración Local
actuales
Ejemplo: Sección de Código
del módulo llamado
Call FB1,DB10 usando los valores
del área de
memoria local.
Parámetros de Funciones
Declaración de los Parámetros:
• Los parámetros de un módulo representan el interfaz entre el modulo que llama y
el módulo llamado
• Soportan parámetros las funciones y los módulos de función
• Los parámetros pueden declararse de IN, OUT ó IN_OUT
Parámetros Formales
• Los tipos de parámetros los clasifica en: datos simples, datos compuestos y parámetros
Parámetros Formales: Tipos de Datos (I)
Tipo BOOL
• Ocupan 8, 16 o 32 bits
• Se leen con la instrucción L (load). p. e. L xxxx
• Se escriben con la instrucción T (transfer). p.e. T xxxx
• Direcciones que pueden asignar tipos de datos elementales
• Direcciones que pueden asignar un tipo de parámetro
Parámetros Actuales
• Cuando se llama a un módulo se inicializan los parámetros con los
parámetros actuales con los que el módulo se ejecuta
• Pueden ser constantes, direcciones absolutas, direcciones simbólicas, ..
• El parámetro actual debe ser del mismo tipo que el parámetro del bloque
• Cuando se llama a funciones se deben inicializar todos los parámetros
• En los FBs es opcional inicializar todos o sólo alguno de los parámetros
Parámetros Actuales: Tipos de Datos Básicos
• Son permitidos como parámetros actuales de tipos de datos básicos:
Call FC10
Medida_1:=Valor_1
Medida_2:=Valor_2
Medida_Total:= Valor_Total
FC1
SUB_I
MW2 Entrada1 Salida_A AW20 O #Salida_A
#TEMP1 IN1
6869 Entrada2 #Entrada3 IN2
MW16 Entrada3
FBD DB45
FB7 Llama al FB7 (utilizando
EN ENO un Módulo de Datos
a instancia DB45) y le
I 1.0 Comenzar Correr M2.1 pasa los parámetros
I 1.1 Parar
Direcciones “Actuales” Longitud
donde residen los datos MW20
Parámetros “Formales”
o se almacenarán del FB
FB sin DB a Instancia FC
Sección de Sección de
Código Código
Módulos de Función y Módulos de Datos (II)
Direcciones de Datos Dirección de datos Localizado en DB abierto vía el
Registro DB Registro DI
Bit DBX y.x DIX y.x
Byte DBB y DIB y
Palabra DBW y DIW y
Doble palabra DBD y DID y
Direccionamiento Completo
• Se hace en dos pasos:
• asignar nombre simbólico al DB en la tabla de símbolos. p.e. “MOTOR1” al DB 51
• asignar dirección de los datos en el módulos de datos. p.e. “PAR” a la DBW 20
• Con direccionamineto simbólico queda: L “MOTOR1”.PAR
• Con direccionamiento absoluto queda: L DB 51.DBW 20
Módulo de Datos
FB que ejecuta Multi-instancia
las instrucciones Usar este asociado a un FB
lógicas área primero
Segmentos dentro
del DB que contendrán
FB que maneja Usar este
los datos separados de
la sección del módulo área después los parámetros pasados
de datos a instancia
que mantendrá los Usar este
últimos parámetros área después
Módulos de Datos Multi-Instancia (II)
Variables usadas:
setpoint_value: real
sum: real
actual_value: real
DB Multi instancia
Tema 2: Programación de PLCs
1. STEP 7
PLC’s
Página 1
Curso 2009/10
Introducción
Facilita modularidad del programa, y clarifica su organización y análisis
Permite generar funciones reutilizables y no repetir código
Simplifica el test y la puesta en servicio
FC FB
OB1
Sistema
operativo
FB FC
SFC
SFB
Otros
PLC’s
Curso 2009/10 OBs Página 2
Introducción
OB 1 FB1 FB10
Motor 1 Controlador
Modularización de tareas:
. . .
– Las tareas parciales se solucionan
con sus propios módulos FB2 FC 5 SFC
– La asignación de parámetros Valor Copia
Válvulas límite
flexibiliza la programación
• Ejemplo: Ciclo de taladro con
DB 2
profundidad asignable por OB 1 FB 1
parámetro Direc. Decl. Nombre Tipo
0.0 in Marcha BOOL
. 0.1 in Paro BOOL
Reutilización de los Módulos: .
2.0
4.0
out
out
Motor_on
Velocidad
BOOL
INT
– Los Módulos pueden llamarse CALL FB1, DB2
6.0
0.0
stat
temp
Veloc_ant
Calc_1
INT
INT
tantas veces como se necesite Marcha :=E 0.0
.
Paro :=E 0.1
– Restricciones: Motor_on :=A12.0
.
.
Velocidad :=AW14 U #Marcha
• no se tiene acceso a UN #Paro
.
direcciones globales .
=
.
#Motor_on
PLC’s
Página 3
Curso 2009/10
Introducción
PLC’s
Página 4
Curso 2009/10
Introducción
absoluto simbólico
Acceso
PLC’s
Página 5
Curso 2009/10
Introducción
• Parámetros de Entrada (IN) solo en FBs, FCs, SFBs y SFCs
Con ayuda de los parámetros de entrada se pueden asignar datos necesarios para el
procesamiento del bloque.
PLC’s
Página 6
Curso 2009/10
Introducción
Dir. Decl. Nombre Tipo Valor inicial ...
0.0 in Marcha BOOL FALSE
0.1 in Paro BOOL TRUE
Los parámetros son canales para 2.0 in Velocidad INT 0
transferir información: 2.0 out Motor_on BOOL FALSE
– Parámetros de Entrada (In): 8.0 out Consigna INT 0
– Parámetros de Salida (Out): 10.0 inout EMER_OFF BOOL FALSE
... stat ... ... ...
– Parámetros E/S (In/Out):
... temp .. ... ...
PLC’s
Página 7
Curso 2009/10
Bloques de organización
• Los OBs son llamados cíclicamente por el sistema operativo. Nunca por otro
módulo lógico . Un OB puede ser interrumpido por otro OB de mayor prioridad.
PLC’s
Página 8
Curso 2009/10
Bloques de organización
Arranque
OB 100
OB 101
OB 102
PLC’s
Página 9
Curso 2009/10
Bloques de organización
Rearranque Completo
automatico manual
Habilitación de Salidas
C Lectura de la PAE
I
C Ejecución del OB1
L
O
Escritura de la PAA
PLC’s
Página 11
Curso 2009/10
Funciones
• Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro
módulo.
• Cuando se la llama, la función actúa como una subrutina del programa. Cuando
termina de ejecutar su código, el control se devuelve al módulo y al segmento desde el
cual fue llamada.
Programa Principal OB1 Módulo Subrutina FC
Ejecución
del programa
Ejecución del
Instrucción que llama Programa
a otro módulo
fin de bloque
PLC’s
Página 12
Curso 2009/10
Funciones
Módulos parametrizables:
– tantos parámetros de entrada,
salida, y entrada/salida como se Function FC10
necesiten. in On_1 BOOL
Ejecución in On_2 BOOL
– sin memoria, p.e. sólo variables del programa out Off BOOL
...
temporales
CALL FC 10
– sin acceso a variables globales y On_1 := E 0.1 ...
direcciones absolutas On_2 :=
Off :=
E 0.2
A8.0
U
U
#On_1
#On_2
= #Off
– con los mismos parámetros de ...
entrada devuelven el mismo
resultado
– Amplían el juego de
instrucciones del procesador
PLC’s
Página 13
Curso 2009/10
Funciones: sin parámetros
PLC’s
Página 14
Curso 2009/10
Funciones: con parámetros
• Los parámetros actuales serán los que se transfieran desde el bloque actual a la
función, siendo estos valores asignados a los parámetros formales de la FC para
que trabaje con ellos
• Ejemplos:
PLC’s
Página 16
Curso 2009/10
Funciones
Instrucción CALL
– El tiempo de procesamiento para CALL depende del número y la posición de
memoria de los parámetros actuales
– La instrucción CALL asegura que los parámetros de módulo son provistos
correctamente con datos actuales
– Ejemplo:
• CALL FC10
On_1 := E 0.1
On_2 := E 0.2
Off := A 8.0
Instrucción de llamada UC y CC
– Llamada a módulo independiente del RLO (UC) o dependiente del RLO (CC)
• Ejemplos: UC FC20 ó CC FC20
– Sólo se pueden usar cuando la FC no tiene parámetros
PLC’s
Página 17
Curso 2009/10
Bloques de función
PLC’s
Página 18
Curso 2009/10
Bloques de función
PLC’s
Página 20
Curso 2009/10
Bloques de función
PLC’s
Página 21
Curso 2009/10
Bloques de datos
PLC’s
Página 22
Curso 2009/10
Bloques de datos globales
• Tras la creación de un DB, éste debe ser definido (rellenado) con las variables que se desee.
– Tipo de variables:
• Simple (bool, byte, entero, palabra, doble palabra).
• Compuesto (STRING, DATE_AND_TIME, ARRAY).
• Estructuras.
• Acceso: L DB8
U DB8.DBX3.0 lleva implícito AUF DB8
T DB7.DBW3 lleva implícito AUF DB7
U DB6.DBD4 lleva implícito AUF DB6
• Los DB permiten la asignación de simbólicos.
PLC’s
Página 23
Curso 2009/10
Bloques de datos globales
DB 99 "Valores" Acceso Acceso Total
Tradicional
Dir. Nombre Tipo absoluto simbólico
0.0 Estado BOOL AUF "Valores"
o U DB99.DBX0.0 o U “Valores".Estado
U DBX 0.0
1.0 Estados BYTE
AUF DB 99
8.0 Peso[2] REAL o L DB99.DBD4 o L "Valores".Peso[1]
L DBD 8
PLC’s
Página 24
Curso 2009/10
Bloques de datos globales
PLC’s
Página 25
Curso 2009/10
Bloques de datos de instancia
CALL FB22,DB202
CALL FB22,DB203
PLC’s
Página 26
Curso 2009/10
Resumen
FC FB
Len-
guaje Sin parámetros Con parámetros sin param., sin DB inst. Con param., con DB inst.
FC1
( CALL ) DB3
FC2 FB1 FB2
FC1 EN ENO
KOP EN ENO EN ENO
EN ENO
Par1 Par1
Par3 Par2 Par3
Par2
DB3
FC2 FB1 FB2
EN Par3
PLC’s EN EN Par3
Página 27
Curso 2009/10 Par1 Par1
ENO
Par2 ENO Par2
ENO
EJERCICIO (Entregable 7)
PLC’s
Página 28
Curso 2009/10
EJERCICIO (Entregable 7)
PLC’s
Página 29
Curso 2009/10
Direccionamiento Indirecto S7-1200 y S7-1500
El ejemplo de programación con un autómata Siemens S7-1500 (también es valido para S7-1200)
muestra como trabajar con direccioamiento indirecto dentro de un ARRAY
Mediante esta función podemos acceder a diferentes áreas de memoria de una manera indirecta inidicada
por un índice o puntero. Este tipo de direccionamiento nos puede llegar a ahorrar muchas lineas de
programa sobre todo cuando trabajamos moviendo datos.
Si por ejemplo queremos mover un valor a diferentes puntos de una variable array podemos hacer dos
cosas:
DIRECCIONAMIENTO DIRECTO
Creamos una función MOVE para mover el valor a cada uno de los punto de la variable array
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[1]
DIRECCIONAMIENTO INDIRECTO
Creamos una sola función MOVE en donde moveremos el valor a donde nos indique el valor de la
variable "Puntero"
De esta forma cambiando el valor de "Puntero" podemos acceder con misma función MOVEa cualqueir
punto del Array
Programación del Ejemplo
## Temporización de registro
Al Habilitar el registro de datos "Habilita_Registro" lanzamos un temporizador cada 10 Seg que activara
el bit "Flag_Registro" que realiza el registro de datos y reinicia el temporizador
De esta manera generamos cada 10 segundos un bit que realiza el registro de forma periódica
## Registro de datos e incremento de puntero
Al activarse el "Flag_Registro" realizamos dos cosas:
- Incremento del valor del "Puntero" con la instrucción INC
- Mover el valor de "Tenperatura" al Array "Registro_Temperatura" que nos marca el puntero
## Fin de registro
Comparamos el valor de "Puntero" con +10 (el tamaño del array) y si es igual a 10 ponemos a reset el bit
"Habilita_Rgistro"
De esta forma tenemos 10 registro en el Array
Aquí podemos ver la tabla del Array y sus registros
Direccionamiento indirecto en Step 7 (I) –
Memoria y punteros a área
3 marzo, 2014 en Teoría, Tutoriales, Videos 18 Comentarios
tweet
inShare
Para empezar con el tema del direccionamiento indirecto, vamos a explicar una serie de conceptos básicos
y luego nos pondremos con la formas más básicas de direccionamientos indirectos.
Direccionamiento Inmediato
Direccionamiento Directo
Direccionamiento Indirecto
El direccionamiento inmediato es cargar directamente el valor del operando (de cualquier tipo), por
ejemplo L 32.
El direccionamiento directo será del tipo L MW10 (donde el valor de MW10 sea el 32 anterior) es
decir, en la carga se apunta directamente al sitio de la memoria donde reside el valor que queremos
cargar.
Direccionamiento indirecto
Como decimos, podemos acceder a los valores de la memoria de una forma indirecta.. vamos a querer saber
el contenido de una variable (o área de memoria) usando otra variable que se referirá a está área de la que
queremos saber su valor.
Parece un poco enrevesado pero es bastante fácil de entender mediante un ejemplo: podemos abrir el DB10
con AUF de dos formas:
AUF DB10
o bien:
Esta última forma de cargar el valor de la marca MW10 es uno de los tipos de direccionamiento indirecto,
pero hay varios:
L 10
T MW 10
U T[MW10]
Digamos que nos sirve para valores operandos que están indexados mediante un número como son los
DB , los contadores etc. Para hacer referencia a ellos, nos servimos de un número ya que existe una lista
de estos elementos.
Un puntero no es más que una dirección. Nada más. No tiene un valor, sólo apunta con el dedo como un
niño pequeño dónde mirar, pero no dice qué está viendo.
Como ves hay una gran diferencia. Los que tienen área de memoria se posicionan, dentro de todas las
áreas la memoria en una en concreta, y de esa, en una posición definida (siguen sin decir lo que vale, pero
la dirección es completa).
En cambio, los que no llevan área de memoria, simplemente es una dirección. ¡pero no sabemos de qué
área de memoria!
En nuestro caso, y siguiendo con los direccionamientos indirectos, vamos a usar los punteros SIN área de
memoria.
L P#10.0
T MD10
U E[MD10]
= A [MD10]
En este ejemplo de una imaginación sin parangón, lo que hemos hecho es cargar un puntero (en el área de
direcciones de la que ya hablaremos AR1) y se lo hemos transferido a la marca MD10. Por tanto, el
código de arriba sería lo mismo que escribir:
U E10.0
= A10.0
¿Ves a dónde te puede llevar esto y las posibilidades que ofrece? ¿También se te ha erizado el bello?.
Sigamos…
Resumiendo diremos que le damos la dirección bien mediante el puntero (P#10.0) o contando con los
dedos cuántos bits tiene la dirección. Es decir:
Podemos hacer, al igual que en el caso de arriba:
T MD10
U E[MD10]
= A [MD10]
¿Es lo mismo? Extrictamente lo mismo. Hemos creado el puntero de la misma forma. Por tanto, de forma
numérica, un puntero se verá como el número de bits de ese puntero.
inShare4
En esta nueva entrada sobre direccionamiento indirecto es con la que terminamos el curso. En ella vamos
a ver la segunda parte de cómo automatizar y recorrer zonas de memoria para trabajar con ellas de forma
indirecta y recursiva. Lo primero que has de hacer es leer el direccionamiento indirecto en Step 7 (I) si
no lo has hecho ya.
Registro de direcciones
Como sabes, cuando se carga un valor, hay dos registros, el ACU1 y el ACU2. Pues también existen dos
registros de direcciones, el AR1 y el AR2 para usarlos en el direccionamiento indirecto.
La forma de cargar y transferir los valores a los registros son de la siguientes 3 maneras:
LAR1 P#1.0
L P#1.0
LAR1
o, como dijimos en direccionamiento indirecto (I), podemos crear al puntero diciendo cuántos bits tiene
la dirección
L8
LAR1
Hará exactamente lo mismo que los casos anteriores. Hay que puntualizar que si queremos acceder a una
dirección que tenga más de 32768 bits (16 bits) la carga debería ser del estilo:
L L#80000
TAR1
Un poco altita la dirección aunque esa sería la forma. A decir verdad, lo suyo es jugar siempre con números
en doble palabra como ya veremos más adelante aunque hacerlo como enteros también es válido aunque
limitado a la capacidad de una palabra frente a la doble.
Pues a la hora de la verdad, y para nosotros, no mucha cosa. En resumen, y que permitan los puristas, lo
que vamos a hacer es o bien:
LAR1 P#50.0 // Cargar el puntero
L MW [AR1, P#10.0] // Decir el operando (en este caso de carga), el tipo de área (marcas) y la dirección.
¿Resultado?
Pues básicamente el mismo. La diferencia es que en el direccionamiento de tipo intraárea, el contenido del
AR1 va a tener la misma pinta que el direccionamiento por memoria que veíamos en el capítulo I. No tiene
el área de memoria asignado (marcas en nuestro caso).
Personalmente intraárea, pero supongo que es cuestión de gustos. Además imaginemos que mezclamos las
cosas y hacemos lo siguiente:
LAR1 P#E50.0
L MW[AR1,P#10.0]
Como veis hemos indicado el área en la carga del registro AR1 y luego hacemos una carga de MW…
¿vamos a mandar la CPU a Stop o crearemos un agujero espacio-tiempo?
Simplemente del AR1 tomaremos la dirección, pero no la zona de memoria y ejecutaremos el operando de
carga MW.
Por tanto, y a mi juicio, es mejor siempre usar el intraárea. Me parece más metódico ya que siempre vas a
construir los punteros de la misma forma, independientemente del uso que le vayas a dar posteriormente.
Muy bien, me parece estupendo… pero me he perdido en el L MW [AR1, P#10.0]… ¿qué significa?
Muy sencillo. Lo que hay entre corchetes es la dirección inicial más un desplazamiento. De tal forma que
en nuestro ejemplo, realmente estamos leyendo la MW60 (50 del AR1 +10 del offset por así decirlo).
¿Qué pasa si cargo un P#50.0 en el AR1, cargo un offset P#0.1 y hago una lectura MB, MW o MD?
Pues que estarías provocando un bonito error de runtime. Ya que para hacer una lectura de byte, word o
doble word, necesitas que el bit del puntero sea 0 (ojo, el bit, no el byte). No puedes crear un MW50.1
como puedes imaginar. Así que cuidadín con eso.
¿Qué más puedo hacer con los registros?
Como no sólamente del AR1 vive el hombre, existe también un segundo registro, el AR2 . Con esta pareja,
podemos jugar indistintamente para cargar nuestros punteros e incluso combinarlos en las operaciones.
LAR1 P#50.0
LAR2 P#10.0
L MW[AR1,p#0.0]
T MW[AR2,P#10.0]
Offtopic: Y no, no es un 102, es un 1 O 2. A la RAE le ha parecido buena idea no tener que acentuar desde
hace un tiempo la O entre números. Qué país.
TARn <Dirección>: Cargamos el contenido del ARn en la dirección. Por ejemplo TAR1 MD50
+ARn <Puntero>: Añadimos al ARn el puntero que queramos. Por ejemplo, +AR1 P#10.0
TAR1 AR2, con lo que recuperamos el contenido del AR1 y se lo cargamos en el AR2.
Como ves las combinaciones son unas cuantas si bien se pueden resumir en asignación y suma.
http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=24520698&nodeid0=37
217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&vi
ewreg=WW
Instrucciones:
En el direccionamiento indirecto en el STEP 7, se diferencia entre:
Ejemplos:
Una propiedad decisiva del puntero de área es que los cálculos del puntero se pueden realizar con las
operaciones normales para coma fija. Esto quiere decir lo siguiente en cualquier puntero:
Ejemplos:
En los cálculos con punteros de área, sólo se puede utilizar un puntero con denominación de área
(diferente a cero). En caso contrario, las posiciones del identificador de área se "suman" o "restan", y
aparece una identificación no válida.
Ejemplos:
Para la colocación de los operandos de las direcciones (en este caso, la MD44) en las posibles áreas de
memoria, son válidas las mismas declaraciones que con el direccionamiento indirecto con un número
(consulte arriba). La diferencia es que se necesita una doble palabra.
En el direccionamiento indirecto por memoria, el identificador de área en el puntero tiene que ser 0.
Sólo se pueden utilizar punteros internos de área.
En el acceso indirecto a un Byte, palabra o doble palabra, la dirección del Bit en el puntero tiene que
ser 0.
Ejemplos:
Ejemplo b
LAR1 P#E 2.0 Carga el puntero para la
entrada 2.0
// Direccionamiento indirecto por registro con un .......
área externa
U [AR1, P#0.0] Consulta de la entrada .......
2.0 para saber si vale
"1"
Ejemplo c
LAR1 P#DBX 2.0 Carga el puntero para el
bit de datos globales 2.0
L MW [AR1, P#0.0] Carga la palabra de
marcas 2
....... .......
Ejemplo d1
LAR1 P#A 2.0 Carga el puntero para la
salida 2.0 en el AR1
= [AR1, P#2.2] Asigna el VKE actual a
la salida 4.2
Ejemplo d2
+AR1 P#2.0 Aumenta el puntero en
el registro en 2 Bytes
T W [AR1, P#0.0] Escribe desde la palabra .......
baja del acumulador 1
en la palabra de salida
4.0
L P#4.5 Carga el puntero para el
Byte4, Bit 5
+AR1 Aumenta el puntero en
el registro con el
AKKU1
S [AR1, P#1.0] Activa la salida 9.5 si
VKE = 1
Si falta el identificador (ejemplo a), hay que indicarlo en las instrucciones indirectas por registro
Si el identificador está dentro del puntero (ejemplo b), puede faltar en las instrucciones
indirectas por registro. Tenga en cuenta en este caso que hay que indicar el ancho de acceso
Byte, Word, Doble Word en las operaciones de carga y transferencia (ejemplo d2).
Si el identificador está dentro del puntero y se indica en la instrucción (ejemplo c), vale el área indicada
en la instrucción; El identificador en el puntero se ignora.
En las instrucciones indirectas por registro, se puede indicar un OFFSET (ejemplo d). Éste se suma al
puntero del registro en caso de ejecutarse el acceso. El contenido del registro permanece invariante.
La instrucción "+AR1" sólo tiene en cuenta la palabra baja del OFFSET indicado en el AKKU1 o
como operando, e interpreta los 16 Bits como un número con signo:
Ejemplos:
Debido a que la operación "+AR1" sólo tiene en cuenta la palabra baja del AKKU1, también se
pueden utilizar punteros con identificador de área: El identificador no molesta en la palabra alta; Al
contrario que en el cálculo del puntero con operaciones con enteros.
Por favor, tenga en cuenta que, independientemente de las posibilidades para aumentar y disminuir el
registro de direcciones en una instrucción indirecta por registros, el contenido del registro siempre tiene
que estar dentro del rango P<identificador eventual> 0.0 ..... P<identificador eventual> 65535.7.
Indicación general
De forma análoga al registro de direcciones 1, en las CPUs existe un segundo registro AR2 con las
mismas posibilidades de utilización.
Las ventajas de la utilización del direccionamiento indirecto por memoria, con un puntero en la zona de
marcas, son las siguientes:
Ambos contienen el puntero de área en los 32 bits más bajos, tal como se ha mostrado arriba.
Advertencia:
En la ayuda Online del STEP 7, se dispone de información adicional y ejemplos en
Figura 01
Ejemplo 1
Para el parámetro de entrada "Data2" aquí se asigna el parámetro formal del tipo "BLOCK_DB". El
contenido de "Data2" se corresponde con el número del bloque de datos a abrir.
Ejemplo 2
El parámetro de entrada "InWord" del tipo "WORD" se asigna a la variable temporal "Data1". El
número que se tiene en la variable temporal "Data1" de tipo WORD es el número del bloque de datos
global. El bloque de datos global se carga con la instrucción AUF DB[Data1].
Ejemplo 3
Con el direccionamiento indirecto de memoria, en la palabra de marcas MW20 se carga, por ejemplo, el
número 10 de DB. Con la instrucción AUF DB[MW20] se abre el bloque de datos global, cuyo número
está disponible en la palabra de marcas MW20. AUF DB[MW20] es lo mismo que la instrucción AUF
DB10.
Otras instrucciones para abrir un bloque de datos mediante direccionamiento indirecto es posible con
AUF DB[DBW <Número>] y AUF DB[DIW <Número>].
Si no se utilizan FBs, se pueden utilizar libremente los 2 registros de DB, es decir, todas las variantes se
pueden abrir con AUF DI ....
Indicación
Tenga también en cuenta para el tipo de parámetro "BLOCK_DB" la información indicada en la ayuda
online del STEP 7, bajo el punto "Tipos de datos admisibles al asignar parámetros".
Conceptos de búsqueda
Direccionamiento indirecto, llamada a un DB
puntero a DB
Supongamos que tu DB es el DB1, con datos byte ( Valen tambien nombres simbólicos)
a partir de aquí colocas las instrucciones de lo que harás con el valor obtenido, en el próximo scan el puntero se
incrementará en 4 con lo que iras a parar a la siguiente palabra doble del DB.
Por supuesto la variable #actual debe ser estática o bien puede ser una marca, para que no se pierda al salir del
bloque en el que coloques tu código, el valor que puse de 100 para el último valor es simplemente un ejemplo,
ahí colocas tu último valor a leer +4.
Si en vez de leer los valores de la tabla quisiera escribirlos en una tabla de igual tamano, en la ultima instruccion
tendria que poner:
T DBD [AR1,P#0.0]
en vez de:
L DBD [AR1,P#0.0]
Puntero a DB
Lo primero que haces es fijar un puntero al comienzo de la zona del bloque de datos de la que quieras leer:
LAR1 P#DBX0.0
Con esto lo que haces es decirle a tu programa "bien, ahora voy a comenzar a trabajar a partir del Byte 0 Bit 0 del
bloque que tengo abierto", este es el concepto del puntero, le indico el punto de referencia sobre el que voy a
trabajar, si por ejemplo quisieras empezar a trabajar a partir de tu segundo dato obviando el primero, el puntero
sería P#DBX4.0 ( ya que cada palabra ocupa 4 Bytes), o sea le diría a mi programa: " comenzamos a leer el bloque
pero a partir del Byte 4 Bit 0".
En el primer ciclo de lectura el valor de #actual es 0 ya que no tenía ningun valor previo. Lo primero que hago a
continuacion es verificar si llegue al final de la lectura, obviamente esto no es así ya que #actual ( o MW10 si
usaste una marca) es 0, sumo ahora 4 al valor de #actual para ya prepararlo para el siguiente ciclo, obviamente si
usara el valor que ahora tiene #actual para sumarle al puntero leería la palabra doble que empieza en 4.0 en el
DB, es decir estaría saltandome el primer dato, por lo cual ejecuto un pequeño truco: le resto 4 al valor de #actual
pero no transfiero el valor a #actual, con lo cual el resultado solo me queda en el ACU1 este resultado lo desplazo
3 lugares a la izquierda y lo sumo al puntero con la instruccion +AR1 con lo cual ahora estoy posicionado en---->
DBX0.0 + #actual - 4, como en este primer ciclo #actual es 4 --->AR1 es 0 por lo que no me moví del inicio del
bloque y leo la primera palabra doble del DB con la instrucción:
L DBD [AR1,P#0.0]
En el siguiente ciclo sumo 4 a #actual con lo que ahora valdrá 8 y, luego de la resta y la suma, AR1 será 4 con lo
cual leo mi segundo valor, y así sucesivamente (el ciclo se repite hasta que el valor de #actual sea = al fin del
bloque +4), y luego reinicia desde 0 nuevamente.
Respecto del valor de control para verificar si llegaste al final de tu DB, debes tener en cuenta lo siguiente: Las
direcciones de los PLC´s estan expresadas en Bytes, y las correspondientes a los DB no son la excepción, por lo
que si consideras que las palabras dobles ocupan 4 Bytes y tu quieres leer 15 valores de palabras dobles deben
hacer:
15*4= 60
Es decir tu bloque de datos tendrá una longitud de 60 Bytes, por lo que le valor de control será precisamente ese,
es decir deberás contrastar #actual contra 60 para verificar si llegaste al final del bloque, ya que no debes poner
tu número de dato (1,2,3,4,etc.) sino la direccion en el DB ( ya que trabajas con punteros a direcciones).
Saludos
Ricardo
Tipo y Tamaño Formato- Rango y notación numérica Ejemplo
descripción Opciones
en Bits (Valores máximo y mínimo)
BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE
BYTE (Byte) 8 Número B#16#0 a B#16#FF B#16#10
Hexadecimal
WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000
Número W#16#0 a W#16#FFFF W#16#1000
Hexadecimal
BCD C#0 a C#999 C#998
Número Decimal B#(0,0) a B#(255,255) B#(10,20)
sin signo
DWORD (Doble 32 Número Binario 2#0 a 2#1000_0001_0001_1000_10
Palabra) 2#1111_1111_1111_1111_1111_1111 11_1011_0111_1111
_1111_1111
Número DW#16#0000_0000 a DW#16#00A2_1234
Hexadecimal DW#16#FFFF_FFFF
Número Decimal B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)
sin signo
INT (Entero) 16 Número Decimal -32768 a 32767 1
con signo
DINT (Int,32 bit) 32 Número Decimal L#-2147483648 a L#2147483647 L#1
con signo
REAL (Número en 32 Número en coma Máximo: +/-3.402823e+38 1.234567e+13
coma flotante) flotante IEEE Mínimo: +/-1.175495e-38
S5TIME 16 Tiempo S7 en S5T#0H_0M_0S_10MS a S5T#0H_1M_0S_0MS
(Tiempo Simatic) pasos de 10 ms S5T#2H_46M_30S_0MS and S5TIME#1H_1M_0S_0MS
S5T#0H_0M_0S_0MS
TIME 32 Tiempo IEC en -T#24D_20H_31M_23S_648MS a T#0D_1H_1M_0S_0MS
(Tiempo IEC) pasos desde T#24D_20H_31M_23S_647MS TIME#0D_1H_1M_0S_0MS
1ms, entero con
signo
DATE 16 Fecha IEC en D#1990-1-1 a D#2168-12-31 DATE#1994-3-15
(Fecha IEC) pasos de 1 día
TIME_OF_DAY 32 Tiempo en pasos TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3
(Fecha y Hora) de 1ms
CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´
Existen tres posibilidades de acceso a los datos:
Ejemplo:
Ejemplo:
A DIX 0.0 Operación AND sobre el bit de datos 0.0 del DB22 con
Ejemplo:
Automatización Industrial
Índice
TEMA – Direccionamiento en STEP7
1. – Tipos de Direccionamiento
1.1 – Direccionamiento Inmediato
1.2 – Direccionamiento Directo
1.3 – Direccionamiento Indirecto
2. – Punteros y Tipos de Punteros
2.1 – Punteros de Número
2.2 – Punteros a Área
2.3 – Punteros a DB
2.4 – Punteros ANY
3. – Direccionamiento Indirecto por Memoria
4. – Direccionamiento Indirecto por Registro
5. – Operaciones Relacionadas con Registros
Tipos de Direccionamiento
Tipos de Direccionamiento
• Direccionamiento Inmediato
• Direccionamiento Directo
• Direccionamiento Indirecto
Direccionamiento Inmediato
El valor del operando está codificado directamente en la operación
Ejemplo: L W#16#3478
Direccionamiento Directo
La dirección del operando se encuentra codificada en la operación
Ejemplo: L MW 122; A I 1.2
Direccionamiento Indirecto
El operando indica la dirección del valor que va a procesar la operación.
Ejemplo: A I[MD 2];
Direccionamiento Inmediato
Direccionamiento Inmediato
El valor del operando está codificado directamente en la operación, es decir que la operación
va seguida directamente del operando con el que operará. Por otra parte, una operación
también puede aportar su propio valor.
Direccionamiento Directo
Direccionamiento Directo
La dirección del operando se encuentra codificada en la operación, es decir, el operando
indica la dirección del valor que va a procesar la operación. El operando se compone de dos
partes:
• un identificador (p. ej. “IB” para “byte de entrada”)
• una dirección exacta dentro del área de memoria indicada por el identificador.
Direccionamiento Directo
Tipos de Punteros
• Punteros a Área: son de 32 bits de longitud y contiene una dirección específica
• Punteros a DB: son de 48 bits de longitud y contienen el número de DB además del
puntero a área
• Punteros ANY: son de 80 bits de longitud y contienen especificaciones adicionales
(como tipo de dato de la dirección) además del puntero a DB
Notación Constante
1. Intraárea (Área Interna): P#y.x Ejemplo: P#22.0
2. Interárea (Área Cruzada): P#Zy.x Ejemplo: P#M22.0
• x=dirección bit; y=dirección byte, Z=área
Con el área se especifica el identificador de la dirección
Punteros a Área (II)
Puntero a Byte n Byte n+1 Byte n+2 Byte n+3
Intraárea 00000000 00000yyy yyyyyyyy yyyyyxxx
Punteros a DB
Definición
Un puntero a DB, además de un puntero a área, contiene un número de bloque de datos
como un número positivo INT en adición al puntero a área.
Notación Constante
P#DataBlock.DataAddress Ejemplo: P#DB10.DBX 20.5
Puntero a DB
Byte n
Número de
Byte n+1 Bloque de Datos
Byte n+2
Byte n+3 Puntero a
Byte n+4 Área
Byte n+5
Punteros ANY (I)
Definición
Un puntero ANY, además de un puntero a DB, contiene un tipo de datos y un factor de
repetición.
Notación Constante
1. Variables con Tipos Datos: P#[Bloque de Datos.] Dirección Tipo Cantidad
2. Variables con Tipos Parámetros : L#Número Tipo Cantidad
P#DB11.DBX 30.0 INT 12 ;
Ejemplos: P#M 16.0 BYTE 8 ;
Área con 12 palabras en DB11 desde DBB30
Área con 8 Bytes desde MB16
P#I 18.0 WORD 1 ; Palabra de Entradas IW18
P#I 1.0 BOOL 1 ; Entrada I1.0
L#10 TIMER 1 ; Temporizador T10
L#2 COUNTER 1 ; Contador C2
Si utiliza un operando indirecto por memoria que esté almacenado en el área de memoria del
bloque de datos, deberá abrir primero el bloque de datos, utilizando a tal efecto la operación
Abrir bloque de datos.
Los Punteros de Palabra contienen números y se utilizan para direccionar elementos como:
• Temporizadores (T) • Funciones (FC´s)
• Contadores (C ) • Bloques de Función (FB´s)
• Bloques de Datos (DB´s)
A I 12.1
L M B 16.0
TAR1 <Dirección> Transfiere el contenido del registro de direcciones 1 AR1 al destino direccionado.
Ejemplo 2: L P#24.0
T MD 50
L IW [MD50] L IW 24
Dirección
Tipo de Acceso
Zona de Acceso
L MW 210
Ejemplo 4: AR1 31 23 15 7 0
10000001 00000000 00000011 00100000
10000RRR 00000BBB BBBBBBBB BBBBBXXX
LAR1 P#I 100.0 // Preselección
L B [AR1,P#110.0] +210
L IB 210
L 11 L KF11
T MW 60 T MW 60
OPN DB[MW 60] OPN DB 11 B MW 60
(A DB 11) A DB 0
L P#24.0 L KF 24
T MD 50 T MW 50
L IW [MD50] L IW 24 B MW 50
L IW 0
Curso SIMATIC S7 Nivel II
Direccionamiento indirecto
Abril 2003
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 1
Direccionamiento directo (I)
E 0 .0
Zona de
memoria: Número de
•E -> Entrada bit (0 - 7)
•A -> Salida
•T -> Temporizador Número de
•M -> Marca byte (cada zona
•DB -> Módulo de datos tendrá su rango)
•P -> Acceso directo (PA, PE)
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 2
Direccionamiento directo (II)
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 3
Direccionamiento directo (III)
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 4
Direccionamiento directo (IV)
Direccionamiento directo
Es necesario especificar:
⌧Zona de memoria
⌧Tipo de acceso
⌧Posición de byte
⌧Posición de bit
U E 125.3 U T0
L E B 124 U Z3
T M B 12 UC FC1
CALL FC3
L DB2.DBW3
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 5
Direccionamiento indirecto
L E W [MD50] L E W 124
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 6
Direccionamiento Indirecto
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 7
Direccionamiento indirecto
Configuración:
31 23 15 7 0
10000 RRR 00000 BBB BBBBBBBB BBBBBXXX
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 8
Direccionamiento indirecto
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 9
Direccionamiento Indirecto
L M W [AR1, P#200.0]
L MW 210
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 10
Direccionamiento Indirecto
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 11
Direccionamiento Indirecto
Otras funciones
LAR1
LAR1 P#valor
LAR2
LAR2 P#valor
LAR1 AR2 AR2 --> AR1
TAR1 AR1 --> ACU1
TAR1 MD20 AR1 --> MD20
TAR Intercambia AR1 y AR2
+AR1 AR1 + ACU1 --> AR1
+AR2
+AR1 P#valor AR1 + valor --> AR1
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 12
Ejercicio 1
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 13
Ejercicio 2
SIMATIC S7 NIVEL II
Dir_indirecto.ppt 14
Ejecución Especial
Automatización Industrial
Índice
TEMA – Ejecución Especial
1. – Ejecución de Programas
2. – Ejecución Cíclica de Programas
2.1 – Tiempos de Ciclo
2.2 – Programación del OB1
3. – Ejecución en el Arranque
4. – Ejecución por Interrupciones
5. – Ejecución por Tiempo – Alarmas Cíclicas
6. – Ejecución por Tiempo – Alarmas Horarias
7. – Ejecución por Tiempo – Alarmas de Retardo
8. – Ejecución por Error – Alarmas de Error
Ejecución de Programas – Módulos de Organización
OB10 :
Interrupción
Horaria
OB1
se ejecuta
continuamente
Puntero en la Pila L
Antes de ejecutar el
nuevo OB, se salvan Palabra Estado, Registro MCR, Puntero Pila B
los registros del
módulo interrumpido Pila de Módulo (Pila B)
Registros DB y DI
Número de Módulo
Dirección de retorno
Ejecución en el Arranque
1 7
STOP RUN
8
HOLD 6
4
Arranque RUN
Borrar datos
completo
no remanentes
Inhibir módulos
de salida Inicializar Transferir imagen
módulos proceso de salidas
SFC 49
Parámetro Declaración Tipo de datos Area de memoria Descripción
IOID INPUT BYTE E, A, M, D, L, Identificador del área:
Const. B#16#54: Entrada de periferia (PI)
B#16#55: Salida de periferia (PQ)
LADDR INPUT WORD E, A, M, D, L, Dirección lógica
Const.
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de error
AREA OUTPUT BYTE E, A, M, D, L Identificador del área: Indica
cómo interpretar el resto
de los parámetros de salida.
RACK OUTPUT WORD E, A, M, D, L No. de bastidor
SLOT OUTPUT WORD E, A, M, D, L No. de slot
SUBADDR OUTPUT WORD E, A, M, D, L Offset en el espacio de dirección
de datos útiles del módulo
SFC 50
Parámetro Declaración Tipo de datos Area de memoria Descripción
IOID INPUT BYTE E, A, M, D, L, Identificador del área:
Const. B#16#54: Entrada de periferia (PI)
B#16#55: Salida de periferia (PQ)
LADDR INPUT WORD E, A, M, D, L, Una dirección lógica
Const.
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de error
PEADDR OUTPUT ANY E, A, M, D, L Campo para direcciones PI,
elementos de campo deben
ser del tipo de datos WORD.
PECOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PI
devueltas
PAADDR OUTPUT ANY E, A, M, D, L Campo para las direcciones PA;
los elementos de campo deben
ser del tipo de datos WORD.
PACOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PA
devueltas
OB35
OB35
OB1
se ejecuta ...interrumpe el OB1 y se
continuamente ejecuta el OB35 cada 250ms
OB35
OB35
Q5.7
Calentador
Ejecución por Tiempo – Alarmas de Retardo
DO
AR
R ET
• Una alarma de retardo es una interrupción que permite ejecutar un programa
después de una espera determinada independientemente de los temporizadores
• En STEP 7 se dedican a interrupciones de retardo del OB 20 al OB 23
• La CPU 315 dispone únicamente del OB 20 que tiene la prioridad 3
DO
AR
R ET
Variables Locales de OB de Alarma de Retardo
O
Variable Tipo de datos Declaración Descripción RD
R ETA
OB20_EV_CLASS BYTE TEMP Clase de evento e identificadores:
B#16#11: Alarma está activada
OB20_STRT_INF BYTE TEMP B#16#21: Solicitud arranque OB 20
B#16#22: Solicitud arranque OB 21
B#16#23: Solicitud arranque OB 22
B#16#24: Solicitud arranque OB 23
OB20_PRIORITY BYTE TEMP Prioridad; valor prefijado: de 3 (OB20)
OB20_OB_NUMBR BYTE TEMP Número de OB (20 hasta 23)
OB20_RESERVED_1 BYTE TEMP Reservado
OB20_RESERVED_2 BYTE TEMP Reservado
OB20_SIGN WORD TEMP Identificador de usuario: parámetro de
entrada SIGN de la llamada de SFC 32
”SRT_DINT”
OB20_DTIME TIME TEMP Tiempo de retardo transcurrido en ms
OB20_DATE_TIME DATE_TIME TEMP Fecha y hora a las que se solicitó el OB
DO
SFC 33 CAN_DINT: Anular alarma de retardo R ET
AR
Interrupciones de Retardo
DO
AR
R ET
• El OB20 se arranca mediante una llamada al SFC32 (SRT_DINT). Se define la
demora en los parámetros que le pasa al SFC de la siguiente forma:
– OB_NR Número del OB que arrancará después de retardo
– DTIME Duración de la demora (desde 1 hasta 60000 ms)
– SIGN Identificador que se pone en la información de
arranque del OB cuando se llama al OB de retardo
– RET_VAL Contiene el código de error si se produce un error
mientras el OB se procesa
OB de Error OB de Error
OB80 Error de Tiempo (por ejemplo, OB121 Error de Programación (por
tiempo de ciclo excedido) ejemplo, DB no cargado)
OB85 Error de Secuencia de Programa OB122 Error de Acceso
(por ejemplo, OB no cargado) (por ejemplo, intento de
OB87 Fallo de Comunicaciones acceder a un módulo
(por ejemplo, Datos Globales) periférico no presente)
SFC´s para Programar OB´s de Error
• Las Funciones de Sistema integradas (SFCs) se pueden utilizar para controlar y
monitorizar las interrupciones asociadas a errores síncronos y asíncronos. Estas
SFCs proporcionan los parámetros formales listados debajo los cuales pueden ser
programados con valores actuales mediante la instrucción de llamada a SFC.
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.
* Tipos de señales analógicas.
Las tarjetas analógicas del S7 soportan una gran cantidad de tipos de medidas,
configurándose desde Hardware de Step 7 a través de los adaptadores de margen
laterales de la tarjeta (para más información, ver manual “Datos de los módulos S7”).
Sin embargo, es muy importante tener en cuenta que las entradas analógicas de los
S7 300 se agrupan en grupos de 2 canales, por lo que ambos deben de estar configurados
de la misma manera, ya sea para 0-10 V, para 4-20 mA, etc... Por lo tanto, no se puede
mezclar en el canal 0 una señal de 0-10 V, p . ej., y en el canal 1 una de 4-20 mA. Deberá
de dejarse vacío dicho canal si no se dispone de ninguna sonda de 0-10 V, y cablear la de
4-20 mA en el siguiente grupo libre.
Vamos a realizar un repaso a las conexiones más usuales con S7 de sensores de
campo.
* Medidas de tensión.
Lectura +/-10 V:
Lectura 0 a 20 mA:
Lectura 4 a 20 mA:
* Medidas PT100.
Lectura PT100:
Observar que lógicamente una sonda PT100 consumirá dos canales de entradas
analógicas: 1 para la lectura en extremos de la sonda, y otro para la corriente constante
que se suministra a la misma. Si la lectura se realizara por el mismo cable con el que se
alimenta la PT100, las fluctuaciones de la resistencia del cable de cobre que une el PLC a
la sonda con respecto a la temperatura variarían la magnitud de lectura. Por lo tanto, en
una tarjeta de 8 entradas analógicas sólo se podrán conectar 4 sondas PT100.
Tratamiento Analógico
Automatización Industrial
Índice
TEMA – Tratamiento Analógico
1. – Conversiones D/A, A/D
2. – Tarjetas de Entradas y Salidas Analógicas
3. – Representación Digital de Valores Analógicos
4. – Configuración de las Tarjetas de Entradas y Salidas Analógicas
5. – Tiempos de Ciclo y Conversión
6. – Ajuste de Valores Analógicos
7. – Normalización de Valores Analógicos
Convertidor Digital-Analógico, D/A
23 22 21 20 Ve 5 v
d c b a
Amplificador sumador
SALIDA
i
- Vs ANALOGICA
Red de resistencias +
Ve V Vs Rf
i= =− s A= =−
Re Rf Ve Re
a) A =
20
= 0.133 Vs = Ve * 0.133 = 5 * 0.133 = 0.665
150
b) A =
20
= 0.266 Vs = Ve * 0.266 = 5 * 0.266 = 1.33
75
c) A =
20
= 0.533 Vs = Ve * 0.533 = 5 * 0.533 = 2.665
37.5
d)A =
20
= 1.066 Vs = Ve *1.066 = 5 *1.066 = 5.33
18.7
37.5 * 75 20
byc) A = = 25 byc) Av = = 0.8 Vs = Ve * 0.8 = 5 * 0.8 = 4
37.5 + 75 25
Convertidor Analógico-Digital, A/D – Convertidor en Rampa
RELOJ
RESET
ENTRADA
ANALOGICA
+ & CONTADOR DE
N BITS
- SALIDA
B S
COMPARADOR U A DIGITAL
FDL
FE I
E D
R A
Convertidor
D/A
- Lentos en la conversión
- Tiempo de conversión variable
- Aumenta con el valor que se tiene que convertir
REGISTRO DE
RELOJ APROXIMACIONES
SUCESIVAS
ENTRADA
ANALOGICA
+ CIRCUITO DE REGISTRO DE
CONTROL DESPLAZAMIENTO
-
COMPARADOR B S SALIDA
U A DIGITAL
FDL
FE I
E D
R A
Convertidor
D/A
- Rápidos
- Tiempo de conversión fijo
Convertidor A/D MK 50808 de MOSTEK
I0 M
U µP
L
T
I
P A/D Puerto
L
E
X
O OE
R
I7 START
3
ALE
I0 M
U µP
L
T
I
P A/D Puerto
L
E
X
O OE
R EOC
I7 INT
START
3
ALE
Rack Fuente de IM
3 alimentac. (Receptor) 640 656 672 688 704 720 736 752
a a a a a a a a
654 670 686 702 718 734 750 766
Rack Fuente de IM
2 alimentac. (Receptor) 512 528 544 560 576 592 608 624
a a a a a a a a
526 542 558 574 590 606 622 638
Rack Fuente de IM
1 alimentac. (Receptor) 384 400 416 432 448 464 480 496
a a a a a a a a
398 414 430 446 462 478 494 510
Rack CPU IM
0 y (Emisor) 256 272 288 304 320 336 352 368
fuente de
a a a a a a a a
alimentac.
270 286 302 318 334 350 366 382
Valores Analógicos de Trabajo
Valores en Tensión
• Unipolares
¾ 1a5V 0 a 10 V
• Bipolares
¾ ± 10 V ±5V ± 2,5 V ±1V
¾ ± 500 mV ± 250 mV ± 80 mV
Valores en Intensidad
• Unipolares
¾ 0 a 20 mA 4 a 20 mA
• Bipolares
¾ ± 20 mA ± 10 mA ± 3,2 mA
Valores en Resistencia
¾ 10 kΩ 150Ω 300Ω 100Ω
Tiempo de Ciclo
• La conversión A/D y la transferencia a la CPU se realiza secuencialmente
• El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un
módulo
Tiempos de Conversión, Ciclo, Establecimiento para S/A
Tiempo de Conversión
• El tiempo de conversión de un canal de salida analógica es el tiempo que transcurre entre
la consideración de un valor de salida digitalizado de la memoria interna y la conversión
digital-analógica
Tiempo de Ciclo
• La conversión de canales de salida analógica se realiza secuencialmente
• El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un
módulo de salida analógica
Tiempo de Establecimiento
• El tiempo de establecimiento (t2 a t3) es el tiempo que transcurre entre la aplicación del
valor convertido y el momento en que alcanza el valor especificado en la salida analógica.
• El tiempo de establecimiento depende de la carga.
• Hay que distinguir entre cargas resistivas, capacitivas e inductivas.
Mensajes de
Diagnóstico
para Entradas
Analógicas
Mensajes de
Diagnóstico
para Salidas
Analógicas
Alarma de Diagnóstico
• Cuando se detecta un fallo o desaparece éste, el módulo emite una alarma de diagnóstico
siempre que esté habilitada
• La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de
tratamiento de alarma de diagnóstico OB 82
Alarmas de los Módulos Analógicos (II)
Alarma de Proceso
• La parametrización de los límites superior e inferior define un margen de trabajo
• Cuando la señal de proceso abandona dicho margen, el módulo activa una alarma de
proceso siempre que esté habilitada
• La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de
tratamiento de alarma de proceso OB 40
• Para detectar qué canal ha rebasado el límite consultar información del byte 4 de la
información adicional de alarma de proceso del OB 40
Nivel alto
Sensor de
Nivel
PIW 288
LT
Nivel bajo
1000 L 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0
0L
Presentación de Valores Analógicos
• STEP7 permite ver o usar valores analógicos tanto de entrada como de salida en
múltiples formatos numéricos. La tabla de variables de abajo muestra: PIW288 y
PIW290 (entradas analógicas) como dec, hex, bin.
L PIW 288
L 2765 Q 4.0
<=I Válvula de llenado
= Q 4.0
L PIW 288
L 24883
>=I Q 5.7
= Q 5.7 Válvula de drenaje
PIW 288
sensor de
nivel:
midiendo
un valor de + 27648 20 mA 1000 L
4 a 20 mA
+5530 4 mA 0L
(20% de rango)
Suponiendo un offset del 20%, el valor equivalente si tener en cuenta el offset es:
(valor analógico medido - 20% del rango usado en la CPU) x 125 / 100
Ejemplo: Para PIW 288 = 16.589, el valor representa:
(16.589 - 5530) x 1.25 = 13.824, que representan un volumen del 50% del tanque
Uso del Offset con Señales de Salida Analógicas
• Cuando las características del dispositivo de campo analógico tiene un 20% offset
o “señala cero”, se hace necesario un offset del valor analógico en la CPU para
compensar.
I
P
Salida PQW 304
valor de 4 a 20 mA
Válvula de
Suponiendo un offset de salida del 20%, el valor posicionamiento
que hay que enviar es: en 3 a 15 psi
(valor de la señal analógica sin offset x 100) / 125 + 20 % del rango utilizable
Ejemplo: Para abrir la válvula a la mitad:
PQW 304 = ( (MW 20 x 100) / 125) + 5530, Donde MW 20 = 27648/2=13824
0 0 grados 0 litros
Ejemplo:
PIW 288 Ajuste:
MD10 = (PIW 288 x 400) / 27648
Si el recipiente está al 50 %, el
+27648 400 L valor analógico de entrada de
PIW 288=+13824 ;
MD10 igual a 200.
Rango de CPU
(unipolar) Rango deseado en
0 -> +27648 unidades de ingeniería
0 -> 400 L
0 0L
Ejemplo: Ajuste:
PIW 288 MD20 = ((PIW 288 - 5530) x 200) /
22118
Ejemplo:
PIW 288
medida del Ajuste:
sensor de MD30 = (PIW 288 x 100) / 55296
temperatura
de +10 a - Si la entrada analógica PIW 288
+27648 + 50 grados medida +13824 , MD30 = +25
10V
Rango de CPU
(bipolar)
Rango deseado en
de -27648 a +27648
unidades de ingeniería
de -50 a +50 grados
-27648 -50 grados
FC28
in PV INT O
FC28 in PV_Superior REAL O
in PV_Inferior REAL O
out Valor _Ajustado REAL O
temp PV_Real REAL O
temp Rango_Ing REAL O
PIW288 PV Segmento 1:
Convierte un valor analógico de entrada
a real
100 PV_Superior
Segmento 2:
0 PV_Inferior Valor_Graduado MD10 Determina el rango en unidades de
ingeniería
Segmento 3:
Ajuste del valor analógico