533
Automatización Industrial Principios de Programación en STEP7 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 Índice

Tia portal MANUAL

Embed Size (px)

Citation preview

Automatización Industrial

Principios de Programación en STEP7

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

Índice

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

Programas en la CPU

Parte Título Contenidos

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

Parte 2 Especificaciones Prestaciones eléctricas, mecánicas y funcionalesy ensayos de los Información a suministrar por el fabricanteequipos Ensayos y verificaciones

Parte 3 Lenguajes de Estructura del software de los PLC/APIprogramación Lenguajes de programación

Elementos del lenguaje

Parte 4 Guía para usuarios Especificaciones y análisis del sistemaAplicación y selección del PLC/APISeguridad y protección, instalación y mantenimiento

Parte 5 Comunicaciones Modelos, bloques de comunicación, mapeado enprotocolos ISO

La Norma IEC 1131 / EN-UNE 61131

Lenguaje IEC 1131-3 STEP 7Diagrama de funciones FBD FBD/FUP

Function Block Diagram Function Block Diagram

Diagrama de contactos LD LAD/KOPLadder Diagram Ladder Logic

Lista de instrucciones IL STL/AWLInstruction List Statement List

Texto estructurado ST SCLStructured Text Structured Control Language

Gráfico secuencial SFC GRAPH7Sequential Function Chart

Diagrama de bloques CFCContinuous Function Chart

Diagrama de gráfico HIGRAPH7de estados

Lenguajes de IEC 1131 - 3 / STEP7

• El entorno de programación permite desarrollar proyectos de controly 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

Funcionalidad del Software

Programas 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

Bloque en el Programa de Usuario

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

•Técnica modular•Segmentos•Comentarios

Representación

• FBD / FUP• LAD / KOP• STL / AWL

Edición de un Programa

Instrucción

Operando

Instrucción

unidad más pequeña autónoma del programa y constituye una orden de trabajo para el procesador

OperaciónOperando

002: A I 1.0ParámetroIdentificador del operando

Dirección relativa de la instrucción en elmódulo respectivo

Parte operacional

Identificación Parámetro

Instrucción

Marcas M Para almacenar resultados binarios intermedios

Datos D Para almacenar resultados digitales intermedios

OPERANDOS NEMONICO FUNCION

Entradas I Imagen del proceso de entradas (PII)

Salidas Q Imagen del proceso de salidas (PIQ)

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 programaSFB, SFC

Operandos

H1

S2

S1

A I 0.0AN I 0.1= Q 4.5

Q 4.5I 0.1

I 0.0Q 4.5I 0.1I 0.0

EsquemaEléctrico

STL/AWL FBD/FUP LAD/KOP

&

=

Ejemplo de Programa

• STEP 7 provee tres posibilidades para organizar un programa. Programación

LinealProgramación

DivididaProgramaciónEstructurada

Programa Lineal:Todas la instruccionesestán contenidas en unmódulo (normalmenteen el módulo deorganización, OB1)

Programa dividido en áreas:Las instrucciones para funcionesindividuales están contenidas enmódulos individuales. El OB1llama a los módulos individualessucesivamente.

Programa Estructurado:Las funciones reutilizables soncargadas en módulos individuales.El OB1 (u otros módulos) llaman a estos módulos y les pasan datosrelevantes.

OB1

Arranque

FB1 FC1

FB2FC2

FC3

OB1

Arranque

OB1

Arranque

Receta A

Receta B

Mezclador

Descarga

Estructuración de los Programas

1ª instrucción

2ª instrucción

última instrucción

OB1

......

.

Estructura de Programa. Programación Lineal

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

Segmento 1: motor marcha/paro

Segmento 2: Seguridad y señales de aviso

OB1: ejemplo de un simplemódulo lineal en AWL

Segmento 1: motor on/off

Segmento 2: Seguridad y señales de aviso

I 0.0

Q 4.0

Q 4.0

&I 0.2

I 0.3

>=1

=

&

I 0.1

I 0.4Q 4.1

=

A(O I 0.0O Q 4.0)AN I 0.1= Q 4.0

A I 0.2AN I 0.3AN I 0.4= Q 4.1

Programación Lineal

Programación Lineal. Ejemplo

(CALL)

(CALL)

(CALL)

(CALL)

Ingrediente_A

Ingrediente_B

Mezclador

Descarga

OB1FC

FC

FC

FC

>=1

=&

>=1=

&

>=1

=&

>=1=

Programación Dividida

Programa principal Módulo subrutina

Procesamientodel programa

Procesamientodel programaInstrucción que llaman

otros módulos

Fin de módulo

OB FC

Ejecución de un Programa Dividido

Programa Dividido. Control de nivel

Sis

tem

a O

pera

tivo

OB1 FC

FB FC

FB

SFC

SFB

OtrosOBs

Programación Estructurada I

Motor

Descarga

OB1

>=1

=&

>=1

=&

=&

=

Programación Estructurada II

Procesarmódulo 7

OB1 Módulo 7

Lamar almódulo 32.....

Módulo 32

Llamar almódulo X

Módulo R

Retornar

Retornar Retornar

...

Nivel1 Nivel2 Nivel3 Niveles 4..7 Nivel 8

Retornar

Módulo 10

Retornar

Procesarmódulo 10

Estructura del Programa

Sist

ema

oper

ativ

o

Iniciodel

cicloOB 1 FB 10

FB 20

FC 50

DB inst. 10

DB inst. 2

Tren

CALL FB 10

CALL FB 20

CINTA A

CALL FC 50

CINTA B

CALL FC 50

Acciona-miento

División Tecnológica de un Programa

FB

FB

FB

FC

SFC

SFB

Módulo dedatos deinstancia

Leyenda:

OB

Módulo deOrganización

Ciclo

Tiempo

Proceso

Error

Modos de operación del sistemaBloques CPU 315 CPU 315-2DP Tamaño

Mód. de organización (OB) 13 14 8 Kby

Módulo de función (FB) 128 128 (0-127) 8 Kby

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

Módulo de datos (DB) 127 127(1-127) 8 Kby

Función del sistema (SFC) 48 53

Mód. func. sistema (SFB) 7 7

Tipos de Módulos de Programa

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 usuariofunció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 de Usuario

Tipo de Módulo Características

Función del - Integrados en el sistema operativo de la CPUSistema - Un usuario puede llamar esta función(SFC) (sin memoria).

Módulos deFunciones - 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 del Sistema

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 (I)

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

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

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

Sistema operativo

Conectar

ProgramaprincipalCiclo

Programa de usuario

Ejecución Cíclica I

Sistema operativo

Conectar

ProgramaprincipalCiclo

Programa de usuario

Programa de usuario

Alarma

Error

Interrup-ción

Interrup-ción

Programa de alarma

Tratamiento de errores

Ejecución Cíclica II

Sist

ema

oper

ativ

o

Iniciodel

cicloOB 1 FB 1 FC 1

FB 2 FB 1 SFC 1

FC 1 DB 1

Profundidad de anidamiento

DB inst. 1

DB inst. 2 DB inst. 1

Secuencia y Profundidad de Anidamiento

Llamada de un módulo Módulo llamado

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

Ejecucióndel programa

Ejecucióndel programaInstrucción que llama a

otro módulo

Fin de módulo

Llamadas a los Módulos

El sistema operativo inicia el tiempo de vigilancia del ciclo

La CPU escribe los valores de la PIQen los módulos de salida

La CPU lee el estado de las entradas en losmó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..)

Fases de la Ejecución Cíclica

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

• La figura muestra la función del tiempo de vigilancia del ciclo en laejecución del programa en las CPUs

Tiempo de Ciclo II

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

Funciones – FC´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, sememorizan 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 laejecució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

Módulo de Función – FB´s

• 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 ejecutacon diferentes valores para los parámetros con cada DB de instancia

Arranque: INT INRevoluciones: INT INHistorial: DT IN_OUTTiempo efec.: TIME IN_OUT

FB 20: MotorParámetros formales

Entero (16 bits): Arranque

Entero (16 bits): Revoluciones

Fecha y hora (48 bits):Puntero a dirección del historialTiempo (32 bits): Tiempo ejec.

DB 202: Motor_2Parámetros actuales (reales)

FBs y DBs de Instancia

• 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 concluirla ejecución del módulo de programa que lo utiliza

FC 10 DB global

(DB 20)FC 11

FC 12 DB de instancia(DB 112)

Acceso desde todos los bloques

Acceso sólo desde FB 12

Módulo de Datos Globales – DB´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

Módulos del Sistema – SFB´s y SFC´s

Byte de datos 0

Byte de datos 8191

8 Bits

El tamaño máximo de un móduloen la CPU 314 es 8 Kbyte. La cantidad máxima de memoriadisponible en un módulo de datosdepende de la CPU.

Tipos de Módulos de Datos

EN ENOFB7DB45

Llamada al FB7 (a través delmódulo de datos de instancia DB45) y asignación de parámetros.

CALL FB7, DB45Start: = I 1.0Stop: = I 1.1Longitud := MW20Ejecutar: = M2.1

FB parámetro formal

Dirección actual de los datos(parámetro vigente)

Llamada al FB7 (a través delmódulo de datos de instancia DB45) y asignación de parámetros.

Dirección actualde los datos FB parámetro formal

I 1.0I 1.1MW20

StartStopLongitud

ejecutar M2.1

STL/AWL

FBD/FUP

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

Cabecera del Módulo(36 Bytes)

Cuerpo del módulo :

Sección de declaracióny

Sección de programao

Datos

InterfaseDescripción breve

Estructura del Módulo

a b

Botón de la seleccióndel tanque

0 0 0 0

Ingrediente AIngrediente B

LTLT

LT

LT

LT

Ejemplo de Programación Estructurada

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

Iniciando el tiempo de control de ciclo

Lectura del estado de las señales de los módulosguardando los datos en la tabla de la imagen de proceso de entradas (PII)

Ejecución del programa en el OB1 (procesamientocí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 desalida (PIQ) en los módulos de salida.

Módulo de entrada

CPU

cic

lo d

e sc

an

Módulo de salida

A I 0.1A I 1.1= Q 4.0

.

.

.

.

Módulo OB 1

Procesamiento Cíclico del Programa

I2.0

Q4.3

I2.7 I0.5 I03 Q4.4

1

PII PIQByte 0Byte 1Byte 2....

Byte 0Byte 1Byte 2....

A(O I 2.0O Q 4.3)AN I 2.7AN I 0.5AN I 0.3= Q 4.4

Programade usuario

1

Imagen del Proceso

Tipo de Alarma OBs de alarma Aplicación

Alarma horaria OB 10 a OB 17 Calcula el flujo de un proceso demezcla 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 parael 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

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

Módulos de Organización de Alarmas

CON

Alarma

Alarma

Alarma

del procesoAlarma de Proceso•gobierno por interrupciones

Procesamiento Cíclico•procesamiento normal. OB1

Arranque•comprobación e inicialización de valores•condiciones de arranque

Alarma cíclica•periodos de tiempo predeterminados•importante en lazos regulación

Tratamiento de Error•en función de fallos•sólo en algunas gamas

cíclica

Alarmahoraria Alarma horariaAlarmade retardo Alarma de retardo

por errores

Ejecución de Programas – Tipos de Procesamiento

Definición: El tiempo de ciclo es el tiempo que transcurre durante unciclo 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)

Programa de usuarioA I 1.0= Q 4.0

Tiempo de ciclo

PII S.O. PIQ PII

S.O.Programade usuario

Interrupcionespor alarmas

Tiempo de Ciclo

El tiempo de respuesta es el tiempo que transcurre entre el reconocimiento de una señalde 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

Ejecución del programaA I 1.0= Q 4.0

Tiempo de reacciónRetardo delos módulosde entrada

10

10

I 1.0

Q 4.0tiempo

PII S.O. PIQ PII

Tiempo de Respuesta

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

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

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

• 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ódulos de Org. de Tarea no Prioritaria

• Los OBs de alarmas cíclicas permiten:• ejecutar partes del programa en periodos de tiempo determinados

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

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

CPU programable de un S7-400Programas S7/M7 (asignados a HW)Programas de usuario (off-line)

Estación HW de un S7 - 400

M7-FM programable

Fuentes AWL

Estructura de un Proyecto S7

Módulos de STEP7

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

Seleccionar un Módulo para la Edición

Tabla deDeclaraciónde Variables

Sección deCódigo

Partes de un Módulo

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: condicionesacciones (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 PUERTASAND, 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í:

O

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

Automatización Industrial

Operaciones con Bits de Estado

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

Índice

Estructura de la Palabra de Estado

Bits de Estado – Palabra de Estado

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

Definición

Descripción de los Bits de Estado (I)

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 /FC – Firts Check – Bit de Primera Consulta

Este bit almacena el resultado de una operación lógica binaria o de una comparación.

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

Descripción de los Bits de Estado (II)

El bit de estado almacena el valor del bit direccionado.

Bit STA – Status – Bit de Estado

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

Bit OR – Bit de Estado OR

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

Bit OV – Overflow – Bit de Desbordamiento

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

Bit OS – Stored Overflow – Bit de Desbordamiento Memorizado

Descripción de los Bits de Estado (III)

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

Bits CC1 y CC0 – Condition Code Bits – Bits Condición

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.

Bit BR – Binary Result – Bit de Resultado Binario

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

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

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

CC1 y CC0 tras operaciones aritméticas, sin 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• Consulta el valor de señal del bit BR (resultado binario)

BR&

≥1BR S

I 0.0

I 0.1 Q 4.0

Bit de Anomalía - Operación no Válida• 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).

UO

Bit de Anomalía - Desbordamiento• 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.

OV

Bit de Anomalía - Desbordamiento Memorizado• 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.

OS

Evaluar los Bits de la Palabra de Estado (II)

Bits de Resultado• Determinar la relación entre el resultado de una

operación aritmética y 0

SUB_IENIN1 OUTIN2 ENO

&>=0 S

IW0IW2 Q 4.1

I 0.0MW10

Operaciones de Consulta de Bits de Estado en STL

Evaluar los Bits de la Palabra de Estado (III)

Resultado Binario [BR = 1]BR

Overflow Memorizado [OS = 1]OS

Overflow [OV = 1]OV

Resultado inválido (fuera de orden) [(CC0 = 1) && (CC1 = 1)]UO

Resultado igual a 0 [(CC0 = 0) && (CC1 = 0)]==0

Resultado distinto de 0 [(CC0=0) && (CC1=1) v (CC0=1) && (CC1=0)]<>0

Resultado menor o igual que 0 [(CC1 = 0)]<=0

Resultado menor que 0 [(CC0 = 1) && (CC1 = 0)]<0

Resultado mayor o igual que 0 [(CC0 = 0)]>=0

Resultado mayor que 0 [(CC0 = 0) && (CC1 = 1)]>0

Chequea que no cumple condición y operación lógica XOR-XN

Chequea que no cumple condición y operación lógica OR-ON

Chequea que no cumple condición y operación lógica AND-AN

Chequea que cumple condición y operación lógica XOR-X

Chequea que cumple condición y operación lógica OR-O

Chequea que cumple condición y operación lógica AND -A

Operaciones de Bits de Estado en STL

Evaluar los Bits de la Palabra de Estado (IV)

JOS1-----

JO-1----

JUO--11--

JN, JM, JMZ--01--

JN, JP, JPZ--10--

JZ, JMZ, JPZ--00--

JNBI----0-

JBI----1-

JCN, JNB-----0

JC, JCB-----1

Funciones de Salto EjecutablesOSOVCC1CC0BRRLO

Operaciones sobre el RLO en STL

Operaciones sobre el RLO

Niega el contenido del RLONOT

Guarda el contenido del RLO en BRSAVE

Establece el RLO a “0”CLR

Establece el RLO a “1”SET

Operaciones de Carga y Transferencia de la Palabra de Estado

Carga y Transferencia de la Palabra de Estado

Transfiere el valor del ACU1 a la palabra de estadoT STW

Carga la palabra de estado en el ACU1L STW

Dependiendo de la CPU, los bits /FC, STA y OR no se copian en el ACU1, se ponen a “0”

Ejemplo 1:

Ejemplos

SET ;S M 8.0; // Pone a 1 marcaR M 8.1; // Pone a 0 marcaCLR ;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

www.campusabierto.es ©Adolfo Molina

Tipo y descripción Tamaño

en bits Opciones de formato Márgenes y representación

numérica Ejemplo

BOOL (bit)

1 Variable booleana Todo / Nada

TRUE/FALSE 1 / TRUE 0 / FALSE

Formato de variables numéricas “matematizables” (con operaciones de cálculo)

INT (número entero) Identificador: I

16 W

Número entero con signo -32768 hasta 32767

150

DINT (entero de 32 bits) Identificador: D

32 DW

Número entero con signo L#-2147483648 hasta L#2147483647

L#85

REAL (número decimal en coma flotante) Identificador: R

32 DW

IEEE Número en coma flotante

Límite superior: 3.402823e+38 Límite inferior: 1.175 495e-38

1.234567e+13 6,0 0,0

Formatos de tiempo

S5TIME (tiempo SIMATIC)

16 W

Tiempo S7 en pasos de 10 ms (valor estándar)

S5T#0H_0M_0S_10MS hasta S5T#2H_46M_30S_0MS

S5T#0H_1M_0S_0MS S5TIME#0H_1H_1M_0S_0MS

TIME (tiempo IEC)

32 DW

Tiempo IEC en intervalos de 1 ms, número entero con signo Equivale al formato DINT (D) con unidad de 1ms

-T#24D_20H_31M_23S_648MS hasta T#24D_20H_31M_23S_647MS

T#0D_1H_1M_0S_0MS TIME#0D_1H_1M_0S_0MS

DATE (fecha IEC)

16 W

Fecha IEC en pasos de 1 día D#1990-1-1 hasta D#2168-12-31

D#1994-3-15 DATE#1994-3-15

TIME_OF_DAY (hora)

32 DW

Hora en intervalos de 1 ms TOD#0:0:0.0 hasta TOD#23:59:59.999

TOD#1:10:3.3 TIME_OF_DAY#1:10:3.3

Tipos de datos en S7

www.campusabierto.es ©Adolfo Molina

Tipo y descripción Tamaño en bits

Opciones de formato Márgenes y representación numérica

Ejemplo

BYTE (byte)

8 B

Número hexadecimal

B#16#0 hasta B#16#FF

B#16#10

WORD (palabra)

16 W

Número binario Número hexadecimal BCD Formato carga contadores Z Número decimal sin signo Dos Byte

2#0 hasta 2#1111_1111_1111_1111 W#16#0 hasta W#16#FFFF C#0 hasta C#999 B#(0,0) hasta B#(255,255)

2#0001_0000_0000_0000 W#16#1000 C#12 B#(136,20)

DWORD (palabra doble)

32 DW

Número binario Número hexadecimal Número decimal sin signo Cuatro Byte

2#0 hasta 2#1111_1111_1111_1111_ 1111_1111_1111_1111

DW#16#0000_0000 hasta DW#16#FFFF_FFFF B#(0,0,0,0) hasta B#(255,255,255,255)

2#1000_0001_0001_1000_ 1011_1011_0111_1111 DW#16#00A2_1234 B#(1, 14, 100, 120)

Variable ASCII (carácter)

8 B

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

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

Introducción a los Tipos de Datos en STEP 7

Tipos de datos elementales (hasta 32 bits)

Tipos de datos complejos (mayores de 32 bits)

Tipos de datos definidos por el usuario (mayores de 32 bits)

• Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)

• Tipos de Datos Matemáticos (INT, DINT, REAL)

• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)

• Tiempo (DATE_AND_TIME)

• Array (ARRAY)

• Estructura (STRUCT)

• Cadena de Caracteres (STRING)

Tipo de Datos UDT (User Defined Type)

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

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

TIPOS DE DATOS DE BIT – TAMAÑO

PLC’s Página 4 Curso 2009/10 Curso 2009/10

E Tam BBB.b

Zona de memoria:

•  E -> Entradas •  A -> Salidas •  T -> Temporizadores •  Z -> Contadores •  M -> Marcas •  DB -> Módulos de datos •  P -> Acceso directo (PA, PE)

Tamaño del Dato que vamos a usar (bit por omisión): B, W, D

Número de byte y bit (0-7), en su caso

DIRECCIONAMIENTO 1/3

PLC’s Página 5 Curso 2009/10 Curso 2009/10

DIRECCIONAMIENTO 2/3

124

125

125

125

124

125

PLC’s Página 6 Curso 2009/10 Curso 2009/10

•  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

DIRECCIONAMIENTO 3/3

PLC’s Página 7 Curso 2009/10 Curso 2009/10

•  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) –  Carácter –  Tiempo: cantidad de tiempo, hora, S5T, fecha –  Puntero

SISTEMAS NUMÉRICOS

Ver ayuda Admin. Simatic Tipos de datos simples

PLC’s Página 8 Curso 2009/10 Curso 2009/10

Tipos de Datos Elementales en STEP 7

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

Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo

PLC’s Página 9 Curso 2009/10 Curso 2009/10

Números en COMA FLOTANTE (1/2)

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

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

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

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

PLC’s Página 10 Curso 2009/10 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 11 Curso 2009/10 Curso 2009/10

•  Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas.

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

ACUMULADORES (1/2)

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

PLC’s Página 12 Curso 2009/10 Curso 2009/10

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.

ACUMULADORES (2/2)

PLC’s Página 13 Curso 2009/10 Curso 2009/10

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.

CARGA Y TRANSFERENCIA 1/7

PLC’s Página 14 Curso 2009/10 Curso 2009/10

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

CARGA Y TRANSFERENCIA 2/7

PLC’s Página 15 Curso 2009/10 Curso 2009/10

•  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

CARGA Y TRANSFERENCIA 3/7

PLC’s Página 16 Curso 2009/10 Curso 2009/10

•  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 L ED 128 LAR2 TAR

Tendrá como resultado:

ED124 ----> AR2

ED128 ----> AR1

CARGA Y TRANSFERENCIA 4/7

PLC’s Página 17 Curso 2009/10 Curso 2009/10

•  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

CARGA Y TRANSFERENCIA 5/7

PLC’s Página 18 Curso 2009/10 Curso 2009/10

L +5 --> Carga entero de 16 bits

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

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

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

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

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

CARGA Y TRANSFERENCIA 6/7

NOTA:

Ver ayuda Adm. Simatic

“Tipos de datos simples”

PLC’s Página 19 Curso 2009/10 Curso 2009/10

CARGA Y TRANSFERENCIA 7/7

PLC’s Página 20 Curso 2009/10 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

Automatización Industrial

Módulos de Datosy

Tipos de datos

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

Índice

Módulo de datos a instancia

Leyenda:

FB

FB

FB

FC

SFC

SFBOB

Módulo deorganización

OB = Módulo de OrganizaciónFB = Módulo de FunciónFC = FunciónSFB = Módulo de Función de SistemaSFC = Función de Sistema SDB = Módulo de Datos de SistemaDB = Módulo de Datos

DB

DB DB

DB

Introducción

Byte datos 0

Byte datos 8191

8 bits

El máximo tamaño del módulopara la CPU 314 es 8 kBytes.La cantidad de memoria disponible para los módulos de datos depende de la CPU.

Global (normalmente usados)

Instancia (local)

Tipos de Módulos de Datos

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

STEP 7Dirección

de memorialocal Nombre

Valorinicial

Datablock c:\class\machine1\db10

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

Tipo de datos Comentario

:OPN DB 12:::L DB:T DB::CALL FC 16:::L DB:T DB:::BE

::::L DB:T DB::::OPN DB 13::L DB:T DB:::BE

FC 15 FC 16 DB 12

DB 13

Del OB 1

Al OB 1

Llamada a Módulos de Datos

OPN DB 19OPN valores

L DBB 1 Cargar el byte de datos 1.L DBW 2 Cargar la palabra de datos 2 (byte 2/3).L 5 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 4del DB19 (incluye OPN DB 19).

L valores.N1 Acceso simbólico a la variableN1. “valores” es el nombre simbólicodel DB que contiene dicha variable

Abrir módulo de datos Carga y Transferencia en Módulos de Datos

Acceso a Elementos de Datos

