Está en la página 1de 533

Principios de Programación en

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

La Norma IEC 1131 / EN-UNE 61131

Parte Título Contenidos


Parte 1 Información general Definición de términos y glosario del PLC/API
Características funcionales del PLC/API

Parte 2 Especificaciones Prestaciones eléctricas, mecánicas y funcionales


y ensayos de los Información a suministrar por el fabricante
equipos Ensayos y verificaciones

Parte 3 Lenguajes de Estructura del software de los PLC/API


programación Lenguajes de programación
Elementos del lenguaje

Parte 4 Guía para usuarios Especificaciones y análisis del sistema


Aplicación y selección del PLC/API
Seguridad y protección, instalación y mantenimiento

Parte 5 Comunicaciones Modelos, bloques de comunicación, mapeado en


protocolos ISO
Lenguajes de IEC 1131 - 3 / STEP7

Lenguaje IEC 1131-3 STEP 7


Diagrama de funciones FBD FBD/FUP
Function Block Diagram Function Block Diagram
Diagrama de contactos LD LAD/KOP
Ladder Diagram Ladder Logic
Lista de instrucciones IL STL/AWL
Instruction List Statement List
Texto estructurado ST SCL
Structured Text Structured Control Language
Gráfico secuencial SFC GRAPH7
Sequential Function Chart
Diagrama de bloques CFC
Continuous Function Chart
Diagrama de gráfico HIGRAPH7
de estados

Funcionalidad del Software


• El entorno de programación permite desarrollar proyectos de control
y automatización con las siguiente funcionalidad:
– Crear la estructura de directorios necesaria para la gestión de cada proyecto
– Configurar el hardware del equipo
– Desarrollar programas off-line
– Cargar y descargar programas y datos en el PLC/API (on-line)
– Depurar el programa en fase de ejecución sin necesidad de interrumpir la
ejecución del programa (on-line)
– Realizar funciones de test o estado de variables y zonas de la memoria
– Realizar funciones de forzado de variables
– Elaborar documentos para la fase de mantenimiento posterior
– Analizar el estado y comportamiento de la CPU (pilas, tiempos, ...) y de los
módulos de señal asociados
Programas de Usuario
Bloque en el Programa de Usuario
STEP 7 permite estructurar el programa. Esto aporta las siguientes ventajas:

• los programas se pueden dividir en bloques


• se pueden estandarizar secciones individuales del programa
• se simplifica la organización del programa
• las modificaciones del programa pueden realizarse más fácilmente
• se simplifica el test del programa, ya que puede ejecutarse por partes
• se simplifica la puesta en servicio

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

OPERANDOS NEMONICO FUNCION

Entradas I Imagen del proceso de entradas (PII)

Salidas Q Imagen del proceso de salidas (PIQ)

Marcas M Para almacenar resultados binarios intermedios

Datos D Para almacenar resultados digitales intermedios

Tiempos T Funciones de tiempo (temporizadores)

Contadores C Funciones de cómputo (contadores)

Periferia P Para acceder directamente a la periferia


Locales L Datos locales temporales
Módulos OB, FB, FC Para estructurar el programa
SFB, SFC
Ejemplo de Programa

Esquema STL/AWL FBD/FUP LAD/KOP


Eléctrico

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

Estructuración de los Programas


• STEP 7 provee tres posibilidades para organizar un programa.
Programación Programación Programación
Lineal Dividida Estructurada
Arranque Arranque Arranque

Receta A FC1
FB1
Receta B
OB1 OB1 OB1 FC2
Mezclador FB2
Descarga
FC3

Programa Lineal: Programa dividido en áreas: Programa Estructurado:


Todas la instrucciones Las instrucciones para funciones Las funciones reutilizables son
están contenidas en un individuales están contenidas en cargadas en módulos individuales.
módulo (normalmente módulos individuales. El OB1 El OB1 (u otros módulos) llaman a
en el módulo de llama a los módulos individuales estos módulos y les pasan datos
organización, OB1) sucesivamente. relevantes.
Estructura de Programa. Programación Lineal

OB1
1ª instrucción

2ª instrucción

..
..
..
.
última instrucción

Programación Lineal

OB1: Ejemplo de de un simple módulo lineal en FUP OB1: ejemplo de un simple


módulo lineal en AWL
Segmento 1: motor marcha/paro
I 0.0 Segmento 1: motor on/off
>=1
A(
Q 4.0 & O I 0.0
O Q 4.0
Q 4.0 )
AN I 0.1
I 0.1 = = Q 4.0

Segmento 2: Seguridad y señales de aviso Segmento 2: Seguridad y


señales de aviso
I 0.2 &
A I 0.2
I 0.3 AN I 0.3
Q 4.1 AN I 0.4
I 0.4 = = Q 4.1
Programación Lineal. Ejemplo

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

Programa principal OB Módulo subrutina FC

Procesamiento
del programa
Procesamiento
Instrucción que llaman del programa
otros módulos

Fin de módulo

Programa Dividido. Control de nivel


Programación Estructurada I

FC FB
OB1
Sistema Operativo
FB FC

SFC

SFB

Otros
OBs

Programación Estructurada II

OB1 Motor

>=1
&
=

Descarga

>=1
&
=
&
=

=
Estructura del Programa

OB1 Módulo 7 Módulo 32 Módulo R

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

Nivel1 Nivel2 Nivel3 Niveles 4..7 Nivel 8

División Tecnológica de un Programa

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

Bloques CPU 315 CPU 315-2DP Tamaño


Modos de operación del sistema Mód. de organización (OB) 13 14 8 Kby
Módulo de función (FB) 128 128 (0-127) 8 Kby

Leyenda: Función (FC) 128 128 (0-127) 8 Kby


Módulo de datos (DB) 127 127(1-127) 8 Kby
Módulo de
datos de Función del sistema (SFC) 48 53
instancia Mód. func. sistema (SFB) 7 7

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ódulo de - Módulos con memoria que puede programar el usuario


función (FB) - Parametrizable / retentiva
- No parametrizable / retentiva
- No parametrizable / no retentiva

Función (FC) - Rutina de programa para funciones frecuentes.


- Un valor de retorno es transferido.
(Los parámetros deben ser asignados por la llamada.)
- No retentivo
- Parametrizable

Módulo de Datos - Estructurado, almacenamiento de datos locales (DB instan.)


(DB) - Estructurado, almacenamiento de datos globales
(válido en todo el programa)
Módulos del Sistema

Tipo de Módulo Características

Función del - Integrados en el sistema operativo de la CPU


Sistema - Un usuario puede llamar esta función
(SFC) (sin memoria).

Módulos de
Funciones - Integrados en el sistema operativo de la CPU
del Sistema - Un usuario puede llamar esta función
(SFB) (con memoria).

Dato de Sistema - Módulo de datos para datos de configuración


(SDB) y parámetros

Módulos de Organización – OB´s (I)


Bloques de Organización (OB):
• Constituyen el interfaz entre el sistema operativo y el programa de usuario.
• Tienen prioridad.
• En las CPUs del S7 300 la prioridad de los OBs es fija
• Es posible asignar la misma prioridad a varios OBs
• Con prioridad “0” se desactiva el OB de alarmas
• Son llamados por el sistema operativo.
• Cada OB contine una información de arranque de 20 bytes de
datos locales que entrega al S.O. durante el arranque
• Controlan:
• El procesamiento cíclico
• El procesamiento controlado por alarmas del programa
• El comportamiento en el arranque del sistema de automatización
• El tratamiento de errores
Módulos de Organización – OB´s (II)
Tipo de Alarma Módulo de organización Prioridad
Ciclo libre OB1 1
Alarmas horarias OB 10 a OB 17 2
Alarmas de retardo OB 20 a OB 23 de 3 a 6
Alarmas cíclicas OB 30 a OB 38 de 7 a 15

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

Sistema operativo Programa de usuario

Conectar

Programa
Ciclo
principal
Ejecución Cíclica II

Sistema operativo Programa de usuario


Conectar Programa
de usuario

Programa
Ciclo principal

Interrup- Programa
Alarma de alarma
ción

Interrup- Tratamiento
Error ción de errores

Secuencia y Profundidad de Anidamiento

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

Llamada de un módulo Módulo llamado


(OB, FB, FC) (FB, FC, SFB, SFC)

Ejecución
del programa
Ejecución
Instrucción que llama a
del programa
otro módulo

Fin de módulo

Fases de la Ejecución Cíclica

El sistema operativo inicia el tiempo


de vigilancia del ciclo

La CPU escribe los valores de la PIQ


en los módulos de salida

La CPU lee el estado de las entradas en los


módulos de entrada y actualiza la PII

La CPU ejecuta el programa de usuario

Al final del ciclo, el S.O. realiza las tareas pendientes


(cargar y borrar módulos, recibir y enviar datos globales..)
Tiempo de Ciclo I
• El tiempo de ciclo es el tiempo que el S.O. necesita para:
• ejecutar el programa cíclico
• partes del programa que interrumpen al cíclico (ejecución otros OBs)
• actividades del sistema (p.e. actualización de imágenes, ..)

• El tiempo de ciclo se vigila


• El tiempo de ciclo no es igual para cada ciclo

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

• Es un módulo lógico “sin memoria”

• Las variables temporales de FCs se memorizan en la pila de datos locales

• Los datos locales se pierden tras la ejcución de las FCs

• Para memorizar los datos, pueden utilizar módulos de datos globales.

•A los datos locales de una FC no se le pueden asignar valores iniciles

•Como una FC no tiene memoria, se han de indicar siempre parámetros actuales

•Las FCs se pueden utilizar para:


• devolver un valor de función al módulo invocante (p.e. Fun. Matemáticas)
• ejecutar una función tecnológica (p.e. Una combinación binaria)

Módulo de Función – FB´s


• Son módulos programables. Con parámetros absolutos o formales

• Es un módulo “con memoria”

• Tiene asigando un módulo de datos como memoria (DB de instancia)

• Los parámetros que se transfieren al FB y las varaiables estáticas, se


memorizan en el DB de instancia

• Las variables temporales se memorizan en la pila de datos locales

• Los datos del DB de instancia no se pierden al finalizar la ejecución del FB

• Los datos memorizados en la pila de datos locales se pierden al finalizar la


ejecución del FB

• 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

• Un FB puede ejecutarse con diferentes DBs de instancia, luego se ejecuta


con diferentes valores para los parámetros con cada DB de instancia

FB 20: Motor DB 202: Motor_2


Parámetros formales Parámetros actuales (reales)

Arranque: INT IN Entero (16 bits): Arranque


Revoluciones: INT IN Entero (16 bits): Revoluciones
Historial: DT IN_OUT
Tiempo efec.: TIME IN_OUT Fecha y hora (48 bits):
Puntero a dirección del historial
Tiempo (32 bits): Tiempo ejec.

Módulo de Datos Globales – DB´s


• Son módulos de datos. No contienen instrucciones STEP 7
• Contienen datos de usuario, datos variables con los que trabaja el programa
• Cualquier FB, FC o OB puede leer/escribir datos en un DB global
• El tamaño máximo de los DBs depende de las CPUs
• La estructura de los DBs de datos globales se puede definir discrecionalmente
• Los datos de un DB de datos globales no se borran al cerrar el DB o concluir
la ejecución del módulo de programa que lo utiliza

FC 10 DB
Acceso desde
global
todos los bloques
(DB 20)
FC 11

DB de instancia Acceso sólo desde


FC 12 FB 12
(DB 112)
Módulos del Sistema – SFB´s y SFC´s
• Son módulos ya programados que ofrecen las CPUs S7 a los usuarios

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

Tipos de Módulos de Datos


8 Bits

Byte de datos 0

El tamaño máximo de un módulo


en la CPU 314 es 8 Kbyte. La
cantidad máxima de memoria
disponible en un módulo de datos
depende de la CPU.

Byte de datos 8191


Llamada de Módulos – Asignación de Parámetros

CALL FB7, DB45


STL/AWL
Start: = I 1.0
Stop: = I 1.1 Llamada al FB7 (a través del
FB parámetro formal Longitud := MW20 módulo de datos de instancia
DB45) y asignación de parámetros.
Ejecutar: = M2.1
Dirección actual de los datos
(parámetro vigente)

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

Estructura del Módulo

Cabecera del Módulo


(36 Bytes)

Cuerpo del módulo :

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

Procesamiento Cíclico del Programa


Inicia el módulo (OB 100), procesándose una vez
después de conectar la alimentación, por ejemplo Módulo de entrada

Iniciando el tiempo de control de ciclo


Lectura del estado de las señales de los módulos
guardando los datos en la tabla de la imagen de Módulo OB 1
proceso de entradas (PII)
A I 0.1
Ejecución del programa en el OB1 (procesamiento A I 1.1
CPU ciclo de scan

= Q 4.0
cíclico) .
Eventos (tiempo de interrupción, interrupción de .
proceso, etc.) .
.
Llamada a otros módulos OBs, FBs, FCs, etc.

Escritura en la tabla de imagen de proceso de


salida (PIQ) en los módulos de salida. Módulo de salida
Imagen del Proceso
I2.0 I2.7 I0.5 I03 Q4.4

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

Módulos de Organización de Alarmas


• Los OBs de alarmas permiten:
• ejecutar partes del programa dependientes del tiempo
• reaccionar eficazmente a señales externas al proceso

Tipo de Alarma OBs de alarma Aplicación


Alarma horaria OB 10 a OB 17 Calcula el flujo de un proceso de
mezcla al final de un turno

Alarma de retardo OB 20 a OB 23 Controla un ventilador para que


se pare 20 seg después de parar un
motor

Alarma cíclica OB 30 a OB 38 Muestrear el valor de una señal para


el control de una planta

Alarma de proceso OB 40 a OB 47 Notificar que se ha alcanzado el


valor máximo de un depósito
Ejecución de Programas – Tipos de Procesamiento
CON Arranque
•comprobación e inicialización de valores
•condiciones de arranque
Procesamiento Cíclico
•procesamiento normal. OB1
Alarma Alarma de Proceso
del proceso •gobierno por interrupciones
Alarma Alarma cíclica
cíclica •periodos de tiempo predeterminados
•importante en lazos regulación
Alarma
horaria Alarma horaria
Alarma
de retardo Alarma de retardo
Tratamiento de Error
Alarma
•en función de fallos
por errores
•sólo en algunas gamas

Tiempo de Ciclo
Definición: El tiempo de ciclo es el tiempo que transcurre durante un
ciclo de programa. Está constituido por:

• Tiempo de ejecución del S.O.


• Tiempo de transferencia de las imágenes del proceso (PII, PIQ)
• Tiempo de ejecución del programa
• Temporizadores
• Funciones integradas
• Carga por alarmas
• Carga por comunicación (Profibus-DP, MPI)
S.O.
Programa
de usuario
Tiempo de ciclo Interrupciones
por alarmas

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

Ejecución del programa


PII S.O. A I 1.0 PIQ PII
= Q 4.0

Tiempo de Respuesta más Corto y más Largo


El tiempo de respuesta más corto se presenta cuando el estado de la
entrada observada cambia justo antes de la carga de la PII. En este caso
hay que tener en cuenta:
• Tiempo de retardo de la entradas
• Tiempo de actualización de la PII
• Tiempo de paso por el S.O.
• Tiempo del programa de usuario
• Tiempo de ejecución de los temporizadores
• Tiempo de actualización de la PIQ
• Retardo de las salidas

El tiempo de respuesta más largo se presenta cuando el estado de la


entrada observada cambia durante la carga de la PII. En este caso
el tiempo de respuesta es:
• tiempo de retardo de la entradas
• 2 x tiempo de actualización de la PII
• 2 x tiempo de paso por el S.O.
• 2 x tiempo del programa de usuario
• tiempo de ejecución de los temporizadores
• 2 x tiempo de actualización de la PIQ
• tiempo de retardo de las salidas
Módulos de Org. de Tarea no Prioritaria
• Si se ha definido un tiempo de ciclo mínimo y este es mayor que el tiempo de
ciclo real, al finalizar el programa cíclico la CPU dispone de tiempo de
ejecución.

• El tiempo disponible se utiliza para procesar el OB de tarea no prioritaria.

Módulo de Organización de Alarmas Cíclicas


• Los OBs de alarmas cíclicas permiten:
• ejecutar partes del programa en periodos de tiempo determinados
Estructura de un Proyecto S7
Programas S7/M7 (no asignados a ningún HW)
Programas de usuario con módulos S7:
OBs, FBs, FCs, DBs,.......
Fuentes AWL para programas de usuario
Estación HW de un S7 - 400
CPU programable de un S7-400
Programas S7/M7 (asignados a HW)
Programas de usuario (off-line)
Fuentes AWL
M7-FM programable

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

Bit /FC – Firts Check – Bit de Primera Consulta


Cada operación lógica consulta el estado del bit /FC, así como el estado de señal del operando
direccionado. Si el bit /FC es ”0”, la operación almacenará el resultado de la consulta del estado de señal
en el bit RLO de la palabra de estado (bit RLO) y el bit /FC se pone a ”1”. Este proceso se denomina
primera consulta.
Ciertas instrucciones como =, S y R establecen el /FC bit a 0 iniciando así una nueva lógica después de
ellas: condicionesacciones (Con esos operandos, se cierra la consulta actual y se abre una nueva
(además del inicio del programa).
Otras instrucciones como AND o OR establecerán el bit / FC a 1 para combinar la lógica con la siguiente
instrucción.

Bit RLO – Result of Logic Operation – Resultado Lógico


Este bit almacena el resultado de una operación lógica binaria (AND, NAND, OR, NOR, NOT) o de una
comparación (XOR--or exclusiva--, XNOR --nor exclusiva--). Otras instrucciones leen el RLO (=, S, R) para
determinar cómo se van a ejecutar.

STA “Status” (bit 2)


El bit estado almacena el estado de la dirección de Booleana actual (bit direccionado).

Ejemplo con RLO, STA y / FC


Si estás acostumbrado a la lógica de escalera (ladder) y estas luchando por entender el propósito del
RLO y STA puede ayudarte el siguiente ejemplo. El STA se utiliza para realizar un seguimiento del
estado de la direccion. El RLO se utiliza para mantener seguimiento del estado del renglón.
EL programa AWL equivalente seria el siguiente:

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

Y eso funcionria bien. Pero la forma más mejór sería haciendo:

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?

Bueno, al grano. ¿Adivinas como actuaría no?

Inicialmente haría un:


U E0.0 // O E0.0

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.

NOTA: TENEMOS TODAS LAS OPERACIONES LOGICAS CON PUERTASAND, NAND,


OR, NOR, XOR, XNOR, NOT

Paréntesis en AWL en Step 7

Como puedes imaginar, en cuanto queramos realizar combinaciones un poco más elaboradas
necesitaremos paréntesis para poder realizar estas lógicas.

Así, dispondremos de las siguientes operaciones:

 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

Y funcionaría exáctamente igual.

Operandos de cierre de consulta

A estas alturas de la película te estarás preguntando… si los resultados de la combinatoria se van


almacenando en el RLO, ¿qué pasa después de una igualación si quiero empezar a realizar una nueva
combinatoria?

Pues efectivamente después de los operandos:

 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.

Ojo. Un cambio de segmento no es un inicio de programa. Por tanto si la última instrucción de un


segmento es la lectura de un bit haciendo un U E0.7, este afecta al siguiente segmento. A efectos
prácticos es como si lo hubieras escrito al principio del nuevo segmento
FUNCIONES DE RLO EN CONTADORES Y TEMPORIZADORES

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.

De ahí que si solo creemos que el programa funciona “CUMPLE CONDICIONEJECUTA


INSTRUCCIÓN” la respuesta esta mal, pues en cada vuelta de ciclo de programa, cuando le toque
evaluar la misma instruccion deberia CARGAR DE NUEVO el temporizador, pero no lo hace. Y lo
mismo ocurre con los contadores.

DE HECHO, UN PRIMER PROBLEMA DE PROGRAMACION RESIDE EN QUE DEBEMOS


PROVOCAR UN CAMBIO DE RLO PARA QUE FUNCIONEN CIERTAS CONDICIONES COMO
QUEREMOS, O VICEVERSA.

UN SEGUNDO PROBLEMA ES QUE LAS OPERACIONES DEBEN TENER SIEMPRE EL


FORMATO CONCRETO DE DATOS PARA LA OPERACIÓN A REALIZAR.

¿Qué es un set, reset y asignacion en AWL?

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.

¿Qué pasa si se dan ambas condiciones, SET y RESET en AWL?

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.

¿Puede darse ese caso? Porsupuestísimo que sí.


¿Es grave? No conozco a nadie que haya enfermado de ello, pero mejor evitarlo.
¿Qué pasa si se da? La respuesta seguro que la sabes. Depende.
¿De qué depende ? De según como se ejecute todo depende… .

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.

Vale, vale… pero ¿qué hay del SET y RESET en AWL?

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?

Forzado del RLO – SET y CLR

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:

 SET: Fijaremos con ello el RLO a uno


 CLR: Fijaremos con ello el RLO a cero

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

Finalmente vamos a ver los pulsos. Hay dos:

 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.

Mejor con un ejemplo:

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.

Si hicieramos un ejemplo similar con el flanco negativo:

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.

Estructura de la Palabra de Estado

Descripción de los Bits de Estado (I)


Bit /FC – Firts Check – Bit de Primera Consulta
Cada operación lógica consulta el estado del bit /FC, así como el estado de señal del
operando direccionado. Si el bit /FC es ”0”, la operación almacenará el resultado de la
consulta del estado de señal en el bit RLO de la palabra de estado (bit RLO) y el bit /FC se
pone a ”1”. Este proceso se denomina primera consulta

Bit RLO – Result of Logic Operation – Resultado Lógico


Este bit almacena el resultado de una operación lógica binaria o de una comparación.
Descripción de los Bits de Estado (II)
Bit STA – Status – Bit de Estado
El bit de estado almacena el valor del bit direccionado.

Bit OR – Bit de Estado OR


El bit OR (O) se requiere al realizar una combinación Y antes de O con una operación O.

Bit OV – Overflow – Bit de Desbordamiento


Indica un desbordamiento en el rango de un número o la utilización de números reales no
válidos.

Bit OS – Stored Overflow – Bit de Desbordamiento Memorizado


Se activa junto con OV, pero permanece activo hasta llamada a bloque, fin de bloque o JOS
(salto si OS = 1).

Descripción de los Bits de Estado (III)


Bits CC1 y CC0 – Condition Code Bits – Bits Condición
Los bits CC1 y CC0 dan información sobre los resultados o bits siguientes:
• Resultado de una operación aritmética
• Resultado de una operación de comparación
• Resultado de una operación digital
• Bits que han sido desplazados por una operación de desplazamiento o de rotación

Bit BR – Binary Result – Bit de Resultado Binario


El bit BR corresponde a la salida de habilitación (ENO) para el cuadro KOP.
Con la operación SAVE (en STL) o con la bobina se guarda un RLO en el bit BR.
Modificación de los Bits de Condición (I)
CC1 y CC0 tras operaciones aritméticas, sin desbordamiento

CC1 y CC0 tras operaciones aritméticas con enteros, con desbordamiento

CC1 y CC0 tras operaciones aritméticas (coma flotante) con desbordamiento

Modificación de los Bits de Condición (II)


CC1 y CC0 tras operaciones de comparación

CC1 y CC0 tras operaciones de desplazamiento y rotación

CC1 y CC0 tras operaciones lógicas digitales


Evaluar los Bits de la Palabra de Estado (I)
Bit de Anomalía - Registro BR BR I 0.0
&
• Consulta el valor de señal del bit BR (resultado binario) I 0.1 Q 4.0
≥1
BR S

Bit de Anomalía - Operación no Válida UO


• Determina si el resultado de una función aritmética de números en coma flotante es o
no admisible (es decir, si uno de los valores de la función aritmética no es un número
en coma flotante válido). Para ello se evalúan los códigos de condición de la palabra de
estado (CC1 y CC0).

Bit de Anomalía - Desbordamiento OV

• Detecta un desbordamiento (OV) en la función aritmética ejecutada en último lugar. Si


tras una función aritmética el resultado se encuentra fuera de rango.

Bit de Anomalía - Desbordamiento Memorizado OS


• Detecta un desbordamiento permanente (OS). A diferencia del bit OV (bit de
desbordamiento), el bit OS permanece activado aunque las operaciones aritméticas se
ejecuten sin error.

Evaluar los Bits de la Palabra de Estado (II)


SUB_I
I 0.0
Bits de Resultado IW0
EN
IN1 OUT MW10
• Determinar la relación entre el resultado de una IW2 IN2 ENO Q 4.1
operación aritmética y 0 &
>=0 S
Evaluar los Bits de la Palabra de Estado (III)
Operaciones de Consulta de Bits de Estado en STL
A - Chequea que cumple condición y operación lógica AND
O - Chequea que cumple condición y operación lógica OR
X - Chequea que cumple condición y operación lógica XOR
AN - Chequea que no cumple condición y operación lógica AND
ON - Chequea que no cumple condición y operación lógica OR
XN - Chequea que no cumple condición y operación lógica XOR
>0 Resultado mayor que 0 [(CC0 = 0) && (CC1 = 1)]
>=0 Resultado mayor o igual que 0 [(CC0 = 0)]
<0 Resultado menor que 0 [(CC0 = 1) && (CC1 = 0)]
<=0 Resultado menor o igual que 0 [(CC1 = 0)]
<>0 Resultado distinto de 0 [(CC0=0) && (CC1=1) v (CC0=1) && (CC1=0)]
==0 Resultado igual a 0 [(CC0 = 0) && (CC1 = 0)]
UO Resultado inválido (fuera de orden) [(CC0 = 1) && (CC1 = 1)]
OV Overflow [OV = 1]
OS Overflow Memorizado [OS = 1]
BR Resultado Binario [BR = 1]

Evaluar los Bits de la Palabra de Estado (IV)


Operaciones de Bits de Estado en STL
RLO BR CC0 CC1 OV OS Funciones de Salto Ejecutables
1 - - - - - JC, JCB
0 - - - - - JCN, JNB
- 1 - - - - JBI
- 0 - - - - JNBI
- - 0 0 - - JZ, JMZ, JPZ
- - 0 1 - - JN, JP, JPZ
- - 1 0 - - JN, JM, JMZ
- - 1 1 - - JUO
- - - - 1 - JO
- - - - - 1 JOS
Operaciones sobre el RLO
Operaciones sobre el RLO en STL
SET Establece el RLO a “1”
CLR Establece el RLO a “0”
NOT Niega el contenido del RLO
SAVE Guarda el contenido del RLO en BR

Carga y Transferencia de la Palabra de Estado


Operaciones de Carga y Transferencia de la Palabra de Estado
L STW Carga la palabra de estado en el ACU1
T STW Transfiere el valor del ACU1 a la palabra de estado

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  

Tipo y descripción Tamaño Opciones de formato Márgenes y representación Ejemplo


en bits numérica
 

BOOL 1 Variable booleana TRUE/FALSE 1 / TRUE


Todo / Nada 0 / FALSE
(bit)
 

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

DINT (entero de 32 Número entero con signo L#-2147483648 hasta L#85


32 bits)
DW L#2147483647
Identificador: D

REAL (número 32 IEEE Límite superior:


decimal en coma Número en coma flotante 3.402823e+38 1.234567e+13
flotante) DW 6,0
Límite inferior: 0,0
Identificador: R
1.175 495e-38
 

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

TIME 32 Tiempo IEC en intervalos de -T#24D_20H_31M_23S_648MS


1 ms, número entero con hasta T#0D_1H_1M_0S_0MS
(tiempo IEC) signo
DW T#24D_20H_31M_23S_647MS TIME#0D_1H_1M_0S_0MS
Equivale al formato DINT (D)
con unidad de 1ms

DATE 16 Fecha IEC en pasos de 1 día D#1990-1-1 hasta D#1994-3-15


(fecha IEC) DATE#1994-3-15
D#2168-12-31
W
TIME_OF_DAY 32 Hora en intervalos de 1 ms TOD#0:0:0.0 hasta TOD#1:10:3.3
(hora) TIME_OF_DAY#1:10:3.3
TOD#23:59:59.999
DW

 
www.campusabierto.es             ©Adolfo Molina                                    

 
Tipos de datos en S7  

Tipo y descripción Tamaño Opciones de formato Márgenes y representación Ejemplo


en bits numérica
 

BYTE 8 Número hexadecimal B#16#0


(byte) hasta B#16#10
B B#16#FF

WORD 16 Número binario 2#0 hasta


(palabra) 2#1111_1111_1111_1111 2#0001_0000_0000_0000
W
Número hexadecimal W#16#0 hasta
W#16#FFFF W#16#1000

BCD C#0 hasta


Formato carga contadores Z C#999 C#12

Número decimal sin signo B#(0,0) hasta


Dos Byte B#(255,255) B#(136,20)

DWORD 32 Número binario 2#0 hasta 2#1000_0001_0001_1000_


(palabra doble) 2#1111_1111_1111_1111_ 1011_1011_0111_1111
DW 1111_1111_1111_1111

Número hexadecimal
DW#16#0000_0000 hasta DW#16#00A2_1234
DW#16#FFFF_FFFF

Número decimal sin signo B#(1, 14, 100, 120)


Cuatro Byte
B#(0,0,0,0) hasta
B#(255,255,255,255)
 

Variable ASCII 8 Caracteres ASCII 'A','B' etc. 'E'


(carácter)
B

www.campusabierto.es             ©Adolfo Molina                                    

 
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

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)

Tipos de datos definidos por el usuario


(mayores de 32 bits) Tipo de Datos UDT (User Defined Type)

PLC’s
Página 2
Curso 2009/10
TIPOS DE DATOS DE BIT – TAMAÑO

•  La memoria del Autómata está estructurada en bytes.

•  Estos bytes podemos agruparlos/descomponerlos, obteniendo los


siguientes tamaños de datos:
–  Bit _ _ _ .Nº

–  Byte (8 bits) _ _ _ B

–  Palabra/word (16 bits) _ _ _ W

–  Doble palabra/double word (32 bits) _ _ _ D

•  Se puede acceder a cualquier área de la memoria: marcas, entrada,


salida, etc. con cualquiera de los tamaños de datos:
PLC’s
Página 3
Curso 2009/10
DIRECCIONAMIENTO 1/3

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

•  Dentro de cada byte, palabra o doble palabra, los bits se numeran de


derecha a izquierda, de 0 al 7. E 124.0

•  Dir. byte: área de memoria + B + nº de byte EB124

•  Dir. palabra: área de memoria + W + nº de su 1er byte

EW124 => EB124 EB125

•  Dir. doble palabra: área de memoria + D + nº de su 1er byte

MD0 => MB0 MB1 MB2 MB3


PLC’s
Página 6
Curso 2009/10
SISTEMAS NUMÉRICOS

•  Sistemas numéricos soportados:


–  Decimal (enteros y fraccionarios), binario, hexadecimal, BCD

•  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)

Estándar IEEE754: Expresa números reales en 32 bits

Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)

31 30 23 22 21 ………... 2 1 0

...

-  Signo (S) ⇒ 1: negativo , 0: positivo (bit 31)

-  Mantisa (M) ⇒ La mantisa incluye 23 bits (bit 0.. 22).

-  Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30).

PLC’s
Página 9
Curso 2009/10
Números en COMA FLOTANTE (2/2)

Estándar IEEE754: Expresa números reales en 32 bits

Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)

•  Ejemplo:
1#10000000#11000000000000000000000

–  Parte ligada al signo: (-1)1 = -1


–  Parte ligada al exponente: 2128-127=21 =2
–  Parte ligada a la mantisa: 1+6291456·2-23=1+0.75 =1.75
–  Resultado: -1 · 2 · 1.75 = -3.5

PLC’s
Página 10
Curso 2009/10
ACUMULADORES (1/2)

•  Registros auxiliares de 32 bits para intercambio de datos y


operaciones de comparación y aritmeticas.

ACCU-H (16 bits) ACCU-L (16 bits)

•  CPU 314IFM tiene 2 acumuladores.


•  Carga al ACCU1,
y el antiguo ACCU1 pasa al ACCU2.

•  Si cargamos o transferimos tamaños de datos menores a la


doble palabra ( bits, bytes (B), word (W) ),
se empieza a leer y escribir por la derecha (byte menos
significativo)
PLC’s
Página 11
Curso 2009/10
ACUMULADORES (2/2)

Operaciones entre acumuladores:

–  TAK: intercambia contenido ACCU1 y ACCU2 .

–  PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º.

–  POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º.

–  ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4.

–  LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.

PLC’s
Página 12
Curso 2009/10
CARGA Y TRANSFERENCIA 1/7

Permiten programar intercambio de información


entre módulos de E/S y áreas de memoria.

L --> Instrucción de carga a ACCU-1

T --> Instrucción de transferencia desde ACCU-1

•  Cargan y transfieren del acumulador ACCU1, independientemente del


valor RLO, y tampoco lo modifican.

