Principios de Programación en STEP7 Automatización Industrial
Índice TEMA – Principios de Programación en STEP7 1. – Programas en la CPU 2. – Edición de Programas 2.1 – IEC 1131-3 2.2 – Instrucciones/Operandos/Módulos 3. – Estructura de Programas 4. – Tipos de Módulos 4.1 – Módulos de Sistema 4.2 – Módulos de Usuario 5. – Tipos de Procesamiento 6. – Tiempos de Ciclo y Respuesta 7. – Proyectos STEP7
Programas en la CPU •
En una CPU corren dos programas
• Sistema operativo: Está contenido en cada CPU y organiza todas las funciones y procesos de la CPU no relacionados con una tarea de control específica. Entre sus funciones están: • gestionar el arranque normal y completo del PLC/API • actualizar la imagen del proceso de entradas y salidas • llamar al programa de usuario • detectar alarmas y llamar a los programas de atención a las mismas • reconocer y tratar los errores • administrar las áreas de memoria • comunicar con unidades de programación y otros sistemas de supervisión
• Programa de usuario: Hay que crearlo y cargarlo la CPU. Contiene todas las funciones necesarias para la tarea de control de una aplicación específica. Entre las tareas del programa de usuario están: • definir las condiciones de arranque (completo ó normal) de la CPU • tratar datos del proceso (funciones combinatorias, valores analógicos, ....) • reaccionar a alarmas • tratamiento de perturbaciones en el funcionamiento normal del programa
La Norma IEC 1131 / EN-UNE 61131 Parte
Título
Contenidos
Parte 1
Información general
Definición de términos y glosario del PLC/API Características funcionales del PLC/API
Parte 2
Especificaciones y ensayos de los equipos
Prestaciones eléctricas, mecánicas y funcionales Información a suministrar por el fabricante Ensayos y verificaciones
Parte 3 Lenguajes de programación
Estructura del software de los PLC/API Lenguajes de programación Elementos del lenguaje
Parte 4
Guía para usuarios
Especificaciones y análisis del sistema Aplicación y selección del PLC/API Seguridad y protección, instalación y mantenimiento
Parte 5
Comunicaciones
Modelos, bloques de comunicación, mapeado en protocolos ISO
Lenguajes de IEC 1131 - 3 / STEP7 Lenguaje Diagrama de funciones
IEC 1131-3 FBD Function Block Diagram
STEP 7 FBD/FUP Function Block Diagram
Diagrama de contactos
LD Ladder Diagram
LAD/KOP Ladder Logic
Lista de instrucciones
IL Instruction List
STL/AWL Statement List
Texto estructurado
ST Structured Text
SCL Structured Control Language
Gráfico secuencial
SFC Sequential Function Chart
GRAPH7
Diagrama de bloques
CFC Continuous Function Chart
Diagrama de gráfico de estados
HIGRAPH7
Funcionalidad del Software • El entorno de programación permite desarrollar proyectos de control y automatización con las siguiente funcionalidad: – Crear la estructura de directorios necesaria para la gestión de cada proyecto – Configurar el hardware del equipo – Desarrollar programas off-line – Cargar y descargar programas y datos en el PLC/API (on-line) – Depurar el programa en fase de ejecución sin necesidad de interrumpir la ejecución del programa (on-line) – Realizar funciones de test o estado de variables y zonas de la memoria – Realizar funciones de forzado de variables – Elaborar documentos para la fase de mantenimiento posterior – Analizar el estado y comportamiento de la CPU (pilas, tiempos, ...) y de los módulos de señal asociados
Programas de Usuario Bloque en el Programa de Usuario STEP 7 permite estructurar el programa. Esto aporta las siguientes ventajas: • • • • • •
los programas se pueden dividir en bloques se pueden estandarizar secciones individuales del programa se simplifica la organización del programa las modificaciones del programa pueden realizarse más fácilmente se simplifica el test del programa, ya que puede ejecutarse por partes se simplifica la puesta en servicio
Edición de un Programa Programa conjunto de todas las instrucciones y convenciones para el tratamiento de las señales, por medio de las cuales se actúa sobre la instalación a controlar (proceso), de acuerdo con unas órdenes de control
Estructura
Representación
•Técnica modular •Segmentos •Comentarios
• FBD / FUP • LAD / KOP • STL / AWL
Instrucción Instrucción unidad más pequeña autónoma del programa y constituye una orden de trabajo para el procesador
Instrucción 002: A
Parte operacional
Operando
Identificación Parámetro
I 1.0
Operación Operando
Parámetro Identificador del operando Dirección relativa de la instrucción en el módulo respectivo
Operandos OPERANDOS
Entradas
NEMONICO
FUNCION
I
Imagen del proceso de entradas (PII)
Salidas
Q
Imagen del proceso de salidas (PIQ)
Marcas
M
Para almacenar resultados binarios intermedios
Datos
D
Para almacenar resultados digitales intermedios
Tiempos
T
Funciones de tiempo (temporizadores)
Contadores
C
Funciones de cómputo (contadores)
Periferia
P
Para acceder directamente a la periferia
Locales
L
Datos locales temporales
Módulos
OB, FB, FC SFB, SFC
Para estructurar el programa
Ejemplo de Programa Esquema STL/AWL Eléctrico
FBD/FUP
LAD/KOP
S1 S2
A I 0.0 AN I 0.1 = Q 4.5
I 0.0
&
I 0.0 I 0.1 Q 4.5 Q 4.5
I 0.1
=
H1
Estructuración de los Programas • STEP 7 provee tres posibilidades para organizar un programa. Programación Lineal Arranque
Programación Dividida Arranque
Programación Estructurada Arranque
Receta A Receta B
OB1
OB1
Mezclador
FB1
OB1
FC2 FB2
Descarga Programa Lineal: Todas la instrucciones están contenidas en un módulo (normalmente en el módulo de organización, OB1)
Programa dividido en áreas: Las instrucciones para funciones individuales están contenidas en módulos individuales. El OB1 llama a los módulos individuales sucesivamente.
FC1
FC3 Programa Estructurado: Las funciones reutilizables son cargadas en módulos individuales. El OB1 (u otros módulos) llaman a estos módulos y les pasan datos relevantes.
Estructura de Programa. Programación Lineal OB1 1ª instrucción 2ª instrucción
.. .. .. .
última instrucción
Programación Lineal OB1: Ejemplo de de un simple módulo lineal en FUP Segmento 1: motor marcha/paro
I 0.0
>=1
Q 4.0
&
Q 4.0 I 0.1
=
Segmento 2: Seguridad y señales de aviso
I 0.2
&
I 0.3
Q 4.1
I 0.4
=
OB1: ejemplo de un simple módulo lineal en AWL Segmento 1: motor on/off A( O I 0.0 O Q 4.0 ) AN I 0.1 = Q 4.0 Segmento 2: Seguridad y señales de aviso A AN AN =
I 0.2 I 0.3 I 0.4 Q 4.1
Programación Lineal. Ejemplo
Programación Dividida FC
OB1 Ingrediente_A Ingrediente_B
>=1 & =
(CALL) &
(CALL)
>=1
FC
Mezclador
Descarga
=
(CALL) >=1 (CALL)
&
FC
= >=1
FC
=
Ejecución de un Programa Dividido Programa principal
OB
Módulo subrutina
Procesamiento del programa Instrucción que llaman otros módulos
Procesamiento del programa
Fin de módulo
Programa Dividido. Control de nivel
FC
Sistema Operativo
Programación Estructurada I
OB1
FC
FB
FB
FC
SFC SFB Otros
OBs
Programación Estructurada II Motor
OB1 >=1
& = Descarga
>=1 & = & = =
Estructura del Programa OB1
Módulo 7
Módulo 32
Procesar módulo 7 Lamar al módulo 32
.. .. .
Módulo R
...
Llamar al módulo X
Retornar
Procesar módulo 10 Retornar
Módulo 10
Retornar
Retornar
Retornar Nivel1
Nivel2
Nivel3
Niveles 4..7
Nivel 8
División Tecnológica de un Programa
Sistema operativo
Inicio del OB 1 ciclo
FB 10
Tren
CINTA A
CALL FB 10
CALL FC 50 FC 50 DB inst. 10
FB 20 CINTA B CALL FB 20
CALL FC 50
DB inst. 2
Accionamiento
Tipos de Módulos de Programa Ciclo OB
Tiempo Proceso
FB
FC
SFB
FB
FB
SFC
Módulo de Organización
Error Modos de operación del sistema
Leyenda: Módulo de datos de instancia
Bloques
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 8 Kby
Módulo de datos (DB)
127
127(1-127)
Función del sistema (SFC)
48
53
Mód. func. sistema (SFB)
7
7
Módulos de Usuario Tipo de Módulo
Características
Organización (OB)
-
Interfase de usuario entre el sistema operativo y el programa Prioridades establecidas de (1a 29) Información especial de inicio en la pila de datos locales Definen la estructura del programa de usuario
Módulo de función (FB)
-
Módulos con memoria que puede programar el usuario 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 (DB)
- Estructurado, almacenamiento de datos locales (DB instan.) - Estructurado, almacenamiento de datos globales (válido en todo el programa)
Módulos del Sistema Tipo de Módulo
Características
Función del Sistema (SFC)
- Integrados en el sistema operativo de la CPU - Un usuario puede llamar esta función (sin memoria).
Módulos de Funciones del Sistema (SFB)
- Integrados en el sistema operativo de la CPU - Un usuario puede llamar esta función (con memoria).
Dato de Sistema (SDB)
- Módulo de datos para datos de configuración y parámetros
Módulos de Organización – OB´s (I) Bloques de Organización (OB): • Constituyen el interfaz entre el sistema operativo y el programa de usuario. • Tienen prioridad. • En las CPUs del S7 300 la prioridad de los OBs es fija • Es posible asignar la misma prioridad a varios OBs • Con prioridad “0” se desactiva el OB de alarmas • Son llamados por el sistema operativo. • Cada OB contine una información de arranque de 20 bytes de datos locales que entrega al S.O. durante el arranque • Controlan: • El procesamiento cíclico • El procesamiento controlado por alarmas del programa • El comportamiento en el arranque del sistema de automatización • El tratamiento de errores
Módulos de Organización – OB´s (II) Tipo de Alarma
Módulo de organización
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 multiprocesamiento
OB 60
25
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
Prioridad
la del OB del error
Ejecución Cíclica I Sistema operativo Programa de usuario Conectar
Ciclo
Programa principal
Ejecución Cíclica II Sistema operativo Programa de usuario Conectar
Programa de usuario
Ciclo
Programa principal
Alarma
Interrupción
Programa de alarma
Error
Interrupción
Tratamiento de errores
Secuencia y Profundidad de Anidamiento
Sistema operativo
Inicio del ciclo
Profundidad de anidamiento
OB 1
FB 1
FC 1
DB inst. 1
FB 2 DB inst. 2
FC 1
FB 1
SFC 1
DB inst. 1
DB 1
Llamadas a los Módulos Llamada de un módulo (OB, FB, FC)
Ejecución del programa Instrucción que llama a otro módulo
Módulo llamado (FB, FC, SFB, SFC)
Ejecución del programa
Fin de módulo
Fases de la Ejecución Cíclica El sistema operativo inicia el tiempo de vigilancia del ciclo La CPU escribe los valores de la PIQ en los módulos de salida La CPU lee el estado de las entradas en los módulos de entrada y actualiza la PII La CPU ejecuta el programa de usuario Al final del ciclo, el S.O. realiza las tareas pendientes (cargar y borrar módulos, recibir y enviar datos globales..)
Tiempo de Ciclo I • El tiempo de ciclo es el tiempo que el S.O. necesita para: • ejecutar el programa cíclico • partes del programa que interrumpen al cíclico (ejecución otros OBs) • actividades del sistema (p.e. actualización de imágenes, ..) • El tiempo de ciclo se vigila • El tiempo de ciclo no es igual para cada ciclo
Tiempo de Ciclo II • La figura muestra la función del tiempo de vigilancia del ciclo en la ejecución del programa en las CPUs
Funciones – FC´s • Son módulos programables. Con parámetros absolutos o fromales • Es un módulo lógico “sin memoria” • Las variables temporales de FCs se memorizan en la pila de datos locales • Los datos locales se pierden tras la ejcución de las FCs • Para memorizar los datos, pueden utilizar módulos de datos globales. •A los datos locales de una FC no se le pueden asignar valores iniciles •Como una FC no tiene memoria, se han de indicar siempre parámetros actuales •Las FCs se pueden utilizar para: • devolver un valor de función al módulo invocante (p.e. Fun. Matemáticas) • ejecutar una función tecnológica (p.e. Una combinación binaria)
Módulo de Función – FB´s • Son módulos programables. Con parámetros absolutos o formales • Es un módulo “con memoria” • Tiene asigando un módulo de datos como memoria (DB de instancia) • Los parámetros que se transfieren al FB y las varaiables estáticas, se memorizan en el DB de instancia • Las variables temporales se memorizan en la pila de datos locales • Los datos del DB de instancia no se pierden al finalizar la ejecución del FB • Los datos memorizados en la pila de datos locales se pierden al finalizar la ejecución del FB • Un FB contiene: • un programa que se ejecuta cada vez que se le llama desde otro módulo • facilitan la programación de funciones complejas de uso frecuente
FBs y DBs de Instancia • A cada llamada de un FB que transfiere parámetros está asignado un DB de instancia • Un FB puede ejecutarse con diferentes DBs de instancia, luego se ejecuta con diferentes valores para los parámetros con cada DB de instancia
FB 20: Motor Parámetros formales
DB 202: Motor_2 Parámetros actuales (reales)
Arranque: INT IN Revoluciones: INT IN Historial: DT IN_OUT Tiempo efec.: TIME IN_OUT
Entero (16 bits): Arranque Entero (16 bits): Revoluciones Fecha y hora (48 bits): Puntero a dirección del historial Tiempo (32 bits): Tiempo ejec.
Módulo de Datos Globales – DB´s • Son módulos de datos. No contienen instrucciones STEP 7 • Contienen datos de usuario, datos variables con los que trabaja el programa • Cualquier FB, FC o OB puede leer/escribir datos en un DB global • El tamaño máximo de los DBs depende de las CPUs • La estructura de los DBs de datos globales se puede definir discrecionalmente • Los datos de un DB de datos globales no se borran al cerrar el DB o concluir la ejecución del módulo de programa que lo utiliza
FC 10 FC 11 FC 12
DB global (DB 20)
Acceso desde todos los bloques
DB de instancia Acceso sólo desde FB 12 (DB 112)
Módulos del Sistema – SFB´s y SFC´s • Son módulos ya programados que ofrecen las CPUs S7 a los usuarios
SFBs:
• Es un FB integrado en la CPU • Forman parte del S.O. • No se cargan como parte integrante del programa • Al igual que los FBs, son módulos “con memoria” • Hay que crear los DBs de instancia y cargarlos en la CPU como parte intrgrante del programa. • Las CPUs ofrecen SFBs: • para la comunicación vía enlaces configurados • para las funciones especiales
SFCs:
• Es una función programada integrada en la CPU • Las SFC se pueden llamar desde el programa de usuario • Forman parte del S.O. • No se cargan como parte integrante del programa • Al igual que las FCs, las SFCs son módulos “sin memoria” • Las CPUs ofrecen SFCs para un conjunto muy amplio de aplicaciones
Tipos de Módulos de Datos 8 Bits Byte de datos 0 El tamaño máximo de un módulo en la CPU 314 es 8 Kbyte. La cantidad máxima de memoria disponible en un módulo de datos depende de la CPU.
Byte de datos 8191
Llamada de Módulos – Asignación de Parámetros STL/AWL FB parámetro formal
CALL FB7, DB45 Start: = I 1.0 Stop: = I 1.1 Longitud := MW20 Ejecutar: = M2.1
Llamada al FB7 (a través del módulo de datos de instancia DB45) y asignación de parámetros.
Dirección actual de los datos (parámetro vigente)
DB45
FBD/FUP
FB7 EN
Dirección actual de los datos
I 1.0 I 1.1 MW20
Llamada al FB7 (a través del módulo de datos de instancia DB45) y asignación de parámetros.
ENO
Start ejecutar Stop Longitud
M2.1 FB parámetro formal
Estructura del Módulo Cabecera del Módulo (36 Bytes) Cuerpo del módulo : Sección de declaración y Sección de programa o Datos Interfase Descripción breve
Ejemplo de Programación Estructurada
LT
LT
a
LT
Botón de la selección del tanque
b
LT
0 0 0 0
LT A Ingrediente Ingrediente B
Procesamiento Cíclico del Programa Inicia el módulo (OB 100), procesándose una vez después de conectar la alimentación, por ejemplo
Módulo de entrada
Iniciando el tiempo de control de ciclo
CPU ciclo de scan
Lectura del estado de las señales de los módulos guardando los datos en la tabla de la imagen de proceso de entradas (PII) Ejecución del programa en el OB1 (procesamiento cíclico) Eventos (tiempo de interrupción, interrupción de proceso, etc.) Llamada a otros módulos OBs, FBs, FCs, etc. Escritura en la tabla de imagen de proceso de salida (PIQ) en los módulos de salida.
Módulo OB 1 A I 0.1 A I 1.1 = Q 4.0 . . . .
Módulo de salida
Imagen del Proceso I2.0
I2.7
I0.5
I03
Q4.4
Q4.3
PII Byte 0 Byte 1 Byte 2 . . . .
PIQ 1
Programa de usuario A( O I 2.0 O Q 4.3 ) AN I 2.7 AN I 0.5 AN I 0.3 = Q 4.4
Byte 0 Byte 1 Byte 2 . . . .
1
Módulos de Organización de Alarmas • Los OBs de alarmas permiten: • ejecutar partes del programa dependientes del tiempo • reaccionar eficazmente a señales externas al proceso
Tipo de Alarma
OBs de alarma
Aplicación
Alarma horaria
OB 10 a OB 17
Calcula el flujo de un proceso de mezcla al final de un turno
Alarma de retardo
OB 20 a OB 23
Controla un ventilador para que se pare 20 seg después de parar un motor
Alarma cíclica
OB 30 a OB 38
Muestrear el valor de una señal para el control de una planta
Alarma de proceso
OB 40 a OB 47
Notificar que se ha alcanzado el valor máximo de un depósito
Ejecución de Programas – Tipos de Procesamiento Arranque
CON
•comprobación e inicialización de valores •condiciones de arranque
Procesamiento Cíclico •procesamiento normal. OB1 Alarma del proceso
Alarma de Proceso
Alarma cíclica
Alarma cíclica
•gobierno por interrupciones •periodos de tiempo predeterminados •importante en lazos regulación
Alarma horaria Alarma de retardo
Alarma horaria Alarma de retardo Tratamiento de Error •en función de fallos •sólo en algunas gamas
Alarma por errores
Tiempo de Ciclo Definición: El tiempo de ciclo es el tiempo que transcurre durante un ciclo de programa. Está constituido por: • Tiempo de ejecución del S.O. • Tiempo de transferencia de las imágenes del proceso (PII, PIQ) • Tiempo de ejecución del programa • Temporizadores • Funciones integradas • Carga por alarmas • Carga por comunicación (Profibus-DP, MPI) S.O. Programa de usuario Tiempo de ciclo
PII S.O.
Programa de usuario A I 1.0 = Q 4.0
Interrupciones por alarmas
PIQ PII
Tiempo de Respuesta El tiempo de respuesta es el tiempo que transcurre entre el reconocimiento de una señal de entrada y el cambio de estado de la señal de la salida correspondiente. Depende de: • Tiempo de ciclo • Retardo en las entradas y salidas • Tiempos de rotación adicionales en la red Profibus Tiempo de reacción
1
Retardo de los módulos de entrada
I 1.0 0 1
Q 4.0 0 tiempo
PII S.O.
Ejecución del programa A I 1.0 PIQ = Q 4.0
PII
Tiempo de Respuesta más Corto y más Largo El tiempo de respuesta más corto se presenta cuando el estado de la entrada observada cambia justo antes de la carga de la PII. En este caso hay que tener en cuenta: • Tiempo de retardo de la entradas • Tiempo de actualización de la PII • Tiempo de paso por el S.O. • Tiempo del programa de usuario • Tiempo de ejecución de los temporizadores • Tiempo de actualización de la PIQ • Retardo de las salidas El tiempo de respuesta más largo se presenta cuando el estado de la entrada observada cambia durante la carga de la PII. En este caso el tiempo de respuesta es: • tiempo de retardo de la entradas • 2 x tiempo de actualización de la PII • 2 x tiempo de paso por el S.O. • 2 x tiempo del programa de usuario • tiempo de ejecución de los temporizadores • 2 x tiempo de actualización de la PIQ • tiempo de retardo de las salidas
Módulos de Org. de Tarea no Prioritaria • Si se ha definido un tiempo de ciclo mínimo y este es mayor que el tiempo de ciclo real, al finalizar el programa cíclico la CPU dispone de tiempo de ejecución. • El tiempo disponible se utiliza para procesar el OB de tarea no prioritaria.
Módulo de Organización de Alarmas Cíclicas • Los OBs de alarmas cíclicas permiten: • ejecutar partes del programa en periodos de tiempo determinados
Estructura de un Proyecto S7 Programas S7/M7 (no asignados a ningún HW) Programas de usuario con módulos S7: OBs, FBs, FCs, DBs,....... Fuentes AWL para programas de usuario Estación HW de un S7 - 400 CPU programable de un S7-400 Programas S7/M7 (asignados a HW) Programas de usuario (off-line) Fuentes AWL M7-FM programable
Módulos de STEP7
Seleccionar un Módulo para la Edición • La herramienta Programar Módulo S7 (KOP, AWL) se puede utilizar para editar módulos off-line (almacenados en el dispositivo de programación) o bien on-line (módulos que están en la CPU). Hay que indicar la opción deseada y seleccionar el módulo.
Partes de un Módulo Tabla de Declaración de Variables
Sección de Código
Word Bits S7
8 BR
7 6 5 CC0 CC1 OV
4 OS
3 2 1 OR STA RLO
0 /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? ¿Es grave? ¿Qué pasa si se da? ¿De qué depende ?
Porsupuestísimo que sí. No conozco a nadie que haya enfermado de ello, pero mejor evitarlo. La respuesta seguro que la sabes. Depende. De según como se ejecute todo depende… .
Como bien sabes, si ambas condiciones se dan simultáneamente y seguidas una de otra, la que sobrevivirá del envite será la segunda.
¿Qué pasa si mezco Set, Reset e igualaciones?
Espero que esto no se te haya pasado siquiera por la cabeza… cárcel directamente. Punto. Y sin galletas en el desayuno hasta nuevo aviso.
Vale, vale… pero ¿qué hay del SET y RESET en AWL? O E0.0 O E0.1 S A 1.0 U E0.2 U E0.3 R A1.0 ¿Chupado no?
Como bien imaginarás, la señal A1.0 se pondrá a uno, cuando el OR formado por la E0.0 y E0.1 de como resultado un uno poniendo el RLO a uno. Igualmente, la A1.0 se podrá a cero, cuando el AND de la E0.2 y E0.3 se ponga a uno poniendo el RLO también a uno haciendo por tanto el reset. En definitiva, el Set y el Reset se ejecutarán forzando la marca o salida en una dirección u otra, cuando el RLO esté a uno y pasando olímpicamente del Set o Reset cuando el RLO esté a cero. ¿Fácil no?
Forzado del RLO – SET y CLR Unas instrucciones muy interesantes son las de forzar el RLO, es decir, cargar en el RLO un cero o un uno de forma incondicional hasta que haya una nueva operación de combinatoria booleana:
SET: Fijaremos con ello el RLO a uno CLR: Fijaremos con ello el RLO a cero
Por ejemplo: U E0.1 U E0.2 SET = A1.0
¿Cuánto valdrá A1.0?
Pues efectivamente, la salida A1.0 estará forzada a uno ya que da igual lo que pase con la combinación de las dos entradas ya que luego se fuerza el RLO a uno y se iguala su valor a la A1.0
Flancos en AWL Finalmente vamos a ver los pulsos. Hay dos:
Positivo (FP) Negativo (FN)
Los pulsos como bien sabes son instrucciones que ponen el RLO a uno cuando se cumple el escalon de subida de cero a uno (el positivo) o que el RLO previo pase de uno a cero (el negativo). Necesitan una marca auxiliar que es la que almacena la información de cómo estaba el RLO en el ciclo anterior. Mejor con un ejemplo: U E0.0 FP M1.0 = A1.0 Lo que hará este mini ejemplo será: Mientras que la marca E0.0 esté a cero, la el RLO tras el pulso estará a cero. Cuando la entrada pase a uno, entonces en ese ciclo de scan el pulso pondrá el RLO a 1 haciendo que la salida A1.0 se active en ese ciclo de scan. En el ciclo siguiente aún estando la entrada a uno, la salida volverá a cero ya que el RLO a la salida del pulso estará a cero. Si hicieramos un ejemplo similar con el flanco negativo: U E0.0 FN M1.0 = A1.0 El comportamiento sería igual salvo que esta vez, el RLO después del FN se pondrá a uno cuando la señal de la E0.0 pase de estar a uno a estar a cero. Análogamente al caso anterior sólo estará a uno en ese ciclo de scan, volviendo a cero en los sucesivos con independencia de que la salida siga a cero en este caso.
Operaciones con Bits de Estado Automatización Industrial
Índice TEMA – Operaciones con Bits de Estado 1. – Descripción de los Bits de Estado 2. – Modificación de los Bits de Condición 3. – Evaluación de Bits de la Palabra de Estado 4. – Operaciones sobre el RLO
Bits de Estado – Palabra de Estado Definición • Los Bits de Estado son bits indicadores de operación (flags) • Son utilizados por la CPU para controlar las operaciones binarias y las actualiza durante el procesamiento digital. • La palabra de estado contiene bits a los que se puede acceder con el operando de operaciones lógicas con bits y con palabras.
Estructura de la Palabra de Estado
Descripción de los Bits de Estado (I) Bit /FC – Firts Check – Bit de Primera Consulta Cada operación lógica consulta el estado del bit /FC, así como el estado de señal del operando direccionado. Si el bit /FC es ”0”, la operación almacenará el resultado de la consulta del estado de señal en el bit RLO de la palabra de estado (bit RLO) y el bit /FC se pone a ”1”. Este proceso se denomina primera consulta
Bit RLO – Result of Logic Operation – Resultado Lógico Este bit almacena el resultado de una operación lógica binaria o de una comparación.
Descripción de los Bits de Estado (II) Bit STA – Status – Bit de Estado El bit de estado almacena el valor del bit direccionado.
Bit OR – Bit de Estado OR El bit OR (O) se requiere al realizar una combinación Y antes de O con una operación O.
Bit OV – Overflow – Bit de Desbordamiento Indica un desbordamiento en el rango de un número o la utilización de números reales no válidos.
Bit OS – Stored Overflow – Bit de Desbordamiento Memorizado Se activa junto con OV, pero permanece activo hasta llamada a bloque, fin de bloque o JOS (salto si OS = 1).
Descripción de los Bits de Estado (III) Bits CC1 y CC0 – Condition Code Bits – Bits Condición Los bits CC1 y CC0 dan información sobre los resultados o bits siguientes: • • • •
Resultado de una operación aritmética Resultado de una operación de comparación Resultado de una operación digital Bits que han sido desplazados por una operación de desplazamiento o de rotación
Bit BR – Binary Result – Bit de Resultado Binario El bit BR corresponde a la salida de habilitación (ENO) para el cuadro KOP. Con la operación SAVE (en STL) o con la bobina se guarda un RLO en el bit BR.
Modificación de los Bits de Condición (I) CC1 y CC0 tras operaciones aritméticas, sin desbordamiento
CC1 y CC0 tras operaciones aritméticas con enteros, con desbordamiento
CC1 y CC0 tras operaciones aritméticas (coma flotante) con desbordamiento
Modificación de los Bits de Condición (II) CC1 y CC0 tras operaciones de comparación
CC1 y CC0 tras operaciones de desplazamiento y rotación
CC1 y CC0 tras operaciones lógicas digitales
Evaluar los Bits de la Palabra de Estado (I) Bit de Anomalía - Registro BR
BR
I 0.0
&
I 0.1
• Consulta el valor de señal del bit BR (resultado binario)
BR
Bit de Anomalía - Operación no Válida
≥1
Q 4.0
S
UO
• Determina si el resultado de una función aritmética de números en coma flotante es o no admisible (es decir, si uno de los valores de la función aritmética no es un número en coma flotante válido). Para ello se evalúan los códigos de condición de la palabra de estado (CC1 y CC0).
Bit de Anomalía - Desbordamiento
OV
• Detecta un desbordamiento (OV) en la función aritmética ejecutada en último lugar. Si tras una función aritmética el resultado se encuentra fuera de rango.
Bit de Anomalía - Desbordamiento Memorizado
OS
• Detecta un desbordamiento permanente (OS). A diferencia del bit OV (bit de desbordamiento), el bit OS permanece activado aunque las operaciones aritméticas se ejecuten sin error.
Evaluar los Bits de la Palabra de Estado (II) Bits de Resultado
• Determinar la relación entre el resultado de una operación aritmética y 0
I 0.0 IW0 IW2
SUB_I EN IN1 OUT IN2 ENO >=0
MW10
&
Q 4.1
S
Evaluar los Bits de la Palabra de Estado (III) Operaciones de Consulta de Bits de Estado en STL A
-
Chequea que cumple condición y operación lógica AND
O
-
Chequea que cumple condición y operación lógica OR
X
-
Chequea que cumple condición y operación lógica XOR
AN
-
Chequea que no cumple condición y operación lógica AND
ON
-
Chequea que no cumple condición y operación lógica OR
XN
-
Chequea que no cumple condición y operación lógica XOR
>0
Resultado mayor que 0
>=0
Resultado mayor o igual que 0
[(CC0 = 0) && (CC1 = 1)] [(CC0 = 0)]
<0
Resultado menor que 0
[(CC0 = 1) && (CC1 = 0)]
<=0
Resultado menor o igual que 0
[(CC1 = 0)]
<>0
Resultado distinto de 0
[(CC0=0) && (CC1=1) v (CC0=1) && (CC1=0)]
==0
Resultado igual a 0
[(CC0 = 0) && (CC1 = 0)]
UO
Resultado inválido (fuera de orden) [(CC0 = 1) && (CC1 = 1)]
OV
Overflow
[OV = 1]
OS
Overflow Memorizado
[OS = 1]
BR
Resultado Binario
[BR = 1]
Evaluar los Bits de la Palabra de Estado (IV) Operaciones de Bits de Estado en STL RLO
BR
CC0
CC1
OV
OS
1
-
-
-
-
-
Funciones de Salto Ejecutables JC, JCB
0
-
-
-
-
-
JCN, JNB
-
1
-
-
-
-
JBI
-
0
-
-
-
-
JNBI
-
-
0
0
-
-
JZ, JMZ, JPZ
-
-
0
1
-
-
JN, JP, JPZ
-
-
1
0
-
-
JN, JM, JMZ
-
-
1
1
-
-
JUO
-
-
-
-
1
-
JO
-
-
-
-
-
1
JOS
Operaciones sobre el RLO Operaciones sobre el RLO en STL SET
Establece el RLO a “1”
CLR
Establece el RLO a “0”
NOT
Niega el contenido del RLO
SAVE
Guarda el contenido del RLO en BR
Carga y Transferencia de la Palabra de Estado Operaciones de Carga y Transferencia de la Palabra de Estado L STW
Carga la palabra de estado en el ACU1
T STW
Transfiere el valor del ACU1 a la palabra de estado
Dependiendo de la CPU, los bits /FC, STA y OR no se copian en el ACU1, se ponen a “0”
Ejemplos Ejemplo 1: SET S R CLR S
; M M ; C
8.0; // Pone a 1 marca 8.1; // Pone a 0 marca 1;
// Pone a 0 el // flanco del set del contador
Ejemplo 2: SET ; SAVE; ... AN OV; SAVE; ...
// Pone BR a 1 // Pone BR a 0 con overflow
Tipos de datos en S7 Tipo y descripción
Tamaño en bits
Opciones de formato
Márgenes y representación numérica
Ejemplo
TRUE/FALSE
1 / TRUE 0 / FALSE
BOOL (bit)
1
Variable booleana Todo / Nada
Formato de variables numéricas “matematizables” (con operaciones de cálculo) INT (número entero) Identificador: I
16
DINT (entero de 32 bits) Identificador: D
32
REAL (número decimal en coma flotante) Identificador: R
32
Número entero con signo
-32768
hasta
150
32767
W Número entero con signo
L#-2147483648
hasta
L#85
L#2147483647
DW IEEE Número en coma flotante
Límite superior: 3.402823e+38
1.234567e+13 6,0 0,0
DW Límite inferior: 1.175 495e-38
Formatos de tiempo S5TIME (tiempo SIMATIC)
16 W
TIME (tiempo IEC)
32 DW
Tiempo S7 en pasos de 10 ms (valor estándar)
Tiempo IEC en intervalos de 1 ms, número entero con signo Equivale al formato DINT (D) con unidad de 1ms
DATE (fecha IEC)
16
Fecha IEC en pasos de 1 día
W TIME_OF_DAY (hora)
32
Hora en intervalos de 1 ms
DW
S5T#0H_0M_0S_10MS hasta
S5T#0H_1M_0S_0MS
S5T#2H_46M_30S_0MS
S5TIME#0H_1H_1M_0S_0MS
-T#24D_20H_31M_23S_648MS hasta
T#0D_1H_1M_0S_0MS
T#24D_20H_31M_23S_647MS
TIME#0D_1H_1M_0S_0MS
D#1990-1-1
D#1994-3-15
hasta
D#2168-12-31
DATE#1994-3-15
TOD#0:0:0.0 hasta
TOD#1:10:3.3
TOD#23:59:59.999
TIME_OF_DAY#1:10:3.3
www.campusabierto.es
©Adolfo Molina
Tipos de datos en S7 Tipo y descripción
Tamaño en bits
Opciones de formato
Márgenes y representación numérica
Ejemplo
BYTE (byte)
8
Número hexadecimal
B
WORD (palabra)
16
Número binario
B#16#0 hasta B#16#FF
B#16#10
2#0 hasta 2#1111_1111_1111_1111
2#0001_0000_0000_0000
W#16#0 hasta W#16#FFFF
W#16#1000
BCD Formato carga contadores Z
C#0 hasta C#999
C#12
Número decimal sin signo Dos Byte
B#(0,0) hasta B#(255,255)
B#(136,20)
Número binario
2#0 hasta 2#1111_1111_1111_1111_ 1111_1111_1111_1111
2#1000_0001_0001_1000_ 1011_1011_0111_1111
DW#16#0000_0000 hasta DW#16#FFFF_FFFF
DW#16#00A2_1234
Número decimal sin signo Cuatro Byte
B#(0,0,0,0) hasta B#(255,255,255,255)
B#(1, 14, 100, 120)
Caracteres ASCII
'A','B' etc.
W Número hexadecimal
DWORD (palabra doble)
32 DW
Número hexadecimal
Variable ASCII (carácter)
8
'E'
B
www.campusabierto.es
©Adolfo Molina
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Introducción a los Tipos de Datos en STEP 7
Tipos de datos elementales (hasta 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)
Tipos de datos complejos (mayores de 32 bits)
• Tiempo (DATE_AND_TIME) • Array (ARRAY) • Estructura (STRUCT) • Cadena de Caracteres (STRING)
Tipos de datos definidos por el usuario (mayores de 32 bits)
Tipo de Datos UDT (User Defined Type)
PLC’s Curso 2009/10
Página 2
TIPOS DE DATOS DE BIT – TAMAÑO • La memoria del Autómata está estructurada en bytes. • Estos bytes podemos agruparlos/descomponerlos, obteniendo los siguientes tamaños de datos: – Bit _ _ _ .Nº – Byte (8 bits) _ _ _ B – Palabra/word (16 bits) _ _ _ W – Doble palabra/double word (32 bits) _ _ _ D
• Se puede acceder a cualquier área de la memoria: marcas, entrada, salida, etc. con cualquiera de los tamaños de datos: PLC’s Curso 2009/10
Página 3
DIRECCIONAMIENTO 1/3
Zona de memoria:
E Tam BBB.b Número de byte y bit (0-7), en su caso
• 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
PLC’s Curso 2009/10
Página 4
DIRECCIONAMIENTO 2/3
124
124
125
125
125
125
PLC’s Curso 2009/10
Página 5
DIRECCIONAMIENTO 3/3 • Dentro de cada byte, palabra o doble palabra, los bits se numeran de derecha a izquierda, de 0 al 7.
E 124.0
• Dir. byte: área de memoria + B + nº de byte EB124
• Dir. palabra: área de memoria + W + nº de su 1er byte EW124 => EB124 EB125
• Dir. doble palabra: área de memoria + D + nº de su 1er byte MD0 => MB0 MB1 MB2 MB3 PLC’s Curso 2009/10
Página 6
SISTEMAS NUMÉRICOS • Sistemas numéricos soportados: – Decimal (enteros y fraccionarios), binario, hexadecimal, BCD • Tipos de datos: – Entero (en cualquiera de los sistemas numéricos anteriores) – Real (coma flotante)
Ver ayuda Admin. Simatic Tipos de datos simples
– Carácter
– Tiempo: cantidad de tiempo, hora, S5T, fecha – Puntero
PLC’s Curso 2009/10
Página 7
Tipos de Datos Elementales en STEP 7 Palabra Clave
Long. (en bits)
Ejemplo de una constante de este tipo
BOOL BYTE WORD DWORD CHAR
1 8 16 32 8
1ó0 B#16#A9 o B169 W#16#12AE o W4782 DW#16#ADAC o DW44460 'w'
S5TIME
16
S5T#5s_200ms
INT DINT REAL
16 32 32
123 65539 1.2 o
TIME DATE TIME_OF_DAY
32 16 32
T#2D_1H_3M_45S_12MS D#1993-01-20 TOD#12:23:45.12
34.5E-12
PLC’s Curso 2009/10
Página 8
Números en COMA FLOTANTE Estándar IEEE754:
(1/2)
Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23) 31 30
...
………...
23 22 21
- Signo (S)
⇒ 1: negativo , 0: positivo (bit 31)
- Mantisa (M)
⇒ La mantisa incluye 23 bits (bit 0.. 22).
2
1
0
- Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30). PLC’s Curso 2009/10
Página 9
Números en COMA FLOTANTE
Estándar IEEE754:
(2/2)
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: Parte ligada al exponente: Parte ligada a la mantisa: Resultado:
(-1)1 = -1 2128-127=21 1+6291456·2-23=1+0.75 -1 · 2 · 1.75
=2 =1.75 = -3.5
PLC’s Curso 2009/10
Página 10
ACUMULADORES (1/2) • Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas. ACCU-H (16 bits)
ACCU-L (16 bits)
• CPU 314IFM tiene 2 acumuladores. • Carga al ACCU1, y el antiguo ACCU1 pasa al ACCU2. • Si cargamos o transferimos tamaños de datos menores a la doble palabra ( bits, bytes (B), word (W) ), se empieza a leer y escribir por la derecha (byte menos significativo) PLC’s Curso 2009/10
Página 11
ACUMULADORES (2/2)
Operaciones entre acumuladores: – TAK: intercambia contenido ACCU1 y ACCU2 . – PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º. – POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º. – ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4. – LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.
PLC’s Curso 2009/10
Página 12
CARGA Y TRANSFERENCIA 1/7 Permiten programar intercambio de información entre módulos de E/S y áreas de memoria. L
-->
T -->
Instrucción de carga a ACCU-1 Instrucción de transferencia desde ACCU-1
• Cargan y transfieren del acumulador ACCU1, independientemente del valor RLO, y tampoco lo modifican. • A dichas instrucciones les sigue un código en el que se indica el tamaño, formato y el número/posición a cargar o transferir. PLC’s Curso 2009/10
Página 13
CARGA Y TRANSFERENCIA 2/7 • Ejemplos: – LC Z0 --> Carga el contenido del contador en el acumulador en BCD. Si Z0=10
ACU1: 00 00 00 .......... 0001 0000
(BCD)
– L Z0 --> Idem pero en Binario Si Z0=10
ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)
– L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,
PLC’s Curso 2009/10
Página 14
CARGA Y TRANSFERENCIA 3/7 • Ejemplos: – L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE) ACU1: EB124 EB125 EB126 EB127 Obsérvese: el byte más significativo del acumulador (parte izquierda) queda relleno con el byte de dirección menor, y el de mayor dirección, a la dcha. – L EW8 (Cargar en el ACU1 la palabra 8 de la PAE) 00
00
EB8
EB9
– L EB8 (Cargar en el ACU1 el byte 8 de la PAE) 00
00
00
EB8 PLC’s
Curso 2009/10
Página 15
CARGA Y TRANSFERENCIA 4/7
• Ejemplos (con los Registros de Direcciones, AR1 y AR2): – LAR1
----> Carga el reg.de dirección AR1 con el contenido de ACU1
– LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2 – TAR
----> Intercambia los contenidos de registros AR1 y AR2
– TAR1 R2 ----> Transfiere el contenido de AR1 a AR2 El listado AWL siguiente: L ED 124 LAR1 L ED 128 LAR2
Tendrá como resultado:
ED124 ----> AR2 ED128 ----> AR1
TAR PLC’s Curso 2009/10
Página 16
CARGA Y TRANSFERENCIA 5/7 • Ejemplos (L y T con diferentes tamaños): – L EB124 (Cargar en el ACU1 el byte 124 de las entradas) 00 00 00 EB124 – Si ahora hacemos T MW32 00 00 00
EB124
MB32 MB33 •
L ED124
EB124
EB125 EB126 EB127
T MB32
MB32 PLC’s
Curso 2009/10
Página 17
CARGA Y TRANSFERENCIA 6/7 L +5
--> Carga entero de 16 bits
L L#523123
--> Carga un entero de 32 bits
Ver ayuda Adm. Simatic
L B#16#EF
--> Carga un hexadecimal de 8 bits
“Tipos de datos simples”
L 2#0011_0110_1110_0011 --> Carga binario de 16 bits
NOTA:
T MB0 T AD256
--> Transfiere (el ACU1) al byte de marcas 0 --> Transfiere (el ACU1) a la doble palabra de salida 256
PLC’s Curso 2009/10
Página 18
CARGA Y TRANSFERENCIA 7/7
PLC’s Curso 2009/10
Página 19
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 Curso 2009/10
Página 20
Módulos de Datos y
Tipos de datos Automatización Industrial
Índice TEMA – Módulos de Datos y Tipos de Datos 1. – Tipos de Módulos de Datos 2. – Edición de Módulos de Datos 3. – Llamada a Módulos de Datos 4. – Acceso a Módulos de Datos 5. – Tipos de Datos 5.1 – Tipos de Datos Elementales 5.2 – Tipos de Datos Estructurados
Introducción DB OB
DB
FB
Módulo de organización
FC DB
DB FB
FB
OB = FB = FC = SFB = SFC = SDB = DB =
Módulo de Organización Módulo de Función Función Módulo de Función de Sistema Función de Sistema Módulo de Datos de Sistema Módulo de Datos
SFB
SFC
Leyenda:
Módulo de datos a instancia
Tipos de Módulos de Datos 8 bits Global (normalmente usados)
Byte datos 0 El máximo tamaño del módulo para la CPU 314 es 8 kBytes. La cantidad de memoria disponible para los módulos de datos depende de la CPU.
Instancia (local)
Byte datos 8191
Edición de Módulos de Datos (I)
Edición de Módulos de Datos (II) STEP 7 Dirección de memoria Nombre local
Valor inicial Datablock c:\class\machine1\db10
Tipo de datos
Comentario
Llamada a Módulos de Datos Del OB 1
Al OB 1
FC 15
FC 16
: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
DB 12
DB 13
Acceso a Elementos de Datos Abrir módulo de datos OPN DB 19 OPN valores
Carga y Transferencia en Módulos de Datos L DBB 1 L DBW 2 L5 T DBW 4 L 'A' L DBB28 ==I
Cargar el byte de datos 1. Cargar la palabra de datos 2 (byte 2/3). Cargar el número 5. Transferir a la palabra 4. Cargar el carácter ASCII A. Cargar el byte de datos 28. Comparar.
U DBX 3.1
Consultar el bit 1 del byte 3.
L DB19.DBW4
Cargar la palabra de datos 4 del DB19 (incluye OPN DB 19). Acceso simbólico a la variable N1. “valores” es el nombre simbólico del DB que contiene dicha variable
L valores.N1
Notas de Acceso a Elementos de Datos Direccionamiento • • • • • •
STEP 7 permite tener dos DBs abiertos simultáneamente Uno se referencia por DB (global) y el otro por DI (instancia) La forma de abrirlos: OPN DB 5, OPN DI 7 Para cargar o transferir al DB: L DBB 0, T DBB 1 Para cargar o transferir al DI: L DIB 0, T DIB 3 Otra forma de direccionar sin abrir el DB: L DB5.DBB 0, T DB7.DBB 1 • Para direccionamiento de bit, byte, palabra y doble palabra: A DB5.DBX 0.7, para direccionar un bit L DB5.DBB 7, para direccionar un byte L DB5.DBW 7, para direccionar una palabra L DB5.DBD 7, para direccionar una doble palabra
Tipos de Datos Elementales • Las variables de tipos de datos básicos tiene una longitud máxima de doble palabra • Son procesadas con instrucciones de carga y transferencia o con operaciones lógicas binarias • Los tipos de datos elementales pueden ocupar un bit, un byte, una palabra o una doble palabra Declaración: Varname : datatype := pre-assignment Varname es el nombre de la variable datatype es un tipo de dato elemental pre-assignment es el valor asignado • Una variable pude ser declarada global en la tabla de simbólicos o locamente en la sección de declaraciones
Tabla de Tipos de Datos Elementales Tipo de Datos Tamaño Descripción (Bit)
BOOL BYTE WORD DWORD CHAR STRING INT DINT REAL TIME DATE TOD S5TIME
1 8 16 32 8
Bit. Rango: true o false Byte. Rango: 0 a 255 Palabra. Rango: 0 a 65.53532-1 Doble Palabra. Rango: 0 a 2 Carácter. Cada carácter imprimible (Código ASCII >31) 8 X 254 Cadena de caracteres desde 2 a 254 16 Entero. Rango: -32.768 a 32.767 32 Doble entero. Rango: -231a 231-1 32 Número en coma flotante. (IEEE) 32 Tiempo en intervalos de 1 ms (IEC) 16 Fecha en intervalos de 1 día (IEC) 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) 16 Valor de tiempo para los temporizadores. Rango: 0H_0M_0S_0MS a 2H_46M_30_0MS
Bit, Byte, Palabra y Doble Palabra • • • • 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 BYTE Longitud = 8 BITS
Longitud = 1 BIT
7 6 5 4 3 2 1 0
PALABRA Longitud = 16 BITS 7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
DOBLE PALABRA Longitud = 32 BITS 7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
Representación en BCD • Se pueden introducir datos en BCD con tipo de dato 16# (hexa) y usar sólo dígitos de 0 a 9 (p.e. L W#16#2468) • Para temporizadores está definido el tipo de datos S5TIME# (p.e. L S5TIME#30s.) • Para contadores está definido el tipo de datos C# o 16# (p.e. L C#368)
Número BCD, 3 décadas Byte m+1
Byte m 8 7
12 11
15
10 2
Signo
4 3
101
0
100
Número BCD, 7 décadas
Byte m+1
Byte m
15
12 11
Signo
8 7
106
4 3
105
0 15
104
Byte m+3
Byte m+2
103
12 11
102
8 7
4 3
101
Tipo de Dato CHAR • EL tipo de datos CHAR representa un carácter en código ASCII. • Cada variable de tipo CHAR ocupa un byte (p.e. L ‘A’)
Dato tipo CHAR Byte m
7 6 5 4 3 2 1 0
Código ASCII
0
100
Representación de Números (I) INT: • Una variable de tipo de dato INT representa un entero que es almacenado en 16 bits (una palabra) en coma fija • No tiene un identificador especial • Los bits 0-14 representan el valor de la variable • El bit 15 representa el signo (“0” -> positivo ; “1” -> negativo) • Números negativos son almacenados en forma de complemento a dos • El rango posible desde +32.767 (7FFFhex) a -32.768 (8000hex) 15 14
.......0
..... 2 2 21 2 0
S 214.....
Representación de Números (II) DINT: • Una variable de tipo de dato DINT representa un entero que es almacenado en 32 bits (doble palabra) en coma fija • Un entero es almacenado como una variable DINT: • si es mayor de 32.767 o menor de -32.768 • si el identificador L # precede al número • Los bits 0-30 representan el valor de la variable • El bit 31 representa el signo (“0” -> positivo ; “1” -> negativo) • Números negativos son almacenados en forma de complemento a dos • El rango posible desde: • +2,147,483,647 (7FFF FFFFhex) a -2,147,483,648 (8000 0000hex) 31 30 30
S 2 .....
.......16 15..... 16
15
....2 2 ....
.......0
..... 2 21 2 0 2
L -100 // Se carga un número INT en ACU1. Palabra izquierda ACU1 (0000hex) L L#-100 //se carga un número DINT en ACU1. Palabra izquierda ACU1 (FFFFhex)
Representación de Números (III) REAL:
• Una variable de tipo de dato REAL representa una fracción que es almacenado en 32 bits (doble palabra) en coma flotante • Un entero es almacenado como una variable REAL: - si el punto decimal es seguido por un cero (L 100.0 o L 1.0e+2) • La variable real consiste internamente en tres partes: - el signo (bit 31) ( “0” -> positivo; “1” -> negativo) - 8 bits para el exponente (en base 2) (bits 23 a 30) - 23 bits de mantisa (bits 0 a 29) • Números “normalizados en coma flotante”: - rango desde -3.402 823 x 10 +38 a -1.175 494 x 10 -38) - +1.175 494 x 10 -38 a 3.402 823 x 10 +38 • Números “no normalizados en coma flotante”: - - 1.17 494 x 10 -38 a -1.401 298 x 10 -45 - + 1.401 298 x 10 -45 a +1.175 494 x 10 -38
31 30.... 7
S 2 ...
.......0
.23 22..... 0
−1 −2
..... 2 −23
....2 2 2 ....
Exponente
Mantisa
Representación de Números (IV) REAL:
Representación de Tiempos (I) S5TIME: • Una variable de tipo de dato S5TIME es usada para inicializar temporizadores en STL, LAD y FBD • Ocupa una palabra de 16 bits con 1 + 3 décadas • El tiempo se especifica en horas, minutos, segundos y milisegundos • La conversión a la representación interna la realiza el STEP 7 • El número es representado internamente en BCD de 000 a 999 • El tiempo base puede se: 10 ms (00), 100ms (01), 1s (10) y 10s (11) • El tiempo es el producto del valor por la base 15 14
.......0 0
10
10
2
Base de tiempo
S5TIME#500ms S5T#2h46m30s
1
10
0
10
Valor de tiempo
(=0050hex) (=3999hex)
Representación de Tiempos (II) DATE: • Una variable de tipo de dato DATE es almacenada en una palabra como un número sin signo en coma fija • El contenido de la variable corresponde al número de días desde el 01.01.1990. • La representación contiene el año, el mes y el año, cada uno separado por (-) 15 14
.......0
14
..... 2 21 20
15
2
2 2 ..... Ejemplos: DATE#1990-01-01 D#2168-12-31
(=0000hex) (=FF62hex)
Representación de Tiempos (III) TIME: • Una variable de tipo de dato TIME ocupa una doble palabra • La representación contiene especificación de día (d), hora (h), minutos (m), segundos (s) y milisegundos (ms) • El contenido de la variable es interpretado como milisegundos (ms) y almacenados como un número de 32 bits en coma fija con signo 31 30
.......16 15.....
30
16
.......0
15
....2 2 ....
..... 2 2 21 20
TIME#24d20h31m23s647ms TIME#0ms
(=7FFF_FFFFhex) (=0000_0000hex)
S 2 ..... Ejemplos:
Representación de Tiempos (IV) TIME_OF_DAY: • Una variable de tipo de dato TIME_OF_DAY ocupa una doble palabra • Contiene el número de milisegundos desde el comienzo del día (0:00) como un número si signo en coma fija • La representación contiene la especificación de horas, minutos, segundos y milisegundos. 31 30 31
30
.......16 15.....
2 2 .....
16
15
....2 2 ....
.......0
..... 2 21 20 2
Ejemplos: TIME_OF_DAY#00:00:00 TOD#23:59:59.999
(=0000_0000hex) (=0526_5BFFhex)
Representación de Tiempos (V) DATE_AND_TIME: • El tipo de dato DATE_AND_TIME representa un tiempo consistente en fecha y momento del día • Se puede utilizar la abreviación DT en lugar de DATE_AND_TIME como un número si signo en coma fija • La representación interna es de 64 bits •Se indica como Año-Mes-Día -h:min:s.ms
Ejemplo: DT#1995-02-02-08:30:01.999
Tipos de Datos Estructurados y Arrays Estructura
Array
COMPONENTES GEOMÉTRICOS
TIPO
GEO_COMPONENTES STRUCT CIRCULO: TRIANGULO:
CUADRADO: RECTANGULO: END_STRUCT END_TYPE
ENTERO PALABRA REAL ENTERO
FUNCTION_BLOCK: EJEMPLO VAR GEOMETRY: ARRAY [1...3 ] of GEO_COMPONENTS END_VAR
Strings
Antes de utilizar los datos locales dinámicos del tipo STRING, el usuario los debe inicializar p.ej. mediante una secuencia AWL tal como: LAR1 P#lokal_string_var // lokal_string_var está declarada en VAR_TEMP como STRING[200] L 200 // longitud de STRING indicada arriba T LB [AR1, P#0.0] // introducido en el MAX Len Byte de la cadena L 5 // longitud real de la cadena T LB [AR1, P#1.0] // introducir longitud real de la cadena
UDT: Tipos de Datos de Usuario UDT Son estructuras de datos creadas por el usuario y que, una vez definidas, pueden utilizarse en todo el programa. Los tipos de datos de usuario (UDTs) se crean en el Administrador SIMATIC o con el editor incremental.
Estructura de un UDT Después de abrir un UDT se visualiza en una nueva ventana de trabajo la tabla de este tipo de datos de usuario en modo "Declaración". • La primera y la última línea contienen ya las declaraciones STRUCT y END_STRUCT, respectivamente, que indican el comienzo y el fin del tipo de datos de usuario. • Puede editar el tipo de datos de usuario comenzando a partir de la segunda línea de la tabla de declaración en las columnas correspondientes. • Los tipos de datos de usuario pueden estar formados por: •tipos de datos simples, •tipos de datos compuestos o •tipos de datos de usuario ya existentes
UDT: Ejemplo en AWL TYPE UDT 20 STRUCT arranque : BOOL; //variable del tipo BOOL teórico : INT; //variable del tipo INT alor : WORD; //variable del tipo WORD END_STRUCT; END_TYPE
Step 7 Elementary Data Types Type and Siz Format Descripti e Options on in Bit s
Range and Number Notation (lowest to highest values)
Example in STL
BOOL (Bit)
1 Boolean text
TRUE/FALSE
TRUE
BYTE (Byte)
8 Hexadeci mal number
B#16#0 to B#16#FF
L B#16#10 L byte#16#10
2#0 to 2#1111_1111_1111_1111
L 2#0001_0000_0000_0000
Hexadeci mal 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)
WORD (Word)
DWORD (Double word)
16 Binary number
32 Binary number
2#0 to L 2#1111_1111_1111_1111_ 2#1000_0001_0001_1000 1111_1111_1111_1111 _ 1011_1011_0111_1111
Hexadeci mal 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 (Floatingpoint number)
32 IEEE Floatingpoint number
Upper limit +/L 1.234567e+13 3.402823e+38 Lower limit +/-1.175495e38
S5TIME (SIMATI C 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_64 8MS to T#24D_20H_31M_23S_64 7MS
L T#0D_1H_1M_0S_0MS L TIME#0D_1H_1M_0S_0 MS
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_DA Y (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
A', 'B' etc.
L 'E'
CHAR (Character )
8 ASCII characters
S5TIME NOTES
Underscores in time and date are optional It is not required to specify all time units (for example: T#5h10s is valid) Maximum time value = 9,990 seconds or 2H_46M_30S
S5TIME Format
Time base Binary Code 10 ms
00
100 ms
01
1s
10
10 s
11
Symbol Table Allowed Addresses and Data Types English German Description Mnemonics Mnemonics
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 DWORD, DINT, REAL, word TOD, TIME
0 to 65532
Timers and Counters T
T
Timer
TIMER
0 to 65535
C
Z
Counter
COUNTER
0 to 65535
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
DB
Data block
DB, FB, SFB, UDT
1 to 65535
Logic Blocks
Data Blocks DB
User-defined data types
UDT
UDT
User-defined data type
UDT
0 to 65535
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Introducción OB’s, FB’s, FC’s Tabla de declaración de variables Variables locales y atributos del sistema
Área de instrucciones Formado por uno o varios segmentos Lenguajes posibles: AWL(inglés, aleman), KOP, FUP
Propiedades de bloques Autor del bloque Fecha y hora de creación..........
PLC’s Curso 2009/10
Página 2
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 Curso 2009/10
Página 3
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
Curso 2009/10
Página 4
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 Curso 2009/10
Página 5
Operaciones lógicas a nivel de bit
PLC’s Curso 2009/10
Página 6
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 Curso 2009/10
Página 7
Operaciones lógicas a nivel de bit
• Realiza la operación AND de dos bits.
Diagrama de contactos
E 124.2
• En diagrama de contactos equivale a una conexión serie
U E124.2 AWL
E 125.0
A 125.0
KOP
U E125.0 =A 125.0 PLC’s
Curso 2009/10
Página 8
Operaciones lógicas a nivel de bit
• Realiza la operación OR de dos bits.
O E124.2 AWL
E 124.2
E 125.0
• En diagrama de contactos equivale a una conexión paralelo.
O E125.0 =A 125.0 KOP
A 125.0
PLC’s Curso 2009/10
Página 9
Operaciones lógicas a nivel de bit
AWL
AWL KOP
KOP E 124.1
A 124.0
U E124.1
E 124.0
UN E124.0
E 124.0
=A 124.0
E 124.1
A 124.0
O E124.1 ON E124.0 =A 124.0
PLC’s Curso 2009/10
Página 10
Operaciones lógicas a nivel de bit FUP
KOP
AWL
PLC’s Curso 2009/10
Página 11
Operaciones lógicas a nivel de bit
PLC’s Curso 2009/10
Página 12
Operaciones lógicas a nivel de bit
U E 124.0 UN E 124.1 = A 124.0 U E 125.0
Primera consulta
Primera consulta
PLC’s Curso 2009/10
Página 13
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 Curso 2009/10
Página 14
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
Curso 2009/10
Página 15
OPERACIONES CON MEMORIA (II/IV)
PLC’s Curso 2009/10
Página 16
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 Curso 2009/10
Página 17
OPERACIONES CON MEMORIA (IV/IV)
Tiempo de ciclo
U E 124.0 S A 124.0 U E 124.1 R A 124.0
PLC’s Curso 2009/10
Página 18
MARCAS
PLC’s Curso 2009/10
Página 19
EJERCICIO (Entregable 1)
• El estado de disponibilidad o no de servicio lo proporciona un selector de dos posiciones: Conectado-Desconectado. • La electrobomba se pondrá en marcha cuando el sensor de mínimo esté encendido y se apagará cuando, o bien se encienda el sensor de máximo, o bien salte el térmico o bien la desconectemos mediante el selector. • Si la electrobomba está en servicio deberá lucir una lámpara indicadora. • Si salta el térmico se encenderá otra lámpara avisándolo.
PLC’s Curso 2009/10
Página 20
Operaciones Binarias y de Memoria Automatización Industrial
Índice TEMA – Operaciones Binarias y de Memoria 1. – Palabra de Estado 2. – Instrucciones de Bit 3. – Operaciones Lógicas Binarias 4. – Consideraciones sobre Sensores 5. – Operaciones de Memoria 5.1 – Detectores de Flanco 5.2 – Operaciones SR/RS 6. – Consideraciones sobre Primera Consulta
Palabra de Estado (I) • Contiene bits con información de estado • Las operaciones interpretan o activan los bits de estado • La palabra de estado tiene 16 bits
215.....
28 27 26 25 2 4 23 2 2 21 20 BR CC1 CC0 OV OS OR STARLO/FC
Bit 0
Ocupación /FC
1 2 3 4
RLO STA OR OS
Significado Bit de primera consulta - En el comienzo de un segmento su valor es “0” - Excepto cuando el seg. previo finaliza con “SAVE” Bit de resultado lógico. Se almacena resultado lógico Bit de estado Bit OR (necesario en operaciones Y antes de O) Bit de desbordamiento memorizado
Palabra de estado (II) Bit 5
Ocupación OV
6 7
CC0 CC1
8
BR
9 a 15 No ocupado
Significado Bit de desbordamiento. Error de desbordamiento en operaciones en coma flotante Código de condición “0” Código de condición “1” Proporcionan información sobre: - Resultado de una operación aritmética - Resultado de una comparación - Resultado de una operación digital - Bits desplazados del operando por desplazamiento o rotación Resultado binario. Establece un enlace entre el procesamiento de palabras y el procesamiento de bits
Instrucciones bit • Las instrucciones bit trabajan con los dos números binarios, 0 y 1. • En el ámbito de las operaciones lógicas: - “1” significa activado - “0” significa no activado • Las instrucciones bit interpretan estados de señal de 1 y 0 y los combina según lógica de Boole • El resultado de estas combinaciones es “1”o “0”. Se indican como "Resultado de Operación Lógica" (RLO).
Operaciones Lógicas Binarias I #
O I 0.1 O I 0.2 = Q 4.1
&
A I 0.1 A I 0.2 = Q 4.1
NOT
XOR
S >=1 =
SR_FF Q S
RS_FF Q R
R
S
Operaciones Lógicas Binarias II Operación A AN A( AN( O ON O O( ON( X XN X( XN( )
Función “Y” Función “YN” Y - abrir paréntesis NO-Y abrir paréntesis Función “O” Función “ON” Función “O” de funciones “Y” O - abrir paréntesis NO-O abrir paréntesis Función O-EXCLUSIVA Función NO-O-EXCLUSIVA O-EXCLUSIVA abrir paréntesis NO-O-EXCLUSIVA abrir paréntesis Cerrar paréntesis
= # FP FN S R SAVE
Función de asignación Conector intermedio Función de flanco positivo Función de flanco negativo NOT Función negación Función set de un biestable Función reset de biestable Salvar RLO en RB
Operaciones lógicas binarias III Operación lógica “Y”
I 0.1
&
Q 4.0
I 0.2
=
A I 0.1 A I 0.2 = Q 4.0
Operación lógica “O”
I 0.3 I 0.4
>=1
Q 4.1 =
O I 0.3 O I 0.4 = Q 4.1
Operación lógica binarias IV Operación lógica “O” de funciones “Y” I 0.0 I 0.1 I 0.2
& >=1 &
Q 4.0
I 0.3
=
Operación lógica “Y” de funciones “O” I 0.0 I 0.1 I 0.2
>=1 & >=1
Q 4.1
I 0.3
=
A A O A A = A( O O ) A( O O ) =
I 0.0 I 0.1 I 0.2 I 0.3 Q 4.0
I 0.0 I 0.1 I 0.2 I 0.3 Q 4.1
Operación Lógica “O-exclusiva”
I 0.1 I 0.2
XOR
Q 4.0 =
X I 0.1 X I 0.2 = Q 4.0
A I 0.1 AN I 0.2 O AN I 0.1 A I 0.2 = Q 4.0
Otras Funciones Binarias I • Insertar entrada binaria • Invertir una entrada binaria • Asignación
• Conector
Otras Funciones Binarias II • Cargar resultado lógico (RLO) en registro BR I 0.1
& SAVE
I 0.2
• Activar salida I 0.1
&
Q 4.0 S
I 0.2
• Desactivar salida I 0.1 I 0.2
&
Q 4.0 R
Ejemplo (I) .
I 0.0 I 0.1 I 0.2
Q 1.0
I 0.0 I 0.3 I 0.5 I 0.1
I 0.3 I 0.4
I 0.4
I 0.5
I 0.2 Q 4.0
I 0.0 I 0.1
&
I 0.2 I 0.3
A A A O A A O A =
>=1
&
I 0.4
=
I 0.5
Q 4.0
I 0.0 I 0.1 I 0.2 I 0.3 I 0.4 I 0.5 Q 4.0
Ejemplo (II) I 0.0
>=1
I 0.1 I 0.2
& >=1
I 0.3
>=1 &
I 0.4 I 0.5 I 0.6
>=1 =
Q 4.0
A( A( O O ) A( O O ) O ) A( O O ) =
I 0.0 I 0.1 I 0.2 I 0.3 I 0.4 I 0.5 I 0.6 Q 4.0
Consideraciones sobre Sensores ENUNCIADO: Accionar la salida cuando esté activado S1 y no esté activado S2 S1
S2
I 0.0
I 0.1
& Q 4.0
S1
S2
I 0.0
I 0.1
& Q 4.0
A I 0.0 AN I 0.1 = Q 4.0
A A =
I 0.0 I 0.1 Q 4.0
S1
S2
I 0.0
I 0.1
& Q 4.0
S2
S1
AN I 0.0 AN I 0.1 = Q 4.0
AN I 0.0 A I 0.1 = Q 4.0
I 0.0
I 0.1
& Q 4.0
Ejemplo (III) I 0.0 I 0.1 I 0.2
Q 4.1
I 0.0 I 0.3 I 0.5 I 0.3 I 0.4
I 0.1 I 0.4 I 0.2
I 0.5
Q 4.1
I 0.0
>=1
I 0.3 I 0.5 I 0.1
& >=1
I 0.4 I 0.2
=
Q 4.1
A( O O O ) A( O O ) A =
I 0.0 I 0.3 I 0.5 I 0.1 I 0.4 I 0.2 Q 4.1
Ejemplo (IV) I 0.0 I 0.1
>=1
I 0.2
>=1
&
I 0.3 I 0.4
XOR
I 0.5 I 0.6 I 0.7
X( A( O I 0.0 O I 0.1 ) A( O I 0.2 O I 0.3 ) A I 0.4 ) X( A I 0.5 A( O I 0.6 O I 0.7 ) ) = Q 4.0
&
Q 4.0
>=1
=
Ejemplo (V) I 0.0 I 0.1
&
M 0.0 &
#
I 0.2 I 0.3
XOR
I 0.4
M 1.1 #
M 2.2 I 0.5
#
>=1
DB5.DBX 3.2 Q 4.0 #
=
A I 0.0 A I 0.1 A I 0.2 NOT = M 0.0 A M 0.0 A( A( X I 0.3 X I 0.4 ) NOT = M 1.1 A M 1.1 O( A I 0.5 = M 2.2 A M 2.2 ) ) NOT = DB5.DBX 3.2 A DB5.DBX 3.2 = Q 4.0
Ejemplo (VI-a) Circuitos de Mando
Circuito de Potencia
1-50 Hz 220v
L1 L2 L3
L1 F1F F3F
F2F
SOQ K1M
K1M
S1B
K1M
K1M
H1
K1M
3
5
2 1
4 3
6 5
F3F
H2
N
Símbolo F3F SOQ S1B K1M H1 H2
1
Operando Comentario I 0.0 Sobreintensidad (NC) I 0.1 Paro (NC) I 0.2 Marcha (NA) Q 4.0 Relé Q 4.1 Lámpara señalización “desconectado” Q 4.2 Lámpara señalización “conectado”
4 6 2 U1 V1 W1 M 3%P
Ejemplo (VI-b) I 0.0 I 0.1 I 0.2
&
Q 4.0
>=1
=
Q 4.0
Q 4.0
Q 4.0
&
&
A A A( O O ) =
I 0.0 I 0.1 I 0.2 Q 4.0 Q 4.0
Q 4.1 =
Q 4.2 =
AN Q 4.0 = Q 4.1 A =
Q 4.0 Q 4.2
Operaciones de Memoria Prioridad a la Conexión
Prioridad a la Desconexión Q 4.0
I 0.1
I 0.1
Marcha
Q 4.0
Marcha
I 0.0
Paro
I 0.0
Paro Q 4.0
A( O O ) A =
Q 4.0
A I 0.1 O A Q 4.0 A I 0.0 = Q 4.0
I 0.1 Q 4.0 I 0.0 Q 4.0
Detector de Flanco Positivo RLO (0 --> 1)
RLO 1
Flanco Positivo
Flanco Negativo
Tiempo
0
Diagrama del estado de la señal Lista de Instrucciones A I 1.0 FP M 1.0 = Q 4.0 Funciones lógicas M 1.0 I 1.0 P Q 4.0
I 1.0
M 1.0 Q 4.0
Detector de Flanco Negativo RLO (1 --> 0)
Flanco Positivo
RLO 1
Flanco Negativo
Tiempo
0
Diagrama del estado de la señal Lista de Instrucciones A I 1.0 FN M 1.0 = Q 4.0
I 1.0
M 1.0
Funciones lógicas M 1.0 I 1.0 N Q 4.0
Q 4.0
Detector de Flanco de Señal (0 --> 1) Compara el estado de la señal del
con el estado de señal de la consulta precedente, que se ha almacenado en en “M_BIT”. Si se produce un cambio de “0” a “1”, la salida Q será “1”.
I 0.3 POS
M 0.0
M_BIT Q
I 0.4
&
Q 4.0 =
A( A I 0.3 BLD 100 FP M 0.0 ) A I 0.4 = Q 4.0
Detector Flanco de Señal (1 --> 0) Compara el estado de la señal del con el estado de señal de la consulta precedente, que se ha almacenado en en “M_BIT”. Si se produce un cambio de “1” a “0”, la salida Q será “1”.
I 0.3
A( A I 0.3 BLD 100 FN M 0.0 ) A I 0.4 = Q 4.0
NEG
M 0.0
Q 4.0
&
M_BIT Q
=
I 0.4
Flip-Flop SR • Biestable preponderante al reset (R) • Esta operación es afectada por el “Master Control Relay (MCR)”
I 0.1
M 1.0 &
I 0.2 I 0.3 I 0.4
S
SR Q 4.1
& R
Q
=
A A S A A R A =
I 0.1 I 0.2 M 1.0 I 0.3 I 0.4 M 1.0 M 1.0 Q 4.1
Flip-Flop RS • Biestable preponderante al set (S) • Esta operación es afectada por el “Master Control Relay (MCR)”
I 0.1
&
I 0.2 I 0.3 I 0.4
A A R A A S A =
M 0.0 R RS Q 4.0
& S
Q
=
I 0.1 I 0.2 M 0.0 I 0.3 I 0.4 M 0.0 M 0.0 Q 4.0
Divisor Binario I 0.7 M 1.0
Segmento 1 & I 0.7
Q 5.0
Q 5.0
M 1.0
S
A I AN M S Q A I A M R Q
0.7 1.0 5.0 0.7 1.0 5.0
I 0.7
& R Q
M 1.0 Segmento 2 & I 0.7 Q 5.0
AN I 0.7 A Q 5.0 S M 1.0 AN I 0.7 AN Q 5.0 R M 1.0
I 0.7 Q 5.0
M 1.0 S
& R Q
Báscula JK I 0.7 M 2.1 I 0.7
I 0.0
I 0.1
P
M2.0
Segmento 2
&
&
R
S
M 10.0
Q
M 2.0 I 0.0 M 10.1
&
M 2.0 I 0.1 M 10.1
&
Q
&
R Q
Segmento 3 M 2.0
&
&
M 10.0
M 10.1
M 2.0
R
M 10.0 S
S
M 10.1 S
& R Q
M 10.0
Segmento 4
/Q
M 10.1
Q Q 5.0
&
Q 5.0
Electrobomba Con.
Desc. Nivel Máximo
Selector
Luz de Funcionamiento
Luz disparo relé térmico
Nivel Mínimo
Bomba
Asignación de Entradas I 0.0 Selector I 0.1 Relé térmico I 0.2 Boya nivel máximo I 0.3 Boya nivel mínimo Asignación de Salidas Q 5.0 Electrobomba Q 5.1 Señalización de estado operativo Q 5.2 Señal. relé térmico Asignación de Marcas M 1.0 Marca auxiliar electrobomba
A I AN I AN I S M ON I ON I O I R M
0.0 0.2 0.3 1.0 0.1 0.0 0.2 1.0
A M 1.0 = Q 5.0 A I 0.0 = Q 5.1 AN I 0.1 = Q 5.2
Consideraciones sobre Primera Consulta RLO A I 1.0 ANI 1.1 A M 4.0 = Q8.0 A I 2.0
.... .... .... ....
estado de señal .... .... .... .... Primera consulta
Tema 4 Instrucciones Básicas: Operaciones lógicas con bits
Div.. Ingeniería Div Ingeniería de Sistemas y Automática Automática
Instrucciones Básicas:Operaciones lógicas con bits
1
Bibliografía l
Título: “Step7 Avanzado” l l
l l l l
Autor: José Martínez Torres Descargar de la página web
Manual Siemens “Step7-AWL para S7-300 y S7-400” Manual Siemens “Step7-KOP para S7-300 y S7-400” Manual Siemens “Step7-FUP para S7-300 y S7-400” Título: “Automating with Step7 in STL and SCL” l l
Autor: Hans Berger ISBN: 3-89578-140-1
Instrucciones Básicas:Operaciones lógicas con bits
2
1
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
3
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
4
2
Operaciones lógicas con bits l
Las operaciones lógicas con bits operan con dos dígitos, 1 y 0. §
§
l
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”).
Las operaciones lógicas con bits interpretan los estados de señal 1 y 0, y los combinan de acuerdo con la lógica del Álgebra de Boole. l
Estas combinaciones producen un 1 ó un 0 como resultado y se denominan ”resultado lógico” (RLO). Las operaciones lógicas con bits permiten ejecutar las más diversas funciones.
Instrucciones Básicas:Operaciones lógicas con bits
5
Operaciones lógicas con bits 1.- Las operaciones básicas para las operaciones lógicas con bits son: U Y UN Y-No O O ON O-No X O-exclusiva XN O-exclusiva-No
3.- Las siguientes operaciones permiten ejecutar una cadena lógica encerrada entre paréntesis: U( Y con abrir paréntesis UN( Y-No con abrir paréntesis O( O con abrir paréntesis ON( O-No con abrir paréntesis X( O-exclusiva con abrir paréntesis XN( 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: = Asignar R Desactivar S Activar
4.- Las operaciones siguientes permiten modificar el resultado lógico (RLO): NOT Negar el RLO SET 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 reaccionan correspondientemente: FN Flanco negativo FP Flanco positivo Instrucciones Básicas:Operaciones lógicas con bits
6
3
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
7
Operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bits
8
4
Operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bits
9
Operaciones básicas l
Serie
SOLUCIÓN EN AWL U E 0.0 U E 0.1 = A 4.0 l
Paralelo
SOLUCIÓN EN AWL U E 0.0 O E 0.1 = A 4.0
(también O
E 0.0)
Instrucciones Básicas:Operaciones lógicas con bits
10
5
Operaciones básicas l
Contactos negados
SOLUCIÓN EN AWL UN E 0.0 U E 0.1 = A 4.0
Instrucciones Básicas:Operaciones lógicas con bits
11
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
12
6
Instrucciones de terminación de cadenas lógicas
Instrucciones Básicas:Operaciones lógicas con bits
13
Instrucciones de terminación de cadenas lógicas
Instrucciones Básicas:Operaciones lógicas con bits
14
7
Instrucciones de terminación de cadenas lógicas l l
l
l
Las instrucciones SET y RESET son instrucciones de memoria. 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. Estas instrucciones tienen prioridad. Dependen del orden en que las programemos. Siempre va a tener prioridad la última que programemos. 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.
15
Instrucciones Básicas:Operaciones lógicas con bits
Instrucciones de terminación de cadenas lógicas l
RLO l Las instrucciones vistas hasta ahora son consultas y asignaciones. Esto significa: el procesador examina el estado de las señales de entrada, salida y marcas y le asigna a un estado de señal a las salidas y a las marcas. l Dos o más primeras consultas generan una operación lógica. El resultado de estas consultas es el resultado de la operación lógica (RLO). El resultado de la operación lógica proveniente de una operación lógica AND o una OR puede ser asignado a una salida o a una marca.
l
Primera Consulta l La instrucción que hace la primera consulta después de una asignación se denomina de primera consulta. Esto significa que se genera un resultado de la operación lógica completamente nuevo, independiente del resultado previo de la operación lógica. Carece de importancia si la instrucción de primera consulta es una AND o una OR. RLO estado de se ñal U E 1.0 UN E 1.1 U M 4.0 = A 8.0 U E 2.0
.... ....
.... ....
.... ....
.... ....
Instrucciones Básicas:Operaciones lógicas con bits
Primera consulta
16
8
Instrucciones de terminación de cadenas lógicas
Instrucciones Básicas:Operaciones lógicas con bits
17
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
18
9
Combinación de operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bits
19
Combinación de operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bits
20
10
Combinación de operaciones básicas l
Utilización de parentesis
SOLUCIÓN EN AWL U E 0.0 O( U E 0.1 U E 0.2 ) O U E 0.3 U E 0.4 = A 4.0 Instrucciones Básicas:Operaciones lógicas con bits
21
Ejercicio 1 Control automático taladradora vertical Proyectar un circuito para el control automático de una taladradora vertical. Dicha máquina deber á realizar la siguiente función:
FCs
s
B
Ps
1º.- Mediante el pulsador B iniciamos el descenso de la herramienta, la cual, al llegar a un minirruptor fin de carrera FCb, debe interrumpir el descenso e iniciar la subida. 2º.- Al llegar, en la subida, a un minirruptor fin de carrera FBs, la herramienta debe detenerse.
Rs
3º.- El circuito deberá llevar un pulsador de emergencia Ps, mediante al cual pueda interrumpirse el descenso de la herramienta, para que automáticamente se inicie la subida.
Rb
4º.- Cuando la herramienta est é subiendo de ninguna manera deberá poder iniciarse la bajada, aunque se pulse B.
b FCb
Definido el diagrama de circuito, traducir a lenguaje STEP 7 la lógica cableada .
Instrucciones Básicas:Operaciones lógicas con bits
22
11
Ejercicio 1: Resolución Asignación de variables Pulsador B E0.0 Pulsador de emergencia Ps E0.1 Final de carrera bajada FCb E0.2 Final de carrera subida FCs E0.3 Actuador bajada Rb A4.0 Actuador subida Rs A4.1
Instrucciones Básicas:Operaciones lógicas con bits
23
Ejercicio 2 Arranque directo de un motor trifásico con rotor en cortocircuito 1.- Elementos del esquema: Q1 Seccionador con fusibles incorporados KM1 Contactor de potencia F1 Relé térmico de protección M Motor trifásico LM Lámpara que señala motor en marcha LF1 Lámpara que señala disparo de F1 LBT Lámpara que señala tensi ón en el circuito 2.- Funcionamiento Para poner en marcha, pulsar en S1. Para parar, pulsar en S2 El motor tambi én se desconectará por disparo de F1 Lámparas de señalizaci ón de circuido bajo tensión (LBT), motor en servicio (LM) y disparo de relé térmico (LF1)
Instrucciones Básicas:Operaciones lógicas con bits
24
12
Ejercicio 2: Resolución Asignación de variables Pulsador S1 E0.0 Pulsador S2 E0.1 Relé térmico F1(n.c) E0.2 Lámpara LBT A4.0 Lámpara LM A4.1 Lámpara LF1 A4.2
Instrucciones Básicas:Operaciones lógicas con bits
25
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
26
13
Función memoria l
MARCAS l
l
l
Las marcas son bits internos de la CPU. Disponemos de una cantidad limitada de marcas. Esta cantidad depende de la CPU con la que estemos trabajando. Estos bits podremos activarlos o desactivarlos como si fueran salidas. En cualquier punto del programa los podremos consultar. 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.
27
Instrucciones Básicas:Operaciones lógicas con bits
Función memoria U( U U U O O ) U( O O U U O U U( O O ) ) =
E E E E E
0.2 0.3 0.4 0.1 0.0
E
1.0
E E
1.1 1.2
E
0.5
E E
0.7 0.6
A
0.4
M0.2 Ejemplo MARCAS SOLUCIÓN EN AWL U E 0.0 O E 0.1 O( U E 0.2 U E 0.3 U E 0.4 ) = M 0.0 U E 0.6 O E 0.7 = M 0.1 U E 1.1 U E 1.2 O E 1.0 = M 0.2 U E 0.5 U M 0.1 = M 0.3 U M 0.0 U( U M 0.3 O M 0.2 ) = A 4.0 l
M0.0
Instrucciones Básicas:Operaciones lógicas con bits
M0.3 M0.4
28
14
Función Memoria l
Si el sensor es un pulsador (momentáneamente conectado), entonces la señal está activada tanto tiempo como mantengamos accionado el pulsador. Para poder almacenar el estado de esta operación, deberemos emplear la Función memoria. Funci ón memoria
S1
K1
S3
S4 K2
S2 K1
prioridad a la desconexión
K2
prioridad a la conexión
29
Instrucciones Básicas:Operaciones lógicas con bits
Flip -flop
Función Memoria l
Función memoria en un PLC l
l
l
S2
R
Q
K1
En un PLC, la función memoria se elabora mediante el flip-flop S-R.El flipflop dispone de dos entradas: una para la instrucción de activación S y otra para la instrucción de desactivación R. 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".
Reset l
l
S
Set l
l
S1
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".
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. El valor de señal “0" en cualquiera de las dos entradas no modifica el valor del resultado del flip-flop. (prevalece el valor antiguo)
Instrucciones Básicas:Operaciones lógicas con bits
30
15
Función Memoria Instrucciones de Set y Reset KOP
AWL
FUP Set
SET
Set
A9.0
E1.0
S
RESET
Reset
E1.0 A9.0
U R
E1.1 A9.0
Reset
A9.0 R
E1.1
U S
Instrucciones Básicas:Operaciones lógicas con bits
31
Función Memoria l
Ejemplo
l
Solución con Set y Reset SOLUCIÓN EN AWL U E 0.0 S A 4.0 U E 0.1 R A 4.0
Instrucciones Básicas:Operaciones lógicas con bits
32
16
Función Memoria Flip-flop "Prioridad al Set" Set/reset el flip flop
M0.2 E1.4
RS_FF R
A9.4
Q
Reset/set flip flop
E1.5 S
U R U S U =
E1.4 M0.2 E1.5 M0.2 M0.2 A9.4
Reset/set flip flop
33
Instrucciones Básicas:Operaciones lógicas con bits
Función Memoria Flip-flop "Prioridad al Reset" Set/reset el flip flop
M0.0 E1.2
A9.3
SR_FF S
E1.3 R
Q
Set/reset flip flop
U S U R U =
E1.2 M0.0 E1.3 M0.0 M0.0 A9.3
Set/reset flip flop
Instrucciones Básicas:Operaciones lógicas con bits
34
17
E 0.3 E 0.2
Ejemplo l
Depósito de agua Tenemos un depósito de agua. Para manejarlo tenemos un selector de mando. Podemos seleccionar modo manual(E 0.0) o modo automático (E 0.1). Si seleccionamos modo manual, lo que queremos es que mientras esté conectada, la bomba esté funcionando(A 4.0), y cuando desconectemos que se pare la bomba. No queremos que se haga caso a las boyas de nivel. l Si lo tenemos en modo automático queremos que el nivel se mantenga entre las dos boyas. Cuando el agua llegue al nivel de abajo(E 0.2) queremos que se ponga en marcha la bomba, y cuando el agua llegue al nivel de arriba(E 0.3) queremos que se pare la bomba. l Además tenemos un relé térmico(E 0.7) que actúa tanto cuando tenemos la bomba en funcionamiento manual como cuando la tenemos en funcionamiento automático. Cuando salta el relé, queremos que se pare la bomba y que nos avise con un indicador luminoso en el cuadro de mando(A 4.7). l Además tenemos una luz de marcha que nos indica cuando está en marcha la bomba(A 4.1). l
Instrucciones Básicas:Operaciones lógicas con bits
35
Ejemplo:solución SOLUCIÓN EN AWL Segmento 1: MANUAL U E 0.0 = A 4.0 = A 4.1 Segmento 2: AUTOMÁTICO U E 0.1 U E 0.7 U E 0.2 UN E 0.3 S A 4.0 S A 4.1 U E 0.1 U E 0.7 UN E 0.2 U E 0.3 ON E 0.7 R A 4.0 R A 4.1 UN E 0.7 = A 4.7
//Si activamos en modo manual //Pon en marcha la bomba //Enciende la luz de marcha //Si está en automático //Y está bien el relé //Y está activo el nivel de abajo //Y no está activo el nivel de arriba //Pon en marcha la bomba //Y enciende la luz de marcha //Si está en automático //Y está bien el relé //Y no está activo el nivel de abajo //Y se ha activado el nivel de arriba //O ha saltado el relé //Para la bomba //Apaga la luz de marcha //Si ha saltado el relé //Avísame con la luz de
Instrucciones Básicas:Operaciones lógicas con bits
36
18
Ejemplo:solución l
l
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. 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. Memoria imagen de salidas y entradas Instrucciones Básicas:Operaciones lógicas con bits
37
Ejemplo:solución
Instrucciones Básicas:Operaciones lógicas con bits
38
19
Ejemplo:Manual
Instrucciones Básicas:Operaciones lógicas con bits
39
Ejemplo:Automático
Instrucciones Básicas:Operaciones lógicas con bits
40
20
Ejemplo:Automático Funcionamiento Incorrecto
Si se desactiva E0.2 una vez que empieza a llenar se para la bomba y la luz indicadora. Debido al segmento 1.
Instrucciones Básicas:Operaciones lógicas con bits
41
Ejemplo:solución Correctamente U M Segmento 1 : MANUAL U E 0.0 //Si está en manual O M = M 0.0 //Activa la marca 0.0 = A = M 0.1 //Y activa la marca 0.1 U M Segmento 2: AUTOMÁTICO O M U E 0.1 //Si está en automático = A U E 0.7 //Y está el relé bien U E 0.2 //Y está activo el nivel inferior UN E 0.3 //Y no está activo el nivel superior S M 0.2 //Activa la marca 0.2 S M 0.3 //Y activa la marca 0.3 U E 0.1 //Si está en automático U E 0.7 //Y está el relé bien UN E 0.2 //Y no está activo el nivel inferior U E 0.3 //Y se ha activado el nivel superior ON E 0.7 //O ha saltado el relé R M 0.2 //Desactiva la marca 0.2 R M 0.3 //Y desactiva la marca 0.3 UN E 0.7 //Si no está el relé = A 4.7 //Activa la luz de relé.
0.0 0.2
//Si está activa la marca 0.0 //O está activa la marca 0.2
4.0 0.1 0.3
//Pon en marcha la bomba //Si está activa la marca 0.1 //O la marca 0.3
4.1
//Enciende la luz de marcha
Instrucciones Básicas:Operaciones lógicas con bits
42
21
Ejemplo: Automático
Instrucciones Básicas:Operaciones lógicas con bits
43
Ejemplo: Automático sin que se pare la bomba/luz
Instrucciones Básicas:Operaciones lógicas con bits
44
22
Ejemplo: solución l
Ahora ya no funciona el térmico en el modo manual. Al utilizar marcas diferentes para cada tipo de funcionamiento, el térmico sólo actúa sobre las marcas de modo automático. Sólo estamos haciendo un reset de una de las marcas que activan la bomba. Nos falta resetear la otra marca. Tendremos que añadir las siguientes líneas. UN E R M R M
0.7 0.0 0.1
//Si ha saltado el relé //Desactiva la marca 0.0 //Y desactiva la marca 0.
Instrucciones Básicas:Operaciones lógicas con bits
45
Ejemplo: solución l l
Ahora podemos hacer todas las objeciones que queramos y corregir sobre lo que ya tenemos hecho. Por ejemplo, en este caso no he tenido en cuenta la situación de que después de haber estado en manual o en automático, volvamos a la posición de reposo. En automático he hecho sets a ciertas marcas. Cuando volvamos a la posición de reposo esas marcas tendrán que volver a cero. De lo contrario podría darse el caso de que estando en la posición de reposo, tengamos la bomba en marcha. Para remediar esto podría añadir las siguientes instrucciones: UN
E
0.0
UN R R
E A A
0.1 4.0 4.1
Instrucciones Básicas:Operaciones lógicas con bits
46
23
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico Instrucciones Básicas:Operaciones lógicas con bits
47
Instrucciones que afectan al RLO l
NOT l
l
l
l
NOT es la instrucción para invertir el RLO.
CLR/SET
El RLO pasa a 0 con la instrucción borrar CLEAR, y el RLO pasa a1 con la instrucción SET.
SAVE/U RB l
Con la instrucción SAVE (grabar memoria), el contenido del RLO se almacena en un registro (palabra de estado). El RLO almacenado puede ser consultado de nuevo con la instrucción U RB.
Instrucciones que Afectan al RLO KOP
E0.0
FUP
E0.1
U E0.0 U E0.1 NOT = A8.0
A8.0 NOT
NOT
No se visualiza en KOP
CLR SET
E1.0
SAVE
(SAVE) RB
A8.1 ( )
AWL
No se visualiza en FUP
CLR SET
U E1.6 SAVE U RB = A8.1
Instrucciones Básicas:Operaciones lógicas con bits
48
24
Índice l
Operaciones lógicas con bits l l l l l l
Operaciones básicas Instrucciones de terminación de cadenas lógicas Combinación de operaciones básicas Función memoria Instrucciones que afectan al RLO Operaciones que detectan cambios en el resultado lógico 49
Instrucciones Básicas:Operaciones lógicas con bits
Flancos Evaluación de Flanco Flanco Positivo
Flanco Negativo
RLO 1 0
Tiempo Diagrama del estado de la señal
Lista de Instrucciones U E 1.0 FP M 1.0 = A 4.0
Diagrama KOP E1.0
M1.0 P
E 1.0 A4.0
M 1.0 A 4.0
Diagrama FUP Un tiempo de ciclo
Instrucciones Básicas:Operaciones lógicas con bits
50
25
Flancos l
l l
En ocasiones necesitamos que una determinada acción sólo se realice una vez mientras se cumplan las condiciones para la activación de la misma. 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. La señal de flanco, tanto positivo como negativo en el Step 7 requiere de una marcha que no puede ser utilizada en otra parte del programa, por lo que es importante simbolizarla como exclusiva de ese flanco en cuestión
Instrucciones Básicas:Operaciones lógicas con bits
51
26
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Diagnosis e información del sistema • Herramientas de diagnosis: – Visualización del estado del programa • Permite “seguir” el procesamiento de un bloque lógico que se está ejecutando en la CPU • En AWL es configurable la información de la tabla de diagnosis (herramientas > preferencias>AWL)
ACCU-1
• Además, se puede forzar variables de tipo BOOL: ????? 1. Seleccione el operando que quiere forzar. 2. Elija el comando de menú Test > Forzar a 1 o Test > Forzar a 0.
– Test con tabla de variables. PLC’s Curso 2009/10
Página 2
Diagnosis e información del sistema • Herramientas de diagnosis: – Visualización del estado del programa – Test con tabla de variables. • Se puede OBSERVAR y FORZAR variables • Se puede mostrar las valores de las variables: E, A, M, T, Z, bloques de datos y periferia. • Procedimiento para observar / forzar variables: 1. Crear y Editar una tabla de variables VAT. 2. Establecer enlace on-line: Sistema de destino > Establecer enlace con 3. Dentro de la tabla, configurar condiciones de disparo: Variable > Condiciones de disparo 4. Activar las funciones de test: Variable > Observar y Variable > Forzar 5. Guardar tabla editada: Tabla > Guardar o Tabla > Guardar como
PLC’s Curso 2009/10
Página 3
Diagnosis e información del sistema Crear y abrir una VAT: • Desde Admin. Simatic:
Insertar > Bloque S7 > Tabla var.
• También, desde Admin. Simatic: Sistema de destino > Observar / forzar. • También, desde ventana “Observar/forzar variables”:
Tabla > Nueva
PLC’s Curso 2009/10
Página 4
Diagnosis e información del sistema Observar y forzar variables • Punto y condición de disparo
Forzado permanente • El programa de CPU no puede cambiarlo • Admdor. Simatic --> “Sistema destino” --> “Mostrar valores de forzado permanente” --> “Variable” • “forzado permanente” para forzarla • “anular” para eliminarlo. • Se enciende el led FRCE PLC’s Curso 2009/10
Página 5
Diagnosis e información del sistema • Admdor. Simatic --> Icono de HW (doble click) CPU (doble click) Propiedades Ciclo/Marca de ciclo • Tiempo de vigilancia • Marcas de ciclo Cargar configuración hardware, una vez elegida marca de ciclo
PLC’s Curso 2009/10
Página 6
Diagnosis e información del sistema Tiempo de vigilancia de ciclo Si el tiempo de ciclo (ms) supera el tiempo de vigilancia, la CPU pasará al estado operativo STOP. Causas de un rebase del tiempo de vigilancia: procesos de comunicación
acumulación de alarmas
errores en el programa de la CPU.
Marcas de ciclo son marcas que cambian periódicamente su valor binario (relación impulso - pausa: 1:1). Active la casilla de verificación si desea utilizar una marca de ciclo e introduzca el número del byte de marcas. Nota: El byte de marcas seleccionado no puede ser utilizado para almacenar datos temporalmente.
PLC’s Curso 2009/10
Página 7
Diagnosis e información del sistema Cada bit del byte de marcas de ciclo lleva asignada una duración de período/frecuencia:
Bit
7
6
5
4
3
2
1
0
T (s):
2
1,6
1
0,8
0,5
0,4
0,2
0,1
Frecuencia (Hz):
0,5
0,625 1
1,25
2
2,5
5
10
• Para verlo L MB100 T AB100
y se lo transferimos a la CPU. PLC’s
Curso 2009/10
Página 8
Diagnosis e información del sistema • “Sistema Destino” --> “Información del Módulo”. Hay varias solapas, cada una de las cuales contiene información sobre un determinado aspecto. Dependiendo de si se hace ONLINE/OFFLINE, las solapas son diferentes: – “General”: versión de la CPU, etc – “Datos característicos”: dice cuántas marcas tiene, entradas, salidas, contadores, memoria, etc. y las direcciones que ocupan. – “Buffer de diagnóstico”: listado de eventos. En caso de error, iremos a él, y veremos el listado. PLC’s Curso 2009/10
Página 9
Diagnosis e información del sistema • “Sistema Destino” --> “Información del Módulo”. Más opciones: – Bloques: cuántos módulos hay, cuáles son, qué tamaño pueden tener... – Tiempo de ciclo: cuánto ha tardado el último ciclo, cual es el tiempo de vigilancia que tiene, posibilidad de cambiarlo... – Pilas: permite ver los registros, acumuladores, palabra de estado, etc., módulos no completamente procesados, y así averiguar porqué el autómata pasa a STOP. PLC’s Curso 2009/10
Página 10
Diagnosis e información del sistema • “Sistema Destino” --> “Información del Módulo”. Más opciones: – Sistema de reloj: hora del autómata, horas de funcionamiento, etc. – Tiempo de ciclo: visualiza el tiempo de ciclo mínimo, máximo y actual. También podremos actualizar los valores. – Memoria: ocupación de la memoria.
PLC’s Curso 2009/10
Página 11
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Contadores • Hay un área de la memoria de la CPU reservada para contadores. – Hay 64 contadores – Cada contador tiene asignada una palabra de 16 bits. El valor máximo que pueden contar de 999 (BCD). – Se identifican con la letra Z
• Instrucciones disponibles: – cargar un valor prefijado, – leer su contenido, – incrementar, decrementar, resetear.
PLC’s Curso 2009/10
Página 2
Contadores Operaciones habituales con contadores:
Carga valor 0 Carga valor de acumulador AC1 en contador direccionado
PLC’s Curso 2009/10
Página 3
Contadores U E124.5 ZR Z5
--> Decrementa Z5 si E124.5 cambia de 0 a 1 (RLO de 0 a 1)
U E124.7 R Z5
--> Pone Z5 a 0 con el cambio positivo de E124.7
L Z5 T MW4
-->Transfiere el contenido de Z5 a la palabra M4 en binario
LC Z5 T MW7
--> Transfiere el contenido de Z5 a la palabra M4 en BCD
U Z5 = A124.3
--> Pone un 1 en A124.3 si Z5 es distinto de 0 PLC’s
Curso 2009/10
Página 4
EJERCICIO (Entregable 3)
Automatizar un garaje de 5 plazas de tal forma que si éste se encuentra lleno se encienda una luz indicándolo y no suba la barrera. En caso contrario deberá estar encendida otra luz indicando “LIBRE”. El garaje consta de 5 plazas Disponemos de botón y una barrera en la entrada y lo mismo en la salida.
Salida
Entrada
PLC’s Curso 2009/10
Página 5
Operaciones de Cómputo Automatización Industrial
Índice TEMA – Operaciones de Cómputo 1. – Operaciones de Computo – Tipos de Contadores 2. – Formato de la Palabra de Cómputo 3. – Orden de las Instrucciones de Contadores 4. – Carga y Lectura de Contadores 5. – Parámetros de Contadores 6. – Operaciones de Contaje
Operaciones de Cómputo – Contadores Características • Los contadores tienen reservada un área de memoria específica en la CPU • Para cada contador están reservados 16 bits • Tiene acceso a la zona de contadores: • sólo las operaciones de contaje • Un contador permite: • contar hacia arriba • contar hacia abajo • se le puede fijar un valor de 0 a 999 unidades • se puede hacer poner a “0” • Permiten contar impulsos de baja frecuencia (unos pocos Hz) • Para contar impulsos de frecuencias superiores es necesario hardware específico
Operaciones de Cómputo Operación Operando Significado S Activar (cargar) un contador El contador se activa con el flanco creciente del RLO.
R
Reponer (borrar) un Contador El contador se pone a “0” siempre que el RLO sea “1”.
CU
Incrementar un Contador (contaje hacia adelante) Con flanco creciente se incrementa en 1 el valor del contador. Con RLO a 0 no se modifica el valor del contador.
CD
Decrementar un Contador (contaje hacia atrás) Con flanco creciente se reduce en 1 el valor del contador. Con RLO a 0 no se modifica el valor del contador.
Identificador C
Parámetro
AG S7-300 0 ... 255
Tipos de Contadores Incrementador/Decrementador STL FBD/LAD A I 0.0 CU C 1 C1 A I 0.1 S_CUD CD C 1 I 0.0 L C#100 CU S C 1 I 0.1 CD A I 0.3 R C 1 I 0.2 S CV L C 1 C#100 PV CV_BCD T AW 6 R Q I 0.3 LC C 1 T MW 2 A C 1 = Q 4.0
Incrementador FBD/LAD
AW 6 MW 2 Q 4.0
Decrementador FBD/LAD
C2
C3
S_CU
S_CD
I 1.0
CU
I 1.2 C#100 I 1.3
S
CV
PV CV_BCD
R
Q
AW 8 MW 4 Q 4.1
I 2.0
CD
I 2.2 C#100 I 2.3
S
CV
PV CV_BCD
R
Q
AW 10 MW 6 Q 4.3
Formato de la Palabra de Cómputo 15
12 11
0000hex
8
7
102
4 3
101
0
100
Valor del contador especificado en BCD (0 a 999)
• Un contador toma como valor de cómputo el contenido del ACU 1 • Rango de valores desde 0 a 999 unidades • Sólo valores positivos en BCD
Especificación de un contador en formato de una constante L C#100; //Valor del contador 100 L W#16#0100; //Valor del contador 100
Especificación de un contador en formato de una variable L C#200; T MW 56; ....... L MW 56;
//Valor del contador 20 //Salvar valor del contador //Cargar el valor del contador
Orden de las Instrucciones Contar Hacia Adelante A I 0.0 CU C 1 Contar Hacia Atrás A I 0.1 CD C 1 Cargar A I 0.2 L C#5 S C 1
C1
Ejemplo: Valor de Contaje
S_CUD
Duración:
I 0.0 I 0.1
CU CD
I 0.2
S
C#5
PV CV_BCD
DBW 2 QW 6
I 0.3
R
Q 4.0
Constante Valor CV
Q
Poner a Cero A I 0.3 R C 1
C#5
Incrementar CU - I 0.0 Decrementar CD - I 0.1
Consultas Digitales L C 1 T DBW 2 LC C 1 T QW 6
Activar S – I 0.2 Borrar R – I 0.3
Consultas Binarias A C 1 = Q 4.0
Salida Binaria Q - Q 1.0 5 Valor de contador CV, CV_BCD 0
Carga y Lectura de un Contador Constante de Cómputo
15
12
11
0
Operación Operando
0
1
0
0
0
0
0
1
0
0
0
0
Valor del contador de 3 dígitos (codificada en BCD)
L C# 38
Preselección de Tiempo (codificado en BCD)
Valor del contador (0..999)
- Constante C# - Palabra de Datos - Palabra de Entradas IW - Palabra de Marcas MW - Palabra de Salidas QW - .......
Lectura de un Contador Valor actual del contador C2
L C 2
LC C 2 ACU 1
Valor en Binario Posiciones de bits ocupadas con “0”
Valor de tres dígitos en BCD
S_CDU PV CV CV_BCD R
Q
Parámetros del Contador
Parámetros del Contador Incrementador
Parámetros del Contador Decrementador
Operaciones de Contaje – Activar un Contador “S” y Decrementar “ZR” Cronograma
Esquema Eléctrico
Estados de señal
I 0.1 C# 7
1
I 0.0
0
R
1
I 0.1
0
S
PV
_
I 0.0
!=0
7
CV
C 1 Q 4.5
0 1
Binario 16 bits
Valor del Contador
Q 4.5
0 T iem po S C 1
S C 1
STL 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
FBD
LAD S_CD
CD
S_C D I 0.0
CD
I 0.1 C# 7
S
C 1
I 0.0
Z1
I 0.1
C# 7
CV Q
CV
PV C V_BC D
R
Q Q 4.5
PV PV_BC D
R
S
Q 4.5
Operaciones de Contaje – Borrar un Contador “R” e Incrementar “ZV” Cronograma
Esquema Eléctrico
Estados de señal 1
I 0.0
0
I 0.1
1
I 0.1
0 7
R
C 1 I 0.0
0
S
PV
+
!=0
1
CV
Binario 16 bits
Q 4.5
0
Q 4.5
T iem po R C 1
STL 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
FBD
LAD
C 1
I 0.0
S_C U
CU S
CU
CV
I 0.1
I 0.1
Q
S
CV
PV CV_BCD
PV C V_BC D
R
C 1
I 0.0
S_C U
R
Q 4.5
Q Q 4.5
Operaciones de Carga y Transferencia Automatización Industrial
Índice TEMA – Operaciones de Carga y Transferencia 1. – Operaciones de Carga y Transferencia 2. – Efecto sobre los Acumuladores 3. – Funciones del Acumulador 4. – Funciones de Sistema para la Transferencia de Datos
Operaciones de Carga y Transferencia Las Operaciones de Carga y Transferencia permiten • intercambiar informaciones entre las diferentes zonas de operandos • preparar temporizaciones y valores de contador para su posterior tratamiento • cargar valores constantes necesarios para la ejecución del programa • hay funciones de: - carga - transferencia - funciones entre acumuladores - funciones del sistema (SFC 20,21 y 81)
• El flujo de información discurre a través de los denominados acumuladores
Estructura de los Acumuladores 31
0 24 23 16 15 8 7 Byte alto Byte bajo Byte alto Byte bajo Palabra alta
ACU(1 ó 2) Palabra baja
Operaciones de Carga y Transferencia Memoria sistema Imágenes PII, PIQ Marcas Dat. locales temporales
Memoria trabajo
Temporiz. Contadores
Bloque de datos
Palabra de estado
Long. número bloques
Reg. direcciones
Constantes, punteros
Acumulador 1
Imágenes PII, PIQ Marcas
Memoria sistema
Periferia de entradas
Funciones del acumulador
Funciones de carga
Func. transferencia
Módulos
Acumulador 2
Funciones digitales
Palabra de estado Dat. locales temporales
Bloque de datos
Memoria trabajo
Periferia de salidas
Módulos
Operaciones de Carga • La función carga (L - load) pone en el acumulador1 el valor del operando especificado: (constante, variable o una dirección ) (todos los tipos de datos con 8, 16 o 32 bits) • Operandos ubicados en la memoria:
L L L
IB n IW n ID n
31
L L L 24
23
24
23
24
8
7
15
8
15
IB 1
L IB 0 0 L IW 0
IB 1 8
MB n MW n MD n
0
7
7
IB 2
16 15
L L L
IB 0
IB 0 16
24 23
PIB n PIW n PID n
0000 16
23
IB 0
31
15
0000
0000 31
16
L L L
0000
0000 31
QB n QW n QD n
0 IB 3
8 7
L ID 0
0 ACU 1
Ejemplos de Direccionamiento Carga de constantes Direccionamiento inmediato L +27 L L#-1 L 2#1010101010101010 L DW#16#A0F0BCFD L ’FIN’ L T#500 ms L S5T#2s L C#100 L B#(100,12) L B#(100,12,50,8) L B#16#F1 L P#10.0 L P#I20.6 L P#name L -25 L D# 1995-01-20 L TOD#13:20:33.125
Descripción Carga la constante entera de 16 bits ”27” en ACU1 Carga la constante entera de 32 bits ”-1” en ACU1 Carga la constante binaria de 16 bits en ACU1 Carga la constante hexadecimal en ACU1 Carga los caracteres ASCII deseados en ACU1 Carga el valor de temporización en ACU1 Cargar un temporizador S5 Carga un valor de computo en BCD en ACU1 Carga la constante de 2 bytes Carga la constante de 4 bytes Cargar número de dos dígitos hexadecimales en ACU 1 Carga el puntero intraárea en ACU1 Carga el puntero interárea en ACU1 Cargar la dirección de variable local Carga el número real en ACU1 Carga la fecha Carga de un tiempo (la hora) en 32 bits
Operaciones de Transferencia • La función transferencia (T - transfer) pone el contenido del acumulador1 en el operando especificado (todos los tipos de datos en 8, 16 o 32 bits) • Las operaciones de transferencia son incondicionales • Operandos ubicados en la memoria:
T T T
IB n IW n ID n
T T T
QB n QW n QD n
24 23
31
T T T
PQB n PQW n PQD n
16 15
T T T
MB n MW n MD n
0
ACU 1
8 7
T QD 4
T QW 4
T QB 4
Efecto sobre el ACU 1 ACCU 1 contenidos para las instrucciones de carga 31 24 23 16 15 8 7 0000
0000 31
24
23
16
15
0000
0000 31
0000
24 IB 0
23
Byte 3
8
15
IB 1
Instrucción Transferir 31 24 23
IB 0 7
IB 0 16
Byte 2
T QD 4
15
L IB 0 0 L IW 0
IB 1 8
7
IB 2
16
0
0 L ID 0
IB 3
8 Byte 1
T QW 4
7
0 Byte 0
T QB 4
Efecto sobre el ACU 2 – Operaciones de Carga Información perdida Word dWord c
ACU 2
ACU 1
Word dWord c
Word bWord a
Word bWord a IW 7
Informaciones procedentes de la PII
0
IW 7
L IW 7 IW 7
0
IW 9
L IW 9 IW 9
Word bWord a
0
Información perdida
ACU 2
ACU 1
YYYY
ZZZZ
YYYY
ZZZZ
ID 0
ZZZZ
ID 0
ID 4
Informaciones procedentes de la PII L ID 0 ID 0 L ID 4 ID 4
Efecto sobre el ACU 2 – Operaciones de Transferencia
ACU 2
ACU 1
Word dWord c
Word bWord a
Word dWord c
Word bWord a
ACU 2
ACU 1
ID 1
ID 3
ID 1
ID 3
Informaciones en la PIQ T QW 5 Word a
Informaciones en la PAA T QD 10 ID 3
Información perdida Valor previo de QW 5
Información perdida Valor previo de QD 10
Funciones del Acumulador I • Permiten transferir valores de un acumulador a otro, o reemplazar bytes en el acumulador 1 • Se ejecutan independiente del resultado lógico o bits de estado
Transferencia directa entre acumuladores TAK: Permite intercambiar el contenido de ACU1 y ACU 2 PUSH: Permite desplazar el contenido de los ACU hacia adelante POP: Permite desplazar el contenido de los ACU hacia atrás
TAK
PUSH
POP
Acumulador 2
Acumulador 1
Acumulador 1
Acumulador 2
Acumulador 1
Acumulador 2
Acumulador 1
Acumulador 2
Funciones del Acumulador II Intercambio de Bytes en el Acumulador 1 CAW: cambia en el acumulador 1, los bytes de la palabra de menor peso CAD: cambia bytes en todo el acumulador 1. El byte de mayor peso con el byte de menor peso y los dos bytes intermedios entre sí
n
n+1
n+2
n+3
n
n+1
n+3
n+2
n
n+1
n+2
n+3
n+3
n+2
n+1
n
CAW
CAD
Carga y Transferencia de Datos – Move En funciones Lógicas • La operación Transferir un valor permite inicializar variables con valores predeterminados • El valor indicado en la entrada IN se copia en el operando indicado en la salida OUT • Permite copiar todos los tipos de datos de 8,16 o 32 bits
Cuadro FUP
MOVE
Parámetro Tipo de datos EN BOOL
Entrada de habilitación
IN
Valor fuente
EN OUT OUT IN ENO ENO
Area de memoria I, Q, M, D, L T, C Todos tipos I, Q, M, D, L 8, 16 o 32 bi Todos tipos I, Q, M, D, L 8, 16 32 bi BOOL I, Q, M, D, L
Descripción
Dirección de destino Salida de habilitación
Carga y Transferencia de Datos KOP
AWL L - Carga T - Transferencia (Todos los tipos de datos con 8, 16, 32 bits)
MOVE EN
ENO
IN
O
EN - Habilitar entrada ENO -Habilitar salida IN - Valor de entrada (todos los tipos de datos con longitud 8, 16, 32 bit) O - Dirección del resultado (todos los tipos de datos con longitud 8, 16, 32 bit)
Ejemplos: L +5 // Carga una constante de 16-bit L L#523123 // Carga una constante de 32-bit L B#16#EF // Carga un byte hexadecimal L 2#0001_0110_1110_0011 // Carga un valor binario de 16-bit L TOD#1:10:3.3 // Carga un tiempo de 32-bit T MB0 T AD256
// Transferir un valor al byte de memoria 0 // Transferir un valor a la doble doble palabra de salida 256
Funciones del Sistema para Transferencia de Datos Están disponibles las siguientes funciones del sistema para la transferencia de datos
SFC 20 BLKMOV SFC Parámetros Declaración Tipo dato Descripción 20 SRCBLK INPUT ANY Fuente de donde copiar datos RET_VAL OUTPUT INT Información de error DSTBLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos SFC 21 FILL SFC Parámetros Declaración Tipo dato Descripción 21 VBAL INPUT ANY Area fuente a ser copiada RET_VAL OUTPUT INT Información de error BLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos SFC 81 UBLKMOV SFC Parámetros Declaración Tipo dato Descripción 81 SRCBLK INPUT ANY Fuente de donde copiar datos RET_VAL OUTPUT INT Información de error DSTBLK OUTPUT ANY Destino donde copiar los datos
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Introducción a los Tipos de Datos en STEP 7
Tipos de datos elementales (hasta 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)
Tipos de datos complejos (mayores de 32 bits)
• Tiempo (DATE_AND_TIME) • Array (ARRAY) • Estructura (STRUCT) • Cadena de Caracteres (STRING)
Tipos de datos definidos por el usuario (mayores de 32 bits)
Tipo de Datos UDT (User Defined Type)
PLC’s Curso 2009/10
Página 2
TIPOS DE DATOS DE BIT – TAMAÑO • La memoria del Autómata está estructurada en bytes. • Estos bytes podemos agruparlos/descomponerlos, obteniendo los siguientes tamaños de datos: – Bit _ _ _ .Nº – Byte (8 bits) _ _ _ B – Palabra/word (16 bits) _ _ _ W – Doble palabra/double word (32 bits) _ _ _ D
• Se puede acceder a cualquier área de la memoria: marcas, entrada, salida, etc. con cualquiera de los tamaños de datos: PLC’s Curso 2009/10
Página 3
DIRECCIONAMIENTO 1/3
Zona de memoria:
E Tam BBB.b Número de byte y bit (0-7), en su caso
• 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
PLC’s Curso 2009/10
Página 4
DIRECCIONAMIENTO 2/3
124
124
125
125
125
125
PLC’s Curso 2009/10
Página 5
DIRECCIONAMIENTO 3/3 • Dentro de cada byte, palabra o doble palabra, los bits se numeran de derecha a izquierda, de 0 al 7.
E 124.0
• Dir. byte: área de memoria + B + nº de byte EB124
• Dir. palabra: área de memoria + W + nº de su 1er byte EW124 => EB124 EB125
• Dir. doble palabra: área de memoria + D + nº de su 1er byte MD0 => MB0 MB1 MB2 MB3 PLC’s Curso 2009/10
Página 6
SISTEMAS NUMÉRICOS • Sistemas numéricos soportados: – Decimal (enteros y fraccionarios), binario, hexadecimal, BCD • Tipos de datos: – Entero (en cualquiera de los sistemas numéricos anteriores) – Real (coma flotante)
Ver ayuda Admin. Simatic Tipos de datos simples
– Carácter
– Tiempo: cantidad de tiempo, hora, S5T, fecha – Puntero
PLC’s Curso 2009/10
Página 7
Tipos de Datos Elementales en STEP 7 Palabra Clave
Long. (en bits)
Ejemplo de una constante de este tipo
BOOL BYTE WORD DWORD CHAR
1 8 16 32 8
1ó0 B#16#A9 o B169 W#16#12AE o W4782 DW#16#ADAC o DW44460 'w'
S5TIME
16
S5T#5s_200ms
INT DINT REAL
16 32 32
123 65539 1.2 o
TIME DATE TIME_OF_DAY
32 16 32
T#2D_1H_3M_45S_12MS D#1993-01-20 TOD#12:23:45.12
34.5E-12
PLC’s Curso 2009/10
Página 8
Números en COMA FLOTANTE Estándar IEEE754:
(1/2)
Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23) 31 30
...
………...
23 22 21
- Signo (S)
⇒ 1: negativo , 0: positivo (bit 31)
- Mantisa (M)
⇒ La mantisa incluye 23 bits (bit 0.. 22).
2
1
0
- Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30). PLC’s Curso 2009/10
Página 9
Números en COMA FLOTANTE
Estándar IEEE754:
(2/2)
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: Parte ligada al exponente: Parte ligada a la mantisa: Resultado:
(-1)1 = -1 2128-127=21 1+6291456·2-23=1+0.75 -1 · 2 · 1.75
=2 =1.75 = -3.5
PLC’s Curso 2009/10
Página 10
ACUMULADORES (1/2) • Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas. ACCU-H (16 bits)
ACCU-L (16 bits)
• CPU 314IFM tiene 2 acumuladores. • Carga al ACCU1, y el antiguo ACCU1 pasa al ACCU2. • Si cargamos o transferimos tamaños de datos menores a la doble palabra ( bits, bytes (B), word (W) ), se empieza a leer y escribir por la derecha (byte menos significativo) PLC’s Curso 2009/10
Página 11
ACUMULADORES (2/2)
Operaciones entre acumuladores: – TAK: intercambia contenido ACCU1 y ACCU2 . – PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º. – POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º. – ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4. – LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.
PLC’s Curso 2009/10
Página 12
CARGA Y TRANSFERENCIA 1/7 Permiten programar intercambio de información entre módulos de E/S y áreas de memoria. L
-->
T -->
Instrucción de carga a ACCU-1 Instrucción de transferencia desde ACCU-1
• Cargan y transfieren del acumulador ACCU1, independientemente del valor RLO, y tampoco lo modifican. • A dichas instrucciones les sigue un código en el que se indica el tamaño, formato y el número/posición a cargar o transferir. PLC’s Curso 2009/10
Página 13
CARGA Y TRANSFERENCIA 2/7 • Ejemplos: – LC Z0 --> Carga el contenido del contador en el acumulador en BCD. Si Z0=10
ACU1: 00 00 00 .......... 0001 0000
(BCD)
– L Z0 --> Idem pero en Binario Si Z0=10
ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)
– L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,
PLC’s Curso 2009/10
Página 14
CARGA Y TRANSFERENCIA 3/7 • Ejemplos: – L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE) ACU1: EB124 EB125 EB126 EB127 Obsérvese: el byte más significativo del acumulador (parte izquierda) queda relleno con el byte de dirección menor, y el de mayor dirección, a la dcha. – L EW8 (Cargar en el ACU1 la palabra 8 de la PAE) 00
00
EB8
EB9
– L EB8 (Cargar en el ACU1 el byte 8 de la PAE) 00
00
00
EB8 PLC’s
Curso 2009/10
Página 15
CARGA Y TRANSFERENCIA 4/7
• Ejemplos (con los Registros de Direcciones, AR1 y AR2): – LAR1
----> Carga el reg.de dirección AR1 con el contenido de ACU1
– LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2 – TAR
----> Intercambia los contenidos de registros AR1 y AR2
– TAR1 R2 ----> Transfiere el contenido de AR1 a AR2 El listado AWL siguiente: L ED 124 LAR1 L ED 128 LAR2
Tendrá como resultado:
ED124 ----> AR2 ED128 ----> AR1
TAR PLC’s Curso 2009/10
Página 16
CARGA Y TRANSFERENCIA 5/7 • Ejemplos (L y T con diferentes tamaños): – L EB124 (Cargar en el ACU1 el byte 124 de las entradas) 00 00 00 EB124 – Si ahora hacemos T MW32 00 00 00
EB124
MB32 MB33 •
L ED124
EB124
EB125 EB126 EB127
T MB32
MB32 PLC’s
Curso 2009/10
Página 17
CARGA Y TRANSFERENCIA 6/7 L +5
--> Carga entero de 16 bits
L L#523123
--> Carga un entero de 32 bits
Ver ayuda Adm. Simatic
L B#16#EF
--> Carga un hexadecimal de 8 bits
“Tipos de datos simples”
L 2#0011_0110_1110_0011 --> Carga binario de 16 bits
NOTA:
T MB0 T AD256
--> Transfiere (el ACU1) al byte de marcas 0 --> Transfiere (el ACU1) a la doble palabra de salida 256
PLC’s Curso 2009/10
Página 18
CARGA Y TRANSFERENCIA 7/7
PLC’s Curso 2009/10
Página 19
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 Curso 2009/10
Página 20
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Operaciones con AC. Comparación (I)
PLC’s Curso 2009/10
Página 2
Operaciones con AC. Comparación (II) RLO=1 si resultado de comparación es cierto , RLO=0 si falso ? I: Compara los contenidos de ACU2-L y ACU1-L
Ejemplo: L MW 32
MB32 MB33 ----> ACU1
L EW 124
ACU1 ---> ACU2 Y EB124 EB125 ---> ACU1
==I
Si ACU2(MW32) = ACU1(EW124), RLO=1
=A 124.0 >I
y se activa el bit 0 del byte 124 de salida Si ACU2(MW32) > ACU1(EW124), se activa el
=A 124.1
bit 1 del byte 124 de salida Si ACU2(MW32) < ACU1(EW124), se activa el
=A 124.2
bit 2 del byte 124 de salida PLC’s
Curso 2009/10
Página 3
Operaciones con AC. Comparación (III)
• Ejemplo:
L MD 16
MB16 a MB19 ----> ACU1
L 1.359E+02
ACU1 ---> ACU2 Y 1.359E+02 ---> ACU1
<=R
Si ACU2 < ó = ACU1 se activa el
=A 124.7
bit 7 del byte 124 de salida
>R
Si ACU2 > ACU1 se activa el
=A 124.0
bit 0 del byte 124 de salida
S M 124.0
La marca 124.0 guarda el resultado de la última comparac
PLC’s Curso 2009/10
Página 4
Operaciones con AC. Aritméticas (I)
•
Siempre son entre el contenido del ACU2 y el del ACU1
•
El resultado se guarda en ACU1, el contenido de ACU2 no cambia
•
Son independientes del RLO
•
Una vez cargados los acumuladores, se opera, dependiendo del formato del dato: I, D, R (entero 16 bits, entero 32 bits, real o coma flotante)
- , + , * , / , MOD (resto de división de enteros dobles) • Ejemplo:
;
xI xD xR
L MW 32
MB32 MB33 --- > ACU1
L EW 124
ACU1 --> ACU2 y EB124 EB125 --> ACU1
-I
ACU2 – ACU1 ---> ACU1
PLC’s Curso 2009/10
Página 5
Operaciones con AC. Aritméticas (II)
• Una vez realizada la operación aritmética se activan los bits A1, A0, OS y OV de la palabra de estado indicando: resultado positivo, negativo, cero, desbordamiento o división por 0 - 32768 <= entero 16 bits <= 32767 - 2 147 483 648 <= entero 32 bits <= 2 147 483 647 • En CPU’s de 4 acumuladores: – El resultado queda en ACU1, – ACU3 pasa a ACU2, y – ACU4 se duplica en ACU3 y AUC4. PLC’s Curso 2009/10
Página 6
Operaciones con AC. Aritméticas (II-b)
La función de los bits de la palabra de estado depende del tipo de operación Ejemplo: operaciones en coma fija (I, D}
PLC’s Curso 2009/10
Página 7
Operaciones con AC. Aritméticas (III) •
Sumar constante entera o doble: – + ACU1 + CTE -> ACU1,
•
Dividir /I : ACU2 / ACU1: – ACU1 L cociente – ACU1 H resto
PLC’s Curso 2009/10
Página 8
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 - 1
=> ACU1=ACU1+1 => ACU1=ACU1-1 PLC’s
Curso 2009/10
Página 9
Conversiones entre tipos de datos (I)
PLC’s Curso 2009/10
Página 10
Conversiones entre tipos de datos (II) Rango para números BCD:
-999 <= I <= +999
-9 999 999 <= D <= +9 999 999
PLC’s Curso 2009/10
Página 11
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 Curso 2009/10
Página 12
Conversiones entre tipos de datos (IV)
doble
Un real 32bits IEEE-FPE
inferior
+
mayor superior un real en entero de 32 bits
PLC’s Curso 2009/10
Página 13
Conversiones entre tipos de datos (V)
PLC’s Curso 2009/10
Página 14
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 Curso 2009/10
Página 15
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 Curso 2009/10
Página 16
Ops. Lógicas a nivel de Palabra W y Doble Palabra D (II)
Ejemplos: L ED 124 L MD 20 UD T AD 124
La “AND” se hace entre ACU1 y ACU2, cargados previamente con los valores indicados. Este ejemplo se podría utilizar para enmascarar ciertos bits 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
mente cargado con los bytes de entrada 124 y
W#16#AA55
T MW 20
125) y un valor inmediato expresado en hexadecimal
PLC’s Curso 2009/10
Página 17
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)
n (Nº Despl.)
• ROTATE SOLO DE 32 BITS
•
•
Los desplazamientos rellenan con 0, aunque hay instrucciones que permiten mantener el signo: – SSD
Ambas provocan un desplazamiento a dcha del ACU1 o ,
– SSI
ACU1-L pero manteniendo el signo
Cuando no se indique n, éste será el contenido del byte bajo del ACU2
PLC’s Curso 2009/10
Página 18
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 Curso 2009/10
Página 19
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 Curso 2009/10
Página 20
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 Curso 2009/10
Página 21
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: r2_real: MD8 r1_imaginaria:
y MD4 y MD12
Además, se utilizarán tres salidas para indicar: • si son raíces complejas (A125.7) • si son raíces reales (A125.4) • si son raíces iguales (A125.0) • Si a=0 parpadea A125 • El programa debe resolver el caso b=c=0. •
Muestre en AW126 la parte entera mayor de las dos raíces
PLC’s Curso 2009/10
Página 22
Operaciones de Comparación Automatización Industrial
Índice TEMA – Operaciones de Comparación 1. – Operaciones de Comparación 1.1 – Comparar Números Enteros 1.2 – Comparar Números Enteros Dobles 1.2 – Comparar Números en Coma Flotante 2. – Ejemplos
Operaciones de Comparación • Las operaciones de comparación permiten comparar dos valores en formato byte, palabra o doble palabra • Para poder comparar, los operandos deben estar uno en cada acumulador • La ejecución de las operaciones no depende del RLO • El resultado es binario. Si se cumple la comparación, el RLO es “1”; si no, es “0” • Las operaciones de comparación no modifican los contenidos de los ACUs
Activación de los Bits de la Palabra de Estado Activación de los bits CC1 y CC0 Tras una Operación de Comparación
Comparar Números Enteros • La operación Comparar enteros ejecuta una operación de comparación cuya base es un entero en coma fija de 16 bits. • Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado. • Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de la comparación es “1”, en caso contrario es “0”. • No existe la negación del resultado.
Ejemplo: IW 0 MW 10
CMP ==I IN1 IN2
&
I 0.0
Q 4.0 =
A( L IW 0 L MW 10 ==I ) A I 0.0 = Q 4.0
Comparar Números Enteros Dobles • La operación Comparar enteros dobles ejecuta una operación de comparación cuya base es un entero en coma fija de 32 bits. • Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado. • Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de la comparación es “1”, en caso contrario es “0”. • No existe la negación del resultado.
Ejemplo: MD 0 MD 4
CMP <>D IN1 IN2
I 0.0
& Q 4.0 =
A( L MD 0 L MD 4 <>D ) A I 0.0 = Q 4.0
Comparar Números en Coma Flotante • La operación Comparar números en coma flotante ejecuta una operación de comparación cuya base son números en coma flotante. • Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado. • Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de la comparación es “1”, en caso contrario es “0”. • No existe la negación del resultado.
Ejemplo: MD 0 MD 4
CMP
I 0.0
A( L MD 0 L MD 4
& Q 4.0 =
Ejemplos 1 Comparación en el comienzo Comparación en operaciones lógicas: de una operación lógica: O Input2 L L >I A =
O( L MW 122 L 200 <=I ) O Input3 = Output2
MW 120 512 Input1 Output1
Múltiples comparaciones:
L MW 124 L 1200 >I JC GREA ==I JC EQUA
L MW 124 L 1200 >I JP GREA JZ EQUA
Ejemplos 2 L MW 92 L 120 ==I R M 99.0
Comparación de INT:
L “DB_Global”.CompVal1 L “DB_Global”.CompVal2
Comparación de DINT:
L #Valact L #CALIBRE >=R S #Recali
Comparación de REAL:
Ejemplo – Semáforo Cronograma
1 0
60
<
Rojo
Q 4.0
Verde
Q 4.1
>
1 0
<
20
1
Naranja Q 4.2
0
>
5 < Tiempo en sg.
I 0.0
T1
&
M 2.0
S_ODT S5T#1S
TV R
C1 BI BCD Q
# M 2.0 #
S_CDU CU CD S CV PVCV_BCD
R
C1 +60
C1 +75
C1 +80
Q 4.0 CMP S 2 ==I IN1 M 1.0 IN2 Q 2 R Q Q 4.1 CMP ==I IN1 M 1.1 2 IN2 Q CMP ==I M 1.2 IN1 2 IN2 Q
S
Rojo
Verde
R Q
Q 4.2 S R Q
Naranja
Q
A AN L SD A = A CU *** L L == R S
STL I 0.1 M 2.0 S5T#1S T 1 T 1 M 2.0 M 2.0 C 1 C 1 60 I Q 4.0 Q 4.1
L L == S
C 1 75 I Q 4.2
L L == R R S R
C 80 I Q Q Q C
1 4.1 4.2 4.0 1
Ejemplo – Señalización de Nivel de Llenado Ejemplo A R A CU A CD L L <= = L L >= =
I 0.0 15
10
5 I 0.1
1
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.
STL I 0.2 C 4 I 0.0 C 4 I 0.1 C 4 C 4 5 I Q 4.1 C 4 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).
I 0.2
0 1
8x
0
12x
I 0.0
1
I 0.1
0 1
Q 4.0
0 1
Q 4.1
0
Tiempo
Ejemplo – Generación de Señal Triangular 1
I 0.0
0 1
A AN L SD A = *** A AN CU A A CD AN R *** LC T *** LC L >= S *** AN R *** A =
M 20.0
0 IB 1
AB 5
0 1
Q 4.0
0
Tiempo
I 0.0
T 22; M 20.0 F
G 1 Hz
C 22
&
S_CUD
&
CU CD S
QB 5 CMP ==I IN1
CV
PV CV_BCD
R
Q
M 20.1 SR
IB 1
IN2 Q
S
R
Q Q 4.0
AW L I 0.0 M 20.0 S5T#1S T 22 T 22 M 20.0 M Q C M Q C I C
20.0 4.0 22 20.0 4.0 22 0.0 22
C 22 QB 5 C 22 IB 1 I M 20.1 C M
22 20.1
M Q
20.1 4.0
Operaciones Matemáticas Automatización Industrial
Índice TEMA – Operaciones Matemáticas 1. – Operaciones Aritméticas Básicas 1.1 – Operaciones Aritméticas Básicas con Números Enteros Simples 1.2 – Operaciones Aritméticas Básicas con Números Enteros Dobles 1.3 – Operaciones Aritméticas Básicas con Números Reales 2. – Operaciones Aritméticas Avanzadas 2.1 – Funciones Trigonométricas 2.2 – Funciones Logarítmicas y Exponenciales 2.3 – Otras Funciones 3. – Operaciones de Conversión 4. – Operaciones de Desplazamiento y Rotación 5. – Operaciones Lógicas con Palabras 6. – Operaciones con Bits de la Palabra de Estado
Operaciones Aritméticas Básicas • • • •
Las funciones aritméticas combinan dos valores digitales en los acumuladores Se incluyen es este apartado las operaciones aritméticas básicas El resultado queda en el ACU1 Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de la operación. • Hay funciones para números en coma fija y coma flotante • Se contemplan las operaciones: • suma • resta • multiplicación • división • adición de constantes • incremento • decremento
Representación General • La estructura semántica de una operación aritmética es: Funcion
Cargar Dirección1 Cargar Dirección2 Función aritmética Transferir Resultado
EN
ENO
IN1 IN2 OUT
• Se contemplan las siguientes funciones aritméticas: Funciones Aritméticas Suma
Tipo de dato INT
DINT
REAL
+I
+D
+R
Resta
-I
-D
-R
Multiplicación
*I
*D
*R
División
/I
/D
/R
División con resto como resultado
-
MOD
-
ADD_I EN IN1 OUT IN2 ENO
Uso del Parámetro EN/ENO EN = Entrada Enable
ENO = Salida Enable
EN
Si está activo (1), se ejecuta la instrucción de la caja. Si no está activo (0), no se ejecuta la instrucción.
ENO
( )
Si está activo (1), indica que la Caja de instrucciones KOP instrucción se ejecutó sin error. (FC, FB, Move, Add, etc) Si no está activo (0), no se llamó a la instrucción o no se produjo la ejecución de la instrucción
* AWL no admite los parámetros EN/ENO. ENO = al bit BR en AWL
Números Enteros Simples (I) Suma de INT (+I)
ADD_I
EN • Interpreta como valores a sumar los contenidos IN1 OUT de las palabras de las partes bajas de los ACU1-2 IN2 ENO • 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
Resta de INT (-I)
SUB_I
L L +I T
MW4 MW10
L
MW5 MW11
L • Interpreta como valores a restar los contenidos EN -I de las palabras de las partes bajas de ACU1-2 IN1 OUT T • Resta el valor del ACU1 del valor del ACU2 IN2 ENO • El resultado queda en ACU1 • En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero. • Los bits de estado OV y OS indican cualquier sobrepasamiento del rango • La parte alta del ACU1 no se ha modificado
MW6
MW7
Números Enteros Simples (II) Multiplicación de INT (*I)
MUL_I
• Interpreta como valores a multiplicar los contenidos de las palabras de las partes 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
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”
DIV_I EN IN1 OUT IN2 ENO
31
16 15
ACU2 (Irrelevante) Antes
EN IN1 OUT IN2 ENO
0
Dividendo
/I
ACU1 (Irrelevante) = Después ACU1 Resto
Divisor Cociente
Números Enteros Dobles (I) Suma de DINT (+D)
ADD_DI
• Interpreta los valores de ACU1 y ACU2 EN como valores en DINT IN1 OUT • La suma queda en ACU1 IN2 ENO • En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero. • Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Resta de DINT (-D) • 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 L +I T
MD4 MD10 MD16
SUB_DI EN IN1 OUT IN2 ENO
Números Enteros Dobles (II) Multiplicación de DINT (*D) • 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
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
MUL_DI EN IN1 OUT IN2 ENO
DIV_DI EN IN1 OUT IN2 ENO
MOD_DI EN IN1 OUT IN2 ENO
Evaluación de los Bits de la Palabra de Estado • Las operaciones aritméticas de enteros afectan a los bits de estado CC1, CC0, OV y OS Estado de señal de los bits de la palabra de estado: resultado del cálculo dentro del área válida
Estado de señal de los bits de la palabra de estado: resultado del cálculo fuera del área válida
Estado de señal de los bits de la palabra de estado: operaciones aritméticas con números enteros dobles +D, /D y MOD
Números Reales (I) Suma de REAL (+R)
ADD_R EN IN1 OUT IN2 ENO
• 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
Resta de REAL (-R)
SUB_R
EN • Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL IN1 OUT • Resta del valor del ACU1 el valor del ACU2 IN2 ENO
• El resultado queda en ACU1 • En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero. • Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Números Reales (II) Multiplicación REAL (*R)
MUL_R
EN • Interpreta los valores de ACU1 y ACU2 como IN1 OUT valores de tipo de dato REAL IN2 ENO • 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”
División de REAL (/R)
DIV_R
EN • Interpreta los valores de ACU1 y ACU2 como IN1 OUT valores de tipo de dato REAL IN2 ENO • 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”.
L L *R T
L L /R T
MD6 MD12 MD67
MD67 MD3 MD33
Evaluación de los Bits de la Palabra de Estado • Las operaciones aritméticas de reales afectan a los bits de estado CC1, CC0, OV y OS Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área válida
Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área no válida
Suma de Constantes al ACU1 Funciones
Estructura semántica Cargar Dirección1 Adición Constante Transferir Resultado
+ B#16#bb + +/-w + L#+/-d
• La adición de constantes es útil para el cálculo de direcciones • Añade la constante especificada al contenido del ACU1 • Se puede especificar: • constante byte hexadecimal • constante word o doble word decimal • Para añadir una constante word usando DINT , preceder a la constante con L# • Si una constante decimal excede el rango de INT, calcula automáticamente en DINT
Ejemplos: L + T
Valor1 B#16#21 Resultado1
L + T
Valor2 -33 Resultado2
L + T
Valor3 L#-1 Resultado3
Decremento e Incremento Decremento (DEC n)
Incremento (INC n)
Estructura semántica Cargar Decrementar Transferir
Dirección1 Valor Resultado
Cargar Incrementar Transferir
Dirección1 Valor Resultado
• Las funciones DEC e INC afectan a ACU1 • El valor que se puede incrementar o decrementar tiene un rango de 0 a 255 • Sólo afecta al byte de menor peso del ACU1 • No hay llevada (carry) al byte siguiente • Se ejecutan con independencia del RLO
Ejemplos: L INC T
ValorInicial 5 ValorInicial
L DEC T
ValorFinal 7 ValorFinal
Operaciones Aritméticas Avanzadas • Las funciones matemáticas procesan números en formato de datos REAL • Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de la operación. • Las funciones matemáticas toman el número del ACU1 como entrada • Almacena el resultado en el ACU1 • Se contemplan las funciones: • trigonométricas • arco • cuadrado y raíz cuadrada • función exponencial en base “e” y logaritmo natural
Representación General • La estructura semántica de una operación aritmética avanzada es: Cargar Dirección1 Función matemática Transferir Resultado
Funcion EN
ENO
IN
OUT
Funciones Trigonométricas (I) Funciones Trigonométricas • Existen las funciones trigonométricas: - seno (SIN) - coseno (COS) - tangente (TAN) • La entrada es un ángulo en radianes en formato de número REAL en ACU1
SIN EN OUT IN
TAN EN OUT IN
Funciones Arco
ENO
ENO
Ejemplo: La potencia eléctrica P=V*I*senϕ L PHI SIN L Corriente *R L Tension *R T Potencia
ATAN EN OUT
• Existen las funciones arco: - arco seno (ASIN) - arco coseno (ACOS) IN ENO - 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 grados L 0.343 ASIN L 57.2958 *R T Angulo_grados
Funciones Logarítmicas y Exponenciales Función Logarítmica (LN) • Calcula el logaritmo natural de un número en coma flotante LN EN OUT IN
Exponencial en base e (EXP) • Realiza la función e( ACU1)
ENO
Ejemplo: ab = eb ln a EXP EN OUT IN
ENO
L LN L *R EXP T
Valor_a Valor_b
Potencia
Funciones Cuadrado y Raíz Cuadrada Ejemplo: Volumen cilindro
Cuadrado (SQR)
SQR EN OUT
• Calcula el cuadrado del valor del ACU1 L MD 34 SQR T MD 38
IN
ENO
L SQR L *R L *R T
Radio Altura 3.141592 Volumen
Ejemplo:
Raíz cuadrada (SQRT) • Extrae la raíz cuadrada del valor del ACU1 L M D10 SQRT T MD 14
SQRT EN OUT IN
ENO
L SQR L SQR +R SQRT T
πr 2h
#a
c = a 2 + b2
#b
#c
Operaciones de Conversión • Las funciones de conversión convierten el tipo de datos del valor del ACU1
BCD 3 dec.
INVI (INV_I) NEGI (NEG_I)
BTI (BCD_I) INT ITB (I_BCD) ITD (I_DI) BTD (BCD_DI)
BCD 7 dec.
DINT
INVD (INV_DI) NEGD (NEG_DI)
DTB (DI_BCD) DTR (DI_R)
RND+ (CEIL), RND- (FLOOR) RND (ROUND), TRUNC (TRUNC)
REAL
ABS NEGR (NEG_R)
Conversión de Enteros Estructura Semántica
Conversión: Números en INT y DINT ITD: ITB: DTB: DTR:
Conversión de INT a DINT (I_DI) Conversión de INT a BCD (I_BCD) Conversión de DINT a BCD (DI_BCD) Conversión de DINT a REAL (DI_R)
Conversión: Números en BCD BTI: BTD:
Función EN ENO
Cargar Dirección1 Función de conversión Transferir Resultado
Conversión de BCD a INT (BCD_I) Conversión de BCD a DINT (BCD_DI)
IN
OUT L MD10 DTR T MD30
DI_R EN ENO IN
OUT
L EW4 BTI T MW20
BCD_I EN ENO IN
OUT
Conversión de Reales Conversión: Números REAL
L MD33 RND T MD69
RND: 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)
Modos de Redondeo en Conversión de Números Reales
ROUND EN ENO IN
OUT
Otras Operaciones de Conversión Otras funciones de conversión INVI: INVD: NEGI: NEGD: NEGR: ABS:
ABS EN ENO
Complemento a uno de INT (INV_I) Complemento a uno de DINT (INV_DI) Complemento a dos de INT (NEG_I) Complemento a dos de DINT (NEG_DI) Negación de número REAL, cambio de signo (NEG_R) Valor absoluto de un número REAL (ABS)
IN
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.
MOVE EN ENO IN
OUT
OUT
Operaciones de Desplazamiento y Rotación • Las funciones de desplazamiento permiten desplazar el contenido del ACU1 hacia la derecha o hacia la izquierda • Se pueden utilizar con palabras y dobles palabras • Devuelven el resultado en el ACU1 • Se contemplan las operaciones: • desplazamiento • rotación • Se pueden programar de dos formas: • El número de posiciones en ACU2
Función EN IN OUT N ENO
Cargar Numero_de_posiciones Cargar Dato1 Función desplazar Transferir Resultado • El número de posiciones como parámetro Cargar Dato1 Fun. Desplazar Numero_de_posiciones Transferir Resultado
Funciones de Registro Se contemplan las siguientes funciones de registro: Funciones de Registro Palabra
Doble palabra
con nº posiciones
con nº posiciones con nº posiciones
con nº posiciones
como parámetro
en ACU2
en ACU2
como parámetro
Desplazar a la izquierda SLW n (SHL_W) SLW
SLD n (SHL_DW)
SLD
Desplazar a la derecha SRW n (SHR_W) SRW
SRD n (SHR_DW)
SRD
Desplazar con el signo SSI n (SHR_I)
SSI
SSD n (SHR_DI)
SSD
Rotar a la izquierda
-
-
RLD n (ROL_DW)
RLD
Rotar a la derecha
-
RRD
Rotar izqui. con CC1 Rotar derecha con CC1
-
-
RRD n (ROR_DW)
-
RLDA
-
-
RRDA
-
Desplazamientos Desplazamiento izquierda (palabra) SLW
Desplazamiento izquierda (doble palabra) SLD
“0”
“0”
CC1
ACU1
CC1
ACU1
Desplazamiento derecha (palabra) SRW
Desplazamiento derecha (doble palabra) SRD
“0”
CC1
CC1
ACU1
“0”
ACU1
Desplazamiento con signo (palabra) SSI
S
Desplazamiento con signo (doble palabra) SSD
S
CC1
CC1 ACU1
ACU1 SHL_W EN ENO IN N O
MW50 (MW4 = 5) MW4
L SLW T
* MW12
MW50 5 MW12
Rotaciones Rotar a la izquierda RLD
Rotar izquierda a través de CC1 RLDA
CC1
CC1 ACU1
ACU1
Rotar a la derecha RRD
Rotar a la derecha a través de CC1 RRDA CC1
CC1
ACU1
ACU1 ROR_DW
EN MD60
IN
MW6
N
(MW6 = 4)
ENO
O
*
L RRD T
MD60 4 MD50
MD50 * Estado de señal del último bit desplazado:
Operaciones Lógicas con Palabras • • • •
Las funciones lógicas de palabras combinan los contenidos del ACU1 y ACU2 bit a bit. El resultado queda en el ACU1 Hay funciones para palabras o dobles palabras Se dispone de funciones: • AND • OR • OR Exclusiva
• Se pueden programar de dos formas: • Operación sin constante
Función ENO EN
Cargar Valor1 Cargar Valor2 Función lógica sin constante Transferir Resultado
IN1 IN2
• Operación con constante Cargar Dato1 Operación lógica con constante Transferir Resultado
Operación Digital AND Operación digital AND • AW (WAND_W) • AW W#16# • AD (WAND_DW) • AD DW#16#
operación AND (palabra) entre ACU1 y ACU2 operación AND (palabra) entre constante y ACU1 operación AND (doble palabra) entre ACU1 y ACU2 operación AND (doble palabra) entre constante y ACU1
WAND_W ENO EN MW10
IN1
MW20
IN2
OUT
L L AW T
MW30
MW10 MW20 MW30
OUT
Operación Digital OR Operación digital OR • • • •
OW (WOR_W) OW W#16# OD (WOR_DW) OD DW#16#
operación OR (palabra) entre ACU1 y ACU2 operación OR (palabra) entre constante y ACU1 operación OR (doble palabra) entre ACU1 y ACU2 operación OR (doble palabra) entre constante y ACU1
WOR_W ENO EN MW32
IN1
MW44
IN2
OUT
MW34
L L OW T
MW32 MW44 MW34
Operación Digital OR Exclusiva Operación digital OR exclusiva • XOW (WXOR_W) operación OR exclusiva (palabra) entre ACU1 y ACU2 • XOW W#16# operación OR excl. (palabra) entre constante y ACU1 • XOD (WXOR_DW) operación OR excl. (doble palabra) entre ACU1 y ACU2 • XOD DW#16# operación OR excl. (doble palabra) entre constante y ACU1
WXOR_W ENO EN MW26
IN1
MW28
IN2
OUT
L L XOW T
MW24
MW26 MW28 MW24
Ejemplos de Operaciones Lógicas con Palabras Ejemplo 1 L L AW T
IW MW MW
Ejemplo 3 0 // Valor 1 144 // Valor 2 // Operación lógica 146 // Resultado
Ejemplo 2 L AW T L OD T
MW 148 W#16#807F MW 150 MD 152 DW#16#8000_F000 MD 156
L L AW L OW T
Valor1 Valor2 Valor3 Resultado
Ejemplo 4 L Valor4 L Valor5 XOW AW W#16#FFF0 T Resultado2
Operaciones de Salto Automatización Industrial
Índice TEMA – Operaciones de Salto 1. – Instrucciones de Salto 1.1 – Salto Incondicional 1.2 – Salto Condicional 2. – Distribuidor de Saltos 3. – Bucles 4. – Saltos Condicionados
Introducción Principios de Saltos • Permiten interrumpir la ejecución lineal del programa. STEP 7 soporta varias instrucciones de Salto a Etiquetas (“ir a etiqueta”) • Consta de una condición de salto y una etiqueta de salto (dirección) • La etiqueta consta de cuatro caracteres. No debe comenzar con carácter numérico • Los saltos pueden ser hacia delante o hacia atrás. Siempre dentro de un módulo – Salto Incondicional – Salto Condicional, basado en el RLO, BR, OV / OS, CC1 y CC0 – ...
Salto
Ejemplo:
Si se ejecuta el salto las instrucciones situadas entre el salto y la etiqueta no se procesan
Etiqueta
L C 10 L 50 >I JC GR50 Programa ........ JU SHAR GR50: Programa en etiqueta de salto SHAR:
Introducciones de Salto Operaciones de Salto en STL JU
Etiqueta
Salto Inconcicional
JC
Etiqueta
Salto si RLO = 1
JCN
Etiqueta
Salto si RLO = 0
JCB
Etiqueta
Salto si RLO = 1 y salva RLO
JNB
Etiqueta
Salto si RLO = 0 y salva RLO
JBI
Etiqueta
Salto si BR = 1
JNBI
Etiqueta
Salto si BR = 0
JZ
Etiqueta
Salto si resultado de operación igual a 0
JN
Etiqueta
Salto si resultado de operación distinto a 0
JP
Etiqueta
Salto si resultado de operación mayor que 0
JPZ
Etiqueta
Salto si resultado de operación mayor o igual a 0
JM
Etiqueta
Salto si resultado de operación menor que 0
JMZ
Etiqueta
Salto si resultado de operación menor o igual a 0
JUO
Etiqueta
Salto si resultado de operación inválido
JO
Etiqueta
Salto si overflow
JOS
Etiqueta
Salto si overflow memorizado
JL
Etiqueta
Distribuidor de saltos
LOOP
Etiqueta
Bucle por salto
Condicion Salto condicional Programa si no se cumple condición Programa si se cumple la condición
Instrucciones de Salto Incondicional Salto Incondicional (JMP) El Salto Incondicional se ejecuta independientemente de cualquier condición; este salto no lee ni se ve afectado por los bits de la palabra del estado. AWL
FUP Segmento 1 ....
Segmento 1 CAS1 JMP
. . . . Segmento X
Segmento X
CAS1: A I 0.4 R Q 4.1
CAS1 Q 4.1 I 0.4
JU CAS1 . . . . . . .
R
Instrucciones de Salto Condicional Salto Condicional (JMP, JMPN) El Salto Condicional se ejecuta en función de una condición reflejada en uno o varios bits de la palabra de estado. AWL
FUP Segmento 1 I 0.0
CAS2 JMP
. . . .
Segmento 1 A I 0.0 JC CAS2 . . . . Segmento X CAS2: A I 0.4 R Q 4.1
Segmento X CAS2
Segmento 1 I 0.0
R
CAS3 JMPN
. . . .
CAS3 Q 4.1 I 0.4
Segmento 1 A I 0.0 JCN CAS3 . . . . Segmento X CAS3: A I 0.4 R Q 4.1
Segmento X
Q 4.1 I 0.4
AWL
FUP
R
STL: Saltos Condicionales Basados en RLO Salto Condicional (JC, JCN) • El bit de la palabra de estado Resultado de la Operación Lógica (RLO) determina cuando se ejecuta este salto condicional. • También existen instrucciones que además guardan el resultado en el RB
Salta si RLO = 1
Salta si RLO = 1 y almacénalo en RB A I 0.0 A I 1.0 JCB NEW1
A I 0.0 A I 1.0 JC NEW1
Salta si RLO = 0 y almacénalo en RB
Salta si RLO = 0 A I 0.0 A I 1.0 JCN REC2
A I 0.0 A I 1.0 JNB REC2
STL: Saltos Condicionales Basados en BR, OV, OS Salto Condicionales Basados en BR, OV, OS Los bits del la palabra de estado Resultado Binario (RB) o Desbordamiento/Desbordamiento Memorizado determinan cuando se ejecutan estos saltos condicionales. La evaluación de los bits RB, OV y OS proporciona un medio de verificar condiciones de error. •
Salto si BR = 1 (JBI)
•
Salto si BR = 0 (JNBI)
•
Salto si OV = 1 (JO)
•
Salto si OS = 1 (JOS)
STL: Saltos Condicionales Basados en CC1 y CC0 Salto Condicionales Basados en CC1 y CC0 • •
Cuando se ejecuta en el programa un cálculo matemático, los bits CC1 y CC0 se actualizan en la palabra del estado. Los bits CC1 y CC0 se evalúan en las siguientes instrucciones de salto de la tabla
CC0
CC1
0
1
0
1
0
0
1
1
Salto ejecutado JZ
Salto si el resultado es Cero
JMZ
Salto si cero o menor de cero
JPZ
Salto si cero o mayor de cero
JM
Salto si es menor de cero (negativo)
JMZ
Salto si cero o menor de cero (negativo)
JN
Salto si no cero
JP
Salto si es mayor de cero (positivo)
JPZ
Salto si cero o mayor de cero (positivo)
JN
Salto si no es cero
JUO
Salto si resultado no es admisible
STL: Distribuidor de Saltos Instrucción JL • Un salto distribuidor JL permite especificar (calcular) saltos a una sección del programa en el módulo condicionado a un número de posición. • Trabaja conjuntamente con una lista de saltos incondicionales JU • Hay una etiqueta de salto en JL que apunta al final de la lista • Puede tener hasta 255 entradas • Utiliza el byte bajo del ACU1 L JL JU JU . . JU END: JU ..... M0: L
Numero_de_posiciones END M0 M1
//Número para decidir el salto //Selector de “x” posicines //Si ACU1 tiene “0” salta a meta 0 //Si ACU1 tiene “1” salta a meta 1
Mx ERR
// Si ACU1 tiene “x” salta a meta x // Si ACU1 es mayor de “x” o menor de “0”
MW 30
STL: Distribuidor de Saltos
STL: Función Bucle Inicio del Contador de Bucle
Sección de Programa que va a ser ejecutado varias veces
Decremento del Contador de Bucles
Sí
¿ Contador de Bucle <>0 ?
No Continuar
L +4 NEXT:T MB10 . . . . . L MB10 LOOP NEXT
// cargar el contador de bucle // primera instrucción del bucle // bucle // bucle // bucle // bucle // bucle // últimas instrucciones del bucle // salto a la etiqueta NEXT
En este ejemplo, el programa comprendido entre NEXT y NEXT se ejecutará 4 veces.
STL: Función Bucle
Saltos Condicionados FC100
Si
?
No
AN I 0.5 JC M3
JU M2 M1 -
C
A I 0.0 JC M1
A I 0.6 = Q 4.3
? Si
Si
M4 AN I 2.0 = Q 4.5 A I 2.1 JC M4
?
A
A I 0.2 = Q 4.0 JU M2
A
M3 BE
No
? Si
B
M1 A =
I 0.3 Q 4.1
M2 A =
I 0.4 Q 4.2
B
No
? Si
No
No
AN I 0.1 JC M1
M3 A I 0.7 = Q 1.4
M2 -
D
?
Si
C
No
Ejemplos de Saltos:Incidencia sobre Temporizadores FC10 A JC
I MET1
0.0
Salto a meta1 con entrada a 1
A A =
I I Q
0.1 0.2 4.0
Combinación binaria
A L SD A R
I S5T#1S T I T
0.2
Temporizador
0 0.3 0
A CU A CD A L S A R
I C I C I C#10 C I C
0.4 1 0.5 1 0.6
L T
C QW
1 6
Carga y Transferencia
L L ==I =
C C#12
1
Comparación
Q
4.1
A =
T Q
0 4.2
T Q
0 4.3
MET1 A = BE
Contador
1 0.7 1
Salida temporizador dentro de salto
Ejemplos de Saltos: Ejecución Prioritaria FC13 A JC
I PRI1
0.0
Con I0.0 se ejecutan ‘A’ y ‘D’
A JC
I PRI2
0.1
Con I0.1 se ejecutan ‘B’ y ‘D’
A JC
I PRI3
0.2
Con I0.2 se ejecutan ‘C’ y ‘D’
JU
FIN
PRI1 A A = JU
I I Q FIN
1.0 1.1 4.0
Programa ‘A’
PRI2 A A = JU
I I Q FIN
1.2 1.3 4.1
Programa ‘B’
PRI3 A A = JU
I I Q FIN
1.4 1.5 4.2
Programa ‘C’
FIN
I I Q FIN
1.6 1.7 4.3
Programa ‘D’
A A = JU BE
Ejemplos de Saltos: Mezcladora Mediante un selector de 5 posiciones, realizar el programa que permita ajustar el tiempo de funcionamiento de una mezcladora. Los tiempos fijos asignados a cada posición se encuentran en el DB 10
DB10 0 2 4 6 8
FC11
OB1
S5T#1S S5T#2S S5T#3S S5T#4S S5T#5S
CALL CALL BE
FC FC
A L SE A = BE
10 11
I MW T T Q
1.0 10 20 20 4.0
DB DBW I META DBW I META DBW I META DBW I META DBW I META
10 0 0.0
MW
10
FC10 OPN L A JC L A JC L A JC L A JC L A JC BEU META T BE
Ejemplos de Saltos: Lector de Alarmas FC14 L T A S JC ALA1 R . . . L T A S JC ALA2 R . . . L T A S JC ALA3 R . . . BEU
PB MB M M ALA0 M
ALA0 L T
IB PB
1 1
M ALA1 M ALA2 M ALA3
10.0
A JC A JC A JC BE
0 0 0.0 10.0
Primera consulta de alarma
10.0 Código de Programa Principal
PB MB M M ALA0 M
0 0 0.0 10.1
Segunda consulta de alarma
10.1 Código de Programa Principal
PB MB M M ALA0 M
0 0 0.0 10.2
Tercera consulta de alarma
10.2 Código de Programa Principal
10.1 10.2
Programa de alarma
2 0.1 4 0.2 6 0.3 8 0.4
Ejemplos de Saltos: Cinta Transportadora Reconocimiento de pieza defectuosa
Expulsor
FC20 Nomb CINTA A AN = S AN R
I M M M I M
0.0 1.0 2.0 1.0 0.0 1.0
AN BEC
M
2.0
AN JC
I BUEN
0.1
Salto si es buena
L SLW L +I T JU
MB 1 1
20
Si es defectuosa se desplaza el registro de desplazamiento y se introduce un “1”
MB FIN
20
BUEN L SLW T
MB 1 MB
20
FIN
MB QB
20 4
MB 20 I 0.0
L T BE
20
Evaluación de orden de desplazar
Si es buena se desplaza el registro de desplazamiento Presentar el registro de desplazamiento en QB4
Ejemplos de Saltos: Saltos Distribuidos FC 14 L IB 0 JL OVER JU M0 JU M1 JU M2 JU M3 OVER: L 0 T QW 4 BEU M0:
M1:
M2:
M3:
L -16 SSI 2 T QW BEU L 16 SSI 2 T QW BEU L -16 SRW 2 T QW BEU L 16 SRW 2 T QW 4
//Desplazar con signo a derecha 4
4
4
Saltos en Step 7 (I) – SPA , SPB y SPBN (If Then-Else) Las operaciones de saltos en Step 7 son parecidas conceptualmente a los que nos podemos encontrar en otros lenguajes: interrumpen la ejecución normal del programa (secuencial) y lo retoman en una etiqueta dada. Los saltos tienen una serie de características y requisitos:
Constan de una condición de salto y una dirección donde saltar (la etiqueta). La etiqueta puede tener como máximo 4 caracteres y el primer carácter no puede ser un número. Los saltos pueden ser incondicionales y condicionados. Se distinguen en los nombres de las etiquetas entre mayúsculas y minúsculas (“aaa” no es la misma etiqueta que “AAA”)
En la entrada de hoy vamos a ver un salto incondicional (SPA) y dos condicionados (SPB y SPBN). Te mostraré en futuras entradas más saltos para poder hacer un CASE o un FOR-NEXT, pero de momento veremos estos que son los más simples y probablemente más habituales.
Saltos en Step 7: SPA La operación de salto SPA es un salto incondicional, es decir, se ejecuta siempre que se encuentre en el camino de la ejecución del programa y no depende del estado del RLO. La sintáxis será de la siguiente forma:
…. SPA pepe (código que no se ejecutará) pepe: NOP 0 (Código que continuará ejecutándose) …
Tras la etiqueta hay que escribir 2 puntos y obligatoriamente una instrucción. La instrucción NOP 0 es una instrucción nula. No hace nada de nada. Ocupa 2 bytes en memoria y lleva un minúsculo tiempo de ejecución. Además sólo es programable en AWL. A mi personalmente me gusta colocar el NOP 0 tras la etiqueta por varios motivos
Porque cuando estás colocando las etiquetas SPA u otras me gusta colocar la etiqueta de salto inmediatamente después. Como no sé cómo va a seguir el programa, coloco la NOP 0. Si coloco una instrucción tras la etiqueta y mañana borro la primera instrucción tras el salto corro el peligro de no darme cuenta que además de la instrucción, he borrado también el salto. A mi juicio queda más limpio ya que todas las etiquetas siempre llevarán el mismo empiece y es más visible entre todo el código. Manías personales (la de más peso probablemente de todas)
La operación de salto SPA en general no irá sola ya que salvo en ocasiones que quieras evitar la ejecución de una parte del código porque estés depurando alguna parte, no tiene mucha utilidad en sí misma. Normalmente va a ir acompañada de otras instrucciones de salto, complementando las acciones. En el vídeo de ejemplo podrás ver cómo se pueden combinar.
Saltos en Step 7: SPB y SPBN (If /Then)
Saltos en Step 7 Estas dos operaciones de salto son condicionadas, es decir, dependen del estado del RLO:
SPB: Se ejecutará el salto cuando el resultado de la operación booleana sea true (RLO = 1) SPBN: Se ejecutará el salto cuando el resultado de la operación booleana sea FALSE (RLO = 0)
En definitiva es lo que podríamos llamar los IF- THEN de otros lenguajes de programación. La sintáxis será de la siguiente forma: …. Condición booleana SPB pepe (código que se ejecutará si RLO = 0 y no se ejecutará con RLO=1) pepe: NOP 0 (Código que continuará ejecutándose con o sin salto)
… Evidentemente con SPBN sería idéntico: …. Condición booleana SPBN pepe (código que se ejecutará si RLO = 1 y no se ejecutará con RLO=0) pepe: NOP 0 (Código que continuará ejecutándose con o sin salto) … Como bien indica la sintáxis el salto se produce si y sólo si se produce la condición de salto (RLO=0 ó 1 dependiendo de si elijes SPB o SPBN). Esto implica, y quiero dejarlo bien claro aunque sea una obviedad, que el código que está bajo la condición de salto y la etiqueta se ejecutará normalmente si la condición de salto no se satisface. Para que tengas una idea de cómo hacer un IF-THEN-ELSE… la estructura sería del estilo … Condición IF SPB Etiq1 (Codigo ELSE) SPA Etiq2 Etiq1: NOP 0 (Codigo del IF) Etiq2: NOP 0 … Como puedes ver, hemos combinado el SPB con el SPA de forma que:
Si la condición de salto se cumple, saltamos al Etiq1 y ejecutamos el código del IF y continuamos evitando el código del ELSE. Si la condición de salto NO se cumple, ejecutamos a continuación el código del ELSE y hacemos un salto incondicional (SPA) para evitar y no ejecutar el código del IF saltando al Etiq2.
Como veis estas instrucciones empiezan a ser interesantes ya que nos van a dar bastante juego a la hora de realizar nuestros programas.
¿Cuándo los voy a usar? En general vas a usar estas instrucciones cuando el código a evitar o no no lleven aparejado un FC/FB ya que en otro caso, es más simple crear una booleana que te active la llamada a la funcion FB/FB que no andar con saltos. Es decir, la usaré dentro de los FC/FB cuando el código a ejecutar o a esquivar sea pequeño y no merezca tener un FC/FB para ello ya que si el código va a ser muy largo, bajo mi punto de vista es mejor englobarlo en una función para un mejor seguimiento y depuración.
¿Existen más tipos de saltos en Step 7? Efectivamente hay otros tipos de salto para realizar otro tipos de tareas como pueden ser los que se generan en otros lenguajes como son las sentencias SELECT-CASE o FOR-NEXT entre otros
LOOP en Step 7 (Saltos II) – Bucle For – Next y ejemplo de filtrado analogico 11 enero, 2013 en ejemplos, Teoría, Tutoriales, Uncategorized, Videos 1 Comentario
inShare
En la última entrada vimos los saltos en Step 7 más comunes. Hoy te voy a mostrar un nuevo tipo de salto, que si provienes de la programación en otros lenguajes, te va a sonar. Se trata de hacer bucles tipo FOR-NEXT mediante la instrucción LOOP en Step 7. Realmente la instrucción es muy sencilla: LOOP Etiqueta. Para explicarlo bien, vamos a desgranar el siguiente código: (Código) L 10 –> Lo primero que hacemos es cargar en el acumulador el número de ciclos del bucle. NEXT: T MW10 -> Transferimos el valor del ACU-1 a nuestra marca de contador de ciclos (Código) –> Implementamos el código que queramos
L MW10 –> Cargamos el valor del contador de ciclos en el ACU-1 LOOP NEXT –> Ejecutamos el loop y saltamos a la etiqueta deseada (Llamada NEXT en este caso pero podríamos llamarla pepe) (Código) –> Continuamos con el código que queramos. Vayamos con la explicación del LOOP.
¿Qué hace el LOOP en Step 7? La instrucción LOOP hace lo siguiente: [unordered_list style="bullet"]
Toma el valor del ACU-1 y le resta una unidad. Evalua el resultado de restar la unidad. Si el resultado no es cero, salta a la etiqueta. Si es cero (ya ha terminado), continua en la línea siguiente (no ejecuta el salto).
[/unordered_list] Hay que tener en cuenta que es necesario una variable (en nuestro ejemplo MW10) de 16bits que sea entera no negativa. El salto puede ser hacia delante o hacia atrás, pero la forma de hacer un FOR-NEXT tradicional es como se muestra. Por tanto, hemos hecho lo siguiente: Cargar el número de iteraciones en el acumulador 1. Por ejemplo 10. L 10 Tras ello, generamos cual va a ser nuestra meta de salto (Llamarla NEXT creo que es bastante adecuada por su significado) y transferimos el valor del ACU-1 al contador de ciclos. NEXT: T MW10 Por tanto, en el primer ciclo, MW10 valdrá 10. Como nota podrás pensar… en el post sobre los saltos dijiste que lo mejor es poner la Meta seguido de NOP 0 y ahora estás usando la instrucción directamente. Correcto. Es cierto que lo escribí y lo mantengo. De hecho aquí podría hacer lo mismo y poner un NEXT: NOP 0 T MW 10 … pero sin que sirva de precedente creo que es más intuitivo y fácil de entender que el NEXT va asociado intrínsecamente al contador de ciclos por lo que evitamos el poner a instrucción nula ya que siempre, siempre, siempre, ha de ponerse la transferencia del contador de ciclos tras la meta, por tanto, seguido es más adecuado en este caso ¿no crees?
Bien, sigamos. Una vez transferido el valor a MW10 (recordemos que vale 10), ejecutaremos el código que queramos. Ojo, sin usar MW10 salvo de lectura, no carguéis sobre él valores ya que desvirtuaría el valor del contador. Una vez terminado el código ejecutamos L MW10 LOOP NEXT Lo que hacemos es cargar el valor del contador (10 en la primera iteración) y ejecutar LOOP. Como vale 10 >0, le resta una unidad (9) y salta a NEXT. Es decir, saltará a NEXT: T MW10 y por tanto ahora el contador de ciclos valdrá 9 ya que es lo que tenemos en el acumulador 1!! Luego volverá a ejecutar el código que queramos, cargará nuevamente este valor 9, le restará la unidad y devolverá un 8 para que se lo transfiramos al contador de ciclos. ¿Fácil verdad? Espero que no os haya parecido una explicación para niños de párvulos pero es que hay veces que con el tema de los acumuladores, mucha gente se lía un poco. Finalmente os he preparado un ejemplo que creo que os va a gustar. Se trata de realizar un filtrado de una señal analógica de esta forma: [unordered_list style="bullet"]
Tomaremos la señal cada 100 ms. Pasaremos como entrada el valor analógico en tipo entero Realizaremos un filtrado de los “n” últimos ciclos donde “n” puede ser como mucho 200. Nos devolverá la media de los “n” últimos ciclos como valor real Nos devolverá la medida de los 200 últimos ciclos si hemos puesto n>20 y una señal booleana de alarma indicando que el número de ciclos es demasiado grande y que por tanto devolvemos solamente la media del máximo número de ciclos.
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
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 Ejemplo:
: instrucción de línea cuando sea la marca del salto.
MOT1: L EB 124 PLC’s
Curso 2009/10
Página 2
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 Curso 2009/10
Página 3
Ejemplo con Operaciones de Salto
PLC’s Curso 2009/10
Página 4
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 =0
<>0
>0
<0
<=0
>=0
vinculadas a resultados de operaciones aritm.
no válido (op. Artimética no permitida, ejem: dividir por cero)
PLC’s Curso 2009/10
Página 5
Operaciones de Salto condicional (II)
• Ejemplo:
PLC’s Curso 2009/10
Página 6
Operaciones de Salto condicional (III)
PLC’s Curso 2009/10
Página 7
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 PROX: T MB 10
inicializa contador de bucles meta a la que salta
¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨
Segmento que se repite
L MB 10 LOOP PROX decrementa ACU1-L y salta si ACU1-L <>0 PLC’s Curso 2009/10
Página 8
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 Curso 2009/10
Página 9
EJERCICIO (Entregable 6) •
• • • • •
Tenemos una mezcladora que produce 2 tipos de productos, magdalenas y donuts, para lo cual controla la receta, modificando las proporciones de harina (A124.0) y leche (A124.1), y el tiempo que está mezclándolos (A124.2). La producción empezará cuando E124.0 se ponga a 1 Si E124.1=1 produce magdalenas, para lo cual A124.0 está encendido 2 segundos, A124.1 está encendido 1 segundo y A124.2 durante 3 sg. Si E124.1=0 produce donuts, para lo cual los tiempos son 3, 2 y 4 segundos respectivamente. El sistema debe ser robusto de forma que si está en medio de una receta no debe interrumpirse aunque cualquiera de los dos botones de entrada se modifique La entrada E124.2 permite elegir si los productos y el proceso de mezcla se realizan simultáneamente (si E124.2=0) o de manera secuencial (si E124.2=1)
PLC’s Curso 2009/10
Página 10
Equivalente IEC
Tipo
Arranque
Depende de la señal arranque
SI : Impulso
‐
Impulso
Conexión
Si
SV : Impulso prolongado
TP *
Impulso
Conexión
No
SE: Retardo a la conexión
TON
Retardo
Conexión
Sí
‐
Retarso
Conexión
No
‐
Desconexión
SS: Retardo a la conexión memorizado
SA: Retardo a la desconexión (PRORROGA) TOFF
* TP: no se redispara con arranques próximos
www.campusabierto.es Curso de Programación de Autómatas
‐
SI
Disparo
SV
Reset Tiempo Valor booleano
SE
Disparo Reset Tiempo Valor booleano Disparo
SS
Reset Tiempo Valor booleano Disparo
SA
Reset Tiempo Valor booleano
www.campusabierto.es Curso de Programación de Autómatas
Operaciones con Temporizadores
S7-300/400
Los temporizadores permiten distintas operaciones: • Funcionamiento en un modo determinado. • Borrar la temporización. • Re-arrancar un temporizador (FR). • Consultar su estado como un operando más en operaciones lógicas de bit. • Consultar su valor en ACU 1. Modos de funcionamiento: • Impulso (SI). • Impulso prolongado (SV). • Retardo a la conexión (SE). • Retardo a la conexión con memoria (SS). • Retardo a la desconexión (SA). 1
Carga de un valor de temporización El valor de temporización se debe cargar en la parte baja del ACU para desde allí transferirlo al temporizador mediante el set que determine el modo de temporización adecuado. ●
El valor de temporización puede cargarse en la palabra baja del ACU 1 en formato binario, hexadecimal o BCD. Desde 0 a 9990 segundos
La siguiente sintaxis permite cargar un valor de temporización predefinido: L W#16#abcd a = base de tiempos bcd = valor de temporización en formato BCD Base de tiempos y código respectivo: 10 ms 0 100 ms 1 1s 2 10 s 3 Registros afectados: ACU 1, ACU 2
2
Carga de un valor de temporización Ejemplo: L W#16#210
//esto introduce un valor de 10 segundos en ACU 1 (2 base de 1s, 10 los segundos que deseamos) L S5T#aH_bbM_ccS_ddMS a = horas, bb= minutos, cc = segundos, dd = milisegundos
En este caso la base de tiempos se selecciona de forma automática, tomándose la de valor más bajo posible. Debido a esto los valores de resolución demasiado alta se redondean por defecto, alcanzando el rango pero no la resolución deseada. Las posibles resoluciones y rangos son: 0,01 s 10MS a 9S_990MS 0,1 s 100MS a 1M_39S_900MS 1 s 1S a 16M_39S 10 s 10S a 2H_46M_30S L S5T#00H02M23S00MS //esto introduce un valor de temporización de2 minutos y 23 segundos en el ACU 1
3
Temporizador como impulso (SI) Instrucción: SI Si el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca. El temporizador marcha con el valor de tiempo indicado en ACU1. Si el RLO cambia de 1 a 0 antes de terminar el tiempo, el temporizador se detiene. La salida del temporizador entrega 1 mientras el temporizador corre. Registros afectados: ER Ejemplo: U L SI U =
E 0.0 S5T#45s T2 T2 A 0.1
//Empleamos la entrada 0.0 como entrada del temporizador //Introducimos un valor de temporización de 45 segundos //Empleamos el temporizador 2 como impulso //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 0.1
4
Temporizador como impulso prolongado (SV) Instrucción: SV Si el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca y continua en marcha incluso si el RLO cambia a 0 antes de que el temporizador termine. Mientras el tiempo esta corriendo, la salida vale 1. Registros afectados: ER Ejemplo: U L SV U =
E 0.2 S5T#85s T 9 T 9 A 9.1
//Empleamos la entrada 0.2 como entrada del temporizador //Introducimos un valor de temporización de 85 segundos //Empleamos el temporizador 9 como impulso prolongado //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 9.1
5
Temporizador como retardo a la conexión (SE) Instrucción: SE El temporizador arranca cuando hay un flanco creciente en el RLO (al ejecutar esta instrucción). El temporizador continua en marcha con el valor de temporización indicado en el ACU 1 mientras sea positivo el estado de señal en la entrada (el RLO). El estado de la salida es 1 si el tiempo ha transcurrido sin errores y si el estado de la entrada (RLO) es 1. Si la entrada (RLO) cambia de 1 a 0 mientras está en marcha el temporizador, éste cambia el estado de la salida a 0. Registros afectados: ER Ejemplo: U L SE U =
E 0.7 S5T#65s T 4 T 4 A 8.1
//Empleamos la entrada 0.7 como entrada del temporizador //Introducimos un valor de temporización de 65 segundos //Empleamos el temporizador 4 como retardo a la conexión //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 8.1
6
Temporizador como retardo a la conexión (SS) Instrucción: SS Si la entrada (RLO en la ejecución de la instrucción) cambia de 0 a 1, el temporizador arranca y continua corriendo incluso si la entrada (RLO) cambia a 0, antes que el temporizador termine de contar. Si el tiempo ha concluido la salida continua a 1 independientemente del estado de la entrada (RLO). Solo se puede poner a 0 la salida mediante un Reset. El temporizador vuelve a arrancar con el valor de temporización indicado en el ACU 1 si el estado de la señal en la entrada (RLO) cambia de 0 a 1 mientras el temporizador está en marcha. Registros afectados: ER Ejemplo: U L SS U =
E 1.2 S5T#32s T 2 T 2 A 3.1
//Empleamos la entrada 1.2 como entrada del temporizador //Introducimos un valor de temporización de 32 segundos //Empleamos el temporizador 2 como retardo a la c. con memoria //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 3.1
7
Temporizador como retardo a la desconexión (SA) Instrucción: SA Si la entrada (RLO en la ejecución de la instrucción) cambia de 1 a 0, el temporizador arranca y continua corriendo. Si la entrada (RLO) cambia a 1 antes que el temporizador termine de contar, se resetea el temporizador. Mientras el tiempo está corriendo, la salida vale 1. Registros afectados: ER Ejemplo: U L SA U =
E 4.2 S5T#32s T 7 T 7 A 1.1
//Empleamos la entrada 4.2 como entrada del temporizador //Introducimos un valor de temporización de 32 segundos //Empleamos el temporizador 7 como retardo a la desconexión //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 1.1
8
Elección del Temporizador adecuado
9
Borrado de un Temporizador AWL S7-300/400
Instrucción: R T Esta instrucción borra (reinicia) el temporizador indicado. El temporizador vuelve al estado de reposo, es decir parado y con la salida igual a 0. Registros afectados: ER Ejemplo: U E 0.0 L S5T#2s SS T 2 U E 0.1 R T 2 U T 2 = A 3.1
//Empleamos la entrada 0.0 como entrada del temporizador //Introducimos un valor de temporización de 2 segundos //Empleamos el temporizador 2 como retardo a la c. con memoria //Empleamos la entrada 0.1 como entrada de borrado //Si la entrada 0.1 cambia de 0 a 1 el temporizador 2 se borra //Leemos la salida del temporizador //Asignamos la salida del temporizador a la salida 3.1
10
Re-arranque de un Temporizador AWL S7-300/400 Instrucción: FR T Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador. Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha, es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque continúa procesándose con un RLO de 1. Registros afectados: ER Ejemplo: U FR U L SI U =
E 2.0 T 1 E 2.1 S5T#5s T 1 T 1 A 4.0
//Empleamos la entrada 2.0 como re-arranque //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1 //Empleamos la entrada 2.1 como entrada del temporizador //Introducimos un valor de temporización de 5 segundos //Empleamos el temporizador 1 como impulso //Leemos la salida del temporizador //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 rearranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto. Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay un RLO 0 en la entrada del temporizador. 11
Re-arranque de un Temporizador AWL S7-300/400 Instrucción: FR T Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador. Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha, es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque continúa procesándose con un RLO de 1. Registros afectados: ER Ejemplo: U FR U L SI U =
E 2.0 T 1 E 2.1 S5T#5s T 1 T 1 A 4.0
//Empleamos la entrada 2.0 como re-arranque //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1 //Empleamos la entrada 2.1 como entrada del temporizador //Introducimos un valor de temporización de 5 segundos //Empleamos el temporizador 1 como impulso //Leemos la salida del temporizador //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 rearranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto. Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay un RLO 0 en la entrada del temporizador. 12
Lectura de un valor de Temporización AWL S7-300/400
Instrucciones: L T y LC T Con la instrucción "L T" introducimos en el ACU 1 (parte baja) el valor del temporizador especificado en binario. El valor en ACU 1 puede ser introducido en otro temporizador. Con la instrucción "LC T" introducimos en el ACU 1 (parte baja) el valor del temporizador especificado en BCD. En esta codificación no es posible pasar el valor de ACU 1 a otro temporizador. Registros afectados: ACU 1, ACU 2 Ejemplos: L T 1 //introduce el valor del temporizador 1 en el ACU 1 LC T 2 //introduce el valor del temporizador 2 en el ACU 1 en BCD
13
Operaciones con Temporizadores
S7-300/400
TEMPORIZADORES “SE” Y “SI” Temporizadores sin memoria: Tenemos los temporizadores “SE” y ”SI”. Analicemos cada uno de ellos. Temporizador “SE”: Es un temporizador de retardo a la conexión. Para programar el temporizador, necesitamos cinco operaciones como mínimo. 1ª Necesitamos una condición a partir de la cual empiece a temporizar. Esta condición puede constar de una sola instrucción o de varias. 2ª Necesitamos decirle cuanto tiempo tiene que temporizar. 3ª Necesitamos decirle el modo de funcionamiento y nº de temporizador que queremos utilizar. (En cada CPU tenemos una cantidad de temporizadores) 4º Queremos que en algún momento dado, (mientras temporiza, cuando ha acabado de temporizar, etc.) 5º haga algo. Alguna de estas operaciones pueden constar de más de una instrucción.
14
Temporizadores SE y SI S7-300/400 El modo de funcionamiento es el siguiente:
Además de lo que hemos visto, en cualquier momento podemos hacer un RESET del temporizador. Para hacer un RESET necesitamos una condición. En el momento se cumpla si al temporizador le correspondía estar a 1, automáticamente se pondrá a cero aunque por su modo de funcionamiento no le corresponda.
15
Temporizadores SE y SI S7-300/400 Tenemos un semáforo con las tres luces verde, amarillo y rojo. Tenemos dos pulsadores de mando: un pulsador de marcha y un pulsador de paro.
Con el pulsador de marcha quiero que comience el ciclo. El ciclo de funcionamiento es el siguiente: 1º/ Verde durante 5 seg. 2º/ Verde + Amarillo durante 2 seg. 3º/ Rojo durante 6 seg. El ciclo es repetitivo hasta que se pulse el pulsador de paro. En ese momento se apaga todo. Siempre que le dé al pulsador de marcha quiero que empiece por el verde.
16
Temporizadores SE y SI S7-300/400 U E 0.0 S A 4.2 U A 4.2 L S5T#5S SE T 1 U T1 S A 4.1 U A 4.1 L S5T#2S SE T 2 U T2 S A 4.0 R A 4.1 R A 4.2 U A 4.0 L S5T#6S SE T 3 U T3 S A 4.2 R A 4.0 U E 0.1 R A 4.0 R A 4.1 R A 4.2 BE
//Al activar el pulsador de marcha //Encender el verde //Si se ha encendido el verde //Cuenta 5 segundos //Con el temporizador 1 //Y cuando acabes de contar //Enciende el amarillo //Si se ha encendido el amarillo //Cuenta 2 segundos //Con el temporizador 2 //Y cuando acabes de contar //Enciende el rojo //Apaga el amarillo //Y apaga el verde //Si se ha encendido el rojo //Cuenta 6 segundos //Con el temporizador 3 //Cuando acabes de contar //Enciende el verde //Y apaga el rojo //Si se activa el pulsador de paro //Apaga el rojo //Apaga el amarillo //Apaga el verde
17
Temporizadores SE y SI S7-300/400
18
Automatización de un depósito AWL S7-300/400 Se tiene un tanque de líquidos para su operación se tiene un selector de mando. Podemos seleccionar modo manual o modo automático. Si seleccionamos modo manual, lo que queremos es que mientras esté conectada, la bomba esté funcionando, y cuando desconectemos que se pare la bomba. No se quiere atender a la señalización de nivel. En modo automático el nivel se debe mantener entre los detectores de nivel. Se dispone de una protección térmica de motor con indicador luminoso en el panel de control. Segmento 1: MANUAL U E 0.0 //Si activamos en modo manual = A 4.0 //Pon en marcha la bomba = A 4.1 //Enciende la luz de marcha Segmento 2: AUTOMÁTICO U E 0.1 //Si está en automático U E 0.7 //Y está bien el relé U E 0.2 //Y está activo el nivel de abajo UN E 0.3 //Y no está activo el nivel de arriba S A 4.0 //Pon en marcha la bomba S A 4.1 //Y enciende la luz de marcha U E 0.1 //Si está en automático U E 0.7 //Y está bien el relé UN E 0.2 //Y no está activo el nivel de abajo U E 0.3 //Y se ha activado el nivel de arriba ON E 0.7 //O ha saltado el relé R A 4.O //Para la bomba R A 4.1 //Apaga la luz de marcha UN E 0.7 //Si ha saltado el relé = A 4.7 //Avísame con la luz de relé BE
19
Automatización de un depósito AWL S7-300/400 Si hacemos la prueba de este circuito veremos que no funciona correctamente. Vemos que en modo manual sí que funciona pero en modo automático no para la bomba cuando debería.
Para resolver este circuito: nos hace falta utilizar marcas auxiliares. En un mismo bloque no podemos activar la misma salida dos veces con condiciones diferentes porque se interfieren entre ellas.
Las salidas no se activan en el mismo instante en el que se lee la instrucción correspondiente. Existe un registro interno que se denomina PAA (Imagen de proceso de salida), en el que se van almacenando los valores que se tienen que transferir a las salidas cuando finalice el correspondiente ciclo de scan. ●
Cuando se lea la instrucción BE es cuando se mandarán estos valores a las salidas reales. Si hemos enviado varios valores dentro del mismo ciclo de scan, el que realmente llegará a las salidas, será el último que hemos enviado. 20
Automatización de un depósito AWL S7-300/400 Segmento 1: MANUAL U E 0.0 = M 0.0 = M 0.1
//Si está en manual //Activa la marca 0.0 //Y activa la marca 0.1
Segmento 2: AUTOMÁTICO U E 0.1 U E 0.7 U E 0.2 UN E 0.3 S M 0.2 S M 0.3 U E 0.1 U E 0.7 UN E 0.2 U E 0.3 ON E 0.7 R M 0.2 R M 0.3 UN E 0.7 = A 4.7
//Si está en automático //Y está el relé bien //Y está activo el nivel inferior //Y no está activo el nivel superior //Activa la marca 0.2 //Y activa la marca 0.3 //Si está en automático //Y está el relé bien //Y no está activo el nivel inferior //Y se ha activado el nivel superior //O ha saltado el relé //Desactiva la marca 0.2 //Y desactiva la marca 0.3 //Si no está el relé //Activa la luz de relé. 21
Automatización de un depósito AWL S7-300/400 A continuación se añaden las marcas a las salidas. U O = U O =
M M A M M A
0.0 //Si está activa la marca 0.0 0.2 //O está activa la marca 0.2 4.0 //Pon en marcha la bomba 0.1 //Si está activa la marca 0.1 0.3 //O la marca 0.3 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 R M 0.0 R M 0.1 BE
//Si ha saltado el relé //Desactiva la marca 0.0 //Y desactiva la marca 0.1
Otra posible solución sería programar el paro de la bomba por apertura del relé térmico en el último segmento. Los paros de emergencia se suelen programar al final. Ahora podemos hacer todas las objeciones que queramos y corregir sobre lo que ya tenemos hecho. 22
Automatización de un depósito AWL S7-300/400 Por ejemplo, puedo querer asegurarme que cuando se pone en marcha en modo manual no está a la vez en modo automático. Se puede suponer que por error se pueden dar las dos circunstancias a la vez y quiero evitar ese error. Se añaden las instrucciones pertinentes. U E 0.0 UN E 0.1 Ahora ya tenemos la base del programa. Podemos añadir todo lo que creamos que sea necesario o conveniente. Por ejemplo, en este caso no se ha tenido en cuenta la situación de que después de haber estado en manual o en automático,volvamos a la posición de reposo. En automático he hecho sets a ciertas marcas. Cuando volvamos a la posición de reposo esas marcas tendrán que volver a cero. De lo contrario podría darse el caso de que estando en la posición de reposo, tengamos la bomba en marcha. Para remediar esto podría añadir las siguientes instrucciones: UN UN R R
E E A A
0.0 0.1 4.0 4.1
....... 23
Control cintas transportadoras AWL S7-300/400 Funcionamiento: Es un automatismo para seleccionar cajas por su tamaño. La cinta transportadora A4.0 está activa esperando una caja. Cuando se activa el sensor E0.0 la cinta A4.1 se pone en marcha, y la cinta A4.0 se detiene. Para seleccionar la caja hay dos sensores: E0.1 y E0.2, este último también indica que la caja sale de la cinta. • Si la caja es grande se activarían los 2 sensores a la vez, por lo que la caja se desplazaría por la cinta transportadora A5.0 que funcionaría durante 5 seg. • Si la caja es pequeña nunca se activarían los dos sensores a la vez, y pasaría a la cinta para cajas pequeñas A5.1 que funcionaría 4 seg. Una vez que la caja salga de la cinta intermedia A4.1 podremos procesar otra caja activando A4.0. Las cajas van llenando dos contenedores. Como opción, se podrá poner dos contadores que cuenten las cajas grandes y pequeñas, y que cuando lleguen a 7 cajas grandes y 5 pequeñas, se detenga el proceso hasta que el operario sustituya los contenedores por otros vacíos y le dé a un pulsador de acuse de recibo.
24
Automatización de un sistemas de cintas AWL S7300/400 //Activación de las cintas UN A 4.1 = A 4.0 U E 0.0 S A 4.1
//Si no está activada la cinta intermedia //que se activa la primera cinta //Si sensor de llegada de caja a la cinta intermedia //activar la cinta intermedia
//Selección por tamaño: U E 0.1 U E 0.2 S M 0.0 U E 0.2 FN M 0.1 = M0.2
//Si se activan los dos sensores //Es que es una caja grande, lo guardo en una marca //Cuando se activa el sensor de salida de la cinta //intermedia por flanco positivo //Lo guardo en una marca
//Según el tamaño activo la cinta de salida: U M 0.2 U M 0.0 L S5T#5S SV T 1 U T1 = A 5.0 U M 0.2 UN M 0.0 L S5T#4S SV T 2 U T 2 = A 5.1 U M 0.2 R A 4.1 R M 0.0
//Cuando sale la caja //y es grande
//activo la cinta para grandes durante 5 seg. //Cuando sale la caja //y no es grande
//activo la cinta para pequeñas durante 4 seg //Cuando sale la caja //Desactivo la cinta intermedia //Reseteo la marca que me indica el tamaño
25
Operaciones de Temporización Automatización Industrial
Índice TEMA – Operaciones de Temporización 1. – Operaciones de Tiempo 2. – Orden de las Instrucciones 3. – Cargar una Temporización 4. – Salida de una Temporización 5. – Elección del Temporizador Apropiado 6. – Elección del Temporizador Apropiado 7. – Programación de Temporizadores 8. – Ejemplos de Programación de Temporizadores 8.1 – Generador de Impulsos 8.2 – Generador de Onda Cuadrada Simétrica 8.3 – Generador de Onda Cuadrada Asimétrica 8.4 – Arranque Estrella/Triángulo
Introducción • Las operaciones relacionadas con temporizadores permiten medir secuencias de tiempo, como, esperas, periodo de tiempo de una medida o generar impulsos • En la memoria para cada temporizador hay reservados 16 bits • Tiene acceso a la zona de temporizadores: • las operaciones de temporización • actualización por reloj (S.O.) de las palabras de temporización • Se contemplan 5 tipos de temporizadores: • impulso • impulso prolongado • retraso a la conexión • retraso a la conexión memorizado • retraso a la desconexión
Operaciones de Tiempo Operación SP
SE
SD
SS
SF
R
Identificador T
Operando
Significado 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”. 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”. 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. 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”. 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. 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. Parámetro AG S7-300 0 ... 127
Tipos de Temporizadores Impulso Arrancar
A I 0.0 L S5T#2S SP T 1
Poner a 0 Salida Q
Impulso Prolongado
T
T
Arrancar
A I 0.1 L S5T#2S SE T 2
Poner a 0 Salida Q
Retardo a la Conexión
T
T
T
Arrancar
A I 0.2 L S5T#2S SD T 3
Poner a 0 T
Salida Q
Retardo a la Conexión Memorizado
T
Arrancar Poner a 0
A I 0.3 L S5T#2S SS T 4
Retardo a la Desconexión
T
T
Salida Q
T
Arrancar
A I 0.4 L S5T#2S SF T 5
Poner a 0 Salida Q
T
T
Tipos de Temporizadores Señal de entrada Impulso (SP)
t
Impulso prolongado (SE)
t
Retraso a la conexión (SD)
t
Retraso a la conexión memorizado (SS)
t
Retraso a la desconexión (SF)
t
Elección del Temporizador Apropiado
Orden de las Instrucciones ARRANCAR A I 0.0 L S5T#2S SD T 0 PONER A CERO A R
I T
0.1 0
T0 S_ODT BI
I 0.0
S
S5T#2S
TV
I 0.1
R
DBW 6
BCD
QW 6
Q
Q 4.0
CONSULTAS DIGITALES L T LC T
T DBW T QW
0 6 0 6
CONSULTAS BINARIAS A =
T Q
0 4.0
Arrancar I 0.0 Poner a cero I 0.1 Corre el tiempo Estado en Q Valor de temporización BI, BCD
<< T >>
Formato de la Palabra de Tiempo 15
12 11
Irrelevante Base de tiempo
8
7
4 3
101
102
0
100
Valor de temporización en BCD (0 a 999)
• Para fijar el valor de tiempo hay que respetar las siguientes reglas sintácticas - S5T#aHbbMccSdddMS siendo: a=horas, bb=minutos, cc=segundos y ddd=milisegundos - La base de tiempos se selecciona automáticamente y el valor del temporizador se redondea al próximo número inferior con esa base de tiempo
Código binario Base de tiempo 00 10 ms 01 100 ms 10 1s 11
10 s
Resolución 0.01segundos 0.1segundos 1 segundo
Rango de tiempo 10 Ms a 9S 990MS 100 MS a 1M 39S 900MS 1S a 16M 39S
10 segundos
10S a 2H 46M 30S
Especificación del Tiempo (I) Especificación de Tiempo • El valor de temporización se debe cargar en la parte baja del ACU 1, para desde allí transferirlo al temporizador mediante el set que determine el modo de temporización adecuado. • El tiempo va decrementando hasta ser igual a 0. • El valor de temporización puede cargarse en la palabra baja del ACU 1 en formato binario, hexadecimal o BCD. • Se debe elegir una base de tiempos y un valor dentro de dicha base, con lo que podemos realizar temporizaciones desde 0 a 9990 segundos (0H00M00S00MS a 2H46M30S00MS).
Especificación del Tiempo (II) Especificación del Tiempo como una Constante Formato: L W#16#abcd • a = base de tiempos • bcd = valor de temporización en formato BCD Ejemplo: L W#16#2010; //esto introduce un valor de 10 segundos en ACU 1 //(2 base de 1s, 10 los segundos que deseamos)
Formato “S5TIME#” o “S5T#”: L S5T#aHbbMccSddMS •a = horas, bb= minutos, cc = segundos, dd = milisegundos En este caso la base de tiempos se selecciona de forma automática, tomándose la de valor más bajo posible. Debido a esto los valores de resolución demasiado alta se redondean por defecto, alcanzando el rango pero no la resolución deseada. Ejemplos:
L S5T#00H02M23S00MS
//esto introduce un valor de temporización de //2 minutos y 23 segundos en el ACU 1 //Duración 10 segundos //Duración 1 minuto + 10 milisegundos
L S5TIME#10s; L S5T#1m10ms;
Especificación del tiempo como una Variable
L T ....... L
S5T#10m; //Duración 10 minutos MW 20; //Salvar la duración MW 20; //Cargar el tiempo
Carga de una Temporización Preselección de Tiempo
S_ODT S BI
- Constante S5TIME - Palabra de Datos DBW - Palabra de Entrada IW - Palabra de Salida QW - Palabra de Marca MW - ...
DBW 10
TV R
Base de Tiempos
BCD Q
- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1 126
IW 126
127
- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
333.1 Configuración de la Palabra para la Preselección del Tiempo (333 x 0,1s)
- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
Bits de Estado de los Temporizadores (en preselección sin significado)
Valor de Temporización (0..999 BCD) Base de Tiempos
B ase B in a rio F a c to r
0 00 0 ,0 1 s
1 01 0 ,1 s
2 10 1s
3 11 10s
Lectura de un Temporizador
Tiempo actual en T1 L T1
LC T1 ACU 1
Temporización en Binario
Base de Temporización de tres tiempos dígitos en BCD
Posiciones de bits ocupadas con “0”
Lectura de una Temporización Palabra de Temporización Dual
Palabra de Temporización Decimal (BCD)
T 10
T 10
S_ODT S BI
DBW 1
TV
QW 3
R
L T L T L T L T
MW 2
BCD
PW 4
Q
T 10 DBW 1 T 10 MW 2 T 10 QW 3 T 10 PW 4
10 9
DBW 5
TV
QW 7
R
13 12
10 9
0 0 0 0 0 0
T 10 DBW 5 T 10 MW 6 T 10 QW 7 T 10 PW 8
Valor de Temporización 10 9
0
0
LC T 10
L T 10 15
PW 8
Q
15
LC T LC T LC T LC T
MW 6
BCD
Base de Tiempo
Valor de Temporización 15
S_ODT S BI
Dual
BCD
0
ACU 1
15
13 12 11
8 7
4 3
0
0 0 102 101 100 Base de Valor de Temporización Tiempo
ACU 1
Temporizador en modo Impulso Cuadro FBD
Parámetro Tipo de datos
Area de memoria
Descripción
No.
TIMER
T
S
BOOL
I, Q, M, D, L, T, C I, Q, M, D, L o constante I, Q, M, D, L, T, C I, Q, M, D, L I, Q, M, D, L I, Q, M, D, L
Número de identificación del temporizador. El área depende de la CPU utilizada. Entrada de arranque
TV
S5TIME
R
BOOL
BI BCD Q
WORD WORD BOOL
Valor de temporización preseleccionado (margen: 0 – 9999) Entrada de desactivación Tiempo restante (formato de entero) Tiempo restante (formato BCD) Estado del temporizador
Cronograma
Esquema Eléctrico
Estados de señal I 0.0
1
I 0.0
0 1
Q 4.5
0
T1 Q 4.5
Tiempo en s 5s
T1: Relé de tiempo con contacto de paso al conectar
STL A I 0.0 L S5T#5S SP T 1 NOP 0 NOP 0 NOP 0 A T 1 = Q 4.5
FBD
LAD
Temporizador en modo Impulso Prolongado Cuadro FBD
Parámetro Tipo de datos
Area de memoria
Descripción
No.
TIMER
T
S
BOOL
TV
S5TIME
R
BOOL
BI BCD Q
WORD WORD BOOL
I, Q, M, D, L, T, C I, Q, M, D, L o constante I, Q, M, D, L, T, C I, Q, M, D, L I, Q, M, D, L I, Q, M, D, L
Número de identificación del temporizador. El área depende de la CPU utilizada. Entrada de arranque Valor de temporización preseleccionado (margen: 0 – 9999) Entrada de desactivación Tiempo restante (formato de entero) Tiempo restante (formato BCD) Estado del temporizador
Cronograma
Esquema Eléctrico
Estados de señal I 0.0
1
I 0.0
0
T2
1
Q 4.5
0
Q 4.5
Tiempo t
A I L IW SE T NOP 0 NOP 0 NOP 0 U T = Q
STL 0.0 16 2
2 4.5
T2: Relé de tiempo con formación de paso al conectar
t
FBD
LAD
Temporizador en modo Retraso a la Conexión Cuadro FBD
Parámetro Tipo de datos
Area de memoria
Descripción
No.
TIMER
T
S
BOOL
TV
S5TIME
R
BOOL
BI BCD Q
WORD WORD BOOL
I, Q, M, D, L, T, C I, Q, M, D, L o constante I, Q, M, D, L, T, C I, Q, M, D, L I, Q, M, D, L I, Q, M, D, L
Número de identificación del temporizador. El área depende de la CPU utilizada. Entrada de arranque Valor de temporización preseleccionado (margen: 0 – 9999) Entrada de desactivación Tiempo restante (formato de entero) Tiempo restante (formato BCD) Estado del temporizador
Cronograma
Esquema Eléctrico
Estados de señal 1
I 0.0
I 0.0
0 1
Q 4.5
0
T3
Tiempo en s 9s
9s
Q 4.5 4
STL A I 0.0 L S5T#9S SD T 3 NOP 0 NOP 0 NOP 0 A T 3 = Q 4.5
FBD
LAD
Temporizador en modo Retraso a la Conexión Memorizado Cuadro FBD
Parámetro Tipo de datos
Area de memoria
Descripción
No.
TIMER
T
S
BOOL
TV
S5TIME
R
BOOL
BI BCD Q
WORD WORD BOOL
I, Q, M, D, L, T, C I, Q, M, D, L o constante I, Q, M, D, L, T, C I, Q, M, D, L I, Q, M, D, L I, Q, M, D, L
Número de identificación del temporizador. El área depende de la CPU utilizada. Entrada de arranque Valor de temporización preseleccionado (margen: 0 – 9999) Entrada de desactivación Tiempo restante (formato de entero) Tiempo restante (formato BCD) Estado del temporizador Cronograma
Esquema Eléctrico 2
1
I 0.0
0 1
I 0.1
I 0.1
0 1
Q 4.5
0
T iem po en s t
STL 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
t
H 1
I 0.0
H 1
Q 4.5 4 H 1: R elé auxiliar
FBD
H 1
T 4
LAD
Temporizador en modo Retraso a la Desconexión Cuadro FBD
Parámetro Tipo de datos
Area de memoria
Descripción
No.
TIMER
T
S
BOOL
TV
S5TIME
R
BOOL
BI BCD Q
WORD WORD BOOL
I, Q, M, D, L, T, C I, Q, M, D, L o constante I, Q, M, D, L, T, C I, Q, M, D, L I, Q, M, D, L I, Q, M, D, L
Número de identificación del temporizador. El área depende de la CPU utilizada. Entrada de arranque Valor de temporización preseleccionado (margen: 0 – 9999) Entrada de desactivación Tiempo restante (formato de entero) Tiempo restante (formato BCD) Estado del temporizador
Cronograma
Esquema Eléctrico
1
I 0.0
0 1
I 0.0
Q 4.5
0
T5
Tiempo en s t
t
Q 4.5 4
A I L MW SF T NOP 0 NOP 0 NOP 0 A T = Q
STL 0.0 14 5
FBD
5 32.5
Forma de Cargar un Temporizador Representación Esquemática Programa
Señal del Temporizador 17 0
1
L S5T#1S SP T 17
1s - n * tp A T 17 = Q 4.5
n: Cantidad de ejecuciones del programa tp: Tiempo de ejecución del programa
Explicación 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 se mantiene activada. Este cambio sólo se considera durante la siguiente ejecución del programa.
LAD
Marcas de Ciclo (I) 9Las marcas de ciclo cambian su estado binario periódicamente 9La relación impulso-pausa es 1:1 9La frecuencia está ajustada y es fija 9Hay definidas 8 frecuencias fijas que pueden almacenarse en un byte de marcas 9El byte de marcas se parametriza en la configuración de la CPU
7 6 5 4 3 2 1 0 0.1 seg. (10 Hz) 0.2 seg. (5 Hz) – parpadeo 0.4 seg. (2.5 Hz) – intermitencia rápida 0.5 seg. (2 Hz) 0.8 seg. (1.25 Hz) – intermitencia 1.0 seg. (1 Hz) 1.6 seg. (0.625 Hz) – intermitencia lenta 2.0 seg. (0.5 Hz)
Marcas de Ciclo (II) Configuración en hardware de la CPU
Ejemplo – Generador de Impulsos Cronograma 1
I 0.0
0 1
Ejemplo Se desea que la marca 2.0 funcione como un generador de impulsos de periodo 2 segundos
M 2.0
0
Tiempo <
2s
> <
2s
> <
2s
STL 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
>
FBD
LAD
Ejemplo – Generador de Onda Cuadrada Simétrica 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.
Cronograma 1
I 0.0
0 1 0 1 0
<
2s
><
2s
> <
2s
>
M 2.0 Q 4.0 Tiempo
A AN L SD NOP NOP NOP A = *** A AN S A A R NOP *** AN A S AN AN R NOP
STL I 0.0 M 2.0 S5T#2S T 7 0 0 0 T 7 M 2.0 M M Q M M Q 0
2.0 1.0 4.0 2.0 1.0 4.0
M Q M M Q M 0
2.0 4.0 1.0 2.0 4.0 1.0
FBD
Ejemplo – Generador de Onda Cuadrada Asimétrica Cronograma 1
I 0.0
0 1
Tiempo de Marcha T1
0 1
Ejemplo 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”.
Salida T1
0 1
Tiempo de Marcha T2
0 1
Salida T2
0 1
Q 4.0
0 Tiempo
STL
FBD
A( A I 0.0 AN T 2 L S5T#3S SD T 1 NOP 0 NOP 0 NOP 0 A T 1 ) = Q 4.0 A Q 4.0 L S5T#5S SD T 2 NOP 0 NOP 0 NOP 0 NOP 0
Ejemplo – Arranque Estrella/Triángulo I STL Segmento 1 A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0
I 0.0
I 0.1
L Q 4.0
FBD Línea I 0.0
&
I 0.1
>=1
L
Q 4.0
∆
Y
T
T
Y Q 4.1
T
∆ Q 4.2
∆
Segmento 2 A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0
Q 4.0
Temporizador Q 4.0
T1
&
Q 4.2
S_ODT S BI
2 S5T# 3S
BCD
R
Segmento 3 A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1
Q
Estrella Q 4.0 Q 4.2
&
T1
Segmento 4 A Q 4.0 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2
TV
Q 4.1
Triángulo Q 4.0 Q 4.1
&
&
T1
>=1 Q 4.2
Q 4.2
Ejemplo – Arranque Estrella/Triángulo II ST L Segm ento 1 A I 0 .0 A( O I 0 .1 O Q 4 .0 ) = Q 4 .0
FBD
STL Segmento 1 A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0
Línea I 0 .0
&
I 0 .1
>= 1 Q 4 .0
Segm ento 2 A Q 4 .0 A N Q 4 .2 L S5 T# 3s SD T 1 N OP 0 N OP 0 N OP 0 N OP 0
I 0.0
>=1
Segmento 2 A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0
T 1
&
Q 4.2
S
2 S 5T # 3S
S _O D T BI
TV
BC D
R
Q
Estrella Q 4 .0
T1
Q 4 .1
T emporizador de Retardo Q 4.0
Q 4.0
S
2 S 5T # 10 0M S Q 4.2
Segmento 4 A Q 4.0 A I 0.3 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2
BC D
R
2 S5T# 3S
TV
Q
T riángulo Q 4.0
BCD
R
Q
Estrella Q 4.0 Q 4.2
& Q 4.1
Triángulo Q 4.0 I 0.3 Q 4.1
&
&
T1
>=1
Q 4.1
&
S_ODT S BI
T1
S _O D T BI
TV
T1
&
Q 4.2
T 2
&
Q 4.1
Temporizador
Segmento 3 A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1
&
Q 4 .2
Q 4.0
Q 4.0
T emporizador
Segm ento 4 A Q 4 .0 A N Q 4 .2 L S 5T #1 00 ms SD T 2 A Q 4 .2 R T 2 N OP 0 N OP 0 N OP 0
&
I 0.1
Q 4 .0
Q 4.0
Segm ento 3 A Q 4 .0 A N Q 4 .2 AN T 1 = Q 4 .1
Segm ento 5 A Q 4 .0 A( A N Q 4 .1 A T 2 O Q 4 .2 ) = Q 4 .2
FBD Línea
Q 4.2
Q 4.2
&
T2
>=1 Q 4.2
Q 4.2
Funciones de Tiempo en IEC Las funciones de tiempo están integradas en FBs en la CPU. Están disponibles: SFB 3 TP Generador de pulsos SFB 4 TON On delay SFB 5 TOF Off delay
Nombre IN PT Q ET
Declaración Tipo dato INPUT BOOL INPUT TIME INPUT BOOL INPUT TIME
Descripción Entrada de arranque Longitud del pulso o duración de espera Estado del temporizador Tiempo pasado
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos 3. PROGRAMACIÓN ESTRUCTURADA
PLC’s Curso 2009/10
Página 1
Simbólicos
• Son nombres simbólicos que le podemos dar a entradas, salidas, marcas, temporizadores, contadores y módulos. • En el programa podemos usar esos nombres en vez de las direcciones absolutas. • Para cada símbolo debemos rellenar: nombre simbólico, dirección absoluta a la que sustituye, tipo de dato que es (se rellena sólo), y un comentario (opcional) PLC’s Curso 2009/10
Página 2
Simbólicos
• Hay dos maneras de crear tabla de símbolos: – Desde el administrador Simatic (Programa S7): Fuentes Bloques Símbolos – Creando “Tabla de Símbolos” desde OB1: “herramientas” --> tabla de símbolo. Esto llama al editor de símbolos. Se introducen símbolos y se cierra, “Tabla” --> “cerrar” y eso la guarda.
• Además para insertar/editar símbolos en tabla: – Si estamos en el editor de AWL: “insertar” --> “símbolo” --> “Nuevo”. Se meten las entradas adecuadas y se acepta
• En “Ver” decidimos si se quiere ver: – direcciones absolutas o símbolos.
PLC’s Curso 2009/10
Página 3
Flancos • Permiten averiguar en qué ciclo ha habido – un flanco positivo FP (paso de “0” a “1” del RLO) – o un flanco negativo FN (paso de “1” a “0” del RLO) de una señal.
• Se necesita una marca auxiliar que almacena el estado anterior, para poder compararlos. Puede usarse cualquier marca. • Ej. Flanco positivo
E 124.0
U E 124.0 FP M1.0 = A 124.1
M 1.0 RLO
• El RLO sólo estará a 1 un tiempo de ciclo: en el que cambie. PLC’s Curso 2009/10
Página 4
Temporizadores • Un temporizador es un contador de tiempos. La CPU 314IFM tiene 128 temporizadores • Por cada temporizador se reservan 16 bits y tiene un rango de valores de 10ms a 9990s (2h 46m 30s) • Un temporizador realiza dos funciones – Contar tiempo – Poner una variable de salida asociada a nivel alto
• Los tipos de temporizadores se diferencian entre sí en: – –
cuándo comienzan a contar el tiempo y cuándo activan la salida asociada. PLC’s
Curso 2009/10
Página 5
Temporizadores
• Tipos de temporizadores – SI - Temporizador de impulso El tiempo máximo que la señal de salida permanece a 1 corresponde al valor de temporización To programado. La señal de salida permanece a 1 durante un tiempo inferior si la señal de entrada cambia a 0.
– SV - Temporizador de impulso prolongado La señal de salida permanece a 1 durante el tiempo programado, independientemente del tiempo que la señal de entrada esté a 1.
PLC’s Curso 2009/10
Página 6
Temporizadores • Resumen tipos temporizadores
PLC’s Curso 2009/10
Página 7
Temporizadores
• Tipos de temporizadores – SE - Temporizador con retardo a la conexión La señal de salida es 1 solamente si ha finalizado el tiempo programado y (AND) la señal de entrada sigue siendo 1.
– SS - Temporizador con retardo a la conexión con memoria La señal de salida cambia de 0 a 1 solamente si ha finalizado el tiempo programado, independientemente del tiempo en que la señal de entrada esté a 1. • ¿cuándo termina la temporización?
– SA - Temporizador con retardo a la desconexión La señal de salida es 1 el tiempo que la señal de entrada es 1 y, a partir de ahí, el tiempo marcado por el temporizador. El temporizador arranca cuando la señal de entrada cambia de 1 a 0. PLC’s Curso 2009/10
Página 8
Temporizadores • Resumen tipos temporizadores
PLC’s Curso 2009/10
Página 9
Temporizadores • Programación de un temporizador (T0, T1, ...) – Carga el tiempo de inicialización en un acumulador interno con la operación load (L) • Formato:
L S5T#aH_bM_cS_dMS Ejemplo:
L
S5T#10M_30S
– Generación de un RLO que condicionará la activación del temporizador – Activación del temporizador • Formato:
tipo nº timer
Si hay un flanco en el RLO de entrada respecto del ciclo anterior. El temporizador se inicializa con el tiempo que se había cargado en el acumulador interno. • SI T0 - SV T0 - SE T0 - SS T0 - SA T0
PLC’s Curso 2009/10
Página 10
Temporizadores • Inicialización: U E124.0 L S5T#10S SI T0
L S5T#10S U E124.0 SI T0
• Reseteo de un temporizador • Ejemplo: U E124.1 R T0
• Consulta de la salida • Ejemplo: U T0 = A124.0
PLC’s Curso 2009/10
Página 11
Temporizadores • Temporizador de Impulso (SI) – El temporizador • arranca con el flanco de subida del RLO de entrada de la sentencia SI • se detiene al finalizar el tiempo de temporización – La salida asociada • se pone a ‘1’ al arrancar el temporizador • se pone a ‘0’ al terminar la temporización o al ponerse a cero el RLO de entrada E X.x RLO
AT0
T
T
T
PLC’s Curso 2009/10
T
T Página 12
Temporizadores • Temporizador de Impulso Prolongado (SV) – El temporizador • arranca con el flanco de subida del RLO de entrada de la sentencia SV • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ al arrancar el temporizador (flanco de subida del RLO de entrada de SV) • se pone a ‘0’ al terminar la temporización
E X.x RLO
AT0
T
T
T
T
PLC’s Curso 2009/10
Página 13
Temporizadores • Temporizador de Retardo a la Conexión (SE) – El temporizador • arranca con el flanco de subida del RLO de entrada de la sentencia SE • se detiene al finalizar el tiempo de temporización o con un cero en el RLO de entrada
– La salida asociada • se pone a ‘1’ al terminar el temporizador • se pone a ‘0’ al cuando el RLO de entrada de SE pasa a cero
E X.x RLO
AT0
T
T
T
T
T
PLC’s Curso 2009/10
Página 14
Temporizadores • Temporizador de Retardo a la Desconexión (SA) – El temporizador • arranca con el flanco de bajada del RLO de entrada de la sentencia SA • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ con el flanco de subida del RLO de entrada de SA • se pone a ‘0’ al terminar la temporización E X.x RLO
AT0
T
T
T
T
PLC’s Curso 2009/10
Página 15
Temporizadores • Temporizador de Retardo a la Conexión Memorizado (SS) – El temporizador • arranca con el flanco de subida del RLO de entrada de la sentencia SS • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ al terminar la temporización • se pone a ‘0’ sólo mediante una instrucción de reset E X.x RLO Reset
AT0 T
T
T
T
PLC’s Curso 2009/10
Página 16
Temporizadores
• Otras consideraciones sobre los temporizadores • Hay que ser muy cuidadosos si utilizamos el mismo temporizador en dos sitios distintos del código, ya que podemos estarlo arrancando o no en los distintos puntos y se producirá un funcionamiento erróneo. • La variable que arranca el temporizador debe producir un flanco positivo. Para que ese flanco positivo se produzca, el programa debe pasar por ese punto con valor 0 y posteriormente con valor 1, o no verá el flanco. Esto es especialmente crítico en el caso de utilizar temporizadores con elementos que se verán posteriormente como saltos o bloques (FCs/FBs).
PLC’s Curso 2009/10
Página 17
Temporizadores • Comprobar el funcionamiento de los diferentes tipos de temporizadores U E 124.0 L S5T#10S SI T0
Condición de arranque del temporizador
U E 124.1 R T0
Condición de reseteo del temporizador
U T0 = A124.0
Presentación de la señal asociada al temporizador
• Probar otros ejemplos con SV
SE
SA
SS PLC’s
Curso 2009/10
Página 18
EJERCICIO (Entregable 2)
Se dispone de un semáforo, el cual en condiciones normales se encuentra del modo siguiente: A124.0
- Verde vehículos - Rojo Peatones.
A124.1 A124.2 A125.0 A125.1
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 ‘‘.
E124.0 Press butto n
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.
PLC’s Curso 2009/10
Página 19
Tipos de temporizadores IEC Los autómatas S7-1200 han incorporado en su biblioteca de programación los temporizadores basados en software que dicta la norma IEC 1131-3:
TP - Temporizador de impulsos. TON - Temporizador a la conexión. TONR -Temporizador a la conexión con memoria. TOF - Temporizador a al desconexión.
Si eres un programador procedente del entorno de los S7-200, observarás que hay un cambio radical en la forma que se utilizan dichos temporizadores. Si estás habituado a la programación de los temporizadores hardware de los S7-300, también tendrás que adaptarte al nuevo concepto ya que comprobarás que son bastante diferentes,. Sin embargo, si alguna vez has utilizado los temporizadores software (Temporizadores IEC) de la librería Standard Library>Systems Funciton Blocks del STEP 7, no tendrá ninguna dificultad con los temporizadores de los S7-1200, ya que son prácticamente idénticos. El siguiente tutorial se basa en el temporizador TON, pero puede ser utilizado de forma similar con los demás tipos.
Uso de los temporizadores Los temporizadores del S7-1200, al estar basados en software, no requieren direccionamiento a una zona de memoria determinada del hardware y por tanto, no se identifican con un número (T1, T37, etc) como ocurre, por ejemplo, en los S7-200. Así, cada vez que se inserta un temporizador en la zona de programación, éste pide que se asigne un bloque de datos (DB) a instancia. Dicho DB debe identificarse mediante un nombre simbólico reconocible y que sea fácilmente distinguible de otros que se puedan utilizar en el mismo programa.
En el campo PT del temporizador debe escribirse el tiempo de preselección en formato TIME. Por ejemplo: T#3S (tres segundos) ó T#1M10S (un minuto 10 segundos) ó T#100Ms (cien milisegundos).
Ejemplo 1: Activación directa de una salida una vez transcurrido un tiempo. Un uso inmediato de los temporizadores, consiste en utilizar la salida Q, de tipo binario, para activar de forma directa, una vez que se ha superado el tiempo de preselección PT, elementos de programación en formato de bit como salidas, marcas o cualquier otra combinación lógica.
Ejemplo 2: Asociación de contactos a un temporizador. Al no ser temporizadores hardware y no existir un direccionamiento directo a una zona de memoria específica para ellos, ya no es posible asignar, como se hacía en otros PLC's, contactos a los temporizadores mediante su identificador: T1, T2, T3, etc. No obstante, para hacer algo similar se puede recurrir a diferentes técnicas.
Opción 1: Uso de una marca asociada al temporizador.
Cuando la marca es "verdadera", los contactos asociados invierten su valor lógico, activando o desactivando los segmentos en los que se encuentran programados.
Se puede decir que esta es una solución muy "eléctrica" similar a la utilizada en los automatismos cableados con relés.
Opción 2: Uso de la variable Q del DB a instancia asociado al temporizador.
En este caso no es necesario asignar ninguna bobina a la salida Q del temporizador. Sin embargo, los contactos asociados deben leer el valor de dicha salida directamente del DB a instancia. Para ello cada contacto debe tener la siguiente sintaxis: "Nombre del DB".Q (en nuestro ejemplo "Temp_1".Q).
Ejemplo 3: Uso de un solo temporizador para acciones a diferentes valores de tiempo. Lo visto anteriormente requiere usar un temporizador por cada conmutación temporizada que se desee realizar. Es decir, si se desea activar una salida a los 5 segundos y otra a los 10 segundos, es necesario utilizar dos temporizadores independientes configurados, cada uno de ellos, con sus respectivos tiempos de preselección. Sin embargo, si se lee el valor de la salida ET del temporizador a a través de una variable o a través de DB a instancia, es posible realizar acciones a diferentes valores de tiempo de un mismo temporizador.
Opción 1: Comparar el valor de una variable asignada a la salida ET del temporizador.
La variable debe tener el formato de doble entero (DInt) y debe escribirse en la salida ET del temporizador. El tiempo se almacena en ella en formato de milisegundos. Por tanto, las operaciones de comparación deben hacerse teniendo esto en cuenta. En el siguiente ejemplo se muestra como la salida Q0.6 se activa si el tiempo de temporizador es mayor o igual a 3 segundos (3000ms) y la Q0.7 lo hace si el tiempo es superior o igual a 8 segundos (8000ms).
Opción 2: Comparar el valor de la salida ET del temporizador.
De igual forma que para la salida Q del del DB a instancia, es posible leer la salida ET (que tiene formato DInt) y operar con ella en las comparaciones sin necesidad de crear ninguna variable intermedia.
En las comparaciones se puede utilizar una constate numérica en ms o directamente emplear el dato en formato TIME:
Tema 6 Ejemplo Ejemplo Programación Estructurada
Div. Div. Ingeniería de Sistemas Sistemas yy Automática Automática
Programación estructurada
1
FB
Programación estructurada
2
FB
Programación estructurada
3
FC
Programación estructurada
4
LLAMADA DESDE OB1
Programación estructurada
5
Mutiinstancia MULTIINSTANCIA Para ello se tiene que crear un nuevo FB de orden superior (en nuestro ejemplo, el FB10) y llamar desde el mismo al FB1, que ha permanecido invariable, como "instancia local". En cada llamada, el FB1 subordinado deposita sus datos en el bloque de datos DB10 del FB10 de orden superior, con lo cual no se tienen que asignar más DBs al FB1. Todos los FBs acceden a un único bloque de datos (aquí, el DB10).
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. Programación estructurada
6
FB10
Programación estructurada
7
DB10
Programación estructurada
8
OB1
Programación estructurada
9
Tecnología en Automatización y Accionamientos -SCE
Manual de formación para soluciones generales en automatización Totally Integrated Automation (T I A )
MÓDULO B4 Bloques de datos
T I A Manual de Formación Edición: 02/2002
Página 1 de 18
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Este documento fue suministrado por SIEMENS Siemens A&D SCE (Tecnología en Automatización y Accionamientos, Siemens A&D, coopera con la Educación) para formación. Siemens no hace ningún tipo de garantía con respecto a su contenido. El préstamo o copia de este documento, incluyendo el uso e informe de su contenido, sólo se permite dentro de los centros de formación. En caso de excepciones se requiere el permiso por escrito de Siemens A&D SCE (Mr. Knust: E-Mail: [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.
T I A Manual de Formación Edición: 02/2002
Página 2 de 18
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
PÁGINA: 1.
Introducción..................................................................................................
4
2.
Notas sobre los Bloques de Datos.................................................................
6
3.
Generando Bloques de Datos.......................................................................
7
Los símbolos siguientes acceden a los módulos especificados:
Información
Programación
Ejercicio Ejemplo
Notas
T I A Manual de Formación Edición: 02/2002
Página 3 de 18
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
1.
INTRODUCCIÓN El módulo B4 pertenece al contenido de las Funciones Adicionales de Programación STEP 7. Programación Básica De STEP 7 2 - 3 días Módulos A
Funciones Adicionales de Programación STEP 7 2- 3 días Módulos B
Sistemas de Bus de Campo Industrial 2- 3 días Módulos D
Programación Secuencial 2- 3 días Módulos C
Visualización de Procesos 2- 3 días Módulos F
Comunicación IT con SIMATIC S7 1- 2 días Módulo E
Finalidad del Aprendizaje: En este módulo, el lector aprenderá sobre como utilizar los Bloques de Datos para almacenar información. • • •
Generando Bloques de Datos Specificando la estructura de un Bloque de Datos Accediendo a un elemento de un DB en un programa STEP 7
Requirements: Requisitos: Para el correcto aprovechamiento de este módulo, se requieren los siguientes conocimientos: • • •
Conocimientos de uso de Windows 95/98/2000/ME/NT4.0 Programación Básica de PLC con STEP 7 ( Módulo A3 - ‘Puesta en Marcha’ programando PLC con STEP 7) Conocimientos Básicos de programación estructurada (Anexo I – Programación Básica de PLC – Programando con un SIMATIC S7-300) Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 4 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Hardware y software Necesarios 1
2 3 4 .
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 Software STEP 7 V 5.x Interfase MPI para PC (p.e. PC- Adapter) PLC SIMATIC S7-300 con al menos un módulo de entradas/salidas Ejemplo de configuración: Fuente de Alimentación: PS 307 2A CPU: CPU 314 Entradas Digitales: DI 16x DC24V Salidas Digitales: DO 16x DC24V / 0.5 A -
2 STEP 7
1 PC
3 PC Adapter
4 SIMATIC S7-300
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 5 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
2.
NOTAS SOBRE LOS BLOQUES DE DATOS Los Bloques de Datos (DBs) pueden ser utilizados en el programa para salvar información en la CPU. Tienen una capacidad de memoria de hasta 8 KBytes ( 8192 Bytes ). Existen dos tipos de Bloques de Datos. DBs Globales , en los cuales todos los OBs, FBs y FCs pueden guardar o leer datos y DBs de Instancia, los cuales se encuentran asignados a un FB en particular. En los DBs, se pueden almacenar diferentes tipos de datos (p.e. BOOL o WORD ) de manera aleatoria. La estructura de un DB se genera a través de la herramienta Editor KOP/ AWL//FUP: Programar Bloques de STEP7 . En la estructura del programa STEP 7, los bloques de datos se encuentran de la siguiente manera:
OB 1 Call FB1, DB10
FB 1
DB 10
L DB11.DBW0
DB 11 DB Global Para todos los FBs FCs OBs
DB de Instancia Solo datos locales al FB1 BE
UC FC2
Indice
T I A Manual de Formación Edición: 02/2002
OB = Bloque de Organización FB = Bloque de Función FC = Función DB = Bloque de Datos
Notas
Página 6 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
3.
GENERANDO BLOQUES DE DATOS
Los Bloques de Datos son generados y abiertos como cualquier otro tipo de bloque en la herramienta Editor KOP/ AWL//FUP: Programar Bloques. Sirven para almacenar datos e información de estados. En el párrafo siguiente, se describe a través de un ejemplo la utilización de un bloque de datos global: Por esto, los valores se seleccionarán con los interruptores 'S0' a 'S7' y visualizados en un módulo de ‘Display’ de salidas. La representación numérica del valor a almacenar se representa con estos interruptores, donde el interruptor S7 tendrá el mayor peso del valor y el interruptor S1 el menor peso. El ejemplo se corresponde con las direcciones siguientes: Entradas: Interruptor Interruptor Interruptor Interruptor Interruptor Interruptor Interruptor Interruptor
S0 S1 S2 S3 S4 S5 S6 S7
= = = = = = = =
E E E E E E E E
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
Salidas: Display = AW4
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 7 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Para poder generar este ejemplo del programa, deben de los seguirse los siguientes pasos (Por eso el programa se distribuye con la creación de la configuración del hardware): 1. Llamar al Administrador SIMATIC con un doble click ( → Administrador SIMATIC)
Administrador SIMATIC.lnk
2.
Crear un proyecto nuevo ( → Archivo → Nuevo)
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 8 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
3.
En el campo Nombre, asignamos el nombre del proyecto Proyecto_Prueba_DB. (→ ’Proyecto_Prueba_DB’ → OK)
4.
Insertar un nuevo Programa S7 ( → Insertar → Programa → Programa S7).
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 9 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
5.
Seleccionar la carpeta Bloques. (→ Bloques)
6.
Insertar un Bloque de Datos ( → Insertar → Bloque S7 → Bloque de Datos).
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 10 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
7.
Introducir el nombre DB10, seleccionar la opción DB Global y aceptar con OK (→ DB10 → DB Global -> OK).
8.
Abrir el bloque de datos DB10 con un doble click(→ DB10).
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 11 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Nota:
Indice
T I A Manual de Formación Edición: 02/2002
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.
Notas
Página 12 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
10. Cada registro del DB tiene un Nombre, Tipo, Valor Inicial y Comentario (opcional). En el momento en que se pasa al campo siguiente, se le genera una dirección en le DB que no puede ser alterada. El bloque de datos será salvado
y cargado el PLC
. El selector de modo del PLC deberá
estar en STOP! (→ Nombre→ Tipo → Valor Inicial → Comentario →
Nombre simbólico con el que se accede a la dirección absoluta asignada.
Tipo de dato asignado (ver tabla abajo) al registro.
Valor inicial en formato compatible con el tipo de dato seleccionado ( opcional ).
→
)
Comentario para documentación ( opcional ).
La dirección absoluta es asignada por STEP 7, cada vez que se valida un registro con ENTER. El formato de la dirección puede ser BIT, BYTE, WORD, .... Se puede acceder también a este elemento a través de su dirección absoluta (después de haber compilado y cargado el DB).
Nota:
Indice
T I A Manual de Formación Edición: 02/2002
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.
Notas
Página 13 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Los datos en un bloque de datos deben de llevar asignado un tipo de datos. Los tipos de datos estándar STEP 7 se definen en la tabla mostrada abajo :
Tipo y descripción
Tamaño en Bits
FormatoOpciones
Rango y notación numérica
Ejemplo
(Valores máximo y mínimo)
BOOL (Bit)
1
Texto Booleano
TRUE/FALSE
TRUE
BYTE (Byte)
8
Número Hexadecimal
B#16#0 a B#16#FF
B#16#10
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
WORD (Palabra)
16
Número Decimal B#(0,0) a B#(255,255) sin signo DWORD (Doble Palabra)
32
B#(10,20)
Número Binario
2#0 a 2#1000_0001_0001_1000_1 2#1111_1111_1111_1111_1111_111 011_1011_0111_1111 1_1111_1111
Número Hexadecimal
DW#16#0000_0000 a DW#16#FFFF_FFFF
DW#16#00A2_1234
Número Decimal B#(0,0,0,0) a B#(255,255,255,255) sin signo
B#(1,14,100,120)
INT (Entero)
16
Número Decimal -32768 a 32767 con signo
1
DINT (Int,32 bit)
32
Número Decimal L#-2147483648 a L#2147483647 con signo
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
Caracteres ASCII
´A´, ´B´ etc.
´B´
CHAR (Carácter)
8
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 14 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
11. El contenido de los valores del bloque de datos se puede modificar. No es recomendable hacerlo a través del campo Valor Inicial. Se debe de hacer a través de la opción de menú Datos ( → Ver → Datos).
12. Es ahora cuando se puede introducir un nuevo valor en el campo Valor Actual y salvarlo en el disco duro con
Indice
T I A Manual de Formación Edición: 02/2002
así como cargarlo en la CPU con
Notas
Página 15 de 18
( → Valor Actual →
→
).
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 16 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
13. Para poder acceder a los registros del DB en el programa STEP 7, el OB1 debe ser abierto con un doble click en el icono asociado del Administrador SIMATIC ( → Administrador SIMATIC → OB1).
14. Aceptamos la pantalla con OK (→ OK ).
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 17 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
Existen tres posibilidades de acceso a los datos: 1.
Acceso por Direccionamiento Directo:
Se puede acceder a un elemento de un DB con las siguientes instrucciones: Ejemplo: L DB 20. DBB2 L DB 22. DBW4 A DB 2. DBX5.6 2.
Cargamos el byte de datos 2 del DB20 en el ACCU 1 Cargamos el byte de datos 4 del DB22 en el ACCU 1 Consultamos el estado del bit de datos 5.6 del DB2.
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 OPN L T A A = 3.
DB 20 DI 22 DBW 0 MW 1 DIX 0.0 E 1.0 A 4.0
Abrimos el DB20 Abrimos el DB22 Cargamos la palabra de datos 0 del DB20 en el ACCU 1 Transferimos el contenido del ACCU 1 a la palabra de marcas 1 Operación AND sobre el bit de datos 0.0 del DB22 con el bit de entradas 1.0 Asignamos el resultado al bit de salidas digitales 4.0
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 CONTADOR:= SALIDA:= Nota:
Indice
T I A Manual de Formación Edición: 02/2002
FB1, DB19 EW 0 A 4.0
La Variable CONTADOR corresponde con la dirección EW 0. La variable SALIDA corresponde con la dirección A 4.0.
El formato de las variables del DB de Instancia y la dirección asignada en el parámetro del FB deben de ser iguales. Notas
Página 18 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
15. Con el Editor KOP/ AWL//FUP: Programar Bloques, se dispone de una herramienta para generar el programa STEP 7. La selección del elemento de datos se realiza a través de los diferentes interruptores, como se muestra en la imagen de abajo. Cuando se hayan contemplado todas las posibilidades de selección con los interruptores (S0 a S7) en el OB1, se deberá guardar en el disco duro modo de la CPU deberá estar en STOP! ( →
→
y cargado en el PLC
. El interruptor de
)
16. Cuando el selector de modo del PLC se ponga en RUN, el programa comienza su ejecución. Activando sólo uno de los interruptores S0 a S7, el valor almacenado en el correspondiente registro del bloque de datos es visualizado en el módulo de salidas a través de la dirección AW4.
Indice
T I A Manual de Formación Edición: 02/2002
Notas
Página 19 de 18
Generando Bloques de Datos
Módulo B4 Bloques de Datos
Módulos de Función Automatización Industrial
Índice TEMA – Módulos de Función 1. – Llamadas a Módulos 2. – Partes de un Módulo 2.1 – Variables Locales 3. – Funciones FC´s 4. – Módulos de Función FB´s 5. – Parámetros de Funciones 5.1 – Parámetros Formales 5.2 – Parámetros Actuales 6. – Módulos de Función y Módulos de Datos 6.1 – Módulos de Datos a Instancia 6.2 – Módulos de Multi-Instancia
Llamada a Módulos Módulo que llama (OB, FB, FC, SFB, SFC) Ejecución del Programa Instrucción que llama a otro módulo
Módulo llamado (FB, FC, SFB, SFC) Ejecución del Programa (FB, FC, SFB, SFC)
Ejecución del Programa Instrucción que llama a otro módulo
Ejecución del Programa (FB, FC, SFB, SFC)
Llamadas a Módulos (I) Llamada General “CALL” • Para que un módulo de código sea procesado debe ser llamado • Una llamada a módulo consta de la sentencia de llamada (CALL FC 10) y la lista de parámetros (si el módulo llamado tiene parámetros) • Después de la llamada, el módulo es procesado hasta encontrar una sentencia de fin de módulo • En el caso de los OB se retorna al sistema operativo • La información requerida por la CPU para el retorno es almacenada en la pila del módulo (pila B) • Los parámetros del módulo son el interfaz de datos al módulo llamado • Con CALL se pueden llamar FBs, FCs, SFBs y SFCs • La sentencia CALL es una llamada incondicional • Si el módulo llamado tiene parámetros tiene que utilizarse esta sentencia
Llamadas a Módulos (II) Llamada a Funciones • Se puede llamar a una función con CALL por su dirección absoluta o por su dirección simbólica • Se deben inicializar todos los parámetros de la función • Normalmente, las funciones tienen el parámetro RET_VAL en el que devuelven códigos de error
Llamada a Módulos de Función • En la llamada a un FB hay que especificar el DB de instancia asociado separados ambos por una coma • Se puede utilizar para ambos módulos direcciones absolutas o simbólicas • En FBs no es necesario inicilizar todos los parámetros del módulo • Los parámetros no inicializados mantienen su valor inicial
Llamada a Funciones y Módulos de Función del Sistema • Todas las funciones y módulos de función del sistema deben llamarse con la instrucción CALL
Llamadas a Módulos (III) Llamada con “UC” y “CC”: • • • • • • •
Permiten llamar a funciones y módulos de función La función llamada no debe tener parámetros ni DB de instancia El editor no chequea estas condiciones UC y CC no distinguen entre FCs y FBs. Los tratan igual UC es una llamada incondiconal CC es una llamada condicional al valor del RLO Otras posibilidades: • Direccionamiento indirecto de llamadas a FB o FC con UC y CC • Llamada vía parámetros de bloque con UC • Llamada vía parámetros de bloque con CC también en FB
Fin de Módulo: • BEC. Fin de módulo condicionado al RLO • BEU. Fin de módulo incondicional • BE. Fin de módulo. Última sentencia del módulo
Uso del Parámetro EN/ENO EN = Entrada Enable
ENO = Salida Enable EN
Si está activo (1), se ejecuta la instrucción de la caja.
Caja de instrucciones STL (FC, FB, Move, Add, etc)
Si no está activo (0), no se ejecuta la instrucción.
Partes de un Módulo
Tabla de Declaración de Variables
Sección de Código
ENO
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 la la ejecución de la instrucción
Datos Locales •
Los Datos Locales utilizados normalmente en un módulo son : – Variables Temporales – Parámetros – Variables Permanentes o estáticas
Variables Locales Temporales (I) Dirección
Símbolo
Tipo de Declaración • • • • •
Valor Inicial
Tipo de Datos
Comentario
Las variables locales son las declaradas como “temp” Se definen en la cabecera del módulo Se pueden definir en cualquier módulo de código Se usan para almacenar datos locales de la ejecución del programa Temporalmente se almacenan en la pila de datos locales. La pila la controla el S.O.
Variables Locales Temporales (II) • • • • • •
Se utilizan para almacenar resultados intermedios en la ejecución de un módulo Solamente están disponibles durante la ejecución del módulo Se puede utilizar direccionamiento absoluto o simbólico En los OB hay que declarar 20 bytes de información de comienzo de cada uno de ellos Normalmente se accede por direccionamiento simbólico El identificador de datos locales es la L • un bit se direcciona con L • un byte se direcciona con LB • una palabra con LW • una doble palabra LD
Dirección
Declaración
Nombre
Valor inicial
Comentario
0.0
temp
temporal1
Tipo INT
0
Variable temporal
2.0
temp
temporal2
REAL
0
Variable temporal
Variables Locales Estáticas (I) Dirección
Símbolo
Tipo de Declaración
Valor Inicial
Tipo de Datos
Comentario
Variables Locales Estáticas (II) • Datos locales estáticos son direcciones que un módulo de función FB almacena en el módulo de datos de instancia DI. • Las variables estáticas son las declaradas como “stat” • Son declaradas en la cabecera del módulo • Están en la memoria del módulo de función. • Mantiene la información hasta que es modificada por programa • El número está limitado por el tipo de dato de las variables y por el tamaño del DB • Se puede utilizar direccionamiento absoluto aunque debe ser la excepción • En el FB, el DB de instancia se abre con OPN DI xxx • se puede direccionar un bit con DIX y.x • un byte con DIB y • una palabra con DIW y • una doble palabra con DID y
Variables Locales Estáticas (III) • Se puede utilizar direccionamiento simbólico utilizando sus nombres • Se pueden utilizar las mismas sentencias que las utilizadas con DBs globales Dirección
Declaración
Nombre
0.0
temp
temporal1
Tipo INT
Valor inicial 0
Comentario Variable temporal
2.0
stat
Total
INT
0
Variable estática
Ejemplo: FB “Totalizador”
DB “TotalizadorDato”
Dirección Declaración Nombre Tipo
Dirección Declaración Nombre Tipo
0.0
temp
In
INT
0.0
temp
In
INT
2.0
stat
Total
INT
2.0
stat
Total
INT
L L +I T
#In #Total #Total
Funciones FC´s Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro módulo. Cuando se la llama, la función actúa como una subrutina del programa. Cuando termina de ejecutar su código, el control se devuelve al módulo y al segmento desde el cual fue llamada.
Programa Principal OB1
Módulo Subrutina FC
Ejecución del programa Ejecución del Programa
Instrucción que llama a otro módulo
Módulos de Función FB´s Un Módulo de Función (FB) tiene un módulo adicional de memoria asociado a él. Un Módulo de Datos (DB) mantiene una copia de los parámetros que van a pasar al área de datos locales. Después de la ejecución del FB, se borra el área de memoria local, pero el DB asociado retiene sus valores.
DB10 Llamada a un módulo con los parámetros actuales Ejemplo: Call FB1,DB10
Copia la parte de declaración local del FB
FB1 Área de Declaración Local Sección de Código del módulo llamado usando los valores del área de memoria local.
Parámetros de Funciones Declaración de los Parámetros: • Los parámetros de un módulo representan el interfaz entre el modulo que llama y el módulo llamado • Soportan parámetros las funciones y los módulos de función • Los parámetros pueden declararse de IN, OUT ó IN_OUT
Procesamiento de los Parámetros Progr. en módulo que llama
Progr. en módulo llamado
// Primera llamada CALL “Adder” Numb_1 := MW 30 Numb_2 := MW 32 Numb_3 := MW 34 Result := MW 40
#L
Numb_1
#L
Numb_2
I+ #L +I
Parámetros Parámetros del módulo actuales
#T
// Primera llamada L MW 30 L MW 32 +I L MW 34 +I T MW 40
Numb_3
// Segunda llamada CALL “Adder” Numb_1 :=DB 10.DBW 30 Numb_2 :=DB10.DBW 32 Numb_3 :=DB10.DBW 34 Result :=DB10.DBW 40
Programa ejecutado
Result
Parámetros formales
// Segunda llamada L DB 10.DBW 30 L DB10.DBW 32 +I L DB10.DBW 34 +I T DB10.DBW 40
Declaración de Parámetros • Los nombres de los parámetros de hasta 24 caracteres • El nombre de un parámetro no puede ser una palabra clave • Los parámetros IN/OUT pueden ser tipos de datos elementales, complejos o definidos por el usurio • El valor inicial y el comentario son opcionales
Dirección
Símbolo
Tipo de Declaración
Valor Inicial
Tipo de Datos
Comentario
Parámetros Formales • Los tipos de parámetros los clasifica en: datos simples, datos compuestos y parámetros
Parámetros Formales: Tipos de Datos (I) Tipo BOOL
Parámetros Formales: Tipos de Datos (II) Parámetros de módulo de tipo de dato digital: • Ocupan 8, 16 o 32 bits • Se leen con la instrucción L (load). p. e. L xxxx • Se escriben con la instrucción T (transfer). p.e. T xxxx • Direcciones que pueden asignar tipos de datos elementales • Direcciones que pueden asignar un tipo de parámetro
Parámetros de módulo de tipo TIMER: • Funciones binarias • Tipos de temporizadores: • SP, SE, SD, SS, SF, R xxxx (parámetro de entrada tipo timer)
Parámetros de módulo de tipo COUNTER: • Funciones binarias • Tipos de contadores: • S, CU, CD, R xxxx (parámetro de entrada tipo counter)
Parámetros Formales: Tipos de Datos (III) Parámetros de módulo de tipo de dato BLOCK_xx: • OPN - Abrir módulo de datos (parámetro tipo BLOCK_DB) • UC - Llamada a función (parámetro tipo BLOCK_FC) • UC - Llamada a FB (parámetro tipo BLOCK_FB) • CC - Llamada condicional a FC (parámetro tipo BLOCK_FC) • CC - Llamada condicional a FB (parámetro tipo BLOCK_FB) - xxxx vía parámetro de entrada • Cuando se abre un DB con parámetro, la CPU lo usa como DB global • Las funciones y módulos de función pasados con parámetros de módulo no deben contener parámetros de módulo • Una llamada condicional a módulo vía un parámetro de módulo es sólo posible si el parámetro de bloque es de un módulo de función
#Data es un parámetro tipo BLOCK_DB CALL FB 10.#Data
El usuario debe asegurar que #Data es el DB de instancia del FB 10
Parámetros Actuales • Cuando se llama a un módulo se inicializan los parámetros con los parámetros actuales con los que el módulo se ejecuta • Pueden ser constantes, direcciones absolutas, direcciones simbólicas, .. • El parámetro actual debe ser del mismo tipo que el parámetro del bloque • Cuando se llama a funciones se deben inicializar todos los parámetros • En los FBs es opcional inicializar todos o sólo alguno de los parámetros
Parámetros Actuales: Tipos de Datos Básicos • Son permitidos como parámetros actuales de tipos de datos básicos:
Acceso y Restricciones de los Parámetros de Paso Llamada a módulo (FC, FB) Tabla de Declaración
Módulo llamado (FC, FB) Tabla de Declaración
Valor_1
Input
Medida_1
Input
Valor_2
Output
Medida_2
Output
Valor_Total
In/Out
Medida_Total
In/Out
Call FC10 Medida_1:=Valor_1 Medida_2:=Valor_2 Medida_Total:= Valor_Total
Paso de Parámetros de un módulo lógico a otro
Paso de Parámetros entre módulos • Combinaciones posibles en el paso de parámetros de módulos:
E = Tipos de datos elementales C = Tipos de datos complejos P = Parámetros tipo TIMER, COUNTER y BLOCK_xx
Parámetros y Variables Locales (I) FC1 (Cálculo)
OB1
FC1 MW5
Entrada1 Salida_A
3369
Entrada2
MW10
Entrada3
AW12
0.0
in
Entrada1
int
2.0
in
Entrada2
int
4.0
in
Entrada3
int
6.0
out
Salida_A
int
8.0
temp
TEMP1
int
muestra 1 constante distancia resultado intermedia
ADD_I #Entrada1 IN1 #Entrada2 IN2
O
#TEMP1
O
#Salida_A
FC1 SUB_I MW2
Entrada1 Salida_A
6869
Entrada2
MW16
Entrada3
AW20
#TEMP1 IN1 #Entrada3 IN2
#Entrada1 , si es variable local ”Entrada1" , si es variable global (simbólico)
Parámetros y Variables Locales (II) STL Parámetros “Formales” del FB
CALL FB7, DB45 Comenzar:=I 1.0 Parar:=I 1.1 Longitud:=MW 20 Correr:=M2.1
Llama al FB7 (utilizando un Módulo de Datos a instancia DB45) y le pasa los parámetros
Direcciones “Actuales” donde residen los datos o se almacenarán
FBD
DB45 EN
Direcciones “Actuales” donde residen los datos o se almacenarán
I 1.0 I 1.1 MW20
FB7
ENO
Comenzar Correr Parar Longitud
Llama al FB7 (utilizando un Módulo de Datos a instancia DB45) y le M2.1 pasa los parámetros Parámetros “Formales” del FB
Módulos de Función y Módulos de Datos • Para almacenar datos se pueden utilizar: • zona de marcas • módulos de datos • Los módulos de datos presentan mayores prestaciones • Los módulos de datos pueden ser: • globales. Pueden acceder cualquier módulo • de instancia. Sólo se puede acceder desde el FB asociado • Los DBs deben de crearse con el editor o en runtime SFC 22 CREAT DB • Deben de ser cargados en la memoria de trabajo para que se pueda leer y escribir en ellos • la CPU utiliza dos registros: • registro DB: para módulos de datos globales • registro DI: para módulos de datos de instancia • se puede tener abierto simultáneamente un módulo de datos de cada tipo
Módulos de Datos a Instancia • Un Módulo de Datos a Instancia es un duplicado de la Tabla de Declaración del Módulo de Función asociado a él. Los datos de DB a Instancia permanecerán después de cerrar el FB.
=
Uso de un FB sin DB a Instancia • El STEP7 Versión 2.X le permite crear y utilizar un FB sin usar un DB asociado a él. Utilizado de esta forma, el FB trabaja igual que un FC.
FB sin DB a Instancia Tabla de Declaración usando la memoria local
Sección de Código
FC
=
Tabla de Declaración usando la memoria local
Sección de Código
Módulos de Función y Módulos de Datos (II) Direcciones de Datos
Dirección de datos Localizado en DB abierto vía el Registro DB
Registro DI
Bit
DBX y.x
DIX y.x
Byte
DBB y
DIB y
Palabra
DBW y
DIW y
Doble palabra
DBD y
DID y
Direccionamiento Absoluto de Direcciones de Datos • En este caso hay que conocer las direcciones absolutas que el editor asigna a las variables. Poco recomendable.
Direccionamiento Completo • Se hace en dos pasos: • asignar nombre simbólico al DB en la tabla de símbolos. p.e. “MOTOR1” al DB 51 • asignar dirección de los datos en el módulos de datos. p.e. “PAR” a la DBW 20 • Con direccionamineto simbólico queda: L “MOTOR1”.PAR • Con direccionamiento absoluto queda: L DB 51.DBW 20
Módulos de Datos (I) Operaciones con Módulos de Datos
Módulos de Datos (II) Abrir Módulos de Datos • • • •
Direccionamiento Partido OPN DB 25 L DBW 10
OPN DB x OPN DB nombre OPN DI x OPN DI nombre
Direccionamiento Completo L DB25.DBW 10
Longitud y Número de DB´s L L L L
Cambio los Registros de los Módulos de Datos
DBLG // longitud de un DB DBNO // número de un DB DILG // longitud de un DI DINO // número de un DI
CDB
Funciones del Sistema para DB´s SFC 22 CREAT_DB. //Crea un módulo de datos SFC 23 DEL_DB // Borra un módulo de datos SFC 24 TEST_DB // Test de un módulo de datos
Módulos de Datos Multi-Instancia (I) • Los módulos Multi-Instancia le permiten usar un Módulo de Datos para mantener unos valores separados mientras llama a un FB con un DB asociado. Un FB ejecuta la sección de código actual mientras otro maneja el Módulo de Datos a Instancia.
FB que ejecuta las instrucciones lógicas
Usar este área primero
Módulo de Datos Multi-instancia asociado a un FB
Segmentos dentro
FB que maneja la sección del módulo de datos a instancia que mantendrá los últimos parámetros
del DB que contendrán Usar este los datos separados de área después los parámetros pasados
Usar este área después
Módulos de Datos Multi-Instancia (II) Para utilizar DB´s multiinstancia: – Incorporar los FBs a llamar en forma de variables estáticas en la declaración de variables del FB invocante – El FB invocante llama otros bloques de función sin DBs de instancia propios (es decir, adicionales), – Esto permite concentrar los datos de instancia en un solo bloque de datos de instancia, pudiéndose así aprovechar mejor el número disponible de DBs.
Módulos de Datos Multi-instancia (III) Módulo de control FB 101
FB 100 con múltiples llamadas al FB101
Variables usadas: setpoint_value: real sum: real actual_value: real
DB Multi instancia
Tema 2: Programación de PLCs 1. STEP 7 2. PROGRAMACIÓN BÁSICA AWL 3. PROGRAMACIÓN ESTRUCTURADA • Introducción • Bloques de organización (OB) • Funciones (FC) • Bloques de Función (FB) • Boques de datos (DB)
PLC’s Curso 2009/10
Página 1
Introducción
Facilita modularidad del programa, y clarifica su organización y análisis
Permite generar funciones reutilizables y no repetir código
Simplifica el test y la puesta en servicio FC Sistema operativo
FB
OB1 FB
FC
SFC
SFB
Otros
PLC’s
Curso 2009/10
OBs
Página 2
Introducción OB 1
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
FB10
FB1 Motor 1
Controlador . . .
Válvulas
OB 1
FB 1 . .
CALL FB1, DB2 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A12.0 Velocidad :=AW14
. .
SFC
FC 5 Valor límite
FB2
Direc. 0.0 0.1 2.0 4.0 6.0 0.0 . . . U UN = .
Copia
DB 2 Decl. in in out out stat temp
Nombre Marcha Paro Motor_on Velocidad Veloc_ant Calc_1
Tipo BOOL BOOL BOOL INT INT INT
#Marcha #Paro #Motor_on
PLC’s Curso 2009/10
Página 3
Introducción Tipo de Módulo
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
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
PLC’s Curso 2009/10
Página 4
Introducción Variables/Datos Globales (válidos en todo el programa)
Variables/Datos Locales (sólo válidos en un bloque) Variables temporales
Varibales estáticas
• PAE / PAA
• se borran después de la
• se mantienen incluso después
•E/A
ejecución del bloque asociado
de que sea ejecutado el bloque
•M/T/Z
• almacenamiento temporal
• almacenamiento permanente
• Áreas de DB
en la L stack
en DBs.
• utilizables en OBs / FCs / FBs • solo se pueden usar en FBs
absoluto
simbólico Acceso
PLC’s Curso 2009/10
Página 5
Introducción • Parámetros de Entrada (IN) solo en FBs, FCs, SFBs y SFCs Con ayuda de los parámetros de entrada se pueden asignar datos necesarios para el procesamiento del bloque. • Parámetros de Salida (OUT) solo en FBs, FCs, SFBs y SFCs En los parámetros de salida, los resultados del procesamiento del bloque son depositados aquí. • Parámetros de Entrada/Salida (IN_OUT) solo en FBs, FCs, SFBs y SFCs En los parámetros de Entrada/Salida, los contenidos de estos parámetros y el resultado del procesamiento del bloque depositado en ellos mismos. • Datos Estáticos (STAT) sólo en FBs y SFBs Los datos estáticos son los datos locales a un bloque de función, los cuales son almacenados en un bloque de datos de instancia y por tanto preservados hasta el siguiente procesamiento del bloque. • Datos Temporales (TEMP) en todos los bloques Los datos estáticos son los datos locales a un bloque que almacenan valores durante el proceso de dicho bloque en una pila de datos locales (L-Stack) y, una vez ha terminado de procesarse el bloque, el contenido de estas variables se pierde.
PLC’s Curso 2009/10
Página 6
Introducción
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
Dir. 0.0 0.1 2.0 2.0 8.0 10.0 ... ...
Decl. in in in out out inout stat temp
Nombre Marcha Paro Velocidad Motor_on Consigna EMER_OFF ... ..
EN
Tipo BOOL BOOL INT BOOL INT BOOL ... ...
"Motor" Marcha
Parámetros de entrada Parámetros In/Out
Paro Velocidad
Valor inicial FALSE TRUE 0 FALSE 0 FALSE ... ...
...
ENO
Motor_on Consigna
Parám. de Salida
EMER_OFF
PLC’s Curso 2009/10
Página 7
Bloques de organización • Son los encargados de poner programa de usuario a disposición de la CPU, es decir, nuestro programa debe estar incluido en un OB para poder ser ejecutado por el Autómata • Los OBs son llamados cíclicamente por el sistema operativo. Nunca por otro módulo lógico . Un OB puede ser interrumpido por otro OB de mayor prioridad. • Están jerarquizados en prioridades y se dividen en dos tipos: – Dedicados a tareas periódicas: OB1: Programa principal (mínima prioridad) OB10: Interrupción horaria OB35: Interrupción cíclica, etc. – Dedicados a tratamiento de errores: OB40: Error hardware OB121 y 122: Error síncrono, etc. PLC’s Curso 2009/10
Página 8
Bloques de organización Arranque OB 100 OB 101 OB 102 Ejecución Cíclica del Programa OB 1
Ejecución Periódica De un programa OB 10...17 (Alarmas horarias)
OB 30...38
(Alarmas Cíclicas)
Ejecución del programa Sujeta a eventos OB 20...23
OB 80...87
OB 40...47
OB 121, 122
OBs de Alarma
Error OBs
(Alarmas de retardo)
(Alarmas de Proceso)
(Errores Asíncronos)
(Errores Síncronos)
PLC’s Curso 2009/10
Página 9
Bloques de organización Ej. OB82 (Prio.26) = Manejo de Error. Ejecutado en el caso de rotura de un hilo en la entrada analógica PEW 352
Ej. OB20 (Prio.3) = Alarma de retardo. La ejecución comienza 3.25s después de la detección de un objeto.
Ej. OB10 (Prio.2) = Alarma Horaria. Ejecutada una vez Por minuto desde las 9:30
El OB1 Se ejecuta contínuamente .....
...... Hasta que es interrumpido por otro OB Nº OB OB 1 OB 10 OB 20 OB 35 OB 40 OB 82
Tipo de OB Programa Cíclico Alarma Horaria Alarma de retardo Alarma Cíclica Alarma de proceso Manejo de Error
Prioridad 1 2 3 12 16 26 / 28
PLC’s Curso 2009/10
Página 10
Bloques de organización: OB de Arranque Rearranque Completo automatico S7-300 / 400
manual S7-300
Alimentación 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
Lectura de la PAE Ejecución del OB1 Escritura de la PAA
PLC’s Curso 2009/10
Página 11
Funciones •
Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro módulo.
•
Cuando se la llama, la función actúa como una subrutina del programa. Cuando termina de ejecutar su código, el control se devuelve al módulo y al segmento desde el cual fue llamada. Programa Principal
OB1
Módulo Subrutina
FC
Ejecución del programa
Ejecución del Programa
Instrucción que llama a otro módulo
fin de bloque
Las Funciones son bloques lógicos sin memoria Las variables temporales de las FCs se memorizan en la tabla de datos locales
PLC’s Curso 2009/10
Página 12
Funciones 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
Function FC10 Ejecución del programa
in in out ...
On_1 On_2 Off
BOOL BOOL BOOL
CALL FC 10 On_1 := On_2 := Off :=
E 0.1 E 0.2 A8.0
... U U = ...
#On_1 #On_2 #Off
PLC’s Curso 2009/10
Página 13
Funciones: sin parámetros • Contienen instrucciones a modo de subrutinas • Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo modo que se insertan VATs) • Llamada (equivalen a CALL pero no es posible transferir parámetros): UC llamada incondicional Ej.: UC FC12 CC llamada condicionada a RLO=1 Ej.: U E125.0 CC FC1 • El fin de una función se realiza con la instrucción – BEA (incondicional) o – BEB (condicional a RLO=0) PLC’s Curso 2009/10
Página 14
Funciones: con parámetros • Contienen instrucciones a modo de subrutinas • Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo modo que se insertan DBs o FCs sin parámetros) • Al darles contenido (introducir código) se debe rellenar también su Tabla de Declaración, donde se incluyen los parámetros formales de la función (con los que se diseña la función) declarados como IN, OUT o IN/OUT. • Los parámetros actuales serán los que se transfieran desde el bloque actual a la función, siendo estos valores asignados a los parámetros formales de la FC para que trabaje con ellos • El fin de una función con parámetros se realizará igualmente con instrucciones BEA y BEB PLC’s
Curso 2009/10
Página 15
Funciones: con parámetros • Ejemplos: – Llamada a una función sin parámetros:
CALL FC 12 – Llamada a una función con parámetros:
CALL FC 25 Velocidad := MW10 Inicio := E124.0 Alarma := A125.0 Parámetros formales: Velocidad, Inicio y Alarma Parámetros actuales: MW10, E124.0 y A125.0 – Dentro de FC 25 (en su Tabla de Declaración) se habrán definido las características de Velocidad, Inicio y Alarma – CALL llama a un bloque lógico independientemente del RLO
PLC’s Curso 2009/10
Página 16
Funciones Instrucción CALL – El tiempo de procesamiento para CALL depende del número y la posición de memoria de los parámetros actuales – La instrucción CALL asegura que los parámetros de módulo son provistos correctamente con datos actuales – Ejemplo: • CALL FC10 On_1 := E 0.1 On_2 := E 0.2 Off := A 8.0 Instrucción de llamada UC y CC – Llamada a módulo independiente del RLO (UC) o dependiente del RLO (CC) • Ejemplos: UC FC20 ó CC FC20 – Sólo se pueden usar cuando la FC no tiene parámetros PLC’s Curso 2009/10
Página 17
Bloques de función • Es un bloque con memoria. Tiene asociado un bloque de datos DB de instancia, de tal forma que en cada nueva llamada DB10 se puede conservar el valor de las Copia la parte de variables internas de la función. declaración local del FB Esto no era posible en FCs
FB1
Área de Declaración Local
Llamada a un módulo con los parámetros actuales Ejemplo:
Sección de código del módulo llamado usando los valores del área de memoria local.
Call FB1,DB10 PLC’s Curso 2009/10
Página 18
Bloques de función • –
–
– • – –
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.
Motor
DB 16 0.0 0.1 2.0 4.0
FB 5
CALL FB5, DB16 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A8.0 Velocidad :=AW12
Marcha Paro Motor_on Velocidad
in Marcha in Paro out Motor_on out Velocidad stat ... Temp...
... U UN = ...
BOOL BOOL BOOL INT
BOOL BOOL BOOL INT
#Marcha #Paro #Motor_on
Es necesario
PLC’s Curso 2009/10
Página 19
Bloques de función • Tipos de variables añadidos (no en FCs): STAT: estático; conserva el valor de la variable de un ciclo para el siguiente, ya que almacena su valor en el módulo de datos DB asociado a la función.
• Llamada a módulo de función: CALL FB1, DB3
CALL FBnx, DBny
• Desde el administrador SIMATIC se habrán creado (dentro del Proyecto y en la carpeta Bloques) FB 1 y DB 3: – Primero se crea FB1: tabla de declaración de variables, código de función, etc. – Después se crea DB3 (asociado a FB1) y toma la tabla de declaración de FB1 – Asignación del valor actual al parámetro/variable formal: • desde el DB3: Ver > datos > valor actual • Desde el OB100: Load + Transfer
PLC’s Curso 2009/10
Página 20
Bloques de función • Mediante la llamada con varias instancias de un FB se pueden controlar varios equipos con el mismo FB
PLC’s Curso 2009/10
Página 21
Bloques de datos •
Zonas de memoria para almacenamiento de datos organizados del programa
•
No pierden la información cuando el programa los ha acabado de utilizar
•
Existen DB´s de dos tipos: – Globales: disponibles para cualquier módulo lógico del programa. – De instancia: asignado a un módulo de función, por lo que sólo es accesible por éste.
PLC’s Curso 2009/10
Página 22
Bloques de datos globales •
Son remanentes: no pierden la información aunque se corte la alimentación (en coherencia con el programa cargado en la CPU)
•
Tras la creación de un DB, éste debe ser definido (rellenado) con las variables que se desee. – Tipo de variables: • Simple (bool, byte, entero, palabra, doble palabra). • Compuesto (STRING, DATE_AND_TIME, ARRAY). • Estructuras.
•
Apertura:
AUF
DB8
•
Acceso:
L U T U
DB8 DB8.DBX3.0 DB7.DBW3 DB6.DBD4
•
lleva implícito AUF DB8 lleva implícito AUF DB7 lleva implícito AUF DB6
Los DB permiten la asignación de simbólicos. PLC’s Curso 2009/10
Página 23
Bloques de datos globales DB 99 "Valores" Dir. Nombre
Tipo
0.0
Estado
BOOL
1.0
Estados
BYTE
2.0
Numero
INT
4.0 Peso[1]
8.0 Peso[2]
Acceso Tradicional
Acceso Total absoluto
simbólico
AUF U
"Valores" DBX 0.0
o
U
DB99.DBX0.0
o
U
“Valores".Estado
AUF L
DB 99 DBB 1
o
L
DB99.DBB1
o
L
“Valores".Estados
AUF L
"Valores" o DBW 2
L
DB99.DBW2
o
L “Valores".Numero
AUF L
DB 99 DBD 8
L
DB99.DBD4
o
L "Valores".Peso[1]
REAL
REAL
o
PLC’s Curso 2009/10
Página 24
Bloques de datos globales
Abrir módulo de datos AUF DB 19
Carga y transferencia en módulos de datos L DBB 1 L DBW 2 L5 T DBW 4 L 'A' L DBB28 ==I
Cargar el byte de datos 1. Cargar la palabra de datos 2 (byte 2/3). Cargar el número 5. Transferir a la palabra 4. Cargar el carácter ASCII A. Cargar el byte de datos 28. Comparar.
U DBX 3.1
Consultar el bit 1 del byte 3.
L DB19.DBW4 Cargar la palabra de datos 4 del DB19 (incluye AUF DB 19).
PLC’s Curso 2009/10
Página 25
Bloques de datos de instancia •
Asociado a un bloque de función FB. Antes de crear un DB instancia debe existir el FB
•
Cuando se inserta en el proyecto desde el Administrador SIMATIC, se debe asociar a un bloque de función FB ya existente.
•
Aparecen en la tabla de variables los parámetros correspondientes al FB asociado automáticamente.
• •
Pueden asociarse varios DBs a un único FB. CALL
FB22,DB201
CALL
FB22,DB202
CALL
FB22,DB203
PLC’s Curso 2009/10
Página 26
Resumen
FC Lenguaje
AWL
FB
Sin parámetros
Con parámetros
• CALL FC1 • UC FC1 • CC FC1
• CALL FC2 Par1: ... Par2: ... Par3: ...
sin param., sin DB inst.
Con param., con DB inst.
• CALL FB2, DB3 Par1: ... Par2: ... Par3: ...
• UC FB1 • CC FB1
FC1 ( CALL ) KOP
FC2
FC1 EN
DB3
ENO
EN
FB1 ENO
EN
FB2 ENO
Par1 Par2
EN
ENO
Par1 Par2
Par3
Par3
DB3 FC2
Curso 2009/10
EN
Par3
PLC’s
FB1
FB2
EN
EN
Par1 Par2
Par1 ENO
ENO
Par2
Par3 Página 27
ENO
EJERCICIO (Entregable 7) •
• • •
Tenemos una mezcladora que produce 3 tipos de productos, magdalenas, sobaos y donuts, para lo cual controla la receta modificando las proporciones de harina (A124.0), leche (A124.1), levadura (A124.2), azúcar (A124.3) y un motor que realiza la mezcla (A124.4). La producción empezará con un flanco de subida de la señal E124.0. El byte EB125 controla el producto a fabricar: magdalenas si es 0, sobaos si vale 1 y donuts en caso de que almacene 2. En cualquier otro caso la mezcladora se mantendrá parada. La tabla de tiempos para cada producto es la siguiente: Harina
•
Leche
Levadura
Azúcar
T mezcla
Magdalenas 3
2
3
2
4
Sobaos
1
2
3
1
3
Donuts
2
1
2
1
2
La entrada E124.5 permite elegir si los productos y el proceso de mezcla se realizan simultáneamente (si E124.2=0) o de manera secuencial (si E124.2=1) PLC’s Curso 2009/10
Página 28
EJERCICIO (Entregable 7)
•
Resuelva el ejercicio utilizando: • Funciones con parámetros. • Bloques de función con DB’s de instancia.
•
Evite, en la medida de lo posible, el uso de saltos.
PLC’s Curso 2009/10
Página 29
Direccionamiento Indirecto S7-1200 y S7-1500
El ejemplo de programación con un autómata Siemens S7-1500 (también es valido para S7-1200) muestra como trabajar con direccioamiento indirecto dentro de un ARRAY Para ello se simulará el registro de temperatura de un proceso, almacenando la temperatura en un DB Array ¿Que es un direccionamiento indirecto? Mediante esta función podemos acceder a diferentes áreas de memoria de una manera indirecta inidicada por un índice o puntero. Este tipo de direccionamiento nos puede llegar a ahorrar muchas lineas de programa sobre todo cuando trabajamos moviendo datos. Si por ejemplo queremos mover un valor a diferentes puntos de una variable array podemos hacer dos cosas: DIRECCIONAMIENTO DIRECTO Creamos una función MOVE para mover el valor a cada uno de los punto de la variable array
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[1] MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[2] DIRECCIONAMIENTO INDIRECTO Creamos una sola función MOVE en donde moveremos el valor a donde nos indique el valor de la variable "Puntero"
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura["Puntero"] Si "Puntero" =3 moveremos "Temperatura" a Registro_Temperatura".Temperatura[3] Si "Puntero" =8 moveremos "Temperatura" a Registro_Temperatura".Temperatura[8] De esta forma cambiando el valor de "Puntero" podemos acceder con misma función MOVEa cualqueir punto del Array
Programación del Ejemplo Lo primero que hacemos es crear una DB (Bloque de datos) a la que llamaremos "Registro_Temperatura".
Dentro de la DB creamos una variable que llamaremos "Temperatura" y será del tipo Array[1..10] of Int
Este sería el programa del PLC ## Borrado de Array y reinicio de puntero - Al habilitar el registro mediante flanco ascendente de "Habilita_Registro" borramos todo el array con la función FILL_BLK - También reiniciamos el puntero (lo ponemos a 0)
## Temporización de registro Al Habilitar el registro de datos "Habilita_Registro" lanzamos un temporizador cada 10 Seg que activara el bit "Flag_Registro" que realiza el registro de datos y reinicia el temporizador De esta manera generamos cada 10 segundos un bit que realiza el registro de forma periódica
## Registro de datos e incremento de puntero Al activarse el "Flag_Registro" realizamos dos cosas: - Incremento del valor del "Puntero" con la instrucción INC - Mover el valor de "Tenperatura" al Array "Registro_Temperatura" que nos marca el puntero
## Fin de registro Comparamos el valor de "Puntero" con +10 (el tamaño del array) y si es igual a 10 ponemos a reset el bit "Habilita_Rgistro" De esta forma tenemos 10 registro en el Array
Aquí podemos ver la tabla del Array y sus registros
Direccionamiento indirecto en Step 7 (I) – Memoria y punteros a área 3 marzo, 2014 en Teoría, Tutoriales, Videos 18 Comentarios
tweet
inShare
Para empezar con el tema del direccionamiento indirecto, vamos a explicar una serie de conceptos básicos y luego nos pondremos con la formas más básicas de direccionamientos indirectos. Los tipos de direccionamientos son tres:
Direccionamiento Inmediato Direccionamiento Directo Direccionamiento Indirecto
Los dos primeros, son los que conocemos muy bien:
El direccionamiento inmediato es cargar directamente el valor del operando (de cualquier tipo), por ejemplo L 32. El direccionamiento directo será del tipo L MW10 (donde el valor de MW10 sea el 32 anterior) es decir, en la carga se apunta directamente al sitio de la memoria donde reside el valor que queremos cargar.
Nada nuevo bajo el sol. Ahora bien, ¿qué pasa cuando queremos recorrer áreas de memoria de forma recursiva o leer un área dinámicamente?
Direccionamiento indirecto Como decimos, podemos acceder a los valores de la memoria de una forma indirecta.. vamos a querer saber el contenido de una variable (o área de memoria) usando otra variable que se referirá a está área de la que queremos saber su valor.
Parece un poco enrevesado pero es bastante fácil de entender mediante un ejemplo: podemos abrir el DB10 con AUF de dos formas: AUF DB10 o bien: AUF DB[MW20], teniendo la marca MW20 el valor 10. Esta última forma de cargar el valor de la marca MW10 es uno de los tipos de direccionamiento indirecto, pero hay varios:
Direccionamiento Indirecto por Memoria con Número Direccionamiento Indirecto por Memoria con Puntero de Área Direccionamiento Indirecto por Registro e Intraárea (área interna) Direccionamiento Indirecto por Registro e Interárea (área cruzada)
El caso anterior, el usado es el primero, mediante número.
Direccionamiento Indirecto por Memoria Dentro de los direccionamientos indirectos por memoria con número a su vez, podemos usar MW (o DW de un DB) o MD (o DD de un DB) para acceder:
Usando formato palabra: accederemos a temporizadores, contadores , abriremos DB y accederemos a FB y FC. Usando formato doble palabra: accederemos a datos de tipo bit, byte, palabra y doble palabra.
Formato palabra – número (indexados) Es el más fácil de entender: en un número entero (palabra) introducimos el valor de DB, FB , temporizador etc que queramos leer. Así podemos hacer un L 10 T MW 10 U T[MW10] con lo que estaremos leyendo el estado del temporizador T10. Digamos que nos sirve para valores operandos que están indexados mediante un número como son los DB , los contadores etc. Para hacer referencia a ellos, nos servimos de un número ya que existe una lista de estos elementos.
Direccionamiento Indirecto con formato doble palabra – Punteros a área
Aquí ya se introduce el concepto estrella del direccionamiento indirecto… el puntero. Hagamos un pequeño paréntesis para ver este concepto. Un puntero no es más que una dirección. Nada más. No tiene un valor, sólo apunta con el dedo como un niño pequeño dónde mirar, pero no dice qué está viendo. Los punteros pueden ser:
Interárea (Área cruzada) : Por ejemplo P#M10.0, o P#E10.0 o P#DBX10.0 Intraárea (Área interna): Por ejempo P#10.0
Como ves hay una gran diferencia. Los que tienen área de memoria se posicionan, dentro de todas las áreas la memoria en una en concreta, y de esa, en una posición definida (siguen sin decir lo que vale, pero la dirección es completa). En cambio, los que no llevan área de memoria, simplemente es una dirección. ¡pero no sabemos de qué área de memoria! En nuestro caso, y siguiendo con los direccionamientos indirectos, vamos a usar los punteros SIN área de memoria. Así podremos hacer esto: L P#10.0 T MD10 U E[MD10] = A [MD10] En este ejemplo de una imaginación sin parangón, lo que hemos hecho es cargar un puntero (en el área de direcciones de la que ya hablaremos AR1) y se lo hemos transferido a la marca MD10. Por tanto, el código de arriba sería lo mismo que escribir: U E10.0 = A10.0 ¿Ves a dónde te puede llevar esto y las posibilidades que ofrece? ¿También se te ha erizado el bello?. Sigamos…
¿Se puede cargar los punteros de otra forma? Pues sí. Resumiendo diremos que le damos la dirección bien mediante el puntero (P#10.0) o contando con los dedos cuántos bits tiene la dirección. Es decir:
Podemos hacer, al igual que en el caso de arriba: L 80 (porque la dirección 10.0 son 80 bits) T MD10 U E[MD10] = A [MD10] ¿Es lo mismo? Extrictamente lo mismo. Hemos creado el puntero de la misma forma. Por tanto, de forma numérica, un puntero se verá como el número de bits de ese puntero.
Direccionamiento indirecto en Step 7 (II) – Registros y áreas 11 marzo, 2014 en Curso online, ejemplos, Teoría, Tutoriales, Videos 22 Comentarios
inShare4
En esta nueva entrada sobre direccionamiento indirecto es con la que terminamos el curso. En ella vamos a ver la segunda parte de cómo automatizar y recorrer zonas de memoria para trabajar con ellas de forma indirecta y recursiva. Lo primero que has de hacer es leer el direccionamiento indirecto en Step 7 (I) si no lo has hecho ya.
Registro de direcciones Como sabes, cuando se carga un valor, hay dos registros, el ACU1 y el ACU2. Pues también existen dos registros de direcciones, el AR1 y el AR2 para usarlos en el direccionamiento indirecto. La forma de cargar y transferir los valores a los registros son de la siguientes 3 maneras:
Cargar directamente el puntero en el AR1 Cargar el puntero y transferirselo al AR1 Cargar el valor numérico de bits y transferirselo al AR1
Cargar directamente el puntero Es el más rápido si se sabe qué hay que cargar: LAR1 P#1.0 Lo que cargará en el AR1 el puntero 1.0 Cargar el puntero y transferirlo al AR1 L P#1.0
LAR1 Al igual que el anterior, cargamos el puntero P#1.0 en el AR1 Cargar el valor numérico de bits y transferirlo al AR1 o, como dijimos en direccionamiento indirecto (I), podemos crear al puntero diciendo cuántos bits tiene la dirección L8 LAR1 Hará exactamente lo mismo que los casos anteriores. Hay que puntualizar que si queremos acceder a una dirección que tenga más de 32768 bits (16 bits) la carga debería ser del estilo: L L#80000 TAR1 De tal forma que cargaremos la dirección 10000.0 Un poco altita la dirección aunque esa sería la forma. A decir verdad, lo suyo es jugar siempre con números en doble palabra como ya veremos más adelante aunque hacerlo como enteros también es válido aunque limitado a la capacidad de una palabra frente a la doble.
Direccionamiento Indirecto por Registro e Intraárea/Interárea La diferencia fundamental entre el registro e Intraárea y registro e Interárea es:
Intraárea: No se especifica el área de memoria Interárea: Vamos a especificar el área de memoria (el tipo, por así decirlo)
¿Y esto qué significa en cristiano? Pues a la hora de la verdad, y para nosotros, no mucha cosa. En resumen, y que permitan los puristas, lo que vamos a hacer es o bien:
LAR1 P#50.0 // Cargar el puntero L MW [AR1, P#10.0] // Decir el operando (en este caso de carga), el tipo de área (marcas) y la dirección. O también podemos hacer: LAR1 P#M50.0 // Cargar el puntero CON la zona de memoria L W [AR1, P#10.0] // Decir el operando y la dirección. ¿Resultado? Pues básicamente el mismo. La diferencia es que en el direccionamiento de tipo intraárea, el contenido del AR1 va a tener la misma pinta que el direccionamiento por memoria que veíamos en el capítulo I. No tiene el área de memoria asignado (marcas en nuestro caso). ¿Qué se usa más? Personalmente intraárea, pero supongo que es cuestión de gustos. Además imaginemos que mezclamos las cosas y hacemos lo siguiente: LAR1 P#E50.0 L MW[AR1,P#10.0] Como veis hemos indicado el área en la carga del registro AR1 y luego hacemos una carga de MW… ¿vamos a mandar la CPU a Stop o crearemos un agujero espacio-tiempo? Pues no. No sé si lamentablemente, pero no. Simplemente del AR1 tomaremos la dirección, pero no la zona de memoria y ejecutaremos el operando de carga MW. Por tanto, y a mi juicio, es mejor siempre usar el intraárea. Me parece más metódico ya que siempre vas a construir los punteros de la misma forma, independientemente del uso que le vayas a dar posteriormente. Muy bien, me parece estupendo… pero me he perdido en el L MW [AR1, P#10.0]… ¿qué significa? Muy sencillo. Lo que hay entre corchetes es la dirección inicial más un desplazamiento. De tal forma que en nuestro ejemplo, realmente estamos leyendo la MW60 (50 del AR1 +10 del offset por así decirlo). ¿Es obligatorio poner ese offset siempre? Si. Siempre. Sin excepción. Pones un P#0.0 si no lo quieres y listo. ¿Qué pasa si cargo un P#50.0 en el AR1, cargo un offset P#0.1 y hago una lectura MB, MW o MD? Pues que estarías provocando un bonito error de runtime. Ya que para hacer una lectura de byte, word o doble word, necesitas que el bit del puntero sea 0 (ojo, el bit, no el byte). No puedes crear un MW50.1 como puedes imaginar. Así que cuidadín con eso.
¿Qué más puedo hacer con los registros? Como no sólamente del AR1 vive el hombre, existe también un segundo registro, el AR2 . Con esta pareja, podemos jugar indistintamente para cargar nuestros punteros e incluso combinarlos en las operaciones. Así, para seguir con el ejemplo anterior, podríamos hacer: LAR1 P#50.0 LAR2 P#10.0 L MW[AR1,AR2] : No se puede usar ambos AR para hacer este tipo de direccionamiento L MW[AR1,p#0.0] T MW[AR2,P#10.0] ¿Qué operaciones puedo hacer con los registros? LARn : Cargar el contenido del ACU1 en el registro ARn, siendo n=1 o 2. Offtopic: Y no, no es un 102, es un 1 O 2. A la RAE le ha parecido buena idea no tener que acentuar desde hace un tiempo la O entre números. Qué país. TARn: Transferir desde el registro n, su contenido al ACU1. +ARn: Sumar al contenido del ARn, el contenido del ACU1. Pero como hemos visto, podemos hacer cargas y transferencias directas: LARn : Cargamos la dirección al ARn. Por ejemolo LAR1 P#50.0 TARn : Cargamos el contenido del ARn en la dirección. Por ejemplo TAR1 MD50 +ARn : Añadimos al ARn el puntero que queramos. Por ejemplo, +AR1 P#10.0 Para rizar el rizo, podemos copiar la información entre los AR haciendo: LAR1 AR2, con lo que cargaremos en el AR1 el contenido del AR2 TAR1 AR2, con lo que recuperamos el contenido del AR1 y se lo cargamos en el AR2. Como ves las combinaciones son unas cuantas si bien se pueden resumir en asignación y suma.
¿Y todo esto, ya sirve para algo? Pues aunque pueda parecer lo contrario, el direccionamiento indirecto sirve para muchas cosas, pero sobre todo para recorrer información y tratarla.
¿En qué se diferencian las operaciones para el direccionamiento indirecto entre el STEP 7 y el STEP 5? Mostrar referencias http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=24520698&nodeid0=37 217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&vi ewreg=WW
Instrucciones: En el direccionamiento indirecto en el STEP 7, se diferencia entre: 1. El direccionamiento indirecto por memoria con un número: Para el direccionamiento de temporizadores, contadores, y módulos, 2. El direccionamiento indirecto por registro con un puntero de área: Para el direccionamiento de zonas de memoria: Periferia, entradas, salidas, marcas, datos globales (DBX), datos de instancia (DIX) y datos locales. direccionamiento indirecto por memoria con un número Ejemplos:
STEP 7
Analogía en el STEP 5
L2
Carga un número
L KF+2
Carga un número
T MW 33
Guardar en la palabra 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]
....... CC FC[MW33]
....... Abre el DB2
.......
.......
B MW33
Elabora la palabra de marcas 33
A DB0
Abre el DB2
.......
.......
.......
Llama al FC2 si VKE = B MW33 1:
Elabora la palabra de marcas 33
Sólo funciona, si FC2 no tiene parámetros
Llamada al FC2 si VKE = 1: Sólo funciona si FC2 no tiene parámetros
SPB FC0
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 L P#4.5
Analogía en el STEP 5
Carga el puntero para el L KF +4 Byte4, Bit 5
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 L P#M 2.3
Carga el puntero para la M2.3
Analogía en el STEP 5
Cálculos del puntero Una propiedad decisiva del puntero de área es que los cálculos del puntero se pueden realizar con las operaciones normales para coma fija. Esto quiere decir lo siguiente en cualquier puntero:
Suma de 1: El puntero aumenta al siguiente Bit Suma de 8: El puntero aumenta al siguiente Byte, el número de Bit permanece invariante.
Ejemplos:
STEP 7
Analogía en el STEP 5
L P#M 2.3
Carga el puntero para la M2.3
L P#4.5
Carga el puntero para el Byte4, Bit 5
.......
+D
Resultado: El puntero apunta a la M7.0, es
.......
decir, estas 3 instrucciones tienen el mismo significado que: L P#M7.0 .......
.......
L P#DBX 2.3
Carga el puntero para el Bit de datos global 2.3
L 16
Carga 16
-D
El puntero se reduce en 16 Bits, es decir, estas 3 instrucciones tienen el mismo significado que: L P#DBX0.3
.......
.......
.......
En los cálculos con punteros de área, sólo se puede utilizar un puntero con denominación de área (diferente a cero). En caso contrario, las posiciones del identificador de área se "suman" o "restan", y aparece una identificación no válida. Direccionamiento indirecto por memoria con ayuda del puntero de área Ejemplos:
STEP 7
Analogía en el STEP 5
L P#2.0
Carga el puntero para el L KF +2 Byte2, Bit 0
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, ] 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 0.0 ..... P 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 ] y AUF DB[DIW ]. 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]
SI
T[DBW2]
SI
T[#zeit_x]
// El número de temporizador se encuentra en la palabra de marcas 2, codificado en hexadecimal. // 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. // La variable "#zeit_x" es una variable temporal de tipo WORD.
Conceptos de búsqueda Direccionamiento indirecto, llamada a un DB
puntero a DB
Supongamos que tu DB es el DB1, con datos byte ( Valen tambien nombres simbólicos) AUF DB1 // ABRO EL BLOQUE EN EL QUE VOY A LEER LAR1 P#DBX0.0 // MANDO EL PUNTERO AL INICIO DEL BLOQUE O DONDE SEA NECESARIO L 100 // ULTIMO VALOR A LEER DEL BLOQUE L #actual //VALOR ACTUAL DEL PUNTERO AL BLOQUE : VARIABLE DE MEMORIA MWxx ==I // COMPARO LOS VALORES SPBN SIG // SI NO SON IGUALES SIGO L 0 // SI SON IGUALES CARGO 0 T #actual // Y REINICIO EL CONTADOR SIG: NOP 0 L4 L #actual +I // SUMO 4 AL VALOR ACTUAL T #actual L #actual // CARGO EL VALOR ACTUAL L 4 // CARGO 4 -I // RESTO 4 DEL VALOR ACTUAL SLW 3 //AGREGO DESPLAZAMIENTO DEL POINTER. EN ESTE CASO ASUMO BYTE. +AR1 // SUMO EL VALOR OBTENIDO AL REGISTRO DE DIRECCIONES,CON LO CUAL MI PUNTERO AHORA ESTA DONDE LO NECESITO L DBD [AR1,P#0.0] // LEO EL VALOR EN PALABRA DOBLE // DE LA DIRECCION ACTUAL a partir de aquí colocas las instrucciones de lo que harás con el valor obtenido, en el próximo scan el puntero se incrementará en 4 con lo que iras a parar a la siguiente palabra doble del DB. Por supuesto la variable #actual debe ser estática o bien puede ser una marca, para que no se pierda al salir del bloque en el que coloques tu código, el valor que puse de 100 para el último valor es simplemente un ejemplo, ahí colocas tu último valor a leer +4. Si en vez de leer los valores de la tabla quisiera escribirlos en una tabla de igual tamano, en la ultima instruccion tendria que poner: T DBD [AR1,P#0.0] en vez de: L DBD [AR1,P#0.0] Gracias y perdon por preguntar tanto
Puntero a DB por Ricardo » Dom Jun 15, 2003 3:53 am
Cuando yo puse #actual lo que quise indicar es que esa será la variable en la que se va almacenando un valor auxiliar, que es el que se me irá sumando al puntero que fijo al principio para ir avanzando a lo largo del DB, este valor auxiliar lo puedes tranquilamente almacenar ( si no quieres usar variables estáticas del bloque) en una palabra de marcas, o sea para el caso es lo mismo que en lugar de #actual coloques por ejemplo MW10, esta variable es unvalor dinámico que irá cambiando a medida que tu programa vaya leyendo los sucesivos valores se incrementará como ves de 4 en 4(0, 4, 8, 12, 16,...). Esto es mas facil de ver si analizas como funciona el código: Lo primero que haces es fijar un puntero al comienzo de la zona del bloque de datos de la que quieras leer: LAR1 P#DBX0.0 Con esto lo que haces es decirle a tu programa "bien, ahora voy a comenzar a trabajar a partir del Byte 0 Bit 0 del bloque que tengo abierto", este es el concepto del puntero, le indico el punto de referencia sobre el que voy a trabajar, si por ejemplo quisieras empezar a trabajar a partir de tu segundo dato obviando el primero, el puntero sería P#DBX4.0 ( ya que cada palabra ocupa 4 Bytes), o sea le diría a mi programa: " comenzamos a leer el bloque pero a partir del Byte 4 Bit 0". En el primer ciclo de lectura el valor de #actual es 0 ya que no tenía ningun valor previo. Lo primero que hago a continuacion es verificar si llegue al final de la lectura, obviamente esto no es así ya que #actual ( o MW10 si usaste una marca) es 0, sumo ahora 4 al valor de #actual para ya prepararlo para el siguiente ciclo, obviamente si usara el valor que ahora tiene #actual para sumarle al puntero leería la palabra doble que empieza en 4.0 en el DB, es decir estaría saltandome el primer dato, por lo cual ejecuto un pequeño truco: le resto 4 al valor de #actual pero no transfiero el valor a #actual, con lo cual el resultado solo me queda en el ACU1 este resultado lo desplazo 3 lugares a la izquierda y lo sumo al puntero con la instruccion +AR1 con lo cual ahora estoy posicionado en----> DBX0.0 + #actual - 4, como en este primer ciclo #actual es 4 --->AR1 es 0 por lo que no me moví del inicio del bloque y leo la primera palabra doble del DB con la instrucción: L DBD [AR1,P#0.0] En el siguiente ciclo sumo 4 a #actual con lo que ahora valdrá 8 y, luego de la resta y la suma, AR1 será 4 con lo cual leo mi segundo valor, y así sucesivamente (el ciclo se repite hasta que el valor de #actual sea = al fin del bloque +4), y luego reinicia desde 0 nuevamente. Respecto del valor de control para verificar si llegaste al final de tu DB, debes tener en cuenta lo siguiente: Las direcciones de los PLC´s estan expresadas en Bytes, y las correspondientes a los DB no son la excepción, por lo que si consideras que las palabras dobles ocupan 4 Bytes y tu quieres leer 15 valores de palabras dobles deben hacer: 15*4= 60 Es decir tu bloque de datos tendrá una longitud de 60 Bytes, por lo que le valor de control será precisamente ese, es decir deberás contrastar #actual contra 60 para verificar si llegaste al final del bloque, ya que no debes poner tu número de dato (1,2,3,4,etc.) sino la direccion en el DB ( ya que trabajas con punteros a direcciones). Espero te haya aclarado algo mas, sino pregunta nuevamente. Saludos Ricardo
Tipo y descripción
Tamaño en Bits
FormatoOpciones
Rango y notación numérica
Ejemplo
(Valores máximo y mínimo)
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)
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)
DWORD (Doble Palabra)
32
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 Máximo: +/-3.402823e+38 flotante IEEE 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 TOD#0:0:0.0 a TOD#23:59:59.999 de 1ms
TIME_OF_DAY#1:10:3.3
CHAR (Carácter)
8
Caracteres ASCII
´B´
´A´, ´B´ etc.
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 1
MW 1
Transferimos el contenido del ACCU 1 a la palabra de marcas
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:= 0.
EW 0
La Variable CONTADOR corresponde con la dirección EW
SALIDA:=
A 4.0
La variable SALIDA corresponde con la dirección A 4.0.
Nota:
El formato de las variables del DB de Instancia y la dirección asignada en el parámetro del FB deben de ser iguales.
Direccionamiento en STEP 7 Automatización Industrial
Índice TEMA – Direccionamiento en STEP7 1. – Tipos de Direccionamiento 1.1 – Direccionamiento Inmediato 1.2 – Direccionamiento Directo 1.3 – Direccionamiento Indirecto 2. – Punteros y Tipos de Punteros 2.1 – Punteros de Número 2.2 – Punteros a Área 2.3 – Punteros a DB 2.4 – Punteros ANY 3. – Direccionamiento Indirecto por Memoria 4. – Direccionamiento Indirecto por Registro 5. – Operaciones Relacionadas con Registros
Tipos de Direccionamiento Tipos de Direccionamiento • Direccionamiento Inmediato • Direccionamiento Directo • Direccionamiento Indirecto
Direccionamiento Inmediato El valor del operando está codificado directamente en la operación Ejemplo: L W#16#3478
Direccionamiento Directo La dirección del operando se encuentra codificada en la operación Ejemplo: L MW 122; A I 1.2
Direccionamiento Indirecto El operando indica la dirección del valor que va a procesar la operación. Ejemplo: A I[MD 2];
Direccionamiento Inmediato Direccionamiento Inmediato El valor del operando está codificado directamente en la operación, es decir que la operación va seguida directamente del operando con el que operará. Por otra parte, una operación también puede aportar su propio valor.
Direccionamiento Directo Direccionamiento Directo La dirección del operando se encuentra codificada en la operación, es decir, el operando indica la dirección del valor que va a procesar la operación. El operando se compone de dos partes: • un identificador (p. ej. “IB” para “byte de entrada”) • una dirección exacta dentro del área de memoria indicada por el identificador. El operando indica directamente la dirección del valor.
Direccionamiento Directo Área
Ejemplo Tipo de Acceso
Descripción
I
I 0.0
Bit, Byte, Palabra, Doble palabra
Imagen de Proceso de Entradas
Q
QB 4
Bit, Byte, Palabra, Doble palabra
Imagen de Proceso de Salidas
PI
PI W 10 Byte, Palabra, Doble palabra
Entradas de periferia
PQ
PQ D 24 Byte, Palabra, Doble palabra
Salidas de periferia
M
M 100.0 Bit, Byte, Palabra, Doble palabra
Marcas
T
T 15
-
Temporizadores
C
C 80
-
DB
DBX0.0 Bit, Byte, Palabra, Doble palabra
Datos de un DB global
DI
DIW20
Bit, Byte, Palabra, Doble palabra
Datos de un DB de instancia
L
LB 34
Bit, Byte, Palabra, Doble palabra
Datos locales
Contadores
Direccionamiento Indirecto Direccionamiento Indirecto • Permite asignar direcciones que no son conocidas hasta la ejecución • Permite múltiples procesamientos de partes del programa • Como las direcciones no son calculadas hasta la ejecución hay un riesgo de que áreas de la memoria sean sobrescritas.
Tipos de Direccionamiento Indirecto Direcciones Indirectas Direcciones que pueden ser especificadas de Modo Indirecto Direccionamiento
Puntero
E/S de Periferia, Entradas, Salidas, Bits de Memoria, Datos Globales, Datos de Instancia, Datos Locales, Datos Temporales
Indirecto por Memoria Indirecto por Registro
Puntero de Área
Temporizadores (T), Contadores (C ), Funciones (FC´s), Bloques Funcionales (FB´s), Boques de Datos (DB´s)
Indirecto por Memoria
Número de 16 bits
Tipos de Direccionamiento Indirecto • • • •
Direccionamiento Indirecto por Memoria con Número Direccionamiento Indirecto por Memoria con Puntero de Área Direccionamiento Indirecto por Registro e Intraárea (área interna) Direccionamiento Indirecto por Registro e Interárea (área cruzada)
Punteros y Tipos de Punteros Punteros Un puntero se usa para apuntar a una dirección
Tipos de Punteros • Punteros a Área: son de 32 bits de longitud y contiene una dirección específica • Punteros a DB: son de 48 bits de longitud y contienen el número de DB además del puntero a área
• Punteros ANY: son de 80 bits de longitud y contienen especificaciones adicionales (como tipo de dato de la dirección) además del puntero a DB
Punteros a Área (I) Definición El puntero a área contiene la dirección y es posible también el área direccionada:
Tipos de Punteros a Área 1. Intraárea (Área Interna): El puntero no especifica el área direccionada 2. Interárea (Área Cruzada): El puntero especifica el área direccionada
Notación Constante 1. Intraárea (Área Interna): P#y.x 2. Interárea (Área Cruzada): P#Zy.x
Ejemplo: P#22.0 Ejemplo: P#M22.0 • x=dirección bit; y=dirección byte, Z=área Con el área se especifica el identificador de la dirección
Punteros a Área (II) Puntero a Intraárea
Byte n 00000000
Byte n+1
Byte n+2
00000yyy yyyyyyyy yyyyyxxx Dirección byte
Puntero a Interárea
Byte n+3
Byte n
Byte n+1
Byte n+2
Dirección bit
Byte n+3
10000RRR 00000yyy yyyyyyyy yyyyyxxx Área operando
Código:
Dirección byte
Dirección bit
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 001 010 011 100 101 110 111 Rango de direcciones: Y...Y Dirección Byte XXX Dirección Bit
Periferia Entradas (PII) Salidas (PIQ) Marcas Datos en DB Global (DB) Datos en DB de instancia (DI) Datos locales del módulo (L) Datos locales del módulo anterior (V)
Punteros a DB Definición Un puntero a DB, además de un puntero a área, contiene un número de bloque de datos como un número positivo INT en adición al puntero a área. Se especifica el Bloque de Datos si el puntero de área contiene las áreas de dirección de DB global o DB de instancia. En los demás casos los dos primeros bytes son cero.
Notación Constante P#DataBlock.DataAddress Puntero a DB Byte n Byte n+1
Número de Bloque de Datos
Byte n+2 Byte n+3 Byte n+4 Byte n+5
Puntero a Área
Ejemplo: P#DB10.DBX 20.5
Punteros ANY (I) Definición Un puntero ANY, además de un puntero a DB, contiene un tipo de datos y un factor de repetición.
Tipos de Punteros ANY 1. Variables con Tipos Datos: El puntero contiene un puntero DB 2. Variables con Tipos Parámetros: El puntero contiene un número (temporizadores, Contadores y Bloques)
Notación Constante 1. Variables con Tipos Datos: P#[Bloque de Datos.] Dirección Tipo Cantidad 2. Variables con Tipos Parámetros : L#Número Tipo Cantidad
Ejemplos:
P#DB11.DBX 30.0 INT 12 ; P#M 16.0 BYTE 8 ; P#I 18.0 WORD 1 ; P#I 1.0 BOOL 1 ; L#10 TIMER 1 ; L#2 COUNTER 1 ;
Área con 12 palabras en DB11 desde DBB30 Área con 8 Bytes desde MB16 Palabra de Entradas IW18 Entrada I1.0 Temporizador T10 Contador C2
Punteros ANY (II) Puntero ANY Puntero ANY para Tipos Datos para Temp/Cont Byte n Byte n+1 Byte n+2 Byte n+3 Byte n+4 Byte n+5
16#10
16#10
16#10
Tipo
Tipo
Tipo
Cantidad
Cantidad
Cantidad
Número de Bloque de Datos
16#0000
16#0000
Tipo
Byte n+6 Byte n+7 Byte n+8 Byte n+9
Puntero ANY para Bloques
Puntero a Área
16#00
Número
16#0000
Número
Campo Tipo en el Puntero ANY Tipos de Datos Elementales 01 BOOL 02 BYTE 03 CHAR 04 WORD 05 INT 06 DWORD 07 DINT 08 REAL 09 DATE 0A TOD 0B TIME 0C S5TIME
Tipos de Datos Complejos 0E DT 13 STRING Tipos Parámetro 17 BLOCK_FB 18 BLOCK_FC 19 BLOCK_DB 1A BLOCK_SDB 1C COUNTER 1D TIMER Puntero Cero 00 NIL
Direccionamiento Indirecto por Memoria (I) En el direccionamiento indirecto por memoria, el operando indica la dirección del valor que va a procesar la operación. El operando se compone de las siguientes partes: • Un identificador (p. ej. “IB” para “byte de entrada”) • Una palabra que contiene el número de un temporizador (T), de un contador (Z), de un bloque de datos (DB), de una función (FC) o de un bloque de función (FB) • Una palabra doble que contiene la dirección exacta de un valor del área de memoria, indicada por el identificador. Si utiliza un operando indirecto por memoria que esté almacenado en el área de memoria del bloque de datos, deberá abrir primero el bloque de datos, utilizando a tal efecto la operación Abrir bloque de datos. Ejemplo:
OPN DB10 L IB [DBD20]
Direccionamiento Indirecto por Memoria (II) El operando indica la dirección del valor o del número de forma indirecta, es decir, utilizando el puntero. Esta palabra o palabra doble puede encontrarse en una de las siguientes áreas: • Marca (M) • Bloque de datos (DB) • Bloque de datos de instancia (DI) • Datos locales (L).
Direccionamiento Indirecto por Memoria con un Número (III) El direccionamiento indirecto con un número puede considerarse como otro tipo de direccionamiento el Direccionamiento Indexado. Es necesaria la utilización de un valor numérico de 16 bits (WORD) que debe de encontrarse en una de las siguientes áreas: • Marcas (MW) • Bloques de Datos Globales (DBW) • Datos Locales (LW) • Bloques de Datos Instancia (DIW) Los Punteros de Palabra contienen números y se utilizan para direccionar elementos como: • Temporizadores (T) • Funciones (FC´s) • Contadores (C ) • Bloques de Función (FB´s) • Bloques de Datos (DB´s)
Formato del Puntero de Palabra
Direccionamiento Indirecto por Memoria (IV) Direccionamiento Indirecto por Memoria con Número L 133 T MW 20 OPN DB[MW20] ..... SP T[MW 20]
//cargar puntero en ACU1 //salvar en palabra de memo. //abrir DB global //arrancar temporizador
OPN
DB
[MW 20] MW 20 133
OPN
DB
133
Direccionamiento Indirecto por Memoria con Puntero a Área L P#30.0 T MD 10 L MW[MD10] ..... A M[MD 10]
//cargar puntero en ACU1 //salvar en palabra doble //asignar dirección digital //asignar dirección binaria
A
M
[MD 10] MD 10 P#30.0
A
M
30.0
Direccionamiento Indirecto por Registro (I) Direccionamiento Indirecto por Registro e Intraárea • La dirección del área interna está definida en uno de los dos registros de direcciones (AR1 ó AR2). • El contenido del registro de direcciones es un puntero a área interna • Con el direccionamiento indirecto por registro, se especifica un offset que se suma al registro de direcciones • La suma se realiza cuando la operación es ejecutada sin modificar el contenido del registro de direcciones • El offset tiene el formato de un puntero a área • En direccionamiento indirecto de direcciones digitales, el offset debe tener como dirección bit “0” • El máximo valor es: P#8191.7
Direccionamiento Indirecto por Registro (II) Direccionamiento Indirecto por Registro e Interárea • La dirección general está definida en uno de los dos registros de direcciones (AR1 ó AR2). • El contenido del registro de direcciones es un puntero en general • Con el direccionamiento general, se escribe el área de direcciones junto con el puntero a área dentro del registro de direcciones • Con direccionamiento indirecto sólo se especifica un identificador para la dirección: No especificar un bit, “B” para byte, “W” para palabra y “D” para doble palabra • Se especifica con un offset con dirección bit
Direccionamiento Indirecto por Registro (III) Direccionamiento Indirecto por Registro e Intraárea LAR1 P#10.0 //cargar puntero dir. reg. 1 ....... T MW[AR1,P#4.0] //asignar dirección digital ..... A I[AR1,P#2.1] //asignar dirección binaria
AR1 P#10.0 A
I
+
[AR1, P#2.1]
P#2.1 A
I
12.1
Direccionamiento Indirecto por Registro e Interárea LAR1 P#M12.0 ...... L B[AR1,P#4.0] ..... = [AR1, P#0.7]
AR1
//cargar puntero dir. reg. 1
P#M12.0 //asignar dirección digital
L
B
+
[AR1, P#4.0]
// asignar dirección binaria
P#4.0 L
M B
16.0
Operaciones Relacionadas con los Registros Operaciones relacionadas con AR1 y AR2 Operación
Operando
LAR1
Función Cargar contenido de ACU1 en registro de direcciones AR1.
LAR1
AR2
Cargar contenido del AR2 en registro de direcciones AR1.
LAR1
Carga el contenido del área direccionada en el registro de direcciones AR1.
LAR1
P#{área}, byte{.bit}
Cargar el contenido de la dirección en registro de direcciones AR1.
LAR2
Cargar contenido de ACU1 en registro de direcciones AR2.
LAR2
Carga el contenido del área direccionada en el registro de direcciones AR2.
LAR2
P#{área}, byte{.bit}
Cargar el contenido de la dirección en registro de direcciones AR2.
TAR
Intercambia el contenido de AR1 y AR2.
TAR1
Transfiere el contenido del registro de direcciones 1 AR1 al ACU1.
TAR1
AR2
Transfiere contenido del AR1 en registro de direcciones AR2.
TAR1
Transfiere el contenido del registro de direcciones 1 AR1 al destino direccionado.
TAR2 TAR2
Transfiere el contenido del registro de direcciones 2 AR2 al ACU1.
+AR1 +AR1
Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR1. P#Byte.Bit
+AR2 +AR2
Transfiere el contenido del registro de direcciones 2 AR2 al destino direccionado.
Suma una constante puntero al contenido del registro de direcciones AR1. Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR2.
P#Byte.Bit
Suma una constante puntero al contenido del registro de direcciones AR2.
Ejemplos: Direccionamiento Indirecto (I) Ejemplo 1:
Ejemplo 2:
L T OPN
L T L
11 MW 60 DB[MW60]
OPN DB 11
P#24.0 MD 50 IW [MD50]
L IW 24
Dirección Tipo de Acceso Zona de Acceso
Ejemplos: Direccionamiento Indirecto (II) Ejemplo 3:
AR1
31 00000000
23 00000000
15 00000000
7 0 01010000
00000RRR
00000BBB
BBBBBBBB
BBBBBXXX
LAR1 P#10.0 // Preselección L MW [AR1,P#200.0]
+200 L
Tipo Dato
Ejemplo 4:
AR1
Zona de Registro Constante de Acceso Dirección Desfase
MW 210 Instrucción Ejecutada
31 10000001
23 00000000
15 00000011
7 0 00100000
10000RRR
00000BBB
BBBBBBBB
BBBBBXXX
LAR1 P#I 100.0 // Preselección L B [AR1,P#110.0]
+210 L
Zona de Registro Constante de Acceso Dirección Desfase
IB 210 Instrucción Ejecutada
Ejemplos de Direccionamiento (III) Ejemplo 5: Memoria con Número L T A
L T A L
Ejemplo 7: Registro Intraárea M01:
Ejemplo 6: Memoria con Puntero
5 DBW100 T[DBW100]
LAR1 P#0.0 L 8 T MW 20 A I[AR1, P#0.0] = Q[AR1, P#4.0] +AR1 P#0.1 L MW 20 LOOP M01
P#0.0 MD 100 I[MD 100] MD[MD 100]
Ejemplo 8: Registro Interárea
M02:
LAR1 P#I0.0 LAR2 P#Q4.0 L 8 T MW 20 A [AR1, P#0.0] = [AR2, P#0.0] +AR1 P#0.1 +AR2 P#0.1 L MW 20 LOOP M02
Ejemplos: Direccionamiento Indirecto (IV) Comparación STEP5 STEP7
Ejemplo 9: STEP 7
STEP 5
L 11 T MW 60 OPN DB[MW 60]
L T B A
KF11 MW 60 MW 60 DB 0
L T B L
KF 24 MW 50 MW 50 IW 0
L P#24.0 T MD 50 L IW [MD50]
OPN DB 11 (A DB 11)
L IW 24
Curso SIMATIC S7 Nivel II
Direccionamiento indirecto Abril 2003
SIMATIC S7 NIVEL II Dir_indirecto.ppt
1
Direccionamiento directo (I)
Zona de memoria:
E
0
•E -> Entrada •A -> Salida •T -> Temporizador •M -> Marca •DB -> Módulo de datos •P -> Acceso directo (PA, PE)
.0 Número de bit (0 - 7) Número de byte (cada zona tendrá su rango)
SIMATIC S7 NIVEL II Dir_indirecto.ppt
2
Direccionamiento directo (II)
Área Ejemplo Tipo de Acceso
Descripción
E
E 0.0
Bit, Byte, Palabra, Doble Palabra Imagen de Proceso Entradas
A
AB 4
Bit, Byte, Palabra, Doble Palabra Imagen de Proceso Salidas
PE
PEW 10
Byte, Palabra, Doble Palabra
Entradas de Periferia
PA
PAD 24
Byte, Palabra, Doble Palabra
Salidas de Periferia
M
M 100.0
Bit, Byte, Palabra, Doble Palabra Marcas
T
T15
-
Temporizadores
C
Z80
-
Contadores
SIMATIC S7 NIVEL II Dir_indirecto.ppt
3
Direccionamiento directo (III) Dentro de cada byte, palabra o doble palabra, los bits se numeran de derecha a izquierda, de 0 al 7. Dir. byte: área de memoria + B + nº de byte
E 124.0 EB124
Dir. palabra: área de memoria + W + nº de su 1er byte EW124 => EB124 EB125 Dir. doble palabra: área de memoria + D + nº de su 1er byte MD0 => MB0 MB1 MB2 MB3
SIMATIC S7 NIVEL II Dir_indirecto.ppt
4
Direccionamiento directo (IV) Direccionamiento directo Es necesario especificar: ⌧Zona de memoria ⌧Tipo de acceso ⌧Posición de byte ⌧Posición de bit U E 125.3 L E B 124 T M B 12
U T0 U Z3 UC FC1 CALL FC3 L DB2.DBW3
SIMATIC S7 NIVEL II Dir_indirecto.ppt
5
Direccionamiento indirecto Se puede acceder de forma indirecta a las posiciones de memoria. L T L
E
P#124.0 MD 50 W
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.
[MD50]
Zona Tipo de Dirección acceso L 11 T MW 60 AUF DB[MW 60]
L E W 124
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.
AUF DB 11
SIMATIC S7 NIVEL II Dir_indirecto.ppt
6
Direccionamiento Indirecto Direccionamiento indirecto con marcas MW o palabra de DB ⌧Se pueden utilizar con llamadas a módulos o para direccionar contadores, temporizadores, FC’s, FB’s y DBs. En la marca almacenamos el número del contador, temporizador o DB. L8 T MW10 U Z [MW10]
// Carga un 8 en ACU1 // Lo transfiere a la palabra de marcas 10 // Equivale a U Z 8: comprueba el contador 8
MD o doble palabra de DB ⌧Se pueden utilizar para el resto de direccionamientos. El valor del puntero deberá de ser introducido como constante de puntero en una doble palabra. L P#124.0 T MD50 L EW[MD50]
---
SIMATIC S7 NIVEL II Dir_indirecto.ppt
L EW124
7
Direccionamiento indirecto Registros de direcciones (AR1 y AR2) Registros de 32 bits utilizados para direccionamiento indirecto Contiene la dirección interna de memoria para realizar los direccionamientos. Cuando hacemos p#E124.0, se genera un puntero, que tiene la siguiente forma: Configuración: 31 10000 RRR Código:
23 00000 BBB
15 BBBBBBBB
7 0 BBBBBXXX
Bit 31=1 El registro contiene una dirección y la zona de memoria . Bit 31=0 El registro contiene una dirección y no la zona de memoria . Zonas de memoria (si está disponible): RRR Identificador: 000 Periferia 001 Entradas (PAE) 010 Salidas (PAA) 011 Marcas 100 Datos en DB 1 (DB) 101 Datos en DB 2 (DI) 110 Datos locales del módulo (variables de un FC) Rango de direcciones: B...B Dirección Byte XXX
Dirección Bit
SIMATIC S7 NIVEL II Dir_indirecto.ppt
8
Direccionamiento indirecto
• La carga del registro se realiza con las instrucciones LAR1 y LAR2. • Las instrucciones TAR1 y TAR2 se utilizan para ver el contenido de los registros de direcciones. • El formato puntero P# hace posible el introducir la dirección de memoria en el registro de direcciones (byte/bit). Ejemplo:
LAR1 P# E 100.0 El registro 1 contiene la dirección de la entrada 100.0 .
Carga del registro de direcciones L P#125.0 - 0000 0000 0000 0011 1110 1000 LAR1 L P#E125.0 - 1000 0001 0000 0011 1110 1000 LAR1 SIMATIC S7 NIVEL II Dir_indirecto.ppt
} }
LAR1 P#125.0 LAR1 P#E125.0
9
Direccionamiento Indirecto •Una vez almacenado el puntero con LAR1, podemos utilizarlo con una instrucción indirecta. •En la instrucción indirecta hay que especificar una zona de acceso (E, A, M, T, C, etc..), un tipo de acceso (byte, palabra, etc.) y un desfase. LAR1 P#10.0
// Preselección
L M
[AR1,
W
10
+ 200
P#200.0] L MW 210
Tipo Dato
Tipo Registro Constante de Acceso Dirección Desfase
SIMATIC S7 NIVEL II Dir_indirecto.ppt
Instrucción Ejecutada
10
Direccionamiento Indirecto
También es posible utilizar el direccionamiento indirecto para direccionar bits. Ejemplo: LAR1 P#E 100.0 U [AR1, P#110.5] // Se quiere acceder no a la entrada 100.0 : // si no a la 100.0+110.5 =210.5 : : “U E 210.5”
// Equivale a esta instrucción
SIMATIC S7 NIVEL II Dir_indirecto.ppt
11
Direccionamiento Indirecto Otras funciones LAR1 LAR1 P#valor LAR2 LAR2 P#valor LAR1 AR2 TAR1 TAR1 MD20 TAR +AR1 +AR2 +AR1 P#valor
AR2 --> AR1 AR1 --> ACU1 AR1 --> MD20 Intercambia AR1 y AR2 AR1 + ACU1 --> AR1 AR1 + valor --> AR1
En estas funciones, cuando se utiliza una marca, ésta debe ser de 32 bits, porque el AR1 y AR2 lo son. Los valores que se introducen o suman a AR1 y AR2 deben ser punteros. SIMATIC S7 NIVEL II Dir_indirecto.ppt
12
Ejercicio 1
Realice un programa que active el bit de la palabra de salida AW124 que indique el valor que haya en el EB124. Para valores no válidos se apagarán todos los bits de salida. (Realice el ejercicio primero con saltos y posteriormente utilizando direccionamiento indirecto)
SIMATIC S7 NIVEL II Dir_indirecto.ppt
13
Ejercicio 2 Realice un programa que lea de un DB su contenido a través de dir. Indirecto. Para ello suponga que en dicho DB se registra el contenido de una tabla y que se desea acceder a cualquier posición de esa tabla mediante EB124, y que en AB124 se representa el contenido de dicha tabla.
SIMATIC S7 NIVEL II Dir_indirecto.ppt
14
Ejecución Especial Automatización Industrial
Índice TEMA – Ejecución Especial 1. – Ejecución de Programas 2. – Ejecución Cíclica de Programas 2.1 – Tiempos de Ciclo 2.2 – Programación del OB1 3. – Ejecución en el Arranque 4. – Ejecución por Interrupciones 5. – Ejecución por Tiempo – Alarmas Cíclicas 6. – Ejecución por Tiempo – Alarmas Horarias 7. – Ejecución por Tiempo – Alarmas de Retardo 8. – Ejecución por Error – Alarmas de Error
Ejecución de Programas – Módulos de Organización
OB10 : Interrupción Horaria OB1 se ejecuta continuamente OB82: Error Asíncrono
... a menos que sea interrumpido por otro OB
Módulos de Organización (OB´s) OB1 Programa Principal Ejecución cíclica hasta ser interrumpido por un OB con una más alta prioridad. Una vez interrumpido por el sistema operativo el OB1 rompe su ciclo y ejecuta el OB requerido.
El sistema operativo llama a otros OBs para utilizarlos:
Ejemplo de OB10: Ejecuta este módulo cada minuto. Empieza a las 9:00 Ejemplo de OB20: Ejecuta este módulo 2.35” después de detectar un evento Ejemplo de OB82: Ejecuta este módulo si hay un cortocircuito en la entrada analógica PIW532
Almacenamiento de Datos de un OB Interrumpido Pila de Interrupción (Pila I) Contenido acumuladores ACCU1,ACCU2 El sistema llama a un nuevo OB
Antes de ejecutar el nuevo OB, se salvan los registros del módulo interrumpido
Contenido registros direcciones AR1, AR2 Contenido registros módulos datos DB, DI Puntero en la Pila L Palabra Estado, Registro MCR, Puntero Pila B
Pila de Módulo (Pila B) Registros DB y DI Puntero de datos temporales (pila L) Número de Módulo Dirección de retorno
OB´s de Error y de Interrupción •
Los OBs se encuadran dentro de dos categorías; sus respectivas funciones determinan qué dispara el punto de ruptura del OB que se esté ejecutando. – OBs que realizan tareas periódicas (Interrupción Horaria) • Se ejecuta en una fecha u hora del día especificada • Se ejecuta tras una demora especificada después de un evento • Se ejecuta en un ciclo especificado – OBs que reaccionan a condiciones de error (Interrupción Error) • Se ejecuta si la CPU detecta un error de proceso o de hardware • Se ejecuta si la CPU detecta un error que no está relacionado con una instrucción específica del programa • Se ejecuta si la CPU detecta un error que puede ser asociado al procesamiento de una instrucción específica del programa
Módulos de Organización de Alarmas Tipo de Alarma Ciclo libre Alarmas horarias Alarmas de retardo Alarmas cíclicas Alarmas de proceso Errores asíncronos Arranque Errores síncronos
OB´s Prioridad Comentarios OB1 1 Bloque de organización para la (OB1) ejecución cíclica OB 10 a OB 17 2 Bloques de organización para la (OB 10) alarma horaria (OB 10 a OB 17) OB 20 a OB 23 3a6 Bloques de organización para (OB 20) alarma de retardo (OB 20 a OB 23) OB 30 a OB 38 7 a 15 Bloques de organización de alarma (OB 35) cíclica (OB 30 a OB 38) OB 40 a OB 47 16 a 23 Bloques de organización de alarma (OB 40) de proceso (OB 40 a OB 47) OB 80 a OB 87 26 ò 28 Bloques de organización para el (OB 82) tratamiento de errores OB 100 a OB 102 27 Bloques de organización de (OB 100) arranque (OB 100/OB 101/OB 102) OB 121 y OB 122 Bloques de organización para el tratamiento de errores
• Otros OB´s soportados por la CPU 315: • OB 80, OB 81, OB 85, OB 87, OB 121 y OB122
Ejecución Cíclica de Programas • La ejecución más común es la ejecución cíclica • Existen otros tipos de ejecuciones conducidas por eventos • En la mayoría de los casos, la ejecución de un programa conducido por eventos es un añadido a la ejecución cíclica • El programa principal es invocado desde el OB1: • se ejecuta con el nivel más bajo de prioridad • puede ser interrumpido por todos los otros tipos de procesamiento del programa • Al finalizar la ejecución del OB1 se actualizan las imágenes del proceso • Si se presenta un error en la actualización de las imágenes se llama al OB 85 (programa que se ejecuta ante errores) • Si no existe el OB 85, la CPU pasa a STOP
Tiempo de Ciclo (I) • • • •
El tiempo de ejecución del programa del OB 1 es supervisado El valor por defecto es 150 mseg. Se puede ajustar desde 1 mseg a 6 segundos en la configuración de la CPU Si el tiempo de procesamiento del programa principal es mayor que el tiempo fijado, llama al OB 80 (“error de tiempo”). Si el OB 80 no existe la CPU pasa a modo STOP. • El tiempo de ciclo ajustado debe cubrir: • El tiempo de procesamiento del OB1. Actualización de las imágenes • El tiempo de procesamiento de interrupciones de alta prioridad • Procesos de comunicación del sistema operativo • Acceso a la CPU desde un dispositivo de programación
SFC 43 RE_TRIGR: Arrancar de nuevo el tiempo de vigilancia de ciclo • Inicia de nuevo el tiempo de vigilancia de ciclo • No tiene parámetros
Tiempo de Ciclo (II) • El tiempo de ciclo es el tiempo que el S.O. necesita para: • ejecutar el programa cíclico • partes del programa que interrumpen al cíclico (ejecución otros OBs) • actividades del sistema (p.e. actualización de imágenes, ..) • El tiempo de ciclo se vigila • El tiempo de ciclo no es igual para cada ciclo
Tiempo de Ciclo (III) – Marcas de Ciclo
Variables Locales del OB1 Variable
Tipo de datos Descripción
OB1_EV_CLASS OB1_SCAN_1
BYTE BYTE
OB1_PRIORITY OB1_OB_NUMBR OB1_RESERVED_1 OB1_RESERVED_2 OB1_PREV_CYCLE OB1_MIN_CYCLE OB1_MAX_CYCLE OB1_DATE_TIME
Clase de evento e identificadores: B#16#11: activo Información de arranque B#16#01: Conclusión del rearranque completo(caliente) B#16#02: Conclusión del rearranque B#16#03: Conclusión del ciclo libre B#16#04: Conclusión del arranque en frío BYTE Prioridad: 1 BYTE Número de OB (01) BYTE Reservado BYTE Reservado INT Tiempo de ejecución del ciclo anterior (ms) INT Tiempo de ciclo mínimo (ms) desde el último arranque INT Tiempo de ciclo máximo (ms) desde el último arranque DATE_TIME Fecha y hora en que se solicitó el OB
SFC´s – Diagnóstico SFC 6 RD_INFO: Leer información de arranque del OB actual Parámetro RET_VAL TOP_SI
Declaración Tipo de datos Area de memoria Descripción OUTPUT INT E, A, M, D, L Información de error OUTPUT STRUCT D, L Información de arranque del OB actual START_UP_SI OUTPUT STRUCT D, L Información de arranque del último OB activado
SFC´s – Gestión del Reloj en Tiempo Real SFC 0 SET_CLK. Ajustar la hora Parámetro Declaración Tipo de datos Area de memoria Descripción PDT INPUT DT D, L, Entrada PDT para indican fecha y hora que se desea ajustar RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error.
SFC 1 READ_CLK. Leer la hora Parámetro Declaración Tipo de datos Area de memoria Descripción RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error CDT OUTPUT DT D, L En la salida CDT se emiten la fecha y la hora actuales.
SFC 64 TIME_TCK: Leer el cronómetro del sistema Parámetro Declaración Tipo de datos Area de memoria Descripción RET_VAL OUTPUT TIME E, A, M, D, L El parámetro tiene el cronometro del sistema, comprendido entre 0 a 2elevado a 31–1 ms.
SFC´s – Gestión del Contador de Horas de Funcionamiento (I) SFC 2 SET_RTM: Ajustar contador de horas de funcionamiento Parámetro Declaración Tipo de datos Area de memoria Descripción NR INPUT Byte E, A, M, D, L, Número del contador de horas Const. de funcionamiento que se desea ajustar. Valores posibles: 0a 7. PV INPUT INT E, A, M, D, L, Contiene ajuste para el contador Const. de horas de funcionamiento. RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error
SFC 3 CTRL_RTM: Arrancar y parar contador de horas de funcionamiento Parámetro Declaración Tipo de datos Area de memoria Descripción NR INPUT Byte E, A, M, D, L, Número del contador de horas Const. de funcionamiento que se desea arrancar o parar. Valores (0 - 7) S INPUT BOOL E, A, M, D, L, Arranca o para el contador Const. Se para con ”0”, arranca con”1” RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error
SFC´s – Gestión del Contador de Horas de Funcionamiento (II) • SFC 4 READ_RTM: Leer el contador de horas de funcionamiento Parámetro Declaración Tipo de datos Area de memoria NR INPUT Byte E, A, M, D, L, Const. CQ OUTPUT BOOL E, A, M, D, L CV OUTPUT RET_VA L OUTPUT
INT INT
E, A, M, D, L E, A, M, D, L
Descripción Número del contador de horas de funcionamiento. Valores: 0 a 7. Indica si contador está en marcha o parado. Un ”0” indica parado. Un ”1” indica en marcha. Emite el valor actual del contador. Parámetro con código de error
SFC´s – Varios SFC 25 COMPRESS: Comprimir la memoria de usuario Parámetro Declaración Tipo de datos Area de memoria Descripción RET_VAL OUTPUT INT E, A, M, D, L Información de error BUSY OUTPUT BOOL E, A, M, D, L Información si está activada la compresión con la SFC 25 (1si) DONE OUTPUT BOOL E, A, M, D, L Informa. si proceso a finalizado con con éxito (1 significa éxito)
SFC 46 STP. Poner la CPU en stop • No tiene parámetros
SFC 47 WAIT:. Retarda el tratamiento del programa de usuario Parámetro Declaración Tipo de datos Area de memoria Descripción WT INPUT INT E, A, M, D, L El parámetro WT contiene el tiempo de retardo en ms.
Ejecución en el Arranque • Previamente a que la CPU ejecute el programa principal se puede ejecutar una rutina de arranque • Mediante los módulos de ejecución en el arranque es posible fijar el comportamiento del autómata antes de la primera ejecución del programa • El módulo de organización asignado a cada tipo de arranque se ejecuta una sola vez en cada arranque • Mientras se ejecutan los módulos asignados al arranque no está activada la vigilancia de tiempo de ciclo • La CPU tiene 4 posibles estados, STOP, STARTUP, HOLD y RUN • El relacionado con la fase de arranque se denomina STARTUP
Modos de Operación de las CPU´s (I) 2 5 1
STARTUP
3
7
STOP 8 4
HOLD
RUN 6
(1) Alimentación al equipo. La CPU pasa a modo STOP (2) Si la llave esta en RUN o RUN-P, la CPU pasa a modo STARTUP (3) Posteriormente a modo RUN (4)(5) Error no reconocido o cambio de posición de la llave, paso a STOP (6)(7) En el modo HOLD el programa de usuario es testeado. Se puede conmutar a este modo desde STARTUP o RUN y retornar al modo original cuando el test es interrumpido (8) Se puede llevar la CPU a STOP desde el modo HOLD El comportamiento en el arranque se define en la configuración de la CPU
Modos de Operación de las CPU´s (II) • Existen tres modos de arrancar el equipo • arranque en frío (cold restart) • arranque completo • arranque en caliente (warm restart) • En el arranque en frío o completo, el programa principal se ejecuta desde el comienzo. En un arranque en caliente, continua el programa principal en el punto de interrupción y finaliza el ciclo. • Cada modo de arranque tiene asignado un módulo de organización • arranque completo, OB 100 • arranque en frío, OB 102 • arranque en caliente, OB 101 • si no existen ninguno de estos módulos se pasa al programa principal • En los modos STOP o HOLD los módulos de salida no están operativos • Cuando la ejecución cíclica comienza, los módulos están liberados • En el arranque en frío o completo, las imágenes del proceso son puestas a cero • Desde el OB 100 y OB 102, se pueden consultar entradas y activar salidas accediendo a periferia.
Modo STOP • Las CPUs se ponen en STOP: • cuando esta seleccionado este modo con la llave • cuando se conmuta de RUN a STOP • cuando se presenta un error no reconocible en la ejecución del programa • cuando se ejecuta la SFC 46 (STOP) • cuando se solicita desde el dispositivo de programación • La CPU introduce la razón del STOP en el buffer de diagnóstico, que puede ser consultado con el aparato de programación • En modo STOP el programa de usuario no es ejecutado • En modo STOP se puede hacer un reset de la memoria de usuario: • desde el selector de la CPU • desde el aparato de programación
Variables Locales de los OB´s de Arranque Variable OB100_EV_CLASS OB100_STRTUP
Tipo de datos Descripción BYTE Clase de evento e indicativos: B#16#13: activado BYTE Solicitud de arranque: B#16#81: Sol. manual de rearranque completo (en caliente) B#16#82: Sol. automática de rearranque completo (en caliente) B#16#83: Sol. manual de rearranque B#16#84: Sol. automática de rearranque B#16#85: Sol. manual de arranque en frío B#16#86: Sol. automática de arranque en frío
OB100_PRIORITY BYTE OB100_OB_NUMBR BYTE OB100_RESERVED_1 BYTE OB100_RESERVED_2 BYTE OB100_STOP WORD OB100_STRT_INFO DWORD
Prioridad: 27 Número de OB (100, 101 ó 102) Reservado Reservado Número del evento que ha llevado la CPU a STOP Informaciones complementarias sobre el arranque actual (tabla) OB100_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
Arranque Completo Arranque completo Inhibir módulos de salida
Borrar datos no remanentes
RUN
Inicializar módulos
Transferir imagen proceso de salidas
Ejecutar OB 100
Actualizar imagen proceso de entradas
Borrar imagen del proceso de salidas
Actualizar imagen proceso de entradas
Programa principal OB 1
Reset salidas del proceso
Liberar módulos de salida
Borrar imagen del proceso de entradas
SFC´s Para Programar OB´s de Arranque • Las Funciones de Sistema integradas (SFCs) permiten direccionar módulos y realizar comprobaciones previas a la ejecución cíclica del programa
• SFCs para direccionar módulos: SFC 5 GADR_LGC SFC 49 LGC_GADR SFC 50 RD_LGADR
Determinar la dirección lógica de un canal Determinar el slot de una dirección lógica Determinar direcciones lógicas de un módulo
• SFCs para transferir a registros: SFC 54 RD_DPARM SFC 55 WR_PARM SFC 56 WR_DPARM SFC 57 PARM_MOD SFC 58 WR_REC SFC 59 RD_REC
Leer parámetros definidos Escribir parámetros dinámicos Escribir parámetros predefinidos Parametizar módulo Escribir registros Leer registro
SFC 5 Parámetro Declaración Tipo de datos Area de memoria Descripción SUBNETID INPUT BYTE E, A, M, D, L Identificador del área: Const. - 0, en caso que el slot esté en bastidor central o de ampliación RACK INPUT WORD E, A, M, D, L, Número del bástidor en el caso de Const. Identificador de área = 0 SLOT INPUT WORD E, A, M, D, L, No de slot Const. SUBSLOT INPUT BYTE E, A, M, D, L, Receptáculo de submódulo Const. (sin submódulo 0) SUBADDR INPUT WORD E, A, M, D, L, Offset en el espacio de direcciones Const. de datos útiles del módulo RET_VAL OUTPUT INT E, A, M, D, L Informaciones de error IOID OUTPUT BYTE E, A, M, D, L Identificador del área: B#16#54: Entrada de periferia (PE) B#16#55: Salida de periferia (PA)
LADDR
OUTPUT
WORD
E, A, M, D, L
Dirección lógica del canal
SFC 49 Parámetro Declaración Tipo de datos Area de memoria Descripción IOID INPUT BYTE E, A, M, D, L, Identificador del área: B#16#54: Entrada de periferia (PI) Const. B#16#55: Salida de periferia (PQ)
LADDR
INPUT
RET_VAL AREA
OUTPUT INT OUTPUT BYTE
RACK OUTPUT SLOT OUTPUT SUBADDR OUTPUT
WORD
WORD WORD WORD
E, A, M, D, L, Const. E, A, M, D, L E, A, M, D, L E, A, M, D, L E, A, M, D, L E, A, M, D, L
Dirección lógica Informaciones de error Identificador del área: Indica cómo interpretar el resto de los parámetros de salida. No. de bastidor No. de slot Offset en el espacio de dirección de datos útiles del módulo
SFC 50 Parámetro Declaración Tipo de datos Area de memoria Descripción IOID INPUT BYTE E, A, M, D, L, Identificador del área: B#16#54: Entrada de periferia (PI) Const. B#16#55: Salida de periferia (PQ)
LADDR
INPUT
WORD
RET_VAL PEADDR
OUTPUT OUTPUT
INT ANY
E, A, M, D, L, Const. E, A, M, D, L E, A, M, D, L
PECOUNT OUTPUT
INT
E, A, M, D, L
PAADDR
OUTPUT
ANY
E, A, M, D, L
PACOUNT OUTPUT
INT
E, A, M, D, L
Una dirección lógica Informaciones de error Campo para direcciones PI, elementos de campo deben ser del tipo de datos WORD. Cantidad de direcciones PI devueltas Campo para las direcciones PA; los elementos de campo deben ser del tipo de datos WORD. Cantidad de direcciones PA devueltas
Ejecución por Interrupciones • El manejo de las interrupciones es siempre llevada por eventos • Cuando se presenta un evento, el sistema operativo interrumpe la ejecución del programa principal y llama a la rutina de atención al evento particular • Cuando finaliza la rutina de atención al evento, el sistema operativo retorna al programa principal continuando en el punto en el que se produjo la interrupción • Existen varios tipos de ejecuciones conducidas por eventos • En la mayoría de los casos, la ejecución de un programa conducido por eventos es un añadido a la ejecución cíclica • Las ejecuciones conducidas por eventos admiten una prioridad • La ejecución se puede permitir o inhibir con las SFCs de gestión de eventos de alarma: • SFC 39 DIS_IRT SFC 40 EN_AIRT • SFC 41 DIS_AIRT SFC 42 EN_IRT
Interrupciones del Hardware (I) • Las interrupciones de hardware permiten detectar inmediatamente en el programa de usuario eventos ocurridos en el control del proceso • STEP 7 ofrece los OB 40 a OB 47 para la ejecución por interrupción • En la CPU 315 soporta únicamente el OB 40 con prioridad 16 por defecto • Las interrupciones se parametrizan en la configuración del hardware • Se pueden parametrizar los módulos con capacidad de interrupción en fase de ejecución con las SFCs para transferir registros: • SFC 55 WR_PARM Escribir parámetros dinámicos • SFC 56 WR_DPARM Escribir parámetros predefinidos • SFC 57 PARM_MOD Parametrizar módulo • Por defecto las interrupciones de hardware no están permitidas • se puede especificar si se tiene que producir la interrupción con el evento • se permite modificar los parámetros dinámicamente (RUN) con SFCs • Las interrupciones de hardware son reconocidas en el módulo cuando el módulo de organización que contiene la rutina de atención a la interrupción ha finalizado su ejecución
Interrupciones del Hardware (II) • En la rutina de arranque los módulos no generan interrupciones hardware • El manejo de las interrupciones comienza con la transición a RUN • Si una interrupción hardware es generada pero no hay OB de atención a la misma, el S.O. llama al OB 85 (ejecución por error). Si el OB 85 no ha sido programado la CPU se va a stop • Las llamadas a los OBs pueden ser bloqueadas o habilitadas con las SFCs: • SFC 39 DIS_IRT Bloquear tratamiento de nuevos eventos de alarma • SFC 40 EN_IRT Habilitar tratamiento de nuevos eventos de alarma • Pueden ser retrasadas y habilitadas con los SFCs: • SFC 41 DIS_AIRT Retardar el tratamiento de eventos de alarmas • SFC 42 EN_AIRT Habilitar el tratamiento de eventos de alarmas
Configuración Hardware de Alarmas del Proceso
Variables Locales de OB´s de Alarma del Proceso Variable OB40_EV_CLASS
Tipo de datos Descripción BYTE Clase de evento e identificadores:
OB40_STRT_INF
BYTE
OB40_PRIORITY OB40_OB_NUMBR OB40_RESERVED_1 OB40_IO_FLAG
BYTE BYTE BYTE BYTE
B#16#11: Alarma está activada 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)
Prioridad parametrizada; valor prefijado: de 16 a 23 Número de OB (40 hasta 47) Reservado Módulo de entradas: B#16#54 Módulo de salidas: B#16#55 OB40_MDL_ADDR WORD Dirección básica lógica del módulo que ha activado la alarma OB40_POINT_ADDR DWORD En módulos digitales: Mapa de bits con los estados de las entradas en el módulo En módulos analógicos, CPs o IMs: Estado de alarma del módulo OB40_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
SFC´s Relacionados con Interrupciones (I) SFC 39 DIS_IRT: Bloquea tratamiento de alarma Parámetro Declaración Tipo de datos Area de memoria MODE INPUT BYTE E, A, M, D, L, Const. OB_NR INPUT INT E, A, M, D, L, Const. RET_VAL OUTPUT INT E, A, M, D, L
Descripción Define los eventos de alarma y de error asíncrono que se bloquean Nº del OB Si ocurre un error al procesar la función, el valor de retorno contiene el código.
SFC 40 EN_IRT: Habilita el tratamiento de alarma Parámetro Declaración Tipo de datos Area de memoria MODE INPUT BYTE E, A, M, D, L, Const. OB_NR INPUT INT E, A, M, D, L, Const. RET_VAL OUTPUT INT E, A, M, D, L
Descripción Define los eventos de alarma y error asíncrono que se habilitan Nº del DB Si ocurre un error al procesar la función, el valor de retorno contiene el código.
SFC´s Relacionados con Interrupciones (II) SFC 41 DIS_AIRT: Retarda el tratamiento de alarma Parámetro Declaración Tipo de datos Area de memoria Descripción RET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos (= cantidad de llamadas de la SFC 41)
SFC 42 EN_AIRT: Habilita el tratamiento de eventos de alarmas Parámetro Declaración Tipo de datos Area de memoria Descripción RET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos programados tras la ejecución de SFC 42 o código de error
Interrupciones de Proceso (I) Módulo de Entradas Analógicas
Si el valor del transmisor de nivel PIW 288 es mayor que el límite superior (8 voltios) o menor que el límite inferior (2 voltios) habilitados para esta entrada analógica, llama al OB40.
+27648 = 10V. + 8 V. Límite superior para la interrupción 0
+ 2 V.
Límite inferior para la interrupción
Interrupciones de Proceso (II) Tarjeta de Entradas Analógicas
+27648
Si el valor de la PIW 288 es mayor que el límite superior para este canal analógico, llama al OB40. Visualiza un mensaje de error.
+20000 Límite superior para la interrupción 0
AW0
SFC´s Relacionados con Interrupciones (III) SFC 55
SFC´s Relacionados con Interrupciones (IV) SFC 56
SFC´s Relacionados con Interrupciones (V) SFC 57 PARM_MOD: Parametrizar módulo Parámetro Declaración Tipo de datos Area de memoria Descripción REQ=1: Petición de escritura REQ INPUT BOOL E, A, M, D, L, 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, Const.
Dirección base lógica del módulo. En
E, A, M, D, L
Si ocurre un error al procesar la función,
un módulo mixto es necesario indicar la menor de las dos direcciones.
RET_VAL OUTPUT
INT
el valor de retorno contiene un código de error.
BUSY
OUTPUT
BOOL
E, A, M, D, L
BUSY = 1: La operación de escritura no ha finalizado aún.
Ejecución por Tiempo – Alarmas Cíclicas
• Una alarma cíclica es una interrupción que es generada en intervalos periódicos de tiempo. • La alarma permite ejecutar un programa concreto periódicamente, independientemente del tiempo de ejecución del programa cíclico • En STEP 7 se dedican a esta función desde el OB 30 al OB 38 • La CPU 315 dispone únicamente del OB 35 que tiene la prioridad 12 • Se puede fijar el intervalo de tiempo en el rango de 1 mseg a 1 minuto • El comienzo del tiempo para el intervalo de tiempo es el instante de la transición START UP a RUN • La ejecución se puede permitir o inhibir con las SFCs: • SFC 39 DIS_IRT SFC 40 EN_AIRT • SFC 41 DIS_AIRT SFC 42 EN_IRT
Interrupciones Cíclicas •
El OB de interrupciones cíclicas (OB35) permite interrumpir el programa a intervalos de tiempo fijos. Una vez activado, el OB35 se ejecutará según un intervalo de tiempo fijado al “Configurar el HW”.
OB35
OB35 OB1 se ejecuta continuamente
OB35
...interrumpe el OB1 y se ejecuta el OB35 cada 250ms
OB35
Configuración de Interrupciones Cíclicas
Variables Locales de OB de Alarma Cíclica Variable OB35_EV_CLASS
Tipo de datos BYTE
Descripción Clase de evento e identificadores:
OB35_STRT_INF
BYTE
B#16#11: Alarma está activada (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
OB35_OB_NUMBR OB35_RESERVED_1 OB35_RESERVED_2 OB35_PHASE_OFFSET OB35_RESERVED_3 OB35_EXC_FREQ OB35_DATE_TIME
BYTE BYTE BYTE WORD INT INT DATE_TIME
Prioridad parametrizada; valor prefijado: de 7 (OB 30) a 15 (OB 38) Número de OB (30 hasta 38) Reservado Reservado Desfase en ms Reservado Cadencia temporal en ms Fecha y hora a las que se solicitó el OB.
Ejecución por Tiempo – Alarmas Horarias • Una alarma horaria es una interrupción que permite ejecutar un programa en un tiempo concreto, una sola vez o periódicamente. • En STEP 7 se dedican a interrupciones horarias del OB 10 al OB 17 • La CPU 315 dispone únicamente del OB 10 que tiene la prioridad 2 • Las interrupciones horarias se pueden parametrizan: • en la configuración del hardware • en fase de ejecución usando SFCs • Se puede arrancar una interrupción horaria: • una sola vez: el OB es llamado una sola vez en el momento especificado • periódicamente: depende de la configuración (cada minuto, hora, día,...
Interrupciones Horarias (I) •
El OB Horario (OB10 en el S7-315) permite interrumpir el OB cíclico y ejecutar un código en una fecha especificada o a intervalos especificados. Se puede programar este OB para que se ejecute en los siguientes intervalos: – Una vez: se ejecuta una vez, en el momento especificado. – Cada minuto: Se ejecuta en intervalos de 1 minuto, empezando desde el momento especificado – Cada hora: Se ejecuta en intervalos de 1 hora, empezando desde el momento especificado – Cada día: Se ejecuta 1 vez al día, desde el momento especificado – Cada semana: Se ejecuta 1 vez por semana, empezando desde el momento especificado – Cada mes: Se ejecuta 1 vez al mes, empezando desde el momento especificado – Cada año: Se ejecuta 1 vez al año, empezando desde el momento especificado
Interrupciones Horarias (II) • En el arranque en frío o en el arranque completo, el sistema operativo borra todas las activaciones realizadas mediante SFCs. • Las realizadas en la configuración del hardware son mantenidas • Se puede consultar el estado de la alarma horaria con la SFC 31 y posteriormente, activar o desactivar la interrupción • Las interrupciones horarias son atendidas sólo en modo RUN • Si el OB de una interrupción horaria es llamado pero no está programado: • el S.O. primero llama la OB 85 (programa de ejecución por error) • si OB 85 no está programado, la CPU se va a STOP • La ejecución se puede anular, activar, ajustar y consultar con las SFCs: • SFC 28 SET_TINT SFC 29 CAN_TINT • SFC 30 ACT_TINT SFC 31 QRY_TINT
Configuración de Interrupciones Horarias
Variables Locales de OB de Alarma Horaria Variable OB10_EV_CLASS OB10_STRT_INFO
OB10_PRIORITY OB10_OB_NUMBR OB10_RESERVED_1 OB10_RESERVED_2 OB10_PERIOD_EXE
OB10_RESERVED_3 OB10_RESERVED_4 OB10_DATE_TIME
Tipo de datos Descripción BYTE Clase de evento e identificadores: B#16#11: Alarma activada 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) BYTE Prioridad parametrizada; valor por defecto: 2 BYTE Número de OB (10 hasta 17) BYTE Reservado BYTE Reservado WORD El OB se ejecuta en el intervalo indicado: W#16#0000: Una vez W#16#0201: Cada minuto W#16#0401: Cada hora W#16#1001: Cada día W#16#1201: Cada semana W#16#1401: Cada mes W#16#1801: Cada año INT Reservado INT Reservado DATE_TIME Fecha y hora a las que se solicitó el OB
SFC´s para Programar OB´s de Alarmas Horarias (I) • Funciones del Sistema integradas (SFCs) se pueden utilizar para controlar y supervisar las interrupciones asociadas a alarmas horarias. Las SFCs relacionadas con alarmas horarias son las siguientes.
SFC 28 SET_TINT: Ajustar hora de arranque de la alarma horaria Parámetro Declaración Tipo de datos Area de memoria Descripción OB_NR INPUT INT E, A, M, D, L, Número del OB que se activa en el Const. instante SDT(fecha y hora de arranque) SDT INPUT DT D, L Fecha y hora de arranque PERIOD INPUT WORD E, A, M, D, L, Periodicidad desde el instante SDT: Const. W#16#0000 = una vez W#16#0201 = cada minuto W#16#0401 = cada hora W#16#1001 = diaria W#16#1201 = semanal W#16#1401 = mensual W#16#1801 = anual W#16#2001 = al final del mes RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
SFC´s para Programar OB´s de Alarmas Horarias (II) SFC 29 CAN_TINT: Anular alarma horaria activada Parámetro Declaración Tipo de datos Area de memoria Descripción OB_NR INPUT INT E, A, M, D, L, Número del OB cuya fecha Const y hora de arranque se han de borrar (OB10 a OB17). RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC 30 ACT_TINT: Activar un OB de alarma horaria Parámetro Declaración Tipo de datos Area de memoria Descripción OB_NR INPUT INT E, A, M, D, L, Número del OB que se desea Const. activar (habilitar) (OB10 a OB17) RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
SFC´s para Programar OB´s de Alarmas Horarias (III) SFC 31 QRY_TINT: Consultar alarma horaria Parámetro Declaración Tipo de datos Area de memoria Descripción OB_NR INPUT INT E, A, M, D, L, Número del OB cuyo estado Cons. se ha de consultar (OB10 a OB17). RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error. STATUS OUTPUT WORD E, A, M, D, L Estado de la alarma horaria
Programación de una Alarma Horaria
Tarjeta de Entradas Analógicas
La CPU tiene una llamada a un OB que verifica y controla la temperatura para este tanque una vez cada minuto, comenzando a una fecha y hora específica.
PIW288 +14000 = Temperatura Superior +13000 = Temperatura Inferior Q5.7 Calentador
Ejecución por Tiempo – Alarmas de Retardo AR R ET
DO
• Una alarma de retardo es una interrupción que permite ejecutar un programa después de una espera determinada independientemente de los temporizadores • En STEP 7 se dedican a interrupciones de retardo del OB 20 al OB 23 • La CPU 315 dispone únicamente del OB 20 que tiene la prioridad 3
Configuración de Interrupciones de Retardo AR R ET
DO
Variables Locales de OB de Alarma de Retardo O RD Tipo de datos Declaración Descripción ETA R BYTE TEMP Clase de evento e identificadores: B#16#11: Alarma está activada OB20_STRT_INF BYTE TEMP B#16#21: Solicitud arranque OB 20 B#16#22: Solicitud arranque OB 21 B#16#23: Solicitud arranque OB 22 B#16#24: Solicitud arranque OB 23 OB20_PRIORITY BYTE TEMP Prioridad; valor prefijado: de 3 (OB20) OB20_OB_NUMBR BYTE TEMP Número de OB (20 hasta 23) OB20_RESERVED_1 BYTE TEMP Reservado OB20_RESERVED_2 BYTE TEMP Reservado OB20_SIGN WORD TEMP Identificador de usuario: parámetro de entrada SIGN de la llamada de SFC 32 ”SRT_DINT” OB20_DTIME TIME TEMP Tiempo de retardo transcurrido en ms OB20_DATE_TIME DATE_TIME TEMP Fecha y hora a las que se solicitó el OB
Variable OB20_EV_CLASS
SFC´s para Programar OB´s de Alarmas Horarias de Retardo (I) • Funciones del sistema integradas (SFCs) se pueden utilizar para arrancar y supervisar las interrupciones asociadas a alarmas de retardo. Las SFCs relacionadas con alarmas de retardo son las siguientes.
AR R ET
DO
SFC 32 SRT_DINT: Arrancar alarma de retardo Parámetro Declaración Tipo de datos Area de memoria Descripción OB_NR INPUT INT E, A, M, D, L, Número del OB que se arrancará Const. al transcurrir el tiempo de retardo (OB 20 a OB 23). DTIME INPUT TIME E, A, M, D, L, Valor del retardo (1 a 60000 ms) Const. SIGN INPUT WORD E, A, M, D, L, Identificador que, al llamar el OB Const. de alarma de retardo, aparece en la información de eventos de arranque del OB. RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC´s para Programar OB´s de Alarmas Horarias de Retardo (II)
SFC 33 CAN_DINT: Anular alarma de retardo Parámetro Declaración Tipo de datos Area de memoria OB_NR INPUT INT E, A, M, D, L, Const. RET_VAL OUTPUT INT E, A, M, D, L
AR R ET
DO
Descripción Número del OB que se ha de anular (OB20 a OB23). Parámetro de código de error
SFC 34 QRY_DINT: Consultar estado de alarma de retardo Parámetro Declaración Tipo de datos Area de memoria OB_NR INPUT INT E, A, M, D, L, Const. RET_VAL OUTPUT INT E, A, M, D, L STATUS OUTPUT WORD E, A, M, D, L
Descripción Número del OB, cuyo STATUS se ha de consultar (OB 20 a 23) Parámetro de código de error. Estado de la alarma de retardo
Interrupciones de Retardo AR R ET
•
El OB20 se arranca mediante una llamada al SFC32 (SRT_DINT). Se define la demora en los parámetros que le pasa al SFC de la siguiente forma: – OB_NR Número del OB que arrancará después de retardo – DTIME Duración de la demora (desde 1 hasta 60000 ms) – SIGN Identificador que se pone en la información de arranque del OB cuando se llama al OB de retardo – RET_VAL Contiene el código de error si se produce un error mientras el OB se procesa
M0.1 20 T#500ms
EN OB_NR DTIME
W#16#01
SIGN
SFC32 (SRT_DINT)
ENO RET_VAL
M2.0 MW10
DO
Interrupciones por Error del Hardware Módulo de Entradas Analógicas
X +27648
Si el módulo analógico ha sido configurado para habilitar la rotura de hilo como interrupción hardware, se utilizar cualquier problema de hardware en el transmisor para llamar a un OB de detección de errores (por ejemplo, el OB82)
0
Interrupciones por Error en el Programa/Sistema •
El STEP7 proporciona otros OBs utilizados para interrumpir el programa además de las interrupciones por errores en el hardware. Los errores que llaman a esos OBs se consideran errores en tiempo de ejecución; se detectan mediante los diagnósticos internos del PLC.
Errores en Tiempo de Ejecución Errores Asíncronos Errores Síncronos OB de Error
OB de Error
OB80 Error de Tiempo (por ejemplo, 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 de acceder a un módulo periférico no presente)
SFC´s para Programar OB´s de Error •
Las Funciones de Sistema integradas (SFCs) se pueden utilizar para controlar y monitorizar las interrupciones asociadas a errores síncronos y asíncronos. Estas SFCs proporcionan los parámetros formales listados debajo los cuales pueden ser programados con valores actuales mediante la instrucción de llamada a SFC.
•
SFCs para manejo de Errores Síncronos – SFC36 MSK_FLT Enmascarar errores de sincronización – SFC37 DMSK_FLT Desenmascarar errores de sincronización – SFC38 READ_ERR Leer el registro de estado de eventos
•
SFCs para manejo Errores Síncronos y Asíncronos – SFC39 DIS_IRT Inhabilitar Interrupción – SFC40 EN_IRT Habilitar Interrupción – SFC41 DIS_AIRT Inhabilitar Interrupciones de Alarma – SFC42 EN_AIRT Habilitar Interrupciones de Alarma
Trabajar con analógicas *
Cómo funcionan las analógicas.
Las tarjetas analógicas de S7 convierten: ·
Para la lectura de entradas analógicas, un valor analógico procedente de un sensor o transductor en un valor digital de 16 bits que se almacena en la periferia del S7 (no confundir estos 16 bits con la resolución de la entrada analógica). Esta resolución oscilará según los casos entre 11 bits mas signo y 8 bits.
·
Para las salidas analógicas, un valor digital de 16 bits de la periferia de salidas en una señal analógica mediante un conversor digital-analógico. Existen dos parámetros que determinan una entrada o una salida analógica:
·
El tipo de sonda (en el caso de entradas), o el tipo de actuador (en el caso de salidas), a conectar (4-20 mA, 0-10 V, etc...)
·
La resolución a alcanzar en la lectura o escritura. Cuanta mayor sea la resolución, mayor será la exactitud de la lectura y menor el error entre el valor real y el almacenado en el autómata. Por contra, también será mayor el tiempo de conversión analógico / digital y por lo tanto las variaciones en el proceso tardarán más en reflejarse en el PLC.
*
Tipos de señales analógicas.
Las tarjetas analógicas del S7 soportan una gran cantidad de tipos de medidas, configurándose desde Hardware de Step 7 a través de los adaptadores de margen laterales de la tarjeta (para más información, ver manual “Datos de los módulos S7”). Sin embargo, es muy importante tener en cuenta que las entradas analógicas de los S7 300 se agrupan en grupos de 2 canales, por lo que ambos deben de estar configurados de la misma manera, ya sea para 0-10 V, para 4-20 mA, etc... Por lo tanto, no se puede mezclar en el canal 0 una señal de 0-10 V, p . ej., y en el canal 1 una de 4-20 mA. Deberá de dejarse vacío dicho canal si no se dispone de ninguna sonda de 0-10 V, y cablear la de 4-20 mA en el siguiente grupo libre. Vamos a realizar un repaso a las conexiones más usuales con S7 de sensores de campo.
*
Medidas de tensión.
La más utilizada en la industria es 0-10 V. El Simatic S7 300 posee el rango +/-10 V, que es el adecuado para esta lectura. Como la sonda no va a dar tensión negativa, se va a comportar de manera unipolar, por lo siempre vamos a tener un valor de 0 al valor máximo que hayamos seleccionado de resolución. El inconveniente de este tipo de lectura es que al ser una tensión, las distancias sin atenuación de la señal debido a caídas de tensión en el cable son relativamente cortas, por lo que la sonda debe estar cerca del cuadro eléctrico donde se encuentre el módulo analógico. Los límites de lectura son: Lectura +/-10 V:
Estado de lectura Desbordamiento positivo
Tensión en la entrada anal.
Valor de la entrada anal.
>= 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: 020 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 Desbordamiento positivo
Corriente (mA)
Valor de la entrada anal.
>= 23,516
32.767
Rebase positivo
De 23,515 a 20,0007
De 32511 a 27649
Valor nominal
De 20 a 0
De 27648 a 0
Rebase negativo
De –0,0007 a –3,5185
De -1 a –4864
Desbordamiento negativo
<= -3,5193
-32.768
Lectura 4 a 20 mA:
Estado de lectura
*
Corriente (mA)
Valor de la entrada anal.
Desbordamiento positivo
>= 22,815
32.767
Rebase positivo
De 22,810 a 20,0005
De 32511 a 27649
Valor nominal
De 20 a 4
De 27648 a 0
Rebase negativo
De 3,9995 a 1,1852
De -1 a –4864
Desbordamiento negativo
<= 1,1845
-32.768
Medidas PT100.
Las sondas PT100 se utilizan para la medida de la temperatura en procesos que oscilen entre 850ºC y –200ºC. Una PT100 es una termoresistencia que varía su resistividad en función de la temperatura que exista en contacto con la misma. A través de dos hilos (1 canal del módulo de entradas analógicas), se hace circular por la PT100 una corriente constante. Otros dos hilos toman la medida de la resistencia en los extremos de la sonda, con lo que se obtiene la variación de resistencia, y al ser conocida su linealidad con respecto a la temperatura en los márgenes anteriormente citados, se obtiene ésta. Lectura PT100:
Estado de lectura
Temperatura
Valor de la entrada anal.
Desbordamiento positivo
>= 1000,1
32.767
Rebase positivo
De 1000 a 850,1
De 1000 a 850,1
Valor nominal
De 850 a –200
De 8500 a –2000
Rebase negativo
De –200,1 a -243
De –2000 a –2430
Desbordamiento negativo
<= -243,1
-32.768
Observar que lógicamente una sonda PT100 consumirá dos canales de entradas analógicas: 1 para la lectura en extremos de la sonda, y otro para la corriente constante que se suministra a la misma. Si la lectura se realizara por el mismo cable con el que se alimenta la PT100, las fluctuaciones de la resistencia del cable de cobre que une el PLC a la sonda con respecto a la temperatura variarían la magnitud de lectura. Por lo tanto, en una tarjeta de 8 entradas analógicas sólo se podrán conectar 4 sondas PT100.
Tratamiento Analógico Automatización Industrial
Índice TEMA – Tratamiento Analógico 1. – Conversiones D/A, A/D 2. – Tarjetas de Entradas y Salidas Analógicas 3. – Representación Digital de Valores Analógicos 4. – Configuración de las Tarjetas de Entradas y Salidas Analógicas 5. – Tiempos de Ciclo y Conversión 6. – Ajuste de Valores Analógicos 7. – Normalización de Valores Analógicos
Convertidor Digital-Analógico, D/A 23
22
d
20 Ve 5 v
21
c
b
a Amplificador sumador
R/8
R/4
R/2
Rf
R
i
-
Ve V =− s Re Rf
Vs
SALIDA ANALOGICA
+
Red de resistencias
i=
i
A=
Rf Vs =− Ve Re
Convertidor Digital-Analógico, D/A A=
R Vs =− f Ve Re
- Supongamos Rf = 20 K, y R = 150 K, sin tener en cuenta el cambio signo queda: a) A =
20 = 0.133 150
Vs = Ve * 0.133 = 5 * 0.133 = 0.665
b) A =
20 = 0.266 75
Vs = Ve * 0.266 = 5 * 0.266 = 1.33
c) A =
20 = 0.533 37.5
Vs = Ve * 0.533 = 5 * 0.533 = 2.665
d)A =
20 = 1.066 18.7
Vs = Ve *1.066 = 5 *1.066 = 5.33
byc) A =
37.5 * 75 20 = 25 byc) Av = = 0.8 37.5 + 75 25
Vs = Ve * 0.8 = 5 * 0.8 = 4
Convertidor Analógico-Digital, A/D – Convertidor en Rampa
RELOJ
ENTRADA ANALOGICA
RESET
&
+ -
CONTADOR DE N BITS
B S U A FDL FE I E D R A
COMPARADOR
SALIDA DIGITAL
Convertidor D/A - Lentos en la conversión - Tiempo de conversión variable - Aumenta con el valor que se tiene que convertir
Convertidor Analógico-Digital, A/D – Convertidor por Aproximaciones Sucesivas REGISTRO DE APROXIMACIONES SUCESIVAS
RELOJ ENTRADA ANALOGICA
+ -
CIRCUITO DE CONTROL
REGISTRO DE DESPLAZAMIENTO
COMPARADOR
B S SALIDA U A DIGITAL FDL FE I E D R A
Convertidor D/A - Rápidos - Tiempo de conversión fijo
Convertidor A/D MK 50808 de MOSTEK
Control de Convertidores A/D (I) Por sondeo I0
I7
M U L T I P L E X O R
µP A/D
Puerto
OE START
3 ALE
- Hay que programar un tiempo de espera necesario para la conversión
Control de Convertidores A/D (II) Por interrupción
I0
I7
M U L T I P L E X O R
µP A/D
Puerto
OE EOC START
INT
3 ALE
- No hay que programar tiempo de espera
Tarjetas de Entradas Analógicas – Diagrama de Bloques • La conversión A/D se realiza mediante tarjetas de entradas analógicas
Tarjetas de Entradas Analógicas – Módulo SM 331
Tarjetas de Salidas Analógicas – Diagrama de Bloques • La conversión D/A se realiza mediante tarjetas de salidas analógicas
Tarjetas de Salidas Analógicas – Módulo SM 332
Direccionamiento de Tarjetas Analógicas • El identificador de direcciones es: - PIW para las entradas analógicas Rack Fuente de IM 3 alimentac. (Receptor)
Rack Fuente de IM 2 alimentac. (Receptor)
Rack Fuente de 1 alimentac.
Rack 0
CPU y fuente de alimentac.
- PQW para las salidas analógicas
640 a 654
656 a 670
672 a 686
688 a 702
704 a 718
720 a 734
736 a 750
752 a 766
512 a 526
528 a 542
544 a 558
560 a 574
576 a 590
592 a 606
608 a 622
624 a 638
384 a 398
400 a 414
416 a 430
432 a 446
448 a 462
464 a 478
480 a 494
496 a 510
256 a 270
272 a 286
288 a 302
304 a 318
320 a 334
336 a 350
352 a 366
368 a 382
IM (Receptor)
IM (Emisor)
Valores Analógicos de Trabajo Valores en Tensión • Unipolares ¾ 1a5V • Bipolares ¾ ± 10 V ¾ ± 500 mV
0 a 10 V ±5V ± 250 mV
± 2,5 V ± 80 mV
±1V
Valores en Intensidad • Unipolares ¾ 0 a 20 mA • Bipolares ¾ ± 20 mA
4 a 20 mA ± 10 mA
± 3,2 mA
Valores en Resistencia ¾ 10 kΩ
150Ω
300Ω
100Ω
Representación Digital – Resolución • • • •
La resolución máxima es de 15 bits La resolución es inferior, los dígitos insignificantes se rellenan con 0 La resolución depende del tipo de tarjeta analógica y de su parametrización La misma tarjeta se puede parametrizar: • para intensidad o tensión. Unipolar o bipolar • el signo: “0” -->+, “1” --> • las direcciones utilizadas son: PIW 288 y PIW 290. PQW 304 y PQW 306
Valor analógico
Resolución
Número del bit 15 14 13 12 11 10 9 8 Peso del bit
7
6
5
4
3
2
1
0
S 214 213 212 211 210 29 28 2 7 2 6 25 2 4 23 2 2 21 2 0
Cod. 14 bits (+S) 0
X
X
X
X
X X X
X X X X X X X
0
Cod. 12 bits (+S) 0
X
X
X
X
X X X
X X X X X
0
0
0
Cod. 9 bits (+S) 0
X
X
X
X
X X X
X X
0
0
0
0
0
0
Representación Digital – Márgenes Bipolares
Representación Digital – Márgenes Unipolares
Representación de Valores de Medida de E/A • Valores Analógicos en los valores de entrada de 0 a 10V y 1 a 5V
Representación de Valores de Medida de E/A • Valores Analógicos en los valores de salida de 0 a 10V y 1 a 5V
Ejemplo • Se trata de que se active la salida “Q 4.0” para valores de tensión , en la entrada analógica “PIW 288” , entre 2 y 4 o entre 6 y 8 voltios L PIW 288 T MW 10 A( L MW 10 L 5530 >I ) A( L MW 10 L 11060 I ) A( L MW 10 L 22118
// Leer valor E/A
//Comparación con 2 V.
L PIW 288 // Leer valor E/A ITD DTR L 2.764800e+004 /R L 1.000000e+001 *R RND T MD 10
//Comparación con 4 V.
//Comparación con 6 V.
//Comparación con 8 V.
A( L MD 10 L 2 >I ) A( L MD 10 L 4 I ) A( L MD 10 L 8
//Comparación con 2 V.
//Comparación con 4 V.
//Comparación con 6 V.
//Comparación con 8 V.
Tiempo de Conversión y de Ciclo de E/A Tiempo de Conversión de Entradas Analógicas • El tiempo de conversión se compone de: • tiempo de conversión básico
9 depende directamente del tipo de conversión (por integración, o valores instantáneos). 9 en el caso de integración, el periodo de integración se considera directamente en el tiempo de conversión 9 el periodo de integración tiene efecto directo sobre la resolución 9 el periodo de integración depende de la supresión de frecuencias perturbadoras. 9 los periodos de conversión básicos son 2.5, 16.6, 20 y 100 mseg.
• tiempos suplementarios 9 tiempo para la medida de resistencia 9 tiempo para la vigilancia de rotura de hilo
Tiempo de Ciclo • La conversión A/D y la transferencia a la CPU se realiza secuencialmente • El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un módulo
Tiempos de Conversión, Ciclo, Establecimiento para S/A Tiempo de Conversión • El tiempo de conversión de un canal de salida analógica es el tiempo que transcurre entre la consideración de un valor de salida digitalizado de la memoria interna y la conversión digital-analógica
Tiempo de Ciclo • La conversión de canales de salida analógica se realiza secuencialmente • El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un módulo de salida analógica
Tiempo de Establecimiento • El tiempo de establecimiento (t2 a t3) es el tiempo que transcurre entre la aplicación del valor convertido y el momento en que alcanza el valor especificado en la salida analógica. • El tiempo de establecimiento depende de la carga. • Hay que distinguir entre cargas resistivas, capacitivas e inductivas.
Tiempos de Respuesta de S/A Tiempo de Respuesta • El tiempo de respuesta (t1 a t3) es el tiempo que transcurre entre la escritura de los valores de salida en la memoria interna y el momento en que se alcanza el valor especificado en la salida analógica física. • En el caso más desfavorable, es la suma de los tiempos de ciclo y de establecimiento.
Parámetros de los Módulos Analógicos • Los módulos analógicos se parametrizan off-line con el STEP 7 • Algunos parámetros pueden modificarse también en el programa de usuario por medio de las SFC 55, SFC 56 y SFC 57. • Hay que distinguir entre: • parámetros estáticos. Se ajustan con el aparato de programación • parámetros dinámicos. Se ajustan con el aparato de programación o SFC 55
Propiedades Parametrizables de Canales de Entrada • • • •
habilitaciones de alarma (del proceso, de diagnóstico) (dinámico) alarmas de valor límite (límite superior, límite inferior) (dinámico) alarmas de diagnóstico (colectivo, detección rotura de hilo) (estático) medida (tipo, margen, supresión frecuencias perturbadoras) (dinámico)
Propiedades Parametrizables de Canales de Salida • • • •
habilitaciones de alarma (de diagnóstico) (dinámico) alarma de diagnóstico (colectivo) (estático) valores de sustitución (comportamiento en STOP de la CPU) (dinámico) salida (tipo, margen de salida) (dinámico)
Configuración de las Tarjetas Analógicas
Diagnosis de los Módulos Analógicos • La función de diagnóstico permite determinar si los valores analógicos se han tratado sin errores, y en caso contrario, qué error ha aparecido. • El diagnóstico se parametriza con el STEP 7 • La evaluación se realiza si está habilitada la función de diagnóstico • Los mensajes de diagnóstico evaluados provocan las siguientes acciones: • indicación luminosa en módulo analógico. • transmisión de mensaje de diagnóstico a la CPU • activación de alarma de diagnóstico (sólo si esta habilitada)
Mensajes de Diagnóstico para Entradas Analógicas Mensajes de Diagnóstico para Salidas Analógicas
Alarmas de los Módulos Analógicos (I) • Los módulos analógicos tienen la capacidad de emitir alarmas • Se distinguen dos tipos de alarmas: • alarma de diagnóstico • alarma de proceso • Las alarmas se parametrizan con el STEP7 • Por defecto están bloqueadas
Alarma de Diagnóstico • Cuando se detecta un fallo o desaparece éste, el módulo emite una alarma de diagnóstico siempre que esté habilitada • La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de tratamiento de alarma de diagnóstico OB 82
Alarmas de los Módulos Analógicos (II) Alarma de Proceso • La parametrización de los límites superior e inferior define un margen de trabajo • Cuando la señal de proceso abandona dicho margen, el módulo activa una alarma de proceso siempre que esté habilitada • La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de tratamiento de alarma de proceso OB 40 • Para detectar qué canal ha rebasado el límite consultar información del byte 4 de la información adicional de alarma de proceso del OB 40
Procesamiento de Valores Analógicos en S7
El bus P (bus periférico) permite acceder directamente a los valores analógicos como entradas desde el campo o como salidas al campo. Al bus periférico se puede acceder en formato de byte, palabra y doble palabra
Tratamiento de Señales Analógicas
Nivel alto
Sensor de Nivel PIW 288 LT
Nivel bajo
Conversión de Señales Analógicas de Entrada Tarjeta de Entradas Analógicas Cuando la tarjeta de entradas analógicas recibe desde campo una señal de tensión o corriente, la tarjeta convierte la señal a un valor binario (A/D) al que puede acceder el programa de CPU a través del bus P.
Valor después de la conversión A/D
1000 L
0 0 1 0 1 0 1 0 1 1 0 1
PIW 288 = +10960 0L
0 0 0 0
Presentación de Valores Analógicos •
STEP7 permite ver o usar valores analógicos tanto de entrada como de salida en múltiples formatos numéricos. La tabla de variables de abajo muestra: PIW288 y PIW290 (entradas analógicas) como dec, hex, bin.
Conversión de Señales Analógicas de Salida Tarjeta de Salidas Analógicas Cuando el programa de CPU envía un valor a la tarjeta de salidas analógicas a través del bus P, la tarjeta ejecuta la conversión D/A. El resultado de la tarjeta es una variación en voltaje o intensidad, que se usa para el control de dispositivos externos de campo.
CPU -> Tarjeta Analógica L +13824 T PQW 304
Válvula de posición variable Flujo de control Suponiendo tarjeta de salida analógica de 0 a +10 V para el valor digital 13824, después de la conversión D/A debe sacar 5 V.
Valores Analógicos para Observación de Alarmas - Si sensor de nivel menos de 1 V. --> abrir válvula de llenado - Si sensor de nivel más de 9 V. --> abrir válvula de drenaje L PIW 288 L 2765 <=I = Q 4.0
Q 4.0 Válvula de llenado
Nivel alto: 9 voltios ó 24883
Sensor de Nivel PIW 288 LT
Nivel bajo:1 Voltio ò 2765 L PIW 288 L 24883 >=I = Q 5.7
Q 5.7 Válvula de drenaje
Uso del Offset con Señales de Entrada Analógicas •
Cuando las características del dispositivo de campo analógico tiene un 20% offset o “puesta a cero”, se hace necesario un offset del valor analógico en la CPU para compensar. PIW 288 sensor de nivel: midiendo un valor de 4 a 20 mA
+ 27648
+5530 (20% de rango)
20 mA
1000 L
4 mA
0L
Suponiendo un offset del 20%, el valor equivalente si tener en cuenta el offset es: (valor analógico medido - 20% del rango usado en la CPU) x 125 / 100 Ejemplo: Para PIW 288 = 16.589, el valor representa: (16.589 - 5530) x 1.25 = 13.824, que representan un volumen del 50% del tanque
Uso del Offset con Señales de Salida Analógicas •
Cuando las características del dispositivo de campo analógico tiene un 20% offset o “señala cero”, se hace necesario un offset del valor analógico en la CPU para compensar. Tarjeta de Salidas Analógicas
Transductor de corriente a presión I
Salida PQW 304 valor de 4 a 20 mA
P
Válvula de posicionamiento en 3 a 15 psi
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 utilizable Ejemplo: Para abrir la válvula a la mitad: PQW 304 = ( (MW 20 x 100) / 125) + 5530, Donde MW 20 = 27648/2=13824
Ajuste de Valores Analógicos •
El ajuste de los valores analógicos nos permite trabajar y comparar en las mismas unidades que la variable controlada, en vez de trabajar con los valores numéricos dados por la conversión A/D. Mediante ecuaciones matemáticas, se puede usar unidades de ingeniería tales como grados, metros, gramos, litros......
Rango Nominal de la Conversión
Temperatura Rango bipolar
Nivel Rango unipolar
+27648
100 grados
500 litros
0
0 grados
0 litros
-27648
-100 grados
Ajuste de Valores Analógicos Unipolares •
Para calcular el valor ajustado de una señal unipolar, se usa la siguiente ecuación: Valor ajustado = (Medida de la entrada PV x PV medido en unidades de ingeniería / rango de CPU) + PV offset
Ejemplo: PIW 288
Ajuste: MD10 = (PIW 288 x 400) / 27648
+27648 Rango de CPU (unipolar) 0 -> +27648 0
Si el recipiente está al 50 %, el valor analógico de entrada de PIW 288=+13824 ; MD10 igual a 200.
400 L
Rango deseado en unidades de ingeniería 0 -> 400 L 0L
Función de Ajuste de Valores Analógicos Unipolares FC 28
in in in out temp temp
PV PV_Superior PV_Inferior Valor_Graduado PV_Real Rango_Ing
INT REAL REAL REAL REAL REAL
Segmento 1 L ITD DTR T
#PV
//Carga el valor medido dela E/A //Convierte de entero a entero doble //Convierte de entero doble a real //Valor analógico de entrada en formato nº real
Segmento 2 L L -R T
#PV_Superior #PV_Inferior
Segmento 3 L L /R L *R L +R T
#PV_Real 2.764800e+04
#PV_Real
0 0 0 0 0 0
Palabra de la E/A medido Límite superior del rango en unid. ing. Límite inferior del rango en unid. ing. Resultado del valor graduado PV convertido a valor real PV_Superior - PV_Inferior
//Rango en unidades de ingeniería
#Rango_Ing
#Rango_Ing #PV_Inferior #Valor_Graduado
//Entrada analógica en formato de nº real //Cargar rango de CPU para la conversión (+27648) //Divide //Cargar rango en unidades de ingeniería //Multiplicar //Cargar el PV_Inferior para calcular el offset PV //Sumar //Resultado final
Ajuste del Offset de Valores Analógicos Unipolares Para calcular el valor ajustado del 20 % offset de una señal unipolar, use la siguiente ecuación: Valor ajustado con 20% offset = ((Medida de la entrada analógica PV - 20% del rango de la CPU) x PV medido en / rango de CPU - 20%) + PV offset
Ejemplo:
Ajuste: MD20 = ((PIW 288 - 5530) x 200) / 22118
PIW 288
+27648 Rango de CPU (unipolar) +5530 -> +27648 +5530
Si el recipiente está al 50%, la entrada analógica de PIW 288=+16589 ; MD20 igual a 100.
200 L
Rango deseado en unidades de ingeniería 0 -> 200 L 0L
Función Ajuste del Offset de Val. Analóg. Unipolares FC 29
in in in out temp temp temp
PV PV_Superior PV_Inferior Valor_Graduado_20 PV_Real PV_Real_20 Rango_Ing
INT REAL REAL REAL REAL REAL REAL
L ITD DTR T L L -R T L L -R T L L /R L *R L +R T
#PV
//Carga del valor medido dela E/A //Convierte de entero a entero doble //Convierte de entero doble a real //Valor analógico de entrada en formato nº real // //Cargar 20% del rango de conversión de la CPU (5530)
#PV_Real #PV_Real 553000e+03 #PV_Real_20 #PV_Superior #PV_Inferior #Rango_Ing #PV_Real_20 2.211800e+04 #Rango_Ing #PV_Inferior #Valor_Graduado
0 0 0 0 0 0 0
Palabra de la E/A medida Límite superior del rango en unid. ing. Límite inferior del rango en unid. ing. Valor graduado resultante del offset 20% PV convertido a valor real PV_Real offset por 20% PV_Superior - PV_Inferior
//Almacenar el valor real del offset del PV //Rango en unidades de ingeniería
//Cargar valor real PV con offset 20% del rango de CPU //Cargar rango de CPU menos 20%(27648-5530) //Divide //Cargar rango en unidades de ingeniería //Multiplicar //Cargar el PV_Inferior para calcular el offset PV //Sumar //Resultado final
Ajuste de Valores Analógicos Bipolares •
Para calcular el valor ajustado de una señal bipolar, se usa la siguiente ecuación: Valor bipolar ajustado = (Medida de la entrada PV x PV medido / rango de CPU x2) + Medio rango PV
Ejemplo: PIW 288 medida del sensor de temperatura de +10 a 10V
Ajuste: MD30 = (PIW 288 x 100) / 55296 +27648
Rango de CPU (bipolar) de -27648 a +27648 -27648
+ 50 grados
Si la entrada analógica PIW 288 medida +13824 , MD30 = +25
Rango deseado en unidades de ingeniería de -50 a +50 grados -50 grados
Función de Ajuste de Valores Analógicos Bipolares FC 34
in in in out temp temp temp L ITD DTR T L L -R T L L /R L +R T L L *R L /R L +R T
PV PV_Superior PV_Inferior Valor_Graduado_Bi PV_Real PV_Mid Rango_Ing_Bi #PV #PV_Real #PV_Superior #PV_Inferior #Rango_Ing_Bi #Rango_Ing_Bi 2.00000e+00
INT 0 Palabra de la E/A medido REAL 0 Límite superior del rango en unid. ing. REAL 0 Límite inferior del rango en unid. ing. REAL 0 Resultado del valor graduado REAL 0 PV convertido a valor real REAL 0 (PV Superior-PV Inferior) / 2 +PV Inferior REAL 0 PV_Superior - PV_Inferior //Carga del valor medido dela E/A //Convierte de entero a entero doble //Convierte de entero doble a real //Valor analógico de entrada en formato nº real //Rango en unidades de ingeniería //Variable PV medio rango // // //
#PV_Inferior #PV_Mid #PV_Real #Rango_Ing_Bi 5529600e+4 #PV_Mid #Valor_Graduado_Bi
// //Almacena la variable PV medio rango //Cargar valor real PV //Cargar rango en unidades de ingeniería bipolares //Multiplicar //Cargar el rango de CPU bipolar (27648 x 2) // //Cargar la variable PV rango medio //Sumar //Resultado final
Llamada a Módulos y Ajuste de Valores • Con el uso de un módulo de ajuste, tal como un FC, el OB1 puede llamar el módulo y pasar los parámetros para resolver el ajuste del valor. En este ejemplo, un sensor de temperatura mide un rango de 0 a 100 grados (conectado a la PIW 288). FC28 in in in out temp temp
FC28
PIW288 100 0
INT REAL REAL REAL REAL REAL
O O O O O O
Segmento 1: Convierte un valor analógico de entrada a real
PV PV_Superior PV_Inferior Valor_Graduado
PV PV_Superior PV_Inferior Valor _Ajustado PV_Real Rango_Ing
MD10
Segmento 2: Determina el rango en unidades de ingeniería Segmento 3: Ajuste del valor analógico
Lectura y Normalización de un Valor Analógico FC 105 SCALE: Escalar valores
FC para Desescalar Valores para S/A FC 106 UNSCALE: Desescalar valores