• 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 bitL DB5.DBB 7, para direccionar un byteL DB5.DBW 7, para direccionar una palabraL DB5.DBD 7, para direccionar una doble palabra

Direccionamiento

Notas de Acceso a Elementos de Datos

• Las variables de tipos de datos básicos tiene una longitud máxima dedoble 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, unapalabra o una doble palabra

Declaración:

Varname : datatype := pre-assignment

Varname es el nombre de la variabledatatype es un tipo de dato elementalpre-assignment es el valor asignado

• Una variable pude ser declarada global en la tabla de simbólicos olocamente en la sección de declaraciones

Tipos de Datos Elementales

Tipo de Datos Tamaño(Bit)

Descripción

BYTE 8 Byte. Rango: 0 a 255WORD 16 Palabra. Rango: 0 a 65.535DWORD 32 Doble Palabra. Rango: 0 a 2

32-1

CHAR 8 Carácter. Cada carácter imprimible (Código ASCII>31)

STRING 8 X 254 Cadena de caracteres desde 2 a 254INT 16 Entero. Rango: -32.768 a 32.767DINT 32 Doble entero. Rango: -231 a 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

BOOL 1 Bit. Rango: true o false

Tabla de Tipos de Datos Elementales

Longitud = 1 BIT BYTE Longitud = 8 BITS

PALABRA Longitud = 16 BITS

DOBLE PALABRA Longitud = 32 BITS

01234567

01234567

01234567

01234567

01234567 01234567 01234567

BIT

• 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, Byte, Palabra y Doble Palabra

Número BCD, 3 décadas

8111215 0347

010110210Signo

Byte m Byte m+1

8111215 0347

410510610Signo

Byte m Byte m+1

8111215 0347

010110210

Byte m+2 Byte m+3

310

Número BCD, 7 décadas

• Se pueden introducir datos en BCD con tipo de dato 16# (hexa) y usar sólo dígitosde 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)

Representación en BCD

• 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

01234567

Código ASCII

Byte m

Tipo de Dato CHAR

• Una variable de tipo de dato INT representa un entero que esalmacenado 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)

INT:

S 021222.....214 .....15 14 .......0

Representación de Números (I)

• Una variable de tipo de dato DINT representa un entero que esalmacenado 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)

DINT:

S 021222.....230 .....31 30 .......0.......16 15.....

162.... ....215

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 (II)

• Una variable de tipo de dato REAL representa una fracción que esalmacenado 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

REAL:

S 12− 232−...27 .....31 30.... .......0.2322.....

02.... ....2 2−

Exponente Mantisa

Representación de Números (III)

REAL:

Representación de Números (IV)

• 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

S5TIME:

01015 14 .......0

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

010110210Valor de tiempoBase de tiempo

Representación de Tiempos (I)

• 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 desdeel 01.01.1990.

• La representación contiene el año, el mes y el año, cada unoseparado por (-)

DATE:

DATE#1990-01-01 (=0000hex)D#2168-12-31 (=FF62hex)

021222.....214 .....15 14 .......0152

Ejemplos:

Representación de Tiempos (II)

• 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

TIME:

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

Ejemplos:

S 021222.....230 .....31 30 .......0.......16 15.....

162.... ....215

Representación de Tiempos (III)

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

TIME_OF_DAY:

TIME_OF_DAY#00:00:00 (=0000_0000hex)TOD#23:59:59.999 (=0526_5BFFhex)

Ejemplos:

021222.....230 .....31 30 .......0.......16 15.....

162.... ....215312

Representación de Tiempos (IV)

Ejemplo:

Representación de Tiempos (V)

• El tipo de dato DATE_AND_TIME representa un tiempo consistenteen fecha y momento del día

• Se puede utilizar la abreviación DT en lugar de DATE_AND_TIMEcomo 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

DATE_AND_TIME:

DT#1995-02-02-08:30:01.999

Tipos de Datos Estructurados y Arrays

COMPONENTESGEOMÉTRICOS

TIPOGEO_COMPONENTES

STRUCTCIRCULO: ENTEROTRIANGULO: PALABRA

CUADRADO: REALRECTANGULO: ENTERO

END_STRUCTEND_TYPE

FUNCTION_BLOCK: EJEMPLO

VARGEOMETRY:ARRAY [1...3 ] of GEO_COMPONENTSEND_VAR

Estructura Array

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

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

UDTSon 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

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 Description

Size in Bits

Format Options

Range and Number Notation (lowest to highest values)

Example in STL

BOOL (Bit)

1 Boolean text

TRUE/FALSE TRUE

BYTE (Byte)

8 Hexadecimal number

B#16#0 to B#16#FF L B#16#10 L byte#16#10

WORD (Word)

16 Binary number

2#0 to 2#1111_1111_1111_1111

L 2#0001_0000_0000_0000

Hexadecimal number

W#16#0 to W#16#FFFF L W#16#1000 L word#16#1000

BCD C#0 to C#999 L C#998

Decimal number unsigned

B#(0,0) to B#(255,255) L B#(10,20) L byte#(10,20)

DWORD (Double word)

32 Binary number

2#0 to 2#1111_1111_1111_1111_ 1111_1111_1111_1111

L 2#1000_0001_0001_1000_ 1011_1011_0111_1111

Hexadecimal number

W#16#0000_0000 to W#16#FFFF_FFFF

L DW#16#00A2_1234 L dword#16#00A2_1234

Decimal number unsigned

B#(0,0,0,0) to B#(255,255,255,255)

L B#(1, 14, 100, 120) L byte#(1,14,100,120)

INT (Integer)

16 Decimal number signed

-32768 to 32767 L 101

DINT (Double integer)

32 Decimal number signed

L#-2147483648 to L#2147483647

L L#101

REAL (Floating-point number)

32 IEEE Floating-point number

Upper limit +/-3.402823e+38 Lower limit +/-1.175495e-38

L 1.234567e+13

S5TIME (SIMATIC time)

16 S7 time in steps of 10ms (default)

S5T#0H_0M_0S_10MS to S5T#2H_46M_30S_0MS and S5T#0H_0M_0S_0MS

L S5T#0H_1M_0S_0MS L S5TIME#0H_1H_1M_0S_0MS

TIME (IEC time)

32 IEC time in steps of 1 ms, integer signed

T#24D_20H_31M_23S_648MS to T#24D_20H_31M_23S_647MS

L T#0D_1H_1M_0S_0MS L TIME#0D_1H_1M_0S_0MS

DATE (IEC date)

16 IEC date in steps of 1 day

D#1990-1-1 to D#2168-12-31

L D#1996-3-15 L DATE#1996-3-15

TIME _OF_DAY (Time)

32 Time in steps of 1 ms

TOD#0:0:0.0 to TOD#23:59:59.999

L TOD#1:10:3.3 L TIME_OF_DAY#1:10:3.3

CHAR (Character)

8 ASCII characters

A', 'B' etc. L 'E'

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

1 s 10

10 s 11

Symbol Table Allowed Addresses and Data Types

English

Mnemonics

German

Mnemonics Description Data Type

Address

Range

I/O Signals

I E Input bit BOOL 0 to

65535.7

IB EB Input byte BYTE, CHAR 0 to 65535

IW EW Input word WORD, INT, S5TIME,

DATE 0 to 65534

ID ED Input double word DWORD, DINT, REAL,

TOD, TIME 0 to 65532

Q A Output bit BOOL 0 to

65535.7

QB AB Output byte BYTE, CHAR 0 to 65535

QW AW Output word WORD, INT, S5TIME,

DATE 0 to 65534

QD AD Output double word DWORD, DINT, REAL,

TOD, TIME 0 to 65532

Marker Memory

M M Memory bit BOOL 0 to

65535.7

MB MB Memory byte BYTE, CHAR 0 to 65535

MW MW Memory word WORD, INT, S5TIME,

DATE 0 to 65534

MD MD Memory double word DWORD, DINT, REAL,

TOD, TIME 0 to 65532

Peripheral I/O

PIB PEB Peripheral input byte BYTE, CHAR 0 to 65535

PIW PEW Peripheral input word WORD, INT, S5TIME,

DATE 0 to 65534

PID PED Peripheral input double

word

DWORD, DINT, REAL,

TOD, TIME 0 to 65532

PQB PAB Peripheral output byte BYTE, CHAR 0 to 65535

PQW PAW Peripheral output word WORD, INT, S5TIME,

DATE 0 to 65534

PQD PAD Peripheral output double

word

DWORD, DINT, REAL,

TOD, TIME 0 to 65532

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

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

PLC’s Página 2 Curso 2009/10

Introducción

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

OB’s, FB’s, FC’s

PLC’s Página 3 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 4 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 5 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 6 Curso 2009/10

Operaciones lógicas a nivel de bit

PLC’s Página 7 Curso 2009/10

Operaciones lógicas a nivel de bit

•  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 8 Curso 2009/10 Curso 2009/10

•  Realiza la operación AND de dos bits.

•  En diagrama de contactos equivale a una conexión serie

A 125.0 E 125.0 E 124.2

U E124.2

U E125.0

=A 125.0

AWL

Diagrama de contactos

KOP

Operaciones lógicas a nivel de bit

PLC’s Página 9 Curso 2009/10 Curso 2009/10

•  Realiza la operación OR de dos bits.

•  En diagrama de contactos equivale a una conexión paralelo.

O E124.2

O E125.0

=A 125.0

AWL

A 125.0

E 125.0 E 124.2

KOP

Operaciones lógicas a nivel de bit

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

KOP

E 124.0

E 124.1

A 124.0 O E124.1

ON E124.0

=A 124.0

AWL

U E124.1

UN E124.0

=A 124.0

AWL

KOP

A 124.0

E 124.0

E 124.1

Operaciones lógicas a nivel de bit

PLC’s Página 11 Curso 2009/10

FUP

KOP

AWL

Operaciones lógicas a nivel de bit

PLC’s Página 12 Curso 2009/10

Operaciones lógicas a nivel de bit

PLC’s Página 13 Curso 2009/10

U E 124.0 Primera consulta UN E 124.1 = A 124.0 U E 125.0 Primera consulta

Operaciones lógicas a nivel de bit

PLC’s Página 14 Curso 2009/10 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 15 Curso 2009/10 Curso 2009/10

OPERACIONES CON MEMORIA (I/IV)

U E 124.0

S A 125.0

1) Si la entrada 124.0 está activa se enciende la salida 125.0 2) Si la entrada 124.0 se desactiva no se desactiva la salida 125.0

PLC’s Página 16 Curso 2009/10 Curso 2009/10

OPERACIONES CON MEMORIA (II/IV)

PLC’s Página 17 Curso 2009/10 Curso 2009/10

OPERACIONES CON MEMORIA (III/IV)

U E 124.0 S A 124.0

U E 124.1 R A 124.0

Prevalece el Reset

sobre el Set

U E 124.0 R A 124.0

U E 124.1 S A 124.0

Prevalece el Set sobre

el Reset

PLC’s Página 18 Curso 2009/10 Curso 2009/10

OPERACIONES CON MEMORIA (IV/IV)

U E 124.0 S A 124.0

U E 124.1 R A 124.0

Tiempo de ciclo

PLC’s Página 19 Curso 2009/10 Curso 2009/10

MARCAS

PLC’s Página 20 Curso 2009/10 Curso 2009/10

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

EJERCICIO (Entregable 1)

Automatización Industrial

Operaciones Binarias y de Memoria

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

Índice

• Contiene bits con información de estado• Las operaciones interpretan o activan los bits de estado• La palabra de estado tiene 16 bits

RLO/FCSTAOROSOVCC0CC1BR

021222324252627282.....215

Bit Ocupación Significado0 /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ógico2 STA Bit de estado3 OR Bit OR (necesario en operaciones Y antes de O)4 OS Bit de desbordamiento memorizado

Palabra de Estado (I)

Bit Ocupación Significado5 OV Bit de desbordamiento. Error de desbordamiento en

operaciones en coma flotante6 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ón8 BR Resultado binario. Establece un enlace entre el

procesamiento de palabras y el procesamiento de bits9 a 15 No ocupado

Palabra de estado (II)

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

Instrucciones bit

NOT

#

S

SR_FFS Q

R

RS_FFR Q

S

&

=

XOR>=1

O I 0.1O I 0.2= Q 4.1A I 0.1

A I 0.2= Q 4.1

Operaciones Lógicas Binarias I

Operación A Función “Y” = Función de asignaciónAN Función “YN” # Conector intermedioA( Y - abrir paréntesis FP Función de flanco positivoAN( NO-Y abrir paréntesis FN Función de flanco negativoO Función “O” NOT Función negaciónON Función “ON” S Función set de un biestableO Función “O” de funciones “Y” R Función reset de biestableO( O - abrir paréntesis SAVE Salvar RLO en RBON( NO-O abrir paréntesisX Función O-EXCLUSIVAXN Función NO-O-EXCLUSIVAX( O-EXCLUSIVA abrir paréntesisXN( NO-O-EXCLUSIVA abrir paréntesis) Cerrar paréntesis

Operaciones Lógicas Binarias II

&I 0.1

I 0.2Q 4.0

A I 0.1A I 0.2= Q 4.0=

Operación lógica “Y”

Operación lógica “O”

>=1I 0.3

I 0.4Q 4.1

O I 0.3O I 0.4= Q 4.1=

Operaciones lógicas binarias III

&I 0.0

I 0.1

Q 4.0

A I 0.0A I 0.1OA I 0.2A I 0.3= Q 4.0

&I 0.2

I 0.3

>=1

I 0.0

I 0.1

Q 4.1I 0.2

I 0.3

>=1

>=1

&

A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)= Q 4.1

=

=

Operación lógica “O” de funciones “Y”

Operación lógica “Y” de funciones “O”

Operación lógica binarias IV

XORI 0.1

I 0.2Q 4.0

X I 0.1X I 0.2= Q 4.0

A I 0.1AN I 0.2OAN I 0.1A I 0.2= Q 4.0

=

Operación Lógica “O-exclusiva”

• Insertarentrada binaria

• Invertir unaentrada binaria

• Asignación

• Conector

Otras Funciones Binarias I

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

• Activar salida

• Desactivar salida

&I 0.1

I 0.2 SAVE

&I 0.1

I 0.2 S

Q 4.0

&I 0.1

I 0.2 R

Q 4.0

Otras Funciones Binarias II

I 0.0

I 0.1

Q 4.0

I 0.3 I 0.5

I 0.2

I 0.4

Q 1.0I 0.2I 0.1I 0.0

I 0.3

I 0.5

I 0.4

.

&

&

= Q 4.0

>=1

I 0.0I 0.1

I 0.2

I 0.3

I 0.4

I 0.5

A I 0.0A I 0.1A I 0.2 OA I 0.3A I 0.4OA I 0.5= Q 4.0

Ejemplo (I)

>=1

&

&

>=1

= Q 4.0

I 0.0

I 0.1

I 0.2

I 0.3 >=1

>=1

I 0.4

I 0.6

I 0.5

A(A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)O I 0.4)A(O I 0.5O I 0.6)= Q 4.0

Ejemplo (II)

Q 4.0

I 0.0 I 0.1

S1 S2

Q 4.0

I 0.0 I 0.1

S1 S2

Q 4.0

I 0.0 I 0.1

S1 S2

Q 4.0

I 0.0 I 0.1

S1 S2

ENUNCIADO: Accionar la salida cuando esté activado S1 y no esté activado S2

A I 0.0AN I 0.1= Q 4.0

AN I 0.0AN I 0.1= Q 4.0

A I 0.0A I 0.1= Q 4.0

AN I 0.0A I 0.1= Q 4.0

&&

&&

Consideraciones sobre Sensores

I 0.0

I 0.1

Q 4.1

I 0.3 I 0.5

I 0.2

I 0.4

Q 4.1I 0.2I 0.1I 0.0

I 0.3

I 0.5

I 0.4

&>=1

>=1

= Q 4.1

I 0.0I 0.3I 0.5

I 0.1

I 0.4

I 0.2

A(O I 0.0O I 0.3O I 0.5)A(O I 0.1O I 0.4)A I 0.2= Q 4.1

Ejemplo (III)

I 0.0I 0.1

Q 4.0

I 0.2

I 0.3

I 0.5

=

I 0.4

&

XOR

X(A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)A I 0.4)X(A I 0.5A(O I 0.6O I 0.7))= Q 4.0

>=1

>=1&

I 0.6I 0.7

>=1

Ejemplo (IV)

&I 0.0I 0.1

Q 4.0

XORI 0.3

I 0.4

I 0.5

>=1

=

#

I 0.2

#

&

#

M 0.0

M 1.1

M 2.2#

DB5.DBX 3.2

A I 0.0A I 0.1A I 0.2NOT= M 0.0A M 0.0A(A(X I 0.3X I 0.4)NOT= M 1.1A M 1.1O(A I 0.5= M 2.2A M 2.2))NOT= DB5.DBX 3.2A DB5.DBX 3.2= Q 4.0

Ejemplo (V)

Símbolo Operando ComentarioF3F I 0.0 Sobreintensidad (NC)SOQ I 0.1 Paro (NC)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”

L11-50 Hz 220v

NH1 H2

K1MS1B

SOQ

F3FF1F

K1MK1M

K1M

Circuitos de Mando

M3-%P

1 3 5

1 3 5

U1 V1 W1

2 4 6

2 4 6

F3F

K1M

F2F

L1L2L3

Circuito de Potencia

Ejemplo (VI-a)

>=1I 0.2

Q 4.0

I 0.0I 0.1

&

=Q 4.0

&Q 4.0 =

Q 4.1

&Q 4.0 =Q 4.2

A I 0.0A I 0.1A(O I 0.2O Q 4.0)= Q 4.0

AN Q 4.0= Q 4.1

A Q 4.0= Q 4.2

Ejemplo (VI-b)

I 0.1 Q 4.0

I 0.0

Q 4.0

Marcha

Paro

Prioridad a la Desconexión

A(O I 0.1O Q 4.0)A I 0.0= Q 4.0

Prioridad a la Conexión

I 0.1 Q 4.0

Q 4.0

Marcha

ParoI 0.0

A I 0.1OA Q 4.0A I 0.0= Q 4.0

Operaciones de Memoria

RLO1

0 Tiempo

Flanco Positivo Flanco Negativo

I 1.0

M 1.0

Q 4.0

Lista de InstruccionesDiagrama del estado de la señal

A I 1.0FP M 1.0= Q 4.0

I 1.0 Q 4.0P

M 1.0Funciones lógicas

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

RLO1

0 Tiempo

Flanco Positivo Flanco Negativo

I 1.0

M 1.0

Q 4.0

Lista de InstruccionesDiagrama del estado de la señal

A I 1.0FN M 1.0= Q 4.0

I 1.0 Q 4.0N

M 1.0Funciones lógicas