•  A dichas instrucciones les sigue un código en el que se indica el tamaño,


formato y el número/posición a cargar o transferir.
PLC’s
Página 13
Curso 2009/10
CARGA Y TRANSFERENCIA 2/7

•  Ejemplos:
–  LC Z0 --> Carga el contenido del contador en el acumulador en BCD.

Si Z0=10 ACU1: 00 00 00 .......... 0001 0000 (BCD)

–  L Z0 --> Idem pero en Binario

Si Z0=10 ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)

–  L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,

PLC’s
Página 14
Curso 2009/10
CARGA Y TRANSFERENCIA 3/7

•  Ejemplos:

–  L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE)

ACU1: EB124 EB125 EB126 EB127

Obsérvese: el byte más significativo del acumulador (parte izquierda) queda


relleno con el byte de dirección menor, y el de mayor dirección, a la dcha.

–  L EW8 (Cargar en el ACU1 la palabra 8 de la PAE)


00 00 EB8 EB9

–  L EB8 (Cargar en el ACU1 el byte 8 de la PAE)


00 00 00 EB8

PLC’s
Página 15
Curso 2009/10
CARGA Y TRANSFERENCIA 4/7

•  Ejemplos (con los Registros de Direcciones, AR1 y AR2):


–  LAR1 ----> Carga el reg.de dirección AR1 con el contenido de ACU1
–  LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2
–  TAR ----> Intercambia los contenidos de registros AR1 y AR2
–  TAR1 R2 ----> Transfiere el contenido de AR1 a AR2
El listado AWL siguiente:
L ED 124
LAR1
Tendrá como ED124 ----> AR2
L ED 128
resultado: ED128 ----> AR1
LAR2
TAR

PLC’s
Página 16
Curso 2009/10
CARGA Y TRANSFERENCIA 5/7

•  Ejemplos (L y T con diferentes tamaños):

–  L EB124 (Cargar en el ACU1 el byte 124 de las entradas)


00 00 00 EB124

–  Si ahora hacemos T MW32


00 00 00 EB124

MB32 MB33

•  L ED124 EB124 EB125 EB126 EB127

T MB32 MB32
PLC’s
Página 17
Curso 2009/10
CARGA Y TRANSFERENCIA 6/7

L +5 --> Carga entero de 16 bits

L L#523123 --> Carga un entero de 32 bits


NOTA:

Ver ayuda L B#16#EF --> Carga un hexadecimal de 8 bits


Adm. Simatic

“Tipos de datos L 2#0011_0110_1110_0011 --> Carga binario de 16 bits


simples”
T MB0 --> Transfiere (el ACU1) al byte de marcas 0

T AD256 --> Transfiere (el ACU1) a la doble palabra de salida 256

PLC’s
Página 18
Curso 2009/10
CARGA Y TRANSFERENCIA 7/7

PLC’s
Página 19
Curso 2009/10
EJERCICIO (Entregable 4)

•  Tenemos una mezcladora que produce 2 tipos de productos,


magdalenas y donuts, para lo cual controla la receta,
modificando las proporciones de harina (A124.0) y leche
(A124.1), y el tiempo que está mezclándolos (A124.2).
•  La producción empezará cuando E124.0 se ponga a 1
•  Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 3 segundos, A124.1 está encendido 1 segundo y
A124.2 durante 2 sg.
•  Si E124.1=0 produce donuts, para lo cual los tiempos son 4,
3 y 2 segundos respectivamente.
•  El sistema debe ser robusto de forma que si está en medio
de una receta no debe interrumpirse aunque cualquiera de
los dos botones de entrada se modifique

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

OB = Módulo de Organización Leyenda:


FB = Módulo de Función
FC = Función
SFB = Módulo de Función de Sistema Módulo de
SFC = Función de Sistema datos a
SDB = Módulo de Datos de Sistema instancia
DB = Módulo de Datos

Tipos de Módulos de Datos

8 bits
Global
(normalmente usados) Byte datos 0

El máximo tamaño del módulo


para la CPU 314 es 8 kBytes.
La cantidad de memoria
disponible para los módulos
de datos depende de la CPU.

Instancia (local)
Byte datos 8191
Edición de Módulos de Datos (I)

Edición de Módulos de Datos (II)


STEP 7
Dirección
de memoria Valor
local Nombre inicial

Datablock c:\class\machine1\db10

Tipo de datos Comentario


Llamada a Módulos de Datos

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

Acceso a Elementos de Datos


Abrir módulo de datos Carga y Transferencia en Módulos de Datos
OPN DB 19 L DBB 1 Cargar el byte de datos 1.
OPN valores L DBW 2 Cargar la palabra de datos 2 (byte 2/3).
L5 Cargar el número 5.
T DBW 4 Transferir a la palabra 4.
L 'A' Cargar el carácter ASCII A.
L DBB28 Cargar el byte de datos 28.
==I Comparar.

U DBX 3.1 Consultar el bit 1 del byte 3.

L DB19.DBW4 Cargar la palabra de datos 4


del DB19 (incluye OPN DB 19).
L valores.N1 Acceso simbólico a la variable
N1. “valores” es el nombre simbólico
del DB que contiene dicha variable
Notas de Acceso a Elementos de Datos
Direccionamiento
• STEP 7 permite tener dos DBs abiertos simultáneamente
• Uno se referencia por DB (global) y el otro por DI (instancia)
• La forma de abrirlos: OPN DB 5, OPN DI 7
• Para cargar o transferir al DB: L DBB 0, T DBB 1
• Para cargar o transferir al DI: L DIB 0, T DIB 3
• Otra forma de direccionar sin abrir el DB:
L DB5.DBB 0, T DB7.DBB 1
• Para direccionamiento de bit, byte, palabra y doble palabra:
A DB5.DBX 0.7, para direccionar un bit
L DB5.DBB 7, para direccionar un byte
L DB5.DBW 7, para direccionar una palabra
L DB5.DBD 7, para direccionar una doble palabra

Tipos de Datos Elementales

• Las variables de tipos de datos básicos tiene una longitud máxima de


doble palabra
• Son procesadas con instrucciones de carga y transferencia o con
operaciones lógicas binarias
• Los tipos de datos elementales pueden ocupar un bit, un byte, una
palabra o una doble palabra

Declaración:

Varname : datatype := pre-assignment

Varname es el nombre de la variable


datatype es un tipo de dato elemental
pre-assignment es el valor asignado

• Una variable pude ser declarada global en la tabla de simbólicos o


locamente en la sección de declaraciones
Tabla de Tipos de Datos Elementales

Tipo de Datos Tamaño Descripción


(Bit)

BOOL 1 Bit. Rango: true o false


BYTE 8 Byte. Rango: 0 a 255
WORD 16 Palabra. Rango: 0 a 65.53532-1
DWORD 32 Doble Palabra. Rango: 0 a 2
CHAR 8 Carácter. Cada carácter imprimible (Código ASCII
>31)
STRING 8 X 254 Cadena de caracteres desde 2 a 254
INT 16 Entero. Rango: -32.768 a 32.767
DINT 32 Doble entero. Rango: -231a 231-1
REAL 32 Número en coma flotante. (IEEE)
TIME 32 Tiempo en intervalos de 1 ms (IEC)
DATE 16 Fecha en intervalos de 1 día (IEC)
TOD 32 Hora y día en intervalos de 1 ms: hora (0 a 23),
minutos (0 a 59), segundos (0 a 59), ms (0 a 999)
S5TIME 16 Valor de tiempo para los temporizadores.
Rango: 0H_0M_0S_0MS a 2H_46M_30_0MS

Bit, Byte, Palabra y Doble Palabra


• Una variable tipo BOOL representa un bit (p.e. entrada I 0.0)
• Una variable tipo BYTE es un conjunto de 8 bits (p.e.salidas QB 5)
• Una variable tipo WORD es un conjunto de 16 bits (p.e. marcas MW 7)
• Una variable tipo DWORD es un conjunto de 32 bits

BIT Longitud = 1 BIT BYTE Longitud = 8 BITS


7 6 5 4 3 2 1 0

PALABRA Longitud = 16 BITS


7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

DOBLE PALABRA Longitud = 32 BITS


7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Representación en BCD
• Se pueden introducir datos en BCD con tipo de dato 16# (hexa) y usar sólo dígitos
de 0 a 9 (p.e. L W#16#2468)
• Para temporizadores está definido el tipo de datos S5TIME# (p.e. L S5TIME#30s.)
• Para contadores está definido el tipo de datos C# o 16# (p.e. L C#368)

Número BCD, 3 décadas


Byte m Byte m+1

15 12 11 8 7 4 3 0

Signo 10 2 101 100


Número BCD, 7 décadas
Byte m Byte m+1 Byte m+2 Byte m+3

15 12 11 8 7 4 3 0 15 12 11 8 7 4 3 0

Signo 106 105 104 103 102 101 100

Tipo de Dato CHAR


• EL tipo de datos CHAR representa un carácter en código ASCII.
• Cada variable de tipo CHAR ocupa un byte (p.e. L ‘A’)

Dato tipo CHAR


Byte m

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

Representación de Números (II)


DINT:
• Una variable de tipo de dato DINT representa un entero que es
almacenado en 32 bits (doble palabra) en coma fija
• Un entero es almacenado como una variable DINT:
• si es mayor de 32.767 o menor de -32.768
• si el identificador L # precede al número
• Los bits 0-30 representan el valor de la variable
• El bit 31 representa el signo (“0” -> positivo ; “1” -> negativo)
• Números negativos son almacenados en forma de complemento a dos
• El rango posible desde:
• +2,147,483,647 (7FFF FFFFhex) a -2,147,483,648 (8000 0000hex)

31 30 .......16 15..... .......0


16 15
30
S 2 ..... ....2 2 .... ..... 2 21 2 0
2

L -100 // Se carga un número INT en ACU1. Palabra izquierda ACU1 (0000hex)


L L#-100 //se carga un número DINT en ACU1. Palabra izquierda ACU1 (FFFFhex)
Representación de Números (III)
REAL:
• Una variable de tipo de dato REAL representa una fracción que es
almacenado en 32 bits (doble palabra) en coma flotante
• Un entero es almacenado como una variable REAL:
- si el punto decimal es seguido por un cero (L 100.0 o L 1.0e+2)
• La variable real consiste internamente en tres partes:
- el signo (bit 31) ( “0” -> positivo; “1” -> negativo)
- 8 bits para el exponente (en base 2) (bits 23 a 30)
- 23 bits de mantisa (bits 0 a 29)
• Números “normalizados en coma flotante”:
- rango desde -3.402 823 x 10 +38 a -1.175 494 x 10 -38)
- +1.175 494 x 10 -38 a 3.402 823 x 10 +38
• Números “no normalizados en coma flotante”:
- - 1.17 494 x 10 -38 a -1.401 298 x 10 -45
- + 1.401 298 x 10 -45 a +1.175 494 x 10 -38

31 30.... .23 22..... .......0


7 0 −1 −2
S 2 ... ....2 2 2 .... ..... 2 −23
Exponente Mantisa

Representación de Números (IV)

REAL:
Representación de Tiempos (I)
S5TIME:

• Una variable de tipo de dato S5TIME es usada para inicializar


temporizadores en STL, LAD y FBD
• Ocupa una palabra de 16 bits con 1 + 3 décadas
• El tiempo se especifica en horas, minutos, segundos y milisegundos
• La conversión a la representación interna la realiza el STEP 7
• El número es representado internamente en BCD de 000 a 999
• El tiempo base puede se: 10 ms (00), 100ms (01), 1s (10) y 10s (11)
• El tiempo es el producto del valor por la base

15 14 .......0
0 2 1 0
10 10 10 10
Base de tiempo Valor de tiempo

S5TIME#500ms (=0050hex)
S5T#2h46m30s (=3999hex)

Representación de Tiempos (II)


DATE:

• Una variable de tipo de dato DATE es almacenada en una palabra


como un número sin signo en coma fija
• El contenido de la variable corresponde al número de días desde
el 01.01.1990.
• La representación contiene el año, el mes y el año, cada uno
separado por (-)

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:

• Una variable de tipo de dato TIME ocupa una doble palabra


• La representación contiene especificación de día (d), hora (h),
minutos (m), segundos (s) y milisegundos (ms)
• El contenido de la variable es interpretado como milisegundos (ms)
y almacenados como un número de 32 bits en coma fija con signo

31 30 .......16 15..... .......0


30 16 15
S 2 ..... ....2 2 .... ..... 2 2 21 20

Ejemplos:
TIME#24d20h31m23s647ms (=7FFF_FFFFhex)
TIME#0ms (=0000_0000hex)

Representación de Tiempos (IV)


TIME_OF_DAY:
• Una variable de tipo de dato TIME_OF_DAY ocupa una doble palabra
• Contiene el número de milisegundos desde el comienzo del día (0:00)
como un número si signo en coma fija
• La representación contiene la especificación de horas, minutos,
segundos y milisegundos.

31 30 .......16 15..... .......0


30 16 15
31
2 2 ..... ....2 2 .... ..... 2 21 20
2

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

Tipos de Datos Estructurados y Arrays


Estructura Array

COMPONENTES
GEOMÉTRICOS

TIPO
GEO_COMPONENTES
STRUCT
CIRCULO: ENTERO
TRIANGULO: PALABRA

CUADRADO: REAL FUNCTION_BLOCK: EJEMPLO


RECTANGULO: ENTERO
END_STRUCT VAR
END_TYPE GEOMETRY:
ARRAY [1...3 ] of GEO_COMPONENTS
END_VAR
Strings

Antes de utilizar los datos locales dinámicos del tipo STRING, el usuario los debe inicializar p.ej. mediante una
secuencia AWL tal como:

LAR1 P#lokal_string_var // lokal_string_var está declarada en VAR_TEMP como STRING[200]

L 200 // longitud de STRING indicada arriba

T LB [AR1, P#0.0] // introducido en el MAX Len Byte de la cadena

L 5 // longitud real de la cadena

T LB [AR1, P#1.0] // introducir longitud real de la cadena

UDT: Tipos de Datos de Usuario


UDT
Son estructuras de datos creadas por el usuario y que, una vez definidas, pueden utilizarse en
todo el programa.
Los tipos de datos de usuario (UDTs) se crean en el Administrador SIMATIC o con el editor
incremental.

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

 Underscores in time and date are optional


 It is not required to specify all time units (for example: T#5h10s is valid)
 Maximum time value = 9,990 seconds or 2H_46M_30S

S5TIME Format

Time base Binary Code


10 ms 00
100 ms 01
1s 10
10 s 11

Symbol Table Allowed Addresses and Data Types


English German Address
Description Data Type
Mnemonics Mnemonics Range

I/O Signals

0 to
I E Input bit BOOL
65535.7

IB EB Input byte BYTE, CHAR 0 to 65535

WORD, INT, S5TIME,


IW EW Input word 0 to 65534
DATE

DWORD, DINT, REAL,


ID ED Input double word 0 to 65532
TOD, TIME

0 to
Q A Output bit BOOL
65535.7

QB AB Output byte BYTE, CHAR 0 to 65535

WORD, INT, S5TIME,


QW AW Output word 0 to 65534
DATE

DWORD, DINT, REAL,


QD AD Output double word 0 to 65532
TOD, TIME

Marker Memory

0 to
M M Memory bit BOOL
65535.7

MB MB Memory byte BYTE, CHAR 0 to 65535

WORD, INT, S5TIME,


MW MW Memory word 0 to 65534
DATE
DWORD, DINT, REAL,
MD MD Memory double word 0 to 65532
TOD, TIME

Peripheral I/O

PIB PEB Peripheral input byte BYTE, CHAR 0 to 65535

WORD, INT, S5TIME,


PIW PEW Peripheral input word 0 to 65534
DATE

Peripheral input double DWORD, DINT, REAL,


PID PED 0 to 65532
word TOD, TIME

PQB PAB Peripheral output byte BYTE, CHAR 0 to 65535

WORD, INT, S5TIME,


PQW PAW Peripheral output word 0 to 65534
DATE

Peripheral output double DWORD, DINT, REAL,


PQD PAD 0 to 65532
word TOD, TIME

Timers and Counters

T T Timer TIMER 0 to 65535

C Z Counter COUNTER 0 to 65535

Logic Blocks

FB FB Function block FB 0 to 65535

OB OB Organization block OB 1 to 65535

FC FC Function FC 0 to 65535

SFB SFB System function block SFB 0 to 65535

SFC SFC System function SFC 0 to 65535

Data Blocks

DB DB Data block DB, FB, SFB, UDT 1 to 65535

User-defined data types


UDT UDT User-defined data type UDT 0 to 65535
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

PLC’s
Página 1
Curso 2009/10
Introducción

OB’s, FB’s, FC’s

Tabla de declaración de variables

Variables locales y atributos del sistema

Área de instrucciones

Formado por uno o varios segmentos

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

•  Toda instrucción se compone de:


marca de salto (opc.), operación, operando y comentario (opc.).

Ejemplo: M001: U E1.0 //Comentario

•  Cada instrucción ocupa una línea propia.

•  Por cada segmento se pueden introducir unas 2000 líneas.

•  Al introducir operaciones o direcciones absolutas no se distingue


entre mayúsculas y minúsculas.

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 ?

U, UN combinación serie (AND)

O, ON combinación paralelo (OR)

U(O Posibles anidamientos

O(U Posibles anidamientos

X or exclusiva

= asignación

PLC’s
Página 4
Curso 2009/10
Operaciones lógicas a nivel de bit

La CPU chequea el estado de las señales de los sensores


(operandos)

La primera vez, en cada operación lógica:

•  Se guarda el estado de la entrada (primer operando) en el RLO


“Result of Logic Operation”, bit del registro de estado CPU

•  No se ejecuta operación lógica

Siguientes veces, dentro de operación lógica:


•  Se ejecuta operación lógica entre valor de RLO
y valor de estado de entrada (nuevo operando).

El resultado de operación lógica se guarda en el RLO

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

•  El elemento fundamental es el RLO (Resultado de operación lógica).

•  El RLO es un bit de la palabra de estado.

•  Refleja el resultado de la última operación lógica realizada:


–  Cuando una operación si se ejecuta/cumple: RLO=‘1’
–  Cuando una operación no se ejecuta/cumple: RLO=‘0’

•  Es entrada y salida en las operaciones combinacionales.

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

E 124.2 E 125.0 A 125.0


•  En diagrama de
contactos equivale a
una conexión serie U E124.2 KOP
AWL U E125.0
=A 125.0

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

U E 124.0 Primera consulta


UN E 124.1
= A 124.0
U E 125.0 Primera consulta

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)

1) Si la entrada 124.0 está activa


U E 124.0 se enciende la salida 125.0
2) Si la entrada 124.0 se desactiva
S A 125.0 no se desactiva la salida 125.0

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)

•  El estado de disponibilidad o no de servicio lo proporciona un selector de dos


posiciones: Conectado-Desconectado.
•  La electrobomba se pondrá en marcha cuando el sensor de mínimo esté
encendido y se apagará cuando, o bien se encienda el sensor de máximo, o
bien salte el térmico o bien la desconectemos mediante el selector.
•  Si la electrobomba está en servicio deberá lucir una lámpara indicadora.
•  Si salta el térmico se encenderá otra lámpara avisándolo.

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

Bit Ocupación Significado


0 /FC Bit de primera consulta
- En el comienzo de un segmento su valor es “0”
- Excepto cuando el seg. previo finaliza con “SAVE”
1 RLO Bit de resultado lógico. Se almacena resultado lógico
2 STA Bit de estado
3 OR Bit OR (necesario en operaciones Y antes de O)
4 OS Bit de desbordamiento memorizado

Palabra de estado (II)

Bit Ocupación Significado


5 OV Bit de desbordamiento. Error de desbordamiento en
operaciones en coma flotante
6 CC0 Código de condición “0”
7 CC1 Código de condición “1”
Proporcionan información sobre:
- Resultado de una operación aritmética
- Resultado de una comparación
- Resultado de una operación digital
- Bits desplazados del operando por desplazamiento
o rotación
8 BR Resultado binario. Establece un enlace entre el
procesamiento de palabras y el procesamiento de bits
9 a 15 No ocupado
Instrucciones bit
• Las instrucciones bit trabajan con los dos números binarios, 0 y 1.
• En el ámbito de las operaciones lógicas:
- “1” significa activado
- “0” significa no activado
• Las instrucciones bit interpretan estados de señal de 1 y 0 y los combina según lógica
de Boole
• El resultado de estas combinaciones es “1”o “0”. Se indican como "Resultado de
Operación Lógica" (RLO).

Operaciones Lógicas Binarias I

# 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

Operaciones lógicas binarias III


Operación lógica “Y”

I 0.1 & A I 0.1


Q 4.0 A I 0.2
I 0.2 =
= Q 4.0
Operación lógica “O”

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

Operación Lógica “O-exclusiva”

XOR X I 0.1 A I 0.1


I 0.1 AN I 0.2
Q 4.0 X I 0.2
O
I 0.2 = = Q 4.0 AN I 0.1
A I 0.2
= Q 4.0
Otras Funciones Binarias I
• Insertar
entrada
binaria

• Invertir una
entrada
binaria

• Asignación

• Conector

Otras Funciones Binarias II


• Cargar resultado lógico (RLO) en registro BR
I 0.1 &

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

I 0.0 I 0.1 I 0.0 I 0.1


A I 0.0 A I 0.0
& AN I 0.1 A I 0.1 &
= Q 4.0 = Q 4.0
Q 4.0 Q 4.0

S1 S2
S1 S2

I 0.0 I 0.1 I 0.0 I 0.1


AN I 0.0 AN I 0.0
& AN I 0.1 A I 0.1 &
= Q 4.0 = Q 4.0
Q 4.0 Q 4.0

Ejemplo (III)
I 0.0 I 0.1 I 0.2 Q 4.1

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
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

Prioridad a la Desconexión Prioridad a la Conexión

I 0.1 Q 4.0 I 0.1 Q 4.0


Marcha Marcha
I 0.0
Paro
I 0.0
Paro
Q 4.0 Q 4.0

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

Detector de Flanco Positivo RLO (0 --> 1)

Flanco Positivo Flanco Negativo


RLO
1

0 Tiempo

Diagrama del estado de la señal


Lista de Instrucciones I 1.0
A I 1.0
FP M 1.0
= Q 4.0
M 1.0
Funciones lógicas
M 1.0
Q 4.0
I 1.0 P Q 4.0
Detector de Flanco Negativo RLO (1 --> 0)

Flanco Positivo Flanco Negativo


RLO
1

0 Tiempo

Diagrama del estado de la señal


Lista de Instrucciones I 1.0
A I 1.0
FN M 1.0
= Q 4.0
M 1.0
Funciones lógicas
M 1.0
Q 4.0
I 1.0 N Q 4.0

Detector de Flanco de Señal (0 --> 1)


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 “0” a “1”,
la salida Q será “1”.

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

A I 0.7 I 0.7 &


AN M 1.0 M 1.0 R Q
S Q 5.0
A I 0.7
A M 1.0 Segmento 2
R Q 5.0 I 0.7 &
M 1.0
Q 5.0 S
AN I 0.7
I 0.7 &
A Q 5.0
S M 1.0 Q 5.0 R Q

AN I 0.7
AN Q 5.0
R M 1.0
Báscula JK
I 0.7

M 2.1

I 0.1 I 0.0 I 0.7 P M2.0

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

A I 1.0 .... ....


ANI 1.1 .... ....
A M 4.0 .... ....
= Q8.0 .... ....
A I 2.0 Primera consulta
Tema 4
Instrucciones Básicas:
Operaciones lógicas con bits

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

Instrucciones Básicas:Operaciones lógicas con bits 2

1
Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 3

Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 4

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.

Instrucciones Básicas:Operaciones lógicas con bits 5

Operaciones lógicas con bits


1.- Las operaciones básicas para 3.- Las siguientes operaciones permiten ejecutar una
las operaciones lógicas con bits cadena lógica encerrada entre paréntesis:
son: U( Y con abrir paréntesis
U Y UN( Y-No con abrir paréntesis
UN Y-No O( O con abrir paréntesis
O O ON( O-No con abrir paréntesis
ON O-No X( O-exclusiva con abrir paréntesis
X O-exclusiva XN( O-exclusiva-NO con abrir paréntesis
XN O-exclusiva-No ) Cerrar paréntesis
2.- Para terminar una cadena 4.- Las operaciones siguientes permiten modificar el
lógica se puede utilizar una de resultado lógico (RLO):
las tres operaciones: NOT Negar el RLO
= Asignar SET Activar el RLO (=1)
R Desactivar CLR Desactivar RLO (=0)
S Activar SAVE Memorizar el RLO en el registro RB

5.- Otras operaciones detectan cambios en el resultado lógico y reaccionan


correspondientemente:
FN Flanco negativo
FP Flanco positivo
Instrucciones Básicas:Operaciones lógicas con bits 6

3
Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 7

Operaciones básicas

Instrucciones Básicas:Operaciones lógicas con bits 8

4
Operaciones básicas

Instrucciones Básicas:Operaciones lógicas con bits 9

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

Instrucciones Básicas:Operaciones lógicas con bits 10

5
Operaciones básicas
l Contactos negados
SOLUCIÓN EN AWL
UN E 0.0
U E 0.1
= A 4.0

Instrucciones Básicas:Operaciones lógicas con bits 11

Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas
lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 12

6
Instrucciones de terminación de
cadenas lógicas

Instrucciones Básicas:Operaciones lógicas con bits 13

Instrucciones de terminación de
cadenas lógicas

Instrucciones Básicas:Operaciones lógicas con bits 14

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 Básicas:Operaciones lógicas con bits 15

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

U E 1.0 .... ....


UN E 1.1 .... ....
U M 4.0 .... ....
= A 8.0 .... ....
U E 2.0 Primera consulta

Instrucciones Básicas:Operaciones lógicas con bits 16

8
Instrucciones de terminación de
cadenas lógicas

Instrucciones Básicas:Operaciones lógicas con bits 17

Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 18

9
Combinación de operaciones
básicas

Instrucciones Básicas:Operaciones lógicas con bits 19

Combinación de operaciones
básicas

Instrucciones Básicas:Operaciones lógicas con bits 20

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

Instrucciones Básicas:Operaciones lógicas con bits 21

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:

1º.- Mediante el pulsador B iniciamos el descenso de la


herramienta, la cual, al llegar a un minirruptor fin de ca-
s B Ps rrera FCb, debe interrumpir el descenso e iniciar la subida.

2º.- Al llegar, en la subida, a un minirruptor fin de carrera


FBs, la herramienta debe detenerse.

3º.- El circuito deberá llevar un pulsador de emergencia


Rs Ps, mediante al cual pueda interrumpirse el descenso de
la herramienta, para que automáticamente se inicie la su-
bida.
b
FCb 4º.- Cuando la herramienta est é subiendo de ninguna
Rb manera deberá poder iniciarse la bajada, aunque se
pulse B.

Definido el diagrama de circuito, traducir a lenguaje STEP


7 la lógica cableada .

Instrucciones Básicas:Operaciones lógicas con bits 22

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

Instrucciones Básicas:Operaciones lógicas con bits 23

Ejercicio 2

Arranque directo de un motor trifásico con


rotor en cortocircuito
1.- Elementos del esquema:
Q1 Seccionador con fusibles incorporados
KM1 Contactor de potencia
F1 Relé térmico de protección
M Motor trifásico
LM Lámpara que señala motor en marcha
LF1 Lámpara que señala disparo de F1
LBT Lámpara que señala tensi ón en el circuito

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)

Instrucciones Básicas:Operaciones lógicas con bits 24

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

Instrucciones Básicas:Operaciones lógicas con bits 25

Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 26

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.

Instrucciones Básicas:Operaciones lógicas con bits 27

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

Instrucciones Básicas:Operaciones lógicas con bits 28

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

Instrucciones Básicas:Operaciones lógicas con bits 29

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)

Instrucciones Básicas:Operaciones lógicas con bits 30

15
Función Memoria
Instrucciones de Set y Reset
KOP FUP AWL

SET Set Set

E1.0 A9.0 U E1.0


S S A9.0

RESET Reset Reset

E1.1 A9.0
R U E1.1
R A9.0

Instrucciones Básicas:Operaciones lógicas con bits 31

Función Memoria
l Ejemplo

l Solución con Set y Reset


SOLUCIÓN EN AWL
U E 0.0
S A 4.0
U E 0.1
R A 4.0

Instrucciones Básicas:Operaciones lógicas con bits 32

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

Instrucciones Básicas:Operaciones lógicas con bits 33

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

Instrucciones Básicas:Operaciones lógicas con bits 34

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).

Instrucciones Básicas:Operaciones lógicas con bits 35

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

Instrucciones Básicas:Operaciones lógicas con bits 36

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

Instrucciones Básicas:Operaciones lógicas con bits 37

Ejemplo:solución

Instrucciones Básicas:Operaciones lógicas con bits 38

19
Ejemplo:Manual

Instrucciones Básicas:Operaciones lógicas con bits 39

Ejemplo:Automático

Instrucciones Básicas:Operaciones lógicas con bits 40

20
Ejemplo:Automático
Funcionamiento Incorrecto

Si se desactiva E0.2 una vez


que empieza a llenar se
para la bomba y la luz
indicadora. Debido al
segmento 1.

Instrucciones Básicas:Operaciones lógicas con bits 41

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é.

Instrucciones Básicas:Operaciones lógicas con bits 42

21
Ejemplo: Automático

Instrucciones Básicas:Operaciones lógicas con bits 43

Ejemplo: Automático sin que


se pare la bomba/luz

Instrucciones Básicas:Operaciones lógicas con bits 44

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.

Instrucciones Básicas:Operaciones lógicas con bits 45

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

Instrucciones Básicas:Operaciones lógicas con bits 46

23
Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 47

Instrucciones que afectan al


RLO
l NOT
l NOT es la instrucción para invertir el RLO.
l CLR/SET
l El RLO pasa a 0 con la instrucción borrar CLEAR, y el RLO pasa a1 con la instrucción SET.
l SAVE/U RB
l Con la instrucción SAVE (grabar memoria), el contenido del RLO se almacena en un registro (palabra
de estado). El RLO almacenado puede ser consultado de nuevo con la instrucción U RB.

Instrucciones que Afectan al RLO


KOP FUP AWL

E0.0 E0.1 A8.0 U E0.0


NOT
NOT
U E0.1
NOT
= A8.0

No se visualiza en KOP No se visualiza en FUP


CLR CLR
SET SET

E1.0 U E1.6
SAVE (SAVE)
SAVE
A8.1
RB
( )
U RB
= A8.1

Instrucciones Básicas:Operaciones lógicas con bits 48

24
Índice

l Operaciones lógicas con bits


l Operaciones básicas
l Instrucciones de terminación de cadenas lógicas
l Combinación de operaciones básicas
l Función memoria
l Instrucciones que afectan al RLO
l Operaciones que detectan cambios en el
resultado lógico

Instrucciones Básicas:Operaciones lógicas con bits 49

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

Instrucciones Básicas:Operaciones lógicas con bits 50

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

Instrucciones Básicas:Operaciones lógicas con bits 51

26
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

PLC’s
Página 1
Curso 2009/10
Diagnosis e información del sistema

•  Herramientas de diagnosis:

–  Visualización del estado del programa

•  Permite “seguir” el procesamiento de un bloque lógico que se está ejecutando en la CPU

•  En AWL es configurable la información de la


tabla de diagnosis (herramientas > preferencias>AWL)
ACCU-1

•  Además, se puede forzar variables de tipo BOOL: ?????

1. Seleccione el operando que quiere forzar.

2. Elija el comando de menú Test > Forzar a 1 o Test > Forzar a 0.

–  Test con tabla de variables.


PLC’s
Página 2
Curso 2009/10
Diagnosis e información del sistema

•  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:

•  Desde Admin. Simatic: Insertar > Bloque S7 > Tabla var.

•  También, desde Admin. Simatic: Sistema de destino > Observar / forzar.

•  También, desde ventana “Observar/forzar variables”: Tabla > Nueva

PLC’s
Página 4
Curso 2009/10
Diagnosis e información del sistema

Observar y forzar variables


•  Punto y condición de disparo

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

•  Admdor. Simatic -->


Icono de HW (doble click)
CPU (doble click)
Propiedades

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

Tiempo de vigilancia de ciclo


Si el tiempo de ciclo (ms) supera el tiempo de vigilancia, la CPU pasará al estado operativo STOP.
Causas de un rebase del tiempo de vigilancia:
procesos de comunicación acumulación de alarmas errores en el programa de la CPU.

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

•  “Sistema Destino” --> “Información del Módulo”.


Hay varias solapas, cada una de las cuales contiene información sobre un determinado
aspecto.
Dependiendo de si se hace ONLINE/OFFLINE, las solapas son diferentes:
–  “General”: versión de la CPU, etc

–  “Datos característicos”: dice cuántas marcas tiene, entradas, salidas, contadores,


memoria, etc. y las direcciones que ocupan.

–  “Buffer de diagnóstico”: listado de eventos. En caso de error, iremos a él, y


veremos el listado.

PLC’s
Página 9
Curso 2009/10
Diagnosis e información del sistema

•  “Sistema Destino” --> “Información del Módulo”.


Más opciones:

–  Bloques: cuántos módulos hay, cuáles son, qué tamaño pueden tener...

–  Tiempo de ciclo: cuánto ha tardado el último ciclo, cual es el tiempo de


vigilancia que tiene, posibilidad de cambiarlo...

–  Pilas: permite ver los registros, acumuladores, palabra de estado, etc.,


módulos no completamente procesados, y así averiguar porqué el
autómata pasa a STOP.

PLC’s
Página 10
Curso 2009/10
Diagnosis e información del sistema

•  “Sistema Destino” --> “Información del Módulo”.


Más opciones:

–  Sistema de reloj: hora del autómata, horas de funcionamiento, etc.

–  Tiempo de ciclo: visualiza el tiempo de ciclo mínimo, máximo y


actual. También podremos actualizar los valores.

–  Memoria: ocupación de la memoria.

PLC’s
Página 11
Curso 2009/10
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

PLC’s
Página 1
Curso 2009/10
Contadores

•  Hay un área de la memoria de la CPU reservada para


contadores.
–  Hay 64 contadores
–  Cada contador tiene asignada una palabra de 16 bits. El valor
máximo que pueden contar de 999 (BCD).
–  Se identifican con la letra Z

•  Instrucciones disponibles:
–  cargar un valor prefijado,
–  leer su contenido,
–  incrementar, decrementar, resetear.

PLC’s
Página 2
Curso 2009/10
Contadores

Operaciones habituales con 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)

Automatizar un garaje de 5 plazas de tal forma


que si éste se encuentra lleno se encienda una luz
indicándolo y no suba la barrera. En caso contrario
deberá estar encendida otra luz indicando “LIBRE”.

El garaje consta de 5 plazas

Disponemos de botón y una barrera en la


entrada y lo mismo en la salida.

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

Operación Operando Significado


S Activar (cargar) un contador
El contador se activa con el flanco creciente del RLO.
R Reponer (borrar) un Contador
El contador se pone a “0” siempre que el RLO sea “1”.
CU Incrementar un Contador (contaje hacia adelante)
Con flanco creciente se incrementa en 1 el valor del contador.
Con RLO a 0 no se modifica el valor del contador.
CD Decrementar un Contador (contaje hacia atrás)
Con flanco creciente se reduce en 1 el valor del contador.
Con RLO a 0 no se modifica el valor del contador.
Identificador Parámetro AG S7-300
C 0 ... 255
Tipos de Contadores
Incrementador/Decrementador
STL FBD/LAD
A I 0.0
CU C 1
A I 0.1 C1
CD C 1 S_CUD
L C#100 I 0.0 CU
S C 1 I 0.1 CD
A I 0.3
R C 1
I 0.2 S CV AW 6
L C 1
C#100 PV CV_BCD MW 2
T AW 6
LC C 1 I 0.3 R Q Q 4.0
T MW 2
A C 1
= Q 4.0

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

Formato de la Palabra de Cómputo


15 12 11 8 7 4 3 0

0000hex 102 101 100


Valor del contador especificado en BCD (0 a 999)
• Un contador toma como valor de cómputo el contenido del ACU 1
• Rango de valores desde 0 a 999 unidades
• Sólo valores positivos en BCD
Especificación de un contador en formato de una constante
L C#100; //Valor del contador 100
L W#16#0100; //Valor del contador 100

Especificación de un contador en formato de una variable


L C#200; //Valor del contador 20
T MW 56; //Salvar valor del contador
.......
L MW 56; //Cargar el valor del contador
Orden de las Instrucciones
Contar Hacia Adelante C1
A I 0.0 S_CUD
Ejemplo: Valor de Contaje
CU C 1 I 0.0 Duración: C#5
CU
Contar Hacia Atrás I 0.1 CD
A I 0.1 Constante Valor
CD C 1 I 0.2 S CV DBW 2
Cargar C#5 PV CV_BCD QW 6
A I 0.2
L C#5 I 0.3 R Q Q 4.0
S C 1
Poner a Cero
A I 0.3
R C 1 Incrementar
CU - I 0.0
Consultas Digitales Decrementar
L C 1 CD - I 0.1
T DBW 2 Activar
LC C 1 S – I 0.2

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

Carga y Lectura de un Contador


Constante de Cómputo 15 12 11
0 1 0 0 0 0 0 1 0 0 0
0
0
Operación
Operando Valor del contador de 3 dígitos
(codificada en BCD)

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
- .......

Valor actual del contador C2

L C 2 LC C 2
ACU 1

Valor en Binario Valor de tres dígitos en BCD


Posiciones de bits ocupadas con “0”
Parámetros del Contador

Parámetros del Contador Incrementador


Parámetros del Contador Decrementador

Operaciones de Contaje – Activar un Contador “S” y Decrementar “ZR”


Cronograma Esquema Eléctrico
Estados de
señal I 0.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

Q 4.5 Valor del Contador


0
1
Q 4.5
0
T iem po

S C 1 S C 1

STL FBD LAD


A I 0.0 I 0.0 C 1
CD C 1 Z1
S_CD
NOP 0 S_C D CD
A I 0.1 I 0.0 CD
I 0.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

STL FBD LAD


A I 0.0
CU C 1 C 1
NOP 0 I 0.0 C 1
S_C U
NOP 0 S_C U

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)

• El flujo de información discurre a través de los denominados acumuladores


Estructura de los Acumuladores
31 24 23 16 15 8 7 0
Byte alto Byte bajo Byte alto Byte bajo

Palabra alta ACU(1 ó 2) Palabra baja

Operaciones de Carga y Transferencia


Memoria sistema Memoria trabajo Módulos
Imágenes PII, PIQ Temporiz. Contadores Bloque de datos Periferia de entradas

Marcas Palabra de estado Long. número bloques

Dat. locales temporales Reg. direcciones Constantes, punteros

Funciones de carga Funciones del acumulador

Acumulador 1 Acumulador 2

Func. transferencia Funciones digitales

Imágenes PII, PIQ Palabra de estado

Marcas Dat. locales temporales Bloque de datos Periferia de salidas

Memoria sistema Memoria trabajo Módulos


Operaciones de Carga
• La función carga (L - load) pone en el acumulador1 el valor del operando especificado:
(constante, variable o una dirección ) (todos los tipos de datos con 8, 16 o 32 bits)
• Operandos ubicados en la memoria:

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

Efecto sobre el ACU 1


ACCU 1 contenidos para las instrucciones de carga
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

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

Efecto sobre el ACU 2 – Operaciones de Transferencia

ACU 2 ACU 1 Informaciones Información


en la PIQ perdida
Word dWord c Word bWord a
T QW 5
Word dWord c Word bWord a Word a Valor previo
de QW 5

ACU 2 ACU 1 Informaciones Información


en la PAA perdida
ID 1 ID 3
T QD 10
ID 1 ID 3 ID 3 Valor previo
de QD 10
Funciones del Acumulador I
• Permiten transferir valores de un acumulador a otro, o reemplazar
bytes en el acumulador 1
• Se ejecutan independiente del resultado lógico o bits de estado

Transferencia directa entre acumuladores


TAK: Permite intercambiar el contenido de ACU1 y ACU 2
PUSH: Permite desplazar el contenido de los ACU hacia adelante
POP: Permite desplazar el contenido de los ACU hacia atrás

TAK PUSH POP

Acumulador 2 Acumulador 1 Acumulador 1 Acumulador 2

Acumulador 1 Acumulador 2 Acumulador 1 Acumulador 2

Funciones del Acumulador II

Intercambio de Bytes en el Acumulador 1

CAW: cambia en el acumulador 1, los bytes de la palabra de menor peso

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í

n n+1 n+2 n+3


CAW
n n+1 n+3 n+2

n n+1 n+2 n+3


CAD
n+3 n+2 n+1 n
Carga y Transferencia de Datos – Move
En funciones Lógicas
• La operación Transferir un valor permite inicializar variables con valores
predeterminados
• El valor indicado en la entrada IN se copia en el operando indicado en la salida OUT
• Permite copiar todos los tipos de datos de 8,16 o 32 bits

Cuadro FUP Parámetro Tipo de Area de Descripción


datos memoria
EN BOOL I, Q, M, D, L Entrada de habilitación
MOVE T, C
IN Todos tipos I, Q, M, D, L Valor fuente
EN OUT 8, 16 o 32 bi
OUT Todos tipos I, Q, M, D, L Dirección de destino
IN ENO 8, 16 32 bi
ENO BOOL I, Q, M, D, L Salida de habilitación

Carga y Transferencia de Datos


KOP AWL

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 Parámetros Declaración Tipo dato Descripción


20 SRCBLK INPUT ANY Fuente de donde copiar datos
RET_VAL OUTPUT INT Información de error
DSTBLK OUTPUT ANY Destino donde copiar los datos

Funciones del Sistema para Transferencia de Datos

SFC 21 FILL

SFC Parámetros Declaración Tipo dato Descripción


21 VBAL INPUT ANY Area fuente a ser copiada
RET_VAL OUTPUT INT Información de error
BLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos

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

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

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)