Detector de Flanco Negativo RLO (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 “0” a “1”, la salida Q será “1”.

POS

I 0.4

I 0.3

M 0.0 &=

Q 4.0M_BIT Q

A(A I 0.3BLD 100FP M 0.0)A I 0.4= 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 “1” a “0”, la salida Q será “1”.

NEG

I 0.4

I 0.3

M 0.0 &=

Q 4.0M_BIT Q

A(A I 0.3BLD 100FN M 0.0)A I 0.4= Q 4.0

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

• Biestable preponderante al reset (R)• Esta operación es afectada por el “Master Control Relay (MCR)”

SRS

QR

Q 4.1

=

&I 0.1

I 0.2

&I 0.3

I 0.4

M 1.0A I 0.1A I 0.2S M 1.0A I 0.3A I 0.4R M 1.0A M 1.0= Q 4.1

Flip-Flop SR

RSR

QS

A I 0.1A I 0.2R M 0.0A I 0.3A I 0.4S M 0.0A M 0.0= Q 4.0

• Biestable preponderante al set (S)• Esta operación es afectada por el “Master Control Relay (MCR)”

Q 4.0

=

&I 0.1I 0.2

&I 0.3I 0.4

M 0.0

Flip-Flop RS

I 0.7

M 1.0

Q 5.0

A I 0.7AN M 1.0S Q 5.0A I 0.7A M 1.0R Q 5.0

AN I 0.7A Q 5.0S M 1.0AN I 0.7AN Q 5.0R M 1.0

S

R Q

I 0.7M 1.0

Q 5.0

Segmento 1

I 0.7M 1.0

&

&

Segmento 2

S

R Q

I 0.7Q 5.0

M 1.0

I 0.7Q 5.0

&

&

Divisor Binario

& &

R S

& &

R S

Q/Q

Q Q

I 0.1 I 0.0

I 0.7

M 10.0

M 10.1

Q 5.0

S

R Q

M 2.0

M 10.1M 10.0

Segmento 3

Segmento 2

M 2.0

M 10.1

&

&

S

R Q

M 2.0

M 10.0M 10.1

M 2.0

M 10.0

&

&

M 10.1 Q 5.0&Segmento 4

I 0.0

I 0.1

I 0.7 M2.0PM 2.1

Báscula JK

Asignación de EntradasI 0.0 SelectorI 0.1 Relé térmicoI 0.2 Boya nivel máximoI 0.3 Boya nivel mínimoAsignación de SalidasQ 5.0 ElectrobombaQ 5.1 Señalización de

estado operativo Q 5.2 Señal. relé térmicoAsignación de MarcasM 1.0 Marca auxiliar

electrobomba

Nivel Máximo

Nivel Mínimo

Bomba

Con. Desc.

Luz deFuncionamiento

Luz disparorelé térmico

Selector

A I 0.0AN I 0.2AN I 0.3S M 1.0ON I 0.1ON I 0.0O I 0.2R M 1.0

A M 1.0= Q 5.0

A I 0.0= Q 5.1

AN I 0.1= Q 5.2

Electrobomba

A I 1.0ANI 1.1A M 4.0= Q8.0A I 2.0 Primera consulta

RLO estado de señal

.... ....

.... ....

.... ....

.... ....

Consideraciones sobre Primera Consulta

1

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 11DivDiv . Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y AutomáticaDivDiv . Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y Automática

Tema 4

Instrucciones Básicas:Operaciones lógicas con bits

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

Bibliografía

l Título: “Step7 Avanzado”l Autor: José Martínez Torresl 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 Bergerl ISBN: 3-89578-140-1

2

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

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

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

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

3

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 55

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

Operaciones lógicas con bits1.- Las operaciones básicas para las operaciones lógicas con bits son:U YUN Y-NoO OON O-NoX O-exclusivaXN O-exclusiva-No

3.- Las siguientes operaciones permiten ejecutar una cadena lógica encerrada entre paréntesis:U( Y con abrir paréntesisUN( Y-No con abrir paréntesisO( O con abrir paréntesisON( O-No con abrir paréntesisX( O-exclusiva con abrir paréntesisXN( O-exclusiva-NO con abrir paréntesis) Cerrar paréntesis

2.- Para terminar una cadena lógica se puede utilizar una de las tres operaciones:= AsignarR DesactivarS Activar

4.- Las operaciones siguientes permiten modificar el resultado lógico (RLO):NOT Negar el RLOSET Activar el RLO (=1)CLR Desactivar RLO (=0)SAVE Memorizar el RLO en el registro RB

5.- Otras operaciones detectan cambios en el resultado lógico y reaccionancorrespondientemente:FN Flanco negativoFP Flanco positivo

4

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 77

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 88

Operaciones básicas

5

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 99

Operaciones básicas

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1010

Operaciones básicas

l SerieSOLUCIÓN EN AWL

U E 0.0U E 0.1= A 4.0

l ParaleloSOLUCIÓN EN AWL

U E 0.0 (también O E 0.0)O E 0.1= A 4.0

6

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1111

Operaciones básicas

l Contactos negadosSOLUCIÓN EN AWLUN E 0.0U E 0.1= A 4.0

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1212

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas

lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

7

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1313

Instrucciones de terminación de cadenas lógicas

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1414

Instrucciones de terminación de cadenas lógicas

8

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1515

Instrucciones de terminación de cadenas lógicasl 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 bitsInstrucciones Básicas:Operaciones lógicas con bits 1616

Instrucciones de terminación de cadenas lógicasl 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 Consultal 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.

U E 1.0

UN E 1.1U M 4.0

= A8.0U E 2.0 Primera consulta

RLO estado de se ñal

.... ....

.... ....

.... ....

.... ....

9

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1717

Instrucciones de terminación de cadenas lógicas

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1818

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

10

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1919

Combinación de operaciones básicas

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2020

Combinación de operaciones básicas

11

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2121

Combinación de operaciones básicas

l Utilización de parentesisSOLUCIÓN EN AWLU E 0.0O(U E 0.1U E 0.2)OU E 0.3U E 0.4= A 4.0

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2222

Ejercicio 1Control automático taladradora vertical

s

FCs

FCb

B Ps

Rs

Rb

b

s

FCs

FCb

B Ps

Rs

Rb

Rs

Rb

b

Proyectar un circuito para el control automático de unataladradora vertical. Dicha máquina deberá realizar lasiguiente función:

1º.- Mediante el pulsador B iniciamos el descenso de la herramienta, la cual, al llegar a un minirruptor fin de ca-rrera FCb, debe interrumpir el descenso e iniciar la subida.

2º.- Al llegar, en la subida, a un minirruptor fin de carreraFBs, la herramienta debe detenerse.

3º.- El circuito deberá llevar un pulsador de emergenciaPs, mediante al cual pueda interrumpirse el descenso dela herramienta, para que automáticamente se inicie la su-bida.

4º.- Cuando la herramienta esté subiendo de ninguna manera deberá poder iniciarse la bajada, aunque se pulse B.

Definido el diagrama de circuito, traducir a lenguaje STEP7 la lógica cableada.

12

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2323

Ejercicio 1: Resolución

Asignación de variablesPulsador B E0.0Pulsador de emergencia Ps E0.1Final de carrera bajada FCb E0.2Final de carrera subida FCs E0.3Actuador bajada Rb A4.0Actuador subida Rs A4.1

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2424

Ejercicio 2

Arranque directo de un motor trifásico con rotor en cortocircuito

1.- Elementos del esquema:Q1 Seccionador con fusibles incorporadosKM1 Contactor de potenciaF1 Relé térmico de protecciónM Motor trifásicoLM Lámpara que señala motor en marchaLF1 Lámpara que señala disparo de F1LBT Lámpara que señala tensión en el circuito

2.- FuncionamientoPara poner en marcha, pulsar en S1.Para parar, pulsar en S2El motor también se desconectará por disparo de F1Lámparas de señalización de circuido bajo tensión (LBT), motor en servicio (LM) y disparo de relé térmico (LF1)

13

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2525

Ejercicio 2: ResoluciónAsignación de variables

Pulsador S1 E0.0Pulsador S2 E0.1Relé térmico F1(n.c) E0.2Lámpara LBT A4.0Lámpara LM A4.1Lámpara LF1 A4.2

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2626

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

14

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2727

Función memoria

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

Función memoria

l Ejemplo MARCASSOLUCIÓN EN AWLU E 0.0O E 0.1O(U E 0.2U E 0.3U E 0.4)= M 0.0U E 0.6O E 0.7= M 0.1U E 1.1U E 1.2O E 1.0= M 0.2U E 0.5U M 0.1= M 0.3U M 0.0U(U M 0.3O M 0.2)= A 4.0

M0.0

M0.2

M0.3

M0.4

U( U E 0.2U E 0.3U E 0.4O E 0.1O E 0.0) U( O E 1.0O U E 1.1U E 1.2O U E 0.5U( O E 0.7O E 0.6) ) = A 0.4

15

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2929

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.

prioridad a la desconexión

prioridad a la conexión

S1

S2

K1

K1 K2

K2

S4S3S1

S2

K1

K1 K2

K2

S4S3

Función memoria

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3030

Función Memoria

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 Setl 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 Resetl 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)

Flip -flop

R

Q K1SS1

S2

16

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3131

Función MemoriaInstrucciones de Set y Reset

KOP

E1.0 A9.0

S

SET

RESET

E1.1 A9.0R

AWL

Set

U E1.0S A9.0

Reset

U E1.1R A9.0

FUP

Set

Reset

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3232

Función Memoria

l Ejemplo

l Solución con Set y Reset

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

17

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3333

Función Memoria

Flip-flop "Prioridad alSet"

Set/resetel flip flop RS_FF

R Q

S

E1.4

E1.5

A9.4M0.2

Set/resetel flip flop RS_FF

R Q

S

E1.4

E1.5

A9.4M0.2

Reset/setflip flopReset/setflip flop

Reset/setflip flop

U E1.4R M0.2U E1.5S M0.2U M0.2= A9.4

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3434

Función Memoria

Flip-flop "Prioridad alReset"

Set/resetel flip flop SR_FF

S Q

R

E1.2

E1.3

A9.3

M0.0Set/resetel flip flop SR_FF

S Q

R

E1.2

E1.3

A9.3

M0.0

Set/resetflip flop

Set/resetflip flop

U E1.2S M0.0U E1.3R M0.0U M0.0= A9.3

18

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3535

Ejemplol Depósito de agua

l Tenemos un depósito de agua. Para manejarlo tenemos un selector de mando. Podemos seleccionar modo manual(E0.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(E0.2) queremos que se ponga en marcha la bomba, y cuando el agua llegue al nivel de arriba(E0.3) queremos que se pare la bomba.

l Además tenemos un relé térmico(E0.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(A4.7).

l Además tenemos una luz de marcha que nos indica cuando está en marcha la bomba(A 4.1).

E 0.2

E 0.3

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3636

Ejemplo:soluciónSOLUCIÓN EN AWLSegmento 1: MANUALU E 0.0 //Si activamos en modo manual = A 4.0 //Pon en marcha la bomba= A 4.1 //Enciende la luz de marchaSegmento 2: AUTOMÁTICOU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléU E 0.2 //Y está activo el nivel de abajoUN E 0.3 //Y no está activo el nivel de arribaS A 4.0 //Pon en marcha la bombaS A 4.1 //Y enciende la luz de marchaU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléUN E 0.2 //Y no está activo el nivel de abajoU E 0.3 //Y se ha activado el nivel de arribaON E 0.7 //O ha saltado el reléR A 4.0 //Para la bombaR A 4.1 //Apaga la luz de marchaUN E 0.7 //Si ha saltado el relé= A 4.7 //Avísame con la luz de

19

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3737

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

Ejemplo:solución

20

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3939

Ejemplo:Manual

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4040

Ejemplo:Automático

21

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4141

Ejemplo:AutomáticoFuncionamiento 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 bitsInstrucciones Básicas:Operaciones lógicas con bits 4242

Ejemplo:soluciónCorrectamenteSegmento 1 : MANUALU E 0.0 //Si está en manual= M 0.0 //Activa la marca 0.0= M 0.1 //Y activa la marca 0.1Segmento 2: AUTOMÁTICOU E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienU E 0.2 //Y está activo el nivel inferiorUN E 0.3 //Y no está activo el nivel superiorS M 0.2 //Activa la marca 0.2S M 0.3 //Y activa la marca 0.3U E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienUN E 0.2 //Y no está activo el nivel inferiorU E 0.3 //Y se ha activado el nivel superiorON E 0.7 //O ha saltado el reléR M 0.2 //Desactiva la marca 0.2R M 0.3 //Y desactiva la marca 0.3UN E 0.7 //Si no está el relé= A 4.7 //Activa la luz de relé.

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

= A 4.0 //Pon en marcha la bombaU M 0.1 //Si está activa la marca 0.1O M 0.3 //O la marca 0.3

= A 4.1 //Enciende la luz de marcha

22

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4343

Ejemplo: Automático

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4444

Ejemplo: Automático sin que se pare la bomba/luz

23

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4545

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.0R M 0.1 //Y desactiva la marca 0.

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4646

Ejemplo: soluciónl 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 setsa 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.1R A 4.0R A 4.1

24

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4747

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4848

Instrucciones que afectan al RLOl 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.

KOPAWL

E0.0 E0.1 A8.0

NOT

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

NOTNOT

U E0.0U E0.1NOT= A8.0

CLRSET

No se visualiza en KOPCLRSET

SAVEU E1.6SAVEU RB= A8.1

Instrucciones que Afectan al RLO

E1.0(SAVE)

RB( )

A8.1

E1.0(SAVE)

RB( )

A8.1

FUP

No se visualiza en FUP

25

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4949

Índice

l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el

resultado lógico

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 5050

Flancos

Evaluación de Flanco

RLO1

0Tiempo

Flanco Positivo Flanco Negativo

U E 1.0FP M 1.0= A 4.0

E 1.0

M 1.0

A 4.0

E 1.0

M 1.0

A 4.0

Un tiempo de ciclo

Diagrama KOP

E1.0 M1.0 A4.0P

E1.0 M1.0 A4.0P

Diagrama del estado de la señalLista de Instrucciones

Diagrama FUP

26

Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 5151

Flancosl 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

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

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

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

Diagnosis e información del sistema

ACCU-1

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

•  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

Diagnosis e información del sistema

PLC’s Página 4 Curso 2009/10 Curso 2009/10

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

Diagnosis e información del sistema

PLC’s Página 5 Curso 2009/10 Curso 2009/10

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

Diagnosis e información del sistema

PLC’s Página 6 Curso 2009/10 Curso 2009/10

•  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

Diagnosis e información del sistema

PLC’s Página 7 Curso 2009/10 Curso 2009/10

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.

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.

Diagnosis e información del sistema

PLC’s Página 8 Curso 2009/10 Curso 2009/10

•  Para verlo L MB100 T AB100 y se lo transferimos a la CPU.

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

Diagnosis e información del sistema

PLC’s Página 9 Curso 2009/10 Curso 2009/10

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

Diagnosis e información del sistema

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

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

Diagnosis e información del sistema

PLC’s Página 11 Curso 2009/10 Curso 2009/10

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

Diagnosis e información del sistema

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

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

Contadores

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

Operaciones habituales con contadores:

Carga valor 0

Carga valor de acumulador AC1 en contador direccionado

Contadores

PLC’s Página 4 Curso 2009/10 Curso 2009/10

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

Contadores

PLC’s Página 5 Curso 2009/10 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

Automatización Industrial

Operaciones de Cómputo

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

Índice

Características

Operaciones de Cómputo – Contadores

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

Parámetro AG S7-300 0 ... 255

Tipos de Contadores

Incrementador/Decrementador STL FBD/LAD

A I 0.0 CU C 1 A I 0.1 CD C 1 L C#100 S C 1 A I 0.3 R C 1 L C 1 T AW 6 LC C 1 T MW 2 A C 1 = Q 4.0

C#100

I 0.0

C 1

Q 4.0MW 2AW 6

S_CUD

CU CD

S CV PV CV_BCDR Q

I 0.1

I 0.2

I 0.3

Incrementador Decrementador FBD/LAD FBD/LAD

C#100

I 1.0

C 2

Q 4.1MW 4AW 8

S_CU

CU

S CV PV CV_BCDR Q

I 1.2

I 1.3C#100

I 2.0

C 3

Q 4.3MW 6AW 10

S_CD

CD

S CV PV CV_BCDR Q

I 2.2

I 2.3

Valor del contador especificado en BCD (0 a 999)

11 8 7 4 3 015 12

010110210hex0000

• 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 constanteL C#100; //Valor del contador 100L W#16#0100; //Valor del contador 100

Especificación de un contador en formato de una variableL C#200; //Valor del contador 20T MW 56; //Salvar valor del contador.......L MW 56; //Cargar el valor del contador

Formato de la Palabra de Cómputo

Orden de las Instrucciones

DecrementarCD - I 0.1ActivarS – I 0.2BorrarR – I 0.3Salida BinariaQ - Q 1.0

Valor decontadorCV, CV_BCD

IncrementarCU - I 0.0

0

5

Contar Hacia AdelanteA I 0.0CU C 1

CargarA I 0.2L C#5 S C 1

Consultas DigitalesL C 1 T DBW 2 LC C 1 T QW 6

Consultas BinariasA C 1 = Q 4.0

Contar Hacia AtrásA I 0.1CD C 1

Poner a CeroA I 0.3R C 1

I 0.0

C#5

I 0.3

DBW 2QW 6

Q 4.0

I 0.2

I 0.1

C 1S_CUD

CUCDS CV

PV CV_BCD

R Q

Ejemplo: Valor de ContajeDuración: C#5

Constante Valor

L C# 38

Operando

Operación

Valor del contador (0..999)

Valor en Binario Valor de tres dígitos en BCDPosiciones de bits ocupadas con “0”

Valor actual del contador C2

ACU 1

L C 2 LC C 2

Lectura de un Contador

(codificado en BCD)

- Constante C#- Palabra de Datos - Palabra de Entradas IW- Palabra de Marcas MW- Palabra de Salidas QW - .......

S_CDU

PV CVCV_BCD

R Q

Carga y Lectura de un Contador0 1 0 0 0 0 0 1 0 0 0 0

15 12 11 0

Valor del contador de 3 dígitos(codificada en BCD)

Preselección de Tiempo

Constante de Cómputo

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

0

1

0

Estados deseñal

Tiempo

Q 4.5

I 0.0

1

0

7

1

0

I 0.1

C 1

S C 1 S C 1

Binario16 bits

R S PV

_

!=0 CV

I 0.1

C# 7

I 0.0

Q 4.5 Valor del Contador

STL FBD LAD A I 0.0 CD C 1 NOP 0 A I 0.1 L C#7 S C 1 NOP 0 NOP 0 NOP 0 A C 1 = Q 4.5

C# 7

I 0.0

Z 1

Q 4.5

S_CD CD S CV PV PV_BCDR Q

I 0.1

I 0.0

Q 4.5

C# 7

C 1

S_CD CD

S CV PV CV_BCDR Q

I 0.1

Operaciones de Contaje – Borrar un Contador “R” e Incrementar “ZV”

Cronograma Esquema Eléctrico

0

1

0

Estados deseñal

T iem po

Q 4.5

I 0.0

1

0

7

1

0

I 0.1

C 1

R C 1

Binario16 bits

R S PV

+

!=0 CV

I 0.1

I 0.0

Q 4.5

STL FBD LAD A I 0.0 CU C 1 NOP 0 NOP 0 NOP 0 A I 0.1 R C 1 NOP 0 NOP 0 A C 1 = Q 4.5

I 0.0

C 1

Q 4.5

S_CU CU S CV PV CV_BCDR QI 0.1

I 0.0

Q 4.5

C 1

S_CU CU

S CV PV CV_BCDR Q

I 0.1

Automatización Industrial

Operaciones de Carga y Transferencia

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

Índice

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

Byte alto Byte altoByte bajo Byte bajo23 16 15 8 7 031 24

Palabra alta Palabra bajaACU(1 ó 2)

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

Operaciones de Carga y Transferencia

Las Operaciones de Carga y Transferencia permiten

Funciones del acumulador

Acumulador 1 Acumulador 2

Funciones digitalesFunc. transferencia

MódulosMemoria trabajoMemoria sistema

Reg. direcciones

Palabra de estado

Temporiz. ContadoresImágenes PII, PIQ

Dat. locales temporales

Marcas

Periferia de entradas

Constantes, punteros

Long. número bloques

Bloque de datos

MódulosMemoria trabajoMemoria sistema

Dat. locales temporales

Palabra de estadoImágenes PII, PIQ

Marcas Bloque de datos Periferia de salidas

Funciones de carga

Operaciones de Carga y Transferencia

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

31 24 23 16 815 7 0

L IW 0IB 1IB 000000000

31 24 23 16 815 7 0

L IB 0IB 0000000000000

31 24 23 16 815 7 0

L ID 0IB 3IB 2IB 1IB 0

ACU 123 16 15 8 7 031 24

L IB nL IW nL ID n

L QB nL QW nL QD n

L PIB nL PIW nL PID n

L MB nL MW nL MD n

Operaciones de Carga

Carga de constantes DescripciónDireccionamiento inmediatoL +27 Carga la constante entera de 16 bits ”27” en ACU1L L#-1 Carga la constante entera de 32 bits ”-1” en ACU1L 2#1010101010101010 Carga la constante binaria de 16 bits en ACU1L DW#16#A0F0BCFD Carga la constante hexadecimal en ACU1L ’FIN’ Carga los caracteres ASCII deseados en ACU1L T#500 ms Carga el valor de temporización en ACU1L S5T#2s Cargar un temporizador S5 L C#100 Carga un valor de computo en BCD en ACU1L B#(100,12) Carga la constante de 2 bytesL B#(100,12,50,8) Carga la constante de 4 bytesL B#16#F1 Cargar número de dos dígitos hexadecimales en ACU 1L P#10.0 Carga el puntero intraárea en ACU1L P#I20.6 Carga el puntero interárea en ACU1L P#name Cargar la dirección de variable localL -25 Carga el número real en ACU1L D# 1995-01-20 Carga la fechaL TOD#13:20:33.125 Carga de un tiempo (la hora) en 32 bits

Ejemplos de Direccionamiento

• La función transferencia (T - transfer) pone el contenido del acumulador1 en eloperando especificado (todos los tipos de datos en 8, 16 o 32 bits)

• Las operaciones de transferencia son incondicionales• Operandos ubicados en la memoria:

ACU 123 16 15 8 7 031 24

T IB nT IW nT ID n

T QB nT QW nT QD n

T PQB nT PQW nT PQD n

T MB nT MW nT MD n

T QD 4 T QW 4 T QB 4

Operaciones de Transferencia

ACCU 1 contenidos para las instrucciones de carga

31 24 23 16 815 7 0

L IW 0IB 1IB 000000000

31 24 23 16 815 7 0

L IB 0IB 0000000000000

31 24 23 16 815 7 0

L ID 0IB 3IB 2IB 1IB 0

Instrucción Transferir31 24 23 16 815 7 0

Byte 0Byte 1Byte 2Byte 3

T QD 4 T QW 4 T QB 4

Efecto sobre el ACU 1

Word dWord c Word bWord a

Word bWord a 0 IW 7Word dWord c IW 7

0 IW 7 0 IW 9Word bWord a IW 9

L IW 7

L IW 9

ACU 2 ACU 1Informaciónperdida

Informacionesprocedentes

de la PII

ZZZZ

YYYYL ID 0

L ID 4

ACU 2 ACU 1Informaciónperdida

Informacionesprocedentes

de la PIIYYYY ZZZZ

ZZZZ

ID 0

ID 0

ID 4

ID 0

ID 4

Efecto sobre el ACU 2 – Operaciones de Carga

Word dWord c Word bWord a

Word dWord c Word bWord a Word aT QW 5

ACU 2 ACU 1 Informaciónperdida

Informacionesen la PIQ

Valor previode QW 5

T QD 10

ACU 2 ACU 1 Informacionesen la PAA

ID 1 ID 3

ID 1 ID 3 ID 3

Informaciónperdida

Valor previode QD 10

Efecto sobre el ACU 2 – Operaciones de Transferencia

• Permiten transferir valores de un acumulador a otro, o reemplazarbytes en el acumulador 1

• Se ejecutan independiente del resultado lógico o bits de estado

Transferencia directa entre acumuladores

PUSH: Permite desplazar el contenido de los ACU hacia adelante

POP: Permite desplazar el contenido de los ACU hacia atrás

TAK: Permite intercambiar el contenido de ACU1 y ACU 2

PUSH

Acumulador 2 Acumulador 1 Acumulador 1 Acumulador 2

Acumulador 2 Acumulador 1 Acumulador 2Acumulador 1

TAK POP

Funciones del Acumulador I

Intercambio de Bytes en el Acumulador 1

CAD: cambia bytes en todo el acumulador 1. El byte de mayor peso con el bytede menor peso y los dos bytes intermedios entre sí

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

nCAW

CAD

n+1 n+2 n+3

n n+1 n+3 n+2

n n+1 n+2 n+3

n+3 n+2 n+1 n

Funciones del Acumulador II

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óndatos memoria

EN BOOL I, Q, M, D, L Entrada de habilitaciónT, C

IN Todos tipos I, Q, M, D, L Valor fuente8, 16 o 32 bi

OUT Todos tipos I, Q, M, D, L Dirección de destino8, 16 32 bi

ENO BOOL I, Q, M, D, L Salida de habilitación

MOVE

EN OUT

IN ENO

Carga y Transferencia de Datos – Move

KOP AWL

MOVE

EN ENO

IN O

EN - Habilitar entradaENO -Habilitar salidaIN - Valor de entrada

(todos los tipos de datoscon longitud 8, 16, 32 bit)

O - Dirección del resultado (todos los tipos de datoscon longitud 8, 16, 32 bit)

L - Carga T - Transferencia(Todos los tipos de datos con 8, 16, 32 bits)

Ejemplos:L +5 // Carga una constante de 16-bitL L#523123 // Carga una constante de 32-bitL B#16#EF // Carga un byte hexadecimalL 2#0001_0110_1110_0011

// Carga un valor binario de 16-bitL TOD#1:10:3.3

// Carga un tiempo de 32-bit

T MB0 // Transferir un valor al byte dememoria 0

T AD256 // Transferir un valor a la dobledoble palabra de salida 256

Carga y Transferencia de Datos

SFC 20 BLKMOVEstán disponibles las siguientes funciones del sistema para la transferencia de datos

SFC Parámetros Declaración Tipo dato Descripción20 SRCBLK INPUT ANY Fuente de donde copiar datos

RET_VAL OUTPUT INT Información de errorDSTBLK 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ón21 VBAL INPUT ANY Area fuente a ser copiada

RET_VAL OUTPUT INT Información de errorBLK 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ón81 SRCBLK INPUT ANY Fuente de donde copiar datos

RET_VAL OUTPUT INT Información de errorDSTBLK OUTPUT ANY Destino donde copiar los datos

Funciones del Sistema para Transferencia de Datos

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

Introducción a los Tipos de Datos en STEP 7

Tipos de datos elementales (hasta 32 bits)

Tipos de datos complejos (mayores de 32 bits)

Tipos de datos definidos por el usuario (mayores de 32 bits)

• Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)

• Tipos de Datos Matemáticos (INT, DINT, REAL)

• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)

• Tiempo (DATE_AND_TIME)

• Array (ARRAY)

• Estructura (STRUCT)

• Cadena de Caracteres (STRING)

Tipo de Datos UDT (User Defined Type)

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

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

TIPOS DE DATOS DE BIT – TAMAÑO

PLC’s Página 4 Curso 2009/10 Curso 2009/10

E Tam BBB.b

Zona de memoria:

•  E -> Entradas •  A -> Salidas •  T -> Temporizadores •  Z -> Contadores •  M -> Marcas •  DB -> Módulos de datos •  P -> Acceso directo (PA, PE)

Tamaño del Dato que vamos a usar (bit por omisión): B, W, D

Número de byte y bit (0-7), en su caso

DIRECCIONAMIENTO 1/3

PLC’s Página 5 Curso 2009/10 Curso 2009/10

DIRECCIONAMIENTO 2/3

124

125

125

125

124

125

PLC’s Página 6 Curso 2009/10 Curso 2009/10

•  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

DIRECCIONAMIENTO 3/3

PLC’s Página 7 Curso 2009/10 Curso 2009/10

•  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) –  Carácter –  Tiempo: cantidad de tiempo, hora, S5T, fecha –  Puntero

SISTEMAS NUMÉRICOS

Ver ayuda Admin. Simatic Tipos de datos simples

PLC’s Página 8 Curso 2009/10 Curso 2009/10

Tipos de Datos Elementales en STEP 7

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

Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo

PLC’s Página 9 Curso 2009/10 Curso 2009/10

Números en COMA FLOTANTE (1/2)

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

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

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

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

PLC’s Página 10 Curso 2009/10 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 11 Curso 2009/10 Curso 2009/10

•  Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas.

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

ACUMULADORES (1/2)

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

PLC’s Página 12 Curso 2009/10 Curso 2009/10

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.

ACUMULADORES (2/2)

PLC’s Página 13 Curso 2009/10 Curso 2009/10

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.

CARGA Y TRANSFERENCIA 1/7

PLC’s Página 14 Curso 2009/10 Curso 2009/10

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

CARGA Y TRANSFERENCIA 2/7

PLC’s Página 15 Curso 2009/10 Curso 2009/10

•  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

CARGA Y TRANSFERENCIA 3/7

PLC’s Página 16 Curso 2009/10 Curso 2009/10

•  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 L ED 128 LAR2 TAR

Tendrá como resultado:

ED124 ----> AR2

ED128 ----> AR1

CARGA Y TRANSFERENCIA 4/7

PLC’s Página 17 Curso 2009/10 Curso 2009/10

•  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

CARGA Y TRANSFERENCIA 5/7

PLC’s Página 18 Curso 2009/10 Curso 2009/10

L +5 --> Carga entero de 16 bits

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

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

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

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

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

CARGA Y TRANSFERENCIA 6/7

NOTA:

Ver ayuda Adm. Simatic

“Tipos de datos simples”

PLC’s Página 19 Curso 2009/10 Curso 2009/10

CARGA Y TRANSFERENCIA 7/7

PLC’s Página 20 Curso 2009/10 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 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

Operaciones con AC. Comparación (I)

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

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

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

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

Operaciones con AC. Comparación (II)

PLC’s Página 4 Curso 2009/10 Curso 2009/10

•  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

Operaciones con AC. Comparación (III)

PLC’s Página 5 Curso 2009/10 Curso 2009/10

•  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

Operaciones con AC. Aritméticas (I)

PLC’s Página 6 Curso 2009/10 Curso 2009/10

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

Operaciones con AC. Aritméticas (II)

PLC’s Página 7 Curso 2009/10 Curso 2009/10

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

Ejemplo: operaciones en coma fija (I, D

Operaciones con AC. Aritméticas (II-b)

PLC’s Página 8 Curso 2009/10 Curso 2009/10

•  Sumar constante entera o doble: –  + <constante entera> ACU1 + CTE -> ACU1,

•  Dividir /I : ACU2 / ACU1: –  ACU1 L cociente –  ACU1 H resto

Operaciones con AC. Aritméticas (III)

PLC’s Página 9 Curso 2009/10 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 10 Curso 2009/10 Curso 2009/10

Conversiones entre tipos de datos (I)

PLC’s Página 11 Curso 2009/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 12 Curso 2009/10 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 13 Curso 2009/10 Curso 2009/10

Conversiones entre tipos de datos (IV)

+

-

un real en entero de 32 bits

Un real 32bits IEEE-FPE

inferior

superior mayor

doble

PLC’s Página 14 Curso 2009/10 Curso 2009/10

Conversiones entre tipos de datos (V)

PLC’s Página 15 Curso 2009/10 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 16 Curso 2009/10 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 17 Curso 2009/10 Curso 2009/10

  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

Ops. Lógicas a nivel de Palabra W y Doble Palabra D (II)

PLC’s Página 18 Curso 2009/10 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)

–  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

n (Nº Despl.)

PLC’s Página 19 Curso 2009/10 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 20 Curso 2009/10 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 21 Curso 2009/10 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 22 Curso 2009/10 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

Automatización Industrial

Operaciones de Comparación

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

Índice

• 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

Operaciones de Comparación

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

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

MW 10

CMP==I

IN1 IN2

&I 0.0

IW 0 Q 4.0=

Ejemplo:A(L IW 0L MW 10==I)A I 0.0= Q 4.0

Comparar Números Enteros

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

MD 4

CMP<>D

IN1 IN2

&I 0.0

MD 0 Q 4.0=

Ejemplo:A(L MD 0L MD 4<>D)A I 0.0= Q 4.0

Comparar Números Enteros Dobles

MD 4

CMP<R

IN1 IN2

&I 0.0

MD 0 Q 4.0=

Ejemplo:

• 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(L MD 0L MD 4<R)A I 0.0= Q 4.0

Comparar Números en Coma Flotante

L MW 120L 512>IA Input1= Output1

O Input2O(L MW 122L 200<=I)O Input3= Output2

L MW 124L 1200>IJC GREA==IJC EQUA

L MW 124L 1200>IJP GREAJZ EQUA

Múltiples comparaciones:

Comparación en operaciones lógicas:Comparación en el comienzode una operación lógica:

Ejemplos 1

Comparación de INT:L MW 92L 120==IR M 99.0

Comparación de DINT:L “DB_Global”.CompVal1L “DB_Global”.CompVal2<D= “DB_Global”.CompResult

Comparación de REAL:L #ValactL #CALIBRE>=RS #Recali

Ejemplos 2

Cronograma

S5T#1S

T 1

# M 2.0TV BI

BCDR Q

&I 0.0M 2.0

C 1

CU CDS CV PVCV_BCDR Q

Q 4.02

C 1+60

2

Q 4.1S

R QC 1+75 2

S

R Q

Q 4.2S

R QC 1+80 2

M 1.0

M 1.1

M 1.2

Rojo

Verde

Naranja

S_ODT

#S_CDU

CMP==I

IN1IN2 Q

CMP==I

IN1IN2 Q

CMP==I

IN1IN2 Q

Ejemplo – Semáforo

> 5 <

1

0

1

0

Tiempo en sg.

Verde

Rojo

1

0Naranja Q 4.2

Q 4.0

Q 4.1

< 60 >

< 20

STL A I 0.1 AN M 2.0 L S5T#1S SD T 1 A T 1 = M 2.0 A M 2.0 CU C 1 *** L C 1 L 60 == I R Q 4.0 S Q 4.1 L C 1 L 75 == I S Q 4.2 L C 1 L 80 == I R Q 4.1 R Q 4.2 S Q 4.0 R C 1

Ejemplo – Señalización de Nivel de Llenado

Ejemplo STL

1

0

1

0

Tiempo

1

0Q 4.1

I 0.1

Q 4.0

1

0

1

0

I 0.0

I 0.1

15

10

5

I 0.0

I 0.2

8x 12x

A I 0.2 R C 4 A I 0.0 CU C 4 A I 0.1 CD C 4 L C 4 L 5 <= I = Q 4.1 L C 4 L 15 >= I = Q 4.0

Ocupación de las Entradas y Salidas: I 0.0 - Emisor de caudal, tubería de entrada I 0.1 - Emisor de caudal, tubería de salida I 0.2 - Pulsador para poner a “0” el contador Q 4.0 - Señalizador de nivel por debajo de 5 Q 4.1 - Señalizador de nivel por encima de 15 Del diagrama mostrado se podrá reconocer el estado del contador (= contenido del depósito) y su 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 4.1). El diodo luminiscente de salida Q 4.0 luce mientras se alcance o se sobrepase el límite superior (15). El diodo luminiscente de salida Q 4.1 luce mientras se alcance o se baje del límite inferior (5).

Se desea vigilar el llenado de un depósito, señalizando cuando se alcanza un límite superior (15) y un límite inferior (5). Cuando el depósito está totalmente vacío deberá ponerse a cero el contador de caudal C4.

Ejemplo – Generación de Señal Triangular

I 0.0

Q 4.0

C 22

S_CUDCU CD S CV PV CV_BCD R Q

IB 1

CMP==I

IN1

IN2 Q

&

&

F G 1 Hz

SRS

R Q

QB 5

T 22; M 20.0

M 20.1

0

Tiempo

1

0Q 4.0

M 20.0

AB 5

IB 1

1

0

1

0I 0.0 AWL

A I 0.0 AN M 20.0 L S5T#1S SD T 22 A T 22 = M 20.0 *** A M 20.0 AN Q 4.0 CU C 22 A M 20.0 A Q 4.0 CD C 22 AN I 0.0 R C 22 *** LC C 22 T QB 5 *** LC C 22 L IB 1 >= I S M 20.1 *** AN C 22 R M 20.1 *** A M 20.1 = Q 4.0

Automatización Industrial

Operaciones Matemáticas

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

Índice

• 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

Operaciones Aritméticas Básicas

• La estructura semántica de una operación aritmética es:

Cargar Dirección1Cargar Dirección2Función aritméticaTransferir Resultado

• Se contemplan las siguientes funciones aritméticas:

Funciones Aritméticas Tipo de datoINT DINT REAL

Suma +I +D +RResta -I -D -RMultiplicación *I *D *RDivisión /I /D /RDivisión con resto como resultado - MOD -

EN ENO

IN1OUT

Funcion

IN2

ENOUTIN1ENO

ADD_I

IN2

Representación General

Uso del Parámetro EN/ENO

Caja de instrucciones KOP(FC, FB, Move, Add, etc)

( )EN ENO

Si está activo (1), se ejecuta la instrucción de la caja.

Si no está activo (0), no seejecuta la instrucción.

Si está activo (1), indica que la instrucción se ejecutó sin error.

Si no está activo (0), no se llamóa la instrucción o no se produjola ejecución de la instrucción

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

EN = Entrada Enable ENO = Salida Enable

• Interpreta como valores a sumar los contenidosde las palabras de las partes bajas de los ACU1-2

• La suma 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 modifica

Suma de INT (+I)

Resta de INT (-I)• Interpreta como valores a restar los contenidos

de las palabras de las partes bajas de ACU1-2• Resta el valor del ACU1 del valor del ACU2• 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

L MW4L MW10+IT MW6

L MW5L MW11-IT MW7

ENOUTIN1ENO

ADD_I

IN2

ENOUTIN1ENO

SUB_I

IN2

Números Enteros Simples (I)

• Interpreta como valores a multiplicar los contenidos de las palabras de laspartes bajas de los acumuladores 1 y 2.

• 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

Multiplicación de INT (*I)

División de INT (/I)• Divide los contenidos de las partes bajas

de los acumuladores 1 y 2.• ACU2 es el dividendo y ACU1 el divisor• Devuelve en ACU1 cociente y resto (INT)• Los bits CC0 y CC1 indican si +, - o cero • Los bits OV y OS indican sobrepasamiento• Si divisor=0, dividendo=divisor= 0

CC0, CC1, Ov y OS se ponen a “1”

Dividendo15 0

/I

ACU231 16

(Irrelevante)

Divisor(Irrelevante)

CocienteResto

=

Antes

Después

ACU1

ACU1

Números Enteros Simples (II)

ENOUTIN1ENO

MUL_I

IN2

ENOUTIN1ENO

DIV_I

IN2

• Interpreta los valores de ACU1 y ACU2como valores en DINT

• La suma 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

Suma de DINT (+D)

Resta de DINT (-D)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Resta el valor del ACU1 del valor del ACU2• 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

L MD4L MD10+IT MD16

ENOUTIN1ENO

ADD_DI

IN2

Números Enteros Dobles (I)

ENOUTIN1ENO

SUB_DI

IN2

• Interpreta los valores de ACU1 y ACU2 como valores en DINT• El resultado de la multiplicación 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

Multiplicación de DINT (*D)

División de DINT (/D)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor)• 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)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor)• Almacena el resto en el ACU1

Números Enteros Dobles (II)

ENOUTIN1ENO

DIV_DI

IN2

ENOUTIN1ENO

MOD_DI

IN2

ENOUTIN1ENO

MUL_DI

IN2

• Las operaciones aritméticas de enteros afectan a los bits de estado CC1, CC0, OV y OS

Evaluación de los Bits de la Palabra de Estado

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

• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL• La suma 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

Suma de REAL (+R)

Resta de REAL (-R)• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL• Resta del valor del ACU1 el valor del ACU2• 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 (I)

ENOUTIN1ENO

ADD_R

IN2

ENOUTIN1ENO

SUB_R

IN2

• Interpreta los valores de ACU1 y ACU2 comovalores de tipo de dato REAL

• El producto 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• Si un operando no es REAL, retorna un valor no válido en ACU1 y CC0, CC1,

OV y OS se ponen a “1”

Multiplicación REAL (*R) L MD6L MD12*RT MD67

ENOUTIN1ENO

MUL_R

IN2

Números Reales (II)

División de REAL (/R)• Interpreta los valores de ACU1 y ACU2 como

valores de tipo de dato REAL• Divide el valor de ACU2 (dividendo)

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

ENOUTIN1ENO

DIV_R

IN2

L MD67L MD3/RT MD33

• Las operaciones aritméticas de reales afectan a los bits de estado CC1, CC0, OV y OS

Evaluación de los Bits de la Palabra de Estado

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

• 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

+ B#16#bb+ +/-w+ L#+/-d

Cargar Dirección1Adición ConstanteTransferir Resultado

Ejemplos:L Valor1+ B#16#21T Resultado1

L Valor2+ -33T Resultado2

Funciones Estructura semántica

L Valor3+ L#-1T Resultado3

Suma de Constantes al ACU1

• 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

Decremento (DEC n)

Cargar Dirección1Decrementar ValorTransferir Resultado

Incremento (INC n)

Cargar Dirección1Incrementar ValorTransferir Resultado

Ejemplos:L ValorInicialINC 5T ValorInicial

L ValorFinalDEC 7T ValorFinal

Decremento e Incremento

Estructura semántica

• 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

• La estructura semántica de una operación aritmética avanzada es:Cargar Dirección1Función matemáticaTransferir Resultado

EN ENO

IN OUT

Funcion

Operaciones Aritméticas Avanzadas

Representación General

• Existen las funciones trigonométricas:- seno (SIN)- coseno (COS)- tangente (TAN)

• La entrada es un ángulo en radianes enformato de número REAL en ACU1

Funciones Trigonométricas Ejemplo:La potencia eléctrica P=V*I*senϕL PHISINL Corriente*RL Tension*RT Potencia

EN OUT

IN ENO

SIN

EN OUT

IN ENO

TAN

Funciones Trigonométricas (I)

Funciones Arco• Existen las funciones arco:

- arco seno (ASIN)- arco coseno (ACOS)- arco tangente (ATAN)

• La entrada es un número REAL en ACU1• El resultado es un ángulo en radianes en ACU1

Ejemplo:Arco seno en gradosL 0.343ASINL 57.2958*RT Angulo_grados

EN OUT

IN ENO

ATAN

• Realiza la función

Exponencial en base e (EXP))1( ACUe

Ejemplo:L Valor_aLNL Valor_b*REXPT Potencia

abb ea ln=

Funciones Logarítmicas y Exponenciales

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

EN OUT

IN ENO

LN

EN OUT

IN ENO

EXP

Funciones Cuadrado y Raíz Cuadrada

Cuadrado (SQR)• Calcula el cuadrado del valor del ACU1

Ejemplo: Volumen cilindroL RadioSQRL Altura*RL 3.141592*RT Volumen

L MD 34SQRT MD 38

EN OUT

IN ENO

SQR hr2π

Raíz cuadrada (SQRT)• Extrae la raíz cuadrada del valor del ACU1

Ejemplo:L #aSQRL #bSQR+RSQRTT #c

22 bac +=

L M D10SQRTT MD 14

EN OUT

IN ENO

SQRT

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

INT

DINT

REAL

INVD (INV_DI)NEGD (NEG_DI)

ABSNEGR (NEG_R)

INVI (INV_I)NEGI (NEG_I)

ITD(I_DI)

DTR(DI_R)

RND+ (CEIL), RND- (FLOOR)RND (ROUND), TRUNC (TRUNC)

BTI (BCD_I)

ITB (I_BCD)

BTD (BCD_DI)

DTB (DI_BCD)

BCD3 dec.

BCD7 dec.

Operaciones de Conversión

Cargar Dirección1Función de conversiónTransferir Resultado

Conversión: Números en INT y DINTITD: Conversión de INT a DINT (I_DI)ITB: Conversión de INT a BCD (I_BCD)DTB: Conversión de DINT a BCD (DI_BCD)DTR: Conversión de DINT a REAL (DI_R)

Conversión: Números en BCDBTI: Conversión de BCD a INT (BCD_I)BTD: Conversión de BCD a DINT (BCD_DI)

L EW4BTIT MW20

L MD10DTRT MD30

EN ENO

IN OUT

Función

EN ENO

IN OUT

DI_R

EN ENO

IN OUT

BCD_I

Conversión de Enteros

Estructura Semántica

Conversión: Números REALRND: Convierte real a doble entero. Redondea a más próximo (ROUND)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)

L MD33RNDT MD69

EN ENO

IN OUT

ROUND

Conversión de Reales

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

Otras Operaciones de Conversión

Otras funciones de conversiónINVI: Complemento a uno de INT (INV_I)INVD: Complemento a uno de DINT (INV_DI)NEGI: Complemento a dos de INT (NEG_I)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)

EN ENO

IN OUT

ABS

Operaciones de Transferencia

Operación MOVE• Permite inicializar variables con valores determinados.• El valor indicado en la entrada IN se copia en el

operando indicado de la salida OUT. ENO y EN tienen el mismo estado de señal.

• Se puede copiar todos los tipos de datos de 8, 16 ó 32 bits de longitud.

EN ENO

IN OUT

MOVE

• 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

• El número de posiciones como parámetro

Cargar Numero_de_posicionesCargar Dato1Función desplazarTransferir Resultado

• Se pueden programar de dos formas:• El número de posiciones en ACU2

Cargar Dato1Fun. Desplazar Numero_de_posicionesTransferir Resultado

ENOUTINENO

Función

N

Operaciones de Desplazamiento y Rotación

Se contemplan las siguientes funciones de registro:Funciones de Registro Palabra Doble palabra

con nº posiciones con nº posiciones con nº posiciones con nº posicionescomo parámetro en ACU2 como parámetro en ACU2

Desplazar a la izquierda SLW n (SHL_W) SLW SLD n (SHL_DW) SLDDesplazar a la derecha SRW n (SHR_W) SRW SRD n (SHR_DW) SRDDesplazar con el signo SSI n (SHR_I) SSI SSD n (SHR_DI) SSDRotar a la izquierda - - RLD n (ROL_DW) RLDRotar a la derecha - - RRD n (ROR_DW) RRDRotar izqui. con CC1 - - RLDA -Rotar derecha con CC1 - - RRDA -

Funciones de Registro

Desplazamiento izquierda (palabra) SLW Desplazamiento izquierda (doble palabra) SLD

ACU1CC1

“0” CC1“0”

ACU1

Desplazamiento derecha (palabra) SRW

ACU1

CC1

“0”

Desplazamiento derecha (doble palabra) SRD

CC1“0”

ACU1

Desplazamiento con signo (palabra) SSI

ACU1

CC1S

Desplazamiento con signo (doble palabra) SSD

CC1S

ACU1

SHL_W

N

EN ENO

OINMW50

MW4 MW12(MW4 = 5)

* L MW50SLW 5T MW12

Desplazamientos

Rotar izquierda a través de CC1 RLDARotar a la izquierda RLD

CC1

ACU1

CC1

ACU1

Rotar a la derecha RRD

CC1

ACU1

Rotar a la derecha a través de CC1 RRDA

CC1

ACU1

ROR_DW

N

EN ENO

O

INMD60

MW6 MD50

(MW6 = 4)

* L MD60RRD 4T MD50

* Estado de señal del último bit desplazado:

Rotaciones

• 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

• Operación con constante

Cargar Valor1Cargar Valor2Función lógica sin constanteTransferir Resultado

• Se pueden programar de dos formas:• Operación sin constante

Cargar Dato1Operación lógica con constanteTransferir Resultado

Función

IN1EN ENO

OUTIN2

Operaciones Lógicas con Palabras

• 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

Operación digital AND

WAND_W

IN1EN ENO

OUTIN2MW20 MW30

MW10

L MW10L MW20AWT MW30

Operación Digital AND

• 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

Operación digital OR

WOR_W

IN1

EN ENO

OUTIN2MW44 MW34

MW32

L MW32L MW44OWT MW34

Operación Digital OR

• 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

Operación digital OR exclusiva

WXOR_W

IN1

EN ENO

OUTIN2MW28 MW24MW26

L MW26L MW28XOWT MW24

Operación Digital OR Exclusiva

L IW 0 // Valor 1L MW 144 // Valor 2AW // Operación lógicaT MW 146 // Resultado

Ejemplo 1

L MW 148AW W#16#807FT MW 150L MD 152OD DW#16#8000_F000T MD 156

L Valor1L Valor2AWL Valor3OWT Resultado

L Valor4L Valor5XOWAW W#16#FFF0T Resultado2

Ejemplos de Operaciones Lógicas con Palabras

Ejemplo 2

Ejemplo 3

Ejemplo 4

Automatización Industrial

Operaciones de Salto

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

Índice

Principios de Saltos

L C 10 CondicionL 50>IJC GR50 Salto condicionalPrograma Programa si no ........ se cumple condiciónJU SHAR

GR50: Programa en Programa si se etiqueta de salto cumple la condición

SHAR:

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

Salto

Etiqueta

Si se ejecuta el salto lasinstrucciones situadasentre el salto y la etiquetano se procesan

Introducción

Ejemplo:

Introducciones de SaltoOperaciones de Salto en STL

Salto si RLO = 1 y salva RLOEtiquetaJCB

Distribuidor de saltosEtiquetaJL

Bucle por saltoEtiquetaLOOP

Salto si overflow memorizadoEtiquetaJOS

Salto si overflowEtiquetaJO

Salto si resultado de operación inválidoEtiquetaJUO

Salto si resultado de operación menor o igual a 0EtiquetaJMZ

Salto si resultado de operación menor que 0EtiquetaJM

Salto si resultado de operación mayor o igual a 0EtiquetaJPZ

Salto si resultado de operación mayor que 0EtiquetaJP

Salto si resultado de operación distinto a 0EtiquetaJN

Salto si resultado de operación igual a 0EtiquetaJZ

Salto si BR = 0EtiquetaJNBI

Salto si BR = 1EtiquetaJBI

Salto si RLO = 0 y salva RLOEtiquetaJNB

Salto si RLO = 0EtiquetaJCN

Salto si RLO = 1EtiquetaJC

Salto InconcicionalEtiquetaJU

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.

JU CAS1.......

CAS1: A I 0.4R Q 4.1

AWL

Segmento 1

Segmento X

FUP

Segmento 1

JMP

CAS1

....

Segmento X

CAS1

R

Q 4.1

I 0.4

.

.

.

.

Instrucciones de Salto Incondicional

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.

A I 0.0JC CAS2....

CAS2: A I 0.4R Q 4.1

AWL

Segmento 1

Segmento X

FUP

Segmento 1

JMP

CAS2

I 0.0

Segmento X

CAS2

R

Q 4.1

I 0.4

.

.

.

.

Instrucciones de Salto Condicional

A I 0.0JCN CAS3....

CAS3: A I 0.4R Q 4.1

AWL

Segmento 1

Segmento X

FUP

Segmento 1

JMPN

CAS3

I 0.0

Segmento X

CAS3

R

Q 4.1

I 0.4

.

.

.

.

Salto Condicional (JC, JCN)

Salta si RLO = 1

A I 0.0A I 1.0JC NEW1

Salta si RLO = 0

A I 0.0A I 1.0JCN REC2

• 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 y almacénalo en RB

A I 0.0A I 1.0JCB NEW1

Salta si RLO = 0 y almacénalo en RB

A I 0.0A I 1.0JNB REC2

STL: Saltos Condicionales Basados en RLO

Salto Condicionales Basados en BR, OV, OS

• 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 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 Condicionales Basados en CC1 y CC0

CC0 CC1 Salto ejecutado0 0 JZ Salto si el resultado es Cero

JMZ Salto si cero o menor de ceroJPZ 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

• 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

STL: Saltos Condicionales Basados en CC1 y CC0

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 saltoJL END //Selector de “x” posicinesJU M0 //Si ACU1 tiene “0” salta a meta 0JU 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: Distribuidor de Saltos

Inicio del Contador de Bucle

Sección de Programaque va a ser ejecutadovarias veces

Decremento del Contador de Bucles

¿ Contador deBucle <>0 ?

NoContinuar

L +4 // cargar el contador de bucleNEXT:T MB10 // primera instrucción del bucle

. // bucle

. // bucle

. // bucle

. // bucle

. // bucleL MB10 // últimas instrucciones del bucleLOOP NEXT // salto a la etiqueta NEXT

En este ejemplo, el programa comprendidoentre NEXT y NEXT se ejecutará 4 veces.

STL: Función Bucle

STL: Función Bucle

Saltos Condicionados

JU M2

A I 0.0JC M1

BE

FC100

M1 -

M2 -

M3 -

?

A

B

AN I 0.1JC M1

A I 0.2= Q 4.0JU M2

M1 A I 0.3= Q 4.1

M2 A I 0.4= Q 4.2

Si No?

C

AN I 0.5JC M3

A I 0.6= Q 4.3

M3 A I 0.7= Q 1.4

Si No

?

D M4 AN I 2.0= Q 4.5