Tipos de datos definidos por el usuario


(mayores de 32 bits) Tipo de Datos UDT (User Defined Type)

PLC’s
Página 2
Curso 2009/10
TIPOS DE DATOS DE BIT – TAMAÑO

•  La memoria del Autómata está estructurada en bytes.

•  Estos bytes podemos agruparlos/descomponerlos, obteniendo los


siguientes tamaños de datos:
–  Bit _ _ _ .Nº

–  Byte (8 bits) _ _ _ B

–  Palabra/word (16 bits) _ _ _ W

–  Doble palabra/double word (32 bits) _ _ _ D

•  Se puede acceder a cualquier área de la memoria: marcas, entrada,


salida, etc. con cualquiera de los tamaños de datos:
PLC’s
Página 3
Curso 2009/10
DIRECCIONAMIENTO 1/3

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

•  Dentro de cada byte, palabra o doble palabra, los bits se numeran de


derecha a izquierda, de 0 al 7. E 124.0

•  Dir. byte: área de memoria + B + nº de byte EB124

•  Dir. palabra: área de memoria + W + nº de su 1er byte

EW124 => EB124 EB125

•  Dir. doble palabra: área de memoria + D + nº de su 1er byte

MD0 => MB0 MB1 MB2 MB3


PLC’s
Página 6
Curso 2009/10
SISTEMAS NUMÉRICOS

•  Sistemas numéricos soportados:


–  Decimal (enteros y fraccionarios), binario, hexadecimal, BCD

•  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)

Estándar IEEE754: Expresa números reales en 32 bits

Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)

31 30 23 22 21 ………... 2 1 0

...

-  Signo (S) ⇒ 1: negativo , 0: positivo (bit 31)

-  Mantisa (M) ⇒ La mantisa incluye 23 bits (bit 0.. 22).

-  Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30).

PLC’s
Página 9
Curso 2009/10
Números en COMA FLOTANTE (2/2)

Estándar IEEE754: Expresa números reales en 32 bits

Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)

•  Ejemplo:
1#10000000#11000000000000000000000

–  Parte ligada al signo: (-1)1 = -1


–  Parte ligada al exponente: 2128-127=21 =2
–  Parte ligada a la mantisa: 1+6291456·2-23=1+0.75 =1.75
–  Resultado: -1 · 2 · 1.75 = -3.5

PLC’s
Página 10
Curso 2009/10
ACUMULADORES (1/2)

•  Registros auxiliares de 32 bits para intercambio de datos y


operaciones de comparación y aritmeticas.

ACCU-H (16 bits) ACCU-L (16 bits)

•  CPU 314IFM tiene 2 acumuladores.


•  Carga al ACCU1,
y el antiguo ACCU1 pasa al ACCU2.

•  Si cargamos o transferimos tamaños de datos menores a la


doble palabra ( bits, bytes (B), word (W) ),
se empieza a leer y escribir por la derecha (byte menos
significativo)
PLC’s
Página 11
Curso 2009/10
ACUMULADORES (2/2)

Operaciones entre acumuladores:

–  TAK: intercambia contenido ACCU1 y ACCU2 .

–  PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º.

–  POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º.

–  ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4.

–  LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.

PLC’s
Página 12
Curso 2009/10
CARGA Y TRANSFERENCIA 1/7

Permiten programar intercambio de información


entre módulos de E/S y áreas de memoria.

L --> Instrucción de carga a ACCU-1

T --> Instrucción de transferencia desde ACCU-1

•  Cargan y transfieren del acumulador ACCU1, independientemente del


valor RLO, y tampoco lo modifican.

•  A dichas instrucciones les sigue un código en el que se indica el tamaño,


formato y el número/posición a cargar o transferir.
PLC’s
Página 13
Curso 2009/10
CARGA Y TRANSFERENCIA 2/7

•  Ejemplos:
–  LC Z0 --> Carga el contenido del contador en el acumulador en BCD.

Si Z0=10 ACU1: 00 00 00 .......... 0001 0000 (BCD)

–  L Z0 --> Idem pero en Binario

Si Z0=10 ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)

–  L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,

PLC’s
Página 14
Curso 2009/10
CARGA Y TRANSFERENCIA 3/7

•  Ejemplos:

–  L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE)

ACU1: EB124 EB125 EB126 EB127

Obsérvese: el byte más significativo del acumulador (parte izquierda) queda


relleno con el byte de dirección menor, y el de mayor dirección, a la dcha.

–  L EW8 (Cargar en el ACU1 la palabra 8 de la PAE)


00 00 EB8 EB9

–  L EB8 (Cargar en el ACU1 el byte 8 de la PAE)


00 00 00 EB8

PLC’s
Página 15
Curso 2009/10
CARGA Y TRANSFERENCIA 4/7

•  Ejemplos (con los Registros de Direcciones, AR1 y AR2):


–  LAR1 ----> Carga el reg.de dirección AR1 con el contenido de ACU1
–  LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2
–  TAR ----> Intercambia los contenidos de registros AR1 y AR2
–  TAR1 R2 ----> Transfiere el contenido de AR1 a AR2
El listado AWL siguiente:
L ED 124
LAR1
Tendrá como ED124 ----> AR2
L ED 128
resultado: ED128 ----> AR1
LAR2
TAR

PLC’s
Página 16
Curso 2009/10
CARGA Y TRANSFERENCIA 5/7

•  Ejemplos (L y T con diferentes tamaños):

–  L EB124 (Cargar en el ACU1 el byte 124 de las entradas)


00 00 00 EB124

–  Si ahora hacemos T MW32


00 00 00 EB124

MB32 MB33

•  L ED124 EB124 EB125 EB126 EB127

T MB32 MB32
PLC’s
Página 17
Curso 2009/10
CARGA Y TRANSFERENCIA 6/7

L +5 --> Carga entero de 16 bits

L L#523123 --> Carga un entero de 32 bits


NOTA:

Ver ayuda L B#16#EF --> Carga un hexadecimal de 8 bits


Adm. Simatic

“Tipos de datos L 2#0011_0110_1110_0011 --> Carga binario de 16 bits


simples”
T MB0 --> Transfiere (el ACU1) al byte de marcas 0

T AD256 --> Transfiere (el ACU1) a la doble palabra de salida 256

PLC’s
Página 18
Curso 2009/10
CARGA Y TRANSFERENCIA 7/7

PLC’s
Página 19
Curso 2009/10
EJERCICIO (Entregable 4)

•  Tenemos una mezcladora que produce 2 tipos de productos,


magdalenas y donuts, para lo cual controla la receta,
modificando las proporciones de harina (A124.0) y leche
(A124.1), y el tiempo que está mezclándolos (A124.2).
•  La producción empezará cuando E124.0 se ponga a 1
•  Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 3 segundos, A124.1 está encendido 1 segundo y
A124.2 durante 2 sg.
•  Si E124.1=0 produce donuts, para lo cual los tiempos son 4,
3 y 2 segundos respectivamente.
•  El sistema debe ser robusto de forma que si está en medio
de una receta no debe interrumpirse aunque cualquiera de
los dos botones de entrada se modifique

PLC’s
Página 20
Curso 2009/10
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

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)

RLO=1 si resultado de comparación es cierto , RLO=0 si falso

? I: Compara los contenidos de ACU2-L y ACU1-L

Ejemplo:

L MW 32 MB32 MB33 ----> ACU1


L EW 124 ACU1 ---> ACU2 Y EB124 EB125 ---> ACU1
==I Si ACU2(MW32) = ACU1(EW124), RLO=1
=A 124.0 y se activa el bit 0 del byte 124 de salida
>I Si ACU2(MW32) > ACU1(EW124), se activa el
=A 124.1 bit 1 del byte 124 de salida
<I Si ACU2(MW32) < ACU1(EW124), se activa el
=A 124.2 bit 2 del byte 124 de salida

PLC’s
Página 3
Curso 2009/10
Operaciones con AC. Comparación (III)

•  Ejemplo:

L MD 16 MB16 a MB19 ----> ACU1


L 1.359E+02 ACU1 ---> ACU2 Y 1.359E+02 ---> ACU1
<=R Si ACU2 < ó = ACU1 se activa el
=A 124.7 bit 7 del byte 124 de salida
>R Si ACU2 > ACU1 se activa el
=A 124.0 bit 0 del byte 124 de salida
S M 124.0 La marca 124.0 guarda el resultado de la última comparac

PLC’s
Página 4
Curso 2009/10
Operaciones con AC. Aritméticas (I)

•  Siempre son entre el contenido del ACU2 y el del ACU1

•  El resultado se guarda en ACU1, el contenido de ACU2 no cambia

•  Son independientes del RLO

•  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

•  Ejemplo: L MW 32 MB32 MB33 --- > ACU1


L EW 124 ACU1 --> ACU2 y EB124 EB125 --> ACU1
-I ACU2 – ACU1 ---> ACU1
PLC’s
Página 5
Curso 2009/10
Operaciones con AC. Aritméticas (II)

•  Una vez realizada la operación aritmética se activan los bits


A1, A0, OS y OV de la palabra de estado indicando:
resultado positivo, negativo, cero, desbordamiento o división por 0

- 32768 <= entero 16 bits <= 32767


- 2 147 483 648 <= entero 32 bits <= 2 147 483 647

•  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)

La función de los bits de la palabra de estado depende del tipo de operación

Ejemplo: operaciones en coma fija (I, D}

PLC’s
Página 7
Curso 2009/10
Operaciones con AC. Aritméticas (III)

•  Sumar constante entera o doble:


–  + <constante entera> ACU1 + CTE -> ACU1,

•  Dividir /I : ACU2 / ACU1:


–  ACU1 L cociente
–  ACU1 H resto

PLC’s
Página 8
Curso 2009/10
Ops. Avanzadas (nºs reales)

•  Toman el dato de ACU1, y dejan también ahí la solución:


–  Raíz cuadrada: SQRT
–  Elevar al cuadrado: SQR
–  Funciones trigonométricas: SIN, COS, TAN, ASIN, ACOS, ATAN
(con los ángulos en radianes).
–  Logaritmos: LN, LOG
–  Valor absoluto: ABS
–  Exponencial: EXP
–  Incrementos: + 1 => ACU1=ACU1+1
- 1 => ACU1=ACU1-1

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)

Rango para números BCD:

  -999 <= I <= +999

  -9 999 999 <= D <= +9 999 999

PLC’s
Página 11
Curso 2009/10
Conversiones entre tipos de datos (III)

•  Ejemplos:

L MW 10 MB10 MB11 (BCD) ---> ACU1


BTI ACU1 (BCD) ---> ACU1 (I, entero)
T MW 20 ACU1 (I) ---> MB20 MB21

L MW 10 MB10 MB11 (I) ---> ACU1


ITD ACU1 (I) ---> ACU1 (D)
T MD 20 ACU1 (D) ---> MB20 MB21 MB22 MB23

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:

L MD 10 MB10 MB11 MB12 MB13 (R) ---> ACU1


RND ACU1 (R) ---> ACU1 (D) con redondeo al más próximo
T MD 20 ACU1 (D) ---> MB20 MB21 MB22 MB23

L EW 124 EB124 EB125 ---> ACU1


NEGI C2 de ACU1 ---> ACU1
T MW 20 ACU1 ---> MB20 MB21

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:

L ED 124 La “AND” se hace entre ACU1 y ACU2, cargados previamente


L MD 20 con los valores indicados.
UD Este ejemplo se podría utilizar para enmascarar ciertos bits
T AD 124 de la ED124 según la máscara de MD20, transfieriendo a
la salida AD124 sólo los bits que nos interesen.

L EW 124 En éste caso, la “AND” se hace entre el ACU1 (previa-


UW W#16#AA55 mente cargado con los bytes de entrada 124 y
T MW 20 125) y un valor inmediato expresado en hexadecimal

PLC’s
Página 17
Curso 2009/10
Ops. de desplazamiento y rotación (I)

•  Se aplican al ACU1: palabra W (16 bits) o doble palabra D (32 bits).


•  El código AWL se formará eligiendo una letra de cada una de las siguientes
parejas:
–  S (shift) R (right) W (word)
n (Nº Despl.)
–  R (Rotate) L (left) D (double)

•  ROTATE SOLO DE 32 BITS

•  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)

¿?

•  Un desplazamiento a la izquierda de n bits


Multiplica el contenido del acumulador por 2^n

•  Un desplazamiento a la derecha de n bits


Divide el contenido del acumulador por 2^n ¡¡!!

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

L +3 En éste caso, SRD no lleva “n”, por lo que se tomará el depositado en


L MD 10 el byte bajo de ACU2, o sea, 3. Recordemos que al hacer el segundo
SRD L, lo que se cargó en ACU1 pasa a ACU2.
T MD 20
PLC’s
Página 20
Curso 2009/10
Ops. de desplazamiento y rotación (IV)

•  Ejemplos de Rotación:

L MD 10
RLD 3 Rota todos los bits del ACU1 tres posiciones a la izqda.
T MD 20

L +6 En éste caso, RRD no lleva “n”, por lo que se tomará el depositado en


L MD 10 el byte bajo de ACU2, o sea, 6. Recordemos que al hacer el segundo
RRD L, lo que se cargó en ACU1 pasa a ACU2.
T MD 20

PLC’s
Página 21
Curso 2009/10
EJERCICIO (Entregable 5)

Desarrollar un programa que resuelva ecuación de segundo grado.


Los coeficientes serán:
a (EB126) =>0,
b (EB125) entero (-128,127)
c (EB124) entero (-128,127)

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

Además, se utilizarán tres salidas para indicar:


•  si son raíces complejas (A125.7)
•  si son raíces reales (A125.4)
•  si son raíces iguales (A125.0)
•  Si a=0 parpadea A125
•  El programa debe resolver el caso b=c=0.

•  Muestre en AW126 la parte entera mayor de las dos raíces

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

Activación de los Bits de la Palabra de Estado


Activación de los bits CC1 y CC0 Tras una Operación de Comparación
Comparar Números Enteros
• La operación Comparar enteros ejecuta una operación de comparación cuya base
es un entero en coma fija de 16 bits.
• 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 IW 0


L MW 10
==I ==I
IN1 Q 4.0
IW 0 )
= A I 0.0
MW 10 IN2 = Q 4.0

Comparar Números Enteros Dobles


• La operación Comparar enteros dobles ejecuta una operación de comparación
cuya base es un entero en coma fija de 32 bits.
• 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
<>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

Múltiples comparaciones: L MW 124 L MW 124


L 1200 L 1200
>I >I
JC GREA JP GREA
==I JZ EQUA
JC EQUA
Ejemplos 2
L MW 92
Comparación de INT: L 120
==I
R M 99.0

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

Ejemplo – Generación de Señal Triangular


1
I 0.0 AW L
0
A I 0.0
1 AN M 20.0
M 20.0
0 L S5T#1S
IB 1 SD T 22
A T 22
AB 5 = M 20.0
***
A M 20.0
AN Q 4.0
0 CU C 22
1 A M 20.0
Q 4.0
0
A Q 4.0
CD C 22
Tiempo
AN I 0.0
R C 22
T 22; M 20.0 ***
I 0.0 F LC C 22
G C 22 T QB 5
& ***
1 Hz
S_CUD LC C 22
CU L IB 1
QB 5
CD >= I
&
CMP S M 20.1
S CV ==I ***
M 20.1
PV CV_BCD IN1 AN C 22
R Q SR R M 20.1
IB 1 IN2 Q S ***
A M 20.1
= Q 4.0
R Q
Q 4.0
Operaciones Matemáticas

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

• Se contemplan las siguientes funciones aritméticas:

Funciones Aritméticas Tipo de dato


INT DINT REAL
ADD_I
Suma +I +D +R
EN
Resta -I -D -R
IN1 OUT
Multiplicación *I *D *R IN2 ENO
División /I /D /R
División con resto como resultado - MOD -
Uso del Parámetro EN/ENO

EN = Entrada Enable ENO = Salida Enable

EN ENO ( )

Si está activo (1), se Si está activo (1), indica que la


ejecuta la instrucción de la caja.
Caja de instrucciones KOP instrucción se ejecutó sin error.
(FC, FB, Move, Add, etc)
Si no está activo (0), no se Si no está activo (0), no se llamó
ejecuta la instrucción. a la instrucción o no se produjo
la ejecución de la instrucción

* AWL no admite los parámetros EN/ENO. ENO = al bit BR en AWL

Números Enteros Simples (I)


Suma de INT (+I) ADD_I L MW4
L MW10
• Interpreta como valores a sumar los contenidos EN
+I
de las palabras de las partes bajas de los ACU1-2 IN1 OUT T MW6
• La suma queda en ACU1 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
• La parte alta del ACU1 no se modifica

Resta de INT (-I) SUB_I L MW5


• Interpreta como valores a restar los contenidos L MW11
EN
de las palabras de las partes bajas de ACU1-2 -I
IN1 OUT T MW7
• Resta el valor del ACU1 del valor del ACU2 IN2 ENO
• El resultado queda en ACU1
• 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
• La parte alta del ACU1 no se ha modificado
Números Enteros Simples (II)
Multiplicación de INT (*I) MUL_I
• Interpreta como valores a multiplicar los contenidos de las palabras de las EN
partes bajas de los acumuladores 1 y 2. IN1 OUT
IN2 ENO
• El producto queda en ACU1como un número de tipo de dato DINT
• 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
• Para la siguiente multiplicación el valor está como un DINT en ACU1

División de INT (/I) DIV_I 31 16 15 0


• Divide los contenidos de las partes bajas EN ACU2 (Irrelevante) Dividendo
de los acumuladores 1 y 2. IN1 OUT
IN2 ENO /I
• ACU2 es el dividendo y ACU1 el divisor Antes

• Devuelve en ACU1 cociente y resto (INT) ACU1 (Irrelevante) Divisor


• Los bits CC0 y CC1 indican si +, - o cero
Después =
• Los bits OV y OS indican sobrepasamiento
• Si divisor=0, dividendo=divisor= 0 ACU1 Resto Cociente
CC0, CC1, Ov y OS se ponen a “1”

Números Enteros Dobles (I)


Suma de DINT (+D) ADD_DI
L MD4
L MD10
• Interpreta los valores de ACU1 y ACU2 EN +I
como valores en DINT IN1 OUT T MD16
• La suma queda en ACU1 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

Resta de DINT (-D) SUB_DI


• Interpreta los valores de ACU1 y ACU2 como valores en DINT EN
• Resta el valor del ACU1 del valor del ACU2 IN1 OUT
IN2 ENO
• El resultado queda en ACU1
• 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
Números Enteros Dobles (II)
Multiplicación de DINT (*D) MUL_DI
EN
• Interpreta los valores de ACU1 y ACU2 como valores en DINT
IN1 OUT
• El resultado de la multiplicación queda en ACU1 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

División de DINT (/D) DIV_DI


• Interpreta los valores de ACU1 y ACU2 como valores en DINT EN
• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor) IN1 OUT
IN2 ENO
• Almacena el cociente en el ACU1
• El cociente es un resultado entero de la división.

División de DINT con resto como resultado (MOD) MOD_DI


EN
• Interpreta los valores de ACU1 y ACU2 como valores en DINT IN1 OUT
• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor) IN2 ENO
• Almacena el resto en el ACU1

Evaluación de los Bits de la Palabra de Estado


• Las operaciones aritméticas de enteros afectan a los bits de estado CC1, CC0, OV y OS
Estado de señal de los bits de la palabra de estado: resultado del cálculo dentro del área válida

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

Resta de REAL (-R) SUB_R


EN
• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL IN1 OUT
• Resta del valor del ACU1 el valor del ACU2 IN2 ENO
• El resultado queda en ACU1
• 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

Números Reales (II)


Multiplicación REAL (*R) MUL_R L MD6
L MD12
• Interpreta los valores de ACU1 y ACU2 como EN
*R
valores de tipo de dato REAL IN1 OUT T MD67
• El producto queda en ACU1 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
• Si un operando no es REAL, retorna un valor no válido en ACU1 y CC0, CC1,
OV y OS se ponen a “1”

División de REAL (/R) DIV_R


L MD67
L MD3
• Interpreta los valores de ACU1 y ACU2 como EN /R
valores de tipo de dato REAL IN1 OUT T MD33
• Divide el valor de ACU2 (dividendo) IN2 ENO
entre el valor de ACU1 (divisor)
• Almacena el cociente en el ACU1
• En los bits CC0 y CC1 indica si el cociente ha sido positivo, negativo o cero.
• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
• Si un operando no es REAL, retorna un valor no válido en ACU1 y CC0, CC1
OV y OS se ponen a “1”.
Evaluación de los Bits de la Palabra de Estado
• Las operaciones aritméticas de reales afectan a los bits de estado CC1, CC0, OV y OS

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

Suma de Constantes al ACU1


Funciones Estructura semántica
+ B#16#bb Cargar Dirección1
+ +/-w Adición Constante
+ L#+/-d Transferir Resultado

• La adición de constantes es útil para el cálculo de direcciones


• Añade la constante especificada al contenido del ACU1
• Se puede especificar:
• constante byte hexadecimal
• constante word o doble word decimal
• Para añadir una constante word usando DINT , preceder a la constante con L#
• Si una constante decimal excede el rango de INT, calcula automáticamente en DINT

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

• Las funciones DEC e INC afectan a ACU1


• El valor que se puede incrementar o decrementar tiene un rango de 0 a 255
• Sólo afecta al byte de menor peso del ACU1
• No hay llevada (carry) al byte siguiente
• Se ejecutan con independencia del RLO

Ejemplos:
L ValorInicial L ValorFinal
INC 5 DEC 7
T ValorInicial T ValorFinal

Operaciones Aritméticas Avanzadas

• Las funciones matemáticas procesan números en formato de datos REAL


• Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de
la operación.
• Las funciones matemáticas toman el número del ACU1 como entrada
• Almacena el resultado en el ACU1
• Se contemplan las funciones:
• trigonométricas
• arco
• cuadrado y raíz cuadrada
• función exponencial en base “e” y logaritmo natural

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

Funciones Arco Ejemplo:


ATAN Arco seno en grados
• Existen las funciones arco: L 0.343
EN OUT
- arco seno (ASIN) ASIN
- arco coseno (ACOS) IN ENO L 57.2958
- arco tangente (ATAN) *R
• La entrada es un número REAL en ACU1 T Angulo_grados
• El resultado es un ángulo en radianes en ACU1

Funciones Logarítmicas y Exponenciales


Función Logarítmica (LN)
• Calcula el logaritmo natural de un número en coma flotante
LN
EN OUT

IN ENO

Exponencial en base e (EXP) Ejemplo: ab = eb ln a


EXP L Valor_a
• Realiza la función e( ACU1) LN
EN OUT
L Valor_b
*R
IN ENO
EXP
T Potencia
Funciones Cuadrado y Raíz Cuadrada
Cuadrado (SQR) Ejemplo: Volumen cilindro
SQR L Radio
• Calcula el cuadrado del valor del ACU1 EN OUT
SQR πr 2h
L MD 34 L Altura
SQR *R
IN ENO
T MD 38 L 3.141592
*R
T Volumen

Raíz cuadrada (SQRT) Ejemplo: c = a 2 + b2


L #a
• Extrae la raíz cuadrada del valor del ACU1 SQR
L M D10 SQRT L #b
SQRT EN OUT SQR
T MD 14 +R
IN ENO SQRT
T #c

Operaciones de Conversión
• Las funciones de conversión convierten el tipo de datos del valor del ACU1

BTI (BCD_I) INVI (INV_I)


BCD INT NEGI (NEG_I)
3 dec. ITB (I_BCD)
ITD
(I_DI)

BTD (BCD_DI) INVD (INV_DI)