A I 2.1JC M4

Si

No

?A

Si

No

?B ?

C

Si

No

Si

No

Ejemplos de Saltos:Incidencia sobre TemporizadoresFC10 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 PrioritariaFC13 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

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

Ejemplos de Saltos: Mezcladora

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

DB10 0 S5T#1S 2 S5T#2S 4 S5T#3S 6 S5T#4S 8 S5T#5S

FC11 A I 1.0 L MW 10 SE T 20 A T 20 = Q 4.0 BE

OB1 CALL FC 10 CALL FC 11 BE

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: Lector de Alarmas

Ejemplos de Saltos: Cinta Transportadora

FC20 Nomb CINTA A I 0.0 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 AN I 0.1 Salto si es buena JC BUEN 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

I 0.0

MB 20

Reconocimientode pieza defectuosa

Expulsor

FC 14L IB 0JL OVERJU M0JU M1JU M2JU M3

OVER: L 0T QW 4BEU

M0: L -16SSI 2 //Desplazar con signo a derechaT QW 4BEU

M1: L 16SSI 2T QW 4BEU

M2: L -16SRW 2T QW 4BEU

M3: L 16SRW 2T QW 4

Ejemplos de Saltos: Saltos Distribuidos

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.

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

PLC’s Página 2 Curso 2009/10 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 3 Curso 2009/10 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 4 Curso 2009/10 Curso 2009/10

Ejemplo con Operaciones de Salto

PLC’s Página 5 Curso 2009/10 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 6 Curso 2009/10 Curso 2009/10

Operaciones de Salto condicional (II)

•  Ejemplo:

PLC’s Página 7 Curso 2009/10 Curso 2009/10

Operaciones de Salto condicional (III)

PLC’s Página 8 Curso 2009/10 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

¨¨¨¨¨¨¨¨

¨¨¨¨¨¨¨¨

L MB 10

LOOP PROX decrementa ACU1-L y salta si ACU1-L <>0

Segmento que se repite

PLC’s Página 9 Curso 2009/10 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 10 Curso 2009/10 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)

www.campusabierto.es Curso de Programación de Autómatas

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 ‐

Tipo Arranque Depende de laseñal arranque

Equivalente IEC

* TP: no se redispara con arranques próximos

www.campusabierto.es Curso de Programación de Autómatas

SI

SV

SE

SS

SA

Disparo

Reset

Tiempo

Valor booleano

Disparo

Reset

Tiempo

Valor booleano

Disparo

Reset

Tiempo

Valor booleano

Disparo

Reset

Tiempo

Valor booleano

1

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

2

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 1 s 2

10 s 3

Registros afectados: ACU 1, ACU 2

3

Carga de un valor de temporizaciónEjemplo:

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_900MS1 s 1S a 16M_39S10 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

4

Temporizador como impulso (SI)

Instrucción: SISi 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 T 2 //Empleamos el temporizador 2 como impulso U T 2 //Leemos la salida del temporizador = A 0.1 //Asignamos la salida del temporizador a la salida 0.1

5

Temporizador como impulso prolongado (SV)

Instrucción: SVSi 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

6

Temporizador como retardo a la conexión (SE)

Instrucción: SEEl 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ónU T 4 //Leemos la salida del temporizador= A 8.1 //Asignamos la salida del temporizador a la salida 8.1

7

Temporizador como retardo a la conexión (SS)

Instrucción: SSSi 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 temporizadorL S5T#32s //Introducimos un valor de temporización de 32 segundosSS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoriaU T 2 //Leemos la salida del temporizador= A 3.1 //Asignamos la salida del temporizador a la salida 3.1

8

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 temporizadorL S5T#32s //Introducimos un valor de temporización de 32 segundosSA T 7 //Empleamos el temporizador 7 como retardo a la desconexiónU T 7 //Leemos la salida del temporizador= A 1.1 //Asignamos la salida del temporizador a la salida 1.1

9

Elección del Temporizador adecuado

10

Borrado de un Temporizador AWL S7-300/400

Instrucción: R TEsta instrucción borra (reinicia) el temporizador indicado. El temporizador vuelve al estado dereposo, 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 temporizadorL S5T#2s //Introducimos un valor de temporización de 2 segundosSS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoriaU E 0.1 //Empleamos la entrada 0.1 como entrada de borradoR T 2 //Si la entrada 0.1 cambia de 0 a 1 el temporizador 2 se borraU T 2 //Leemos la salida del temporizador= A 3.1 //Asignamos la salida del temporizador a la salida 3.1

11

Re-arranque de un Temporizador AWL S7-300/400Instrucció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 impulsoU 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

Re-arranque de un Temporizador AWL S7-300/400Instrucció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 impulsoU 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.

13

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 1LC T 2 //introduce el valor del temporizador 2 en el ACU 1 enBCD

14

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.

15

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.

16

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.

17

Temporizadores SE y SI S7-300/400

U E 0.0 //Al activar el pulsador de marchaS A 4.2 //Encender el verdeU A 4.2 //Si se ha encendido el verdeL S5T#5S //Cuenta 5 segundosSE T 1 //Con el temporizador 1U T 1 //Y cuando acabes de contarS A 4.1 //Enciende el amarilloU A 4.1 //Si se ha encendido el amarilloL S5T#2S //Cuenta 2 segundosSE T 2 //Con el temporizador 2U T 2 //Y cuando acabes de contarS A 4.0 //Enciende el rojoR A 4.1 //Apaga el amarilloR A 4.2 //Y apaga el verdeU A 4.0 //Si se ha encendido el rojoL S5T#6S //Cuenta 6 segundosSE T 3 //Con el temporizador 3U T 3 //Cuando acabes de contarS A 4.2 //Enciende el verdeR A 4.0 //Y apaga el rojoU E 0.1 //Si se activa el pulsador de paroR A 4.0 //Apaga el rojoR A 4.1 //Apaga el amarilloR A 4.2 //Apaga el verdeBE

18

Temporizadores SE y SI S7-300/400

19

Automatización de un depósito AWL S7-300/400Se 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áticoU E 0.7 //Y está bien el reléU E 0.2 //Y está activo el nivel de abajoUN E 0.3 //Y no está activo el nivel de arribaS A 4.0 //Pon en marcha la bombaS A 4.1 //Y enciende la luz de marchaU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléUN E 0.2 //Y no está activo el nivel de abajoU E 0.3 //Y se ha activado el nivel de arribaON E 0.7 //O ha saltado el reléR A 4.O //Para la bombaR A 4.1 //Apaga la luz de marchaUN E 0.7 //Si ha saltado el relé= A 4.7 //Avísame con la luz de reléBE

20

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.

21

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áticoU E 0.7 //Y está el relé bienU E 0.2 //Y está activo el nivel inferiorUN E 0.3 //Y no está activo el nivel superiorS M 0.2 //Activa la marca 0.2S M 0.3 //Y activa la marca 0.3U E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienUN E 0.2 //Y no está activo el nivel inferiorU E 0.3 //Y se ha activado el nivel superiorON E 0.7 //O ha saltado el reléR M 0.2 //Desactiva la marca 0.2R M 0.3 //Y desactiva la marca 0.3UN E 0.7 //Si no está el relé= A 4.7 //Activa la luz de relé.

22

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.0O M 0.2 //O está activa la marca 0.2= A 4.0 //Pon en marcha la bombaU M 0.1 //Si está activa la marca 0.1O 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.0R M 0.1 //Y desactiva la marca 0.1BE

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.

23

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.0UN 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.0UN E 0.1R A 4.0R A 4.1 .......

24

Control cintas transportadoras AWL S7-300/400

Funcionamiento: Es un automatismo para seleccionar cajas por su tamaño. La cintatransportadora 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 quecuenten las cajas grandes y pequeñas, y que cuando lleguen a 7 cajas grandes y 5 pequeñas, sedetenga el proceso hasta que el operario sustituya los contenedores por otros vacíos y le dé a unpulsador de acuse de recibo.

25

Automatización de un sistemas de cintas AWL S7-300/400

//Activación de las cintasUN A 4.1 //Si no está activada la cinta intermedia= A 4.0 //que se activa la primera cintaU E 0.0 //Si sensor de llegada de caja a la cinta intermediaS A 4.1 //activar la cinta intermedia

//Selección por tamaño:

U E 0.1U E 0.2 //Si se activan los dos sensoresS M 0.0 //Es que es una caja grande, lo guardo en una marcaU E 0.2 //Cuando se activa el sensor de salida de la cintaFN 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 cajaU M 0.0 //y es grandeL S5T#5SSV T 1U T 1= A 5.0 //activo la cinta para grandes durante 5 seg.U M 0.2 //Cuando sale la cajaUN M 0.0 //y no es grandeL S5T#4SSV T 2U T 2= A 5.1 //activo la cinta para pequeñas durante 4 segU M 0.2 //Cuando sale la cajaR A 4.1 //Desactivo la cinta intermediaR M 0.0 //Reseteo la marca que me indica el tamaño

Automatización Industrial

Operaciones de Temporización

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

Índice

• 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

Introducción

Operaciones de TiempoOperació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 T

Parámetro AG S7-300 0 ... 127

Tipos de TemporizadoresImpulso

A I 0.0 L S5T#2S SP T 1

TT <T

Arrancar

Poner a 0

Salida Q

Impulso Prolongado

A I 0.1 L S5T#2S SE T 2

T

Arrancar

Poner a 0

Salida Q T T

Retardo a la Conexión

A I 0.2 L S5T#2S SD T 3

Arrancar

Poner a 0

Salida Q T T < T

Retardo a la Conexión

Memorizado

A I 0.3 L S5T#2S SS T 4

Arrancar

Poner a 0

Salida Q T T T

Retardo a la Desconexión

A I 0.4 L S5T#2S SF T 5

Arrancar

Poner a 0

Salida Q TT

Señal de entrada

tRetraso a la conexión (SD)

tImpulso prolongado (SE)

tImpulso (SP)

tRetraso a la conexiónmemorizado (SS)

tRetraso a ladesconexión (SF)

Tipos de Temporizadores

Elección del Temporizador Apropiado

<< T >>

ArrancarI 0.0

Poner a ceroI 0.1

Corre eltiempo

Estado en Q

Valor detemporizaciónBI, BCD

I 0.0

S5T#2S

I 0.1

DBW 6

QW 6

Q 4.0

ARRANCAR

A I 0.0L S5T#2S SD T 0

PONER A CERO

A I 0.1R T 0

CONSULTASDIGITALES

L T 0 T DBW 6 LC T 0 T QW 6

CONSULTASBINARIAS

A T 0 = Q 4.0

S_ODTS BI

TV BCD

R Q

T 0

Orden de las Instrucciones

Irrelevante Base detiempo

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

11 8 7 4 3 015 12

010110210

Código binario Base de tiempo Resolución Rango de tiempo00 10 ms 0.01segundos 10 Ms a 9S 990MS01 100 ms 0.1segundos 100 MS a 1M 39S 900MS10 1 s 1 segundo 1S a 16M 39S

11 10 s 10 segundos 10S a 2H 46M 30S

• Para fijar el valor de tiempo hay que respetar las siguientes reglas sintácticas- S5T#aHbbMccSdddMSsiendo: 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

Formato de la Palabra de Tiempo

Especificación del Tiempo (I)

• 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ónadecuado.

• 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 de Tiempo

Especificación del Tiempo como una ConstanteFormato: 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)

Especificación del Tiempo (II)

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 segundosL S5T#1m10ms; //Duración 1 minuto + 10 milisegundos

Especificación del tiempo comouna Variable

L S5T#10m; //Duración 10 minutosT MW 20; //Salvar la duración.......L MW 20; //Cargar el tiempo

- Constante S5TIME- Palabra de Datos DBW- Palabra de Entrada IW- Palabra de Salida QW- Palabra de Marca MW- ...

- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1

- - 0 1 0 0 1 10 0 1 1 0 0 1 1

- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1

DBW 10

IW 126

333.1

126

127

Configuración de la Palabrapara la Preselección delTiempo (333 x 0,1s)

Bits de Estado de los Temporizadores(en preselección sin significado) Base de Tiempos

Valor de Temporización (0..999 BCD)

Base de TiemposS_ODT

S BI

TV BCD

R Q

Preselección de Tiempo

B ase 0 1 2 3 B in a rio 0 0 0 1 1 0 1 1 F ac to r 0 ,0 1 s 0 ,1 s 1 s 1 0 s

Carga de una Temporización

Temporización enBinario

Temporización de tresdígitos en BCD

Base detiempos

Posiciones de bits ocupadas con “0”

Tiempo actual en T1

ACU 1

L T1 LC T1

Lectura de un Temporizador

Lectura de una TemporizaciónPalabra de Temporización Dual

DBW 1 L T 10T DBW 1

MW 2 L T 10T MW 2

QW 3 L T 10T QW 3

PW 4 L T 10T PW 4

T 10

0 0 0 0 0 0

L T 10

ACU 1

Valor de Temporización

15 10 9 0

15 10 9 0

S_ODTS BI

TV BCD

R Q

DBW 5 LC T 10T DBW 5

MW 6 LC T 10T MW 6

QW 7 LC T 10T QW 7

PW 8 LC T 10T PW 8

Palabra de Temporización Decimal (BCD)

T 10

0 0

LC T 10

ACU 1

Valor de Temporización15 13 12 10 9 0

Base deTiempo

15 13 12 11 8 7 4 3 0

Dual BCD

Base deTiempo

Valor de Temporización102 101 100

S_ODTS BI

TV BCD

R Q

Temporizador en modo ImpulsoCuadro FBD Parámetro Tipo de

datos Area de memoria

Descripción

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

Entrada de arranque

TV S5TIME I, Q, M, D, L o constante

Valor de temporización preseleccionado (margen: 0 – 9999)

R BOOL I, Q, M, D, L, T, C

Entrada de desactivación

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

5s

1

0

1

0

Estados deseñal

Tiempo en s

Q 4.5

I 0.0

T1

Q 4.5

I 0.0

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 ProlongadoCuadro FBD Parámetro Tipo de

datos Area de memoria

Descripción

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

Entrada de arranque

TV S5TIME I, Q, M, D, L o constante

Valor de temporización preseleccionado (margen: 0 – 9999)

R BOOL I, Q, M, D, L, T, C

Entrada de desactivación

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

t

1

0

1

0

Estados deseñal

Tiempo

Q 4.5

I 0.0

t

T2

Q 4.5

I 0.0

T2: Relé de tiempo con formación de 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ónCuadro FBD Parámetro Tipo de

datos Area de memoria

Descripción

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

Entrada de arranque

TV S5TIME I, Q, M, D, L o constante

Valor de temporización preseleccionado (margen: 0 – 9999)

R BOOL I, Q, M, D, L, T, C

Entrada de desactivación

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

9s

1

0

1

0

Estados deseñal

Tiempo en s

Q 4.5

I 0.0

9s

4

I 0.0

Q 4.5

T3

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 MemorizadoCuadro FBD Parámetro Tipo de

datos Area de memoria

Descripción

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

Entrada de arranque

TV S5TIME I, Q, M, D, L o constante

Valor de temporización preseleccionado (margen: 0 – 9999)

R BOOL I, Q, M, D, L, T, C

Entrada de desactivación

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

t

1

0

1

0Tiem po en s

Q 4.5

I 0.1

t

I 0.01

0

2

4

I 0.1

I 0.0 H 1

H 1Q 4.5

T 4

H 1: Relé auxiliar

H 1

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ónCuadro FBD Parámetro Tipo de

datos Area de memoria

Descripción

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

Entrada de arranque

TV S5TIME I, Q, M, D, L o constante

Valor de temporización preseleccionado (margen: 0 – 9999)

R BOOL I, Q, M, D, L, T, C

Entrada de desactivación

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

t

1

0

1

0Tiempo en s

Q 4.5

I 0.0

t

4

I 0.0

Q 4.5

T5

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

Representación Esquemática Explicación

L S5T#1S

SP T 17

A T 17

= Q 4.5

Programa Señal delTemporizador 17

0 1

n: Cantidad de ejecuciones del programatp: Tiempo de ejecución del programa

1s - n * tp

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

Forma de Cargar un Temporizador

Marcas de Ciclo (I)

Las marcas de ciclo cambian su estado binario periódicamenteLa relación impulso-pausa es 1:1La frecuencia está ajustada y es fijaHay definidas 8 frecuencias fijas que pueden almacenarse en un byte de marcasEl byte de marcas se parametriza en la configuración de la CPU

7 6 5 4 3 2 1 00.1 seg. (10 Hz)0.2 seg. (5 Hz) – parpadeo0.4 seg. (2.5 Hz) – intermitencia rápida0.5 seg. (2 Hz)0.8 seg. (1.25 Hz) – intermitencia1.0 seg. (1 Hz)1.6 seg. (0.625 Hz) – intermitencia lenta2.0 seg. (0.5 Hz)

Marcas de Ciclo (II)

Configuración en hardware de la CPU

Ejemplo – Generador de Impulsos

Cronograma Ejemplo

< 2s >

1

0

1

0Tiempo

M 2.0

I 0.0

< 2s > < 2s >

Se desea que la marca 2.0 funcione como un generador de impulsos de periodo 2 segundos

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

Cronograma

< 2s >

1

0

1

0

Tiempo

M 2.0

I 0.0

< 2s >

1

0

< 2s >

Q 4.0

Ejemplo Se desea una onda cuadrada de periodo 4s. Para ello utilizamos el generador de impulsos del ejemplo anterior y un divisor binario. Colocaremos la salida en la Q 4.0.

STL FBD 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 *** A M 2.0 AN M 1.0 S Q 4.0 A M 2.0 A M 1.0 R Q 4.0 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étricaCronograma Ejemplo

1

0

1

0

Tiempo

Q 4.0

Salida T2

1

0

1

0

1

0

1

0

I 0.0

Tiempo de Marcha T1

Salida T1

Tiempo de Marcha T2

Se desea que la salida Q 4.0 funcione como un generador de onda cuadrada asimétrica de 3s con valor “0” y 5s con valor “1”.

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

I 0.0

I 0.1 L

LQ 4.0

Y T ∆Q 4.1 Q 4.2

T

Y

T

STL FBD Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0

Q 4.0

>=1I 0.1

Q 4.0

&

I 0.0

Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0

S5T# 3S

T 1

S_ODTS BI

TV BCD

R Q

&

2

Q 4.0

Q 4.2

Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &

Q 4.0

Q 4.2

T1 Q 4.1

Segmento 4 Triángulo A Q 4.0 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2

&Q 4.1

T1

Q 4.2

>=1Q 4.2

&

Q 4.0

Ejemplo – Arranque Estrella/Triángulo IISTL FBD

Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0

Q 4.0

>=1I 0.1

Q 4.0

&

I 0 .0

Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0

S5T# 3S

T 1

S_ODTS BI

TV BCD

R Q

&

2

Q 4.0

Q 4.2

Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &

Q 4.0

Q 4.2

T1 Q 4.1

Segmento 4 Temporizador de Retardo A Q 4.0 AN Q 4.2 L S5T#100ms SD T 2 A Q 4.2 R T 2 NOP0 NOP0 NOP0

S5T# 100M S

T 2

S_ODTS BI

TV BCD

R Q

&

2

Q 4.0

Q 4.1

Q 4.2

Segmento 5 Triángulo A Q 4.0 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2

&Q 4.1

T2

Q 4.2

>=1Q 4.2

&

Q 4.0

STL FBD Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0

Q 4.0

>=1I 0.1

Q 4.0

&

I 0.0

Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0

S5T# 3S

T 1

S_ODTS BI

TV BCD

R Q

&

2

Q 4.0

Q 4.2

Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &

Q 4.0

Q 4.2

T1 Q 4.1

Segmento 4 Triángulo A Q 4.0 A I 0.3 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2

&Q 4.1

T1

Q 4.2

>=1Q 4.2

&

I 0.3

Q 4.0

SFB 3 TPGenerador de pulsos

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

Nombre Declaración Tipo dato DescripciónIN INPUT BOOL Entrada de arranquePT INPUT TIME Longitud del pulso o duración de esperaQ INPUT BOOL Estado del temporizadorET INPUT TIME Tiempo pasado

SFB 4 TONOn delay

SFB 5 TOFOff delay

Funciones de Tiempo en IEC

PLC’s Página 1 Curso 2009/10

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

Tema 2: Programación de PLCs

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

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

Simbólicos

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

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

Simbólicos

PLC’s Página 4 Curso 2009/10 Curso 2009/10

•  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

U E 124.0

FP M1.0

= A 124.1

•  El RLO sólo estará a 1 un tiempo de ciclo: en el que cambie.

M 1.0

RLO

E 124.0

Flancos

PLC’s Página 5 Curso 2009/10 Curso 2009/10

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

Temporizadores

PLC’s Página 6 Curso 2009/10 Curso 2009/10

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

Temporizadores

PLC’s Página 7 Curso 2009/10 Curso 2009/10

•  Resumen tipos temporizadores

Temporizadores

PLC’s Página 8 Curso 2009/10 Curso 2009/10

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

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

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

Temporizadores

PLC’s Página 9 Curso 2009/10 Curso 2009/10

•  Resumen tipos temporizadores

Temporizadores

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

•  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

Temporizadores

PLC’s Página 11 Curso 2009/10 Curso 2009/10

•  Inicialización: U E124.0 L S5T#10S L S5T#10S U E124.0 SI T0 SI T0

•  Consulta de la salida •  Ejemplo:

U T0 = A124.0

•  Reseteo de un temporizador • Ejemplo:

U E124.1 R T0

Temporizadores

PLC’s Página 12 Curso 2009/10 Curso 2009/10

•  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

T T T T

T

E X.x RLO

A-T0

Temporizadores

PLC’s Página 13 Curso 2009/10 Curso 2009/10

•  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

T T T T

E X.x RLO

A-T0

Temporizadores

PLC’s Página 14 Curso 2009/10 Curso 2009/10

•  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

T T T T

E X.x RLO

A-T0

T

Temporizadores

PLC’s Página 15 Curso 2009/10 Curso 2009/10

•  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

T T T

E X.x RLO

A-T0

T

Temporizadores

PLC’s Página 16 Curso 2009/10 Curso 2009/10

•  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

T T

E X.x RLO

A-T0

T T

Reset

Temporizadores

PLC’s Página 17 Curso 2009/10 Curso 2009/10

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

Temporizadores

PLC’s Página 18 Curso 2009/10 Curso 2009/10

•  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

Temporizadores

PLC’s Página 19 Curso 2009/10 Curso 2009/10

EJERCICIO (Entregable 2)

Se dispone de un semáforo, el cual en condiciones normales se encuentra del modo siguiente:

- Verde vehículos - Rojo Peatones.

En el mismo instante que un peatón accione sobre el pulsador situado en el semáforo, éste pasará a amarillo para vehículos, estado que durará durante 3 ‘‘. Finalizado este, pasara a estado rojo para vehículos y verde para peatones.

El tiempo de duración fijado para rojo vehículos: 6 ‘‘.

Finalizado el proceso, el semáforo regresará al estado normal.

Durante el tiempo de duración del ciclo, deberá evitarse que cualquier nueva activación sobre el pulsador verde, rearme el ciclo.

Press button

A124.0

A124.1

A124.2

E124.0

A125.0

A125.1

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:

Programación estructuradaProgramación estructurada 11DivDiv. Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y AutomáticaDivDiv. Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y Automática

Tema 6 Ejemplo

Ejemplo Programación Estructurada

Programación estructuradaProgramación estructurada 22

FB

Programación estructuradaProgramación estructurada 33

FB

Programación estructuradaProgramación estructurada 44

FC

Programación estructuradaProgramación estructurada 55

LLAMADA DESDE OB1

Programación estructuradaProgramación estructurada 66

Mutiinstancia

Supongamos que su tarea de automatización requiere otros 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.

MULTIINSTANCIAPara 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 FBsacceden a un único bloque de datos (aquí, el DB10).

Programación estructuradaProgramación estructurada 77

FB10

Programación estructuradaProgramación estructurada 88

DB10

Programación estructuradaProgramación estructurada 99

OB1

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 1 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Manual de formación

para soluciones generales en automatización

Totally Integrated Automation (T I A )

MÓDULO B4

Bloques de datos

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 2 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Este documento fue suministrado por SIEMENS Siemens A&D SCE (Tecnología en Automatización y Accionamientos, Siemens A&D, coopera con la Educación) para formación. Siemens no hace ningún tipo de garantía con respecto a su contenido. El préstamo o copia de este documento, incluyendo el uso e informe de su contenido, sólo se permite dentro de los centros de formación. En caso de excepciones se requiere el permiso por escrito de Siemens A&D SCE (Mr. Knust: E-Mail: [email protected]). 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.

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 3 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 4 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

1. INTRODUCCIÓN

El módulo B4 pertenece al contenido de las Funciones Adicionales de Programación STEP 7. 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)

Sistemas de Bus de Campo Industrial

2- 3 días Módulos D

Visualización de Procesos

2- 3 días Módulos F

Programación Secuencial

2- 3 días Módulos C

Comunicación IT con SIMATIC S7

1- 2 días Módulo E

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 5 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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 -

1 PC

2 STEP 7

4 SIMATIC S7-300

3 PC Adapter

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 6 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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:

Call FB1, DB10 UC FC2

OB = Bloque de Organización FB = Bloque de Función FC = Función DB = Bloque de Datos

DB de Instancia Solo datos locales al FB1

DB Global Para todos los FBs FCs OBs

L DB11.DBW0 BE

OB 1 DB 11 DB 10 FB 1

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 7 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 8 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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)

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 9 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 10 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

5. Seleccionar la carpeta Bloques. (→ Bloques)

6. Insertar un Bloque de Datos ( → Insertar → Bloque S7 → Bloque de Datos).

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 11 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 12 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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.

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 13 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

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.

Comentario para documentación ( opcional ).

Valor inicial en formato compatible con el tipo de dato seleccionado ( opcional ).

Tipo de dato asignado (ver tabla abajo) al registro.

Nombre simbólico con el que se accede a la dirección absoluta asignada.

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 14 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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 descripción

Tamaño

en Bits

Formato-Opciones

Rango y notación numérica

(Valores máximo y mínimo)

Ejemplo

BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE

BYTE (Byte) 8 Número Hexadecimal

B#16#0 a B#16#FF B#16#10

WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000

Número Hexadecimal

W#16#0 a W#16#FFFF W#16#1000

BCD C#0 a C#999 C#998

Número Decimal sin signo

B#(0,0) a B#(255,255) B#(10,20)

DWORD (Doble Palabra)

32 Número Binario 2#0 a 2#1111_1111_1111_1111_1111_1111_1111_1111

2#1000_0001_0001_1000_1011_1011_0111_1111

Número Hexadecimal

DW#16#0000_0000 a DW#16#FFFF_FFFF

DW#16#00A2_1234

Número Decimal sin signo

B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)

INT (Entero) 16 Número Decimal con signo

-32768 a 32767 1

DINT (Int,32 bit) 32 Número Decimal con signo

L#-2147483648 a L#2147483647 L#1

REAL (Número en coma flotante)

32 Número en coma flotante IEEE

Máximo: +/-3.402823e+38 Mínimo: +/-1.175495e-38

1.234567e+13

S5TIME (Tiempo Simatic)

16 Tiempo S7 en pasos de 10 ms

S5T#0H_0M_0S_10MS a S5T#2H_46M_30S_0MS and S5T#0H_0M_0S_0MS

S5T#0H_1M_0S_0MS S5TIME#1H_1M_0S_0MS

TIME (Tiempo IEC)

32 Tiempo IEC en pasos desde 1ms, entero con signo

-T#24D_20H_31M_23S_648MS a T#24D_20H_31M_23S_647MS

T#0D_1H_1M_0S_0MS TIME#0D_1H_1M_0S_0MS

DATE (Fecha IEC)

16 Fecha IEC en pasos de 1 día

D#1990-1-1 a D#2168-12-31 DATE#1994-3-15

TIME_OF_DAY (Fecha y Hora)

32 Tiempo en pasos de 1ms

TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3

CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 15 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 16 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 17 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 18 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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.

Tecnología en Automatización y Accionamientos -SCE

T I A Manual de Formación Página 19 de 18 Módulo B4

Edición: 02/2002 Bloques de Datos

Indice Notas Generando Bloques de Datos

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.

Automatización Industrial

Módulos de Función

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

Índice

Módulo que llama Módulo llamado(OB, FB, FC, SFB, SFC) (FB, FC, SFB, SFC)

Ejecución del Programa

Ejecución del ProgramaInstrucción que llama

a otro módulo(FB, FC, SFB, SFC)

Ejecución del Programa

Ejecución del Programa

Instrucción que llama a otro módulo

(FB, FC, SFB, SFC)

Llamada a Módulos

• 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

Llamada General “CALL”

Llamadas a Módulos (I)

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 llamarsecon la instrucción CALL

Llamadas a Módulos (II)

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

Llamadas a Módulos (III)

Caja de instrucciones STL(FC, FB, Move, Add, etc)

EN ENO

Si está activo (1), se ejecuta la instrucciónde la caja.

Si no está activo (0), no seejecuta la instrucción.

Si está activo (1), indica que la instrucción se ejecutó sin error.

Si no está activo (0), no se llamóa la instrucción o no se produjo lala ejecución de la instrucción

EN = Entrada Enable ENO = Salida Enable

Uso del Parámetro EN/ENO

Tabla deDeclaraciónde Variables

Sección deCódigo

Partes de un Módulo

• Los Datos Locales utilizados normalmente en un módulo son :

– Variables Temporales

– Parámetros

– Variables Permanentes o estáticas

Datos Locales

Dirección

Tipo de Declaración Tipo de Datos

Símbolo Valor Inicial

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 (I)

• 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 Comentario0.0 temp temporal1 INT 0 Variable temporal2.0 temp temporal2 REAL 0 Variable temporal

Variables Locales Temporales (II)

Dirección

Tipo de Declaración Tipo de Datos

Símbolo Valor Inicial

Comentario

Variables Locales Estáticas (I)

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

• 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 Comentario0.0 temp temporal1 INT 0 Variable temporal2.0 stat Total INT 0 Variable estática

Ejemplo:

Dirección Declaración Nombre Tipo0.0 temp In INT2.0 stat Total INT

Dirección Declaración Nombre Tipo0.0 temp In INT2.0 stat Total INT

FB “Totalizador” DB “TotalizadorDato”

L #InL #Total+IT #Total

Variables Locales Estáticas (III)

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.

Instrucción que llama a otro módulo

Programa Principal Módulo Subrutina

Ejecucióndel programa

Ejecución delPrograma

OB1 FC

Funciones FC´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.

Llamada a unmódulo con los parámetrosactualesEjemplo:

Call FB1,DB10

Área de Declaración Local

Sección de Códigodel módulo llamadousando los valoresdel área dememoria local.

DB10 FB1

Copia la parte de declaración local del FB

Módulos de Función FB´s

• Los parámetros de un módulo representan el interfaz entre el modulo que llama yel 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

Declaración de los Parámetros:

Parámetros de Funciones

Progr. en módulo que llama

// Primera llamada

CALL “Adder”Numb_1 := MW 30Numb_2 := MW 32Numb_3 := MW 34Result := MW 40

// Segunda llamada

CALL “Adder” Numb_1 :=DB 10.DBW 30Numb_2 :=DB10.DBW 32Numb_3 :=DB10.DBW 34Result :=DB10.DBW 40

Progr. en módulo llamado

#L Numb_1

#L Numb_2

I+

#L Numb_3

+I

#T Result

Programa ejecutado

// Primera llamadaL MW 30L MW 32+IL MW 34+IT MW 40

// Segunda llamadaL DB 10.DBW 30L DB10.DBW 32+IL DB10.DBW 34+IT DB10.DBW 40

Parámetrosformales

Parámetrosactuales

Parámetrosdel módulo

Procesamiento de los Parámetros

Dirección

Tipo de Declaración Tipo de Datos

Símbolo Valor Inicial

Comentario

• 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

Declaración de Parámetros

• Los tipos de parámetros los clasifica en: datos simples, datos compuestos y parámetros

Parámetros Formales

Parámetros Formales: Tipos de Datos (I)

Tipo BOOL

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 (II)

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_DBCALL FB 10.#Data

El usuario debe asegurar que #Data es elDB de instancia del FB 10

Parámetros Formales: Tipos de Datos (III)

• 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

• Son permitidos como parámetros actuales de tipos de datos básicos:

Parámetros Actuales: Tipos de Datos Básicos

Llamada a módulo (FC, FB)

Tabla de Declaración

Valor_1

Valor_2

Valor_Total

Input

Output

In/Out

Call FC10Medida_1:=Valor_1Medida_2:=Valor_2Medida_Total:= Valor_Total

Paso de Parámetros de un módulo lógico a otro

Módulo llamado (FC, FB)

Tabla de Declaración

Medida_1

Medida_2

Medida_Total

Input

Output

In/Out

Acceso y Restricciones de los Parámetros de Paso

• Combinaciones posibles en el paso de parámetros de módulos:

E = Tipos de datos elementalesC = Tipos de datos complejosP = Parámetros tipo TIMER, COUNTER y BLOCK_xx

Paso de Parámetros entre módulos

FC1 (Cálculo)OB1

FC1

Entrada1

Entrada2

Entrada3

Salida_A

FC1

Entrada1

Entrada2Entrada3

Salida_A

MW5

3369

MW10

AW12

AW20MW2

6869

MW16

SUB_I

IN1IN2

O

ADD_I

IN1IN2

O #TEMP1#Entrada1#Entrada2

#TEMP1#Entrada3

#Salida_A

0.0

2.0

4.06.0

8.0

Entrada1

Entrada2

Entrada3

Salida_A

TEMP1

in

in

in

out

temp

int

int

int

int

int

muestra 1

constante

distanciaresultado

intermedia

#Entrada1 , si es variable local”Entrada1" , si es variable global (simbólico)

Parámetros y Variables Locales (I)

EN ENOFB7DB45

Llama al FB7 (utilizandoun Módulo de Datosa instancia DB45) y le pasa los parámetros

CALL FB7, DB45Comenzar:=I 1.0Parar:=I 1.1Longitud:=MW 20Correr:=M2.1Parámetros “Formales”

del FB

Direcciones “Actuales” donderesiden los datos o se almacenarán

I 1.0I 1.1

MW20

ComenzarPararLongitud

Correr M2.1

STL

FBDLlama al FB7 (utilizandoun Módulo de Datosa instancia DB45) y le pasa los parámetros

Parámetros “Formales”del FB

Direcciones “Actuales”donde residen los datoso se almacenarán

Parámetros y Variables Locales (II)

• 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 Función y Módulos de Datos

• 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 Instanciapermanecerán después de cerrar el FB.

=

Módulos de Datos 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ónusando la memoria local

Sección de Código

Tabla de Declaraciónusando la memoria local

Sección de Código

Uso de un FB sin DB a Instancia

• 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

Dirección de datos Localizado en DB abierto vía el Registro DB Registro DI

Bit DBX y.x DIX y.xByte DBB y DIB yPalabra DBW y DIW yDoble palabra DBD y DID y

Direcciones de Datos

Direccionamiento Completo

• En este caso hay que conocer las direcciones absolutas que el editor asigna a las variables. Poco recomendable.

Direccionamiento Absoluto de Direcciones de Datos

Módulos de Función y Módulos de Datos (II)

Operaciones con Módulos de Datos

Módulos de Datos (I)

Abrir Módulos de Datos

• OPN DB x• OPN DB nombre• OPN DI x• OPN DI nombre

Direccionamiento PartidoOPN DB 25L DBW 10

Direccionamiento CompletoL DB25.DBW 10

Cambio los Registros de los Módulos de DatosCDB

Longitud y Número de DB´s

L DBLG // longitud de un DBL DBNO // número de un DBL DILG // longitud de un DIL DINO // número de un DI

Funciones del Sistema para DB´s

SFC 22 CREAT_DB. //Crea un módulo de datosSFC 23 DEL_DB // Borra un módulo de datosSFC 24 TEST_DB // Test de un módulo de datos

Módulos de Datos (II)

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

FB que ejecuta las instrucciones

lógicas

FB que manejala sección del módulode datos a instanciaque mantendrá losúltimos parámetros

Módulo de DatosMulti-instancia

asociado a un FBUsar este área primero

Usar este área después

Usar este área después

Segmentos dentrodel DB que contendránlos datos separados delos parámetros pasados

Módulos de Datos Multi-Instancia (I)

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 (II)

Variables usadas:setpoint_value: realsum: realactual_value: real

Módulo de control FB 101 FB 100 con múltiples llamadas al FB101

DB Multi instancia

Módulos de Datos Multi-instancia (III)

PLC’s Página 1 Curso 2009/10

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)

Tema 2: Programación de PLCs

PLC’s Página 2 Curso 2009/10

  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

Introducción

Sistema operativo

OB1

FC

FB

SFC

SFB

Otros OBs

FC

FB

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

Modularización de tareas: –  Las tareas parciales se solucionan

con sus propios módulos –  La asignación de parámetros

flexibiliza la programación •  Ejemplo: Ciclo de taladro con

profundidad asignable por parámetro

Reutilización de los Módulos: –  Los Módulos pueden llamarse

tantas veces como se necesite –  Restricciones:

•  no se tiene acceso a direcciones globales

OB 1

Motor 1

FB1

Válvulas

FB2

Controlador

FB10

FC 5 Valor límite Copia

SFC

. . .

.

.

CALL FB1, DB2 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A12.0 Velocidad :=AW14

.

.

FB 1 Direc. Decl. Nombre Tipo 0.0 in Marcha BOOL 0.1 in Paro BOOL 2.0 out Motor_on BOOL 4.0 out Velocidad INT 6.0 stat Veloc_ant INT 0.0 temp Calc_1 INT

.

.

. U #Marcha UN #Paro = #Motor_on .

DB 2 OB 1

Introducción

PLC’s Página 4 Curso 2009/10 Curso 2009/10

Propiedades

Móduo de Organización (OB)

- interfase para el usuario - prioridades graduadas (0 a 27) - información de inicio específica en la pila de datos locales

Tipo de Módulo

Módulo de Función (FB) - parametrizable (los parámetros pueden asignarse en una llamada) - con (rellamada) memoria (variables estáticas)

Función (FC) - parametrizable (los parámetros deben asignarse en la llamada) - básicamente sin memoria (sólo variables temporales)

Bloque de Datos (DB) - almacenamiento estructurado de datos locales (DB de instancia) - almacenamiento estructurado de datos globales (válido en todo el programa)

Módulos de Función del Sistema (SFB)

- FB (con memoria) guardado en el sistema operativo de la CPU y llamable por el usuario

Función del Sistema (SFC)

- función (con memoria) guardada en el sistema operativo de la CPU y llamable por el usuario

Bloques de Datos del Sistema (SDB) - bloque de datos para datos de configuración y parámetros

Introducción

PLC’s Página 5 Curso 2009/10 Curso 2009/10

Variables temporales • se borran después de la ejecución del bloque asociado

• almacenamiento temporal en la L stack

• utilizables en OBs / FCs / FBs

Varibales estáticas • se mantienen incluso después de que sea ejecutado el bloque

• almacenamiento permanente en DBs.

• solo se pueden usar en FBs

Variables/Datos Locales (sólo válidos en un bloque)

Variables/Datos Globales (válidos en todo el programa)

• PAE / PAA

• E / A • M / T / Z

• Áreas de DB

simbólico absoluto

Acceso

Introducción

PLC’s Página 6 Curso 2009/10 Curso 2009/10

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

Introducción

PLC’s Página 7 Curso 2009/10 Curso 2009/10

"Motor" EN ENO

Marcha

Dir. Decl. Nombre Tipo Valor inicial ... 0.0 in Marcha BOOL FALSE 0.1 in Paro BOOL TRUE 2.0 in Velocidad INT 0 2.0 out Motor_on BOOL FALSE 8.0 out Consigna INT 0 10.0 inout EMER_OFF BOOL FALSE ... stat ... ... ... ... temp .. ... ...

Consigna

EMER_OFF

Motor_on Paro Parámetros

de entrada

Parámetros In/Out

Parám. de Salida

Los parámetros son canales para transferir información:

–  Parámetros de Entrada (In): –  Parámetros de Salida (Out): –  Parámetros E/S (In/Out):

Los parámetros de un módulo: –  Están en la sección de código

como variables "locales" –  Pueden tener cualquier tipo de

dato

Velocidad

Introducción

PLC’s Página 8 Curso 2009/10 Curso 2009/10

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

Bloques de organización

PLC’s Página 9 Curso 2009/10 Curso 2009/10

OB 10...17 (Alarmas horarias)

OB 80...87 (Errores Asíncronos)

OB 20...23 (Alarmas de retardo)

Ejecución Periódica De un programa

OB 30...38 (Alarmas Cíclicas)

Ejecución del programa Sujeta a eventos

OB 40...47 (Alarmas de Proceso)

Arranque

OB 102

OB 100

OB 101

Ejecución Cíclica del Programa

OB 1

OB 121, 122 (Errores Síncronos)

OBs de Alarma Error OBs

Bloques de organización

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

Ej. OB82 (Prio.26) = Manejo de Error. Ejecutado en el caso de rotura de un hilo en la entrada analógica PEW 352

Ej. OB10 (Prio.2) = Alarma Horaria. Ejecutada una vez Por minuto desde las 9:30 El

OB1 Se ejecuta contínua- mente .....

Prioridad OB 1

3 Alarma Horaria

Alarma Cíclica

1

16 Manejo de Error

Programa Cíclico

Alarma de retardo

Alarma de proceso

2

12

26 / 28

OB 20

OB 40

OB 10

OB 35

OB 82

Nº OB Tipo de OB

Ej. OB20 (Prio.3) = Alarma de retardo. La ejecución comienza 3.25s después de la detección de un objeto.

...... Hasta que es interrumpido por otro OB

Bloques de organización

PLC’s Página 11 Curso 2009/10 Curso 2009/10

Lectura de la PAE

Ejecución del OB1

Escritura de la PAA

Rearranque Completo

automatico manual

S7-300 / 400

Alimentación

S7-300

STOP->RUN

S7-400 STOP->RUN

+ CRST

Borrado de la imagen de proceso, M, T, Z no remanentes

Ejecución del OB 100

Habilitación de Salidas

C I C L O

Bloques de organización: OB de Arranque

PLC’s Página 12 Curso 2009/10 Curso 2009/10

•  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 Módulo Subrutina

Ejecución del programa

Ejecución del Programa Instrucción que llama

a otro módulo

OB1 FC

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

Funciones

PLC’s Página 13 Curso 2009/10 Curso 2009/10

Módulos parametrizables: –  tantos parámetros de entrada,

salida, y entrada/salida como se necesiten.

–  sin memoria, p.e. sólo variables temporales

–  sin acceso a variables globales y direcciones absolutas

–  con los mismos parámetros de entrada devuelven el mismo resultado

–  Amplían el juego de instrucciones del procesador

Ejecución del programa

CALL FC 10 On_1 := E 0.1 On_2 := E 0.2 Off := A8.0

Function FC10

in On_1 BOOL in On_2 BOOL out Off BOOL ...

... U #On_1 U #On_2 = #Off ...

Funciones

PLC’s Página 14 Curso 2009/10

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

Funciones: sin parámetros

PLC’s Página 15 Curso 2009/10

•  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

Funciones: con parámetros

PLC’s Página 16 Curso 2009/10

•  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

Funciones: con parámetros

PLC’s Página 17 Curso 2009/10 Curso 2009/10

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

Funciones

PLC’s Página 18 Curso 2009/10

•  Es un bloque con memoria. Tiene asociado un bloque de datos DB de instancia, de tal forma que en cada nueva llamada se puede conservar el valor de las variables internas de la función. Esto no era posible en FCs

Llamada a un módulo con los parámetros actuales Ejemplo:

Call FB1,DB10

Área de Declaración Local

Sección de código del módulo llamado usando los valores del área de memoria local.

DB10

FB1

Copia la parte de declaración local del FB

Bloques de función

PLC’s Página 19 Curso 2009/10 Curso 2009/10

FB 5

in Marcha BOOL in Paro BOOL out Motor_on BOOL out Velocidad INT stat ... Temp...

... U #Marcha UN #Paro = #Motor_on ...

•  Módulos parametrizables: –  tantos parámetros de entrada,

salida y entrada/salida como se necesiten

–  con memoria, es decir, con variables estáticas (también puede haber temporales)

–  Llamada con área de datos propia (instancia)

•  Aplicación: –  Funciones de temporización y

contadores –  Unidades de control de procesos

con estados internos •  calderas •  motores, válvulas, etc.

CALL FB5, DB16 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A8.0 Velocidad :=AW12

0.0 Marcha BOOL 0.1 Paro BOOL 2.0 Motor_on BOOL 4.0 Velocidad INT

DB 16

Motor

Es necesario

Bloques de función

PLC’s Página 20 Curso 2009/10

•  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

Bloques de función

PLC’s Página 21 Curso 2009/10

•  Mediante la llamada con varias instancias de un FB se pueden controlar varios equipos con el mismo FB

Bloques de función

PLC’s Página 22 Curso 2009/10

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

Bloques de datos

PLC’s Página 23 Curso 2009/10

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

Bloques de datos globales

PLC’s Página 24 Curso 2009/10 Curso 2009/10

DB 99 "Valores" Acceso Tradicional

Acceso Total

o L DB99.DBB1 o L “Valores".Estados

o U DB99.DBX0.0 o U “Valores".Estado

o L DB99.DBW2 o L “Valores".Numero

o L DB99.DBD4 o L "Valores".Peso[1]

absoluto simbólico

AUF DB 99 L DBB 1

1.0 Estados BYTE AUF "Valores" U DBX 0.0

0.0 Estado BOOL

AUF "Valores" L DBW 2

2.0 Numero INT

4.0 Peso[1] REAL

AUF DB 99 L DBD 8 8.0 Peso[2] REAL

Dir. Nombre Tipo

Bloques de datos globales

PLC’s Página 25 Curso 2009/10

AUF DB 19 L DBB 1 Cargar el byte de datos 1. L DBW 2 Cargar la palabra de datos 2 (byte 2/3). L 5 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).

Abrir módulo de datos Carga y transferencia en módulos de datos

Bloques de datos globales

PLC’s Página 26 Curso 2009/10

•  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

Bloques de datos de instancia

PLC’s Página 27 Curso 2009/10 Curso 2009/10

• CALL FC1 • UC FC1 • CC FC1

AWL

KOP FC1

EN ENO

( CALL )

FB

sin param., sin DB inst.

• UC FB1 • CC FB1

FB1 EN

ENO

FB1 EN ENO

Con parámetros

• CALL FC2 Par1: ... Par2: ... Par3: ...

FC2 EN ENO

Par3

Par1

Par2

FC2 EN

ENO

Par1

Par2

Par3

Con param., con DB inst.

• CALL FB2, DB3 Par1: ... Par2: ... Par3: ...

FB2 EN ENO

Par3

Par1 Par2

DB3

FB2 EN

ENO

Par3

Par1

Par2

DB3

Sin parámetros Len- guaje

FC

FC1

Resumen

PLC’s Página 28 Curso 2009/10 Curso 2009/10

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:

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

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

PLC’s Página 29 Curso 2009/10 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.

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

L 8

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=37217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=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

L 2 Carga un número L KF+2 Carga un número

T MW 33 Guardar en la palabra de marcas 33

T MW 33 Guardar en la palabra de marcas 33

L T [MW33] Carga en valor de tiempo actual del temporizador 2

B MW33 Elabora la palabra de marcas 33

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 = 1:

B MW33 Elabora la palabra de marcas 33

Sólo funciona, si FC2 no tiene parámetros

SPB FC0 Llamada al FC2 si VKE = 1: 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 Byte4, Bit 5

L KF +4 Carga el número de 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 Byte2, Bit 0

L KF +2 Carga el número de Byte

T MD44 Se guarda en la doble palabra de marcas 44

L KF +0 Carga el número de Bit

U E [MD44] Consulta de la entrada 2.0 para saber si vale "1"

SLW 8 Desplaza el número de Bit al Byte alto

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 palabra de marcas 2