DINT NEGD (NEG_DI)
BCD
7 dec. DTB (DI_BCD)
RND+ (CEIL), RND- (FLOOR)
DTR
RND (ROUND), TRUNC (TRUNC)
(DI_R)
ABS
REAL NEGR (NEG_R)
Conversión de Enteros
Estructura Semántica Función
Cargar Dirección1
Función de conversión EN ENO
Transferir Resultado
IN OUT

Conversión: Números en INT y DINT DI_R


L MD10
DTR
ITD: Conversión de INT a DINT (I_DI) EN ENO T MD30
ITB: Conversión de INT a BCD (I_BCD)
DTB: Conversión de DINT a BCD (DI_BCD) IN OUT
DTR: Conversión de DINT a REAL (DI_R)

Conversión: Números en BCD BCD_I L EW4


BTI
BTI: Conversión de BCD a INT (BCD_I) EN ENO T MW20
BTD: Conversión de BCD a DINT (BCD_DI)
IN OUT

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)

Modos de Redondeo en Conversión de Números Reales ROUND


EN ENO

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

• Se pueden programar de dos formas: Función


• El número de posiciones en ACU2 EN
IN OUT
Cargar Numero_de_posiciones N ENO
Cargar Dato1
Función desplazar
Transferir Resultado

• El número de posiciones como parámetro


Cargar Dato1
Fun. Desplazar Numero_de_posiciones
Transferir Resultado

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

CC1 ACU1 ACU1

Desplazamiento derecha (palabra) SRW Desplazamiento derecha (doble palabra) SRD

CC1 “0” CC1


“0” ACU1 ACU1
Desplazamiento con signo (palabra) SSI Desplazamiento con signo (doble palabra) SSD

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

Rotar a la derecha RRD Rotar a la derecha a través de CC1 RRDA


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

• Se pueden programar de dos formas: Función


• Operación sin constante EN ENO
Cargar Valor1 IN1
Cargar Valor2
Función lógica sin constante IN2 OUT
Transferir Resultado
• Operación con constante

Cargar Dato1
Operación lógica con constante
Transferir Resultado

Operación Digital AND


Operación digital AND
• AW (WAND_W) operación AND (palabra) entre ACU1 y ACU2
• AW W#16# operación AND (palabra) entre constante y ACU1
• AD (WAND_DW) operación AND (doble palabra) entre ACU1 y ACU2
• AD DW#16# operación AND (doble palabra) entre constante y ACU1

WAND_W L MW10
L MW20
EN ENO AW
MW10 IN1 T MW30

MW20 IN2 OUT MW30


Operación Digital OR
Operación digital OR
• OW (WOR_W) operación OR (palabra) entre ACU1 y ACU2
• OW W#16# operación OR (palabra) entre constante y ACU1
• OD (WOR_DW) operación OR (doble palabra) entre ACU1 y ACU2
• OD DW#16# operación OR (doble palabra) entre constante y ACU1

WOR_W
L MW32
EN ENO
L MW44
MW32 IN1 OW
T MW34
MW44 IN2 OUT MW34

Operación Digital OR Exclusiva


Operación digital OR exclusiva
• XOW (WXOR_W) operación OR exclusiva (palabra) entre ACU1 y ACU2
• XOW W#16# operación OR excl. (palabra) entre constante y ACU1
• XOD (WXOR_DW) operación OR excl. (doble palabra) entre ACU1 y ACU2
• XOD DW#16# operación OR excl. (doble palabra) entre constante y ACU1

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

Instrucciones de Salto Condicional


Salto Condicional (JMP, JMPN)
El Salto Condicional se ejecuta en función de una condición reflejada en uno o varios bits de
la palabra de estado.

FUP AWL FUP AWL


Segmento 1 Segmento 1 Segmento 1 Segmento 1
CAS2 CAS3
A I 0.0 A I 0.0
I 0.0 JMP JC CAS2 I 0.0 JMPN JCN CAS3
. . . .
. . . .
. . . .
. . . .

Segmento X Segmento X Segmento X Segmento X


CAS2: A I 0.4 CAS3: A I 0.4
CAS2 R Q 4.1 CAS3 R Q 4.1
Q 4.1 Q 4.1
I 0.4 R I 0.4 R
STL: Saltos Condicionales Basados en RLO
Salto Condicional (JC, JCN)
• El bit de la palabra de estado Resultado de la Operación Lógica (RLO) determina cuando
se ejecuta este salto condicional.
• También existen instrucciones que además guardan el resultado en el RB

Salta si RLO = 1 Salta si RLO = 1 y almacénalo en RB


A I 0.0 A I 0.0
A I 1.0 A I 1.0
JC NEW1 JCB NEW1

Salta si RLO = 0 Salta si RLO = 0 y almacénalo en RB

A I 0.0 A I 0.0
A I 1.0 A I 1.0
JCN REC2 JNB REC2

STL: Saltos Condicionales Basados en BR, OV, OS


Salto Condicionales Basados en BR, OV, OS
Los bits del la palabra de estado Resultado Binario (RB) o Desbordamiento/Desbordamiento
Memorizado determinan cuando se ejecutan estos saltos condicionales. La evaluación de los
bits RB, OV y OS proporciona un medio de verificar condiciones de error.

• 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

CC0 CC1 Salto ejecutado


0 0 JZ Salto si el resultado es Cero
JMZ Salto si cero o menor de cero
JPZ Salto si cero o mayor de cero
1 0 JM Salto si es menor de cero (negativo)
JMZ Salto si cero o menor de cero (negativo)
JN Salto si no cero
0 1 JP Salto si es mayor de cero (positivo)
JPZ Salto si cero o mayor de cero (positivo)
JN Salto si no es cero
1 1 JUO Salto si resultado no es admisible

STL: Distribuidor de Saltos


Instrucción JL
• Un salto distribuidor JL permite especificar (calcular) saltos a una sección del programa
en el módulo condicionado a un número de posición.
• Trabaja conjuntamente con una lista de saltos incondicionales JU
• Hay una etiqueta de salto en JL que apunta al final de la lista
• Puede tener hasta 255 entradas
• Utiliza el byte bajo del ACU1

L Numero_de_posiciones //Número para decidir el salto


JL END //Selector de “x” posicines
JU M0 //Si ACU1 tiene “0” salta a meta 0
JU M1 //Si ACU1 tiene “1” salta a meta 1
.
.
JU Mx // Si ACU1 tiene “x” salta a meta x
END: JU ERR // Si ACU1 es mayor de “x” o menor de “0”
.....
M0: L MW 30
STL: Distribuidor de Saltos

STL: Función Bucle


L +4 // cargar el contador de bucle
NEXT:T MB10 // primera instrucción del bucle
Inicio del Contador de Bucle . // bucle
. // bucle
. // bucle
. // bucle
Sección de Programa
. // bucle
que va a ser ejecutado
L MB10 // últimas instrucciones del bucle
varias veces
LOOP NEXT // salto a la etiqueta NEXT

Decremento del Contador En este ejemplo, el programa comprendido


de Bucles entre NEXT y NEXT se ejecutará 4 veces.

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.1 Combinación binaria


A I 0.2
= Q 4.0

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

Ejemplos de Saltos: Ejecución Prioritaria


FC13
A I 0.0 Con I0.0 se ejecutan ‘A’ y ‘D’
JC PRI1

A I 0.1 Con I0.1 se ejecutan ‘B’ y ‘D’


JC PRI2

A I 0.2 Con I0.2 se ejecutan ‘C’ y ‘D’


JC PRI3

JU FIN

PRI1 A I 1.0 Programa ‘A’


A I 1.1
= Q 4.0
JU FIN

PRI2 A I 1.2 Programa ‘B’


A I 1.3
= Q 4.1
JU FIN

PRI3 A I 1.4 Programa ‘C’


A I 1.5
= Q 4.2
JU FIN

FIN A I 1.6 Programa ‘D’


A I 1.7
= Q 4.3
JU FIN
BE
Ejemplos de Saltos: Mezcladora
Mediante un selector de 5 posiciones, realizar el programa que permita ajustar el tiempo de funcionamiento de una
mezcladora. Los tiempos fijos asignados a cada posición se encuentran en el DB 10

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

Ejemplos de Saltos: Lector de Alarmas


FC14
L PB 0 Primera consulta de alarma
T MB 0
A M 0.0
S M 10.0
JC ALA0
ALA1 R M 10.0
. Código de Programa Principal
.
.
L PB 0 Segunda consulta de alarma
T MB 0
A M 0.0
S M 10.1
JC ALA0
ALA2 R M 10.1
. Código de Programa Principal
.
.
L PB 0 Tercera consulta de alarma
T MB 0
A M 0.0
S M 10.2
JC ALA0
ALA3 R M 10.2
. Código de Programa Principal
.
.
BEU

ALA0 L IB 1 Programa de alarma


T PB 1

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

MB 20 AN I 0.1 Salto si es buena


JC BUEN
I 0.0 L MB 20 Si es defectuosa se desplaza
SLW 1 el registro de desplazamiento
L 1 y se introduce un “1”
+I
T MB 20
JU FIN

BUEN L MB 20 Si es buena se desplaza el


SLW 1 registro de desplazamiento
T MB 20

FIN L MB 20 Presentar el registro de


T QB 4 desplazamiento en QB4
BE

Ejemplos de Saltos: Saltos Distribuidos


FC 14
L IB 0
JL OVER
JU M0
JU M1
JU M2
JU M3
OVER: L 0
T QW 4
BEU

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.

Los saltos tienen una serie de características y requisitos:

 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.

Saltos en Step 7: SPA


La operación de salto SPA es un salto incondicional, es decir, se ejecuta siempre que se encuentre en el
camino de la ejecución del programa y no depende del estado del RLO.

La sintáxis será de la siguiente forma:

….

SPA pepe

(código que no se ejecutará)

pepe: NOP 0

(Código que continuará ejecutándose)

Tras la etiqueta hay que escribir 2 puntos y obligatoriamente una instrucción.

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.

A mi personalmente me gusta colocar el NOP 0 tras la etiqueta por varios motivos


 Porque cuando estás colocando las etiquetas SPA u otras me gusta colocar la etiqueta de salto
inmediatamente después. Como no sé cómo va a seguir el programa, coloco la NOP 0.
 Si coloco una instrucción tras la etiqueta y mañana borro la primera instrucción tras el salto corro
el peligro de no darme cuenta que además de la instrucción, he borrado también el salto.
 A mi juicio queda más limpio ya que todas las etiquetas siempre llevarán el mismo empiece y es
más visible entre todo el código.
 Manías personales (la de más peso probablemente de todas)

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.

Normalmente va a ir acompañada de otras instrucciones de salto, complementando las acciones. En el vídeo


de ejemplo podrás ver cómo se pueden combinar.

Saltos en Step 7: SPB y SPBN (If /Then)

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.

La sintáxis será de la siguiente forma:

….

Condición booleana

SPB pepe

(código que se ejecutará si RLO = 0 y no se ejecutará con RLO=1)

pepe: NOP 0

(Código que continuará ejecutándose con o sin salto)


Evidentemente con SPBN sería idéntico:

….

Condición booleana

SPBN pepe

(código que se ejecutará si RLO = 1 y no se ejecutará con RLO=0)

pepe: NOP 0

(Código que continuará ejecutándose con o sin salto)

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

(Codigo del IF)

Etiq2: NOP 0

Como puedes ver, hemos combinado el SPB con el SPA de forma que:

 Si la condición de salto se cumple, saltamos al Etiq1 y ejecutamos el código del IF y continuamos


evitando el código del ELSE.
 Si la condición de salto NO se cumple, ejecutamos a continuación el código del ELSE y hacemos
un salto incondicional (SPA) para evitar y no ejecutar el código del IF saltando al Etiq2.

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.

¿Existen más tipos de saltos en Step 7?


Efectivamente hay otros tipos de salto para realizar otro tipos de tareas como pueden ser los que se
generan en otros lenguajes como son las sentencias SELECT-CASE o FOR-NEXT entre otros

LOOP en Step 7 (Saltos II) – Bucle For – Next y


ejemplo de filtrado analogico
11 enero, 2013 en ejemplos, Teoría, Tutoriales, Uncategorized, Videos 1 Comentario




 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

(Código) –> Implementamos el código que queramos


L MW10 –> Cargamos el valor del contador de ciclos en el ACU-1
LOOP NEXT –> Ejecutamos el loop y saltamos a la etiqueta deseada (Llamada NEXT en este caso pero
podríamos llamarla pepe)

(Código) –> Continuamos con el código que queramos.

Vayamos con la explicación del LOOP.

¿Qué hace el LOOP en Step 7?


La instrucción LOOP hace lo siguiente:

[unordered_list style="bullet"]

 Toma el valor del ACU-1 y le resta una unidad.


 Evalua el resultado de restar la unidad. Si el resultado no es cero, salta a la etiqueta. Si es cero (ya
ha terminado), continua en la línea siguiente (no ejecuta el salto).

[/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.

Por tanto, hemos hecho lo siguiente:

Cargar el número de iteraciones en el acumulador 1. Por ejemplo 10.

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

Por tanto, en el primer ciclo, MW10 valdrá 10.

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.

Una vez terminado el código ejecutamos

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"]

 Tomaremos la señal cada 100 ms.


 Pasaremos como entrada el valor analógico en tipo entero
 Realizaremos un filtrado de los “n” últimos ciclos donde “n” puede ser como mucho 200.
 Nos devolverá la media de los “n” últimos ciclos como valor real
 Nos devolverá la medida de los 200 últimos ciclos si hemos puesto n>20 y una señal booleana de
alarma indicando que el número de ciclos es demasiado grande y que por tanto
devolvemos solamente la media del máximo número de ciclos.
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

PLC’s
Página 1
Curso 2009/10
Control del flujo del programa: Ops. de Salto

•  Permiten al programa interrumpir su desarrollo lineal, para continuar el


procesamiento en un punto diferente del programa.

•  El operando de una instrucción de salto es una meta o etiqueta.


–  meta:
•  4 caracteres máximo (el 1º letra) y distingue mayúsculas y minúsculas
Ejemplo: SPA MOT1
•  Debe ir seguida de : instrucción de línea cuando sea la marca del salto.
Ejemplo: MOT1: L EB 124

PLC’s
Página 2
Curso 2009/10
Operaciones de Salto incondicional

•  SPA salto incondicional a una meta (anterior o posterior)

•  SPL salto utilizando una lista de metas


permite distribuir saltos conjuntamente con SPA

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)

•  Su ejecución dependerá del cumplimiento, o no, de una determinada


condición, vinculada a bits de la palabra de estado.

•  Las operaciones más utilizadas son:


–  SPB salto si RLO = 1
–  SPBN salto si RLO = 0
•  Otros saltos condicionales, en función de otros bits de palabra de estado:
–  SPBI y SPBIN vinculadas a RB
–  SPO y SPS vinculadas a OV y OS, respect
–  SPZ, SPN, SPP, SPM, SPMZ, SPPZ y SPU vinculadas a resultados de operaciones aritm.
=0 <>0 >0 <0 <=0 >=0 no válido (op. Artimética no permitida, ejem: dividir por cero)

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.

•  LOOP decrementa ACU1-L y salta si “ACU1-L <> 0” a META

•  Ejemplo: L +5 inicializa contador de bucles


PROX: T MB 10 meta a la que salta
¨¨¨¨¨¨¨¨
¨¨¨¨¨¨¨¨ Segmento que se repite

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)

•  BEA o BE fin de bloque incondicionado.


Salta a) al fin de OB1 o b) a línea siguiente a la de llamada al bloque actual

•  BEB fin de bloque condicionado al RLO (si RLO=1)

PLC’s
Página 9
Curso 2009/10
EJERCICIO (Entregable 6)

•  Tenemos una mezcladora que produce 2 tipos de productos,


magdalenas y donuts, para lo cual controla la receta, modificando
las proporciones de harina (A124.0) y leche (A124.1), y el tiempo
que está mezclándolos (A124.2).
•  La producción empezará cuando E124.0 se ponga a 1
•  Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 2 segundos, A124.1 está encendido 1 segundo y A124.2
durante 3 sg.
•  Si E124.1=0 produce donuts, para lo cual los tiempos son 3, 2 y 4
segundos respectivamente.
•  El sistema debe ser robusto de forma que si está en medio de una
receta no debe interrumpirse aunque cualquiera de los dos
botones de entrada se modifique
•  La entrada E124.2 permite elegir si los productos y el proceso de
mezcla se realizan simultáneamente (si E124.2=0) o de manera
secuencial (si E124.2=1)

PLC’s
Página 10
Curso 2009/10
Depende  de la
Equivalente IEC Tipo Arranque
señal arranque

SI :  Impulso ‐ Impulso Conexión  Si

SV :  Impulso prolongado TP * Impulso Conexión  No

SE:  Retardo a la conexión TON Retardo Conexión Sí

SS: Retardo a la conexión memorizado ‐ Retarso Conexión No

SA:  Retardo a la desconexión (PRORROGA) TOFF ‐ Desconexión ‐

* 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

Los temporizadores permiten distintas operaciones:

• Funcionamiento en un modo determinado.


• Borrar la temporización.
• Re-arrancar un temporizador (FR).
• Consultar su estado como un operando más en operaciones lógicas
de bit.
• Consultar su valor en ACU 1.

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.

● El valor de temporización puede cargarse en la palabra baja del ACU


1 en formato binario, hexadecimal o BCD. Desde 0 a 9990 segundos

La siguiente sintaxis permite cargar un valor de temporización


predefinido: L W#16#abcd
a = base de tiempos
bcd = valor de temporización en formato BCD
Base de tiempos y código respectivo:
10 ms 0
100 ms 1
1s 2
10 s 3

Registros afectados: ACU 1, ACU 2 2


Carga de un valor de temporización
Ejemplo:

L W#16#210 //esto introduce un valor de 10 segundos en ACU 1


(2 base de 1s, 10 los segundos que deseamos)
L S5T#aH_bbM_ccS_ddMS
a = horas, bb= minutos, cc = segundos, dd = milisegundos

En este caso la base de tiempos se selecciona de forma automática,


tomándose la de valor más bajo posible. Debido a esto los valores de
resolución demasiado alta se redondean por defecto, alcanzando el
rango pero no la resolución deseada.

Las posibles resoluciones y rangos son:


0,01 s 10MS a 9S_990MS
0,1 s 100MS a 1M_39S_900MS
1 s 1S a 16M_39S
10 s 10S a 2H_46M_30S
L S5T#00H02M23S00MS //esto introduce un valor de temporización
de2 minutos y 23 segundos en el ACU 1 3
Temporizador como impulso (SI)
Instrucción: SI
Si el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca. El temporizador marcha con el
valor de tiempo indicado en ACU1. Si el RLO cambia de 1 a 0 antes de terminar el tiempo, el temporizador se
detiene. La salida del temporizador entrega 1 mientras el temporizador corre.

Registros afectados: ER

Ejemplo:

U E 0.0 //Empleamos la entrada 0.0 como entrada del temporizador


L S5T#45s //Introducimos un valor de temporización de 45 segundos
SI T2 //Empleamos el temporizador 2 como impulso
U T2 //Leemos la salida del temporizador
= A 0.1 //Asignamos la salida del temporizador a la salida 0.1

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:

U E 0.2 //Empleamos la entrada 0.2 como entrada del temporizador


L S5T#85s //Introducimos un valor de temporización de 85 segundos
SV T 9 //Empleamos el temporizador 9 como impulso prolongado
U T 9 //Leemos la salida del temporizador
= A 9.1 //Asignamos la salida del temporizador a la salida 9.1

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:

U E 0.7 //Empleamos la entrada 0.7 como entrada del temporizador


L S5T#65s //Introducimos un valor de temporización de 65 segundos
SE T 4 //Empleamos el temporizador 4 como retardo a la conexión
U T 4 //Leemos la salida del temporizador
= A 8.1 //Asignamos la salida del temporizador a la salida 8.1

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:

U E 1.2 //Empleamos la entrada 1.2 como entrada del temporizador


L S5T#32s //Introducimos un valor de temporización de 32 segundos
SS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoria
U T 2 //Leemos la salida del temporizador
= A 3.1 //Asignamos la salida del temporizador a la salida 3.1

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:

U E 4.2 //Empleamos la entrada 4.2 como entrada del temporizador


L S5T#32s //Introducimos un valor de temporización de 32 segundos
SA T 7 //Empleamos el temporizador 7 como retardo a la desconexión
U T 7 //Leemos la salida del temporizador
= A 1.1 //Asignamos la salida del temporizador a la salida 1.1

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:

U E 0.0 //Empleamos la entrada 0.0 como entrada del temporizador


L S5T#2s //Introducimos un valor de temporización de 2 segundos
SS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoria
U E 0.1 //Empleamos la entrada 0.1 como entrada de borrado
R T 2 //Si la entrada 0.1 cambia de 0 a 1 el temporizador 2 se borra
U T 2 //Leemos la salida del temporizador
= A 3.1 //Asignamos la salida del temporizador a la salida 3.1

10
Re-arranque de un Temporizador AWL S7-300/400
Instrucción: FR T

Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el


temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador.

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

Si el RLO cambia de 0 a 1 en la entrada de re-arranque mientras está en marcha el temporizador, el


temporizador vuelve a arrancar. El tiempo programado se emplea como tiempo actual para el re-
arranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto.

Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay


un RLO 0 en la entrada del temporizador. 11
Re-arranque de un Temporizador AWL S7-300/400
Instrucción: FR T

Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el


temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador.

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

Si el RLO cambia de 0 a 1 en la entrada de re-arranque mientras está en marcha el temporizador, el


temporizador vuelve a arrancar. El tiempo programado se emplea como tiempo actual para el re-
arranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto.

Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay


un RLO 0 en la entrada del temporizador. 12
Lectura de un valor de Temporización AWL S7-300/400

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.

Registros afectados: ACU 1, ACU 2

Ejemplos:

L T 1 //introduce el valor del temporizador 1 en el ACU 1


LC T 2 //introduce el valor del temporizador 2 en el ACU 1 en
BCD

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.

Temporizador “SE”: Es un temporizador de retardo a la conexión. Para programar el


temporizador, necesitamos cinco operaciones como mínimo.

1ª Necesitamos una condición a partir de la cual empiece a temporizar. Esta condición


puede constar de una sola instrucción o de varias.

2ª Necesitamos decirle cuanto tiempo tiene que temporizar.

3ª Necesitamos decirle el modo de funcionamiento y nº de temporizador que


queremos utilizar. (En cada CPU tenemos una cantidad de temporizadores)

4º Queremos que en algún momento dado, (mientras temporiza, cuando ha acabado de


temporizar, etc.)

5º haga algo.

Alguna de estas operaciones pueden constar de más de una instrucción. 14


Temporizadores SE y SI S7-300/400

El modo de funcionamiento es el siguiente:

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.

Con el pulsador de marcha quiero que comience el ciclo. El ciclo de funcionamiento es el


siguiente:

1º/ Verde durante 5 seg.


2º/ Verde + Amarillo durante 2 seg.
3º/ Rojo durante 6 seg.

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

U E 0.0 //Al activar el pulsador de marcha


S A 4.2 //Encender el verde
U A 4.2 //Si se ha encendido el verde
L S5T#5S //Cuenta 5 segundos
SE T 1 //Con el temporizador 1
U T1 //Y cuando acabes de contar
S A 4.1 //Enciende el amarillo
U A 4.1 //Si se ha encendido el amarillo
L S5T#2S //Cuenta 2 segundos
SE T 2 //Con el temporizador 2
U T2 //Y cuando acabes de contar
S A 4.0 //Enciende el rojo
R A 4.1 //Apaga el amarillo
R A 4.2 //Y apaga el verde
U A 4.0 //Si se ha encendido el rojo
L S5T#6S //Cuenta 6 segundos
SE T 3 //Con el temporizador 3
U T3 //Cuando acabes de contar
S A 4.2 //Enciende el verde
R A 4.0 //Y apaga el rojo
U E 0.1 //Si se activa el pulsador de paro
R A 4.0 //Apaga el rojo
R A 4.1 //Apaga el amarillo
R A 4.2 //Apaga el verde 17
BE
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

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.O //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 relé 19
BE
Automatización de un depósito AWL S7-300/400

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.

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.

● Las salidas no se activan en el mismo instante en el que se lee la


instrucción correspondiente. Existe un registro interno que se denomina
PAA (Imagen de proceso de salida), en el que se van almacenando los
valores que se tienen que transferir a las salidas cuando finalice el
correspondiente ciclo de scan.

Cuando se lea la instrucción BE es cuando se mandarán estos valores


a las salidas reales. Si hemos enviado varios valores dentro del mismo
ciclo de scan, el que realmente llegará a las salidas, será el último que
hemos enviado. 20
Automatización de un depósito AWL S7-300/400
Segmento 1: MANUAL

U E 0.0 //Si está en manual


= M 0.0 //Activa la marca 0.0
= M 0.1 //Y activa la marca 0.1

Segmento 2: AUTOMÁTICO

U E 0.1 //Si está en automático


U E 0.7 //Y está el relé bien
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
Automatización de un depósito AWL S7-300/400

A continuación se añaden las marcas a las salidas.

U M 0.0 //Si está activa la marca 0.0


O M 0.2 //O está activa la marca 0.2
= A 4.0 //Pon en marcha la bomba
U M 0.1 //Si está activa la marca 0.1
O M 0.3 //O la marca 0.3
= A 4.1 //Enciende la luz de marcha

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.1
BE

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.

Se añaden las instrucciones pertinentes.

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

//Selección por tamaño:

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

//Según el tamaño activo la cinta de salida:

U M 0.2 //Cuando sale la caja


U M 0.0 //y es grande
L S5T#5S
SV T 1
U T1
= A 5.0 //activo la cinta para grandes durante 5 seg.
U M 0.2 //Cuando sale la caja
UN M 0.0 //y no es grande
L S5T#4S
SV T 2
U T 2
= A 5.1 //activo la cinta para pequeñas durante 4 seg
U M 0.2 //Cuando sale la caja
R A 4.1 //Desactivo la cinta intermedia
R M 0.0 //Reseteo la marca que me indica el tamaño
25
Operaciones de Temporización

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

• Las operaciones relacionadas con temporizadores permiten medir secuencias de tiempo,


como, esperas, periodo de tiempo de una medida o generar impulsos

• En la memoria para cada temporizador hay reservados 16 bits

• Tiene acceso a la zona de temporizadores:


• las operaciones de temporización
• actualización por reloj (S.O.) de las palabras de temporización

• Se contemplan 5 tipos de temporizadores:


• impulso
• impulso prolongado
• retraso a la conexión
• retraso a la conexión memorizado
• retraso a la desconexió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

Impulso prolongado (SE) t

Retraso a la conexión (SD) t

Retraso a la conexión
memorizado (SS) t

Retraso a la
desconexión (SF) t
Elección del Temporizador Apropiado

Orden de las Instrucciones


ARRANCAR
T0
A I 0.0 S_ODT
L S5T#2S I 0.0 S BI
SD T 0 DBW 6

PONER A CERO S5T#2S QW 6


TV BCD
A I 0.1
R T 0 I 0.1 Q 4.0
R Q
CONSULTAS
DIGITALES

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

Irrelevante Base de 102 101 100


tiempo
Valor de temporización en BCD (0 a 999)

• 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

Código binario Base de tiempo Resolución Rango de tiempo


00 10 ms 0.01segundos 10 Ms a 9S 990MS
01 100 ms 0.1segundos 100 MS a 1M 39S 900MS
10 1s 1 segundo 1S a 16M 39S
11 10 s 10 segundos 10S a 2H 46M 30S

Especificación del Tiempo (I)


Especificación de Tiempo
• El valor de temporización se debe cargar en la parte baja del ACU 1, para desde allí
transferirlo al temporizador mediante el set que determine el modo de temporización
adecuado.
• El tiempo va decrementando hasta ser igual a 0.
• El valor de temporización puede cargarse en la palabra baja del ACU 1 en formato
binario, hexadecimal o BCD.
• Se debe elegir una base de tiempos y un valor dentro de dicha base, con lo que podemos
realizar temporizaciones desde 0 a 9990 segundos (0H00M00S00MS a
2H46M30S00MS).
Especificación del Tiempo (II)
Especificación del Tiempo como una Constante
Formato: L W#16#abcd
• a = base de tiempos
• bcd = valor de temporización en formato BCD
Ejemplo: L W#16#2010; //esto introduce un valor de 10 segundos en ACU 1
//(2 base de 1s, 10 los segundos que deseamos)

Formato “S5TIME#” o “S5T#”: L S5T#aHbbMccSddMS


•a = horas, bb= minutos, cc = segundos, dd = milisegundos
En este caso la base de tiempos se selecciona de forma automática, tomándose la de valor más bajo
posible. Debido a esto los valores de resolución demasiado alta se redondean por defecto, alcanzando
el rango pero no la resolución deseada.
Ejemplos: L S5T#00H02M23S00MS //esto introduce un valor de temporización de
//2 minutos y 23 segundos en el ACU 1
L S5TIME#10s; //Duración 10 segundos
L S5T#1m10ms; //Duración 1 minuto + 10 milisegundos

Especificación del tiempo como L S5T#10m; //Duración 10 minutos


T MW 20; //Salvar la duración
una Variable .......
L MW 20; //Cargar el tiempo

Carga de una Temporización


Preselección de Tiempo Base de Tiempos
S_ODT
B ase 0 1 2 3
- Constante S5TIME S BI B in a rio 00 01 10 11
F a c to r 0 ,0 1 s 0 ,1 s 1s 10s
- Palabra de Datos DBW
- Palabra de Entrada IW TV BCD
- Palabra de Salida QW
- Palabra de Marca MW
- ... R Q

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

Temporización en Base de Temporización de tres


Binario tiempos dígitos en BCD
Posiciones de bits ocupadas con “0”

Lectura de una Temporización


Palabra de Temporización Dual Palabra de Temporización Decimal
(BCD)
T 10 T 10
L T 10 LC T 10
S_ODT DBW 1 S_ODT DBW 5
T DBW 1 T DBW 5
S BI S BI LC T 10
MW 2 L T 10 MW 6
T MW 2 T MW 6
TV BCD L T 10 TV BCD LC T 10
QW 3 QW 7
T QW 3 T QW 7
L T 10 LC T 10
PW 4 PW 8
R Q T PW 4 R Q T PW 8

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

Cronograma Esquema Eléctrico

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

STL FBD LAD


A I 0.0
L S5T#5S
SP T 1
NOP 0
NOP 0
NOP 0
A T 1
= Q 4.5

Temporizador en modo Impulso Prolongado


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

Cronograma Esquema Eléctrico

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

STL FBD LAD


A I 0.0
L IW 16
SE T 2
NOP 0
NOP 0
NOP 0
U T 2
= Q 4.5
Temporizador en modo Retraso a la Conexión
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

Cronograma Esquema Eléctrico

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

STL FBD LAD


A I 0.0
L S5T#9S
SD T 3
NOP 0
NOP 0
NOP 0
A T 3
= Q 4.5

Temporizador en modo Retraso a la Conexión Memorizado


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

Cronograma Esquema Eléctrico

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

STL FBD LAD


A I 0.0
L S5T#5S
SS T 4
A I 0.1
R T 4
NOP 0
NOP 0
A T 4
= Q 4.5
Temporizador en modo Retraso a la Desconexión
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

Cronograma Esquema Eléctrico

1 I 0.0
I 0.0
0
1
Q 4.5
0 T5
Tiempo en s
t t Q 4.5

STL FBD LAD


A I 0.0
L MW 14
SF T 5
NOP 0
NOP 0
NOP 0
A T 5
= Q 32.5

Forma de Cargar un Temporizador

Representación Esquemática Explicación


La figura muestra la ejecución “n + 1”
Programa Señal del
Temporizador 17 desde el arranque del temporizador T 17
0 1
(S5T#1S es 1s). A pesar de que la
temporización transcurrió “justo” tras la
instrucción “ = Q 4.5”, la salida 4.5 se
L S5T#1S mantiene activada. Este cambio sólo se
considera durante la siguiente ejecución
SP T 17 del programa.

1s - n * tp
A T 17

= Q 4.5

n: Cantidad de ejecuciones del programa


tp: Tiempo de ejecución del programa
Marcas de Ciclo (I)

9Las marcas de ciclo cambian su estado binario periódicamente


9La relación impulso-pausa es 1:1
9La frecuencia está ajustada y es fija
9Hay definidas 8 frecuencias fijas que pueden almacenarse en un byte de
marcas
9El byte de marcas se parametriza en la configuración de la CPU

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)

Marcas de Ciclo (II)


Configuración en hardware de la CPU
Ejemplo – Generador de Impulsos

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 LAD


A I 0.0
AN M 2.0
L S5T#2S
SD T 7
NOP 0
NOP 0
NOP 0
A T 7
= M 2.0

Ejemplo – Generador de Onda Cuadrada Simétrica