B MW44 Edita la palabra de 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):

SI T[MW2] // El número de temporizador se encuentra en la palabra de marcas 2, codificado en hexadecimal.

SI T[DBW2] // El número de temporizador se encuentra en la palabra del módulo de datos 2, 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

L 4

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

descripción Tamaño

en Bits

Formato-

Opciones

Rango y notación numérica

(Valores máximo y mínimo)

Ejemplo

BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE

BYTE (Byte) 8 Número

Hexadecimal

B#16#0 a B#16#FF B#16#10

WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000

Número

Hexadecimal

W#16#0 a W#16#FFFF W#16#1000

BCD C#0 a C#999 C#998

Número Decimal

sin signo

B#(0,0) a B#(255,255) B#(10,20)

DWORD (Doble

Palabra)

32 Número Binario 2#0 a

2#1111_1111_1111_1111_1111_1111

_1111_1111

2#1000_0001_0001_1000_10

11_1011_0111_1111

Número

Hexadecimal

DW#16#0000_0000 a

DW#16#FFFF_FFFF

DW#16#00A2_1234

Número Decimal

sin signo

B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)

INT (Entero) 16 Número Decimal

con signo

-32768 a 32767 1

DINT (Int,32 bit) 32 Número Decimal

con signo

L#-2147483648 a L#2147483647 L#1

REAL (Número en

coma flotante)

32 Número en coma

flotante IEEE

Máximo: +/-3.402823e+38

Mínimo: +/-1.175495e-38

1.234567e+13

S5TIME

(Tiempo Simatic)

16 Tiempo S7 en

pasos de 10 ms

S5T#0H_0M_0S_10MS a

S5T#2H_46M_30S_0MS and

S5T#0H_0M_0S_0MS

S5T#0H_1M_0S_0MS

S5TIME#1H_1M_0S_0MS

TIME

(Tiempo IEC)

32 Tiempo IEC en

pasos desde

1ms, entero con

signo

-T#24D_20H_31M_23S_648MS a

T#24D_20H_31M_23S_647MS

T#0D_1H_1M_0S_0MS

TIME#0D_1H_1M_0S_0MS

DATE

(Fecha IEC)

16 Fecha IEC en

pasos de 1 día

D#1990-1-1 a D#2168-12-31 DATE#1994-3-15

TIME_OF_DAY

(Fecha y Hora)

32 Tiempo en pasos

de 1ms

TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3

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.

Automatización Industrial

Direccionamiento en STEP 7

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

Índice

La dirección del operando se encuentra codificada en la operaciónEjemplo: L MW 122; A I 1.2

Direccionamiento Directo

El valor del operando está codificado directamente en la operaciónEjemplo: L W#16#3478

Direccionamiento Inmediato

• Direccionamiento Inmediato• Direccionamiento Directo• Direccionamiento Indirecto

Tipos de Direccionamiento

Tipos de Direccionamiento

El operando indica la dirección del valor que va a procesar la operación.Ejemplo: A I[MD 2];

Direccionamiento Indirecto

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 Inmediato

Direccionamiento Inmediato

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

Direccionamiento Directo

Área Ejemplo Tipo de Acceso Descripción

I I 0.0 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de EntradasQ QB 4 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de SalidasPI PI W 10 Byte, Palabra, Doble palabra Entradas de periferiaPQ PQ D 24 Byte, Palabra, Doble palabra Salidas de periferiaM M 100.0 Bit, Byte, Palabra, Doble palabra MarcasT T 15 - TemporizadoresC C 80 - ContadoresDB DBX0.0 Bit, Byte, Palabra, Doble palabra Datos de un DB globalDI DIW20 Bit, Byte, Palabra, Doble palabra Datos de un DB de instanciaL LB 34 Bit, Byte, Palabra, Doble palabra Datos locales

Direccionamiento Directo

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

Número de 16 bitsIndirecto por MemoriaTemporizadores (T), Contadores (C ), Funciones (FC´s), Bloques Funcionales (FB´s), Boques de Datos (DB´s)

Puntero de ÁreaIndirecto por Memoria Indirecto por Registro

E/S de Periferia, Entradas, Salidas, Bits de Memoria, Datos Globales, Datos de Instancia, Datos Locales, Datos Temporales

PunteroDireccionamientoDirecciones que pueden ser especificadas de Modo Indirecto

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

Un puntero se usa para apuntar a una dirección

Punteros

Tipos de Punteros

Punteros a Área (I)

El puntero a área contiene la dirección y es posible también el área direccionada:

Definición

1. Intraárea (Área Interna): El puntero no especifica el área direccionada2. Interárea (Área Cruzada): El puntero especifica el área direccionada

Tipos de Punteros a Área

1. Intraárea (Área Interna): P#y.x Ejemplo: P#22.02. Interárea (Área Cruzada): P#Zy.x Ejemplo: P#M22.0

Notación Constante

• x=dirección bit; y=dirección byte, Z=áreaCon el área se especifica el identificador de la dirección

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 Marcas100 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 ByteXXX Dirección Bit

Puntero aInterárea

Punteros a Área (II)Puntero aIntraárea

Byte n+2

Dirección byte Dirección bit

1 0 0 0 0 R R R 0 0 0 0 0 y y y y y y y y y y y y y y y y x x x

Byte n Byte n+1 Byte n+3

Área operando

Dirección byte Dirección bit

0 0 0 0 0 0 0 0 0 0 0 0 0 y y y y y y y y y y y y y y y y x x x

Byte n Byte n+1 Byte n+2 Byte n+3

Punteros a DB

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.

Definición

P#DataBlock.DataAddress Ejemplo: P#DB10.DBX 20.5

Notación Constante

Número deBloque de Datos

Puntero aÁrea

Byte n+5

Byte n+4

Byte n+3

Byte n+2

Byte n+1

Byte nPuntero a DB

Punteros ANY (I)

Un puntero ANY, además de un puntero a DB, contiene un tipo de datos y un factor de repetición.

Definición

1. Variables con Tipos Datos: El puntero contiene un puntero DB2. Variables con Tipos Parámetros: El puntero contiene un número (temporizadores,

Contadores y Bloques)

Tipos de Punteros ANY

1. Variables con Tipos Datos: P#[Bloque de Datos.] Dirección Tipo Cantidad2. Variables con Tipos Parámetros : L#Número Tipo Cantidad

Notación Constante

P#DB11.DBX 30.0 INT 12 ; Área con 12 palabras en DB11 desde DBB30

P#M 16.0 BYTE 8 ; Á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

Ejemplos:

Punteros ANY (II)

Byte n+5

Byte n+4

Byte n+3

Byte n+2

Byte n+1

Byte n

Número deBloque de Datos

Puntero aÁrea

Cantidad

Tipo

16#10

Byte n+9

Byte n+8

Byte n+7

Byte n+6

16#0000

Número

Cantidad

Tipo

16#10

Tipo

16#00

16#0000

Número

Cantidad

Tipo

16#10

16#0000

Puntero ANYpara Tipos Datos

Puntero ANYpara Temp/Cont

Puntero ANYpara Bloques

Campo Tipo en el Puntero ANY

Tipos de Datos Tipos de DatosElementales Complejos01 BOOL 0E DT02 BYTE 13 STRING03 CHAR Tipos Parámetro04 WORD 17 BLOCK_FB05 INT 18 BLOCK_FC06 DWORD 19 BLOCK_DB07 DINT 1A BLOCK_SDB08 REAL 1C COUNTER09 DATE 1D TIMER0A TOD0B TIME Puntero Cero0C S5TIME 00 NIL

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.

Direccionamiento Indirecto por Memoria (I)

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

Los Punteros de Palabra contienen números y se utilizan para direccionar elementos como:• Temporizadores (T)• Contadores (C )• Bloques de Datos (DB´s)

Formato del Puntero de Palabra

• Funciones (FC´s)• Bloques de Función (FB´s)

• Marcas (MW)• Datos Locales (LW)

• Bloques de Datos Globales (DBW)• Bloques de Datos Instancia (DIW)

Direccionamiento Indirecto por Memoria con Número

Direccionamiento Indirecto por Memoria (IV)

L 133 //cargar puntero en ACU1T MW 20 //salvar en palabra de memo.OPN DB[MW20] //abrir DB global.....SP T[MW 20] //arrancar temporizador

OPN DB [MW 20]

133

MW 20

OPN DB 133

Direccionamiento Indirecto por Memoria con Puntero a Área

L P#30.0 //cargar puntero en ACU1T MD 10 //salvar en palabra dobleL MW[MD10] //asignar dirección digital.....A M[MD 10] //asignar dirección binaria

A M [MD 10]

P#30.0

MD 10

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 e Intraárea

LAR1 P#10.0 //cargar puntero dir. reg. 1.......T MW[AR1,P#4.0] //asignar dirección digital.....A I[AR1,P#2.1] //asignar dirección binaria

Direccionamiento Indirecto por Registro e Interárea

LAR1 P#M12.0 //cargar puntero dir. reg. 1......L B[AR1,P#4.0] //asignar dirección digital.....= [AR1, P#0.7] // asignar dirección binaria

A I [AR1, P#2.1]

P#10.0AR1

A I 12.1

P#2.1

+

L B [AR1, P#4.0]

P#M12.0AR1

L M B 16.0

P#4.0

+

Direccionamiento Indirecto por Registro (III)

Operaciones relacionadas con AR1 y AR2

Operaciones Relacionadas con los Registros

Transfiere contenido del AR1 en registro de direcciones AR2.AR2TAR1

Cargar contenido del AR2 en registro de direcciones AR1.AR2LAR1

Cargar el contenido de la dirección en registro de direcciones AR2.P#área, byte.bitLAR2

Transfiere el contenido del registro de direcciones 2 AR2 al destino direccionado.<Dirección>TAR2

Intercambia el contenido de AR1 y AR2.TAR

Carga el contenido del área direccionada en el registro de direcciones AR2.<Dirección>LAR2

Carga el contenido del área direccionada en el registro de direcciones AR1.<Dirección>LAR1

Cargar contenido de ACU1 en registro de direcciones AR1.LAR1

Transfiere el contenido del registro de direcciones 2 AR2 al ACU1. TAR2

Cargar contenido de ACU1 en registro de direcciones AR2.LAR2

Suma una constante puntero al contenido del registro de direcciones AR2.P#Byte.Bit+AR2

Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR2.+AR2

Suma una constante puntero al contenido del registro de direcciones AR1.P#Byte.Bit+AR1

Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR1.+AR1

Transfiere el contenido del registro de direcciones 1 AR1 al destino direccionado.<Dirección>TAR1

Transfiere el contenido del registro de direcciones 1 AR1 al ACU1. TAR1

Cargar el contenido de la dirección en registro de direcciones AR1.P#área, byte.bitLAR1

FunciónOperandoOperación

Ejemplo 1:L 11T MW 60OPN DB[MW60] OPN DB 11

L P#24.0T MD 50L IW [MD50]

DirecciónTipo de Acceso

Zona de Acceso

L IW 24

Ejemplos: Direccionamiento Indirecto (I)

Ejemplo 2:

LAR1 P#10.0 // PreselecciónL MW [AR1,P#200.0]

Tipo Zona de Registro Constante de InstrucciónDato Acceso Dirección Desfase Ejecutada

31 23 15 7 000000000 00000000 00000000 01010000

00000RRR 00000BBB BBBBBBBB BBBBBXXX

+200

Ejemplos: Direccionamiento Indirecto (II)Ejemplo 3:

L MW 210

AR1

LAR1 P#I 100.0 // PreselecciónL B [AR1,P#110.0]

Zona de Registro Constante de InstrucciónAcceso Dirección Desfase Ejecutada

31 23 15 7 010000001 00000000 00000011 00100000

10000RRR 00000BBB BBBBBBBB BBBBBXXX

+210

Ejemplo 4:

L IB 210

AR1

Ejemplo 7: Registro Intraárea Ejemplo 8: Registro Interárea

Ejemplo 5: Memoria con NúmeroL 5T DBW100A T[DBW100]

LAR1 P#0.0L 8

M01: T MW 20A I[AR1, P#0.0]= Q[AR1, P#4.0]+AR1 P#0.1L MW 20LOOP M01

LAR1 P#I0.0LAR2 P#Q4.0L 8

M02: T MW 20A [AR1, P#0.0]= [AR2, P#0.0]+AR1 P#0.1+AR2 P#0.1L MW 20LOOP M02

Ejemplos de Direccionamiento (III)

Ejemplo 6: Memoria con PunteroL P#0.0T MD 100A I[MD 100]L MD[MD 100]

Ejemplo 9:STEP 7 STEP 5

L 11 L KF11T MW 60 T MW 60OPN DB[MW 60] OPN DB 11 B MW 60

(A DB 11) A DB 0

L P#24.0 L KF 24T MD 50 T MW 50L IW [MD50] L IW 24 B MW 50

L IW 0

Ejemplos: Direccionamiento Indirecto (IV)

Comparación STEP5 STEP7

SIMATIC S7 NIVEL II Dir_indirecto.ppt 1

Curso SIMATIC S7 Nivel II

Direccionamiento indirecto

Abril 2003

SIMATIC S7 NIVEL II Dir_indirecto.ppt 2

Direccionamiento directo (I)

E 0 .0Zona de memoria:•E -> Entrada•A -> Salida•T -> Temporizador•M -> Marca•DB -> Módulo de datos•P -> Acceso directo (PA, PE)

Número de byte (cada zona tendrá su rango)

Número de bit (0 - 7)

SIMATIC S7 NIVEL II Dir_indirecto.ppt 3

Direccionamiento directo (II)

Área Ejemplo Tipo de Acceso DescripciónE E 0.0 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso EntradasA AB 4 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso SalidasPE PEW 10 Byte, Palabra, Doble Palabra Entradas de PeriferiaPA PAD 24 Byte, Palabra, Doble Palabra Salidas de PeriferiaM M 100.0 Bit, Byte, Palabra, Doble PalabraMarcasT T15 - TemporizadoresC Z80 - Contadores

SIMATIC S7 NIVEL II Dir_indirecto.ppt 4

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 5

Direccionamiento directo (IV)

Direccionamiento directoEs necesario especificar:Zona de memoriaTipo de accesoPosición de bytePosición de bit

U E 125.3 U T0L E B 124 U Z3T M B 12 UC FC1

CALL FC3L DB2.DBW3

SIMATIC S7 NIVEL II Dir_indirecto.ppt 6

Direccionamiento indirecto

En el puntero se almacena la dirección de bit.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 P#124.0T MD 50

L E W [MD50] L E W 124

Zona Tipo de Direcciónacceso

L 11T MW 60AUF DB[MW 60] AUF DB 11

Se puede acceder de forma indirecta a las posiciones de memoria.

L P#124.0 carga la dirección byte 124, bit 0 en formato de puntero. OJO: es la dirección, no el contenido. No se ha indicado la zona de memoria, que se especificará al utilizar la dirección.

SIMATIC S7 NIVEL II Dir_indirecto.ppt 7

Direccionamiento Indirecto

Direccionamiento indirecto con marcasMW o palabra de DBSe 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.

L 8 // Carga un 8 en ACU1T MW10 // Lo transfiere a la palabra de marcas 10U Z [MW10] // Equivale a U Z 8: comprueba el contador 8

MD o doble palabra de DBSe 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.0T MD50L EW[MD50] --- L EW124

SIMATIC S7 NIVEL II Dir_indirecto.ppt 8

Direccionamiento indirecto

Registros de direcciones (AR1 y AR2)Registros de 32 bits utilizados para direccionamiento indirectoContiene 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:

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

31 23 15 7 010000 RRR 00000 BBB BBBBBBBB BBBBBXXX

SIMATIC S7 NIVEL II Dir_indirecto.ppt 9

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.0El registro 1 contiene la dirección de la entrada 100.0 .

Carga del registro de direccionesL P#125.0 - 0000 0000 0000 0011 1110 1000LAR1L P#E125.0 - 1000 0001 0000 0011 1110 1000LAR1

LAR1 P#125.0

LAR1 P#E125.0

SIMATIC S7 NIVEL II Dir_indirecto.ppt 10

Direccionamiento Indirecto

+ 200LAR1 P#10.0 // Preselección

L M W [AR1, P#200.0]L MW 210

Tipo Tipo Registro Constante de InstrucciónDato Acceso Dirección Desfase Ejecutada

•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

SIMATIC S7 NIVEL II Dir_indirecto.ppt 11

Direccionamiento Indirecto

También es posible utilizar el direccionamiento indirecto para direccionar bits.

Ejemplo:

LAR1 P#E 100.0U [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 12

Direccionamiento Indirecto

Otras funcionesLAR1LAR1 P#valorLAR2LAR2 P#valorLAR1 AR2 AR2 --> AR1TAR1 AR1 --> ACU1TAR1 MD20 AR1 --> MD20TAR 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 13

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 14

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.

Automatización Industrial

Ejecución Especial

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

Índice

... a menos que sea interrumpido por otro OB

OB10 :Interrupción Horaria

OB1se ejecuta

continuamente

OB82:Error

Asíncrono

Ejecución de Programas – Módulos de Organización

OB1

Programa Principal

Ejecución cíclicahasta ser interrumpidopor un OB con una másalta prioridad.

Una vez interrumpido por el sistema operativoel OB1 rompe su cicloy ejecuta el OB requerido.

Ejemplo de OB10:Ejecuta este módulo cada minuto.Empieza a las 9:00

Ejemplo de OB20:Ejecuta este módulo2.35” después dedetectar un evento

Ejemplo de OB82:Ejecuta este módulosi hay un cortocircuitoen la entradaanalógica PIW532

El sistema operativollama a otros OBspara utilizarlos:

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

El sistema llama a un nuevo OB

Antes de ejecutar el nuevo OB, se salvanlos registros delmódulo interrumpido

Pila de Interrupción (Pila I)

Pila de Módulo (Pila B)

Contenido acumuladores ACCU1,ACCU2

Contenido registros direcciones AR1, AR2

Contenido registros módulos datos DB, DI

Puntero en la Pila L

Palabra Estado, Registro MCR, Puntero Pila B

Registros DB y DI

Puntero de datos temporales (pila L)

Número de Módulo

Dirección de retorno

Almacenamiento de Datos de un OB Interrumpido

• 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

OB´s de Error y de Interrupción

Tipo de Alarma OB´s Prioridad ComentariosCiclo libre OB1 1 Bloque de organización para la

(OB1) ejecución cíclicaAlarmas 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 3 a 6 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

Módulos de Organización de Alarmas

• 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

Ejecución Cíclica de Programas

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

Tiempo de Ciclo (III) – Marcas de Ciclo

Variable Tipo de datos DescripciónOB1_EV_CLASS BYTE Clase de evento e identificadores: B#16#11: activoOB1_SCAN_1 BYTE Información de arranque

B#16#01: Conclusión del rearranque completo(caliente)B#16#02: Conclusión del rearranqueB#16#03: Conclusión del ciclo libreB#16#04: Conclusión del arranque en frío

OB1_PRIORITY BYTE Prioridad: 1OB1_OB_NUMBR BYTE Número de OB (01)OB1_RESERVED_1 BYTE ReservadoOB1_RESERVED_2 BYTE ReservadoOB1_PREV_CYCLE INT Tiempo de ejecución del ciclo anterior (ms)OB1_MIN_CYCLE INT Tiempo de ciclo mínimo (ms) desde el último arranqueOB1_MAX_CYCLE INT Tiempo de ciclo máximo (ms) desde el último arranqueOB1_DATE_TIME DATE_TIME Fecha y hora en que se solicitó el OB

Variables Locales del OB1

SFC 6 RD_INFO: Leer información de arranque del OB actual

Parámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Información de errorTOP_SI OUTPUT STRUCT D, L Información de arranque

del OB actualSTART_UP_SI OUTPUT STRUCT D, L Información de arranque del

último OB activado

SFC´s – Diagnóstico

SFC 0 SET_CLK. Ajustar la hora

SFC 1 READ_CLK. Leer la hora

Parámetro Declaración Tipo de datos Area de memoria DescripciónPDT INPUT DT D, L, Entrada PDT para indican fecha

y hora que se desea ajustarRET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error.

Parámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de errorCDT 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 sistemaParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT TIME E, A, M, D, L El parámetro tiene el cronometro

del sistema, comprendido entre0 a 2elevado a 31–1 ms.

SFC´s – Gestión del Reloj en Tiempo Real

SFC 2 SET_RTM: Ajustar contador de horas de funcionamientoParámetro Declaración Tipo de datos Area de memoria DescripciónNR INPUT Byte E, A, M, D, L, Número del contador de horas

Const. de funcionamiento que se deseaajustar. Valores posibles: 0a 7.

PV INPUT INT E, A, M, D, L, Contiene ajuste para el contadorConst. de horas de funcionamiento.

RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error

Parámetro Declaración Tipo de datos Area de memoria DescripciónNR INPUT Byte E, A, M, D, L, Número del contador de horas

Const. de funcionamiento que se deseaarrancar o parar. Valores (0 - 7)

S INPUT BOOL E, A, M, D, L, Arranca o para el contadorConst. Se para con ”0”, arranca con”1”

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

SFC´s – Gestión del Contador de Horas de Funcionamiento (I)

• SFC 4 READ_RTM: Leer el contador de horas de funcionamientoParámetro Declaración Tipo de datos Area de memoria DescripciónNR 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 – Gestión del Contador de Horas de Funcionamiento (II)

SFC 25 COMPRESS: Comprimir la memoria de usuarioParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Información de errorBUSY 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

Parámetro Declaración Tipo de datos Area de memoria DescripciónWT INPUT INT E, A, M, D, L El parámetro WT contiene el

tiempo de retardo en ms.

SFC 47 WAIT:. Retarda el tratamiento del programa de usuario

SFC´s – Varios

• Previamente a que la CPU ejecute el programa principal se puedeejecutar una rutina de arranque

• Mediante los módulos de ejecución en el arranque es posible fijar elcomportamiento del autómata antes de la primera ejecución del programa

• El módulo de organización asignado a cada tipo de arranque se ejecutauna sola vez en cada arranque

• Mientras se ejecutan los módulos asignados al arranque no está activada lavigilancia 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

Ejecución en el Arranque

(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 modooriginal cuando el test es interrumpido

(8) Se puede llevar la CPU a STOP desde el modo HOLDEl comportamiento en el arranque se define en la configuración de la CPU

STOP

STARTUP

HOLD

RUN1

352

7

86

4

Modos de Operación de las CPU´s (I)

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

Modos de Operación de las CPU´s (II)

• 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

Modo STOP

Variable Tipo de datos DescripciónOB100_EV_CLASS BYTE Clase de evento e indicativos: B#16#13: activadoOB100_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 rearranqueB#16#84: Sol. automática de rearranqueB#16#85: Sol. manual de arranque en fríoB#16#86: Sol. automática de arranque en frío

OB100_PRIORITY BYTE Prioridad: 27OB100_OB_NUMBR BYTE Número de OB (100, 101 ó 102)OB100_RESERVED_1 BYTE ReservadoOB100_RESERVED_2 BYTE ReservadoOB100_STOP WORD Número del evento que ha llevado la CPU a STOPOB100_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

Variables Locales de los OB´s de Arranque

Inhibir módulosde salida

Borrar imagen delproceso de entradas

Borrar imagen delproceso de salidas

Reset salidas del proceso

Borrar datos no remanentes

Inicializar módulos

EjecutarOB 100

Actualizar imagen proceso de entradas

Liberar módulos de salida

Arranquecompleto

Transferir imagenproceso de salidas

Actualizar imagen proceso de entradas

Programa principal OB 1

RUN

Arranque Completo

• SFCs para direccionar módulos:SFC 5 GADR_LGC Determinar la dirección lógica de un canalSFC 49 LGC_GADR Determinar el slot de una dirección lógicaSFC 50 RD_LGADR Determinar direcciones lógicas de un módulo

• Las Funciones de Sistema integradas (SFCs) permiten direccionar módulos y realizar comprobaciones previas a la ejecución cíclica del programa

• SFCs para transferir a registros:SFC 54 RD_DPARM Leer parámetros definidosSFC 55 WR_PARM Escribir parámetros dinámicosSFC 56 WR_DPARM Escribir parámetros predefinidosSFC 57 PARM_MOD Parametizar móduloSFC 58 WR_REC Escribir registrosSFC 59 RD_REC Leer registro

SFC´s Para Programar OB´s de Arranque

Parámetro Declaración Tipo de datos Area de memoria DescripciónSUBNETID INPUT BYTE E, A, M, D, L Identificador del área:

Const. - 0, en caso que el slot esté enbastidor central o de ampliación

RACK INPUT WORD E, A, M, D, L, Número del bástidor en el caso deConst. Identificador de área = 0

SLOT INPUT WORD E, A, M, D, L, No de slotConst.

SUBSLOT INPUT BYTE E, A, M, D, L, Receptáculo de submóduloConst. (sin submódulo 0)

SUBADDR INPUT WORD E, A, M, D, L, Offset en el espacio de direccionesConst. de datos útiles del módulo

RET_VAL OUTPUT INT E, A, M, D, L Informaciones de errorIOID 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 5

Parámetro Declaración Tipo de datos Area de memoria DescripciónIOID 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 errorAREA OUTPUT BYTE E, A, M, D, L Identificador del área: Indica

cómo interpretar el restode los parámetros de salida.

RACK OUTPUT WORD E, A, M, D, L No. de bastidorSLOT OUTPUT WORD E, A, M, D, L No. de slotSUBADDR OUTPUT WORD E, A, M, D, L Offset en el espacio de dirección

de datos útiles del módulo

SFC 49

Parámetro Declaración Tipo de datos Area de memoria DescripciónIOID 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ógicaConst.

RET_VAL OUTPUT INT E, A, M, D, L Informaciones de errorPEADDR OUTPUT ANY E, A, M, D, L Campo para direcciones PI,

elementos de campo debenser del tipo de datos WORD.

PECOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PIdevueltas

PAADDR OUTPUT ANY E, A, M, D, L Campo para las direcciones PA;los elementos de campo debenser del tipo de datos WORD.

PACOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PAdevueltas

SFC 50

• 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ónal 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 seprodujo 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

Ejecución por Interrupciones

• Las interrupciones de hardware permiten detectar inmediatamente en elprograma 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ódulode organización que contiene la rutina de atención a la interrupción ha finalizadosu ejecución

Interrupciones del Hardware (I)

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

Interrupciones del Hardware (II)

Configuración Hardware de Alarmas del Proceso

Variable Tipo de datos DescripciónOB40_EV_CLASS BYTE Clase de evento e identificadores:

B#16#11: Alarma está activadaOB40_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 BYTE Prioridad parametrizada; valor prefijado: de 16 a 23OB40_OB_NUMBR BYTE Número de OB (40 hasta 47)OB40_RESERVED_1 BYTE ReservadoOB40_IO_FLAG BYTE Módulo de entradas: B#16#54

Módulo de salidas: B#16#55OB40_MDL_ADDR WORD Dirección básica lógica del módulo que ha activado

la alarmaOB40_POINT_ADDR DWORD En módulos digitales: Mapa de bits con los estados de

las entradas en el móduloEn módulos analógicos, CPs o IMs: Estado de alarmadel módulo

OB40_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB

Variables Locales de OB´s de Alarma del Proceso

SFC 39 DIS_IRT: Bloquea tratamiento de alarmaParámetro Declaración Tipo de datos Area de memoria DescripciónMODE INPUT BYTE E, A, M, D, L, Define los eventos de alarma y de

Const. error asíncrono que se bloqueanOB_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 retornocontiene el código.

Parámetro Declaración Tipo de datos Area de memoria DescripciónMODE 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 retornocontiene el código.

SFC 40 EN_IRT: Habilita el tratamiento de alarma

SFC´s Relacionados con Interrupciones (I)

SFC 41 DIS_AIRT: Retarda el tratamiento de alarmaParámetro Declaración Tipo de datos Area de memoria DescripciónRET_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 alarmasParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos programados tras la

ejecución de SFC 42 o código de error

SFC´s Relacionados con Interrupciones (II)

+27648 = 10V.

0

Módulo de Entradas Analógicas

+ 8 V. Límite superior para la interrupción

Si el valor del transmisor de nivel PIW 288es 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.

+ 2 V. Límite inferior para la interrupción

Interrupciones de Proceso (I)

+27648

0

Tarjeta de Entradas Analógicas

+20000Límite superiorpara la interrupción

Si el valor de la PIW 288 es mayorque el límite superior para este canalanalógico, llama al OB40.Visualiza un mensaje de error.

AW0

Interrupciones de Proceso (II)

SFC 55

SFC´s Relacionados con Interrupciones (III)

SFC 56

SFC´s Relacionados con Interrupciones (IV)

Parámetro Declaración Tipo de datos Area de memoria DescripciónREQ 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. EnConst. 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ódigode error.

BUSY OUTPUT BOOL E, A, M, D, L BUSY = 1: La operación de escriturano ha finalizado aún.

SFC 57 PARM_MOD: Parametrizar módulo

SFC´s Relacionados con Interrupciones (V)

• Una alarma cíclica es una interrupción que es generada en intervalosperió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

Ejecución por Tiempo – Alarmas 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”.

...interrumpe el OB1 y se ejecuta el OB35 cada 250ms

OB1se ejecutacontinuamente

OB35

OB35OB35

OB35

Interrupciones Cíclicas

Configuración de Interrupciones Cíclicas

Variable Tipo de datos DescripciónOB35_EV_CLASS BYTE Clase de evento e identificadores:

B#16#11: Alarma está activadaOB35_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 ReservadoOB35_RESERVED_2 BYTE ReservadoOB35_PHASE_OFFSET WORD Desfase en msOB35_RESERVED_3 INT ReservadoOB35_EXC_FREQ INT Cadencia temporal en msOB35_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB.

Variables Locales de OB de Alarma Cíclica

• Una alarma horaria es una interrupción que permite ejecutar un programaen 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,...

Ejecución por Tiempo – Alarmas Horarias

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

• En el arranque en frío o en el arranque completo, el sistema operativoborra 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

Interrupciones Horarias (II)

Configuración de Interrupciones Horarias

Variable Tipo de datos DescripciónOB10_EV_CLASS BYTE Clase de evento e identificadores:

B#16#11: Alarma activadaOB10_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: 2OB10_OB_NUMBR BYTE Número de OB (10 hasta 17)OB10_RESERVED_1 BYTE ReservadoOB10_RESERVED_2 BYTE ReservadoOB10_PERIOD_EXE WORD El OB se ejecuta en el intervalo indicado:

W#16#0000: Una vezW#16#0201: Cada minutoW#16#0401: Cada horaW#16#1001: Cada díaW#16#1201: Cada semanaW#16#1401: Cada mesW#16#1801: Cada año

OB10_RESERVED_3 INT ReservadoOB10_RESERVED_4 INT ReservadoOB10_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB

Variables Locales de OB de Alarma Horaria

SFC 28 SET_TINT: Ajustar hora de arranque de la alarma horaria

Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_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 arranquePERIOD INPUT WORD E, A, M, D, L, Periodicidad desde el instante SDT:

Const. W#16#0000 = una vezW#16#0201 = cada minutoW#16#0401 = cada horaW#16#1001 = diariaW#16#1201 = semanalW#16#1401 = mensualW#16#1801 = anualW#16#2001 = al final del mes

RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.

• 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´s para Programar OB´s de Alarmas Horarias (I)

Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB cuya fecha

Const y hora de arranque se han deborrar (OB10 a OB17).

RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error

SFC 29 CAN_TINT: Anular alarma horaria activada

SFC 30 ACT_TINT: Activar un OB de alarma horaria Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_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 (II)

SFC 31 QRY_TINT: Consultar alarma horaria

Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_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

SFC´s para Programar OB´s de Alarmas Horarias (III)

Tarjeta de Entradas Analógicas

+14000 = Temperatura Superior+13000 = Temperatura Inferior

Q5.7 Calentador

PIW288

La CPU tiene unallamada a un OB queverifica y controla latemperatura para estetanque una vez cada minuto, comenzando auna fecha y hora específica.

Programación de una Alarma Horaria

• 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

RETARD

O

Ejecución por Tiempo – Alarmas de Retardo

Configuración de Interrupciones de Retardo

RETARD

O

Variable Tipo de datos Declaración DescripciónOB20_EV_CLASS BYTE TEMP Clase de evento e identificadores:

B#16#11: Alarma está activadaOB20_STRT_INF BYTE TEMP B#16#21: Solicitud arranque OB 20

B#16#22: Solicitud arranque OB 21B#16#23: Solicitud arranque OB 22B#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 ReservadoOB20_RESERVED_2 BYTE TEMP ReservadoOB20_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 msOB20_DATE_TIME DATE_TIME TEMP Fecha y hora a las que se solicitó el OB

RETARD

O

Variables Locales de OB de Alarma de Retardo

Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_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 OBConst. de alarma de retardo, aparece en

la información de eventos dearranque del OB.

RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error

SFC 32 SRT_DINT: Arrancar alarma de retardo

• Funciones del sistema integradas (SFCs) se pueden utilizar para arrancar y supervisar las interrupciones asociadas a alarmas de retardo.

Las SFCs relacionadas con alarmas de retardo son las siguientes.RET

ARDO

SFC´s para Programar OB´s de Alarmas Horarias de Retardo (I)

SFC 33 CAN_DINT: Anular alarma de retardoParámetro Declaración Tipo de datos Area de memoria DescripciónOB_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 retardoParámetro Declaración Tipo de datos Area de memoria DescripciónOB_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

RETARD

O

SFC´s para Programar OB´s de Alarmas Horarias de Retardo (II)

• 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(SRT_DINT)EN ENO

OB_NRDTIMESIGN

RET_VAL20T#500msW#16#01

MW10

M2.0

RETARD

O

Interrupciones de Retardo

+27648

0

Módulo de Entradas Analógicas

Si el módulo analógico ha sido configurado para habilitar la rotura de hilo comointerrupción hardware, se utilizar cualquierproblema de hardware en el transmisorpara llamar a un OB de detección de errores(por ejemplo, el OB82)

X

Interrupciones por Error del Hardware

• 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ónErrores Asíncronos Errores Síncronos

OB de Error OB de ErrorOB80 Error de Tiempo (por ejemplo,

tiempo de ciclo excedido) OB85 Error de Secuencia de Programa

(por ejemplo, OB no cargado)OB87 Fallo de Comunicaciones

(por ejemplo, Datos Globales)

OB121 Error de Programación (por ejemplo, DB no cargado)

OB122 Error de Acceso(por ejemplo, intento deacceder a un módulo periférico no presente)

Interrupciones por Error en el Programa/Sistema

• 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

SFC´s para Programar OB´s de Error

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.

Automatización Industrial

Tratamiento Analógico

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

Índice

abcd

RR/2R/4R/8

+-

SALIDAANALOGICA

Rf

Vs

02122232 5 v

Amplificador sumador

Red de resistencias

e

f

e

s

RR

VVA −==

Ve

i

i

f

s

e

e

RV

RVi −==

Convertidor Digital-Analógico, D/A

133.015020) ==Aa

- Supongamos Rf = 20 K, y R = 150 K, sin tener en cuenta el cambio signo queda:

266.07520) ==Ab

533.05.37

20) ==Ac

066.17.18

20) ==Ad

25755.3775*5.37) =

+=Abyc

665.0133.0*5133.0* === es VV

33.1266.0*5266.0* === es VV

665.2533.0*5533.0* === es VV

33.5066.1*5066.1* === es VV

48.0*58.0* === es VV8.02520) ==vAbyc