STL FBD
Ejemplo A I 0.0
Se desea una onda cuadrada AN M 2.0
de periodo 4s. Para ello L S5T#2S
utilizamos el generador de
impulsos del ejemplo
SD T 7
anterior y un divisor NOP 0
binario. Colocaremos la NOP 0
salida en la Q 4.0. NOP 0
A T 7
Cronograma
= M 2.0
***
1
A M 2.0
0
I 0.0 AN M 1.0
1
S Q 4.0
2s 2s 2s
0
< >< > < >
M 2.0 A M 2.0
1 A M 1.0
0
Q 4.0 R Q 4.0
Tiempo NOP 0
***
AN M 2.0
A Q 4.0
S M 1.0
AN M 2.0
AN Q 4.0
R M 1.0
NOP 0
Ejemplo – Generador de Onda Cuadrada Asimétrica
Cronograma Ejemplo
Se desea que la salida Q 4.0 funcione
1
I 0.0
como un generador de onda cuadrada
0 asimétrica de 3s con valor “0” y 5s con
1 valor “1”.
Tiempo de Marcha T1
0
1
Salida T1
0
1
Tiempo de Marcha T2
0
1
Salida T2
0
1
Q 4.0
0
Tiempo

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

Ejemplo – Arranque Estrella/Triángulo I


STL FBD
Segmento 1 Línea
A I 0.0
I 0.0 A( I 0.0
O I 0.1
O Q 4.0
) I 0.1 &
= Q 4.0
>=1
I 0.1 L Q 4.0 Q 4.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

Segm ento 5 T riángulo


O Q 4.2 & &
A Q 4 .0
) T1
A( = Q 4.2
A N Q 4 .1 Q 4.1
Q 4.0
>=1
A T 2 & Q 4.2 Q 4.2
O Q 4 .2 &
) T2
= Q 4 .2 >=1
Q 4.2 Q 4.2

Funciones de Tiempo en IEC


Las funciones de tiempo están integradas en FBs en la CPU. Están disponibles:

SFB 3 TP
Generador de pulsos

SFB 4 TON
On delay

SFB 5 TOF
Off delay

Nombre Declaración Tipo dato Descripción


IN INPUT BOOL Entrada de arranque
PT INPUT TIME Longitud del pulso o duración de espera
Q INPUT BOOL Estado del temporizador
ET INPUT TIME Tiempo pasado
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL


•  Introducción
•  Operaciones lógicas a nivel de bit
•  Marcas
•  Simbólicos
•  Flancos
•  Temporizadores
•  Diagnosis e información del sistema
•  Contadores
•  Carga y Transferencia
•  Operaciones con acumuladores
•  Saltos

3.  PROGRAMACIÓN ESTRUCTURADA

PLC’s
Página 1
Curso 2009/10
Simbólicos

•  Son nombres simbólicos que le podemos dar a entradas,


salidas, marcas, temporizadores, contadores y módulos.

•  En el programa podemos usar esos nombres en vez de


las direcciones absolutas.

•  Para cada símbolo debemos rellenar: nombre simbólico,


dirección absoluta a la que sustituye, tipo de dato que es
(se rellena sólo), y un comentario (opcional)

PLC’s
Página 2
Curso 2009/10
Simbólicos

•  Hay dos maneras de crear tabla de símbolos:


–  Desde el administrador Simatic (Programa S7): Fuentes Bloques Símbolos
–  Creando “Tabla de Símbolos” desde OB1: “herramientas” --> tabla de símbolo.
Esto llama al editor de símbolos.
Se introducen símbolos y se cierra, “Tabla” --> “cerrar” y eso la guarda.
•  Además para insertar/editar símbolos en tabla:
–  Si estamos en el editor de AWL: “insertar” --> “símbolo” --> “Nuevo”.
Se meten las entradas adecuadas y se acepta
•  En “Ver” decidimos si se quiere ver:
–  direcciones absolutas o símbolos.

PLC’s
Página 3
Curso 2009/10
Flancos

•  Permiten averiguar en qué ciclo ha habido


–  un flanco positivo FP (paso de “0” a “1” del RLO)
–  o un flanco negativo FN (paso de “1” a “0” del RLO) de una señal.

•  Se necesita una marca auxiliar que almacena el estado anterior, para poder
compararlos. Puede usarse cualquier marca.

•  Ej. Flanco positivo


E 124.0
U E 124.0
M 1.0
FP M1.0
= A 124.1 RLO

•  El RLO sólo estará a 1 un tiempo de ciclo: en el que cambie.

PLC’s
Página 4
Curso 2009/10
Temporizadores

•  Un temporizador es un contador de tiempos. La CPU 314-


IFM tiene 128 temporizadores

•  Por cada temporizador se reservan 16 bits y tiene un rango


de valores de 10ms a 9990s (2h 46m 30s)

•  Un temporizador realiza dos funciones


–  Contar tiempo
–  Poner una variable de salida asociada a nivel alto

•  Los tipos de temporizadores se diferencian entre sí en:


–  cuándo comienzan a contar el tiempo y
–  cuándo activan la salida asociada.
PLC’s
Página 5
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.

–  SV - Temporizador de impulso prolongado


La señal de salida permanece a 1 durante el tiempo programado,
independientemente del tiempo que la señal de entrada esté a 1.

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.

–  SS - Temporizador con retardo a la conexión con memoria


La señal de salida cambia de 0 a 1 solamente si ha finalizado el tiempo
programado, independientemente del tiempo en que la señal de entrada esté a 1.
•  ¿cuándo termina la temporización?

–  SA - Temporizador con retardo a la desconexión


La señal de salida es 1 el tiempo que la señal de entrada es 1 y, a partir de ahí, el
tiempo marcado por el temporizador.
El temporizador arranca cuando la señal de entrada cambia de 1 a 0.

PLC’s
Página 8
Curso 2009/10
Temporizadores

•  Resumen
tipos
temporizadores

PLC’s
Página 9
Curso 2009/10
Temporizadores

•  Programación de un temporizador (T0, T1, ...)

–  Carga el tiempo de inicialización en un acumulador interno con la operación


load (L)
•  Formato: L S5T#aH_bM_cS_dMS
Ejemplo: L S5T#10M_30S

–  Generación de un RLO que condicionará la activación del temporizador

–  Activación del temporizador


•  Formato: tipo nº timer
Si hay un flanco en el RLO de entrada respecto del ciclo anterior.
El temporizador se inicializa con el tiempo que se había cargado en el
acumulador interno.
•  SI T0 - SV T0 - SE T0 - SS T0 - SA T0

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

•  Temporizador de Impulso (SI)


–  El temporizador
•  arranca con el flanco de subida del RLO de entrada de la sentencia SI
•  se detiene al finalizar el tiempo de temporización
–  La salida asociada
•  se pone a ‘1’ al arrancar el temporizador
•  se pone a ‘0’ al terminar la temporización o al ponerse a cero el RLO de entrada

E X.x
RLO

A-
T0

T T T T
T
PLC’s
Página 12
Curso 2009/10
Temporizadores

•  Temporizador de Impulso Prolongado (SV)


–  El temporizador
•  arranca con el flanco de subida del RLO de entrada de la sentencia SV
•  se detiene al finalizar el tiempo de temporización
–  La salida asociada
•  se pone a ‘1’ al arrancar el temporizador (flanco de subida del RLO de entrada de SV)
•  se pone a ‘0’ al terminar la temporización

E X.x
RLO

A-
T0

T T T
T

PLC’s
Página 13
Curso 2009/10
Temporizadores

•  Temporizador de Retardo a la Conexión (SE)


–  El temporizador
•  arranca con el flanco de subida del RLO de entrada de la sentencia SE
•  se detiene al finalizar el tiempo de temporización o con un cero en el RLO de entrada
–  La salida asociada
•  se pone a ‘1’ al terminar el temporizador
•  se pone a ‘0’ al cuando el RLO de entrada de SE pasa a cero

E X.x
RLO

A-
T0

T T T
T T
PLC’s
Página 14
Curso 2009/10
Temporizadores

•  Temporizador de Retardo a la Desconexión (SA)


–  El temporizador
•  arranca con el flanco de bajada del RLO de entrada de la sentencia SA
•  se detiene al finalizar el tiempo de temporización
–  La salida asociada
•  se pone a ‘1’ con el flanco de subida del RLO de entrada de SA
•  se pone a ‘0’ al terminar la temporización

E X.x
RLO

A-
T0

T T
T T

PLC’s
Página 15
Curso 2009/10
Temporizadores

•  Temporizador de Retardo a la Conexión Memorizado (SS)


–  El temporizador
•  arranca con el flanco de subida del RLO de entrada de la sentencia SS
•  se detiene al finalizar el tiempo de temporización
–  La salida asociada
•  se pone a ‘1’ al terminar la temporización
•  se pone a ‘0’ sólo mediante una instrucción de reset

E X.x
RLO

Reset

A-
T0

T T T
T
PLC’s
Página 16
Curso 2009/10
Temporizadores

•  Otras consideraciones sobre los temporizadores


•  Hay que ser muy cuidadosos si utilizamos el mismo
temporizador en dos sitios distintos del código, ya que
podemos estarlo arrancando o no en los distintos puntos y
se producirá un funcionamiento erróneo.
•  La variable que arranca el temporizador debe producir un
flanco positivo. Para que ese flanco positivo se produzca, el
programa debe pasar por ese punto con valor 0 y
posteriormente con valor 1, o no verá el flanco. Esto es
especialmente crítico en el caso de utilizar temporizadores
con elementos que se verán posteriormente como saltos o
bloques (FCs/FBs).

PLC’s
Página 17
Curso 2009/10
Temporizadores

•  Comprobar el funcionamiento de los diferentes tipos de temporizadores

U E 124.0 Condición de arranque del temporizador


L S5T#10S
SI T0

U E 124.1 Condición de reseteo del temporizador


R T0

U T0 Presentación de la señal asociada al temporizador


= A124.0

•  Probar otros ejemplos con

SV SE SA SS

PLC’s
Página 18
Curso 2009/10
EJERCICIO (Entregable 2)

Se dispone de un semáforo, el cual en condiciones normales


se encuentra del modo siguiente:
A124.0
- Verde vehículos
A124.1
- Rojo Peatones.
A124.2
En el mismo instante que un peatón accione sobre el
pulsador situado en el semáforo, éste pasará a amarillo para
A125.0
vehículos, estado que durará durante 3 ‘‘. Finalizado este,
A125.1 pasara a estado rojo para vehículos y verde para peatones.

El tiempo de duración fijado para rojo vehículos: 6 ‘‘.


E124.0
Finalizado el proceso, el semáforo regresará al estado
Press normal.
butto
n

Durante el tiempo de duración del ciclo, deberá evitarse que


cualquier nueva activación sobre el pulsador verde, rearme el
ciclo.

PLC’s
Página 19
Curso 2009/10
Tipos de temporizadores IEC

Los autómatas S7-1200 han incorporado en su biblioteca de programación los


temporizadores basados en software que dicta la norma IEC 1131-3:

 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.

Uso de los temporizadores

Los temporizadores del S7-1200, al estar basados en software, no requieren


direccionamiento a una zona de memoria determinada del hardware y por tanto, no se
identifican con un número (T1, T37, etc) como ocurre, por ejemplo, en los S7-200. Así,
cada vez que se inserta un temporizador en la zona de programación, éste pide que se
asigne un bloque de datos (DB) a instancia. Dicho DB debe identificarse mediante un
nombre simbólico reconocible y que sea fácilmente distinguible de otros que se puedan
utilizar en el mismo programa.
En el campo PT del temporizador debe escribirse el tiempo de preselección en formato
TIME. Por ejemplo: T#3S (tres segundos) ó T#1M10S (un minuto 10 segundos) ó
T#100Ms (cien milisegundos).

Ejemplo 1: Activación directa de una salida una vez transcurrido un


tiempo.

Un uso inmediato de los temporizadores, consiste en utilizar la salida Q, de tipo binario,


para activar de forma directa, una vez que se ha superado el tiempo de preselección PT,
elementos de programación en formato de bit como salidas, marcas o cualquier otra
combinación lógica.

Ejemplo 2: Asociación de contactos a un temporizador.

Al no ser temporizadores hardware y no existir un direccionamiento directo a una zona


de memoria específica para ellos, ya no es posible asignar, como se hacía en otros PLC's,
contactos a los temporizadores mediante su identificador: T1, T2, T3, etc. No obstante,
para hacer algo similar se puede recurrir a diferentes técnicas.

 Opción 1: Uso de una marca asociada al temporizador.


Cuando la marca es "verdadera", los contactos asociados invierten su valor lógico,
activando o desactivando los segmentos en los que se encuentran programados.

Se puede decir que esta es una solución muy "eléctrica" similar a la utilizada en los
automatismos cableados con relés.

 Opción 2: Uso de la variable Q del DB a instancia asociado al temporizador.

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.

Lo visto anteriormente requiere usar un temporizador por cada conmutación temporizada


que se desee realizar. Es decir, si se desea activar una salida a los 5 segundos y otra a los
10 segundos, es necesario utilizar dos temporizadores independientes configurados, cada
uno de ellos, con sus respectivos tiempos de preselección.
Sin embargo, si se lee el valor de la salida ET del temporizador a a través de una variable
o a través de DB a instancia, es posible realizar acciones a diferentes valores de tiempo
de un mismo temporizador.

 Opción 1: Comparar el valor de una variable asignada a la salida ET del


temporizador.

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).

 Opción 2: Comparar el valor de la salida ET del temporizador.

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

T I A Manual de Formación Página 1 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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.

T I A Manual de Formación Página 2 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

PÁGINA:

1. Introducción.................................................................................................. 4

2. Notas sobre los Bloques de Datos................................................................. 6

3. Generando Bloques de Datos....................................................................... 7

Los símbolos siguientes acceden a los módulos especificados:

Información

Programación

Ejercicio Ejemplo

Notas

T I A Manual de Formación Página 3 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

1. INTRODUCCIÓN

El módulo B4 pertenece al contenido de las Funciones Adicionales de Programación STEP 7.

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

Sistemas de Bus de Programación Visualización de


Campo Industrial Secuencial Procesos
2- 3 días Módulos D 2- 3 días Módulos C 2- 3 días Módulos F

Comunicación IT
con SIMATIC S7
1- 2 días Módulo E

Finalidad del Aprendizaje:

En este módulo, el lector aprenderá sobre como utilizar los Bloques de Datos para almacenar
información.

• Generando Bloques de Datos


• Specificando la estructura de un Bloque de Datos
• Accediendo a un elemento de un DB en un programa STEP 7

Requirements:

Requisitos:

Para el correcto aprovechamiento de este módulo, se requieren los siguientes conocimientos:

• Conocimientos de uso de Windows 95/98/2000/ME/NT4.0


• Programación Básica de PLC con STEP 7 ( Módulo A3 - ‘Puesta en Marcha’ programando PLC
con STEP 7)
• Conocimientos Básicos de programación estructurada (Anexo I – Programación Básica de PLC –
Programando con un SIMATIC S7-300)
Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 4 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

Hardware y software Necesarios

1 PC, Sistema Operativo Windows 95/98/2000/ME/NT4.0 con


- Mínimo: 133MHz y 64MB RAM, aprox. 65 MB de espacio libre en disco duro
- Óptimo: 500MHz y 128MB RAM, aprox. 65 MB de espacio libre en disco duro
2 Software STEP 7 V 5.x
3 Interfase MPI para PC (p.e. PC- Adapter)
4 PLC SIMATIC S7-300 con al menos un módulo de entradas/salidas
.
Ejemplo de configuración:
- Fuente de Alimentación: PS 307 2A
- CPU: CPU 314
- Entradas Digitales: DI 16x DC24V
- Salidas Digitales: DO 16x DC24V / 0.5 A
-

2 STEP 7
1 PC

3 PC Adapter

4 SIMATIC S7-300

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 5 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

2. NOTAS SOBRE LOS BLOQUES DE DATOS

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

Call FB1, DB10 L DB11.DBW0 DB Global


Para todos los
FBs
FCs
OBs

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

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 6 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

3. GENERANDO BLOQUES 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.

En el párrafo siguiente, se describe a través de un ejemplo la utilización de un bloque de datos global:

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.

El ejemplo se corresponde con las direcciones siguientes:

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

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 7 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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):

1. Llamar al Administrador SIMATIC con un doble click ( → Administrador SIMATIC)

Administrador SIMATIC.lnk

2. Crear un proyecto nuevo ( → Archivo → Nuevo)

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 8 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

3. En el campo Nombre, asignamos el nombre del proyecto Proyecto_Prueba_DB.


(→ ’Proyecto_Prueba_DB’ → OK)

4. Insertar un nuevo Programa S7 ( → Insertar → Programa → Programa S7).

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 9 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

5. Seleccionar la carpeta Bloques. (→ Bloques)

6. Insertar un Bloque de Datos ( → Insertar → Bloque S7 → Bloque de Datos).

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 10 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

7. Introducir el nombre DB10, seleccionar la opción DB Global y aceptar con OK (→ DB10 → DB


Global -> OK).

8. Abrir el bloque de datos DB10 con un doble click(→ DB10).

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 11 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

Nota: Los bloques de datos asignados a un FB se generan automáticamente en la llamada al


FB. No tiene sentido, por tanto, generarlos antes de generar el FB. Por otro lado, los
bloques de datos asociados a un tipo de datos (UDT) son DBs cuya estructura es una
copia exacta del UDT.

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 12 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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á

estar en STOP! (→ Nombre→ Tipo → Valor Inicial → Comentario → → )

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).

Nota: Si el bloque de datos es declarado como de instancia a un FB, al abrir dicho DB ya


aparece la tabla con la estructura del DB y no puede modificarse. Dicha estructura es una
copia exacta de la tabla de declaraciones del FB.

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 13 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

Los datos en un bloque de datos deben de llevar asignado un tipo de datos.


Los tipos de datos estándar STEP 7 se definen en la tabla mostrada abajo :

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_1
Palabra) 2#1111_1111_1111_1111_1111_111 011_1011_0111_1111
1_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 32 Número en Máximo: +/-3.402823e+38 1.234567e+13
en coma flotante) coma flotante Mínimo: +/-1.175495e-38
IEEE
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 TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3
(Fecha y Hora) pasos de 1ms
CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 14 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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 → → ).

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 15 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 16 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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).

14. Aceptamos la pantalla con OK (→ OK ).

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 17 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

Existen tres posibilidades de acceso a los datos:

1. Acceso por Direccionamiento Directo:

Se puede acceder a un elemento de un DB con las siguientes instrucciones:

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.

2. Accesso a un elemento de un DB que ya se encontraba abierto:

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

3. Acceso a datos de un DB de Instancia a través de la llamada de un Bloque de Función:

Los datos pueden ser transferidos a un DB de Instancia a través de la llamada a su correspondiente


bloque de función con la instrucción CALL FB1, DB19. La asignación de las variables, que deberían de
haber sido previamente definidas en la tabla de definiciones del FB, y cuyo contenido se almacena en
el DB de instancia, son tomadas de las direcciones asignadas a los parámetros del FB (p.e. EW0, M
10.0 o AW4) con la instrucción CALL.

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.

Nota: El formato de las variables del DB de Instancia y la dirección asignada en el parámetro


del FB deben de ser iguales.

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 18 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE

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

S7) en el OB1, se deberá guardar en el disco duro y cargado en el PLC . El interruptor de

modo de la CPU deberá estar en STOP! ( → → )

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.

Indice Notas Generando Bloques de Datos

T I A Manual de Formación Página 19 de 18 Módulo B4


Edición: 02/2002 Bloques de Datos
Módulos de Función

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

(FB, FC, SFB, SFC)

Llamadas a Módulos (I)


Llamada General “CALL”
• Para que un módulo de código sea procesado debe ser llamado
• Una llamada a módulo consta de la sentencia de llamada (CALL FC 10) y la lista de
parámetros (si el módulo llamado tiene parámetros)
• Después de la llamada, el módulo es procesado hasta encontrar una sentencia de fin de
módulo
• En el caso de los OB se retorna al sistema operativo
• La información requerida por la CPU para el retorno es almacenada en la pila del módulo
(pila B)
• Los parámetros del módulo son el interfaz de datos al módulo llamado
• Con CALL se pueden llamar FBs, FCs, SFBs y SFCs
• La sentencia CALL es una llamada incondicional
• Si el módulo llamado tiene parámetros tiene que utilizarse esta sentencia
Llamadas a Módulos (II)
Llamada a Funciones
• Se puede llamar a una función con CALL por su dirección absoluta
o por su dirección simbólica
• Se deben inicializar todos los parámetros de la función
• Normalmente, las funciones tienen el parámetro RET_VAL en el que
devuelven códigos de error

Llamada a Módulos de Función


• En la llamada a un FB hay que especificar el DB de instancia asociado
separados ambos por una coma
• Se puede utilizar para ambos módulos direcciones absolutas o simbólicas
• En FBs no es necesario inicilizar todos los parámetros del módulo
• Los parámetros no inicializados mantienen su valor inicial

Llamada a Funciones y Módulos de Función del Sistema


• Todas las funciones y módulos de función del sistema deben llamarse
con la instrucción CALL

Llamadas a Módulos (III)


Llamada con “UC” y “CC”:

• Permiten llamar a funciones y módulos de función


• La función llamada no debe tener parámetros ni DB de instancia
• El editor no chequea estas condiciones
• UC y CC no distinguen entre FCs y FBs. Los tratan igual
• UC es una llamada incondiconal
• CC es una llamada condicional al valor del RLO
• Otras posibilidades:
• Direccionamiento indirecto de llamadas a FB o FC con UC y CC
• Llamada vía parámetros de bloque con UC
• Llamada vía parámetros de bloque con CC también en FB

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 = Entrada Enable ENO = Salida Enable

EN ENO

Si está activo (1), se Si está activo (1), indica que la


ejecuta la instrucción Caja de instrucciones STL instrucción se ejecutó sin error.
de la caja. (FC, FB, Move, Add, etc)
Si no está activo (0), no se llamó
Si no está activo (0), no se a la instrucción o no se produjo la
ejecuta la instrucción. la ejecución de la instrucción

Partes de un Módulo

Tabla de
Declaración
de Variables

Sección de
Código
Datos Locales

• Los Datos Locales utilizados normalmente en un módulo son :

– Variables Temporales

– Parámetros

– Variables Permanentes o estáticas

Variables Locales Temporales (I)


Dirección Símbolo Valor Inicial

Tipo de Declaración Tipo de Datos Comentario

• Las variables locales son las declaradas como “temp”


• Se definen en la cabecera del módulo
• Se pueden definir en cualquier módulo de código
• Se usan para almacenar datos locales de la ejecución del programa
• Temporalmente se almacenan en la pila de datos locales. La pila la controla el S.O.
Variables Locales Temporales (II)

• Se utilizan para almacenar resultados intermedios en la ejecución de un módulo


• Solamente están disponibles durante la ejecución del módulo
• Se puede utilizar direccionamiento absoluto o simbólico
• En los OB hay que declarar 20 bytes de información de comienzo de cada uno de ellos
• Normalmente se accede por direccionamiento simbólico
• El identificador de datos locales es la L
• un bit se direcciona con L
• un byte se direcciona con LB
• una palabra con LW
• una doble palabra LD

Dirección Declaración Nombre Tipo Valor inicial Comentario


0.0 temp temporal1 INT 0 Variable temporal
2.0 temp temporal2 REAL 0 Variable temporal

Variables Locales Estáticas (I)


Dirección Símbolo Valor Inicial

Tipo de Declaración Tipo de Datos Comentario


Variables Locales Estáticas (II)

• Datos locales estáticos son direcciones que un módulo de función FB


almacena en el módulo de datos de instancia DI.
• Las variables estáticas son las declaradas como “stat”
• Son declaradas en la cabecera del módulo
• Están en la memoria del módulo de función.
• Mantiene la información hasta que es modificada por programa
• El número está limitado por el tipo de dato de las variables y por el
tamaño del DB
• Se puede utilizar direccionamiento absoluto aunque debe ser la excepción
• En el FB, el DB de instancia se abre con OPN DI xxx
• se puede direccionar un bit con DIX y.x
• un byte con DIB y
• una palabra con DIW y
• una doble palabra con DID y

Variables Locales Estáticas (III)


• Se puede utilizar direccionamiento simbólico utilizando sus nombres
• Se pueden utilizar las mismas sentencias que las utilizadas con DBs globales

Dirección Declaración Nombre Tipo Valor inicial Comentario


0.0 temp temporal1 INT 0 Variable temporal
2.0 stat Total INT 0 Variable estática

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.

Programa Principal OB1 Módulo Subrutina FC

Ejecución
del programa
Ejecución del
Instrucción que llama Programa
a otro módulo

Módulos de Función FB´s


Un Módulo de Función (FB) tiene un módulo adicional de memoria asociado a
él. Un Módulo de Datos (DB) mantiene una copia de los parámetros que van a
pasar al área de datos locales. Después de la ejecución del FB, se borra el área
de memoria local, pero el DB asociado retiene sus valores.

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

Procesamiento de los Parámetros

Progr. en módulo que llama Progr. en módulo llamado Programa ejecutado

// Primera llamada // Primera llamada


#L Numb_1 L MW 30
CALL “Adder” L MW 32
Numb_1 := MW 30 #L Numb_2 +I
Numb_2 := MW 32 L MW 34
Numb_3 := MW 34 I+ +I
Result := MW 40 T MW 40
#L Numb_3
// Segunda llamada // Segunda llamada
+I L DB 10.DBW 30
CALL “Adder” L DB10.DBW 32
Numb_1 :=DB 10.DBW 30 #T Result +I
Numb_2 :=DB10.DBW 32 L DB10.DBW 34
Numb_3 :=DB10.DBW 34 +I
Result :=DB10.DBW 40 T DB10.DBW 40
Parámetros Parámetros Parámetros
del módulo actuales formales
Declaración de Parámetros
• Los nombres de los parámetros de hasta 24 caracteres
• El nombre de un parámetro no puede ser una palabra clave
• Los parámetros IN/OUT pueden ser tipos de datos elementales, complejos o definidos
por el usurio
• El valor inicial y el comentario son opcionales

Dirección Símbolo Valor Inicial

Tipo de Declaración Tipo de Datos Comentario

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

Parámetros Formales: Tipos de Datos (II)


Parámetros de módulo de tipo de dato digital:

• 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 de módulo de tipo TIMER:


• Funciones binarias
• Tipos de temporizadores:
• SP, SE, SD, SS, SF, R xxxx (parámetro de entrada tipo timer)

Parámetros de módulo de tipo COUNTER:


• Funciones binarias
• Tipos de contadores:
• S, CU, CD, R xxxx (parámetro de entrada tipo counter)
Parámetros Formales: Tipos de Datos (III)
Parámetros de módulo de tipo de dato BLOCK_xx:
• OPN - Abrir módulo de datos (parámetro tipo BLOCK_DB)
• UC - Llamada a función (parámetro tipo BLOCK_FC)
• UC - Llamada a FB (parámetro tipo BLOCK_FB)
• CC - Llamada condicional a FC (parámetro tipo BLOCK_FC)
• CC - Llamada condicional a FB (parámetro tipo BLOCK_FB)
- xxxx vía parámetro de entrada

• Cuando se abre un DB con parámetro, la CPU lo usa como DB global


• Las funciones y módulos de función pasados con parámetros de módulo
no deben contener parámetros de módulo
• Una llamada condicional a módulo vía un parámetro de módulo es sólo
posible si el parámetro de bloque es de un módulo de función

#Data es un parámetro tipo BLOCK_DB El usuario debe asegurar que #Data es el


CALL FB 10.#Data DB de instancia del FB 10

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:

Acceso y Restricciones de los Parámetros de Paso

Llamada a módulo (FC, FB) Módulo llamado (FC, FB)

Tabla de Declaración Tabla de Declaración

Valor_1 Input Medida_1 Input

Valor_2 Output Medida_2 Output

Valor_Total In/Out Medida_Total In/Out

Call FC10
Medida_1:=Valor_1
Medida_2:=Valor_2
Medida_Total:= Valor_Total

Paso de Parámetros de un módulo lógico a otro


Paso de Parámetros entre módulos

• Combinaciones posibles en el paso de parámetros de módulos:

E = Tipos de datos elementales


C = Tipos de datos complejos
P = Parámetros tipo TIMER, COUNTER y BLOCK_xx

Parámetros y Variables Locales (I)


OB1 FC1 (Cálculo)
0.0 in Entrada1 int muestra 1
2.0 in Entrada2 int constante
FC1 4.0 in Entrada3 int distancia
6.0 out Salida_A int resultado
MW5 Entrada1 Salida_A AW12 8.0 temp TEMP1 int intermedia
3369 Entrada2
MW10 Entrada3
ADD_I
O #TEMP1
#Entrada1 IN1
#Entrada2 IN2

FC1
SUB_I
MW2 Entrada1 Salida_A AW20 O #Salida_A
#TEMP1 IN1
6869 Entrada2 #Entrada3 IN2
MW16 Entrada3

#Entrada1 , si es variable local


”Entrada1" , si es variable global (simbólico)
Parámetros y Variables Locales (II)

CALL FB7, DB45


STL Comenzar:=I 1.0 Llama al FB7 (utilizando
un Módulo de Datos
Parar:=I 1.1 a instancia DB45) y le
Longitud:=MW 20 pasa los parámetros
Parámetros “Formales”
del FB Correr:=M2.1

Direcciones “Actuales” donde


residen los datos o se almacenarán

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

Módulos de Función y Módulos de Datos

• Para almacenar datos se pueden utilizar:


• zona de marcas
• módulos de datos
• Los módulos de datos presentan mayores prestaciones
• Los módulos de datos pueden ser:
• globales. Pueden acceder cualquier módulo
• de instancia. Sólo se puede acceder desde el FB asociado
• Los DBs deben de crearse con el editor o en runtime SFC 22 CREAT DB
• Deben de ser cargados en la memoria de trabajo para que se pueda leer y
escribir en ellos
• la CPU utiliza dos registros:
• registro DB: para módulos de datos globales
• registro DI: para módulos de datos de instancia
• se puede tener abierto simultáneamente un módulo de datos de cada tipo
Módulos de Datos a Instancia
• Un Módulo de Datos a Instancia es un duplicado de la Tabla de Declaración
del Módulo de Función asociado a él. Los datos de DB a Instancia
permanecerán después de cerrar el FB.

Uso de un FB sin DB a Instancia

• El STEP7 Versión 2.X le permite crear y utilizar un FB sin usar un DB


asociado a él. Utilizado de esta forma, el FB trabaja igual que un FC.

FB sin DB a Instancia FC

Tabla de Declaración Tabla de Declaración


usando la memoria local
= usando la memoria local

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 Absoluto de Direcciones de Datos


• En este caso hay que conocer las direcciones absolutas que el editor asigna a las
variables. Poco recomendable.

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ódulos de Datos (I)


Operaciones con Módulos de Datos
Módulos de Datos (II)
Abrir Módulos de Datos Direccionamiento Partido
• OPN DB x OPN DB 25
• OPN DB nombre L DBW 10
• OPN DI x
• OPN DI nombre Direccionamiento Completo
L DB25.DBW 10
Longitud y Número de DB´s
Cambio los Registros de los
L DBLG // longitud de un DB
L DBNO // número de un DB
Módulos de Datos
L DILG // longitud de un DI CDB
L DINO // número de un DI

Funciones del Sistema para DB´s


SFC 22 CREAT_DB. //Crea un módulo de datos
SFC 23 DEL_DB // Borra un módulo de datos
SFC 24 TEST_DB // Test de un módulo de datos

Módulos de Datos Multi-Instancia (I)


• Los módulos Multi-Instancia le permiten usar un Módulo de Datos para
mantener unos valores separados mientras llama a un FB con un DB asociado.
Un FB ejecuta la sección de código actual mientras otro maneja el Módulo de
Datos a Instancia.

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)

Para utilizar DB´s multiinstancia:


– Incorporar los FBs a llamar en forma de variables estáticas en la declaración de
variables del FB invocante
– El FB invocante llama otros bloques de función sin DBs de instancia propios (es
decir, adicionales),
– Esto permite concentrar los datos de instancia en un solo bloque de datos de
instancia, pudiéndose así aprovechar mejor el número disponible de DBs.

Módulos de Datos Multi-instancia (III)

Módulo de control FB 101 FB 100 con múltiples llamadas al FB101

Variables usadas:
setpoint_value: real
sum: real
actual_value: real

DB Multi instancia
Tema 2: Programación de PLCs

1.  STEP 7

2.  PROGRAMACIÓN BÁSICA AWL

3.  PROGRAMACIÓN ESTRUCTURADA


•  Introducción
•  Bloques de organización (OB)
•  Funciones (FC)
•  Bloques de Función (FB)
•  Boques de datos (DB)

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

Tipo de Módulo Propiedades


- interfase para el usuario
Móduo de
- prioridades graduadas (0 a 27)
Organización (OB)
- información de inicio específica en la pila de datos locales
- parametrizable (los parámetros pueden asignarse en una llamada)
Módulo de Función (FB)
- con (rellamada) memoria (variables estáticas)

- parametrizable (los parámetros deben asignarse en la llamada)


Función (FC)
- básicamente sin memoria (sólo variables temporales)

- almacenamiento estructurado de datos locales (DB de instancia)


Bloque de Datos (DB)
- almacenamiento estructurado de datos globales (válido en todo el programa)
Módulos de Función - FB (con memoria) guardado en el sistema operativo de la CPU y
del Sistema (SFB) llamable por el usuario
Función del - función (con memoria) guardada en el sistema operativo de la CPU
Sistema (SFC) y llamable por el usuario
Bloques de Datos
- bloque de datos para datos de configuración y parámetros
del Sistema (SDB)

PLC’s
Página 4
Curso 2009/10
Introducción

Variables/Datos Globales Variables/Datos Locales


(válidos en todo el programa) (sólo válidos en un bloque)

Variables temporales Varibales estáticas


• PAE / PAA • se borran después de la • se mantienen incluso después
•E/A ejecución del bloque asociado de que sea ejecutado el bloque
•M/T/Z • almacenamiento temporal • almacenamiento permanente
• Áreas de DB en la L stack en DBs.
• utilizables en OBs / FCs / FBs • solo se pueden usar en FBs

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.

• Parámetros de Salida (OUT) solo en FBs, FCs, SFBs y SFCs


En los parámetros de salida, los resultados del procesamiento del bloque son depositados
aquí.

• Parámetros de Entrada/Salida (IN_OUT) solo en FBs, FCs, SFBs y SFCs


En los parámetros de Entrada/Salida, los contenidos de estos parámetros y el resultado del
procesamiento del bloque depositado en ellos mismos.

• Datos Estáticos (STAT) sólo en FBs y SFBs


Los datos estáticos son los datos locales a un bloque de función, los cuales son
almacenados en un bloque de datos de instancia y por tanto preservados hasta el siguiente
procesamiento del bloque.

• Datos Temporales (TEMP) en todos los bloques


Los datos estáticos son los datos locales a un bloque que almacenan valores durante el
proceso de dicho bloque en una pila de datos locales (L-Stack) y, una vez ha terminado de procesarse
el bloque, el contenido de estas variables se pierde.

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 .. ... ...

Los parámetros de un módulo:


–  Están en la sección de código
como variables "locales" "Motor"
EN ENO
–  Pueden tener cualquier tipo de
dato Marcha Motor_on Parám.
Parámetros Consigna de Salida
de entrada Paro
Velocidad
Parámetros
EMER_OFF
In/Out

PLC’s
Página 7
Curso 2009/10
Bloques de organización

•  Son los encargados de poner programa de usuario a disposición de la CPU, es decir,


nuestro programa debe estar incluido en un OB para poder ser ejecutado por el
Autómata

•  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.

•  Están jerarquizados en prioridades y se dividen en dos tipos:


–  Dedicados a tareas periódicas:
OB1: Programa principal (mínima prioridad)
OB10: Interrupción horaria
OB35: Interrupción cíclica, etc.
–  Dedicados a tratamiento de errores:
OB40: Error hardware
OB121 y 122: Error síncrono, etc.

PLC’s
Página 8
Curso 2009/10
Bloques de organización

Arranque

OB 100

OB 101
OB 102

Ejecución Ejecución Ejecución del


Cíclica del Periódica programa
Programa De un programa Sujeta a eventos

OB 1 OB 10...17 OB 20...23 OB 80...87


(Alarmas (Alarmas de retardo) (Errores Asíncronos)
horarias)

OB 30...38 OB 40...47 OB 121, 122


(Alarmas Cíclicas) (Alarmas de Proceso) (Errores Síncronos)

OBs de Alarma Error OBs

PLC’s
Página 9
Curso 2009/10
Bloques de organización

Ej. OB82 (Prio.26) =


Manejo de Error. Ej. OB10 (Prio.2) =
Ejecutado en el caso de Alarma
rotura de un hilo en la Horaria.
entrada analógica PEW 352 Ejecutada una vez
Por minuto desde
El
las 9:30
OB1
Se
ejecuta
contínua- ...... Hasta que es interrumpido
Ej. OB20 (Prio.3) = por otro OB
mente .....
Alarma de retardo.
La ejecución comienza
3.25s después de la Nº OB Tipo de OB Prioridad
detección de un objeto. OB 1 Programa Cíclico 1
OB 10 Alarma Horaria 2
OB 20 Alarma de retardo 3
OB 35 Alarma Cíclica 12
OB 40 Alarma de proceso 16
OB 82 Manejo de Error 26 / 28
PLC’s
Página 10
Curso 2009/10
Bloques de organización: OB de Arranque

Rearranque Completo
automatico manual

S7-300 / 400 S7-300 S7-400


STOP->RUN
Alimentación STOP->RUN
+ CRST

Borrado de la imagen de proceso,


M, T, Z no remanentes

Ejecución del OB 100

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

  Las Funciones son bloques lógicos sin memoria


Las variables temporales de las FCs se memorizan en la tabla de datos locales

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

•  Contienen instrucciones a modo de subrutinas

•  Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo


modo que se insertan VATs)

•  Llamada (equivalen a CALL pero no es posible transferir parámetros):


UC llamada incondicional Ej.: UC FC12
CC llamada condicionada a RLO=1
Ej.: U E125.0
CC FC1
•  El fin de una función se realiza con la instrucción
–  BEA (incondicional) o
–  BEB (condicional a RLO=0)

PLC’s
Página 14
Curso 2009/10
Funciones: con parámetros

•  Contienen instrucciones a modo de subrutinas

•  Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo


modo que se insertan DBs o FCs sin parámetros)

•  Al darles contenido (introducir código) se debe rellenar también su Tabla de


Declaración, donde se incluyen los parámetros formales de la función (con los
que se diseña la función) declarados como IN, OUT o IN/OUT.

•  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

•  El fin de una función con parámetros se realizará igualmente con instrucciones


BEA y BEB
PLC’s
Página 15
Curso 2009/10
Funciones: con parámetros

•  Ejemplos:

–  Llamada a una función sin parámetros:


CALL FC 12
–  Llamada a una función con parámetros:
CALL FC 25
Velocidad := MW10
Inicio := E124.0
Alarma := A125.0
Parámetros formales: Velocidad, Inicio y Alarma
Parámetros actuales: MW10, E124.0 y A125.0

–  Dentro de FC 25 (en su Tabla de Declaración) se habrán definido las características de


Velocidad, Inicio y Alarma

–  CALL llama a un bloque lógico independientemente del RLO

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

•  Es un bloque con memoria.


Tiene asociado un bloque de datos DB de instancia,
de tal forma que en cada nueva llamada
DB10
se puede conservar el valor de las
variables internas de la función. Copia la parte de
Esto no era posible en FCs declaración local del FB
FB1
Área de
Llamada a un Declaración Local
módulo con los
parámetros
Sección de código
actuales
del módulo llamado
Ejemplo:
usando los valores
del área de
Call FB1,DB10 memoria local.

PLC’s
Página 18
Curso 2009/10
Bloques de función

•  Módulos parametrizables: Motor


–  tantos parámetros de entrada, DB 16
salida y entrada/salida como se 0.0 Marcha BOOL
0.1 Paro BOOL
necesiten 2.0 Motor_on BOOL
FB 5
4.0 Velocidad INT
–  con memoria, es decir, con
in Marcha BOOL
variables estáticas (también puede in Paro BOOL
haber temporales) out Motor_on BOOL
out Velocidad INT
–  Llamada con área de datos propia stat ...
CALL FB5, DB16 Temp...
(instancia) Marcha :=E 0.0
•  Aplicación: Paro :=E 0.1
Motor_on :=A8.0 ...
–  Funciones de temporización y Velocidad :=AW12 U #Marcha
UN #Paro
contadores = #Motor_on
...
–  Unidades de control de procesos
con estados internos
•  calderas
•  motores, válvulas, etc. Es necesario
PLC’s
Página 19
Curso 2009/10
Bloques de función

•  Tipos de variables añadidos (no en FCs):


STAT: estático; conserva el valor de la variable de un ciclo para el siguiente, ya
que almacena su valor en el módulo de datos DB asociado a la función.

•  Llamada a módulo de función: CALL FBnx, DBny


CALL FB1, DB3

•  Desde el administrador SIMATIC se habrán creado (dentro del Proyecto y en


la carpeta Bloques) FB 1 y DB 3:
–  Primero se crea FB1: tabla de declaración de variables, código de función, etc.
–  Después se crea DB3 (asociado a FB1) y toma la tabla de declaración de FB1
–  Asignación del valor actual al parámetro/variable formal:
•  desde el DB3: Ver > datos > valor actual
•  Desde el OB100: Load + Transfer

PLC’s
Página 20
Curso 2009/10
Bloques de función

•  Mediante la llamada con varias instancias de un FB se pueden controlar


varios equipos con el mismo FB

PLC’s
Página 21
Curso 2009/10
Bloques de datos

•  Zonas de memoria para almacenamiento de datos organizados del programa

•  No pierden la información cuando el programa los ha acabado de utilizar

•  Existen DB´s de dos tipos:


–  Globales: disponibles para cualquier módulo lógico del programa.
–  De instancia: asignado a un módulo de función, por lo que sólo es accesible por éste.

PLC’s
Página 22
Curso 2009/10
Bloques de datos globales

•  Son remanentes: no pierden la información aunque se corte la alimentación (en coherencia


con el programa cargado en la CPU)

•  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.

•  Apertura: AUF DB8

•  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

2.0 Numero INT


AUF DB 99
o L DB99.DBB1 o L “Valores".Estados
L DBB 1
4.0 Peso[1] REAL
AUF "Valores"
o L DB99.DBW2 o L “Valores".Numero
L DBW 2

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

Abrir módulo de datos Carga y transferencia en módulos de datos

AUF DB 19 L DBB 1 Cargar el byte de datos 1.


L DBW 2 Cargar la palabra de datos 2 (byte 2/3).
L5 Cargar el número 5.
T DBW 4 Transferir a la palabra 4.
L 'A' Cargar el carácter ASCII A.
L DBB28 Cargar el byte de datos 28.
==I Comparar.

U DBX 3.1 Consultar el bit 1 del byte 3.

L DB19.DBW4 Cargar la palabra de datos 4


del DB19 (incluye AUF DB 19).

PLC’s
Página 25
Curso 2009/10
Bloques de datos de instancia

•  Asociado a un bloque de función FB. Antes de crear un DB instancia debe existir el FB

•  Cuando se inserta en el proyecto desde el Administrador SIMATIC, se debe asociar a


un bloque de función FB ya existente.

•  Aparecen en la tabla de variables los parámetros correspondientes al FB asociado


automáticamente.

•  Pueden asociarse varios DBs a un único FB.


• 
CALL FB22,DB201

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.

• CALL FC1 • CALL FC2 • CALL FB2, DB3


AWL • UC FC1 Par1: ... • UC FB1 Par1: ...
Par2: ... Par2: ...
• CC FC1 Par3: ... • CC FB1 Par3: ...

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)

•  Tenemos una mezcladora que produce 3 tipos de productos, magdalenas, sobaos


y donuts, para lo cual controla la receta modificando las proporciones de harina
(A124.0), leche (A124.1), levadura (A124.2), azúcar (A124.3) y un motor que
realiza la mezcla (A124.4).
•  La producción empezará con un flanco de subida de la señal E124.0.
•  El byte EB125 controla el producto a fabricar: magdalenas si es 0, sobaos si vale 1
y donuts en caso de que almacene 2. En cualquier otro caso la mezcladora se
mantendrá parada.
•  La tabla de tiempos para cada producto es la siguiente:

Harina Leche Levadura Azúcar T mezcla


Magdalenas 3 2 3 2 4
Sobaos 1 2 3 1 3
Donuts 2 1 2 1 2

•  La entrada E124.5 permite elegir si los productos y el proceso de mezcla se


realizan simultáneamente (si E124.2=0) o de manera secuencial (si E124.2=1)

PLC’s
Página 28
Curso 2009/10
EJERCICIO (Entregable 7)

•  Resuelva el ejercicio utilizando:


•  Funciones con parámetros.
•  Bloques de función con DB’s de instancia.

•  Evite, en la medida de lo posible, el uso de saltos.

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

Para ello se simulará el registro de temperatura de un proceso, almacenando la temperatura en un DB


Array

¿Que es un direccionamiento indirecto?

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]

MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[2]

DIRECCIONAMIENTO INDIRECTO

Creamos una sola función MOVE en donde moveremos el valor a donde nos indique el valor de la
variable "Puntero"

MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura["Puntero"]

Si "Puntero" =3 moveremos "Temperatura" a Registro_Temperatura".Temperatura[3]


Si "Puntero" =8 moveremos "Temperatura" a Registro_Temperatura".Temperatura[8]

De esta forma cambiando el valor de "Puntero" podemos acceder con misma función MOVEa cualqueir
punto del Array
Programación del Ejemplo

Lo primero que hacemos es crear una DB (Bloque de datos) a la que llamaremos


"Registro_Temperatura".
Dentro de la DB creamos una variable que llamaremos "Temperatura" y será del tipo Array[1..10] of Int
Este sería el programa del PLC

## Borrado de Array y reinicio de puntero


- Al habilitar el registro mediante flanco ascendente de "Habilita_Registro" borramos todo el array con la
función FILL_BLK
- También reiniciamos el puntero (lo ponemos a 0)

## 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.

Los tipos de direccionamientos son tres:

 Direccionamiento Inmediato
 Direccionamiento Directo
 Direccionamiento Indirecto

Los dos primeros, son los que conocemos muy bien:

 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.

Nada nuevo bajo el sol.


Ahora bien, ¿qué pasa cuando queremos recorrer áreas de memoria de forma recursiva o leer un área
dinámicamente?

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:

AUF DB[MW20], teniendo la marca MW20 el valor 10.

Esta última forma de cargar el valor de la marca MW10 es uno de los tipos de direccionamiento indirecto,
pero hay varios:

 Direccionamiento Indirecto por Memoria con Número


 Direccionamiento Indirecto por Memoria con Puntero de Área
 Direccionamiento Indirecto por Registro e Intraárea (área interna)
 Direccionamiento Indirecto por Registro e Interárea (área cruzada)

El caso anterior, el usado es el primero, mediante número.

Direccionamiento Indirecto por Memoria


Dentro de los direccionamientos indirectos por memoria con número a su vez, podemos usar MW (o DW
de un DB) o MD (o DD de un DB) para acceder:

 Usando formato palabra: accederemos a temporizadores, contadores , abriremos DB y accederemos


a FB y FC.
 Usando formato doble palabra: accederemos a datos de tipo bit, byte, palabra y doble palabra.

Formato palabra – número (indexados)


Es el más fácil de entender: en un número entero (palabra) introducimos el valor de DB, FB ,
temporizador etc que queramos leer.

Así podemos hacer un

L 10

T MW 10

U T[MW10]

con lo que estaremos leyendo el estado del temporizador T10.

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.

Direccionamiento Indirecto con formato doble palabra – Punteros


a área
Aquí ya se introduce el concepto estrella del direccionamiento indirecto… el puntero.

Hagamos un pequeño paréntesis para ver este concepto.

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.

Los punteros pueden ser:

 Interárea (Área cruzada) : Por ejemplo P#M10.0, o P#E10.0 o P#DBX10.0


 Intraárea (Área interna): Por ejempo P#10.0

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.

Así podremos hacer esto:

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…

¿Se puede cargar los punteros de otra forma?


Pues sí.

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:

L 80 (porque la dirección 10.0 son 80 bits)

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.

Direccionamiento indirecto en Step 7 (II) –


Registros y áreas
11 marzo, 2014 en Curso online, ejemplos, Teoría, Tutoriales, Videos 22 Comentarios




 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:

 Cargar directamente el puntero en el AR1


 Cargar el puntero y transferirselo al AR1
 Cargar el valor numérico de bits y transferirselo al AR1
Cargar directamente el puntero

Es el más rápido si se sabe qué hay que cargar:

LAR1 P#1.0

Lo que cargará en el AR1 el puntero 1.0

Cargar el puntero y transferirlo al AR1

L P#1.0

LAR1

Al igual que el anterior, cargamos el puntero P#1.0 en el AR1

Cargar el valor numérico de bits y transferirlo al AR1

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

De tal forma que cargaremos la dirección 10000.0

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.

Direccionamiento Indirecto por Registro e Intraárea/Interárea


La diferencia fundamental entre el registro e Intraárea y registro e Interárea es:

 Intraárea: No se especifica el área de memoria


 Interárea: Vamos a especificar el área de memoria (el tipo, por así decirlo)

¿Y esto qué significa en cristiano?

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.

O también podemos hacer:

LAR1 P#M50.0 // Cargar el puntero CON la zona de memoria

L W [AR1, P#10.0] // Decir el operando 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).

¿Qué se usa más?

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?

Pues no. No sé si lamentablemente, pero no.

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).

¿Es obligatorio poner ese offset siempre?

Si. Siempre. Sin excepción. Pones un P#0.0 si no lo quieres y listo.

¿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.

Así, para seguir con el ejemplo anterior, podríamos hacer:

LAR1 P#50.0

LAR2 P#10.0

L MW[AR1,AR2] : No se puede usar ambos AR para hacer este tipo de direccionamiento

L MW[AR1,p#0.0]

T MW[AR2,P#10.0]

¿Qué operaciones puedo hacer con los registros?

LARn : Cargar el contenido del ACU1 en el registro ARn, siendo n=1 o 2.

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: Transferir desde el registro n, su contenido al ACU1.

+ARn: Sumar al contenido del ARn, el contenido del ACU1.

Pero como hemos visto, podemos hacer cargas y transferencias directas:

LARn <Dirección>: Cargamos la dirección al ARn. Por ejemolo LAR1 P#50.0

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

Para rizar el rizo, podemos copiar la información entre los AR haciendo:

LAR1 AR2, con lo que cargaremos en el AR1 el contenido del AR2

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.

¿Y todo esto, ya sirve para algo?


Pues aunque pueda parecer lo contrario, el direccionamiento indirecto sirve para muchas cosas, pero sobre
todo para recorrer información y tratarla.
¿En qué se diferencian las operaciones para el direccionamiento indirecto entre el STEP 7 y el STEP 5?
Mostrar referencias

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:

1. El direccionamiento indirecto por memoria con un número:


Para el direccionamiento de temporizadores, contadores, y módulos,
2. El direccionamiento indirecto por registro con un puntero de área:
Para el direccionamiento de zonas de memoria: Periferia, entradas, salidas, marcas, datos
globales (DBX), datos de instancia (DIX) y datos locales.

direccionamiento indirecto por memoria con un número

Ejemplos:

STEP 7 Analogía en el STEP 5


L2 Carga un número L KF+2 Carga un número
T MW 33 Guardar en la palabra T MW 33 Guardar en la palabra
de marcas 33 de marcas 33
L T [MW33] Carga en valor de B MW33 Elabora la palabra de
tiempo actual del marcas 33
temporizador 2
L T0 Carga en valor de
tiempo actual del
temporizador 2
....... ....... ....... .......
AUF DB[MW33] Abre el DB2 B MW33 Elabora la palabra de
marcas 33
A DB0 Abre el DB2
....... ....... ....... .......
CC FC[MW33] Llama al FC2 si VKE = B MW33 Elabora la palabra de
1: marcas 33
Sólo funciona, SPB FC0 Llamada al FC2 si VKE
si FC2 no tiene = 1:
parámetros Sólo funciona si FC2 no
tiene parámetros
El operando de la dirección, en la que se guarda el número (en este caso, la MW33), puede estar en la
zona de Marcas, datos globales (DBX), datos de instancia (DIX) y datos Locales. La utilización de los
datos de instancia de zona (DIX) para el operando de la dirección solo es posible en los módulos de
función (FBs) con CODE_VERSION1 (no en los FBs con capacidad de multinstancia).

Direccionamiento indirecto por registros con ayuda del puntero de área

Ejemplo con un puntero de área interno

STEP 7 Analogía en el STEP 5


L P#4.5 Carga el puntero para el L KF +4 Carga el número de
Byte4, Bit 5 Byte
L KF +5 Carga el número de Bit
SLW 8 Desplaza el número de
Bit al Byte alto
OW Bit en el Byte alto, Byte
en el Byte bajo

Ejemplo para un puntero de área externo:

STEP 7 Analogía en el STEP 5


L P#M 2.3 Carga el puntero para la 
M2.3

Cálculos del puntero

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:

 Suma de 1: El puntero aumenta al siguiente Bit


 Suma de 8: El puntero aumenta al siguiente Byte, el número de Bit permanece invariante.

Ejemplos:

STEP 7 Analogía en el STEP 5


L P#M 2.3 Carga el puntero para 
la M2.3
L P#4.5 Carga el puntero para ....... .......
el Byte4, Bit 5
+D Resultado: El puntero 
apunta a la M7.0, es
decir, estas 3
instrucciones tienen el
mismo significado
que: L P#M7.0
....... ....... ....... .......
L P#DBX 2.3 Carga el puntero para 
el Bit de datos global
2.3
L 16 Carga 16 .......
-D El puntero se reduce 
en 16 Bits, es decir,
estas 3 instrucciones
tienen el mismo
significado que: L
P#DBX0.3

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.

Direccionamiento indirecto por memoria con ayuda del puntero de área

Ejemplos:

STEP 7 Analogía en el STEP 5


L P#2.0 Carga el puntero para el L KF +2 Carga el número de
Byte2, Bit 0 Byte
T MD44 Se guarda en la doble L KF +0 Carga el número de Bit
palabra de marcas 44
U E [MD44] Consulta de la entrada SLW 8 Desplaza el número de
2.0 para saber si vale Bit al Byte alto
"1"
OW Bit en el Byte alto, Byte
en el Byte bajo
T MW44 Se guarda en la palabra
de marcas 44
B MW44 Elabora la palabra de
marcas 44
U E 0.0 Consulta de la entrada
2.0
para saber si vale "1"
......... .......... ....... .......
L 123 Carga 123 L KF +123 Carga 123
T MW [MD44] Guarda el 123 en la B MW44 Edita la palabra de
palabra de marcas 2 marcas 44
T MW 0 Guarda el 123 en la
palabra de marcas 2

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.

Direccionamiento indirecto por registros con ayuda del puntero de área

Ejemplos:

STEP 7 Analogía en el STEP 5


Ejemplo a
L P#2.0 Carga el puntero para el 
Byte2, Bit 0
LAR1 Carga el puntero en el .......
registro de direcciones
1
// Direccionamiento indirecto por registro con un
área interna
U E [AR1, P#0.0] Consulta de la entrada
2.0 para saber si vale
"1"

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

En el direccionamiento indirecto por registros, el puntero puede tener un identificador de área:

 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 utilización del identificador de área L en el puntero no es posible en las CPUs antiguas.


El OFFSET indicado entre corchetes [AR1, <OFFSET>] puede estar dentro del rango P#0.0 .....
P#8191.7.

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:

 P#0.0 ..... P#4095.7


es un OFFSET positivo para el "+AR1" y
 P#4096.0 ..... P#8191.7
es un OFFSET negativo para el "+AR1".

Ejemplos:

L P#0.1 OFFSET positivo más pequeño para el "+AR1"


+AR1 Aumenta el contenido de AR1 en P#0.1
......... .........
L P#4095.7 OFFSET positivo más grande para el "+AR1"
+AR1 Aumenta el contenido de AR1 en P#4095.7
....... .......
L P#4096.0 OFFSET negativo más grande para el "+AR1": Se
corresponde con "P#-4096.0"
+AR1 Se reduce el contenido AR1 en P#4096.0
....... .......
L P#M 8191.0 Se corresponde con "P#-1.0" ("+AR1" ignora el identificador
"M")
+AR1 Se reduce el contenido AR1 en P#1.0 !
....... .......
L P#8191.7 OFFSET negativo más pequeño para el "+AR1": Se
corresponde con "P#-0.1"
+AR1 Se reduce el contenido AR1 en P#0.1 !
....... .......
L P#E 8192.0 Se corresponde con P#0.0" ("+AR1" ignora el identificador
"E")
+AR1 El contenido del AR1 no se modifica

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.

Si se utiliza el registro de direcciones, existen limitaciones, que si no se tienen en cuenta pueden


provocar reacciones inesperadas en el programa de usuario. Información más detallada se puede ver en
la ayuda del STEP 7, bajo la palabra de búsqueda "AR1".

Ayuda para elegir las posibilidades del direccionamiento indirecto:

 Si se utiliza el registro de direcciones, es preferible elegir el direccionamiento indirecto por


registros con punteros de área internos
 El área de memoria llamada por la instrucción se ve en la misma. De esta forma, el programa es
más claro, hay menos posibilidades de fallo y será mejor para el mantenimiento;
 En este caso, no hay que tener en cuenta la vida útil de los operandos de las direcciones. La
utilización del registro de direcciones es posible actualmente, independientemente del DB
abierto o los datos locales.

Las ventajas de la utilización del direccionamiento indirecto por memoria, con un puntero en la zona de
marcas, son las siguientes:

 No se tienen en cuenta las limitaciones para la utilización del registro;


 Tampoco hay que tener en cuenta la vida útil de los operandos de las direcciones, porque la zona
de marcas está disponible sin limitaciones en todos los puntos del programa.
 Se pueden utilizar varios punteros en paralelo.
 Sin embargo, no se dispone de la cómoda posibilidad del "+ARi" ni de la indicación de un
OFFSET.

Una advertencia para trabajar con punteros o punteros ANY:

 Ambos contienen el puntero de área en los 32 bits más bajos, tal como se ha mostrado arriba.

Al utilizar el direccionamiento indirecto, los errores de programación no suelen aparecer tan


rápidamente como cuando se utiliza el direccionamiento directo. Además, no solo puede que la zona de
memoria deseada aparezca en un punto que no se ha tenido en cuenta, sino que se pierdan datos sin
querer de otras zonas de memoria. Por tanto, proceda con cuidado, y compruebe el programa con
profundidad.

Advertencia:
En la ayuda Online del STEP 7, se dispone de información adicional y ejemplos en

 Formato del tipo de parámetro ANY,


 Formato del tipo de parámetro POINTER,
 Utilización del tipo de parámetro POINTER,
 Utilización del tipo de parámetro ANY
¿Cómo se pueden abrir indirectamente bloques de datos en STEP 7 V5.x y cómo se pueden llamar,
arrancar y evaluar temporizadores de manera indexada?
Mostrar referencias
Instrucciones
Se disponen de las siguientes posibilidades para abrir indirectamente un módulo de datos:

 Programando parámetros formales del tipo "BLOCK_DB (ejemplo 1)


 A través de la pila de datos locales (variables temporales del módulo) (ejemplo 2)
 Por medio del direccionamiento indirecto de memoria (ejemplo 3)

La figura 01 muestra 3 ejemplos para la apertura indirecta de un bloque de datos en AWL:

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".

Llamar, arrancar y evaluar un temporizador de manera indexada


Un temporizador se puede llamar de manera indexada a través de una variable de tipo WORD. Esta
variable puede ser:
 Una variable global [MW] o
 Una variable local en un DB [DBW] o
 Una variable temporal dentro de un módulo.
El acceso se realiza de la siguiente manera (ejemplo):

// El número de temporizador se encuentra en la palabra de marcas 2, codificado en


SI T[MW2]
hexadecimal.
// El número de temporizador se encuentra en la palabra del módulo de datos 2,
SI T[DBW2] codificado en hexadecimal. El DB tiene haberse abierto anteriormente de manera
explícita.
SI T[#zeit_x] // La variable "#zeit_x" es una variable temporal de tipo WORD.

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)

AUF DB1 // ABRO EL BLOQUE EN EL QUE VOY A LEER


LAR1 P#DBX0.0 // MANDO EL PUNTERO AL INICIO DEL BLOQUE O DONDE SEA NECESARIO
L 100 // ULTIMO VALOR A LEER DEL BLOQUE
L #actual //VALOR ACTUAL DEL PUNTERO AL BLOQUE : VARIABLE DE MEMORIA MWxx
==I // COMPARO LOS VALORES
SPBN SIG // SI NO SON IGUALES SIGO
L 0 // SI SON IGUALES CARGO 0
T #actual // Y REINICIO EL CONTADOR
SIG: NOP 0
L4
L #actual
+I // SUMO 4 AL VALOR ACTUAL
T #actual
L #actual // CARGO EL VALOR ACTUAL
L 4 // CARGO 4
-I // RESTO 4 DEL VALOR ACTUAL

SLW 3 //AGREGO DESPLAZAMIENTO DEL POINTER. EN ESTE CASO ASUMO BYTE.


+AR1 // SUMO EL VALOR OBTENIDO AL REGISTRO DE DIRECCIONES,CON LO CUAL MI PUNTERO AHORA ESTA
DONDE LO NECESITO
L DBD [AR1,P#0.0] // LEO EL VALOR EN PALABRA DOBLE
// DE LA DIRECCION ACTUAL

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]

Gracias y perdon por preguntar tanto

Puntero a DB

por Ricardo » Dom Jun 15, 2003 3:53 am


Cuando yo puse #actual lo que quise indicar es que esa será la variable en la que se va almacenando un valor
auxiliar, que es el que se me irá sumando al puntero que fijo al principio para ir avanzando a lo largo del DB, este
valor auxiliar lo puedes tranquilamente almacenar ( si no quieres usar variables estáticas del bloque) en una
palabra de marcas, o sea para el caso es lo mismo que en lugar de #actual coloques por ejemplo MW10, esta
variable es unvalor dinámico que irá cambiando a medida que tu programa vaya leyendo los sucesivos valores se
incrementará como ves de 4 en 4(0, 4, 8, 12, 16,...).
Esto es mas facil de ver si analizas como funciona el código:

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).

Espero te haya aclarado algo mas, sino pregunta nuevamente.

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:

1. Acceso por Direccionamiento Directo:

Se puede acceder a un elemento de un DB con las siguientes instrucciones:

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.

2. Accesso a un elemento de un DB que ya se encontraba abierto:

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

3. Acceso a datos de un DB de Instancia a través de la llamada de un Bloque de


Función:

Los datos pueden ser transferidos a un DB de Instancia a través de la llamada a su


correspondiente bloque de función con la instrucción CALL FB1, DB19. La asignación de las
variables, que deberían de haber sido previamente definidas en la tabla de definiciones del
FB, y cuyo contenido se almacena en el DB de instancia, son tomadas de las direcciones
asignadas a los parámetros del FB (p.e. EW0, M 10.0 o AW4) con la instrucción CALL.

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.

Nota: El formato de las variables del DB de Instancia y la dirección asignada en el


parámetro del FB deben de ser iguales.
Direccionamiento en STEP 7

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.

El operando indica directamente la dirección del valor.

Direccionamiento Directo

Área Ejemplo Tipo de Acceso Descripción

I I 0.0 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de Entradas


Q QB 4 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de Salidas
PI PI W 10 Byte, Palabra, Doble palabra Entradas de periferia
PQ PQ D 24 Byte, Palabra, Doble palabra Salidas de periferia
M M 100.0 Bit, Byte, Palabra, Doble palabra Marcas
T T 15 - Temporizadores
C C 80 - Contadores
DB DBX0.0 Bit, Byte, Palabra, Doble palabra Datos de un DB global
DI DIW20 Bit, Byte, Palabra, Doble palabra Datos de un DB de instancia
L LB 34 Bit, Byte, Palabra, Doble palabra Datos locales
Direccionamiento Indirecto
Direccionamiento Indirecto
• Permite asignar direcciones que no son conocidas hasta la ejecución
• Permite múltiples procesamientos de partes del programa
• Como las direcciones no son calculadas hasta la ejecución hay un riesgo de que áreas de la
memoria sean sobrescritas.

Tipos de Direccionamiento Indirecto


Direcciones Indirectas
Direcciones que pueden ser especificadas de Modo Indirecto Direccionamiento Puntero
E/S de Periferia, Entradas, Salidas, Bits de Memoria, Datos Globales, Indirecto por Memoria Puntero de Área
Datos de Instancia, Datos Locales, Datos Temporales Indirecto por Registro
Temporizadores (T), Contadores (C ), Funciones (FC´s), Bloques Indirecto por Memoria Número de 16 bits
Funcionales (FB´s), Boques de Datos (DB´s)

Tipos de Direccionamiento Indirecto


• Direccionamiento Indirecto por Memoria con Número
• Direccionamiento Indirecto por Memoria con Puntero de Área
• Direccionamiento Indirecto por Registro e Intraárea (área interna)
• Direccionamiento Indirecto por Registro e Interárea (área cruzada)
Punteros y Tipos de Punteros
Punteros
Un puntero se usa para apuntar a una dirección

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

Punteros a Área (I)


Definición
El puntero a área contiene la dirección y es posible también el área direccionada:

Tipos de Punteros a Área