e

f

e

s

RR

VVA −==

Convertidor Digital-Analógico, D/A

CONTADOR DEN BITS+

- SALIDADIGITAL

ConvertidorD/A

RESETRELOJ

ENTRADAANALOGICA

- Lentos en la conversión - Tiempo de conversión variable- Aumenta con el valor que se tiene que convertir

COMPARADORB SU AF D LF E IE D R A

&

Convertidor Analógico-Digital, A/D – Convertidor en Rampa

CIRCUITO DECONTROL

REGISTRO DEDESPLAZAMIENTO

+-

SALIDADIGITAL

REGISTRO DE APROXIMACIONES

SUCESIVAS

RELOJ

ENTRADAANALOGICA

- Rápidos- Tiempo de conversión fijo

COMPARADOR B SU AF D LF E IE D R A

ConvertidorD/A

Convertidor Analógico-Digital, A/D – Convertidor por Aproximaciones Sucesivas

Convertidor A/D MK 50808 de MOSTEK

Por sondeo

A/D

I0

I7

3

OE

START

ALE

Puerto

- Hay que programar un tiempo de espera necesario para la conversión

MULTIPLEXOR

Control de Convertidores A/D (I)

Por interrupción

MULTIPLEXOR

A/D

I0

I7

3

EOCSTART

INT

ALE

Puerto

- No hay que programar tiempo de espera

OE

Control de Convertidores A/D (II)

• La conversión A/D se realiza mediante tarjetas de entradas analógicas

Tarjetas de Entradas Analógicas – Diagrama de Bloques

Tarjetas de Entradas Analógicas – Módulo SM 331

• La conversión D/A se realiza mediante tarjetas de salidas analógicas

Tarjetas de Salidas Analógicas – Diagrama de Bloques

Tarjetas de Salidas Analógicas – Módulo SM 332

Rack0

Rack1

Rack2

Rack3

IM

IM(Receptor)

IM512a

526

528a

542

544a

558

560a

574

576a

590

592a

606

608a

622

624a

638

384a

398

400a

414

432a

446

448a

462

464a

478

480a

494

496a

510

416a

430

256a

270

336a

350

352a

366

368a

382

304a

318

320a

334

272a

286

288a

302

IM640a

654

656a

670

672a

686

688a

702

704a

718

720a

734

736a

750

752a

766

(Receptor)

(Receptor)

(Emisor)

Fuente dealimentac.

Fuente dealimentac.

CPUy

fuente dealimentac.

Fuente dealimentac.

• El identificador de direcciones es:- PIW para las entradas analógicas - PQW para las salidas analógicas

Direccionamiento de Tarjetas Analógicas

Valores Analógicos de Trabajo

• Unipolares1 a 5 V 0 a 10 V

• Bipolares± 10 V ± 5 V ± 2,5 V ± 1 V± 500 mV ± 250 mV ± 80 mV

Valores en Tensión

• Unipolares0 a 20 mA 4 a 20 mA

• Bipolares± 20 mA ± 10 mA ± 3,2 mA

Valores en Intensidad

10 kΩ 150Ω 300Ω 100Ω

Valores en Resistencia

• 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

S 02122215 14

3242526272829210211212213214213 12 11 10 9 8 7 6 5 4 3 2 1 0Número del bit

Peso del bit

0 X X X X X X X X X X X X X X 0Cod. 14 bits (+S)

0 X X X X X X X X X X X X 0 0 0Cod. 12 bits (+S)

0 X X X X X X X X X 0 0 0 0 0 0Cod. 9 bits (+S)

Resolución Valor analógico

Representación Digital – Resolución

Representación Digital – Márgenes Bipolares

Representación Digital – Márgenes Unipolares

• 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

Representación de Valores de Medida de E/A

L PIW 288 // Leer valor E/AT MW 10

A(L MW 10 //Comparación con 2 V.L 5530>I)A(L MW 10 //Comparación con 4 V.L 11060<I)OA(L MW 10 //Comparación con 6 V.L 16589>I)A(L MW 10 //Comparación con 8 V.L 22118<I)= Q 4.0

• 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

Ejemplo

L PIW 288 // Leer valor E/AITDDTRL 2.764800e+004/RL 1.000000e+001*RRNDT MD 10

A(L MD 10 //Comparación con 2 V.L 2>I)A(L MD 10 //Comparación con 4 V.L 4<I)OA(L MD 10 //Comparación con 6 V.L 6>I)A(L MD 10 //Comparación con 8 V.L 8<I)= Q 4.0

• El tiempo de conversión se compone de:• tiempo de conversión básico

depende directamente del tipo de conversión (por integración, o valores instantáneos).en el caso de integración, el periodo de integración se considera directamente en el tiempo de conversiónel periodo de integración tiene efecto directo sobre la resoluciónel periodo de integración depende de la supresión de frecuencias perturbadoras.los periodos de conversión básicos son 2.5, 16.6, 20 y 100 mseg.

• tiempos suplementariostiempo para la medida de resistenciatiempo para la vigilancia de rotura de hilo

• 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

Tiempo de Ciclo

Tiempo de Conversión de Entradas Analógicas

Tiempo de Conversión y de Ciclo de E/A

• 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

• 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 Conversión

Tiempo de Ciclo

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

Tiempo de Establecimiento

Tiempos de Conversión, Ciclo, Establecimiento para S/A

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

Tiempo de Respuesta

Tiempos de Respuesta de S/A

• 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

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

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

Propiedades Parametrizables de Canales de Salida

Parámetros de los Módulos Analógicos

Configuración de las Tarjetas Analógicas

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

Diagnosis de los Módulos Analógicos

Mensajes deDiagnósticopara EntradasAnalógicas

Mensajes deDiagnósticopara SalidasAnalógicas

• 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

• 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

Alarma de Diagnóstico

Alarmas de los Módulos Analógicos (I)

• 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

Alarma de Proceso

Alarmas de los Módulos Analógicos (II)

El bus P (bus periférico) permite acceder directamente a los valores analógicoscomo entradas desde el campo o como salidas al campo.Al bus periférico se puede acceder en formato de byte, palabra y doble palabra

Procesamiento de Valores Analógicos en S7

LT

Sensor de NivelPIW 288

Nivel alto

Nivel bajo

Tratamiento de Señales Analógicas

1000 L

0 L

Tarjeta de Entradas Analógicas

PIW 288 = +10960

Valor después de la conversión A/D

0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0

Cuando la tarjeta de entradas analógicasrecibe desde campo una señal de tensión ocorriente, la tarjeta convierte la señal a unvalor binario (A/D) al que puede acceder elprograma de CPU a través del bus P.

Conversión de Señales Analógicas de Entrada

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

Presentación de Valores Analógicos

Tarjeta de Salidas Analógicas

CPU -> Tarjeta AnalógicaL +13824T PQW 304

Cuando el programa de CPU envía un valor ala tarjeta de salidas analógicas a través delbus P, la tarjeta ejecuta la conversión D/A.El resultado de la tarjeta es una variación envoltaje o intensidad, que se usa para el controlde dispositivos externos de campo.

Flujo de control

Válvula de posición variable

Suponiendo tarjeta de salida analógica de 0 a +10 Vpara el valor digital 13824, después de la conversión D/A debe sacar 5 V.

Conversión de Señales Analógicas de Salida

LT

Sensor deNivelPIW 288

Nivel alto: 9 voltios ó 24883

Nivel bajo:1 Voltio ò 2765

Q 4.0Válvula de llenado

Q 5.7Válvula de drenaje

- 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 288L 24883>=I= Q 5.7

L PIW 288L 2765<=I= Q 4.0

Valores Analógicos para Observación de Alarmas

• 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 288sensor denivel:midiendoun valor de4 a 20 mA

20 mA

4 mA

+ 27648

+5530 (20% de rango)

1000 L

0 L

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 / 100Ejemplo: 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 Entrada Analógicas

• Cuando las características del dispositivo de campo analógico tiene un 20% offseto “señala cero”, se hace necesario un offset del valor analógico en la CPU para compensar.

Salida PQW 304valor de 4 a 20 mA

Tarjeta de Salidas Analógicas

IP

Válvula deposicionamiento en 3 a 15 psi

Transductor de corriente a presión

Suponiendo un offset de salida del 20%, el valor que hay que enviar es:(valor de la señal analógica sin offset x 100) / 125 + 20 % del rango utilizableEjemplo: Para abrir la válvula a la mitad:PQW 304 = ( (MW 20 x 100) / 125) + 5530, Donde MW 20 = 27648/2=13824

Uso del Offset con Señales de Salida Analógicas

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

Ajuste de Valores Analógicos

-100 grados-276480 litros0 grados0

500 litros100 grados+27648

NivelRango unipolar

TemperaturaRango bipolar

Rango Nominal de la Conversión

• 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

+27648

0

Rango de CPU(unipolar)0 -> +27648

400 L

0 L

Rango deseado enunidades de ingeniería0 -> 400 L

Ajuste:MD10 = (PIW 288 x 400) / 27648

Si el recipiente está al 50 %, elvalor analógico de entrada dePIW 288=+13824 ;MD10 igual a 200.

PIW 288

Ejemplo:

Ajuste de Valores Analógicos Unipolares

in PV INT 0 Palabra de la E/A medidoin 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 graduadotemp PV_Real REAL 0 PV convertido a valor realtemp Rango_Ing REAL 0 PV_Superior - PV_Inferior

L #PV //Carga el valor medido dela E/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº real

L #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #Rango_Ing

L #PV_Real //Entrada analógica en formato de nº realL 2.764800e+04 //Cargar rango de CPU para la conversión (+27648)/R //DivideL #Rango_Ing //Cargar rango en unidades de ingeniería*R //MultiplicarL #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV+R //SumarT #Valor_Graduado //Resultado final

Segmento 1

Segmento 2

Segmento 3

FC 28

Función de Ajuste 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

+27648

+5530

Rango de CPU(unipolar)

+5530 -> +27648

200 L

0 L

Rango deseado enunidades de ingeniería0 -> 200 L

Ajuste:MD20 = ((PIW 288 - 5530) x 200) /

22118

Si el recipiente está al 50%, laentrada analógica dePIW 288=+16589 ;MD20 igual a 100.

PIW 288Ejemplo:

Ajuste del Offset de Valores Analógicos Unipolares

in PV INT 0 Palabra de la E/A medidain 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 realtemp 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/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº realL #PV_Real //L 553000e+03 //Cargar 20% del rango de conversión de la CPU (5530)-RT #PV_Real_20 //Almacenar el valor real del offset del PVL #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #Rango_IngL #PV_Real_20 //Cargar valor real PV con offset 20% del rango de CPUL 2.211800e+04 //Cargar rango de CPU menos 20%(27648-5530)/R //DivideL #Rango_Ing //Cargar rango en unidades de ingeniería*R //MultiplicarL #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV+R //SumarT #Valor_Graduado //Resultado final

FC 29

Función Ajuste del Offset de Val. Analóg. Unipolares

• 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

Ajuste:MD30 = (PIW 288 x 100) / 55296

Si la entrada analógica PIW 288 medida +13824 , MD30 = +25+27648

-27648

Rango de CPU(bipolar)

de -27648 a +27648

+ 50 grados

-50 grados

Rango deseado enunidades de ingenieríade -50 a +50 grados

PIW 288medida del sensor de temperaturade +10 a -10V

Ejemplo:

Ajuste de Valores Analógicos Bipolares

in PV INT 0 Palabra de la E/A medidoin 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 graduadotemp PV_Real REAL 0 PV convertido a valor realtemp PV_Mid REAL 0 (PV Superior-PV Inferior) / 2 +PV Inferiortemp Rango_Ing_Bi REAL 0 PV_Superior - PV_InferiorL #PV //Carga del valor medido dela E/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº realL #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #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 rangoL #PV_Real //Cargar valor real PVL #Rango_Ing_Bi //Cargar rango en unidades de ingeniería bipolares*R //MultiplicarL 5529600e+4 //Cargar el rango de CPU bipolar (27648 x 2)/R //L #PV_Mid //Cargar la variable PV rango medio+R //SumarT #Valor_Graduado_Bi //Resultado final

FC 34

Función de Ajuste de Valores Analógicos Bipolares

• 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

PV

PV_Superior

PV_InferiorValor_Graduado

PIW288

100

0

inininouttemptemp

PVPV_SuperiorPV_InferiorValor _AjustadoPV_RealRango_Ing

INTREALREALREALREALREAL

OOOOOO

FC28

MD10

Segmento 1:Convierte un valor analógico de entradaa real

Segmento 2:Determina el rango en unidades de ingeniería

Segmento 3:Ajuste del valor analógico

Llamada a Módulos y Ajuste de Valores

FC 105 SCALE: Escalar valores

Lectura y Normalización de un Valor Analógico

FC 106 UNSCALE: Desescalar valores

FC para Desescalar Valores para S/A