1. Intraárea (Área Interna): El puntero no especifica el área direccionada
2. Interárea (Área Cruzada): El puntero especifica el área direccionada

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

Dirección byte Dirección bit

Puntero a Byte n Byte n+1 Byte n+2 Byte n+3


Interárea 10000RRR 00000yyy yyyyyyyy yyyyyxxx
Área operando Dirección byte Dirección bit

Código: Bit 31=1 El registro contiene una dirección y la zona de memoria .


Bit 31=0 El registro contiene una dirección y no la zona de memoria .

Zonas de acceso (Áreas de Operando):


RRR Identificador: 000 Periferia
001 Entradas (PII)
010 Salidas (PIQ)
011 Marcas
100 Datos en DB Global (DB)
101 Datos en DB de instancia (DI)
110 Datos locales del módulo (L)
111 Datos locales del módulo anterior (V)
Rango de direcciones:
Y...Y Dirección Byte
XXX Dirección Bit

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.

Se especifica el Bloque de Datos si el puntero de área contiene las áreas de dirección de DB


global o DB de instancia. En los demás casos los dos primeros bytes son cero.

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.

Tipos de Punteros ANY


1. Variables con Tipos Datos: El puntero contiene un puntero DB
2. Variables con Tipos Parámetros: El puntero contiene un número (temporizadores,
Contadores y Bloques)

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

Punteros ANY (II)

Campo Tipo en el Puntero ANY


Puntero ANY Puntero ANY Puntero ANY
para Tipos Datos para Temp/Cont para Bloques Tipos de Datos Tipos de Datos
Byte n 16#10 16#10 16#10 Elementales Complejos
01 BOOL 0E DT
Byte n+1 Tipo Tipo Tipo
02 BYTE 13 STRING
Byte n+2 03 CHAR Tipos Parámetro
Cantidad Cantidad Cantidad
Byte n+3 04 WORD 17 BLOCK_FB
Byte n+4 05 INT 18 BLOCK_FC
Número de
16#0000 16#0000 06 DWORD 19 BLOCK_DB
Byte n+5 Bloque de Datos
07 DINT 1A BLOCK_SDB
Byte n+6 Tipo 08 REAL 1C COUNTER
16#0000
Byte n+7 Puntero a 16#00 09 DATE 1D TIMER
Byte n+8 Área 0A TOD
Número Número 0B TIME Puntero Cero
Byte n+9
0C S5TIME 00 NIL
Direccionamiento Indirecto por Memoria (I)
En el direccionamiento indirecto por memoria, el operando indica la dirección del valor que
va a procesar la operación. El operando se compone de las siguientes partes:
• Un identificador (p. ej. “IB” para “byte de entrada”)
• Una palabra que contiene el número de un temporizador (T), de un contador (Z), de
un bloque de datos (DB), de una función (FC) o de un bloque de función (FB)
• Una palabra doble que contiene la dirección exacta de un valor del área de memoria,
indicada por el identificador.

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.

Ejemplo: OPN DB10


L IB [DBD20]

Direccionamiento Indirecto por Memoria (II)


El operando indica la dirección del valor o del número de forma indirecta, es decir,
utilizando el puntero. Esta palabra o palabra doble puede encontrarse en una de las
siguientes áreas:
• Marca (M)
• Bloque de datos (DB)
• Bloque de datos de instancia (DI)
• Datos locales (L).
Direccionamiento Indirecto por Memoria con un Número (III)
El direccionamiento indirecto con un número puede considerarse como otro tipo de
direccionamiento el Direccionamiento Indexado.
Es necesaria la utilización de un valor numérico de 16 bits (WORD) que debe de encontrarse
en una de las siguientes áreas: • Marcas (MW) • Bloques de Datos Globales (DBW)
• Datos Locales (LW) • Bloques de Datos Instancia (DIW)

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)

Formato del Puntero de Palabra

Direccionamiento Indirecto por Memoria (IV)


Direccionamiento Indirecto por Memoria con Número
OPN DB [MW 20]
L 133 //cargar puntero en ACU1
T MW 20 //salvar en palabra de memo. MW 20
OPN DB[MW20] //abrir DB global
133
.....
SP T[MW 20] //arrancar temporizador
OPN DB 133

Direccionamiento Indirecto por Memoria con Puntero a Área


A M [MD 10]
L P#30.0 //cargar puntero en ACU1
T MD 10 //salvar en palabra doble MD 10
L MW[MD10] //asignar dirección digital
P#30.0
.....
A M[MD 10] //asignar dirección binaria
A M 30.0
Direccionamiento Indirecto por Registro (I)
Direccionamiento Indirecto por Registro e Intraárea
• La dirección del área interna está definida en uno de los dos registros de direcciones (AR1 ó AR2).
• El contenido del registro de direcciones es un puntero a área interna
• Con el direccionamiento indirecto por registro, se especifica un offset que se suma al registro de
direcciones
• La suma se realiza cuando la operación es ejecutada sin modificar el contenido del registro de
direcciones
• El offset tiene el formato de un puntero a área
• En direccionamiento indirecto de direcciones digitales, el offset debe tener como dirección bit “0”
• El máximo valor es: P#8191.7

Direccionamiento Indirecto por Registro (II)


Direccionamiento Indirecto por Registro e Interárea
• La dirección general está definida en uno de los dos registros de direcciones (AR1 ó AR2).
• El contenido del registro de direcciones es un puntero en general
• Con el direccionamiento general, se escribe el área de direcciones junto con el puntero a área dentro
del registro de direcciones
• Con direccionamiento indirecto sólo se especifica un identificador para la dirección:
No especificar un bit, “B” para byte, “W” para palabra y “D” para doble palabra
• Se especifica con un offset con dirección bit
Direccionamiento Indirecto por Registro (III)
Direccionamiento Indirecto por Registro e Intraárea
LAR1 P#10.0 //cargar puntero dir. reg. 1 AR1
....... P#10.0
T MW[AR1,P#4.0] //asignar dirección digital
..... A I [AR1, P#2.1] +
A I[AR1,P#2.1] //asignar dirección binaria
P#2.1

A I 12.1

Direccionamiento Indirecto por Registro e Interárea


LAR1 P#M12.0 //cargar puntero dir. reg. 1 AR1
...... P#M12.0
L B[AR1,P#4.0] //asignar dirección digital
..... L B [AR1, P#4.0] +
= [AR1, P#0.7] // asignar dirección binaria
P#4.0

L M B 16.0

Operaciones Relacionadas con los Registros


Operaciones relacionadas con AR1 y AR2
Operación Operando Función
LAR1 Cargar contenido de ACU1 en registro de direcciones AR1.
LAR1 AR2 Cargar contenido del AR2 en registro de direcciones AR1.
LAR1 <Dirección> Carga el contenido del área direccionada en el registro de direcciones AR1.
LAR1 P#{área}, byte{.bit} Cargar el contenido de la dirección en registro de direcciones AR1.
LAR2 Cargar contenido de ACU1 en registro de direcciones AR2.
LAR2 <Dirección> Carga el contenido del área direccionada en el registro de direcciones AR2.
LAR2 P#{área}, byte{.bit} Cargar el contenido de la dirección en registro de direcciones AR2.
TAR Intercambia el contenido de AR1 y AR2.
TAR1 Transfiere el contenido del registro de direcciones 1 AR1 al ACU1.
TAR1 AR2 Transfiere contenido del AR1 en registro de direcciones AR2.

TAR1 <Dirección> Transfiere el contenido del registro de direcciones 1 AR1 al destino direccionado.

TAR2 Transfiere el contenido del registro de direcciones 2 AR2 al ACU1.


TAR2 <Dirección> Transfiere el contenido del registro de direcciones 2 AR2 al destino direccionado.
+AR1 Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR1.
+AR1 P#Byte.Bit Suma una constante puntero al contenido del registro de direcciones AR1.
+AR2 Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR2.
+AR2 P#Byte.Bit Suma una constante puntero al contenido del registro de direcciones AR2.
Ejemplos: Direccionamiento Indirecto (I)
Ejemplo 1:
L 11
T MW 60
OPN DB[MW60] OPN DB 11

Ejemplo 2: L P#24.0
T MD 50
L IW [MD50] L IW 24

Dirección
Tipo de Acceso
Zona de Acceso

Ejemplos: Direccionamiento Indirecto (II)


Ejemplo 3: AR1 31 23 15 7 0
00000000 00000000 00000000 01010000
00000RRR 00000BBB BBBBBBBB BBBBBXXX
LAR1 P#10.0 // Preselección
L MW [AR1,P#200.0] +200

L MW 210

Tipo Zona de Registro Constante de Instrucción


Dato Acceso Dirección Desfase Ejecutada

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

Zona de Registro Constante de Instrucción


Acceso Dirección Desfase Ejecutada
Ejemplos de Direccionamiento (III)

Ejemplo 5: Memoria con Número Ejemplo 6: Memoria con Puntero


L 5 L P#0.0
T DBW100 T MD 100
A T[DBW100] A I[MD 100]
L MD[MD 100]

Ejemplo 7: Registro Intraárea Ejemplo 8: Registro Interárea


LAR1 P#0.0 LAR1 P#I0.0
L 8 LAR2 P#Q4.0
M01: T MW 20 L 8
A I[AR1, P#0.0] M02: T MW 20
= Q[AR1, P#4.0] A [AR1, P#0.0]
+AR1 P#0.1 = [AR2, P#0.0]
L MW 20 +AR1 P#0.1
LOOP M01 +AR2 P#0.1
L MW 20
LOOP M02

Ejemplos: Direccionamiento Indirecto (IV)

Ejemplo 9: Comparación STEP5 STEP7


STEP 7 STEP 5

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)

Área Ejemplo Tipo de Acceso Descripción


E E 0.0 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso Entradas
A AB 4 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso Salidas
PE PEW 10 Byte, Palabra, Doble Palabra Entradas de Periferia
PA PAD 24 Byte, Palabra, Doble Palabra Salidas de Periferia
M M 100.0 Bit, Byte, Palabra, Doble Palabra Marcas
T T15 - Temporizadores
C Z80 - Contadores

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 3
Direccionamiento directo (III)

Dentro de cada byte, palabra o doble palabra, los bits se


numeran de derecha a izquierda, de 0 al 7. E 124.0

Dir. byte: área de memoria + B + nº de byte EB124

Dir. palabra: área de memoria + W + nº de su 1er byte

EW124 => EB124 EB125

Dir. doble palabra: área de memoria + D + nº de su 1er byte

MD0 => MB0 MB1 MB2 MB3

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

Se puede acceder de forma indirecta a las posiciones de memoria.


L P#124.0 L P#124.0 carga la dirección byte 124, bit 0 en formato de puntero.
T MD 50 OJO: es la dirección, no el contenido. No se ha indicado la zona de
memoria, que se especificará al utilizar la dirección.

L E W [MD50] L E W 124

En el puntero se almacena la dirección de bit.


Zona Tipo de Dirección
acceso El tipo de acceso (bit, byte, palabra y doble
palabra) y a que zona de memoria se refiere, se
especifican en la instrucción.
L 11
T MW 60
AUF DB[MW 60] AUF DB 11

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 6
Direccionamiento Indirecto

Direccionamiento indirecto con marcas


MW o palabra de DB
⌧Se pueden utilizar con llamadas a módulos o para direccionar
contadores, temporizadores, FC’s, FB’s y DBs. En la marca
almacenamos el número del contador, temporizador o DB.
L8 // Carga un 8 en ACU1
T MW10 // Lo transfiere a la palabra de marcas 10
U Z [MW10] // Equivale a U Z 8: comprueba el contador 8
MD o doble palabra de DB
⌧Se pueden utilizar para el resto de direccionamientos. El valor del
puntero deberá de ser introducido como constante de puntero en
una doble palabra.
L P#124.0
T MD50
L EW[MD50] --- L EW124

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 7
Direccionamiento indirecto

Registros de direcciones (AR1 y AR2)


Registros de 32 bits utilizados para direccionamiento indirecto
Contiene la dirección interna de memoria para realizar los direccionamientos.
Cuando hacemos p#E124.0, se genera un puntero, que tiene la siguiente forma:

Configuración:
31 23 15 7 0
10000 RRR 00000 BBB BBBBBBBB BBBBBXXX

Código: Bit 31=1 El registro contiene una dirección y la zona de memoria .


Bit 31=0 El registro contiene una dirección y no la zona de memoria .

Zonas de memoria (si está disponible):


RRR Identificador: 000 Periferia
001 Entradas (PAE)
010 Salidas (PAA)
011 Marcas
100 Datos en DB 1 (DB)
101 Datos en DB 2 (DI)
110 Datos locales del módulo (variables de un FC)
Rango de direcciones:
B...B Dirección Byte
XXX Dirección Bit

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 8
Direccionamiento indirecto

• La carga del registro se realiza con las instrucciones LAR1 y LAR2.


• Las instrucciones TAR1 y TAR2 se utilizan para ver el contenido de
los registros de direcciones.
• El formato puntero P# hace posible el introducir la dirección de
memoria en el registro de direcciones (byte/bit).

Ejemplo: LAR1 P# E 100.0


El registro 1 contiene la dirección de la entrada 100.0 .

Carga del registro de direcciones


L P#125.0 - 0000 0000 0000 0011 1110 1000
LAR1
} LAR1 P#125.0

L P#E125.0 - 1000 0001 0000 0011 1110 1000


LAR1
} LAR1 P#E125.0

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 9
Direccionamiento Indirecto

•Una vez almacenado el puntero con LAR1, podemos


utilizarlo con una instrucción indirecta.
•En la instrucción indirecta hay que especificar una zona
de acceso (E, A, M, T, C, etc..), un tipo de acceso (byte,
palabra, etc.) y un desfase. 10

LAR1 P#10.0 // Preselección + 200

L M W [AR1, P#200.0]
L MW 210

Tipo Tipo Registro Constante de Instrucción


Dato Acceso Dirección Desfase Ejecutada

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 10
Direccionamiento Indirecto

También es posible utilizar el direccionamiento indirecto


para direccionar bits.
Ejemplo:
LAR1 P#E 100.0
U [AR1, P#110.5] // Se quiere acceder no a la entrada 100.0
: // si no a la 100.0+110.5 =210.5
:
:
“U E 210.5” // Equivale a esta instrucción

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

En estas funciones, cuando se utiliza una marca, ésta debe ser de


32 bits, porque el AR1 y AR2 lo son.
Los valores que se introducen o suman a AR1 y AR2 deben ser
punteros.

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 12
Ejercicio 1

Realice un programa que active el bit de


la palabra de salida AW124 que indique
el valor que haya en el EB124. Para
valores no válidos se apagarán todos los
bits de salida. (Realice el ejercicio
primero con saltos y posteriormente
utilizando direccionamiento indirecto)

SIMATIC S7 NIVEL II
Dir_indirecto.ppt 13
Ejercicio 2

Realice un programa que lea de un DB su


contenido a través de dir. Indirecto. Para ello
suponga que en dicho DB se registra el
contenido de una tabla y que se desea
acceder a cualquier posición de esa tabla
mediante EB124, y que en AB124 se
representa el contenido de dicha tabla.

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

OB82: ... a menos que sea


Error interrumpido por otro OB
Asíncrono

Módulos de Organización (OB´s)


El sistema operativo
OB1 llama a otros OBs Ejemplo de OB10:
para utilizarlos: Ejecuta este módulo
Programa Principal cada minuto.
Empieza a las 9:00
Ejecución cíclica
hasta ser interrumpido
por un OB con una más Ejemplo de OB20:
alta prioridad. Ejecuta este módulo
2.35” después de
Una vez interrumpido detectar un evento
por el sistema operativo
el OB1 rompe su ciclo
Ejemplo de OB82:
y ejecuta el OB
Ejecuta este módulo
requerido.
si hay un cortocircuito
en la entrada
analógica PIW532
Almacenamiento de Datos de un OB Interrumpido

Pila de Interrupción (Pila I)


Contenido acumuladores ACCU1,ACCU2

Contenido registros direcciones AR1, AR2


El sistema llama a un
nuevo OB
Contenido registros módulos datos DB, DI

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

Puntero de datos temporales (pila L)

Número de Módulo

Dirección de retorno

OB´s de Error y de Interrupción


• Los OBs se encuadran dentro de dos categorías; sus respectivas funciones determinan
qué dispara el punto de ruptura del OB que se esté ejecutando.

– OBs que realizan tareas periódicas (Interrupción Horaria)


• Se ejecuta en una fecha u hora del día especificada
• Se ejecuta tras una demora especificada después de un evento
• Se ejecuta en un ciclo especificado
– OBs que reaccionan a condiciones de error (Interrupción Error)
• Se ejecuta si la CPU detecta un error de proceso o de hardware
• Se ejecuta si la CPU detecta un error que no está relacionado con una
instrucción específica del programa
• Se ejecuta si la CPU detecta un error que puede ser asociado al procesamiento
de una instrucción específica del programa
Módulos de Organización de Alarmas
Tipo de Alarma OB´s Prioridad Comentarios
Ciclo libre OB1 1 Bloque de organización para la
(OB1) ejecución cíclica
Alarmas horarias OB 10 a OB 17 2 Bloques de organización para la
(OB 10) alarma horaria (OB 10 a OB 17)
Alarmas de retardo OB 20 a OB 23 3a6 Bloques de organización para
(OB 20) alarma de retardo (OB 20 a OB 23)
Alarmas cíclicas OB 30 a OB 38 7 a 15 Bloques de organización de alarma
(OB 35) cíclica (OB 30 a OB 38)
Alarmas de proceso OB 40 a OB 47 16 a 23 Bloques de organización de alarma
(OB 40) de proceso (OB 40 a OB 47)
Errores asíncronos OB 80 a OB 87 26 ò 28 Bloques de organización para el
(OB 82) tratamiento de errores
Arranque OB 100 a OB 102 27 Bloques de organización de
(OB 100) arranque (OB 100/OB 101/OB 102)
Errores síncronos OB 121 y OB 122 - Bloques de organización para el
tratamiento de errores

• Otros OB´s soportados por la CPU 315:


• OB 80, OB 81, OB 85, OB 87, OB 121 y OB122

Ejecución Cíclica de Programas

• La ejecución más común es la ejecución cíclica


• Existen otros tipos de ejecuciones conducidas por eventos
• En la mayoría de los casos, la ejecución de un programa conducido por eventos es un
añadido a la ejecución cíclica
• El programa principal es invocado desde el OB1:
• se ejecuta con el nivel más bajo de prioridad
• puede ser interrumpido por todos los otros tipos de procesamiento
del programa
• Al finalizar la ejecución del OB1 se actualizan las imágenes del proceso
• Si se presenta un error en la actualización de las imágenes se llama al OB 85
(programa que se ejecuta ante errores)
• Si no existe el OB 85, la CPU pasa a STOP
Tiempo de Ciclo (I)

• El tiempo de ejecución del programa del OB 1 es supervisado


• El valor por defecto es 150 mseg.
• Se puede ajustar desde 1 mseg a 6 segundos en la configuración de la CPU
• Si el tiempo de procesamiento del programa principal es mayor que el tiempo fijado, llama
al OB 80 (“error de tiempo”). Si el OB 80 no existe la CPU pasa a modo STOP.
• El tiempo de ciclo ajustado debe cubrir:
• El tiempo de procesamiento del OB1. Actualización de las imágenes
• El tiempo de procesamiento de interrupciones de alta prioridad
• Procesos de comunicación del sistema operativo
• Acceso a la CPU desde un dispositivo de programación

SFC 43 RE_TRIGR: Arrancar de nuevo el tiempo de vigilancia de ciclo


• Inicia de nuevo el tiempo de vigilancia de ciclo
• No tiene parámetros

Tiempo de Ciclo (II)


• El tiempo de ciclo es el tiempo que el S.O. necesita para:
• ejecutar el programa cíclico
• partes del programa que interrumpen al cíclico (ejecución otros OBs)
• actividades del sistema (p.e. actualización de imágenes, ..)

• El tiempo de ciclo se vigila


• El tiempo de ciclo no es igual para cada ciclo
Tiempo de Ciclo (III) – Marcas de Ciclo

Variables Locales del OB1

Variable Tipo de datos Descripción


OB1_EV_CLASS BYTE Clase de evento e identificadores: B#16#11: activo
OB1_SCAN_1 BYTE Información de arranque
B#16#01: Conclusión del rearranque completo(caliente)
B#16#02: Conclusión del rearranque
B#16#03: Conclusión del ciclo libre
B#16#04: Conclusión del arranque en frío
OB1_PRIORITY BYTE Prioridad: 1
OB1_OB_NUMBR BYTE Número de OB (01)
OB1_RESERVED_1 BYTE Reservado
OB1_RESERVED_2 BYTE Reservado
OB1_PREV_CYCLE INT Tiempo de ejecución del ciclo anterior (ms)
OB1_MIN_CYCLE INT Tiempo de ciclo mínimo (ms) desde el último arranque
OB1_MAX_CYCLE INT Tiempo de ciclo máximo (ms) desde el último arranque
OB1_DATE_TIME DATE_TIME Fecha y hora en que se solicitó el OB
SFC´s – Diagnóstico
SFC 6 RD_INFO: Leer información de arranque del OB actual
Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT INT E, A, M, D, L Información de error
TOP_SI OUTPUT STRUCT D, L Información de arranque
del OB actual
START_UP_SI OUTPUT STRUCT D, L Información de arranque del
último OB activado

SFC´s – Gestión del Reloj en Tiempo Real

SFC 0 SET_CLK. Ajustar la hora


Parámetro Declaración Tipo de datos Area de memoria Descripción
PDT INPUT DT D, L, Entrada PDT para indican fecha
y hora que se desea ajustar
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error.

SFC 1 READ_CLK. Leer la hora


Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error
CDT OUTPUT DT D, L En la salida CDT se emiten la
fecha y la hora actuales.

SFC 64 TIME_TCK: Leer el cronómetro del sistema


Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT TIME E, A, M, D, L El parámetro tiene el cronometro
del sistema, comprendido entre
0 a 2elevado a 31–1 ms.
SFC´s – Gestión del Contador de Horas de Funcionamiento (I)
SFC 2 SET_RTM: Ajustar contador de horas de funcionamiento
Parámetro Declaración Tipo de datos Area de memoria Descripción
NR INPUT Byte E, A, M, D, L, Número del contador de horas
Const. de funcionamiento que se desea
ajustar. Valores posibles: 0a 7.
PV INPUT INT E, A, M, D, L, Contiene ajuste para el contador
Const. de horas de funcionamiento.
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error

SFC 3 CTRL_RTM: Arrancar y parar contador de horas de funcionamiento


Parámetro Declaración Tipo de datos Area de memoria Descripción
NR INPUT Byte E, A, M, D, L, Número del contador de horas
Const. de funcionamiento que se desea
arrancar o parar. Valores (0 - 7)
S INPUT BOOL E, A, M, D, L, Arranca o para el contador
Const. Se para con ”0”, arranca con”1”
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error

SFC´s – Gestión del Contador de Horas de Funcionamiento (II)

• SFC 4 READ_RTM: Leer el contador de horas de funcionamiento


Parámetro Declaración Tipo de datos Area de memoria Descripción
NR INPUT Byte E, A, M, D, L, Número del contador de horas de
Const. funcionamiento. Valores: 0 a 7.
CQ OUTPUT BOOL E, A, M, D, L Indica si contador está en marcha
o parado. Un ”0” indica parado.
Un ”1” indica en marcha.
CV OUTPUT INT E, A, M, D, L Emite el valor actual del contador.
RET_VA L OUTPUT INT E, A, M, D, L Parámetro con código de error
SFC´s – Varios
SFC 25 COMPRESS: Comprimir la memoria de usuario
Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT INT E, A, M, D, L Información de error
BUSY OUTPUT BOOL E, A, M, D, L Información si está activada la
compresión con la SFC 25 (1si)
DONE OUTPUT BOOL E, A, M, D, L Informa. si proceso a finalizado
con con éxito (1 significa éxito)

SFC 46 STP. Poner la CPU en stop


• No tiene parámetros

SFC 47 WAIT:. Retarda el tratamiento del programa de usuario


Parámetro Declaración Tipo de datos Area de memoria Descripción
WT INPUT INT E, A, M, D, L El parámetro WT contiene el
tiempo de retardo en ms.

Ejecución en el Arranque

• Previamente a que la CPU ejecute el programa principal se puede


ejecutar una rutina de arranque
• Mediante los módulos de ejecución en el arranque es posible fijar el
comportamiento del autómata antes de la primera ejecución del programa
• El módulo de organización asignado a cada tipo de arranque se ejecuta
una sola vez en cada arranque
• Mientras se ejecutan los módulos asignados al arranque no está activada la
vigilancia de tiempo de ciclo
• La CPU tiene 4 posibles estados, STOP, STARTUP, HOLD y RUN
• El relacionado con la fase de arranque se denomina STARTUP
Modos de Operación de las CPU´s (I)
2
3
5 STARTUP

1 7
STOP RUN
8
HOLD 6
4

(1) Alimentación al equipo. La CPU pasa a modo STOP


(2) Si la llave esta en RUN o RUN-P, la CPU pasa a modo STARTUP
(3) Posteriormente a modo RUN
(4)(5) Error no reconocido o cambio de posición de la llave, paso a STOP
(6)(7) En el modo HOLD el programa de usuario es testeado. Se puede
conmutar a este modo desde STARTUP o RUN y retornar al modo
original cuando el test es interrumpido
(8) Se puede llevar la CPU a STOP desde el modo HOLD
El comportamiento en el arranque se define en la configuración de la CPU

Modos de Operación de las CPU´s (II)

• Existen tres modos de arrancar el equipo


• arranque en frío (cold restart)
• arranque completo
• arranque en caliente (warm restart)
• En el arranque en frío o completo, el programa principal se ejecuta desde el
comienzo. En un arranque en caliente, continua el programa principal en el
punto de interrupción y finaliza el ciclo.
• Cada modo de arranque tiene asignado un módulo de organización
• arranque completo, OB 100
• arranque en frío, OB 102
• arranque en caliente, OB 101
• si no existen ninguno de estos módulos se pasa al programa principal
• En los modos STOP o HOLD los módulos de salida no están operativos
• Cuando la ejecución cíclica comienza, los módulos están liberados
• En el arranque en frío o completo, las imágenes del proceso son puestas a cero
• Desde el OB 100 y OB 102, se pueden consultar entradas y activar salidas
accediendo a periferia.
Modo STOP

• Las CPUs se ponen en STOP:


• cuando esta seleccionado este modo con la llave
• cuando se conmuta de RUN a STOP
• cuando se presenta un error no reconocible en la ejecución del programa
• cuando se ejecuta la SFC 46 (STOP)
• cuando se solicita desde el dispositivo de programación
• La CPU introduce la razón del STOP en el buffer de diagnóstico, que puede
ser consultado con el aparato de programación
• En modo STOP el programa de usuario no es ejecutado
• En modo STOP se puede hacer un reset de la memoria de usuario:
• desde el selector de la CPU
• desde el aparato de programación

Variables Locales de los OB´s de Arranque


Variable Tipo de datos Descripción
OB100_EV_CLASS BYTE Clase de evento e indicativos: B#16#13: activado
OB100_STRTUP BYTE Solicitud de arranque:
B#16#81: Sol. manual de rearranque completo (en caliente)
B#16#82: Sol. automática de rearranque completo (en caliente)
B#16#83: Sol. manual de rearranque
B#16#84: Sol. automática de rearranque
B#16#85: Sol. manual de arranque en frío
B#16#86: Sol. automática de arranque en frío
OB100_PRIORITY BYTE Prioridad: 27
OB100_OB_NUMBR BYTE Número de OB (100, 101 ó 102)
OB100_RESERVED_1 BYTE Reservado
OB100_RESERVED_2 BYTE Reservado
OB100_STOP WORD Número del evento que ha llevado la CPU a STOP
OB100_STRT_INFO DWORD Informaciones complementarias sobre el arranque actual
(tabla)
OB100_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
Arranque Completo

Arranque RUN
Borrar datos
completo
no remanentes

Inhibir módulos
de salida Inicializar Transferir imagen
módulos proceso de salidas

Borrar imagen del


Ejecutar Actualizar imagen
proceso de entradas
OB 100 proceso de entradas

Borrar imagen del Actualizar imagen Programa principal


proceso de salidas proceso de entradas OB 1

Reset salidas Liberar módulos


del proceso de salida

SFC´s Para Programar OB´s de Arranque


• Las Funciones de Sistema integradas (SFCs) permiten direccionar módulos
y realizar comprobaciones previas a la ejecución cíclica del programa

• SFCs para direccionar módulos:


SFC 5 GADR_LGC Determinar la dirección lógica de un canal
SFC 49 LGC_GADR Determinar el slot de una dirección lógica
SFC 50 RD_LGADR Determinar direcciones lógicas de un módulo

• SFCs para transferir a registros:


SFC 54 RD_DPARM Leer parámetros definidos
SFC 55 WR_PARM Escribir parámetros dinámicos
SFC 56 WR_DPARM Escribir parámetros predefinidos
SFC 57 PARM_MOD Parametizar módulo
SFC 58 WR_REC Escribir registros
SFC 59 RD_REC Leer registro
SFC 5
Parámetro Declaración Tipo de datos Area de memoria Descripción
SUBNETID INPUT BYTE E, A, M, D, L Identificador del área:
Const. - 0, en caso que el slot esté en
bastidor central o de ampliación
RACK INPUT WORD E, A, M, D, L, Número del bástidor en el caso de
Const. Identificador de área = 0
SLOT INPUT WORD E, A, M, D, L, No de slot
Const.
SUBSLOT INPUT BYTE E, A, M, D, L, Receptáculo de submódulo
Const. (sin submódulo 0)
SUBADDR INPUT WORD E, A, M, D, L, Offset en el espacio de direcciones
Const. de datos útiles del módulo
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de error
IOID OUTPUT BYTE E, A, M, D, L Identificador del área:
B#16#54: Entrada de periferia (PE)
B#16#55: Salida de periferia (PA)
LADDR OUTPUT WORD E, A, M, D, L Dirección lógica del canal

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

Ejecución por Interrupciones

• El manejo de las interrupciones es siempre llevada por eventos


• Cuando se presenta un evento, el sistema operativo interrumpe la
ejecución del programa principal y llama a la rutina de atención
al evento particular
• Cuando finaliza la rutina de atención al evento, el sistema operativo
retorna al programa principal continuando en el punto en el que se
produjo la interrupción
• Existen varios tipos de ejecuciones conducidas por eventos
• En la mayoría de los casos, la ejecución de un programa conducido por
eventos es un añadido a la ejecución cíclica
• Las ejecuciones conducidas por eventos admiten una prioridad
• La ejecución se puede permitir o inhibir con las SFCs de gestión de
eventos de alarma:
• SFC 39 DIS_IRT SFC 40 EN_AIRT
• SFC 41 DIS_AIRT SFC 42 EN_IRT
Interrupciones del Hardware (I)

• Las interrupciones de hardware permiten detectar inmediatamente en el


programa de usuario eventos ocurridos en el control del proceso
• STEP 7 ofrece los OB 40 a OB 47 para la ejecución por interrupción
• En la CPU 315 soporta únicamente el OB 40 con prioridad 16 por defecto
• Las interrupciones se parametrizan en la configuración del hardware
• Se pueden parametrizar los módulos con capacidad de interrupción en fase de
ejecución con las SFCs para transferir registros:
• SFC 55 WR_PARM Escribir parámetros dinámicos
• SFC 56 WR_DPARM Escribir parámetros predefinidos
• SFC 57 PARM_MOD Parametrizar módulo
• Por defecto las interrupciones de hardware no están permitidas
• se puede especificar si se tiene que producir la interrupción con el evento
• se permite modificar los parámetros dinámicamente (RUN) con SFCs
• Las interrupciones de hardware son reconocidas en el módulo cuando el módulo
de organización que contiene la rutina de atención a la interrupción ha finalizado
su ejecución

Interrupciones del Hardware (II)

• En la rutina de arranque los módulos no generan interrupciones hardware


• El manejo de las interrupciones comienza con la transición a RUN
• Si una interrupción hardware es generada pero no hay OB de atención a la
misma, el S.O. llama al OB 85 (ejecución por error). Si el OB 85 no ha sido
programado la CPU se va a stop
• Las llamadas a los OBs pueden ser bloqueadas o habilitadas con las SFCs:
• SFC 39 DIS_IRT Bloquear tratamiento de nuevos eventos de alarma
• SFC 40 EN_IRT Habilitar tratamiento de nuevos eventos de alarma
• Pueden ser retrasadas y habilitadas con los SFCs:
• SFC 41 DIS_AIRT Retardar el tratamiento de eventos de alarmas
• SFC 42 EN_AIRT Habilitar el tratamiento de eventos de alarmas
Configuración Hardware de Alarmas del Proceso

Variables Locales de OB´s de Alarma del Proceso

Variable Tipo de datos Descripción


OB40_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma está activada
OB40_STRT_INF BYTE B#16#41: Alarma a través de línea de interrupción 1
B#16#42: Alarma a través de línea de interrupción 2 (S7–400)
B#16#43: Alarma a través de línea de interrupción 3 (S7–400)
B#16#44: Alarma a través de línea de interrupción 4 (S7–400)
OB40_PRIORITY BYTEPrioridad parametrizada; valor prefijado: de 16 a 23
OB40_OB_NUMBR BYTENúmero de OB (40 hasta 47)
OB40_RESERVED_1 BYTEReservado
OB40_IO_FLAG BYTEMódulo de entradas: B#16#54
Módulo de salidas: B#16#55
OB40_MDL_ADDR WORD Dirección básica lógica del módulo que ha activado
la alarma
OB40_POINT_ADDR DWORD En módulos digitales: Mapa de bits con los estados de
las entradas en el módulo
En módulos analógicos, CPs o IMs: Estado de alarma
del módulo
OB40_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
SFC´s Relacionados con Interrupciones (I)
SFC 39 DIS_IRT: Bloquea tratamiento de alarma
Parámetro Declaración Tipo de datos Area de memoria Descripción
MODE INPUT BYTE E, A, M, D, L, Define los eventos de alarma y de
Const. error asíncrono que se bloquean
OB_NR INPUT INT E, A, M, D, L, Nº del OB
Const.
RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar
la función, el valor de retorno
contiene el código.
SFC 40 EN_IRT: Habilita el tratamiento de alarma
Parámetro Declaración Tipo de datos Area de memoria Descripción
MODE INPUT BYTE E, A, M, D, L, Define los eventos de alarma y
Const. error asíncrono que se habilitan
OB_NR INPUT INT E, A, M, D, L, Nº del DB
Const.
RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar la
función, el valor de retorno
contiene el código.

SFC´s Relacionados con Interrupciones (II)


SFC 41 DIS_AIRT: Retarda el tratamiento de alarma
Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos (= cantidad de
llamadas de la SFC 41)

SFC 42 EN_AIRT: Habilita el tratamiento de eventos de alarmas


Parámetro Declaración Tipo de datos Area de memoria Descripción
RET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos programados tras la
ejecución de SFC 42 o código de error
Interrupciones de Proceso (I)

Módulo de Entradas Analógicas

Si el valor del transmisor de nivel PIW 288


es mayor que el límite superior (8 voltios)
o menor que el límite inferior (2 voltios)
habilitados para esta entrada analógica, llama
al OB40.
+27648 = 10V.
+ 8 V. Límite superior para la interrupción

+ 2 V. Límite inferior para la interrupción


0

Interrupciones de Proceso (II)


Tarjeta de Entradas Analógicas

Si el valor de la PIW 288 es mayor


que el límite superior para este canal
analógico, llama al OB40.
+27648
Visualiza un mensaje de error.
+20000
Límite superior AW0
para la interrupción
0
SFC´s Relacionados con Interrupciones (III)
SFC 55

SFC´s Relacionados con Interrupciones (IV)


SFC 56
SFC´s Relacionados con Interrupciones (V)
SFC 57 PARM_MOD: Parametrizar módulo
Parámetro Declaración Tipo de datos Area de memoria Descripción
REQ INPUT BOOL E, A, M, D, L, REQ=1: Petición de escritura
Const.
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 base lógica del módulo. En
Const. un módulo mixto es necesario indicar
la menor de las dos direcciones.
RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar la función,
el valor de retorno contiene un código
de error.
BUSY OUTPUT BOOL E, A, M, D, L BUSY = 1: La operación de escritura
no ha finalizado aún.

Ejecución por Tiempo – Alarmas Cíclicas

• Una alarma cíclica es una interrupción que es generada en intervalos


periódicos de tiempo.
• La alarma permite ejecutar un programa concreto periódicamente,
independientemente del tiempo de ejecución del programa cíclico
• En STEP 7 se dedican a esta función desde el OB 30 al OB 38
• La CPU 315 dispone únicamente del OB 35 que tiene la prioridad 12
• Se puede fijar el intervalo de tiempo en el rango de 1 mseg a 1 minuto
• El comienzo del tiempo para el intervalo de tiempo es el instante de la
transición START UP a RUN
• La ejecución se puede permitir o inhibir con las SFCs:
• SFC 39 DIS_IRT SFC 40 EN_AIRT
• SFC 41 DIS_AIRT SFC 42 EN_IRT
Interrupciones Cíclicas
• El OB de interrupciones cíclicas (OB35) permite interrumpir el
programa a intervalos de tiempo fijos.
Una vez activado, el OB35 se ejecutará según un intervalo de tiempo
fijado al “Configurar el HW”.

OB35
OB35
OB1
se ejecuta ...interrumpe el OB1 y se
continuamente ejecuta el OB35 cada 250ms

OB35
OB35

Configuración de Interrupciones Cíclicas


Variables Locales de OB de Alarma Cíclica

Variable Tipo de datos Descripción


OB35_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma está activada
OB35_STRT_INF BYTE (B#16#31: Solicitud de arranque para OB 30)
:
B#16#36: Solicitud de arranque para OB 35
:
(B#16#39: Solicitud de arranque para OB 38)
OB35_PRIORITY BYTE Prioridad parametrizada; valor prefijado:
de 7 (OB 30) a 15 (OB 38)
OB35_OB_NUMBR BYTE Número de OB (30 hasta 38)
OB35_RESERVED_1 BYTE Reservado
OB35_RESERVED_2 BYTE Reservado
OB35_PHASE_OFFSET WORD Desfase en ms
OB35_RESERVED_3 INT Reservado
OB35_EXC_FREQ INT Cadencia temporal en ms
OB35_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB.

Ejecución por Tiempo – Alarmas Horarias

• Una alarma horaria es una interrupción que permite ejecutar un programa


en un tiempo concreto, una sola vez o periódicamente.
• En STEP 7 se dedican a interrupciones horarias del OB 10 al OB 17
• La CPU 315 dispone únicamente del OB 10 que tiene la prioridad 2
• Las interrupciones horarias se pueden parametrizan:
• en la configuración del hardware
• en fase de ejecución usando SFCs
• Se puede arrancar una interrupción horaria:
• una sola vez: el OB es llamado una sola vez en el momento especificado
• periódicamente: depende de la configuración (cada minuto, hora, día,...
Interrupciones Horarias (I)

• El OB Horario (OB10 en el S7-315) permite interrumpir el OB cíclico y ejecutar un


código en una fecha especificada o a intervalos especificados. Se puede programar este
OB para que se ejecute en los siguientes intervalos:
– Una vez: se ejecuta una vez, en el momento especificado.
– Cada minuto: Se ejecuta en intervalos de 1 minuto, empezando desde el momento
especificado
– Cada hora: Se ejecuta en intervalos de 1 hora, empezando desde el momento
especificado
– Cada día: Se ejecuta 1 vez al día, desde el momento especificado
– Cada semana: Se ejecuta 1 vez por semana, empezando desde el momento
especificado
– Cada mes: Se ejecuta 1 vez al mes, empezando desde el momento especificado
– Cada año: Se ejecuta 1 vez al año, empezando desde el momento especificado

Interrupciones Horarias (II)

• En el arranque en frío o en el arranque completo, el sistema operativo


borra todas las activaciones realizadas mediante SFCs.
• Las realizadas en la configuración del hardware son mantenidas
• Se puede consultar el estado de la alarma horaria con la SFC 31 y
posteriormente, activar o desactivar la interrupción
• Las interrupciones horarias son atendidas sólo en modo RUN
• Si el OB de una interrupción horaria es llamado pero no está programado:
• el S.O. primero llama la OB 85 (programa de ejecución por error)
• si OB 85 no está programado, la CPU se va a STOP
• La ejecución se puede anular, activar, ajustar y consultar con las SFCs:
• SFC 28 SET_TINT SFC 29 CAN_TINT
• SFC 30 ACT_TINT SFC 31 QRY_TINT
Configuración de Interrupciones Horarias

Variables Locales de OB de Alarma Horaria


Variable Tipo de datos Descripción
OB10_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma activada
OB10_STRT_INFO BYTE B#16#11: Solicitud de arranque para OB 10
(B#16#12: Solicitud de arranque para OB 11)
:
(B#16#18: Solicitud de arranque para OB 17)
OB10_PRIORITY BYTE Prioridad parametrizada; valor por defecto: 2
OB10_OB_NUMBR BYTE Número de OB (10 hasta 17)
OB10_RESERVED_1 BYTE Reservado
OB10_RESERVED_2 BYTE Reservado
OB10_PERIOD_EXE WORD El OB se ejecuta en el intervalo indicado:
W#16#0000: Una vez
W#16#0201: Cada minuto
W#16#0401: Cada hora
W#16#1001: Cada día
W#16#1201: Cada semana
W#16#1401: Cada mes
W#16#1801: Cada año
OB10_RESERVED_3 INT Reservado
OB10_RESERVED_4 INT Reservado
OB10_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
SFC´s para Programar OB´s de Alarmas Horarias (I)
• Funciones del Sistema integradas (SFCs) se pueden utilizar para controlar y supervisar las
interrupciones asociadas a alarmas horarias. Las SFCs relacionadas con alarmas horarias
son las siguientes.

SFC 28 SET_TINT: Ajustar hora de arranque de la alarma horaria


Parámetro Declaración Tipo de datos Area de memoria Descripción
OB_NR INPUT INT E, A, M, D, L, Número del OB que se activa en el
Const. instante SDT(fecha y hora de arranque)
SDT INPUT DT D, L Fecha y hora de arranque
PERIOD INPUT WORD E, A, M, D, L, Periodicidad desde el instante SDT:
Const. W#16#0000 = una vez
W#16#0201 = cada minuto
W#16#0401 = cada hora
W#16#1001 = diaria
W#16#1201 = semanal
W#16#1401 = mensual
W#16#1801 = anual
W#16#2001 = al final del mes
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.

SFC´s para Programar OB´s de Alarmas Horarias (II)

SFC 29 CAN_TINT: Anular alarma horaria activada


Parámetro Declaración Tipo de datos Area de memoria Descripción
OB_NR INPUT INT E, A, M, D, L, Número del OB cuya fecha
Const y hora de arranque se han de
borrar (OB10 a OB17).
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error

SFC 30 ACT_TINT: Activar un OB de alarma horaria


Parámetro Declaración Tipo de datos Area de memoria Descripción
OB_NR INPUT INT E, A, M, D, L, Número del OB que se desea
Const. activar (habilitar)
(OB10 a OB17)
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
SFC´s para Programar OB´s de Alarmas Horarias (III)

SFC 31 QRY_TINT: Consultar alarma horaria

Parámetro Declaración Tipo de datos Area de memoria Descripción


OB_NR INPUT INT E, A, M, D, L, Número del OB cuyo estado
Cons. se ha de consultar
(OB10 a OB17).
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
STATUS OUTPUT WORD E, A, M, D, L Estado de la alarma horaria

Programación de una Alarma Horaria

Tarjeta de Entradas Analógicas

La CPU tiene una


llamada a un OB que
verifica y controla la
temperatura para este
tanque una vez cada
minuto, comenzando a PIW288
una fecha y hora específica.
+14000 = Temperatura Superior
+13000 = Temperatura Inferior

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

Configuración de Interrupciones de Retardo

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

SFC´s para Programar OB´s de Alarmas Horarias de Retardo (I)

• Funciones del sistema integradas (SFCs) se pueden utilizar para arrancar y


supervisar las interrupciones asociadas a alarmas de retardo.
DO
AR
R ET
Las SFCs relacionadas con alarmas de retardo son las siguientes.

SFC 32 SRT_DINT: Arrancar alarma de retardo


Parámetro Declaración Tipo de datos Area de memoria Descripción
OB_NR INPUT INT E, A, M, D, L, Número del OB que se arrancará
Const. al transcurrir el tiempo de retardo
(OB 20 a OB 23).
DTIME INPUT TIME E, A, M, D, L, Valor del retardo (1 a 60000 ms)
Const.
SIGN INPUT WORD E, A, M, D, L, Identificador que, al llamar el OB
Const. de alarma de retardo, aparece en
la información de eventos de
arranque del OB.
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC´s para Programar OB´s de Alarmas Horarias de Retardo (II)

DO
SFC 33 CAN_DINT: Anular alarma de retardo R ET
AR

Parámetro Declaración Tipo de datos Area de memoria Descripción


OB_NR INPUT INT E, A, M, D, L, Número del OB que se ha de
Const. anular (OB20 a OB23).
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error

SFC 34 QRY_DINT: Consultar estado de alarma de retardo


Parámetro Declaración Tipo de datos Area de memoria Descripción
OB_NR INPUT INT E, A, M, D, L, Número del OB, cuyo STATUS
Const. se ha de consultar (OB 20 a 23)
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
STATUS OUTPUT WORD E, A, M, D, L Estado de la alarma de retardo

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

M0.1 SFC32 M2.0


EN ENO
(SRT_DINT)
20 OB_NR RET_VAL MW10
T#500ms DTIME
W#16#01 SIGN
Interrupciones por Error del Hardware

Módulo de Entradas Analógicas

X Si el módulo analógico ha sido configurado


para habilitar la rotura de hilo como
+27648 interrupción hardware, se utilizar cualquier
problema de hardware en el transmisor
para llamar a un OB de detección de errores
(por ejemplo, el OB82)
0

Interrupciones por Error en el Programa/Sistema

• El STEP7 proporciona otros OBs utilizados para interrumpir el programa además de


las interrupciones por errores en el hardware. Los errores que llaman a esos OBs se
consideran errores en tiempo de ejecución; se detectan mediante los diagnósticos
internos del PLC.

Errores en Tiempo de Ejecución


Errores Asíncronos Errores Síncronos

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.

• SFCs para manejo de Errores Síncronos


– SFC36 MSK_FLT Enmascarar errores de sincronización
– SFC37 DMSK_FLT Desenmascarar errores de sincronización
– SFC38 READ_ERR Leer el registro de estado de eventos

• SFCs para manejo Errores Síncronos y Asíncronos


– SFC39 DIS_IRT Inhabilitar Interrupción
– SFC40 EN_IRT Habilitar Interrupción
– SFC41 DIS_AIRT Inhabilitar Interrupciones de Alarma
– SFC42 EN_AIRT Habilitar Interrupciones de Alarma
Trabajar con analógicas

* Cómo funcionan las analógicas.

Las tarjetas analógicas de S7 convierten:


· Para la lectura de entradas analógicas, un valor analógico procedente de un sensor
o transductor en un valor digital de 16 bits que se almacena en la periferia del S7
(no confundir estos 16 bits con la resolución de la entrada analógica). Esta
resolución oscilará según los casos entre 11 bits mas signo y 8 bits.
· Para las salidas analógicas, un valor digital de 16 bits de la periferia de salidas en
una señal analógica mediante un conversor digital-analógico.

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.

La más utilizada en la industria es 0-10 V. El Simatic S7 300 posee el rango +/-10 V,


que es el adecuado para esta lectura. Como la sonda no va a dar tensión negativa, se va a
comportar de manera unipolar, por lo siempre vamos a tener un valor de 0 al valor máximo
que hayamos seleccionado de resolución.
El inconveniente de este tipo de lectura es que al ser una tensión, las distancias sin
atenuación de la señal debido a caídas de tensión en el cable son relativamente cortas,
por lo que la sonda debe estar cerca del cuadro eléctrico donde se encuentre el módulo
analógico.
Los límites de lectura son:

Lectura +/-10 V:

Estado de lectura Tensión en la entrada anal. Valor de la entrada anal.


Desbordamiento positivo >= 11,759 32.767
Rebase positivo De 11,7589 a 10,0004 De 32511 a 27649
Valor nominal De 10,0 a –10,0 De 27648 a –27648
Rebase negativo De -10,0004 a -11,759 De –27649 a –32512
Desbordamiento negativo <= -11,76 -32.768
* Medidas de intensidad.

Dentro de las medidas de intensidad se suelen gastar principalmente dos tipos: 0-


20 mA y 4-20 mA. Este último tipo es el más utilizado en la lectura analógica, ya que
permite grandes distancias al ser la lectura por corriente, y a la vez es fácil reconocer la
rotura del hilo, ya que por debajo de 4 mA es que no llega lectura del elemento.

Lectura 0 a 20 mA:

Estado de lectura Corriente (mA) Valor de la entrada anal.


Desbordamiento positivo >= 23,516 32.767
Rebase positivo De 23,515 a 20,0007 De 32511 a 27649
Valor nominal De 20 a 0 De 27648 a 0
Rebase negativo De –0,0007 a –3,5185 De -1 a –4864
Desbordamiento negativo <= -3,5193 -32.768

Lectura 4 a 20 mA:

Estado de lectura Corriente (mA) Valor de la entrada anal.


Desbordamiento positivo >= 22,815 32.767
Rebase positivo De 22,810 a 20,0005 De 32511 a 27649
Valor nominal De 20 a 4 De 27648 a 0
Rebase negativo De 3,9995 a 1,1852 De -1 a –4864
Desbordamiento negativo <= 1,1845 -32.768

* Medidas PT100.

Las sondas PT100 se utilizan para la medida de la temperatura en procesos que


oscilen entre 850ºC y –200ºC. Una PT100 es una termoresistencia que varía su
resistividad en función de la temperatura que exista en contacto con la misma. A través de
dos hilos (1 canal del módulo de entradas analógicas), se hace circular por la PT100 una
corriente constante. Otros dos hilos toman la medida de la resistencia en los extremos de
la sonda, con lo que se obtiene la variación de resistencia, y al ser conocida su linealidad
con respecto a la temperatura en los márgenes anteriormente citados, se obtiene ésta.

Lectura PT100:

Estado de lectura Temperatura Valor de la entrada anal.


Desbordamiento positivo >= 1000,1 32.767
Rebase positivo De 1000 a 850,1 De 1000 a 850,1
Valor nominal De 850 a –200 De 8500 a –2000
Rebase negativo De –200,1 a -243 De –2000 a –2430
Desbordamiento negativo <= -243,1 -32.768

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

R/8 R/4 R/2 R


Rf i

SALIDA
i
- Vs ANALOGICA

Red de resistencias +

Ve V Vs Rf
i= =− s A= =−
Re Rf Ve Re

Convertidor Digital-Analógico, D/A


Vs R
A= =− f
Ve Re
- Supongamos Rf = 20 K, y R = 150 K, sin tener en cuenta el cambio signo queda:

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

Convertidor Analógico-Digital, A/D – Convertidor por Aproximaciones Sucesivas

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

Control de Convertidores A/D (I)


Por sondeo

I0 M
U µP
L
T
I
P A/D Puerto
L
E
X
O OE
R
I7 START

3
ALE

- Hay que programar un tiempo de espera necesario para la conversión


Control de Convertidores A/D (II)
Por interrupción

I0 M
U µP
L
T
I
P A/D Puerto
L
E
X
O OE
R EOC
I7 INT
START
3
ALE

- No hay que programar tiempo de espera

Tarjetas de Entradas Analógicas – Diagrama de Bloques


• La conversión A/D se realiza mediante tarjetas de entradas analógicas
Tarjetas de Entradas Analógicas – Módulo SM 331

Tarjetas de Salidas Analógicas – Diagrama de Bloques


• La conversión D/A se realiza mediante tarjetas de salidas analógicas
Tarjetas de Salidas Analógicas – Módulo SM 332

Direccionamiento de Tarjetas Analógicas


• El identificador de direcciones es:
- PIW para las entradas analógicas - PQW para las salidas analógicas

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Ω

Representación Digital – Resolución


• La resolución máxima es de 15 bits
• La resolución es inferior, los dígitos insignificantes se rellenan con 0
• La resolución depende del tipo de tarjeta analógica y de su parametrización
• La misma tarjeta se puede parametrizar:
• para intensidad o tensión. Unipolar o bipolar
• el signo: “0” -->+, “1” --> -
• las direcciones utilizadas son: PIW 288 y PIW 290. PQW 304 y PQW 306

Resolución Valor analógico


Número del bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Peso del bit S 214 213 212 211 210 29 28 2 7 2 6 25 2 4 23 2 2 21 2 0
Cod. 14 bits (+S) 0 X X X X X X X X X X X X X X 0
Cod. 12 bits (+S) 0 X X X X X X X X X X X X 0 0 0
Cod. 9 bits (+S) 0 X X X X X X X X X 0 0 0 0 0 0
Representación Digital – Márgenes Bipolares

Representación Digital – Márgenes Unipolares


Representación de Valores de Medida de E/A
• Valores Analógicos en los valores de entrada de 0 a 10V y 1 a 5V

Representación de Valores de Medida de E/A


• Valores Analógicos en los valores de salida de 0 a 10V y 1 a 5V
Ejemplo
• Se trata de que se active la salida “Q 4.0” para valores de tensión , en la entrada
analógica “PIW 288” , entre 2 y 4 o entre 6 y 8 voltios
L PIW 288 // Leer valor E/A L PIW 288 // Leer valor E/A A(
T MW 10 ITD L MD 10 //Comparación con 2 V.
DTR L 2
A( L 2.764800e+004 >I
L MW 10 //Comparación con 2 V. /R )
L 5530 L 1.000000e+001 A(
>I *R L MD 10 //Comparación con 4 V.
) RND L 4
A( T MD 10 <I
L MW 10 //Comparación con 4 V. )
L 11060 O
<I A(
) L MD 10 //Comparación con 6 V.
O L 6
A( >I
L MW 10 //Comparación con 6 V. )
L 16589 A(
>I L MD 10 //Comparación con 8 V.
) L 8
A( <I
L MW 10 //Comparación con 8 V. )
L 22118 = Q 4.0
<I
)
= Q 4.0

Tiempo de Conversión y de Ciclo de E/A


Tiempo de Conversión de Entradas Analógicas
• El tiempo de conversión se compone de:
• tiempo de conversión básico
9 depende directamente del tipo de conversión (por integración, o valores
instantáneos).
9 en el caso de integración, el periodo de integración se considera directamente
en el tiempo de conversión
9 el periodo de integración tiene efecto directo sobre la resolución
9 el periodo de integración depende de la supresión de frecuencias perturbadoras.
9 los periodos de conversión básicos son 2.5, 16.6, 20 y 100 mseg.
• tiempos suplementarios
9 tiempo para la medida de resistencia
9 tiempo para la vigilancia de rotura de hilo

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.

Tiempos de Respuesta de S/A


Tiempo de Respuesta
• El tiempo de respuesta (t1 a t3) es el tiempo que transcurre entre la escritura de los valores
de salida en la memoria interna y el momento en que se alcanza el valor especificado en la
salida analógica física.
• En el caso más desfavorable, es la suma de los tiempos de ciclo y de establecimiento.
Parámetros de los Módulos Analógicos
• Los módulos analógicos se parametrizan off-line con el STEP 7
• Algunos parámetros pueden modificarse también en el programa de usuario por medio de
las SFC 55, SFC 56 y SFC 57.
• Hay que distinguir entre:
• parámetros estáticos. Se ajustan con el aparato de programación
• parámetros dinámicos. Se ajustan con el aparato de programación o SFC 55

Propiedades Parametrizables de Canales de Entrada


• habilitaciones de alarma (del proceso, de diagnóstico) (dinámico)
• alarmas de valor límite (límite superior, límite inferior) (dinámico)
• alarmas de diagnóstico (colectivo, detección rotura de hilo) (estático)
• medida (tipo, margen, supresión frecuencias perturbadoras) (dinámico)

Propiedades Parametrizables de Canales de Salida


• habilitaciones de alarma (de diagnóstico) (dinámico)
• alarma de diagnóstico (colectivo) (estático)
• valores de sustitución (comportamiento en STOP de la CPU) (dinámico)
• salida (tipo, margen de salida) (dinámico)

Configuración de las Tarjetas Analógicas


Diagnosis de los Módulos Analógicos
• La función de diagnóstico permite determinar si los valores analógicos se han tratado sin
errores, y en caso contrario, qué error ha aparecido.
• El diagnóstico se parametriza con el STEP 7
• La evaluación se realiza si está habilitada la función de diagnóstico
• Los mensajes de diagnóstico evaluados provocan las siguientes acciones:
• indicación luminosa en módulo analógico.
• transmisión de mensaje de diagnóstico a la CPU
• activación de alarma de diagnóstico (sólo si esta habilitada)

Mensajes de
Diagnóstico
para Entradas
Analógicas

Mensajes de
Diagnóstico
para Salidas
Analógicas

Alarmas de los Módulos Analógicos (I)

• Los módulos analógicos tienen la capacidad de emitir alarmas


• Se distinguen dos tipos de alarmas:
• alarma de diagnóstico
• alarma de proceso
• Las alarmas se parametrizan con el STEP7
• Por defecto están bloqueadas

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

Procesamiento de Valores Analógicos en S7

El bus P (bus periférico) permite acceder directamente a los valores analógicos


como entradas desde el campo o como salidas al campo.
Al bus periférico se puede acceder en formato de byte, palabra y doble palabra
Tratamiento de Señales Analógicas

Nivel alto
Sensor de
Nivel
PIW 288
LT
Nivel bajo

Conversión de Señales Analógicas de Entrada


Tarjeta de Entradas Analógicas

Cuando la tarjeta de entradas analógicas


recibe desde campo una señal de tensión o
corriente, la tarjeta convierte la señal a un
valor binario (A/D) al que puede acceder el
programa de CPU a través del bus P.

Valor después de la conversión A/D

1000 L 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0

PIW 288 = +10960

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.

Conversión de Señales Analógicas de Salida

Tarjeta de Salidas Analógicas


Cuando el programa de CPU envía un valor a
la tarjeta de salidas analógicas a través del
bus P, la tarjeta ejecuta la conversión D/A.
El resultado de la tarjeta es una variación en
voltaje o intensidad, que se usa para el control
de dispositivos externos de campo.

Válvula de posición variable


CPU -> Tarjeta Analógica
L +13824 Flujo de control
T PQW 304

Suponiendo tarjeta de salida analógica de 0 a +10 V


para el valor digital 13824, después de la conversión
D/A debe sacar 5 V.
Valores Analógicos para Observación de Alarmas
- Si sensor de nivel menos de 1 V. --> abrir válvula de llenado
- Si sensor de nivel más de 9 V. --> abrir válvula de drenaje

L PIW 288
L 2765 Q 4.0
<=I Válvula de llenado
= Q 4.0

Nivel alto: 9 voltios ó 24883


Sensor de
Nivel
PIW 288
LT
Nivel bajo:1 Voltio ò 2765

L PIW 288
L 24883
>=I Q 5.7
= Q 5.7 Válvula de drenaje

Uso del Offset con Señales de Entrada Analógicas


• Cuando las características del dispositivo de campo analógico tiene un 20%
offset o “puesta a cero”, se hace necesario un offset del valor analógico en la
CPU para compensar.

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.

Tarjeta de Salidas Analógicas

Transductor de corriente a presión

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

Ajuste de Valores Analógicos


• El ajuste de los valores analógicos nos permite trabajar y comparar en las mismas
unidades que la variable controlada, en vez de trabajar con los valores numéricos
dados por la conversión A/D. Mediante ecuaciones matemáticas, se puede usar
unidades de ingeniería tales como grados, metros, gramos, litros......

Rango Nominal de Temperatura Nivel


la Conversión Rango bipolar Rango unipolar
+27648 100 grados 500 litros

0 0 grados 0 litros

-27648 -100 grados


Ajuste de Valores Analógicos Unipolares
• Para calcular el valor ajustado de una señal unipolar, se usa la siguiente
ecuación:
Valor ajustado = (Medida de la entrada PV x PV medido en unidades de
ingeniería / rango de CPU) + PV offset

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

Función de Ajuste de Valores Analógicos Unipolares


FC 28
in PV INT 0 Palabra de la E/A medido
in PV_Superior REAL 0 Límite superior del rango en unid. ing.
in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.
out Valor_Graduado REAL 0 Resultado del valor graduado
temp PV_Real REAL 0 PV convertido a valor real
temp Rango_Ing REAL 0 PV_Superior - PV_Inferior

Segmento 1 L #PV //Carga el valor medido dela E/A


ITD //Convierte de entero a entero doble
DTR //Convierte de entero doble a real
T #PV_Real //Valor analógico de entrada en formato nº real

Segmento 2 L #PV_Superior //Rango en unidades de ingeniería


L #PV_Inferior
-R
T #Rango_Ing

Segmento 3 L #PV_Real //Entrada analógica en formato de nº real


L 2.764800e+04 //Cargar rango de CPU para la conversión (+27648)
/R //Divide
L #Rango_Ing //Cargar rango en unidades de ingeniería
*R //Multiplicar
L #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV
+R //Sumar
T #Valor_Graduado //Resultado final
Ajuste del Offset de Valores Analógicos Unipolares
Para calcular el valor ajustado del 20 % offset de una señal unipolar, use la
siguiente ecuación:
Valor ajustado con 20% offset = ((Medida de la entrada analógica PV - 20%
del rango de la CPU) x PV medido en / rango de CPU - 20%) + PV offset

Ejemplo: Ajuste:
PIW 288 MD20 = ((PIW 288 - 5530) x 200) /
22118

+27648 Si el recipiente está al 50%, la


200 L
entrada analógica de
PIW 288=+16589 ;
Rango de CPU MD20 igual a 100.
(unipolar) Rango deseado en
+5530 -> +27648 unidades de ingeniería
0 -> 200 L
+5530 0L

Función Ajuste del Offset de Val. Analóg. Unipolares


in PV INT 0 Palabra de la E/A medida
FC 29 in PV_Superior REAL 0 Límite superior del rango en unid. ing.
in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.
out Valor_Graduado_20 REAL 0 Valor graduado resultante del offset 20%
temp PV_Real REAL 0 PV convertido a valor real
temp PV_Real_20 REAL 0 PV_Real offset por 20%
temp Rango_Ing REAL 0 PV_Superior - PV_Inferior

L #PV //Carga del valor medido dela E/A


ITD //Convierte de entero a entero doble
DTR //Convierte de entero doble a real
T #PV_Real //Valor analógico de entrada en formato nº real
L #PV_Real //
L 553000e+03 //Cargar 20% del rango de conversión de la CPU (5530)
-R
T #PV_Real_20 //Almacenar el valor real del offset del PV
L #PV_Superior //Rango en unidades de ingeniería
L #PV_Inferior
-R
T #Rango_Ing
L #PV_Real_20 //Cargar valor real PV con offset 20% del rango de CPU
L 2.211800e+04 //Cargar rango de CPU menos 20%(27648-5530)
/R //Divide
L #Rango_Ing //Cargar rango en unidades de ingeniería
*R //Multiplicar
L #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV
+R //Sumar
T #Valor_Graduado //Resultado final
Ajuste de Valores Analógicos Bipolares
• Para calcular el valor ajustado de una señal bipolar, se usa la siguiente ecuación:
Valor bipolar ajustado = (Medida de la entrada PV x PV medido / rango de CPU x2) +
Medio rango PV

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

Función de Ajuste de Valores Analógicos Bipolares


FC 34 in PV INT 0 Palabra de la E/A medido
in PV_Superior REAL 0 Límite superior del rango en unid. ing.
in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.
out Valor_Graduado_Bi REAL 0 Resultado del valor graduado
temp PV_Real REAL 0 PV convertido a valor real
temp PV_Mid REAL 0 (PV Superior-PV Inferior) / 2 +PV Inferior
temp Rango_Ing_Bi REAL 0 PV_Superior - PV_Inferior
L #PV //Carga del valor medido dela E/A
ITD //Convierte de entero a entero doble
DTR //Convierte de entero doble a real
T #PV_Real //Valor analógico de entrada en formato nº real
L #PV_Superior //Rango en unidades de ingeniería
L #PV_Inferior
-R
T #Rango_Ing_Bi //Variable PV medio rango
L #Rango_Ing_Bi //
L 2.00000e+00 //
/R //
L #PV_Inferior
+R //
T #PV_Mid //Almacena la variable PV medio rango
L #PV_Real //Cargar valor real PV
L #Rango_Ing_Bi //Cargar rango en unidades de ingeniería bipolares
*R //Multiplicar
L 5529600e+4 //Cargar el rango de CPU bipolar (27648 x 2)
/R //
L #PV_Mid //Cargar la variable PV rango medio
+R //Sumar
T #Valor_Graduado_Bi //Resultado final
Llamada a Módulos y Ajuste de Valores
• Con el uso de un módulo de ajuste, tal como un FC, el OB1 puede llamar el
módulo y pasar los parámetros para resolver el ajuste del valor. En este ejemplo, un
sensor de temperatura mide un rango de 0 a 100 grados (conectado a la PIW 288).

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

Lectura y Normalización de un Valor Analógico


FC 105 SCALE: Escalar valores
FC para Desescalar Valores para S/A
FC 106 UNSCALE: Desescalar valores

También podría gustarte