Download - Tia portal MANUAL
Automatización Industrial
Principios de Programación en STEP7
TEMA – Principios de Programación en STEP7
1. – Programas en la CPU
2. – Edición de Programas
2.1 – IEC 1131-3
2.2 – Instrucciones/Operandos/Módulos
3. – Estructura de Programas
4. – Tipos de Módulos
4.1 – Módulos de Sistema
4.2 – Módulos de Usuario
5. – Tipos de Procesamiento
6. – Tiempos de Ciclo y Respuesta
7. – Proyectos STEP7
Índice
• En una CPU corren dos programas
• Sistema operativo: Está contenido en cada CPU y organiza todas las funciones y procesos de la CPU no relacionados con una tarea de control específica.Entre sus funciones están:• gestionar el arranque normal y completo del PLC/API• actualizar la imagen del proceso de entradas y salidas• llamar al programa de usuario• detectar alarmas y llamar a los programas de atención a las mismas• reconocer y tratar los errores• administrar las áreas de memoria• comunicar con unidades de programación y otros sistemas de supervisión
• Programa de usuario: Hay que crearlo y cargarlo la CPU. Contiene todas las funcionesnecesarias para la tarea de control de una aplicación específica.Entre las tareas del programa de usuario están:• definir las condiciones de arranque (completo ó normal) de la CPU • tratar datos del proceso (funciones combinatorias, valores analógicos, ....) • reaccionar a alarmas • tratamiento de perturbaciones en el funcionamiento normal del programa
Programas en la CPU
Parte Título Contenidos
Parte 1 Información general Definición de términos y glosario del PLC/APICaracterísticas funcionales del PLC/API
Parte 2 Especificaciones Prestaciones eléctricas, mecánicas y funcionalesy ensayos de los Información a suministrar por el fabricanteequipos Ensayos y verificaciones
Parte 3 Lenguajes de Estructura del software de los PLC/APIprogramación Lenguajes de programación
Elementos del lenguaje
Parte 4 Guía para usuarios Especificaciones y análisis del sistemaAplicación y selección del PLC/APISeguridad y protección, instalación y mantenimiento
Parte 5 Comunicaciones Modelos, bloques de comunicación, mapeado enprotocolos ISO
La Norma IEC 1131 / EN-UNE 61131
Lenguaje IEC 1131-3 STEP 7Diagrama de funciones FBD FBD/FUP
Function Block Diagram Function Block Diagram
Diagrama de contactos LD LAD/KOPLadder Diagram Ladder Logic
Lista de instrucciones IL STL/AWLInstruction List Statement List
Texto estructurado ST SCLStructured Text Structured Control Language
Gráfico secuencial SFC GRAPH7Sequential Function Chart
Diagrama de bloques CFCContinuous Function Chart
Diagrama de gráfico HIGRAPH7de estados
Lenguajes de IEC 1131 - 3 / STEP7
• El entorno de programación permite desarrollar proyectos de controly automatización con las siguiente funcionalidad:
– Crear la estructura de directorios necesaria para la gestión de cada proyecto – Configurar el hardware del equipo – Desarrollar programas off-line– Cargar y descargar programas y datos en el PLC/API (on-line)– Depurar el programa en fase de ejecución sin necesidad de interrumpir la
ejecución del programa (on-line)– Realizar funciones de test o estado de variables y zonas de la memoria– Realizar funciones de forzado de variables– Elaborar documentos para la fase de mantenimiento posterior– Analizar el estado y comportamiento de la CPU (pilas, tiempos, ...) y de los
módulos de señal asociados
Funcionalidad del Software
Programas de Usuario
STEP 7 permite estructurar el programa. Esto aporta las siguientes ventajas:
• los programas se pueden dividir en bloques• se pueden estandarizar secciones individuales del programa• se simplifica la organización del programa• las modificaciones del programa pueden realizarse más fácilmente• se simplifica el test del programa, ya que puede ejecutarse por partes• se simplifica la puesta en servicio
Bloque en el Programa de Usuario
Programa conjunto de todas las instrucciones y convenciones para el tratamiento de las señales, por medio de las cuales se actúa sobre la instalación a controlar (proceso), de acuerdo con unas órdenes de control
Estructura
•Técnica modular•Segmentos•Comentarios
Representación
• FBD / FUP• LAD / KOP• STL / AWL
Edición de un Programa
Instrucción
Operando
Instrucción
unidad más pequeña autónoma del programa y constituye una orden de trabajo para el procesador
OperaciónOperando
002: A I 1.0ParámetroIdentificador del operando
Dirección relativa de la instrucción en elmódulo respectivo
Parte operacional
Identificación Parámetro
Instrucción
Marcas M Para almacenar resultados binarios intermedios
Datos D Para almacenar resultados digitales intermedios
OPERANDOS NEMONICO FUNCION
Entradas I Imagen del proceso de entradas (PII)
Salidas Q Imagen del proceso de salidas (PIQ)
Tiempos T Funciones de tiempo (temporizadores)
Contadores C Funciones de cómputo (contadores)
Periferia P Para acceder directamente a la periferia
Locales L Datos locales temporales
Módulos OB, FB, FC Para estructurar el programaSFB, SFC
Operandos
H1
S2
S1
A I 0.0AN I 0.1= Q 4.5
Q 4.5I 0.1
I 0.0Q 4.5I 0.1I 0.0
EsquemaEléctrico
STL/AWL FBD/FUP LAD/KOP
&
=
Ejemplo de Programa
• STEP 7 provee tres posibilidades para organizar un programa. Programación
LinealProgramación
DivididaProgramaciónEstructurada
Programa Lineal:Todas la instruccionesestán contenidas en unmódulo (normalmenteen el módulo deorganización, OB1)
Programa dividido en áreas:Las instrucciones para funcionesindividuales están contenidas enmódulos individuales. El OB1llama a los módulos individualessucesivamente.
Programa Estructurado:Las funciones reutilizables soncargadas en módulos individuales.El OB1 (u otros módulos) llaman a estos módulos y les pasan datosrelevantes.
OB1
Arranque
FB1 FC1
FB2FC2
FC3
OB1
Arranque
OB1
Arranque
Receta A
Receta B
Mezclador
Descarga
Estructuración de los Programas
1ª instrucción
2ª instrucción
última instrucción
OB1
......
.
Estructura de Programa. Programación Lineal
OB1: Ejemplo de de un simple módulo lineal en FUP
Segmento 1: motor marcha/paro
Segmento 2: Seguridad y señales de aviso
OB1: ejemplo de un simplemódulo lineal en AWL
Segmento 1: motor on/off
Segmento 2: Seguridad y señales de aviso
I 0.0
Q 4.0
Q 4.0
&I 0.2
I 0.3
>=1
=
&
I 0.1
I 0.4Q 4.1
=
A(O I 0.0O Q 4.0)AN I 0.1= Q 4.0
A I 0.2AN I 0.3AN I 0.4= Q 4.1
Programación Lineal
Programación Lineal. Ejemplo
(CALL)
(CALL)
(CALL)
(CALL)
Ingrediente_A
Ingrediente_B
Mezclador
Descarga
OB1FC
FC
FC
FC
>=1
=&
>=1=
&
>=1
=&
>=1=
Programación Dividida
Programa principal Módulo subrutina
Procesamientodel programa
Procesamientodel programaInstrucción que llaman
otros módulos
Fin de módulo
OB FC
Ejecución de un Programa Dividido
Programa Dividido. Control de nivel
Sis
tem
a O
pera
tivo
OB1 FC
FB FC
FB
SFC
SFB
OtrosOBs
Programación Estructurada I
Motor
Descarga
OB1
>=1
=&
>=1
=&
=&
=
Programación Estructurada II
Procesarmódulo 7
OB1 Módulo 7
Lamar almódulo 32.....
Módulo 32
Llamar almódulo X
Módulo R
Retornar
Retornar Retornar
...
Nivel1 Nivel2 Nivel3 Niveles 4..7 Nivel 8
Retornar
Módulo 10
Retornar
Procesarmódulo 10
Estructura del Programa
Sist
ema
oper
ativ
o
Iniciodel
cicloOB 1 FB 10
FB 20
FC 50
DB inst. 10
DB inst. 2
Tren
CALL FB 10
CALL FB 20
CINTA A
CALL FC 50
CINTA B
CALL FC 50
Acciona-miento
División Tecnológica de un Programa
FB
FB
FB
FC
SFC
SFB
Módulo dedatos deinstancia
Leyenda:
OB
Módulo deOrganización
Ciclo
Tiempo
Proceso
Error
Modos de operación del sistemaBloques CPU 315 CPU 315-2DP Tamaño
Mód. de organización (OB) 13 14 8 Kby
Módulo de función (FB) 128 128 (0-127) 8 Kby
Función (FC) 128 128 (0-127) 8 Kby
Módulo de datos (DB) 127 127(1-127) 8 Kby
Función del sistema (SFC) 48 53
Mód. func. sistema (SFB) 7 7
Tipos de Módulos de Programa
Tipo de Módulo Características
Organización (OB) - Interfase de usuario entre el sistema operativo y el programa- Prioridades establecidas de (1a 29)- Información especial de inicio en la pila de datos locales- Definen la estructura del programa de usuario
Módulo de - Módulos con memoria que puede programar el usuariofunción (FB) - Parametrizable / retentiva
- No parametrizable / retentiva- No parametrizable / no retentiva
Función (FC) - Rutina de programa para funciones frecuentes.- Un valor de retorno es transferido.
(Los parámetros deben ser asignados por la llamada.)- No retentivo- Parametrizable
Módulo de Datos - Estructurado, almacenamiento de datos locales (DB instan.)(DB) - Estructurado, almacenamiento de datos globales
(válido en todo el programa)
Módulos de Usuario
Tipo de Módulo Características
Función del - Integrados en el sistema operativo de la CPUSistema - Un usuario puede llamar esta función(SFC) (sin memoria).
Módulos deFunciones - Integrados en el sistema operativo de la CPU del Sistema - Un usuario puede llamar esta función (SFB) (con memoria).
Dato de Sistema - Módulo de datos para datos de configuración(SDB) y parámetros
Módulos del Sistema
Bloques de Organización (OB):• Constituyen el interfaz entre el sistema operativo y el programa de usuario.• Tienen prioridad.
• En las CPUs del S7 300 la prioridad de los OBs es fija• Es posible asignar la misma prioridad a varios OBs• Con prioridad “0” se desactiva el OB de alarmas
• Son llamados por el sistema operativo.• Cada OB contine una información de arranque de 20 bytes de
datos locales que entrega al S.O. durante el arranque• Controlan:
• El procesamiento cíclico • El procesamiento controlado por alarmas del programa• El comportamiento en el arranque del sistema de automatización• El tratamiento de errores
Módulos de Organización – OB´s (I)
Tipo de Alarma Módulo de organización Prioridad
Ciclo libre OB1 1
Alarmas horarias OB 10 a OB 17 2
Alarmas de retardo OB 20 a OB 23 de 3 a 6
Alarmas cíclicas OB 30 a OB 38 de 7 a 15
Alarmas de Proceso OB 40 a OB 47 de 16 a 23
Alarma de OB 60 25multiprocesamiento
Error de redundancia OB 70 y OB 72 25 y 28
Errores asíncronos OB 80 a OB 87 26
Ciclo no prioritario OB 90 29
Arranque OB 100 a OB 102 27
Errores síncronos OB 121y OB 122 la del OB del error
Módulos de Organización – OB´s (II)
Sistema operativo
Conectar
ProgramaprincipalCiclo
Programa de usuario
Ejecución Cíclica I
Sistema operativo
Conectar
ProgramaprincipalCiclo
Programa de usuario
Programa de usuario
Alarma
Error
Interrup-ción
Interrup-ción
Programa de alarma
Tratamiento de errores
Ejecución Cíclica II
Sist
ema
oper
ativ
o
Iniciodel
cicloOB 1 FB 1 FC 1
FB 2 FB 1 SFC 1
FC 1 DB 1
Profundidad de anidamiento
DB inst. 1
DB inst. 2 DB inst. 1
Secuencia y Profundidad de Anidamiento
Llamada de un módulo Módulo llamado
(OB, FB, FC) (FB, FC, SFB, SFC)
Ejecucióndel programa
Ejecucióndel programaInstrucción que llama a
otro módulo
Fin de módulo
Llamadas a los Módulos
El sistema operativo inicia el tiempo de vigilancia del ciclo
La CPU escribe los valores de la PIQen los módulos de salida
La CPU lee el estado de las entradas en losmódulos de entrada y actualiza la PII
La CPU ejecuta el programa de usuario
Al final del ciclo, el S.O. realiza las tareas pendientes(cargar y borrar módulos, recibir y enviar datos globales..)
Fases de la Ejecución Cíclica
• El tiempo de ciclo es el tiempo que el S.O. necesita para:• ejecutar el programa cíclico• partes del programa que interrumpen al cíclico (ejecución otros OBs)• actividades del sistema (p.e. actualización de imágenes, ..)
• El tiempo de ciclo se vigila• El tiempo de ciclo no es igual para cada ciclo
Tiempo de Ciclo I
• La figura muestra la función del tiempo de vigilancia del ciclo en laejecución del programa en las CPUs
Tiempo de Ciclo II
• Son módulos programables. Con parámetros absolutos o fromales
• Es un módulo lógico “sin memoria”
• Las variables temporales de FCs se memorizan en la pila de datos locales
• Los datos locales se pierden tras la ejcución de las FCs
• Para memorizar los datos, pueden utilizar módulos de datos globales.
•A los datos locales de una FC no se le pueden asignar valores iniciles
•Como una FC no tiene memoria, se han de indicar siempre parámetros actuales
•Las FCs se pueden utilizar para:• devolver un valor de función al módulo invocante (p.e. Fun. Matemáticas)• ejecutar una función tecnológica (p.e. Una combinación binaria)
Funciones – FC´s
• Son módulos programables. Con parámetros absolutos o formales
• Es un módulo “con memoria”
• Tiene asigando un módulo de datos como memoria (DB de instancia)
• Los parámetros que se transfieren al FB y las varaiables estáticas, sememorizan en el DB de instancia
• Las variables temporales se memorizan en la pila de datos locales
• Los datos del DB de instancia no se pierden al finalizar la ejecución del FB
• Los datos memorizados en la pila de datos locales se pierden al finalizar laejecución del FB
• Un FB contiene:• un programa que se ejecuta cada vez que se le llama desde otro módulo• facilitan la programación de funciones complejas de uso frecuente
Módulo de Función – FB´s
• A cada llamada de un FB que transfiere parámetros está asignado un DB de instancia
• Un FB puede ejecutarse con diferentes DBs de instancia, luego se ejecutacon diferentes valores para los parámetros con cada DB de instancia
Arranque: INT INRevoluciones: INT INHistorial: DT IN_OUTTiempo efec.: TIME IN_OUT
FB 20: MotorParámetros formales
Entero (16 bits): Arranque
Entero (16 bits): Revoluciones
Fecha y hora (48 bits):Puntero a dirección del historialTiempo (32 bits): Tiempo ejec.
DB 202: Motor_2Parámetros actuales (reales)
FBs y DBs de Instancia
• Son módulos de datos. No contienen instrucciones STEP 7
• Contienen datos de usuario, datos variables con los que trabaja el programa
• Cualquier FB, FC o OB puede leer/escribir datos en un DB global
• El tamaño máximo de los DBs depende de las CPUs
• La estructura de los DBs de datos globales se puede definir discrecionalmente
• Los datos de un DB de datos globales no se borran al cerrar el DB o concluirla ejecución del módulo de programa que lo utiliza
FC 10 DB global
(DB 20)FC 11
FC 12 DB de instancia(DB 112)
Acceso desde todos los bloques
Acceso sólo desde FB 12
Módulo de Datos Globales – DB´s
• Son módulos ya programados que ofrecen las CPUs S7 a los usuarios
SFBs:• Es un FB integrado en la CPU• Forman parte del S.O.• No se cargan como parte integrante del programa• Al igual que los FBs, son módulos “con memoria”• Hay que crear los DBs de instancia y cargarlos en la CPU como parte
intrgrante del programa.• Las CPUs ofrecen SFBs:
• para la comunicación vía enlaces configurados• para las funciones especiales
SFCs:• Es una función programada integrada en la CPU• Las SFC se pueden llamar desde el programa de usuario• Forman parte del S.O.• No se cargan como parte integrante del programa• Al igual que las FCs, las SFCs son módulos “sin memoria”• Las CPUs ofrecen SFCs para un conjunto muy amplio de aplicaciones
Módulos del Sistema – SFB´s y SFC´s
Byte de datos 0
Byte de datos 8191
8 Bits
El tamaño máximo de un móduloen la CPU 314 es 8 Kbyte. La cantidad máxima de memoriadisponible en un módulo de datosdepende de la CPU.
Tipos de Módulos de Datos
EN ENOFB7DB45
Llamada al FB7 (a través delmódulo de datos de instancia DB45) y asignación de parámetros.
CALL FB7, DB45Start: = I 1.0Stop: = I 1.1Longitud := MW20Ejecutar: = M2.1
FB parámetro formal
Dirección actual de los datos(parámetro vigente)
Llamada al FB7 (a través delmódulo de datos de instancia DB45) y asignación de parámetros.
Dirección actualde los datos FB parámetro formal
I 1.0I 1.1MW20
StartStopLongitud
ejecutar M2.1
STL/AWL
FBD/FUP
Llamada de Módulos – Asignación de Parámetros
Cabecera del Módulo(36 Bytes)
Cuerpo del módulo :
Sección de declaracióny
Sección de programao
Datos
InterfaseDescripción breve
Estructura del Módulo
a b
Botón de la seleccióndel tanque
0 0 0 0
Ingrediente AIngrediente B
LTLT
LT
LT
LT
Ejemplo de Programación Estructurada
Inicia el módulo (OB 100), procesándose una vez después de conectar la alimentación, por ejemplo
Iniciando el tiempo de control de ciclo
Lectura del estado de las señales de los módulosguardando los datos en la tabla de la imagen de proceso de entradas (PII)
Ejecución del programa en el OB1 (procesamientocíclico)Eventos (tiempo de interrupción, interrupción de proceso, etc.) Llamada a otros módulos OBs, FBs, FCs, etc.
Escritura en la tabla de imagen de proceso desalida (PIQ) en los módulos de salida.
Módulo de entrada
CPU
cic
lo d
e sc
an
Módulo de salida
A I 0.1A I 1.1= Q 4.0
.
.
.
.
Módulo OB 1
Procesamiento Cíclico del Programa
I2.0
Q4.3
I2.7 I0.5 I03 Q4.4
1
PII PIQByte 0Byte 1Byte 2....
Byte 0Byte 1Byte 2....
A(O I 2.0O Q 4.3)AN I 2.7AN I 0.5AN I 0.3= Q 4.4
Programade usuario
1
Imagen del Proceso
Tipo de Alarma OBs de alarma Aplicación
Alarma horaria OB 10 a OB 17 Calcula el flujo de un proceso demezcla al final de un turno
Alarma de retardo OB 20 a OB 23 Controla un ventilador para que se pare 20 seg después de parar un motor
Alarma cíclica OB 30 a OB 38 Muestrear el valor de una señal parael control de una planta
Alarma de proceso OB 40 a OB 47 Notificar que se ha alcanzado el valor máximo de un depósito
• Los OBs de alarmas permiten:• ejecutar partes del programa dependientes del tiempo• reaccionar eficazmente a señales externas al proceso
Módulos de Organización de Alarmas
CON
Alarma
Alarma
Alarma
del procesoAlarma de Proceso•gobierno por interrupciones
Procesamiento Cíclico•procesamiento normal. OB1
Arranque•comprobación e inicialización de valores•condiciones de arranque
Alarma cíclica•periodos de tiempo predeterminados•importante en lazos regulación
Tratamiento de Error•en función de fallos•sólo en algunas gamas
cíclica
Alarmahoraria Alarma horariaAlarmade retardo Alarma de retardo
por errores
Ejecución de Programas – Tipos de Procesamiento
Definición: El tiempo de ciclo es el tiempo que transcurre durante unciclo de programa. Está constituido por:
• Tiempo de ejecución del S.O.• Tiempo de transferencia de las imágenes del proceso (PII, PIQ)• Tiempo de ejecución del programa• Temporizadores• Funciones integradas• Carga por alarmas• Carga por comunicación (Profibus-DP, MPI)
Programa de usuarioA I 1.0= Q 4.0
Tiempo de ciclo
PII S.O. PIQ PII
S.O.Programade usuario
Interrupcionespor alarmas
Tiempo de Ciclo
El tiempo de respuesta es el tiempo que transcurre entre el reconocimiento de una señalde entrada y el cambio de estado de la señal de la salida correspondiente. Depende de:
• Tiempo de ciclo• Retardo en las entradas y salidas• Tiempos de rotación adicionales en la red Profibus
Ejecución del programaA I 1.0= Q 4.0
Tiempo de reacciónRetardo delos módulosde entrada
10
10
I 1.0
Q 4.0tiempo
PII S.O. PIQ PII
Tiempo de Respuesta
El tiempo de respuesta más corto se presenta cuando el estado de la entrada observada cambia justo antes de la carga de la PII. En este casohay que tener en cuenta:
• Tiempo de retardo de la entradas• Tiempo de actualización de la PII• Tiempo de paso por el S.O.• Tiempo del programa de usuario• Tiempo de ejecución de los temporizadores• Tiempo de actualización de la PIQ• Retardo de las salidas
Tiempo de Respuesta más Corto y más Largo
El tiempo de respuesta más largo se presenta cuando el estado de la entrada observada cambia durante la carga de la PII. En este casoel tiempo de respuesta es:
• tiempo de retardo de la entradas• 2 x tiempo de actualización de la PII• 2 x tiempo de paso por el S.O.• 2 x tiempo del programa de usuario• tiempo de ejecución de los temporizadores• 2 x tiempo de actualización de la PIQ• tiempo de retardo de las salidas
• Si se ha definido un tiempo de ciclo mínimo y este es mayor que el tiempo de ciclo real, al finalizar el programa cíclico la CPU dispone de tiempo de ejecución.
• El tiempo disponible se utiliza para procesar el OB de tarea no prioritaria.
Módulos de Org. de Tarea no Prioritaria
• Los OBs de alarmas cíclicas permiten:• ejecutar partes del programa en periodos de tiempo determinados
Módulo de Organización de Alarmas Cíclicas
Programas S7/M7 (no asignados a ningún HW)
Programas de usuario con módulos S7:OBs, FBs, FCs, DBs,....... Fuentes AWL para programas de usuario
CPU programable de un S7-400Programas S7/M7 (asignados a HW)Programas de usuario (off-line)
Estación HW de un S7 - 400
M7-FM programable
Fuentes AWL
Estructura de un Proyecto S7
Módulos de STEP7
• La herramienta Programar Módulo S7 (KOP, AWL) se puede utilizar para editar módulos off-line (almacenados en el dispositivo de programación) o bien on-line(módulos que están en la CPU). Hay que indicar la opción deseada y seleccionar el módulo.
Seleccionar un Módulo para la Edición
Tabla deDeclaraciónde Variables
Sección deCódigo
Partes de un Módulo
Word Bits S7
8 7 6 5 4 3 2 1 0 BR CC0 CC1 OV OS OR STA RLO /FC
Bit /FC – Firts Check – Bit de Primera Consulta
Cada operación lógica consulta el estado del bit /FC, así como el estado de señal del operando direccionado. Si el bit /FC es ”0”, la operación almacenará el resultado de la consulta del estado de señal en el bit RLO de la palabra de estado (bit RLO) y el bit /FC se pone a ”1”. Este proceso se denomina primera consulta.
Ciertas instrucciones como =, S y R establecen el /FC bit a 0 iniciando así una nueva lógica después de ellas: condicionesacciones (Con esos operandos, se cierra la consulta actual y se abre una nueva (además del inicio del programa).
Otras instrucciones como AND o OR establecerán el bit / FC a 1 para combinar la lógica con la siguiente instrucción.
Bit RLO – Result of Logic Operation – Resultado Lógico
Este bit almacena el resultado de una operación lógica binaria (AND, NAND, OR, NOR, NOT) o de una comparación (XOR--or exclusiva--, XNOR --nor exclusiva--). Otras instrucciones leen el RLO (=, S, R) para determinar cómo se van a ejecutar.
STA “Status” (bit 2) El bit estado almacena el estado de la dirección de Booleana actual (bit direccionado). Ejemplo con RLO, STA y / FC Si estás acostumbrado a la lógica de escalera (ladder) y estas luchando por entender el propósito del RLO y STA puede ayudarte el siguiente ejemplo. El STA se utiliza para realizar un seguimiento del estado de la direccion. El RLO se utiliza para mantener seguimiento del estado del renglón.
EL programa AWL equivalente seria el siguiente:
1. Al iniciar el primer chequeo el bit /FC es cero por lo que una instrucción Y lógica reflejará el bit de
estado (STA) hacia el Resultado de Operación lógica (RLO) . En este caso, la dirección de E 1.0 es 1 por lo que el
STA es 1 y el resultado de la lógica (RLO) será 1. Es decir, en la primera operación lee el STA de la primera
instrucción y lo copia en el RLO de la primera instrucción.
2. En la segunda línea el bit /FC es ahora 1 que indica que esta línea tiene que usar el RLO de la anterior dirección
I1.0 con el STA de la actual direccion I1.1. Como STA = 1 en I1.1, el RLO de la linea procesada es 1 . Es decir, lee el
RLO de I1.0 (instrucción anterior) y el STA de I1.1 (instrucción actual) y realiza una AND logica, que es lo que dice
la instrucción (si fuese O haria OR logica), y el resultado lo copia al RLO de I1.1 (instrucción actual).
3. Lo mismo ocurre en la segunda línea, pero esta vez de 1 hace que el actual RLO = 0. Es decir, AND entre RLO de
I1.1 y STA de M0.0, almacenandolo en STA de M0.0)
4. La cuarta es la instrucción de asignación que toma el RLO y lo escribe en la direccion/es correspondientes (en
las otras instrucciones las lee –- marcas, entradas --, en asignaciones, set y reset las escribe). En este caso final
RLO = 0 por lo que la salida será OFF. (Si M0.0 fuese 1, entonces la operación se evaluará como TRUE haciendo el
RLO = 1 activando la salida Q1.0).
Operaciones de Y lógica.
Esto lo vas a pillar enseguida verás. Imagina que tienes dos entradas que cuando están las dos a true (1), tenemos que activar una salida. La logica sería así:
U E 0.0
U E 0.1
= A 1.0
Es decir, iniciamos el segmento leyendo lo que hay en el E0.0 y le hacemos un AND con el E0.1 y su resultado se lo asignamos a la salida A1.0.
O de otra forma, cargamos el E0.0 en el RLO y luego hacemos un AND de la E0.1 con el RLO y se lo asignamos a la A1.0
Operación O lógica
En buena lógica (nunca mejor dicho), podrías pensar que la forma correcta de hacer un OR sería:
U E0.0
O E0.1
= A1.0
Y eso funcionria bien. Pero la forma más mejór sería haciendo:
O E0.0
O E0.1
= A1.0
¿Por qué?
Lógicamente hacen lo mismo. Pero me gusta más hacerlo así porque de hecho, cuando traduces un OR de KOP a AWL así lo representa. Mejor que escribamos todos de la misma manera ¿no?
Bueno, al grano. ¿Adivinas como actuaría no?
Inicialmente haría un:
U E0.0 // O E0.0
Como en el caso anterior leería el estado del E0.0 y lo volcaría en el RLO (imaginemos un cero).
Luego un:
O E0.1
Y aquí haría un OR con el RLO. Imaginemos que el E0.1 estuviera a uno. El resultado del OR sería un bonito uno.
= A1.0
E igualamos el uno a la salida A1.0. ¿Sencilo no? Vayamos ahora con los paréntesis.
NOTA: TENEMOS TODAS LAS OPERACIONES LOGICAS CON PUERTASAND, NAND, OR, NOR, XOR, XNOR, NOT
Paréntesis en AWL en Step 7
Como puedes imaginar, en cuanto queramos realizar combinaciones un poco más elaboradas necesitaremos paréntesis para poder realizar estas lógicas.
Así, dispondremos de las siguientes operaciones:
U( ..) //UN(..) que valdrá para realizar un (N)AND con el contenido interior al paréntesis O(..) // ON(..) que valdrá para realizar un (N)OR con el contenido interior del paréntesis. X(..) // XN(..) que valdrá para realizar una (N)XOR con el contenido interior del paréntesis
En definitiva en lo que se basa es en realizar la combinatoria interior del paréntesis y luego ejecutar la operación asociada al paréntesis.
Los paréntesis pueden anidarse metiendo paréntesis dentro de otros paréntesis. Así, odríamos hacer algo similar a lo anteriores ejemplos:
U(
U E0.0
O E0.1
)
O(
U E0.2
U E0.3
)
= A1.0
En este caso primero resolvería la combinatoia interior de los paréntesis por separado y luego realizaría el OR entre el resultado de los paréntesis.
Hay que añadir que el caso del OR es un poco especial ya que si dentro del paréntesis del OR la combinatoria es de AND exclusivamente, el paréntesis se podría haber obviado quedando esa parte así:
O
U E0.2
U E0.3
Y funcionaría exáctamente igual.
Operandos de cierre de consulta
A estas alturas de la película te estarás preguntando… si los resultados de la combinatoria se van almacenando en el RLO, ¿qué pasa después de una igualación si quiero empezar a realizar una nueva combinatoria?
Pues efectivamente después de los operandos:
Igualación (=) Set (S) Reset (R)
Con esos operandos, se cierra la consulta actual y se abre una nueva (además del inicio del programa)
Da igual por tanto lo siguiente que hagas (U,O, UN…) porque lo que se hará es una lectura del operando en el RLO. Es decir, si la siguiente a una igualación es
…
= A1.0
UN E1.0
U E1.1
= A1.2
Lo que hará es leer el estado de la E1.0, le cambiará el signo y lo cargará en el RLO. No hará un NAND con nadie. Simplemente realizará la carga en el RLO.
Ojo. Un cambio de segmento no es un inicio de programa. Por tanto si la última instrucción de un segmento es la lectura de un bit haciendo un U E0.7, este afecta al siguiente segmento. A efectos prácticos es como si lo hubieras escrito al principio del nuevo segmento
FUNCIONES DE RLO EN CONTADORES Y TEMPORIZADORES
Ya hemos visto la logica binaria, pero ahora vamos a emplearlo a temporizadores y contadores. ¿¿Os habeis preguntado porque cuando cargamos un temporizador SE sigue contando?? La primera idea es que se siga CUMPLIENDO LA CONDICION….Pues la respuesta es que mientras el RLO no cambie sigue contando.
De ahí que si solo creemos que el programa funciona “CUMPLE CONDICIONEJECUTA INSTRUCCIÓN” la respuesta esta mal, pues en cada vuelta de ciclo de programa, cuando le toque evaluar la misma instruccion deberia CARGAR DE NUEVO el temporizador, pero no lo hace. Y lo mismo ocurre con los contadores.
DE HECHO, UN PRIMER PROBLEMA DE PROGRAMACION RESIDE EN QUE DEBEMOS PROVOCAR UN CAMBIO DE RLO PARA QUE FUNCIONEN CIERTAS CONDICIONES COMO QUEREMOS, O VICEVERSA.
UN SEGUNDO PROBLEMA ES QUE LAS OPERACIONES DEBEN TENER SIEMPRE EL FORMATO CONCRETO DE DATOS PARA LA OPERACIÓN A REALIZAR.
¿Qué es un set, reset y asignacion en AWL?
Un SET no es mas que fijar a uno una variable booleana. Como la has fijado, esta variable seguirá a uno aun cuando las condiciones de ponerla a uno desaparezcan.
Se diferencia de una igualación (asignacion) en que en esta, el resultado final es dependiente en todo momento de las condiciones para estar a uno o a cero. Mientras que todas las condiciones se cumplan la variable estara a uno. Cuando una o varias de las condiciones no se cumpla, la señal cae, sera false, 0.
Aquí no. Una vez dadas las condiciones la señal estará a uno indefinidamente… o hasta que se le haga un RESET. Y es que el RESET lo que hace es fijar a cero la variable. Como en el caso anterior, aunque las condiciones de reset desaparezcan, la señal seguirá a cero y no recobrará su estado de uno hasta un nuevo SET.
¿Qué pasa si se dan ambas condiciones, SET y RESET en AWL?
Pues lo primero que habría que darte un capón por hacer un programa en el que el set y reset se de simultáneamente.
¿Puede darse ese caso? Porsupuestísimo que sí.
¿Es grave? No conozco a nadie que haya enfermado de ello, pero mejor evitarlo.
¿Qué pasa si se da? La respuesta seguro que la sabes. Depende.
¿De qué depende ? De según como se ejecute todo depende… .
Como bien sabes, si ambas condiciones se dan simultáneamente y seguidas una de otra, la que sobrevivirá del envite será la segunda.
¿Qué pasa si mezco Set, Reset e igualaciones?
Espero que esto no se te haya pasado siquiera por la cabeza… cárcel directamente. Punto. Y sin galletas en el desayuno hasta nuevo aviso.
Vale, vale… pero ¿qué hay del SET y RESET en AWL?
O E0.0
O E0.1
S A 1.0
U E0.2
U E0.3
R A1.0
¿Chupado no?
Como bien imaginarás, la señal A1.0 se pondrá a uno, cuando el OR formado por la E0.0 y E0.1 de como resultado un uno poniendo el RLO a uno.
Igualmente, la A1.0 se podrá a cero, cuando el AND de la E0.2 y E0.3 se ponga a uno poniendo el RLO también a uno haciendo por tanto el reset.
En definitiva, el Set y el Reset se ejecutarán forzando la marca o salida en una dirección u otra, cuando el RLO esté a uno y pasando olímpicamente del Set o Reset cuando el RLO esté a cero.
¿Fácil no?
Forzado del RLO – SET y CLR
Unas instrucciones muy interesantes son las de forzar el RLO, es decir, cargar en el RLO un cero o un uno de forma incondicional hasta que haya una nueva operación de combinatoria booleana:
SET: Fijaremos con ello el RLO a uno CLR: Fijaremos con ello el RLO a cero
Por ejemplo:
U E0.1
U E0.2
SET
= A1.0
¿Cuánto valdrá A1.0?
Pues efectivamente, la salida A1.0 estará forzada a uno ya que da igual lo que pase con la combinación de las dos entradas ya que luego se fuerza el RLO a uno y se iguala su valor a la A1.0
Flancos en AWL
Finalmente vamos a ver los pulsos. Hay dos:
Positivo (FP) Negativo (FN)
Los pulsos como bien sabes son instrucciones que ponen el RLO a uno cuando se cumple el escalon de subida de cero a uno (el positivo) o que el RLO previo pase de uno a cero (el negativo).
Necesitan una marca auxiliar que es la que almacena la información de cómo estaba el RLO en el ciclo anterior.
Mejor con un ejemplo:
U E0.0
FP M1.0
= A1.0
Lo que hará este mini ejemplo será: Mientras que la marca E0.0 esté a cero, la el RLO tras el pulso estará a cero. Cuando la entrada pase a uno, entonces en ese ciclo de scan el pulso pondrá el RLO a 1 haciendo que la salida A1.0 se active en ese ciclo de scan. En el ciclo siguiente aún estando la entrada a uno, la salida volverá a cero ya que el RLO a la salida del pulso estará a cero.
Si hicieramos un ejemplo similar con el flanco negativo:
U E0.0
FN M1.0
= A1.0
El comportamiento sería igual salvo que esta vez, el RLO después del FN se pondrá a uno cuando la señal de la E0.0 pase de estar a uno a estar a cero. Análogamente al caso anterior sólo estará a uno en ese ciclo de scan, volviendo a cero en los sucesivos con independencia de que la salida siga a cero en este caso.
Automatización Industrial
Operaciones con Bits de Estado
TEMA – Operaciones con Bits de Estado
1. – Descripción de los Bits de Estado
2. – Modificación de los Bits de Condición
3. – Evaluación de Bits de la Palabra de Estado
4. – Operaciones sobre el RLO
Índice
Estructura de la Palabra de Estado
Bits de Estado – Palabra de Estado
• Los Bits de Estado son bits indicadores de operación (flags)• Son utilizados por la CPU para controlar las operaciones binarias y las actualiza durante el
procesamiento digital.• La palabra de estado contiene bits a los que se puede acceder con el operando de
operaciones lógicas con bits y con palabras.
Definición
Descripción de los Bits de Estado (I)
Cada operación lógica consulta el estado del bit /FC, así como el estado de señal del operando direccionado. Si el bit /FC es ”0”, la operación almacenará el resultado de la consulta del estado de señal en el bit RLO de la palabra de estado (bit RLO) y el bit /FC se pone a ”1”. Este proceso se denomina primera consulta
Bit /FC – Firts Check – Bit de Primera Consulta
Este bit almacena el resultado de una operación lógica binaria o de una comparación.
Bit RLO – Result of Logic Operation – Resultado Lógico
Descripción de los Bits de Estado (II)
El bit de estado almacena el valor del bit direccionado.
Bit STA – Status – Bit de Estado
El bit OR (O) se requiere al realizar una combinación Y antes de O con una operación O.
Bit OR – Bit de Estado OR
Indica un desbordamiento en el rango de un número o la utilización de números reales no válidos.
Bit OV – Overflow – Bit de Desbordamiento
Se activa junto con OV, pero permanece activo hasta llamada a bloque, fin de bloque o JOS (salto si OS = 1).
Bit OS – Stored Overflow – Bit de Desbordamiento Memorizado
Descripción de los Bits de Estado (III)
Los bits CC1 y CC0 dan información sobre los resultados o bits siguientes:
• Resultado de una operación aritmética• Resultado de una operación de comparación• Resultado de una operación digital• Bits que han sido desplazados por una operación de desplazamiento o de rotación
Bits CC1 y CC0 – Condition Code Bits – Bits Condición
El bit BR corresponde a la salida de habilitación (ENO) para el cuadro KOP.Con la operación SAVE (en STL) o con la bobina se guarda un RLO en el bit BR.
Bit BR – Binary Result – Bit de Resultado Binario
Modificación de los Bits de Condición (I)
CC1 y CC0 tras operaciones aritméticas con enteros, con desbordamiento
CC1 y CC0 tras operaciones aritméticas (coma flotante) con desbordamiento
CC1 y CC0 tras operaciones aritméticas, sin desbordamiento
Modificación de los Bits de Condición (II)CC1 y CC0 tras operaciones de comparación
CC1 y CC0 tras operaciones de desplazamiento y rotación
CC1 y CC0 tras operaciones lógicas digitales
Evaluar los Bits de la Palabra de Estado (I)
Bit de Anomalía - Registro BR• Consulta el valor de señal del bit BR (resultado binario)
BR&
≥1BR S
I 0.0
I 0.1 Q 4.0
Bit de Anomalía - Operación no Válida• Determina si el resultado de una función aritmética de números en coma flotante es o
no admisible (es decir, si uno de los valores de la función aritmética no es un número en coma flotante válido). Para ello se evalúan los códigos de condición de la palabra de estado (CC1 y CC0).
UO
Bit de Anomalía - Desbordamiento• Detecta un desbordamiento (OV) en la función aritmética ejecutada en último lugar. Si
tras una función aritmética el resultado se encuentra fuera de rango.
OV
Bit de Anomalía - Desbordamiento Memorizado• Detecta un desbordamiento permanente (OS). A diferencia del bit OV (bit de
desbordamiento), el bit OS permanece activado aunque las operaciones aritméticas se ejecuten sin error.
OS
Evaluar los Bits de la Palabra de Estado (II)
Bits de Resultado• Determinar la relación entre el resultado de una
operación aritmética y 0
SUB_IENIN1 OUTIN2 ENO
&>=0 S
IW0IW2 Q 4.1
I 0.0MW10
Operaciones de Consulta de Bits de Estado en STL
Evaluar los Bits de la Palabra de Estado (III)
Resultado Binario [BR = 1]BR
Overflow Memorizado [OS = 1]OS
Overflow [OV = 1]OV
Resultado inválido (fuera de orden) [(CC0 = 1) && (CC1 = 1)]UO
Resultado igual a 0 [(CC0 = 0) && (CC1 = 0)]==0
Resultado distinto de 0 [(CC0=0) && (CC1=1) v (CC0=1) && (CC1=0)]<>0
Resultado menor o igual que 0 [(CC1 = 0)]<=0
Resultado menor que 0 [(CC0 = 1) && (CC1 = 0)]<0
Resultado mayor o igual que 0 [(CC0 = 0)]>=0
Resultado mayor que 0 [(CC0 = 0) && (CC1 = 1)]>0
Chequea que no cumple condición y operación lógica XOR-XN
Chequea que no cumple condición y operación lógica OR-ON
Chequea que no cumple condición y operación lógica AND-AN
Chequea que cumple condición y operación lógica XOR-X
Chequea que cumple condición y operación lógica OR-O
Chequea que cumple condición y operación lógica AND -A
Operaciones de Bits de Estado en STL
Evaluar los Bits de la Palabra de Estado (IV)
JOS1-----
JO-1----
JUO--11--
JN, JM, JMZ--01--
JN, JP, JPZ--10--
JZ, JMZ, JPZ--00--
JNBI----0-
JBI----1-
JCN, JNB-----0
JC, JCB-----1
Funciones de Salto EjecutablesOSOVCC1CC0BRRLO
Operaciones sobre el RLO en STL
Operaciones sobre el RLO
Niega el contenido del RLONOT
Guarda el contenido del RLO en BRSAVE
Establece el RLO a “0”CLR
Establece el RLO a “1”SET
Operaciones de Carga y Transferencia de la Palabra de Estado
Carga y Transferencia de la Palabra de Estado
Transfiere el valor del ACU1 a la palabra de estadoT STW
Carga la palabra de estado en el ACU1L STW
Dependiendo de la CPU, los bits /FC, STA y OR no se copian en el ACU1, se ponen a “0”
Ejemplo 1:
Ejemplos
SET ;S M 8.0; // Pone a 1 marcaR M 8.1; // Pone a 0 marcaCLR ;S C 1; // Pone a 0 el
// flanco del set del contador
Ejemplo 2:SET ;SAVE; // Pone BR a 1...AN OV;SAVE; // Pone BR a 0 con overflow...
Tipos de datos en S7
www.campusabierto.es ©Adolfo Molina
Tipo y descripción Tamaño
en bits Opciones de formato Márgenes y representación
numérica Ejemplo
BOOL (bit)
1 Variable booleana Todo / Nada
TRUE/FALSE 1 / TRUE 0 / FALSE
Formato de variables numéricas “matematizables” (con operaciones de cálculo)
INT (número entero) Identificador: I
16 W
Número entero con signo -32768 hasta 32767
150
DINT (entero de 32 bits) Identificador: D
32 DW
Número entero con signo L#-2147483648 hasta L#2147483647
L#85
REAL (número decimal en coma flotante) Identificador: R
32 DW
IEEE Número en coma flotante
Límite superior: 3.402823e+38 Límite inferior: 1.175 495e-38
1.234567e+13 6,0 0,0
Formatos de tiempo
S5TIME (tiempo SIMATIC)
16 W
Tiempo S7 en pasos de 10 ms (valor estándar)
S5T#0H_0M_0S_10MS hasta S5T#2H_46M_30S_0MS
S5T#0H_1M_0S_0MS S5TIME#0H_1H_1M_0S_0MS
TIME (tiempo IEC)
32 DW
Tiempo IEC en intervalos de 1 ms, número entero con signo Equivale al formato DINT (D) con unidad de 1ms
-T#24D_20H_31M_23S_648MS hasta T#24D_20H_31M_23S_647MS
T#0D_1H_1M_0S_0MS TIME#0D_1H_1M_0S_0MS
DATE (fecha IEC)
16 W
Fecha IEC en pasos de 1 día D#1990-1-1 hasta D#2168-12-31
D#1994-3-15 DATE#1994-3-15
TIME_OF_DAY (hora)
32 DW
Hora en intervalos de 1 ms TOD#0:0:0.0 hasta TOD#23:59:59.999
TOD#1:10:3.3 TIME_OF_DAY#1:10:3.3
Tipos de datos en S7
www.campusabierto.es ©Adolfo Molina
Tipo y descripción Tamaño en bits
Opciones de formato Márgenes y representación numérica
Ejemplo
BYTE (byte)
8 B
Número hexadecimal
B#16#0 hasta B#16#FF
B#16#10
WORD (palabra)
16 W
Número binario Número hexadecimal BCD Formato carga contadores Z Número decimal sin signo Dos Byte
2#0 hasta 2#1111_1111_1111_1111 W#16#0 hasta W#16#FFFF C#0 hasta C#999 B#(0,0) hasta B#(255,255)
2#0001_0000_0000_0000 W#16#1000 C#12 B#(136,20)
DWORD (palabra doble)
32 DW
Número binario Número hexadecimal Número decimal sin signo Cuatro Byte
2#0 hasta 2#1111_1111_1111_1111_ 1111_1111_1111_1111
DW#16#0000_0000 hasta DW#16#FFFF_FFFF B#(0,0,0,0) hasta B#(255,255,255,255)
2#1000_0001_0001_1000_ 1011_1011_0111_1111 DW#16#00A2_1234 B#(1, 14, 100, 120)
Variable ASCII (carácter)
8 B
Caracteres ASCII 'A','B' etc. 'E'
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
Introducción a los Tipos de Datos en STEP 7
Tipos de datos elementales (hasta 32 bits)
Tipos de datos complejos (mayores de 32 bits)
Tipos de datos definidos por el usuario (mayores de 32 bits)
• Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)
• Tipos de Datos Matemáticos (INT, DINT, REAL)
• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)
• Tiempo (DATE_AND_TIME)
• Array (ARRAY)
• Estructura (STRUCT)
• Cadena de Caracteres (STRING)
Tipo de Datos UDT (User Defined Type)
PLC’s Página 3 Curso 2009/10 Curso 2009/10
• La memoria del Autómata está estructurada en bytes.
• Estos bytes podemos agruparlos/descomponerlos, obteniendo los siguientes tamaños de datos: – Bit _ _ _ .Nº
– Byte (8 bits) _ _ _ B
– Palabra/word (16 bits) _ _ _ W
– Doble palabra/double word (32 bits) _ _ _ D
• Se puede acceder a cualquier área de la memoria: marcas, entrada, salida, etc. con cualquiera de los tamaños de datos:
TIPOS DE DATOS DE BIT – TAMAÑO
PLC’s Página 4 Curso 2009/10 Curso 2009/10
E Tam BBB.b
Zona de memoria:
• E -> Entradas • A -> Salidas • T -> Temporizadores • Z -> Contadores • M -> Marcas • DB -> Módulos de datos • P -> Acceso directo (PA, PE)
Tamaño del Dato que vamos a usar (bit por omisión): B, W, D
Número de byte y bit (0-7), en su caso
DIRECCIONAMIENTO 1/3
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Dentro de cada byte, palabra o doble palabra, los bits se numeran de
derecha a izquierda, de 0 al 7. E 124.0
• Dir. byte: área de memoria + B + nº de byte EB124
• Dir. palabra: área de memoria + W + nº de su 1er byte
EW124 => EB124 EB125
• Dir. doble palabra: área de memoria + D + nº de su 1er byte
MD0 => MB0 MB1 MB2 MB3
DIRECCIONAMIENTO 3/3
PLC’s Página 7 Curso 2009/10 Curso 2009/10
• Sistemas numéricos soportados: – Decimal (enteros y fraccionarios), binario, hexadecimal, BCD
• Tipos de datos:
– Entero (en cualquiera de los sistemas numéricos anteriores) – Real (coma flotante) – Carácter – Tiempo: cantidad de tiempo, hora, S5T, fecha – Puntero
SISTEMAS NUMÉRICOS
Ver ayuda Admin. Simatic Tipos de datos simples
PLC’s Página 8 Curso 2009/10 Curso 2009/10
Tipos de Datos Elementales en STEP 7
BOOL 1 1 ó 0 BYTE 8 B#16#A9 o B169 WORD 16 W#16#12AE o W4782 DWORD 32 DW#16#ADAC o DW44460 CHAR 8 ' w '
S5TIME 16 S5T#5s_200ms
INT 16 123 DINT 32 65539 REAL 32 1.2 o 34.5E-12
TIME 32 T#2D_1H_3M_45S_12MS DATE 16 D#1993-01-20 TIME_OF_DAY 32 TOD#12:23:45.12
Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo
PLC’s Página 9 Curso 2009/10 Curso 2009/10
Números en COMA FLOTANTE (1/2)
- Signo (S) ⇒ 1: negativo , 0: positivo (bit 31)
- Mantisa (M) ⇒ La mantisa incluye 23 bits (bit 0.. 22).
- Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30).
... 31 30 23 22 21 2 1 0 ………...
Estándar IEEE754: Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)
PLC’s Página 10 Curso 2009/10 Curso 2009/10
Números en COMA FLOTANTE (2/2)
Estándar IEEE754: Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)
• Ejemplo:
1#10000000#11000000000000000000000
– Parte ligada al signo: (-1)1 = -1 – Parte ligada al exponente: 2128-127=21 = 2 – Parte ligada a la mantisa: 1+6291456·2-23=1+0.75 =1.75 – Resultado: -1 · 2 · 1.75 = -3.5
PLC’s Página 11 Curso 2009/10 Curso 2009/10
• Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas.
• CPU 314IFM tiene 2 acumuladores. • Carga al ACCU1,
y el antiguo ACCU1 pasa al ACCU2.
• Si cargamos o transferimos tamaños de datos menores a la doble palabra ( bits, bytes (B), word (W) ), se empieza a leer y escribir por la derecha (byte menos significativo)
ACUMULADORES (1/2)
ACCU-H (16 bits) ACCU-L (16 bits)
PLC’s Página 12 Curso 2009/10 Curso 2009/10
Operaciones entre acumuladores:
– TAK: intercambia contenido ACCU1 y ACCU2 .
– PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º.
– POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º.
– ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4.
– LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.
ACUMULADORES (2/2)
PLC’s Página 13 Curso 2009/10 Curso 2009/10
Permiten programar intercambio de información entre módulos de E/S y áreas de memoria.
L --> Instrucción de carga a ACCU-1
T --> Instrucción de transferencia desde ACCU-1
• Cargan y transfieren del acumulador ACCU1, independientemente del valor RLO, y tampoco lo modifican.
• A dichas instrucciones les sigue un código en el que se indica el tamaño, formato y el número/posición a cargar o transferir.
CARGA Y TRANSFERENCIA 1/7
PLC’s Página 14 Curso 2009/10 Curso 2009/10
• Ejemplos:
– LC Z0 --> Carga el contenido del contador en el acumulador en BCD.
Si Z0=10 ACU1: 00 00 00 .......... 0001 0000 (BCD)
– L Z0 --> Idem pero en Binario
Si Z0=10 ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)
– L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,
CARGA Y TRANSFERENCIA 2/7
PLC’s Página 15 Curso 2009/10 Curso 2009/10
• Ejemplos:
– L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE)
ACU1: EB124 EB125 EB126 EB127
Obsérvese: el byte más significativo del acumulador (parte izquierda) queda
relleno con el byte de dirección menor, y el de mayor dirección, a la dcha.
– L EW8 (Cargar en el ACU1 la palabra 8 de la PAE) 00 00 EB8 EB9
– L EB8 (Cargar en el ACU1 el byte 8 de la PAE) 00 00 00 EB8
CARGA Y TRANSFERENCIA 3/7
PLC’s Página 16 Curso 2009/10 Curso 2009/10
• Ejemplos (con los Registros de Direcciones, AR1 y AR2): – LAR1 ----> Carga el reg.de dirección AR1 con el contenido de ACU1 – LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2 – TAR ----> Intercambia los contenidos de registros AR1 y AR2 – TAR1 R2 ----> Transfiere el contenido de AR1 a AR2 El listado AWL siguiente:
L ED 124 LAR1 L ED 128 LAR2 TAR
Tendrá como resultado:
ED124 ----> AR2
ED128 ----> AR1
CARGA Y TRANSFERENCIA 4/7
PLC’s Página 17 Curso 2009/10 Curso 2009/10
• Ejemplos (L y T con diferentes tamaños):
– L EB124 (Cargar en el ACU1 el byte 124 de las entradas) 00 00 00 EB124
– Si ahora hacemos T MW32 00 00 00 EB124
MB32 MB33
• L ED124 EB124 EB125 EB126 EB127
T MB32 MB32
CARGA Y TRANSFERENCIA 5/7
PLC’s Página 18 Curso 2009/10 Curso 2009/10
L +5 --> Carga entero de 16 bits
L L#523123 --> Carga un entero de 32 bits
L B#16#EF --> Carga un hexadecimal de 8 bits
L 2#0011_0110_1110_0011 --> Carga binario de 16 bits
T MB0 --> Transfiere (el ACU1) al byte de marcas 0
T AD256 --> Transfiere (el ACU1) a la doble palabra de salida 256
CARGA Y TRANSFERENCIA 6/7
NOTA:
Ver ayuda Adm. Simatic
“Tipos de datos simples”
PLC’s Página 20 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 4)
• Tenemos una mezcladora que produce 2 tipos de productos, magdalenas y donuts, para lo cual controla la receta, modificando las proporciones de harina (A124.0) y leche (A124.1), y el tiempo que está mezclándolos (A124.2).
• La producción empezará cuando E124.0 se ponga a 1 • Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 3 segundos, A124.1 está encendido 1 segundo y A124.2 durante 2 sg.
• Si E124.1=0 produce donuts, para lo cual los tiempos son 4, 3 y 2 segundos respectivamente.
• El sistema debe ser robusto de forma que si está en medio de una receta no debe interrumpirse aunque cualquiera de los dos botones de entrada se modifique
Automatización Industrial
Módulos de Datosy
Tipos de datos
TEMA – Módulos de Datos y Tipos de Datos
1. – Tipos de Módulos de Datos
2. – Edición de Módulos de Datos
3. – Llamada a Módulos de Datos
4. – Acceso a Módulos de Datos
5. – Tipos de Datos
5.1 – Tipos de Datos Elementales
5.2 – Tipos de Datos Estructurados
Índice
Módulo de datos a instancia
Leyenda:
FB
FB
FB
FC
SFC
SFBOB
Módulo deorganización
OB = Módulo de OrganizaciónFB = Módulo de FunciónFC = FunciónSFB = Módulo de Función de SistemaSFC = Función de Sistema SDB = Módulo de Datos de SistemaDB = Módulo de Datos
DB
DB DB
DB
Introducción
Byte datos 0
Byte datos 8191
8 bits
El máximo tamaño del módulopara la CPU 314 es 8 kBytes.La cantidad de memoria disponible para los módulos de datos depende de la CPU.
Global (normalmente usados)
Instancia (local)
Tipos de Módulos de Datos
Edición de Módulos de Datos (I)
STEP 7Dirección
de memorialocal Nombre
Valorinicial
Datablock c:\class\machine1\db10
Edición de Módulos de Datos (II)
Tipo de datos Comentario
:OPN DB 12:::L DB:T DB::CALL FC 16:::L DB:T DB:::BE
::::L DB:T DB::::OPN DB 13::L DB:T DB:::BE
FC 15 FC 16 DB 12
DB 13
Del OB 1
Al OB 1
Llamada a Módulos de Datos
OPN DB 19OPN valores
L DBB 1 Cargar el byte de datos 1.L DBW 2 Cargar la palabra de datos 2 (byte 2/3).L 5 Cargar el número 5.T DBW 4 Transferir a la palabra 4.L 'A' Cargar el carácter ASCII A.L DBB28 Cargar el byte de datos 28.==I Comparar.
U DBX 3.1 Consultar el bit 1 del byte 3.
L DB19.DBW4 Cargar la palabra de datos 4del DB19 (incluye OPN DB 19).
L valores.N1 Acceso simbólico a la variableN1. “valores” es el nombre simbólicodel DB que contiene dicha variable
Abrir módulo de datos Carga y Transferencia en Módulos de Datos
Acceso a Elementos de Datos
• STEP 7 permite tener dos DBs abiertos simultáneamente• Uno se referencia por DB (global) y el otro por DI (instancia)• La forma de abrirlos: OPN DB 5, OPN DI 7• Para cargar o transferir al DB: L DBB 0, T DBB 1• Para cargar o transferir al DI: L DIB 0, T DIB 3• Otra forma de direccionar sin abrir el DB:
L DB5.DBB 0, T DB7.DBB 1• Para direccionamiento de bit, byte, palabra y doble palabra:
A DB5.DBX 0.7, para direccionar un bitL DB5.DBB 7, para direccionar un byteL DB5.DBW 7, para direccionar una palabraL DB5.DBD 7, para direccionar una doble palabra
Direccionamiento
Notas de Acceso a Elementos de Datos
• Las variables de tipos de datos básicos tiene una longitud máxima dedoble palabra
• Son procesadas con instrucciones de carga y transferencia o con operaciones lógicas binarias
• Los tipos de datos elementales pueden ocupar un bit, un byte, unapalabra o una doble palabra
Declaración:
Varname : datatype := pre-assignment
Varname es el nombre de la variabledatatype es un tipo de dato elementalpre-assignment es el valor asignado
• Una variable pude ser declarada global en la tabla de simbólicos olocamente en la sección de declaraciones
Tipos de Datos Elementales
Tipo de Datos Tamaño(Bit)
Descripción
BYTE 8 Byte. Rango: 0 a 255WORD 16 Palabra. Rango: 0 a 65.535DWORD 32 Doble Palabra. Rango: 0 a 2
32-1
CHAR 8 Carácter. Cada carácter imprimible (Código ASCII>31)
STRING 8 X 254 Cadena de caracteres desde 2 a 254INT 16 Entero. Rango: -32.768 a 32.767DINT 32 Doble entero. Rango: -231 a 231-1
REAL 32 Número en coma flotante. (IEEE)TIME 32 Tiempo en intervalos de 1 ms (IEC)DATE 16 Fecha en intervalos de 1 día (IEC)TOD 32 Hora y día en intervalos de 1 ms: hora (0 a 23),
minutos (0 a 59), segundos (0 a 59), ms (0 a 999)S5TIME 16 Valor de tiempo para los temporizadores.
Rango: 0H_0M_0S_0MS a 2H_46M_30_0MS
BOOL 1 Bit. Rango: true o false
Tabla de Tipos de Datos Elementales
Longitud = 1 BIT BYTE Longitud = 8 BITS
PALABRA Longitud = 16 BITS
DOBLE PALABRA Longitud = 32 BITS
01234567
01234567
01234567
01234567
01234567 01234567 01234567
BIT
• Una variable tipo BOOL representa un bit (p.e. entrada I 0.0)• Una variable tipo BYTE es un conjunto de 8 bits (p.e.salidas QB 5)• Una variable tipo WORD es un conjunto de 16 bits (p.e. marcas MW 7)• Una variable tipo DWORD es un conjunto de 32 bits
Bit, Byte, Palabra y Doble Palabra
Número BCD, 3 décadas
8111215 0347
010110210Signo
Byte m Byte m+1
8111215 0347
410510610Signo
Byte m Byte m+1
8111215 0347
010110210
Byte m+2 Byte m+3
310
Número BCD, 7 décadas
• Se pueden introducir datos en BCD con tipo de dato 16# (hexa) y usar sólo dígitosde 0 a 9 (p.e. L W#16#2468)
• Para temporizadores está definido el tipo de datos S5TIME# (p.e. L S5TIME#30s.)• Para contadores está definido el tipo de datos C# o 16# (p.e. L C#368)
Representación en BCD
• EL tipo de datos CHAR representa un carácter en código ASCII.• Cada variable de tipo CHAR ocupa un byte (p.e. L ‘A’)
Dato tipo CHAR
01234567
Código ASCII
Byte m
Tipo de Dato CHAR
• Una variable de tipo de dato INT representa un entero que esalmacenado en 16 bits (una palabra) en coma fija
• No tiene un identificador especial• Los bits 0-14 representan el valor de la variable• El bit 15 representa el signo (“0” -> positivo ; “1” -> negativo)• Números negativos son almacenados en forma de complemento a dos• El rango posible desde +32.767 (7FFFhex) a -32.768 (8000hex)
INT:
S 021222.....214 .....15 14 .......0
Representación de Números (I)
• Una variable de tipo de dato DINT representa un entero que esalmacenado en 32 bits (doble palabra) en coma fija
• Un entero es almacenado como una variable DINT:• si es mayor de 32.767 o menor de -32.768• si el identificador L # precede al número
• Los bits 0-30 representan el valor de la variable• El bit 31 representa el signo (“0” -> positivo ; “1” -> negativo)• Números negativos son almacenados en forma de complemento a dos• El rango posible desde:
• +2,147,483,647 (7FFF FFFFhex) a -2,147,483,648 (8000 0000hex)
DINT:
S 021222.....230 .....31 30 .......0.......16 15.....
162.... ....215
L -100 // Se carga un número INT en ACU1. Palabra izquierda ACU1 (0000hex)L L#-100 //se carga un número DINT en ACU1. Palabra izquierda ACU1 (FFFFhex)
Representación de Números (II)
• Una variable de tipo de dato REAL representa una fracción que esalmacenado en 32 bits (doble palabra) en coma flotante
• Un entero es almacenado como una variable REAL:- si el punto decimal es seguido por un cero (L 100.0 o L 1.0e+2)
• La variable real consiste internamente en tres partes:- el signo (bit 31) ( “0” -> positivo; “1” -> negativo)- 8 bits para el exponente (en base 2) (bits 23 a 30) - 23 bits de mantisa (bits 0 a 29)
• Números “normalizados en coma flotante”:- rango desde -3.402 823 x 10 +38 a -1.175 494 x 10 -38)- +1.175 494 x 10 -38 a 3.402 823 x 10 +38
• Números “no normalizados en coma flotante”:- - 1.17 494 x 10 -38 a -1.401 298 x 10 -45- + 1.401 298 x 10 -45 a +1.175 494 x 10 -38
REAL:
S 12− 232−...27 .....31 30.... .......0.2322.....
02.... ....2 2−
Exponente Mantisa
Representación de Números (III)
REAL:
Representación de Números (IV)
• Una variable de tipo de dato S5TIME es usada para inicializar temporizadores en STL, LAD y FBD
• Ocupa una palabra de 16 bits con 1 + 3 décadas• El tiempo se especifica en horas, minutos, segundos y milisegundos• La conversión a la representación interna la realiza el STEP 7• El número es representado internamente en BCD de 000 a 999• El tiempo base puede se: 10 ms (00), 100ms (01), 1s (10) y 10s (11)• El tiempo es el producto del valor por la base
S5TIME:
01015 14 .......0
S5TIME#500ms (=0050hex)S5T#2h46m30s (=3999hex)
010110210Valor de tiempoBase de tiempo
Representación de Tiempos (I)
• Una variable de tipo de dato DATE es almacenada en una palabra como un número sin signo en coma fija
• El contenido de la variable corresponde al número de días desdeel 01.01.1990.
• La representación contiene el año, el mes y el año, cada unoseparado por (-)
DATE:
DATE#1990-01-01 (=0000hex)D#2168-12-31 (=FF62hex)
021222.....214 .....15 14 .......0152
Ejemplos:
Representación de Tiempos (II)
• Una variable de tipo de dato TIME ocupa una doble palabra• La representación contiene especificación de día (d), hora (h),
minutos (m), segundos (s) y milisegundos (ms) • El contenido de la variable es interpretado como milisegundos (ms)
y almacenados como un número de 32 bits en coma fija con signo
TIME:
TIME#24d20h31m23s647ms (=7FFF_FFFFhex)TIME#0ms (=0000_0000hex)
Ejemplos:
S 021222.....230 .....31 30 .......0.......16 15.....
162.... ....215
Representación de Tiempos (III)
• Una variable de tipo de dato TIME_OF_DAY ocupa una doble palabra• Contiene el número de milisegundos desde el comienzo del día (0:00)
como un número si signo en coma fija • La representación contiene la especificación de horas, minutos,
segundos y milisegundos.
TIME_OF_DAY:
TIME_OF_DAY#00:00:00 (=0000_0000hex)TOD#23:59:59.999 (=0526_5BFFhex)
Ejemplos:
021222.....230 .....31 30 .......0.......16 15.....
162.... ....215312
Representación de Tiempos (IV)
Ejemplo:
Representación de Tiempos (V)
• El tipo de dato DATE_AND_TIME representa un tiempo consistenteen fecha y momento del día
• Se puede utilizar la abreviación DT en lugar de DATE_AND_TIMEcomo un número si signo en coma fija
• La representación interna es de 64 bits•Se indica como Año-Mes-Día -h:min:s.ms
DATE_AND_TIME:
DT#1995-02-02-08:30:01.999
Tipos de Datos Estructurados y Arrays
COMPONENTESGEOMÉTRICOS
TIPOGEO_COMPONENTES
STRUCTCIRCULO: ENTEROTRIANGULO: PALABRA
CUADRADO: REALRECTANGULO: ENTERO
END_STRUCTEND_TYPE
FUNCTION_BLOCK: EJEMPLO
VARGEOMETRY:ARRAY [1...3 ] of GEO_COMPONENTSEND_VAR
Estructura Array
Strings
Antes de utilizar los datos locales dinámicos del tipo STRING, el usuario los debe inicializar p.ej. mediante una secuencia AWL tal como:
LAR1 P#lokal_string_var // lokal_string_var está declarada en VAR_TEMP como STRING[200]
L 200 // longitud de STRING indicada arriba
T LB [AR1, P#0.0] // introducido en el MAX Len Byte de la cadena
L 5 // longitud real de la cadena
T LB [AR1, P#1.0] // introducir longitud real de la cadena
UDT: Tipos de Datos de Usuario
Después de abrir un UDT se visualiza en una nueva ventana de trabajo la tabla de este tipo de datos de usuario en modo "Declaración".
• La primera y la última línea contienen ya las declaraciones STRUCT y END_STRUCT, respectivamente, que indican el comienzo y el fin del tipo de datos de usuario.
• Puede editar el tipo de datos de usuario comenzando a partir de la segunda línea de la tabla de declaración en las columnas correspondientes.
• Los tipos de datos de usuario pueden estar formados por: •tipos de datos simples, •tipos de datos compuestos o •tipos de datos de usuario ya existentes
UDTSon estructuras de datos creadas por el usuario y que, una vez definidas, pueden utilizarse en todo el programa.Los tipos de datos de usuario (UDTs) se crean en el Administrador SIMATIC o con el editor incremental.
Estructura de un UDT
UDT: Ejemplo en AWL
TYPE UDT 20 STRUCT arranque : BOOL; //variable del tipo BOOL teórico : INT; //variable del tipo INT alor : WORD; //variable del tipo WORD END_STRUCT; END_TYPE
Step 7 Elementary Data Types
Type and Description
Size in Bits
Format Options
Range and Number Notation (lowest to highest values)
Example in STL
BOOL (Bit)
1 Boolean text
TRUE/FALSE TRUE
BYTE (Byte)
8 Hexadecimal number
B#16#0 to B#16#FF L B#16#10 L byte#16#10
WORD (Word)
16 Binary number
2#0 to 2#1111_1111_1111_1111
L 2#0001_0000_0000_0000
Hexadecimal number
W#16#0 to W#16#FFFF L W#16#1000 L word#16#1000
BCD C#0 to C#999 L C#998
Decimal number unsigned
B#(0,0) to B#(255,255) L B#(10,20) L byte#(10,20)
DWORD (Double word)
32 Binary number
2#0 to 2#1111_1111_1111_1111_ 1111_1111_1111_1111
L 2#1000_0001_0001_1000_ 1011_1011_0111_1111
Hexadecimal number
W#16#0000_0000 to W#16#FFFF_FFFF
L DW#16#00A2_1234 L dword#16#00A2_1234
Decimal number unsigned
B#(0,0,0,0) to B#(255,255,255,255)
L B#(1, 14, 100, 120) L byte#(1,14,100,120)
INT (Integer)
16 Decimal number signed
-32768 to 32767 L 101
DINT (Double integer)
32 Decimal number signed
L#-2147483648 to L#2147483647
L L#101
REAL (Floating-point number)
32 IEEE Floating-point number
Upper limit +/-3.402823e+38 Lower limit +/-1.175495e-38
L 1.234567e+13
S5TIME (SIMATIC time)
16 S7 time in steps of 10ms (default)
S5T#0H_0M_0S_10MS to S5T#2H_46M_30S_0MS and S5T#0H_0M_0S_0MS
L S5T#0H_1M_0S_0MS L S5TIME#0H_1H_1M_0S_0MS
TIME (IEC time)
32 IEC time in steps of 1 ms, integer signed
T#24D_20H_31M_23S_648MS to T#24D_20H_31M_23S_647MS
L T#0D_1H_1M_0S_0MS L TIME#0D_1H_1M_0S_0MS
DATE (IEC date)
16 IEC date in steps of 1 day
D#1990-1-1 to D#2168-12-31
L D#1996-3-15 L DATE#1996-3-15
TIME _OF_DAY (Time)
32 Time in steps of 1 ms
TOD#0:0:0.0 to TOD#23:59:59.999
L TOD#1:10:3.3 L TIME_OF_DAY#1:10:3.3
CHAR (Character)
8 ASCII characters
A', 'B' etc. L 'E'
S5TIME NOTES
Underscores in time and date are optional It is not required to specify all time units (for example: T#5h10s is valid) Maximum time value = 9,990 seconds or 2H_46M_30S
S5TIME Format
Time base Binary Code
10 ms 00
100 ms 01
1 s 10
10 s 11
Symbol Table Allowed Addresses and Data Types
English
Mnemonics
German
Mnemonics Description Data Type
Address
Range
I/O Signals
I E Input bit BOOL 0 to
65535.7
IB EB Input byte BYTE, CHAR 0 to 65535
IW EW Input word WORD, INT, S5TIME,
DATE 0 to 65534
ID ED Input double word DWORD, DINT, REAL,
TOD, TIME 0 to 65532
Q A Output bit BOOL 0 to
65535.7
QB AB Output byte BYTE, CHAR 0 to 65535
QW AW Output word WORD, INT, S5TIME,
DATE 0 to 65534
QD AD Output double word DWORD, DINT, REAL,
TOD, TIME 0 to 65532
Marker Memory
M M Memory bit BOOL 0 to
65535.7
MB MB Memory byte BYTE, CHAR 0 to 65535
MW MW Memory word WORD, INT, S5TIME,
DATE 0 to 65534
MD MD Memory double word DWORD, DINT, REAL,
TOD, TIME 0 to 65532
Peripheral I/O
PIB PEB Peripheral input byte BYTE, CHAR 0 to 65535
PIW PEW Peripheral input word WORD, INT, S5TIME,
DATE 0 to 65534
PID PED Peripheral input double
word
DWORD, DINT, REAL,
TOD, TIME 0 to 65532
PQB PAB Peripheral output byte BYTE, CHAR 0 to 65535
PQW PAW Peripheral output word WORD, INT, S5TIME,
DATE 0 to 65534
PQD PAD Peripheral output double
word
DWORD, DINT, REAL,
TOD, TIME 0 to 65532
Timers and Counters
T T Timer TIMER 0 to 65535
C Z Counter COUNTER 0 to 65535
Logic Blocks
FB FB Function block FB 0 to 65535
OB OB Organization block OB 1 to 65535
FC FC Function FC 0 to 65535
SFB SFB System function block SFB 0 to 65535
SFC SFC System function SFC 0 to 65535
Data Blocks
DB DB Data block DB, FB, SFB, UDT 1 to 65535
User-defined data types
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10
Introducción
Tabla de declaración de variables
Variables locales y atributos del sistema
Área de instrucciones
Formado por uno o varios segmentos
Lenguajes posibles: AWL(inglés, aleman),
KOP, FUP
Propiedades de bloques Autor del bloque Fecha y hora de creación..........
OB’s, FB’s, FC’s
PLC’s Página 3 Curso 2009/10
Introducción
• Toda instrucción se compone de: marca de salto (opc.), operación, operando y comentario (opc.).
Ejemplo: M001: U E1.0 //Comentario
• Cada instrucción ocupa una línea propia.
• Por cada segmento se pueden introducir unas 2000 líneas.
• Al introducir operaciones o direcciones absolutas no se distingue entre mayúsculas y minúsculas.
PLC’s Página 4 Curso 2009/10
Operaciones lógicas a nivel de bit
¿Qué son ? Parte del conjunto de instrucciones que permiten desarrollar operaciones con operandos binarios de un bit.
¿Cuáles son ?
U, UN combinación serie (AND)
O, ON combinación paralelo (OR)
U(O Posibles anidamientos
O(U Posibles anidamientos
X or exclusiva
= asignación
PLC’s Página 5 Curso 2009/10
Operaciones lógicas a nivel de bit
La CPU chequea el estado de las señales de los sensores (operandos)
La primera vez, en cada operación lógica:
• Se guarda el estado de la entrada (primer operando) en el RLO “Result of Logic Operation”, bit del registro de estado CPU
• No se ejecuta operación lógica
Siguientes veces, dentro de operación lógica: • Se ejecuta operación lógica entre valor de RLO y valor de estado de entrada (nuevo operando).
El resultado de operación lógica se guarda en el RLO
PLC’s Página 7 Curso 2009/10
Operaciones lógicas a nivel de bit
• El elemento fundamental es el RLO (Resultado de operación lógica).
• El RLO es un bit de la palabra de estado.
• Refleja el resultado de la última operación lógica realizada: – Cuando una operación si se ejecuta/cumple: RLO=‘1’ – Cuando una operación no se ejecuta/cumple: RLO=‘0’
• Es entrada y salida en las operaciones combinacionales.
PLC’s Página 8 Curso 2009/10 Curso 2009/10
• Realiza la operación AND de dos bits.
• En diagrama de contactos equivale a una conexión serie
A 125.0 E 125.0 E 124.2
U E124.2
U E125.0
=A 125.0
AWL
Diagrama de contactos
KOP
Operaciones lógicas a nivel de bit
PLC’s Página 9 Curso 2009/10 Curso 2009/10
• Realiza la operación OR de dos bits.
• En diagrama de contactos equivale a una conexión paralelo.
O E124.2
O E125.0
=A 125.0
AWL
A 125.0
E 125.0 E 124.2
KOP
Operaciones lógicas a nivel de bit
PLC’s Página 10 Curso 2009/10 Curso 2009/10
KOP
E 124.0
E 124.1
A 124.0 O E124.1
ON E124.0
=A 124.0
AWL
U E124.1
UN E124.0
=A 124.0
AWL
KOP
A 124.0
E 124.0
E 124.1
Operaciones lógicas a nivel de bit
PLC’s Página 13 Curso 2009/10
U E 124.0 Primera consulta UN E 124.1 = A 124.0 U E 125.0 Primera consulta
Operaciones lógicas a nivel de bit
PLC’s Página 14 Curso 2009/10 Curso 2009/10
OPERACIONES CON SÓLO RLO
NOT negar RLO SET activar RLO (=1) CLR desactivar RLO (=0)
SAVE SAVE almacena el RLO (resultado lógico) en el bit RB (bit de resultado binario).
PLC’s Página 15 Curso 2009/10 Curso 2009/10
OPERACIONES CON MEMORIA (I/IV)
U E 124.0
S A 125.0
1) Si la entrada 124.0 está activa se enciende la salida 125.0 2) Si la entrada 124.0 se desactiva no se desactiva la salida 125.0
PLC’s Página 17 Curso 2009/10 Curso 2009/10
OPERACIONES CON MEMORIA (III/IV)
U E 124.0 S A 124.0
U E 124.1 R A 124.0
Prevalece el Reset
sobre el Set
U E 124.0 R A 124.0
U E 124.1 S A 124.0
Prevalece el Set sobre
el Reset
PLC’s Página 18 Curso 2009/10 Curso 2009/10
OPERACIONES CON MEMORIA (IV/IV)
U E 124.0 S A 124.0
U E 124.1 R A 124.0
Tiempo de ciclo
PLC’s Página 20 Curso 2009/10 Curso 2009/10
• El estado de disponibilidad o no de servicio lo proporciona un selector de dos posiciones: Conectado-Desconectado. • La electrobomba se pondrá en marcha cuando el sensor de mínimo esté encendido y se apagará cuando, o bien se encienda el sensor de máximo, o bien salte el térmico o bien la desconectemos mediante el selector. • Si la electrobomba está en servicio deberá lucir una lámpara indicadora. • Si salta el térmico se encenderá otra lámpara avisándolo.
EJERCICIO (Entregable 1)
Automatización Industrial
Operaciones Binarias y de Memoria
TEMA – Operaciones Binarias y de Memoria
1. – Palabra de Estado
2. – Instrucciones de Bit
3. – Operaciones Lógicas Binarias
4. – Consideraciones sobre Sensores
5. – Operaciones de Memoria
5.1 – Detectores de Flanco
5.2 – Operaciones SR/RS
6. – Consideraciones sobre Primera Consulta
Índice
• Contiene bits con información de estado• Las operaciones interpretan o activan los bits de estado• La palabra de estado tiene 16 bits
RLO/FCSTAOROSOVCC0CC1BR
021222324252627282.....215
Bit Ocupación Significado0 /FC Bit de primera consulta
- En el comienzo de un segmento su valor es “0”- Excepto cuando el seg. previo finaliza con “SAVE”
1 RLO Bit de resultado lógico. Se almacena resultado lógico2 STA Bit de estado3 OR Bit OR (necesario en operaciones Y antes de O)4 OS Bit de desbordamiento memorizado
Palabra de Estado (I)
Bit Ocupación Significado5 OV Bit de desbordamiento. Error de desbordamiento en
operaciones en coma flotante6 CC0 Código de condición “0”7 CC1 Código de condición “1”
Proporcionan información sobre:- Resultado de una operación aritmética- Resultado de una comparación- Resultado de una operación digital- Bits desplazados del operando por desplazamiento
o rotación8 BR Resultado binario. Establece un enlace entre el
procesamiento de palabras y el procesamiento de bits9 a 15 No ocupado
Palabra de estado (II)
• Las instrucciones bit trabajan con los dos números binarios, 0 y 1.• En el ámbito de las operaciones lógicas:
- “1” significa activado- “0” significa no activado
• Las instrucciones bit interpretan estados de señal de 1 y 0 y los combina según lógica de Boole
• El resultado de estas combinaciones es “1”o “0”. Se indican como "Resultado de Operación Lógica" (RLO).
Instrucciones bit
NOT
#
S
SR_FFS Q
R
RS_FFR Q
S
&
=
XOR>=1
O I 0.1O I 0.2= Q 4.1A I 0.1
A I 0.2= Q 4.1
Operaciones Lógicas Binarias I
Operación A Función “Y” = Función de asignaciónAN Función “YN” # Conector intermedioA( Y - abrir paréntesis FP Función de flanco positivoAN( NO-Y abrir paréntesis FN Función de flanco negativoO Función “O” NOT Función negaciónON Función “ON” S Función set de un biestableO Función “O” de funciones “Y” R Función reset de biestableO( O - abrir paréntesis SAVE Salvar RLO en RBON( NO-O abrir paréntesisX Función O-EXCLUSIVAXN Función NO-O-EXCLUSIVAX( O-EXCLUSIVA abrir paréntesisXN( NO-O-EXCLUSIVA abrir paréntesis) Cerrar paréntesis
Operaciones Lógicas Binarias II
&I 0.1
I 0.2Q 4.0
A I 0.1A I 0.2= Q 4.0=
Operación lógica “Y”
Operación lógica “O”
>=1I 0.3
I 0.4Q 4.1
O I 0.3O I 0.4= Q 4.1=
Operaciones lógicas binarias III
&I 0.0
I 0.1
Q 4.0
A I 0.0A I 0.1OA I 0.2A I 0.3= Q 4.0
&I 0.2
I 0.3
>=1
I 0.0
I 0.1
Q 4.1I 0.2
I 0.3
>=1
>=1
&
A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)= Q 4.1
=
=
Operación lógica “O” de funciones “Y”
Operación lógica “Y” de funciones “O”
Operación lógica binarias IV
XORI 0.1
I 0.2Q 4.0
X I 0.1X I 0.2= Q 4.0
A I 0.1AN I 0.2OAN I 0.1A I 0.2= Q 4.0
=
Operación Lógica “O-exclusiva”
• Insertarentrada binaria
• Invertir unaentrada binaria
• Asignación
• Conector
Otras Funciones Binarias I
• Cargar resultado lógico (RLO) en registro BR
• Activar salida
• Desactivar salida
&I 0.1
I 0.2 SAVE
&I 0.1
I 0.2 S
Q 4.0
&I 0.1
I 0.2 R
Q 4.0
Otras Funciones Binarias II
I 0.0
I 0.1
Q 4.0
I 0.3 I 0.5
I 0.2
I 0.4
Q 1.0I 0.2I 0.1I 0.0
I 0.3
I 0.5
I 0.4
.
&
&
= Q 4.0
>=1
I 0.0I 0.1
I 0.2
I 0.3
I 0.4
I 0.5
A I 0.0A I 0.1A I 0.2 OA I 0.3A I 0.4OA I 0.5= Q 4.0
Ejemplo (I)
>=1
&
&
>=1
= Q 4.0
I 0.0
I 0.1
I 0.2
I 0.3 >=1
>=1
I 0.4
I 0.6
I 0.5
A(A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)O I 0.4)A(O I 0.5O I 0.6)= Q 4.0
Ejemplo (II)
Q 4.0
I 0.0 I 0.1
S1 S2
Q 4.0
I 0.0 I 0.1
S1 S2
Q 4.0
I 0.0 I 0.1
S1 S2
Q 4.0
I 0.0 I 0.1
S1 S2
ENUNCIADO: Accionar la salida cuando esté activado S1 y no esté activado S2
A I 0.0AN I 0.1= Q 4.0
AN I 0.0AN I 0.1= Q 4.0
A I 0.0A I 0.1= Q 4.0
AN I 0.0A I 0.1= Q 4.0
&&
&&
Consideraciones sobre Sensores
I 0.0
I 0.1
Q 4.1
I 0.3 I 0.5
I 0.2
I 0.4
Q 4.1I 0.2I 0.1I 0.0
I 0.3
I 0.5
I 0.4
&>=1
>=1
= Q 4.1
I 0.0I 0.3I 0.5
I 0.1
I 0.4
I 0.2
A(O I 0.0O I 0.3O I 0.5)A(O I 0.1O I 0.4)A I 0.2= Q 4.1
Ejemplo (III)
I 0.0I 0.1
Q 4.0
I 0.2
I 0.3
I 0.5
=
I 0.4
&
XOR
X(A(O I 0.0O I 0.1)A(O I 0.2O I 0.3)A I 0.4)X(A I 0.5A(O I 0.6O I 0.7))= Q 4.0
>=1
>=1&
I 0.6I 0.7
>=1
Ejemplo (IV)
&I 0.0I 0.1
Q 4.0
XORI 0.3
I 0.4
I 0.5
>=1
=
#
I 0.2
#
&
#
M 0.0
M 1.1
M 2.2#
DB5.DBX 3.2
A I 0.0A I 0.1A I 0.2NOT= M 0.0A M 0.0A(A(X I 0.3X I 0.4)NOT= M 1.1A M 1.1O(A I 0.5= M 2.2A M 2.2))NOT= DB5.DBX 3.2A DB5.DBX 3.2= Q 4.0
Ejemplo (V)
Símbolo Operando ComentarioF3F I 0.0 Sobreintensidad (NC)SOQ I 0.1 Paro (NC)S1B I 0.2 Marcha (NA)K1M Q 4.0 ReléH1 Q 4.1 Lámpara señalización “desconectado”H2 Q 4.2 Lámpara señalización “conectado”
L11-50 Hz 220v
NH1 H2
K1MS1B
SOQ
F3FF1F
K1MK1M
K1M
Circuitos de Mando
M3-%P
1 3 5
1 3 5
U1 V1 W1
2 4 6
2 4 6
F3F
K1M
F2F
L1L2L3
Circuito de Potencia
Ejemplo (VI-a)
>=1I 0.2
Q 4.0
I 0.0I 0.1
&
=Q 4.0
&Q 4.0 =
Q 4.1
&Q 4.0 =Q 4.2
A I 0.0A I 0.1A(O I 0.2O Q 4.0)= Q 4.0
AN Q 4.0= Q 4.1
A Q 4.0= Q 4.2
Ejemplo (VI-b)
I 0.1 Q 4.0
I 0.0
Q 4.0
Marcha
Paro
Prioridad a la Desconexión
A(O I 0.1O Q 4.0)A I 0.0= Q 4.0
Prioridad a la Conexión
I 0.1 Q 4.0
Q 4.0
Marcha
ParoI 0.0
A I 0.1OA Q 4.0A I 0.0= Q 4.0
Operaciones de Memoria
RLO1
0 Tiempo
Flanco Positivo Flanco Negativo
I 1.0
M 1.0
Q 4.0
Lista de InstruccionesDiagrama del estado de la señal
A I 1.0FP M 1.0= Q 4.0
I 1.0 Q 4.0P
M 1.0Funciones lógicas
Detector de Flanco Positivo RLO (0 --> 1)
RLO1
0 Tiempo
Flanco Positivo Flanco Negativo
I 1.0
M 1.0
Q 4.0
Lista de InstruccionesDiagrama del estado de la señal
A I 1.0FN M 1.0= Q 4.0
I 1.0 Q 4.0N
M 1.0Funciones lógicas
Detector de Flanco Negativo RLO (1 --> 0)
Compara el estado de la señal del <Operando1>con el estado de señal de la consulta precedente, que se ha almacenado en en “M_BIT”. Si se produce un cambio de “0” a “1”, la salida Q será “1”.
POS
I 0.4
I 0.3
M 0.0 &=
Q 4.0M_BIT Q
A(A I 0.3BLD 100FP M 0.0)A I 0.4= Q 4.0
Detector de Flanco de Señal (0 --> 1)
Compara el estado de la señal del <Operando1>con el estado de señal de la consulta precedente, que se ha almacenado en en “M_BIT”. Si se produce un cambio de “1” a “0”, la salida Q será “1”.
NEG
I 0.4
I 0.3
M 0.0 &=
Q 4.0M_BIT Q
A(A I 0.3BLD 100FN M 0.0)A I 0.4= Q 4.0
Detector Flanco de Señal (1 --> 0)
• Biestable preponderante al reset (R)• Esta operación es afectada por el “Master Control Relay (MCR)”
SRS
QR
Q 4.1
=
&I 0.1
I 0.2
&I 0.3
I 0.4
M 1.0A I 0.1A I 0.2S M 1.0A I 0.3A I 0.4R M 1.0A M 1.0= Q 4.1
Flip-Flop SR
RSR
QS
A I 0.1A I 0.2R M 0.0A I 0.3A I 0.4S M 0.0A M 0.0= Q 4.0
• Biestable preponderante al set (S)• Esta operación es afectada por el “Master Control Relay (MCR)”
Q 4.0
=
&I 0.1I 0.2
&I 0.3I 0.4
M 0.0
Flip-Flop RS
I 0.7
M 1.0
Q 5.0
A I 0.7AN M 1.0S Q 5.0A I 0.7A M 1.0R Q 5.0
AN I 0.7A Q 5.0S M 1.0AN I 0.7AN Q 5.0R M 1.0
S
R Q
I 0.7M 1.0
Q 5.0
Segmento 1
I 0.7M 1.0
&
&
Segmento 2
S
R Q
I 0.7Q 5.0
M 1.0
I 0.7Q 5.0
&
&
Divisor Binario
& &
R S
& &
R S
Q/Q
Q Q
I 0.1 I 0.0
I 0.7
M 10.0
M 10.1
Q 5.0
S
R Q
M 2.0
M 10.1M 10.0
Segmento 3
Segmento 2
M 2.0
M 10.1
&
&
S
R Q
M 2.0
M 10.0M 10.1
M 2.0
M 10.0
&
&
M 10.1 Q 5.0&Segmento 4
I 0.0
I 0.1
I 0.7 M2.0PM 2.1
Báscula JK
Asignación de EntradasI 0.0 SelectorI 0.1 Relé térmicoI 0.2 Boya nivel máximoI 0.3 Boya nivel mínimoAsignación de SalidasQ 5.0 ElectrobombaQ 5.1 Señalización de
estado operativo Q 5.2 Señal. relé térmicoAsignación de MarcasM 1.0 Marca auxiliar
electrobomba
Nivel Máximo
Nivel Mínimo
Bomba
Con. Desc.
Luz deFuncionamiento
Luz disparorelé térmico
Selector
A I 0.0AN I 0.2AN I 0.3S M 1.0ON I 0.1ON I 0.0O I 0.2R M 1.0
A M 1.0= Q 5.0
A I 0.0= Q 5.1
AN I 0.1= Q 5.2
Electrobomba
A I 1.0ANI 1.1A M 4.0= Q8.0A I 2.0 Primera consulta
RLO estado de señal
.... ....
.... ....
.... ....
.... ....
Consideraciones sobre Primera Consulta
1
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 11DivDiv . Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y AutomáticaDivDiv . Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y Automática
Tema 4
Instrucciones Básicas:Operaciones lógicas con bits
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 22
Bibliografía
l Título: “Step7 Avanzado”l Autor: José Martínez Torresl Descargar de la página web
l Manual Siemens “Step7-AWL para S7-300 y S7-400”l Manual Siemens “Step7-KOP para S7-300 y S7-400”l Manual Siemens “Step7-FUP para S7-300 y S7-400”l Título: “Automating with Step7 in STL and SCL”l Autor: Hans Bergerl ISBN: 3-89578-140-1
2
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 33
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 44
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
3
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 55
Operaciones lógicas con bits
l Las operaciones lógicas con bits operan con dos dígitos, 1 y 0.
§ Estos dos dígitos constituyen la base de un sistema numérico denominado sistema binario. Los dos dígitos 1 y 0 se denominan dígitos binarios o bits.
§ En el ámbito de los contactos y bobinas, un 1 significa activado(”conductor”) y un 0 significa desactivado (”no conductor”).
l Las operaciones lógicas con bits interpretan los estados de señal 1 y 0, y los combinan de acuerdo con la lógica del Álgebra de Boole. l Estas combinaciones producen un 1 ó un 0 como resultado
y se denominan ”resultado lógico” (RLO). Las operaciones lógicas con bits permiten ejecutar las más diversas funciones.
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 66
Operaciones lógicas con bits1.- Las operaciones básicas para las operaciones lógicas con bits son:U YUN Y-NoO OON O-NoX O-exclusivaXN O-exclusiva-No
3.- Las siguientes operaciones permiten ejecutar una cadena lógica encerrada entre paréntesis:U( Y con abrir paréntesisUN( Y-No con abrir paréntesisO( O con abrir paréntesisON( O-No con abrir paréntesisX( O-exclusiva con abrir paréntesisXN( O-exclusiva-NO con abrir paréntesis) Cerrar paréntesis
2.- Para terminar una cadena lógica se puede utilizar una de las tres operaciones:= AsignarR DesactivarS Activar
4.- Las operaciones siguientes permiten modificar el resultado lógico (RLO):NOT Negar el RLOSET Activar el RLO (=1)CLR Desactivar RLO (=0)SAVE Memorizar el RLO en el registro RB
5.- Otras operaciones detectan cambios en el resultado lógico y reaccionancorrespondientemente:FN Flanco negativoFP Flanco positivo
4
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 77
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 88
Operaciones básicas
5
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 99
Operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1010
Operaciones básicas
l SerieSOLUCIÓN EN AWL
U E 0.0U E 0.1= A 4.0
l ParaleloSOLUCIÓN EN AWL
U E 0.0 (también O E 0.0)O E 0.1= A 4.0
6
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1111
Operaciones básicas
l Contactos negadosSOLUCIÓN EN AWLUN E 0.0U E 0.1= A 4.0
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1212
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas
lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
7
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1313
Instrucciones de terminación de cadenas lógicas
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1414
Instrucciones de terminación de cadenas lógicas
8
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1515
Instrucciones de terminación de cadenas lógicasl Las instrucciones SET y RESET son instrucciones de memoria.l Si programamos un SET de una salida o de una marca con unas
condiciones, se activará cuando se cumplan dichas condiciones. Aunque las condiciones dejen de cumplirse, no se desactivará hasta que se haga un RESET de la salida o marca.
l Estas instrucciones tienen prioridad. Dependen del orden en que las programemos. Siempre va a tener prioridad la última que programemos.
l En nuestro caso, si hacemos un SET y un RESET dentro del mismo ciclo de scan, al final de cada ciclo hará efecto lo último que hayamos programado.
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1616
Instrucciones de terminación de cadenas lógicasl RLO
l Las instrucciones vistas hasta ahora son consultas y asignaciones. Esto significa: el procesador examina el estado de las señales de entrada, salida y marcas y le asigna a un estado de señal a las salidas y a las marcas.
l Dos o más primeras consultas generan una operación lógica. El resultado de estas consultas es el resultado de la operación lógica (RLO). El resultado de la operación lógica proveniente de una operación lógica AND o una OR puede ser asignado a una salida o a una marca.
l Primera Consultal La instrucción que hace la primera consulta después de una asignación se
denomina de primera consulta. Esto significa que se genera un resultado de la operación lógica completamente nuevo, independiente del resultado previo de la operación lógica. Carece de importancia si la instrucción de primera consulta es una AND o una OR.
U E 1.0
UN E 1.1U M 4.0
= A8.0U E 2.0 Primera consulta
RLO estado de se ñal
.... ....
.... ....
.... ....
.... ....
9
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1717
Instrucciones de terminación de cadenas lógicas
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1818
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
10
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 1919
Combinación de operaciones básicas
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2020
Combinación de operaciones básicas
11
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2121
Combinación de operaciones básicas
l Utilización de parentesisSOLUCIÓN EN AWLU E 0.0O(U E 0.1U E 0.2)OU E 0.3U E 0.4= A 4.0
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2222
Ejercicio 1Control automático taladradora vertical
s
FCs
FCb
B Ps
Rs
Rb
b
s
FCs
FCb
B Ps
Rs
Rb
Rs
Rb
b
Proyectar un circuito para el control automático de unataladradora vertical. Dicha máquina deberá realizar lasiguiente función:
1º.- Mediante el pulsador B iniciamos el descenso de la herramienta, la cual, al llegar a un minirruptor fin de ca-rrera FCb, debe interrumpir el descenso e iniciar la subida.
2º.- Al llegar, en la subida, a un minirruptor fin de carreraFBs, la herramienta debe detenerse.
3º.- El circuito deberá llevar un pulsador de emergenciaPs, mediante al cual pueda interrumpirse el descenso dela herramienta, para que automáticamente se inicie la su-bida.
4º.- Cuando la herramienta esté subiendo de ninguna manera deberá poder iniciarse la bajada, aunque se pulse B.
Definido el diagrama de circuito, traducir a lenguaje STEP7 la lógica cableada.
12
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2323
Ejercicio 1: Resolución
Asignación de variablesPulsador B E0.0Pulsador de emergencia Ps E0.1Final de carrera bajada FCb E0.2Final de carrera subida FCs E0.3Actuador bajada Rb A4.0Actuador subida Rs A4.1
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2424
Ejercicio 2
Arranque directo de un motor trifásico con rotor en cortocircuito
1.- Elementos del esquema:Q1 Seccionador con fusibles incorporadosKM1 Contactor de potenciaF1 Relé térmico de protecciónM Motor trifásicoLM Lámpara que señala motor en marchaLF1 Lámpara que señala disparo de F1LBT Lámpara que señala tensión en el circuito
2.- FuncionamientoPara poner en marcha, pulsar en S1.Para parar, pulsar en S2El motor también se desconectará por disparo de F1Lámparas de señalización de circuido bajo tensión (LBT), motor en servicio (LM) y disparo de relé térmico (LF1)
13
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2525
Ejercicio 2: ResoluciónAsignación de variables
Pulsador S1 E0.0Pulsador S2 E0.1Relé térmico F1(n.c) E0.2Lámpara LBT A4.0Lámpara LM A4.1Lámpara LF1 A4.2
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2626
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
14
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2727
Función memoria
l MARCASl Las marcas son bits internos de la CPU. Disponemos de
una cantidad limitada de marcas. Esta cantidad depende de la CPU con la que estemos trabajando.
l Estos bits podremos activarlos o desactivarlos como si fueran salidas. En cualquier punto del programa los podremos consultar.
l A las marcas les llamaremos M. A continuación tenemos que decir a que bit en concreto nos estamos refiriendo. Por ejemplo tenemos las marcas, M 0.0, M 10.7, M 4.5, etc.
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2828
Función memoria
l Ejemplo MARCASSOLUCIÓN EN AWLU E 0.0O E 0.1O(U E 0.2U E 0.3U E 0.4)= M 0.0U E 0.6O E 0.7= M 0.1U E 1.1U E 1.2O E 1.0= M 0.2U E 0.5U M 0.1= M 0.3U M 0.0U(U M 0.3O M 0.2)= A 4.0
M0.0
M0.2
M0.3
M0.4
U( U E 0.2U E 0.3U E 0.4O E 0.1O E 0.0) U( O E 1.0O U E 1.1U E 1.2O U E 0.5U( O E 0.7O E 0.6) ) = A 0.4
15
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 2929
Función Memoria
l Si el sensor es un pulsador (momentáneamente conectado), entonces la señal está activada tanto tiempo como mantengamos accionado el pulsador. Para poder almacenar el estado de esta operación, deberemos emplear la Función memoria.
prioridad a la desconexión
prioridad a la conexión
S1
S2
K1
K1 K2
K2
S4S3S1
S2
K1
K1 K2
K2
S4S3
Función memoria
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3030
Función Memoria
l Función memoria en un PLC l En un PLC, la función memoria se elabora mediante el flip-flop S-R.El flip-
flop dispone de dos entradas: una para la instrucción de activación S y otra para la instrucción de desactivación R.
l Setl Un "1" en la entrada de SET , activa la función memoria. La salida Q del
flip-flop alcanza el valor de señal "1".l Resetl Un "1" en la entrada de RESET , desactiva la función memoria. La salida Q
del flip-flop alcanza el valor de señal "0".l Debemos analizar el caso de que en ambas entradas se alcance al
valor “1”. Según el flip-flop que utilicemos (Set/Reset o Reset/Set) la prioridad será a la desconexión o a la conexión respectivamente.
l El valor de señal “0" en cualquiera de las dos entradas no modifica el valor del resultado del flip-flop. (prevalece el valor antiguo)
Flip -flop
R
Q K1SS1
S2
16
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3131
Función MemoriaInstrucciones de Set y Reset
KOP
E1.0 A9.0
S
SET
RESET
E1.1 A9.0R
AWL
Set
U E1.0S A9.0
Reset
U E1.1R A9.0
FUP
Set
Reset
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3232
Función Memoria
l Ejemplo
l Solución con Set y Reset
SOLUCIÓN EN AWLU E 0.0S A 4.0U E 0.1R A 4.0
17
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3333
Función Memoria
Flip-flop "Prioridad alSet"
Set/resetel flip flop RS_FF
R Q
S
E1.4
E1.5
A9.4M0.2
Set/resetel flip flop RS_FF
R Q
S
E1.4
E1.5
A9.4M0.2
Reset/setflip flopReset/setflip flop
Reset/setflip flop
U E1.4R M0.2U E1.5S M0.2U M0.2= A9.4
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3434
Función Memoria
Flip-flop "Prioridad alReset"
Set/resetel flip flop SR_FF
S Q
R
E1.2
E1.3
A9.3
M0.0Set/resetel flip flop SR_FF
S Q
R
E1.2
E1.3
A9.3
M0.0
Set/resetflip flop
Set/resetflip flop
U E1.2S M0.0U E1.3R M0.0U M0.0= A9.3
18
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3535
Ejemplol Depósito de agua
l Tenemos un depósito de agua. Para manejarlo tenemos un selector de mando. Podemos seleccionar modo manual(E0.0) o modo automático
(E 0.1). Si seleccionamos modo manual, lo que queremos es que mientras esté conectada, la bomba esté funcionando(A 4.0), y cuando desconectemos que se pare la bomba. No queremos que se haga caso a las boyas de nivel.
l Si lo tenemos en modo automático queremos que el nivel se mantenga entre las dos boyas. Cuando el agua llegue al nivel de abajo(E0.2) queremos que se ponga en marcha la bomba, y cuando el agua llegue al nivel de arriba(E0.3) queremos que se pare la bomba.
l Además tenemos un relé térmico(E0.7) que actúa tanto cuando tenemos la bomba en funcionamiento manual como cuando la tenemos en funcionamiento automático. Cuando salta el relé, queremos que se pare la bomba y que nos avise con un indicador luminoso en el cuadro de mando(A4.7).
l Además tenemos una luz de marcha que nos indica cuando está en marcha la bomba(A 4.1).
E 0.2
E 0.3
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3636
Ejemplo:soluciónSOLUCIÓN EN AWLSegmento 1: MANUALU E 0.0 //Si activamos en modo manual = A 4.0 //Pon en marcha la bomba= A 4.1 //Enciende la luz de marchaSegmento 2: AUTOMÁTICOU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléU E 0.2 //Y está activo el nivel de abajoUN E 0.3 //Y no está activo el nivel de arribaS A 4.0 //Pon en marcha la bombaS A 4.1 //Y enciende la luz de marchaU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléUN E 0.2 //Y no está activo el nivel de abajoU E 0.3 //Y se ha activado el nivel de arribaON E 0.7 //O ha saltado el reléR A 4.0 //Para la bombaR A 4.1 //Apaga la luz de marchaUN E 0.7 //Si ha saltado el relé= A 4.7 //Avísame con la luz de
19
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3737
Ejemplo:solución
l Si hacemos la prueba de este circuito veremos que no funciona correctamente. Vemos que en modo manual sí que funciona pero en modo automático no para la bomba cuando debería.
l Para resolver este circuito correctamente, nos hace falta utilizar marcas auxiliares. En un mismo bloque no podemos activar la misma salida dos veces con condiciones diferentes porque se interfieren entre ellas.
l Memoria imagen de salidas y entradas
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3838
Ejemplo:solución
20
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 3939
Ejemplo:Manual
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4040
Ejemplo:Automático
21
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4141
Ejemplo:AutomáticoFuncionamiento Incorrecto
Si se desactiva E0.2 una vez que empieza a llenar se para la bomba y la luz indicadora. Debido al segmento 1.
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4242
Ejemplo:soluciónCorrectamenteSegmento 1 : MANUALU E 0.0 //Si está en manual= M 0.0 //Activa la marca 0.0= M 0.1 //Y activa la marca 0.1Segmento 2: AUTOMÁTICOU E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienU E 0.2 //Y está activo el nivel inferiorUN E 0.3 //Y no está activo el nivel superiorS M 0.2 //Activa la marca 0.2S M 0.3 //Y activa la marca 0.3U E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienUN E 0.2 //Y no está activo el nivel inferiorU E 0.3 //Y se ha activado el nivel superiorON E 0.7 //O ha saltado el reléR M 0.2 //Desactiva la marca 0.2R M 0.3 //Y desactiva la marca 0.3UN E 0.7 //Si no está el relé= A 4.7 //Activa la luz de relé.
U M 0.0 //Si está activa la marca 0.0O M 0.2 //O está activa la marca 0.2
= A 4.0 //Pon en marcha la bombaU M 0.1 //Si está activa la marca 0.1O M 0.3 //O la marca 0.3
= A 4.1 //Enciende la luz de marcha
22
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4343
Ejemplo: Automático
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4444
Ejemplo: Automático sin que se pare la bomba/luz
23
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4545
Ejemplo: solución
l Ahora ya no funciona el térmico en el modo manual. Al utilizar marcas diferentes para cada tipo de funcionamiento, el térmico sólo actúa sobre las marcas de modo automático. Sólo estamos haciendo un reset de una de las marcas que activan la bomba. Nos falta resetear la otra marca. Tendremos que añadir las siguientes líneas.UN E 0.7 //Si ha saltado el reléR M 0.0 //Desactiva la marca 0.0R M 0.1 //Y desactiva la marca 0.
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4646
Ejemplo: soluciónl Ahora podemos hacer todas las objeciones que queramos y
corregir sobre lo que ya tenemos hecho.l Por ejemplo, en este caso no he tenido en cuenta la situación de
que después de haber estado en manual o en automático, volvamos a la posición de reposo. En automático he hecho setsa ciertas marcas. Cuando volvamos a la posición de reposo esas marcas tendrán que volver a cero. De lo contrario podría darse el caso de que estando en la posición de reposo, tengamos la bomba en marcha. Para remediar esto podría añadir las siguientes instrucciones:UN E 0.0
UN E 0.1R A 4.0R A 4.1
24
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4747
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4848
Instrucciones que afectan al RLOl NOT
l NOT es la instrucción para invertir el RLO.l CLR/SET
l El RLO pasa a 0 con la instrucción borrar CLEAR, y el RLO pasa a1 con la instrucción SET.l SAVE/U RB
l Con la instrucción SAVE (grabar memoria), el contenido del RLO se almacena en un registro (palabra de estado). El RLO almacenado puede ser consultado de nuevo con la instrucción U RB.
KOPAWL
E0.0 E0.1 A8.0
NOT
E0.0 E0.1 A8.0A8.0
NOTNOT
U E0.0U E0.1NOT= A8.0
CLRSET
No se visualiza en KOPCLRSET
SAVEU E1.6SAVEU RB= A8.1
Instrucciones que Afectan al RLO
E1.0(SAVE)
RB( )
A8.1
E1.0(SAVE)
RB( )
A8.1
FUP
No se visualiza en FUP
25
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 4949
Índice
l Operaciones lógicas con bitsl Operaciones básicasl Instrucciones de terminación de cadenas lógicasl Combinación de operaciones básicasl Función memorial Instrucciones que afectan al RLOl Operaciones que detectan cambios en el
resultado lógico
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 5050
Flancos
Evaluación de Flanco
RLO1
0Tiempo
Flanco Positivo Flanco Negativo
U E 1.0FP M 1.0= A 4.0
E 1.0
M 1.0
A 4.0
E 1.0
M 1.0
A 4.0
Un tiempo de ciclo
Diagrama KOP
E1.0 M1.0 A4.0P
E1.0 M1.0 A4.0P
Diagrama del estado de la señalLista de Instrucciones
Diagrama FUP
26
Instrucciones Básicas:Operaciones lógicas con bitsInstrucciones Básicas:Operaciones lógicas con bits 5151
Flancosl En ocasiones necesitamos que una determinada acción sólo se
realice una vez mientras se cumplan las condiciones para la activación de la misma.
l Una gran cantidad de sets de variables mejorarían si se les aplicase una señal de flanco positivo a sus condiciones de activación.
l La señal de flanco, tanto positivo como negativo en el Step 7 requiere de una marcha que no puede ser utilizada en otra parte del programa, por lo que es importante simbolizarla como exclusiva de ese flanco en cuestión
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
• Herramientas de diagnosis:
– Visualización del estado del programa
• Permite “seguir” el procesamiento de un bloque lógico que se está ejecutando en la CPU
• En AWL es configurable la información de la tabla de diagnosis (herramientas > preferencias>AWL)
• Además, se puede forzar variables de tipo BOOL: ?????
1. Seleccione el operando que quiere forzar.
2. Elija el comando de menú Test > Forzar a 1 o Test > Forzar a 0.
– Test con tabla de variables.
Diagnosis e información del sistema
ACCU-1
PLC’s Página 3 Curso 2009/10 Curso 2009/10
• Herramientas de diagnosis: – Visualización del estado del programa
– Test con tabla de variables. • Se puede OBSERVAR y FORZAR variables
• Se puede mostrar las valores de las variables: E, A, M, T, Z, bloques de datos y periferia.
• Procedimiento para observar / forzar variables:
1. Crear y Editar una tabla de variables VAT.
2. Establecer enlace on-line: Sistema de destino > Establecer enlace con
3. Dentro de la tabla, configurar condiciones de disparo: Variable > Condiciones de disparo
4. Activar las funciones de test: Variable > Observar y Variable > Forzar
5. Guardar tabla editada: Tabla > Guardar o Tabla > Guardar como
Diagnosis e información del sistema
PLC’s Página 4 Curso 2009/10 Curso 2009/10
Crear y abrir una VAT:
• Desde Admin. Simatic: Insertar > Bloque S7 > Tabla var.
• También, desde Admin. Simatic: Sistema de destino > Observar / forzar.
• También, desde ventana “Observar/forzar variables”: Tabla > Nueva
Diagnosis e información del sistema
PLC’s Página 5 Curso 2009/10 Curso 2009/10
Observar y forzar variables • Punto y condición de disparo
Forzado permanente • El programa de CPU no puede cambiarlo • Admdor. Simatic --> “Sistema destino” --> “Mostrar
valores de forzado permanente” --> “Variable” • “forzado permanente” para forzarla • “anular” para eliminarlo.
• Se enciende el led FRCE
Diagnosis e información del sistema
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Admdor. Simatic --> Icono de HW (doble click)
CPU (doble click) Propiedades
Ciclo/Marca de ciclo
• Tiempo de vigilancia • Marcas de ciclo
Cargar configuración hardware, una vez elegida marca de ciclo
Diagnosis e información del sistema
PLC’s Página 7 Curso 2009/10 Curso 2009/10
Marcas de ciclo
son marcas que cambian periódicamente su valor binario (relación impulso - pausa: 1:1).
Active la casilla de verificación si desea utilizar una marca de ciclo e introduzca el número del byte de marcas.
Nota: El byte de marcas seleccionado no puede ser utilizado para almacenar datos temporalmente.
Tiempo de vigilancia de ciclo
Si el tiempo de ciclo (ms) supera el tiempo de vigilancia, la CPU pasará al estado operativo STOP.
Causas de un rebase del tiempo de vigilancia:
procesos de comunicación acumulación de alarmas errores en el programa de la CPU.
Diagnosis e información del sistema
PLC’s Página 8 Curso 2009/10 Curso 2009/10
• Para verlo L MB100 T AB100 y se lo transferimos a la CPU.
Cada bit del byte de marcas de ciclo lleva asignada una duración de período/frecuencia:
Bit 7 6 5 4 3 2 1 0
T (s): 2 1,6 1 0,8 0,5 0,4 0,2 0,1
Frecuencia (Hz): 0,5 0,625 1 1,25 2 2,5 5 10
Diagnosis e información del sistema
PLC’s Página 9 Curso 2009/10 Curso 2009/10
• “Sistema Destino” --> “Información del Módulo”.
Hay varias solapas, cada una de las cuales contiene información sobre un determinado aspecto.
Dependiendo de si se hace ONLINE/OFFLINE, las solapas son diferentes:
– “General”: versión de la CPU, etc
– “Datos característicos”: dice cuántas marcas tiene, entradas, salidas, contadores, memoria, etc. y las direcciones que ocupan.
– “Buffer de diagnóstico”: listado de eventos. En caso de error, iremos a él, y veremos el listado.
Diagnosis e información del sistema
PLC’s Página 10 Curso 2009/10 Curso 2009/10
• “Sistema Destino” --> “Información del Módulo”.
Más opciones:
– Bloques: cuántos módulos hay, cuáles son, qué tamaño pueden tener...
– Tiempo de ciclo: cuánto ha tardado el último ciclo, cual es el tiempo de vigilancia que tiene, posibilidad de cambiarlo...
– Pilas: permite ver los registros, acumuladores, palabra de estado, etc., módulos no completamente procesados, y así averiguar porqué el autómata pasa a STOP.
Diagnosis e información del sistema
PLC’s Página 11 Curso 2009/10 Curso 2009/10
• “Sistema Destino” --> “Información del Módulo”.
Más opciones:
– Sistema de reloj: hora del autómata, horas de funcionamiento, etc.
– Tiempo de ciclo: visualiza el tiempo de ciclo mínimo, máximo y actual. También podremos actualizar los valores.
– Memoria: ocupación de la memoria.
Diagnosis e información del sistema
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
• Hay un área de la memoria de la CPU reservada para contadores. – Hay 64 contadores – Cada contador tiene asignada una palabra de 16 bits. El valor
máximo que pueden contar de 999 (BCD). – Se identifican con la letra Z
• Instrucciones disponibles: – cargar un valor prefijado, – leer su contenido, – incrementar, decrementar, resetear.
Contadores
PLC’s Página 3 Curso 2009/10 Curso 2009/10
Operaciones habituales con contadores:
Carga valor 0
Carga valor de acumulador AC1 en contador direccionado
Contadores
PLC’s Página 4 Curso 2009/10 Curso 2009/10
U E124.5 ZR Z5 --> Decrementa Z5 si E124.5 cambia de 0 a 1 (RLO de 0 a 1)
U E124.7 R Z5 --> Pone Z5 a 0 con el cambio positivo de E124.7
L Z5 T MW4 -->Transfiere el contenido de Z5 a la palabra M4 en binario
LC Z5 T MW7 --> Transfiere el contenido de Z5 a la palabra M4 en BCD
U Z5 = A124.3 --> Pone un 1 en A124.3 si Z5 es distinto de 0
Contadores
PLC’s Página 5 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 3)
Automatizar un garaje de 5 plazas de tal forma que si éste se encuentra lleno se encienda una luz indicándolo y no suba la barrera. En caso contrario deberá estar encendida otra luz indicando “LIBRE”.
El garaje consta de 5 plazas
Disponemos de botón y una barrera en la entrada y lo mismo en la salida.
Salida Entrada
Automatización Industrial
Operaciones de Cómputo
TEMA – Operaciones de Cómputo
1. – Operaciones de Computo – Tipos de Contadores
2. – Formato de la Palabra de Cómputo
3. – Orden de las Instrucciones de Contadores
4. – Carga y Lectura de Contadores
5. – Parámetros de Contadores
6. – Operaciones de Contaje
Índice
Características
Operaciones de Cómputo – Contadores
• Los contadores tienen reservada un área de memoria específica en la CPU • Para cada contador están reservados 16 bits• Tiene acceso a la zona de contadores:
• sólo las operaciones de contaje• Un contador permite:
• contar hacia arriba• contar hacia abajo• se le puede fijar un valor de 0 a 999 unidades• se puede hacer poner a “0”
• Permiten contar impulsos de baja frecuencia (unos pocos Hz)• Para contar impulsos de frecuencias superiores es necesario hardware específico
Operaciones de Cómputo
Operación Operando Significado S Activar (cargar) un contador
El contador se activa con el flanco creciente del RLO. R Reponer (borrar) un Contador
El contador se pone a “0” siempre que el RLO sea “1”. CU Incrementar un Contador (contaje hacia adelante)
Con flanco creciente se incrementa en 1 el valor del contador. Con RLO a 0 no se modifica el valor del contador.
CD Decrementar un Contador (contaje hacia atrás) Con flanco creciente se reduce en 1 el valor del contador. Con RLO a 0 no se modifica el valor del contador.
Identificador C
Parámetro AG S7-300 0 ... 255
Tipos de Contadores
Incrementador/Decrementador STL FBD/LAD
A I 0.0 CU C 1 A I 0.1 CD C 1 L C#100 S C 1 A I 0.3 R C 1 L C 1 T AW 6 LC C 1 T MW 2 A C 1 = Q 4.0
C#100
I 0.0
C 1
Q 4.0MW 2AW 6
S_CUD
CU CD
S CV PV CV_BCDR Q
I 0.1
I 0.2
I 0.3
Incrementador Decrementador FBD/LAD FBD/LAD
C#100
I 1.0
C 2
Q 4.1MW 4AW 8
S_CU
CU
S CV PV CV_BCDR Q
I 1.2
I 1.3C#100
I 2.0
C 3
Q 4.3MW 6AW 10
S_CD
CD
S CV PV CV_BCDR Q
I 2.2
I 2.3
Valor del contador especificado en BCD (0 a 999)
11 8 7 4 3 015 12
010110210hex0000
• Un contador toma como valor de cómputo el contenido del ACU 1• Rango de valores desde 0 a 999 unidades• Sólo valores positivos en BCD
Especificación de un contador en formato de una constanteL C#100; //Valor del contador 100L W#16#0100; //Valor del contador 100
Especificación de un contador en formato de una variableL C#200; //Valor del contador 20T MW 56; //Salvar valor del contador.......L MW 56; //Cargar el valor del contador
Formato de la Palabra de Cómputo
Orden de las Instrucciones
DecrementarCD - I 0.1ActivarS – I 0.2BorrarR – I 0.3Salida BinariaQ - Q 1.0
Valor decontadorCV, CV_BCD
IncrementarCU - I 0.0
0
5
Contar Hacia AdelanteA I 0.0CU C 1
CargarA I 0.2L C#5 S C 1
Consultas DigitalesL C 1 T DBW 2 LC C 1 T QW 6
Consultas BinariasA C 1 = Q 4.0
Contar Hacia AtrásA I 0.1CD C 1
Poner a CeroA I 0.3R C 1
I 0.0
C#5
I 0.3
DBW 2QW 6
Q 4.0
I 0.2
I 0.1
C 1S_CUD
CUCDS CV
PV CV_BCD
R Q
Ejemplo: Valor de ContajeDuración: C#5
Constante Valor
L C# 38
Operando
Operación
Valor del contador (0..999)
Valor en Binario Valor de tres dígitos en BCDPosiciones de bits ocupadas con “0”
Valor actual del contador C2
ACU 1
L C 2 LC C 2
Lectura de un Contador
(codificado en BCD)
- Constante C#- Palabra de Datos - Palabra de Entradas IW- Palabra de Marcas MW- Palabra de Salidas QW - .......
S_CDU
PV CVCV_BCD
R Q
Carga y Lectura de un Contador0 1 0 0 0 0 0 1 0 0 0 0
15 12 11 0
Valor del contador de 3 dígitos(codificada en BCD)
Preselección de Tiempo
Constante de Cómputo
Parámetros del Contador Decrementador
Operaciones de Contaje – Activar un Contador “S” y Decrementar “ZR”
Cronograma Esquema Eléctrico
0
1
0
Estados deseñal
Tiempo
Q 4.5
I 0.0
1
0
7
1
0
I 0.1
C 1
S C 1 S C 1
Binario16 bits
R S PV
_
!=0 CV
I 0.1
C# 7
I 0.0
Q 4.5 Valor del Contador
STL FBD LAD A I 0.0 CD C 1 NOP 0 A I 0.1 L C#7 S C 1 NOP 0 NOP 0 NOP 0 A C 1 = Q 4.5
C# 7
I 0.0
Z 1
Q 4.5
S_CD CD S CV PV PV_BCDR Q
I 0.1
I 0.0
Q 4.5
C# 7
C 1
S_CD CD
S CV PV CV_BCDR Q
I 0.1
Operaciones de Contaje – Borrar un Contador “R” e Incrementar “ZV”
Cronograma Esquema Eléctrico
0
1
0
Estados deseñal
T iem po
Q 4.5
I 0.0
1
0
7
1
0
I 0.1
C 1
R C 1
Binario16 bits
R S PV
+
!=0 CV
I 0.1
I 0.0
Q 4.5
STL FBD LAD A I 0.0 CU C 1 NOP 0 NOP 0 NOP 0 A I 0.1 R C 1 NOP 0 NOP 0 A C 1 = Q 4.5
I 0.0
C 1
Q 4.5
S_CU CU S CV PV CV_BCDR QI 0.1
I 0.0
Q 4.5
C 1
S_CU CU
S CV PV CV_BCDR Q
I 0.1
Automatización Industrial
Operaciones de Carga y Transferencia
TEMA – Operaciones de Carga y Transferencia
1. – Operaciones de Carga y Transferencia
2. – Efecto sobre los Acumuladores
3. – Funciones del Acumulador
4. – Funciones de Sistema para la Transferencia de Datos
Índice
Estructura de los Acumuladores• El flujo de información discurre a través de los denominados acumuladores
Byte alto Byte altoByte bajo Byte bajo23 16 15 8 7 031 24
Palabra alta Palabra bajaACU(1 ó 2)
• intercambiar informaciones entre las diferentes zonas de operandos • preparar temporizaciones y valores de contador para su posterior tratamiento• cargar valores constantes necesarios para la ejecución del programa• hay funciones de:
- carga - transferencia- funciones entre acumuladores - funciones del sistema (SFC 20,21 y 81)
Operaciones de Carga y Transferencia
Las Operaciones de Carga y Transferencia permiten
Funciones del acumulador
Acumulador 1 Acumulador 2
Funciones digitalesFunc. transferencia
MódulosMemoria trabajoMemoria sistema
Reg. direcciones
Palabra de estado
Temporiz. ContadoresImágenes PII, PIQ
Dat. locales temporales
Marcas
Periferia de entradas
Constantes, punteros
Long. número bloques
Bloque de datos
MódulosMemoria trabajoMemoria sistema
Dat. locales temporales
Palabra de estadoImágenes PII, PIQ
Marcas Bloque de datos Periferia de salidas
Funciones de carga
Operaciones de Carga y Transferencia
• La función carga (L - load) pone en el acumulador1 el valor del operando especificado:(constante, variable o una dirección ) (todos los tipos de datos con 8, 16 o 32 bits)
• Operandos ubicados en la memoria:
31 24 23 16 815 7 0
L IW 0IB 1IB 000000000
31 24 23 16 815 7 0
L IB 0IB 0000000000000
31 24 23 16 815 7 0
L ID 0IB 3IB 2IB 1IB 0
ACU 123 16 15 8 7 031 24
L IB nL IW nL ID n
L QB nL QW nL QD n
L PIB nL PIW nL PID n
L MB nL MW nL MD n
Operaciones de Carga
Carga de constantes DescripciónDireccionamiento inmediatoL +27 Carga la constante entera de 16 bits ”27” en ACU1L L#-1 Carga la constante entera de 32 bits ”-1” en ACU1L 2#1010101010101010 Carga la constante binaria de 16 bits en ACU1L DW#16#A0F0BCFD Carga la constante hexadecimal en ACU1L ’FIN’ Carga los caracteres ASCII deseados en ACU1L T#500 ms Carga el valor de temporización en ACU1L S5T#2s Cargar un temporizador S5 L C#100 Carga un valor de computo en BCD en ACU1L B#(100,12) Carga la constante de 2 bytesL B#(100,12,50,8) Carga la constante de 4 bytesL B#16#F1 Cargar número de dos dígitos hexadecimales en ACU 1L P#10.0 Carga el puntero intraárea en ACU1L P#I20.6 Carga el puntero interárea en ACU1L P#name Cargar la dirección de variable localL -25 Carga el número real en ACU1L D# 1995-01-20 Carga la fechaL TOD#13:20:33.125 Carga de un tiempo (la hora) en 32 bits
Ejemplos de Direccionamiento
• La función transferencia (T - transfer) pone el contenido del acumulador1 en eloperando especificado (todos los tipos de datos en 8, 16 o 32 bits)
• Las operaciones de transferencia son incondicionales• Operandos ubicados en la memoria:
ACU 123 16 15 8 7 031 24
T IB nT IW nT ID n
T QB nT QW nT QD n
T PQB nT PQW nT PQD n
T MB nT MW nT MD n
T QD 4 T QW 4 T QB 4
Operaciones de Transferencia
ACCU 1 contenidos para las instrucciones de carga
31 24 23 16 815 7 0
L IW 0IB 1IB 000000000
31 24 23 16 815 7 0
L IB 0IB 0000000000000
31 24 23 16 815 7 0
L ID 0IB 3IB 2IB 1IB 0
Instrucción Transferir31 24 23 16 815 7 0
Byte 0Byte 1Byte 2Byte 3
T QD 4 T QW 4 T QB 4
Efecto sobre el ACU 1
Word dWord c Word bWord a
Word bWord a 0 IW 7Word dWord c IW 7
0 IW 7 0 IW 9Word bWord a IW 9
L IW 7
L IW 9
ACU 2 ACU 1Informaciónperdida
Informacionesprocedentes
de la PII
ZZZZ
YYYYL ID 0
L ID 4
ACU 2 ACU 1Informaciónperdida
Informacionesprocedentes
de la PIIYYYY ZZZZ
ZZZZ
ID 0
ID 0
ID 4
ID 0
ID 4
Efecto sobre el ACU 2 – Operaciones de Carga
Word dWord c Word bWord a
Word dWord c Word bWord a Word aT QW 5
ACU 2 ACU 1 Informaciónperdida
Informacionesen la PIQ
Valor previode QW 5
T QD 10
ACU 2 ACU 1 Informacionesen la PAA
ID 1 ID 3
ID 1 ID 3 ID 3
Informaciónperdida
Valor previode QD 10
Efecto sobre el ACU 2 – Operaciones de Transferencia
• Permiten transferir valores de un acumulador a otro, o reemplazarbytes en el acumulador 1
• Se ejecutan independiente del resultado lógico o bits de estado
Transferencia directa entre acumuladores
PUSH: Permite desplazar el contenido de los ACU hacia adelante
POP: Permite desplazar el contenido de los ACU hacia atrás
TAK: Permite intercambiar el contenido de ACU1 y ACU 2
PUSH
Acumulador 2 Acumulador 1 Acumulador 1 Acumulador 2
Acumulador 2 Acumulador 1 Acumulador 2Acumulador 1
TAK POP
Funciones del Acumulador I
Intercambio de Bytes en el Acumulador 1
CAD: cambia bytes en todo el acumulador 1. El byte de mayor peso con el bytede menor peso y los dos bytes intermedios entre sí
CAW: cambia en el acumulador 1, los bytes de la palabra de menor peso
nCAW
CAD
n+1 n+2 n+3
n n+1 n+3 n+2
n n+1 n+2 n+3
n+3 n+2 n+1 n
Funciones del Acumulador II
En funciones Lógicas
• La operación Transferir un valor permite inicializar variables con valores predeterminados
• El valor indicado en la entrada IN se copia en el operando indicado en la salida OUT• Permite copiar todos los tipos de datos de 8,16 o 32 bits
Cuadro FUP Parámetro Tipo de Area de Descripcióndatos memoria
EN BOOL I, Q, M, D, L Entrada de habilitaciónT, C
IN Todos tipos I, Q, M, D, L Valor fuente8, 16 o 32 bi
OUT Todos tipos I, Q, M, D, L Dirección de destino8, 16 32 bi
ENO BOOL I, Q, M, D, L Salida de habilitación
MOVE
EN OUT
IN ENO
Carga y Transferencia de Datos – Move
KOP AWL
MOVE
EN ENO
IN O
EN - Habilitar entradaENO -Habilitar salidaIN - Valor de entrada
(todos los tipos de datoscon longitud 8, 16, 32 bit)
O - Dirección del resultado (todos los tipos de datoscon longitud 8, 16, 32 bit)
L - Carga T - Transferencia(Todos los tipos de datos con 8, 16, 32 bits)
Ejemplos:L +5 // Carga una constante de 16-bitL L#523123 // Carga una constante de 32-bitL B#16#EF // Carga un byte hexadecimalL 2#0001_0110_1110_0011
// Carga un valor binario de 16-bitL TOD#1:10:3.3
// Carga un tiempo de 32-bit
T MB0 // Transferir un valor al byte dememoria 0
T AD256 // Transferir un valor a la dobledoble palabra de salida 256
Carga y Transferencia de Datos
SFC 20 BLKMOVEstán disponibles las siguientes funciones del sistema para la transferencia de datos
SFC Parámetros Declaración Tipo dato Descripción20 SRCBLK INPUT ANY Fuente de donde copiar datos
RET_VAL OUTPUT INT Información de errorDSTBLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos
SFC 21 FILL
SFC Parámetros Declaración Tipo dato Descripción21 VBAL INPUT ANY Area fuente a ser copiada
RET_VAL OUTPUT INT Información de errorBLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos
SFC 81 UBLKMOV
SFC Parámetros Declaración Tipo dato Descripción81 SRCBLK INPUT ANY Fuente de donde copiar datos
RET_VAL OUTPUT INT Información de errorDSTBLK OUTPUT ANY Destino donde copiar los datos
Funciones del Sistema para Transferencia de Datos
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
Introducción a los Tipos de Datos en STEP 7
Tipos de datos elementales (hasta 32 bits)
Tipos de datos complejos (mayores de 32 bits)
Tipos de datos definidos por el usuario (mayores de 32 bits)
• Tipos de Datos de bit (BOOL, BYTE, WORD, DWORD, CHAR)
• Tipos de Datos Matemáticos (INT, DINT, REAL)
• Tipos de Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY)
• Tiempo (DATE_AND_TIME)
• Array (ARRAY)
• Estructura (STRUCT)
• Cadena de Caracteres (STRING)
Tipo de Datos UDT (User Defined Type)
PLC’s Página 3 Curso 2009/10 Curso 2009/10
• La memoria del Autómata está estructurada en bytes.
• Estos bytes podemos agruparlos/descomponerlos, obteniendo los siguientes tamaños de datos: – Bit _ _ _ .Nº
– Byte (8 bits) _ _ _ B
– Palabra/word (16 bits) _ _ _ W
– Doble palabra/double word (32 bits) _ _ _ D
• Se puede acceder a cualquier área de la memoria: marcas, entrada, salida, etc. con cualquiera de los tamaños de datos:
TIPOS DE DATOS DE BIT – TAMAÑO
PLC’s Página 4 Curso 2009/10 Curso 2009/10
E Tam BBB.b
Zona de memoria:
• E -> Entradas • A -> Salidas • T -> Temporizadores • Z -> Contadores • M -> Marcas • DB -> Módulos de datos • P -> Acceso directo (PA, PE)
Tamaño del Dato que vamos a usar (bit por omisión): B, W, D
Número de byte y bit (0-7), en su caso
DIRECCIONAMIENTO 1/3
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Dentro de cada byte, palabra o doble palabra, los bits se numeran de
derecha a izquierda, de 0 al 7. E 124.0
• Dir. byte: área de memoria + B + nº de byte EB124
• Dir. palabra: área de memoria + W + nº de su 1er byte
EW124 => EB124 EB125
• Dir. doble palabra: área de memoria + D + nº de su 1er byte
MD0 => MB0 MB1 MB2 MB3
DIRECCIONAMIENTO 3/3
PLC’s Página 7 Curso 2009/10 Curso 2009/10
• Sistemas numéricos soportados: – Decimal (enteros y fraccionarios), binario, hexadecimal, BCD
• Tipos de datos:
– Entero (en cualquiera de los sistemas numéricos anteriores) – Real (coma flotante) – Carácter – Tiempo: cantidad de tiempo, hora, S5T, fecha – Puntero
SISTEMAS NUMÉRICOS
Ver ayuda Admin. Simatic Tipos de datos simples
PLC’s Página 8 Curso 2009/10 Curso 2009/10
Tipos de Datos Elementales en STEP 7
BOOL 1 1 ó 0 BYTE 8 B#16#A9 o B169 WORD 16 W#16#12AE o W4782 DWORD 32 DW#16#ADAC o DW44460 CHAR 8 ' w '
S5TIME 16 S5T#5s_200ms
INT 16 123 DINT 32 65539 REAL 32 1.2 o 34.5E-12
TIME 32 T#2D_1H_3M_45S_12MS DATE 16 D#1993-01-20 TIME_OF_DAY 32 TOD#12:23:45.12
Palabra Clave Long. (en bits) Ejemplo de una constante de este tipo
PLC’s Página 9 Curso 2009/10 Curso 2009/10
Números en COMA FLOTANTE (1/2)
- Signo (S) ⇒ 1: negativo , 0: positivo (bit 31)
- Mantisa (M) ⇒ La mantisa incluye 23 bits (bit 0.. 22).
- Exponente (E) ⇒ El exponente incluye 8 bits (bit 23..30).
... 31 30 23 22 21 2 1 0 ………...
Estándar IEEE754: Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)
PLC’s Página 10 Curso 2009/10 Curso 2009/10
Números en COMA FLOTANTE (2/2)
Estándar IEEE754: Expresa números reales en 32 bits
Nº decimal = (-1)signo · 2exponente-127 · (1+Mantisa·2-23)
• Ejemplo:
1#10000000#11000000000000000000000
– Parte ligada al signo: (-1)1 = -1 – Parte ligada al exponente: 2128-127=21 = 2 – Parte ligada a la mantisa: 1+6291456·2-23=1+0.75 =1.75 – Resultado: -1 · 2 · 1.75 = -3.5
PLC’s Página 11 Curso 2009/10 Curso 2009/10
• Registros auxiliares de 32 bits para intercambio de datos y operaciones de comparación y aritmeticas.
• CPU 314IFM tiene 2 acumuladores. • Carga al ACCU1,
y el antiguo ACCU1 pasa al ACCU2.
• Si cargamos o transferimos tamaños de datos menores a la doble palabra ( bits, bytes (B), word (W) ), se empieza a leer y escribir por la derecha (byte menos significativo)
ACUMULADORES (1/2)
ACCU-H (16 bits) ACCU-L (16 bits)
PLC’s Página 12 Curso 2009/10 Curso 2009/10
Operaciones entre acumuladores:
– TAK: intercambia contenido ACCU1 y ACCU2 .
– PUSH: copia el contenido de ACCU1 al ACCU2, sin cambiar el 1º.
– POP: copia el contenido de ACCU2 al ACCU1, sin cambiar el 2º.
– ENT (sólo S7-400): ACCU2 a ACCU3 y ACCU3 a ACCU4.
– LEAVE (sólo S7-400): ACCU3 a ACCU2 y ACCU4 a ACCU3.
ACUMULADORES (2/2)
PLC’s Página 13 Curso 2009/10 Curso 2009/10
Permiten programar intercambio de información entre módulos de E/S y áreas de memoria.
L --> Instrucción de carga a ACCU-1
T --> Instrucción de transferencia desde ACCU-1
• Cargan y transfieren del acumulador ACCU1, independientemente del valor RLO, y tampoco lo modifican.
• A dichas instrucciones les sigue un código en el que se indica el tamaño, formato y el número/posición a cargar o transferir.
CARGA Y TRANSFERENCIA 1/7
PLC’s Página 14 Curso 2009/10 Curso 2009/10
• Ejemplos:
– LC Z0 --> Carga el contenido del contador en el acumulador en BCD.
Si Z0=10 ACU1: 00 00 00 .......... 0001 0000 (BCD)
– L Z0 --> Idem pero en Binario
Si Z0=10 ACU1: 00 00 00 .......... 0000 1010 (Binario auténtico)
– L S5T#5S --> Herencia de versiones previas a S7: máximo número 9990sg,
CARGA Y TRANSFERENCIA 2/7
PLC’s Página 15 Curso 2009/10 Curso 2009/10
• Ejemplos:
– L ED124 (Cargar en el acumulador la doble palabra 124 de la PAE)
ACU1: EB124 EB125 EB126 EB127
Obsérvese: el byte más significativo del acumulador (parte izquierda) queda
relleno con el byte de dirección menor, y el de mayor dirección, a la dcha.
– L EW8 (Cargar en el ACU1 la palabra 8 de la PAE) 00 00 EB8 EB9
– L EB8 (Cargar en el ACU1 el byte 8 de la PAE) 00 00 00 EB8
CARGA Y TRANSFERENCIA 3/7
PLC’s Página 16 Curso 2009/10 Curso 2009/10
• Ejemplos (con los Registros de Direcciones, AR1 y AR2): – LAR1 ----> Carga el reg.de dirección AR1 con el contenido de ACU1 – LAR1 R2 ----> Carga el reg. de dirección AR1 con el contenido de reg AR2 – TAR ----> Intercambia los contenidos de registros AR1 y AR2 – TAR1 R2 ----> Transfiere el contenido de AR1 a AR2 El listado AWL siguiente:
L ED 124 LAR1 L ED 128 LAR2 TAR
Tendrá como resultado:
ED124 ----> AR2
ED128 ----> AR1
CARGA Y TRANSFERENCIA 4/7
PLC’s Página 17 Curso 2009/10 Curso 2009/10
• Ejemplos (L y T con diferentes tamaños):
– L EB124 (Cargar en el ACU1 el byte 124 de las entradas) 00 00 00 EB124
– Si ahora hacemos T MW32 00 00 00 EB124
MB32 MB33
• L ED124 EB124 EB125 EB126 EB127
T MB32 MB32
CARGA Y TRANSFERENCIA 5/7
PLC’s Página 18 Curso 2009/10 Curso 2009/10
L +5 --> Carga entero de 16 bits
L L#523123 --> Carga un entero de 32 bits
L B#16#EF --> Carga un hexadecimal de 8 bits
L 2#0011_0110_1110_0011 --> Carga binario de 16 bits
T MB0 --> Transfiere (el ACU1) al byte de marcas 0
T AD256 --> Transfiere (el ACU1) a la doble palabra de salida 256
CARGA Y TRANSFERENCIA 6/7
NOTA:
Ver ayuda Adm. Simatic
“Tipos de datos simples”
PLC’s Página 20 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 4)
• Tenemos una mezcladora que produce 2 tipos de productos, magdalenas y donuts, para lo cual controla la receta, modificando las proporciones de harina (A124.0) y leche (A124.1), y el tiempo que está mezclándolos (A124.2).
• La producción empezará cuando E124.0 se ponga a 1 • Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 3 segundos, A124.1 está encendido 1 segundo y A124.2 durante 2 sg.
• Si E124.1=0 produce donuts, para lo cual los tiempos son 4, 3 y 2 segundos respectivamente.
• El sistema debe ser robusto de forma que si está en medio de una receta no debe interrumpirse aunque cualquiera de los dos botones de entrada se modifique
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 3 Curso 2009/10 Curso 2009/10
Ejemplo:
L MW 32 MB32 MB33 ----> ACU1 L EW 124 ACU1 ---> ACU2 Y EB124 EB125 ---> ACU1 ==I Si ACU2(MW32) = ACU1(EW124), RLO=1 =A 124.0 y se activa el bit 0 del byte 124 de salida >I Si ACU2(MW32) > ACU1(EW124), se activa el =A 124.1 bit 1 del byte 124 de salida <I Si ACU2(MW32) < ACU1(EW124), se activa el =A 124.2 bit 2 del byte 124 de salida
? I: Compara los contenidos de ACU2-L y ACU1-L
RLO=1 si resultado de comparación es cierto , RLO=0 si falso
Operaciones con AC. Comparación (II)
PLC’s Página 4 Curso 2009/10 Curso 2009/10
• Ejemplo:
L MD 16 MB16 a MB19 ----> ACU1 L 1.359E+02 ACU1 ---> ACU2 Y 1.359E+02 ---> ACU1 <=R Si ACU2 < ó = ACU1 se activa el =A 124.7 bit 7 del byte 124 de salida >R Si ACU2 > ACU1 se activa el =A 124.0 bit 0 del byte 124 de salida S M 124.0 La marca 124.0 guarda el resultado de la última comparac
Operaciones con AC. Comparación (III)
PLC’s Página 5 Curso 2009/10 Curso 2009/10
• Siempre son entre el contenido del ACU2 y el del ACU1
• El resultado se guarda en ACU1, el contenido de ACU2 no cambia
• Son independientes del RLO
• Una vez cargados los acumuladores, se opera, dependiendo del formato del dato: I, D, R (entero 16 bits, entero 32 bits, real o coma flotante)
- , + , * , / , MOD (resto de división de enteros dobles) ; xI xD xR
• Ejemplo: L MW 32 MB32 MB33 --- > ACU1
L EW 124 ACU1 --> ACU2 y EB124 EB125 --> ACU1
-I ACU2 – ACU1 ---> ACU1
Operaciones con AC. Aritméticas (I)
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Una vez realizada la operación aritmética se activan los bits A1, A0, OS y OV de la palabra de estado indicando: resultado positivo, negativo, cero, desbordamiento o división por 0
- 32768 <= entero 16 bits <= 32767 - 2 147 483 648 <= entero 32 bits <= 2 147 483 647
• En CPU’s de 4 acumuladores: – El resultado queda en ACU1, – ACU3 pasa a ACU2, y – ACU4 se duplica en ACU3 y AUC4.
Operaciones con AC. Aritméticas (II)
PLC’s Página 7 Curso 2009/10 Curso 2009/10
La función de los bits de la palabra de estado depende del tipo de operación
Ejemplo: operaciones en coma fija (I, D
Operaciones con AC. Aritméticas (II-b)
PLC’s Página 8 Curso 2009/10 Curso 2009/10
• Sumar constante entera o doble: – + <constante entera> ACU1 + CTE -> ACU1,
• Dividir /I : ACU2 / ACU1: – ACU1 L cociente – ACU1 H resto
Operaciones con AC. Aritméticas (III)
PLC’s Página 9 Curso 2009/10 Curso 2009/10
Ops. Avanzadas (nºs reales)
• Toman el dato de ACU1, y dejan también ahí la solución: – Raíz cuadrada: SQRT
– Elevar al cuadrado: SQR
– Funciones trigonométricas: SIN, COS, TAN, ASIN, ACOS, ATAN (con los ángulos en radianes).
– Logaritmos: LN, LOG
– Valor absoluto: ABS
– Exponencial: EXP
– Incrementos: + 1 => ACU1=ACU1+1
- 1 => ACU1=ACU1-1
PLC’s Página 11 Curso 2009/10 Curso 2009/10
Conversiones entre tipos de datos (II)
Rango para números BCD:
-999 <= I <= +999
-9 999 999 <= D <= +9 999 999
PLC’s Página 12 Curso 2009/10 Curso 2009/10
Conversiones entre tipos de datos (III)
• Ejemplos:
L MW 10 MB10 MB11 (BCD) ---> ACU1
BTI ACU1 (BCD) ---> ACU1 (I, entero)
T MW 20 ACU1 (I) ---> MB20 MB21
L MW 10 MB10 MB11 (I) ---> ACU1
ITD ACU1 (I) ---> ACU1 (D)
T MD 20 ACU1 (D) ---> MB20 MB21 MB22 MB23
PLC’s Página 13 Curso 2009/10 Curso 2009/10
Conversiones entre tipos de datos (IV)
+
-
un real en entero de 32 bits
Un real 32bits IEEE-FPE
inferior
superior mayor
doble
PLC’s Página 15 Curso 2009/10 Curso 2009/10
Conversiones entre tipos de datos (VI)
• Ejemplos:
L MD 10 MB10 MB11 MB12 MB13 (R) ---> ACU1
RND ACU1 (R) ---> ACU1 (D) con redondeo al más próximo
T MD 20 ACU1 (D) ---> MB20 MB21 MB22 MB23
L EW 124 EB124 EB125 ---> ACU1
NEGI C2 de ACU1 ---> ACU1
T MW 20 ACU1 ---> MB20 MB21
PLC’s Página 16 Curso 2009/10 Curso 2009/10
Ops. Lógicas a nivel de Palabra W y Doble Palabra D (I)
• Operan con W (16 bits) o con D (32 bits) bit por bit, según lógica de Boole.
• Operación lógica entre
ACU1 y ACU2 ACU1 y constante
PLC’s Página 17 Curso 2009/10 Curso 2009/10
Ejemplos:
L ED 124 La “AND” se hace entre ACU1 y ACU2, cargados previamente L MD 20 con los valores indicados. UD Este ejemplo se podría utilizar para enmascarar ciertos bits T AD 124 de la ED124 según la máscara de MD20, transfieriendo a
la salida AD124 sólo los bits que nos interesen.
L EW 124 En éste caso, la “AND” se hace entre el ACU1 (previa-
UW W#16#AA55 mente cargado con los bytes de entrada 124 y
T MW 20 125) y un valor inmediato expresado en hexadecimal
Ops. Lógicas a nivel de Palabra W y Doble Palabra D (II)
PLC’s Página 18 Curso 2009/10 Curso 2009/10
Ops. de desplazamiento y rotación (I)
• Se aplican al ACU1: palabra W (16 bits) o doble palabra D (32 bits).
• El código AWL se formará eligiendo una letra de cada una de las siguientes parejas: – S (shift) R (right) W (word)
– R (Rotate) L (left) D (double)
• ROTATE SOLO DE 32 BITS
• Los desplazamientos rellenan con 0, aunque hay instrucciones que permiten mantener el signo:
– SSD Ambas provocan un desplazamiento a dcha del ACU1 o ,
– SSI ACU1-L pero manteniendo el signo
• Cuando no se indique n, éste será el contenido del byte bajo del ACU2
n (Nº Despl.)
PLC’s Página 19 Curso 2009/10 Curso 2009/10
Ops. de desplazamiento y rotación (II)
• Un desplazamiento a la izquierda de n bits Multiplica el contenido del acumulador por 2^n
• Un desplazamiento a la derecha de n bits
Divide el contenido del acumulador por 2^n ¡¡!!
¿?
PLC’s Página 20 Curso 2009/10 Curso 2009/10
Ops. de desplazamiento y rotación (III)
• Ejemplos de Desplazamiento:
L EW 124 SLW 6 Desplaza los bits de la palabra baja de ACU1 seis posiciones a la izqda. T MW 20
L MW 10 SSI 4 Desplaza cuatro posiciones a la dcha y repite signo T MW 20
L +3 En éste caso, SRD no lleva “n”, por lo que se tomará el depositado en L MD 10 el byte bajo de ACU2, o sea, 3. Recordemos que al hacer el segundo SRD L, lo que se cargó en ACU1 pasa a ACU2. T MD 20
PLC’s Página 21 Curso 2009/10 Curso 2009/10
Ops. de desplazamiento y rotación (IV)
• Ejemplos de Rotación:
L MD 10 RLD 3 Rota todos los bits del ACU1 tres posiciones a la izqda. T MD 20
L +6 En éste caso, RRD no lleva “n”, por lo que se tomará el depositado en L MD 10 el byte bajo de ACU2, o sea, 6. Recordemos que al hacer el segundo RRD L, lo que se cargó en ACU1 pasa a ACU2. T MD 20
PLC’s Página 22 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 5)
Desarrollar un programa que resuelva ecuación de segundo grado. Los coeficientes serán:
a (EB126) =>0, b (EB125) entero (-128,127) c (EB124) entero (-128,127)
Las dos raíces resultantes (r1 y r2) serán almacenadas en las marcas r1_real: MD0 r1_imaginaria: y MD4 r2_real: MD8 r1_imaginaria: y MD12
Además, se utilizarán tres salidas para indicar: • si son raíces complejas (A125.7) • si son raíces reales (A125.4) • si son raíces iguales (A125.0) • Si a=0 parpadea A125 • El programa debe resolver el caso b=c=0.
• Muestre en AW126 la parte entera mayor de las dos raíces
Automatización Industrial
Operaciones de Comparación
TEMA – Operaciones de Comparación
1. – Operaciones de Comparación
1.1 – Comparar Números Enteros
1.2 – Comparar Números Enteros Dobles
1.2 – Comparar Números en Coma Flotante
2. – Ejemplos
Índice
• Las operaciones de comparación permiten comparar dos valores en formato byte, palabra o doble palabra
• Para poder comparar, los operandos deben estar uno en cada acumulador• La ejecución de las operaciones no depende del RLO• El resultado es binario. Si se cumple la comparación, el RLO es “1”; si no, es “0”• Las operaciones de comparación no modifican los contenidos de los ACUs
Operaciones de Comparación
Activación de los Bits de la Palabra de Estado
Activación de los bits CC1 y CC0 Tras una Operación de Comparación
• La operación Comparar enteros ejecuta una operación de comparación cuya base es un entero en coma fija de 16 bits.
• Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado.• Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de
la comparación es “1”, en caso contrario es “0”.• No existe la negación del resultado.
MW 10
CMP==I
IN1 IN2
&I 0.0
IW 0 Q 4.0=
Ejemplo:A(L IW 0L MW 10==I)A I 0.0= Q 4.0
Comparar Números Enteros
• La operación Comparar enteros dobles ejecuta una operación de comparación cuya base es un entero en coma fija de 32 bits.
• Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado.• Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de
la comparación es “1”, en caso contrario es “0”.• No existe la negación del resultado.
MD 4
CMP<>D
IN1 IN2
&I 0.0
MD 0 Q 4.0=
Ejemplo:A(L MD 0L MD 4<>D)A I 0.0= Q 4.0
Comparar Números Enteros Dobles
MD 4
CMP<R
IN1 IN2
&I 0.0
MD 0 Q 4.0=
Ejemplo:
• La operación Comparar números en coma flotante ejecuta una operación de comparación cuya base son números en coma flotante.
• Compara los operandos de IN1 e IN2 según el tipo de comparación seleccionado.• Si la comparación se verifica, es decir, es verdadera, el resultado lógico (RLO) de
la comparación es “1”, en caso contrario es “0”.• No existe la negación del resultado.
A(L MD 0L MD 4<R)A I 0.0= Q 4.0
Comparar Números en Coma Flotante
L MW 120L 512>IA Input1= Output1
O Input2O(L MW 122L 200<=I)O Input3= Output2
L MW 124L 1200>IJC GREA==IJC EQUA
L MW 124L 1200>IJP GREAJZ EQUA
Múltiples comparaciones:
Comparación en operaciones lógicas:Comparación en el comienzode una operación lógica:
Ejemplos 1
Comparación de INT:L MW 92L 120==IR M 99.0
Comparación de DINT:L “DB_Global”.CompVal1L “DB_Global”.CompVal2<D= “DB_Global”.CompResult
Comparación de REAL:L #ValactL #CALIBRE>=RS #Recali
Ejemplos 2
Cronograma
S5T#1S
T 1
# M 2.0TV BI
BCDR Q
&I 0.0M 2.0
C 1
CU CDS CV PVCV_BCDR Q
Q 4.02
C 1+60
2
Q 4.1S
R QC 1+75 2
S
R Q
Q 4.2S
R QC 1+80 2
M 1.0
M 1.1
M 1.2
Rojo
Verde
Naranja
S_ODT
#S_CDU
CMP==I
IN1IN2 Q
CMP==I
IN1IN2 Q
CMP==I
IN1IN2 Q
Ejemplo – Semáforo
> 5 <
1
0
1
0
Tiempo en sg.
Verde
Rojo
1
0Naranja Q 4.2
Q 4.0
Q 4.1
< 60 >
< 20
STL A I 0.1 AN M 2.0 L S5T#1S SD T 1 A T 1 = M 2.0 A M 2.0 CU C 1 *** L C 1 L 60 == I R Q 4.0 S Q 4.1 L C 1 L 75 == I S Q 4.2 L C 1 L 80 == I R Q 4.1 R Q 4.2 S Q 4.0 R C 1
Ejemplo – Señalización de Nivel de Llenado
Ejemplo STL
1
0
1
0
Tiempo
1
0Q 4.1
I 0.1
Q 4.0
1
0
1
0
I 0.0
I 0.1
15
10
5
I 0.0
I 0.2
8x 12x
A I 0.2 R C 4 A I 0.0 CU C 4 A I 0.1 CD C 4 L C 4 L 5 <= I = Q 4.1 L C 4 L 15 >= I = Q 4.0
Ocupación de las Entradas y Salidas: I 0.0 - Emisor de caudal, tubería de entrada I 0.1 - Emisor de caudal, tubería de salida I 0.2 - Pulsador para poner a “0” el contador Q 4.0 - Señalizador de nivel por debajo de 5 Q 4.1 - Señalizador de nivel por encima de 15 Del diagrama mostrado se podrá reconocer el estado del contador (= contenido del depósito) y su reacción sobre las entradas I 0.0 e I 0.1, así como el efecto sobre los diodos luminiscentes (Q 4.0 y Q 4.1). El diodo luminiscente de salida Q 4.0 luce mientras se alcance o se sobrepase el límite superior (15). El diodo luminiscente de salida Q 4.1 luce mientras se alcance o se baje del límite inferior (5).
Se desea vigilar el llenado de un depósito, señalizando cuando se alcanza un límite superior (15) y un límite inferior (5). Cuando el depósito está totalmente vacío deberá ponerse a cero el contador de caudal C4.
Ejemplo – Generación de Señal Triangular
I 0.0
Q 4.0
C 22
S_CUDCU CD S CV PV CV_BCD R Q
IB 1
CMP==I
IN1
IN2 Q
&
&
F G 1 Hz
SRS
R Q
QB 5
T 22; M 20.0
M 20.1
0
Tiempo
1
0Q 4.0
M 20.0
AB 5
IB 1
1
0
1
0I 0.0 AWL
A I 0.0 AN M 20.0 L S5T#1S SD T 22 A T 22 = M 20.0 *** A M 20.0 AN Q 4.0 CU C 22 A M 20.0 A Q 4.0 CD C 22 AN I 0.0 R C 22 *** LC C 22 T QB 5 *** LC C 22 L IB 1 >= I S M 20.1 *** AN C 22 R M 20.1 *** A M 20.1 = Q 4.0
Automatización Industrial
Operaciones Matemáticas
TEMA – Operaciones Matemáticas
1. – Operaciones Aritméticas Básicas
1.1 – Operaciones Aritméticas Básicas con Números Enteros Simples
1.2 – Operaciones Aritméticas Básicas con Números Enteros Dobles
1.3 – Operaciones Aritméticas Básicas con Números Reales
2. – Operaciones Aritméticas Avanzadas
2.1 – Funciones Trigonométricas
2.2 – Funciones Logarítmicas y Exponenciales
2.3 – Otras Funciones
3. – Operaciones de Conversión
4. – Operaciones de Desplazamiento y Rotación
5. – Operaciones Lógicas con Palabras
6. – Operaciones con Bits de la Palabra de Estado
Índice
• Las funciones aritméticas combinan dos valores digitales en los acumuladores • Se incluyen es este apartado las operaciones aritméticas básicas• El resultado queda en el ACU1• Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de la
operación.• Hay funciones para números en coma fija y coma flotante• Se contemplan las operaciones:
• suma• resta • multiplicación• división• adición de constantes• incremento• decremento
Operaciones Aritméticas Básicas
• La estructura semántica de una operación aritmética es:
Cargar Dirección1Cargar Dirección2Función aritméticaTransferir Resultado
• Se contemplan las siguientes funciones aritméticas:
Funciones Aritméticas Tipo de datoINT DINT REAL
Suma +I +D +RResta -I -D -RMultiplicación *I *D *RDivisión /I /D /RDivisión con resto como resultado - MOD -
EN ENO
IN1OUT
Funcion
IN2
ENOUTIN1ENO
ADD_I
IN2
Representación General
Uso del Parámetro EN/ENO
Caja de instrucciones KOP(FC, FB, Move, Add, etc)
( )EN ENO
Si está activo (1), se ejecuta la instrucción de la caja.
Si no está activo (0), no seejecuta la instrucción.
Si está activo (1), indica que la instrucción se ejecutó sin error.
Si no está activo (0), no se llamóa la instrucción o no se produjola ejecución de la instrucción
* AWL no admite los parámetros EN/ENO. ENO = al bit BR en AWL
EN = Entrada Enable ENO = Salida Enable
• Interpreta como valores a sumar los contenidosde las palabras de las partes bajas de los ACU1-2
• La suma queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango • La parte alta del ACU1 no se modifica
Suma de INT (+I)
Resta de INT (-I)• Interpreta como valores a restar los contenidos
de las palabras de las partes bajas de ACU1-2• Resta el valor del ACU1 del valor del ACU2• El resultado queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango • La parte alta del ACU1 no se ha modificado
L MW4L MW10+IT MW6
L MW5L MW11-IT MW7
ENOUTIN1ENO
ADD_I
IN2
ENOUTIN1ENO
SUB_I
IN2
Números Enteros Simples (I)
• Interpreta como valores a multiplicar los contenidos de las palabras de laspartes bajas de los acumuladores 1 y 2.
• El producto queda en ACU1como un número de tipo de dato DINT• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango • Para la siguiente multiplicación el valor está como un DINT en ACU1
Multiplicación de INT (*I)
División de INT (/I)• Divide los contenidos de las partes bajas
de los acumuladores 1 y 2.• ACU2 es el dividendo y ACU1 el divisor• Devuelve en ACU1 cociente y resto (INT)• Los bits CC0 y CC1 indican si +, - o cero • Los bits OV y OS indican sobrepasamiento• Si divisor=0, dividendo=divisor= 0
CC0, CC1, Ov y OS se ponen a “1”
Dividendo15 0
/I
ACU231 16
(Irrelevante)
Divisor(Irrelevante)
CocienteResto
=
Antes
Después
ACU1
ACU1
Números Enteros Simples (II)
ENOUTIN1ENO
MUL_I
IN2
ENOUTIN1ENO
DIV_I
IN2
• Interpreta los valores de ACU1 y ACU2como valores en DINT
• La suma queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha
sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Suma de DINT (+D)
Resta de DINT (-D)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Resta el valor del ACU1 del valor del ACU2• El resultado queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
L MD4L MD10+IT MD16
ENOUTIN1ENO
ADD_DI
IN2
Números Enteros Dobles (I)
ENOUTIN1ENO
SUB_DI
IN2
• Interpreta los valores de ACU1 y ACU2 como valores en DINT• El resultado de la multiplicación queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Multiplicación de DINT (*D)
División de DINT (/D)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor)• Almacena el cociente en el ACU1• El cociente es un resultado entero de la división.
División de DINT con resto como resultado (MOD)• Interpreta los valores de ACU1 y ACU2 como valores en DINT• Divide el valor de ACU2 (dividendo) entre el valor de ACU1 (divisor)• Almacena el resto en el ACU1
Números Enteros Dobles (II)
ENOUTIN1ENO
DIV_DI
IN2
ENOUTIN1ENO
MOD_DI
IN2
ENOUTIN1ENO
MUL_DI
IN2
• Las operaciones aritméticas de enteros afectan a los bits de estado CC1, CC0, OV y OS
Evaluación de los Bits de la Palabra de Estado
Estado de señal de los bits de la palabra de estado: resultado del cálculo dentro del área válida
Estado de señal de los bits de la palabra de estado: resultado del cálculo fuera del área válida
Estado de señal de los bits de la palabra de estado: operaciones aritméticas con números enteros dobles +D, /D y MOD
• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL• La suma queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Suma de REAL (+R)
Resta de REAL (-R)• Interpreta los valores de ACU1 y ACU2 como valores de tipo de dato REAL• Resta del valor del ACU1 el valor del ACU2• El resultado queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango
Números Reales (I)
ENOUTIN1ENO
ADD_R
IN2
ENOUTIN1ENO
SUB_R
IN2
• Interpreta los valores de ACU1 y ACU2 comovalores de tipo de dato REAL
• El producto queda en ACU1• En los bits CC0 y CC1 indica si el resultado ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango• Si un operando no es REAL, retorna un valor no válido en ACU1 y CC0, CC1,
OV y OS se ponen a “1”
Multiplicación REAL (*R) L MD6L MD12*RT MD67
ENOUTIN1ENO
MUL_R
IN2
Números Reales (II)
División de REAL (/R)• Interpreta los valores de ACU1 y ACU2 como
valores de tipo de dato REAL• Divide el valor de ACU2 (dividendo)
entre el valor de ACU1 (divisor) • Almacena el cociente en el ACU1• En los bits CC0 y CC1 indica si el cociente ha sido positivo, negativo o cero.• Los bits de estado OV y OS indican cualquier sobrepasamiento del rango• Si un operando no es REAL, retorna un valor no válido en ACU1 y CC0, CC1
OV y OS se ponen a “1”.
ENOUTIN1ENO
DIV_R
IN2
L MD67L MD3/RT MD33
• Las operaciones aritméticas de reales afectan a los bits de estado CC1, CC0, OV y OS
Evaluación de los Bits de la Palabra de Estado
Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área válida
Estado de señal de los bits de la palabra de estado para resultados de operaciones en coma flotante dentro del área no válida
• La adición de constantes es útil para el cálculo de direcciones• Añade la constante especificada al contenido del ACU1• Se puede especificar:
• constante byte hexadecimal• constante word o doble word decimal
• Para añadir una constante word usando DINT , preceder a la constante con L#• Si una constante decimal excede el rango de INT, calcula automáticamente en DINT
+ B#16#bb+ +/-w+ L#+/-d
Cargar Dirección1Adición ConstanteTransferir Resultado
Ejemplos:L Valor1+ B#16#21T Resultado1
L Valor2+ -33T Resultado2
Funciones Estructura semántica
L Valor3+ L#-1T Resultado3
Suma de Constantes al ACU1
• Las funciones DEC e INC afectan a ACU1• El valor que se puede incrementar o decrementar tiene un rango de 0 a 255• Sólo afecta al byte de menor peso del ACU1• No hay llevada (carry) al byte siguiente• Se ejecutan con independencia del RLO
Decremento (DEC n)
Cargar Dirección1Decrementar ValorTransferir Resultado
Incremento (INC n)
Cargar Dirección1Incrementar ValorTransferir Resultado
Ejemplos:L ValorInicialINC 5T ValorInicial
L ValorFinalDEC 7T ValorFinal
Decremento e Incremento
Estructura semántica
• Las funciones matemáticas procesan números en formato de datos REAL • Los bits de estado CC0, CC1, OV y OS proveen información adicional del resultado de
la operación.• Las funciones matemáticas toman el número del ACU1 como entrada• Almacena el resultado en el ACU1• Se contemplan las funciones:
• trigonométricas • arco • cuadrado y raíz cuadrada• función exponencial en base “e” y logaritmo natural
• La estructura semántica de una operación aritmética avanzada es:Cargar Dirección1Función matemáticaTransferir Resultado
EN ENO
IN OUT
Funcion
Operaciones Aritméticas Avanzadas
Representación General
• Existen las funciones trigonométricas:- seno (SIN)- coseno (COS)- tangente (TAN)
• La entrada es un ángulo en radianes enformato de número REAL en ACU1
Funciones Trigonométricas Ejemplo:La potencia eléctrica P=V*I*senϕL PHISINL Corriente*RL Tension*RT Potencia
EN OUT
IN ENO
SIN
EN OUT
IN ENO
TAN
Funciones Trigonométricas (I)
Funciones Arco• Existen las funciones arco:
- arco seno (ASIN)- arco coseno (ACOS)- arco tangente (ATAN)
• La entrada es un número REAL en ACU1• El resultado es un ángulo en radianes en ACU1
Ejemplo:Arco seno en gradosL 0.343ASINL 57.2958*RT Angulo_grados
EN OUT
IN ENO
ATAN
• Realiza la función
Exponencial en base e (EXP))1( ACUe
Ejemplo:L Valor_aLNL Valor_b*REXPT Potencia
abb ea ln=
Funciones Logarítmicas y Exponenciales
Función Logarítmica (LN)• Calcula el logaritmo natural de un número en coma flotante
EN OUT
IN ENO
LN
EN OUT
IN ENO
EXP
Funciones Cuadrado y Raíz Cuadrada
Cuadrado (SQR)• Calcula el cuadrado del valor del ACU1
Ejemplo: Volumen cilindroL RadioSQRL Altura*RL 3.141592*RT Volumen
L MD 34SQRT MD 38
EN OUT
IN ENO
SQR hr2π
Raíz cuadrada (SQRT)• Extrae la raíz cuadrada del valor del ACU1
Ejemplo:L #aSQRL #bSQR+RSQRTT #c
22 bac +=
L M D10SQRTT MD 14
EN OUT
IN ENO
SQRT
• Las funciones de conversión convierten el tipo de datos del valor del ACU1
INT
DINT
REAL
INVD (INV_DI)NEGD (NEG_DI)
ABSNEGR (NEG_R)
INVI (INV_I)NEGI (NEG_I)
ITD(I_DI)
DTR(DI_R)
RND+ (CEIL), RND- (FLOOR)RND (ROUND), TRUNC (TRUNC)
BTI (BCD_I)
ITB (I_BCD)
BTD (BCD_DI)
DTB (DI_BCD)
BCD3 dec.
BCD7 dec.
Operaciones de Conversión
Cargar Dirección1Función de conversiónTransferir Resultado
Conversión: Números en INT y DINTITD: Conversión de INT a DINT (I_DI)ITB: Conversión de INT a BCD (I_BCD)DTB: Conversión de DINT a BCD (DI_BCD)DTR: Conversión de DINT a REAL (DI_R)
Conversión: Números en BCDBTI: Conversión de BCD a INT (BCD_I)BTD: Conversión de BCD a DINT (BCD_DI)
L EW4BTIT MW20
L MD10DTRT MD30
EN ENO
IN OUT
Función
EN ENO
IN OUT
DI_R
EN ENO
IN OUT
BCD_I
Conversión de Enteros
Estructura Semántica
Conversión: Números REALRND: Convierte real a doble entero. Redondea a más próximo (ROUND)TRUNC:Convierte real a doble entero. Trunca el número (TRUNC) RND+: Convierte real a doble entero superior (CEIL)RND-: Convierte real a doble entero inferior (FLOOR)
L MD33RNDT MD69
EN ENO
IN OUT
ROUND
Conversión de Reales
Modos de Redondeo en Conversión de Números Reales
Otras Operaciones de Conversión
Otras funciones de conversiónINVI: Complemento a uno de INT (INV_I)INVD: Complemento a uno de DINT (INV_DI)NEGI: Complemento a dos de INT (NEG_I)NEGD: Complemento a dos de DINT (NEG_DI)NEGR: Negación de número REAL, cambio de signo (NEG_R)ABS: Valor absoluto de un número REAL (ABS)
EN ENO
IN OUT
ABS
Operaciones de Transferencia
Operación MOVE• Permite inicializar variables con valores determinados.• El valor indicado en la entrada IN se copia en el
operando indicado de la salida OUT. ENO y EN tienen el mismo estado de señal.
• Se puede copiar todos los tipos de datos de 8, 16 ó 32 bits de longitud.
EN ENO
IN OUT
MOVE
• Las funciones de desplazamiento permiten desplazar el contenido del ACU1 hacia la derecha o hacia la izquierda
• Se pueden utilizar con palabras y dobles palabras• Devuelven el resultado en el ACU1• Se contemplan las operaciones:
• desplazamiento• rotación
• El número de posiciones como parámetro
Cargar Numero_de_posicionesCargar Dato1Función desplazarTransferir Resultado
• Se pueden programar de dos formas:• El número de posiciones en ACU2
Cargar Dato1Fun. Desplazar Numero_de_posicionesTransferir Resultado
ENOUTINENO
Función
N
Operaciones de Desplazamiento y Rotación
Se contemplan las siguientes funciones de registro:Funciones de Registro Palabra Doble palabra
con nº posiciones con nº posiciones con nº posiciones con nº posicionescomo parámetro en ACU2 como parámetro en ACU2
Desplazar a la izquierda SLW n (SHL_W) SLW SLD n (SHL_DW) SLDDesplazar a la derecha SRW n (SHR_W) SRW SRD n (SHR_DW) SRDDesplazar con el signo SSI n (SHR_I) SSI SSD n (SHR_DI) SSDRotar a la izquierda - - RLD n (ROL_DW) RLDRotar a la derecha - - RRD n (ROR_DW) RRDRotar izqui. con CC1 - - RLDA -Rotar derecha con CC1 - - RRDA -
Funciones de Registro
Desplazamiento izquierda (palabra) SLW Desplazamiento izquierda (doble palabra) SLD
ACU1CC1
“0” CC1“0”
ACU1
Desplazamiento derecha (palabra) SRW
ACU1
CC1
“0”
Desplazamiento derecha (doble palabra) SRD
CC1“0”
ACU1
Desplazamiento con signo (palabra) SSI
ACU1
CC1S
Desplazamiento con signo (doble palabra) SSD
CC1S
ACU1
SHL_W
N
EN ENO
OINMW50
MW4 MW12(MW4 = 5)
* L MW50SLW 5T MW12
Desplazamientos
Rotar izquierda a través de CC1 RLDARotar a la izquierda RLD
CC1
ACU1
CC1
ACU1
Rotar a la derecha RRD
CC1
ACU1
Rotar a la derecha a través de CC1 RRDA
CC1
ACU1
ROR_DW
N
EN ENO
O
INMD60
MW6 MD50
(MW6 = 4)
* L MD60RRD 4T MD50
* Estado de señal del último bit desplazado:
Rotaciones
• Las funciones lógicas de palabras combinan los contenidos del ACU1 y ACU2 bit a bit. • El resultado queda en el ACU1• Hay funciones para palabras o dobles palabras• Se dispone de funciones:
• AND• OR• OR Exclusiva
• Operación con constante
Cargar Valor1Cargar Valor2Función lógica sin constanteTransferir Resultado
• Se pueden programar de dos formas:• Operación sin constante
Cargar Dato1Operación lógica con constanteTransferir Resultado
Función
IN1EN ENO
OUTIN2
Operaciones Lógicas con Palabras
• AW (WAND_W) operación AND (palabra) entre ACU1 y ACU2• AW W#16# operación AND (palabra) entre constante y ACU1• AD (WAND_DW) operación AND (doble palabra) entre ACU1 y ACU2• AD DW#16# operación AND (doble palabra) entre constante y ACU1
Operación digital AND
WAND_W
IN1EN ENO
OUTIN2MW20 MW30
MW10
L MW10L MW20AWT MW30
Operación Digital AND
• OW (WOR_W) operación OR (palabra) entre ACU1 y ACU2• OW W#16# operación OR (palabra) entre constante y ACU1• OD (WOR_DW) operación OR (doble palabra) entre ACU1 y ACU2• OD DW#16# operación OR (doble palabra) entre constante y ACU1
Operación digital OR
WOR_W
IN1
EN ENO
OUTIN2MW44 MW34
MW32
L MW32L MW44OWT MW34
Operación Digital OR
• XOW (WXOR_W) operación OR exclusiva (palabra) entre ACU1 y ACU2• XOW W#16# operación OR excl. (palabra) entre constante y ACU1• XOD (WXOR_DW) operación OR excl. (doble palabra) entre ACU1 y ACU2• XOD DW#16# operación OR excl. (doble palabra) entre constante y ACU1
Operación digital OR exclusiva
WXOR_W
IN1
EN ENO
OUTIN2MW28 MW24MW26
L MW26L MW28XOWT MW24
Operación Digital OR Exclusiva
L IW 0 // Valor 1L MW 144 // Valor 2AW // Operación lógicaT MW 146 // Resultado
Ejemplo 1
L MW 148AW W#16#807FT MW 150L MD 152OD DW#16#8000_F000T MD 156
L Valor1L Valor2AWL Valor3OWT Resultado
L Valor4L Valor5XOWAW W#16#FFF0T Resultado2
Ejemplos de Operaciones Lógicas con Palabras
Ejemplo 2
Ejemplo 3
Ejemplo 4
Automatización Industrial
Operaciones de Salto
TEMA – Operaciones de Salto
1. – Instrucciones de Salto
1.1 – Salto Incondicional
1.2 – Salto Condicional
2. – Distribuidor de Saltos
3. – Bucles
4. – Saltos Condicionados
Índice
Principios de Saltos
L C 10 CondicionL 50>IJC GR50 Salto condicionalPrograma Programa si no ........ se cumple condiciónJU SHAR
GR50: Programa en Programa si se etiqueta de salto cumple la condición
SHAR:
• Permiten interrumpir la ejecución lineal del programa. STEP 7 soporta varias instrucciones de Salto a Etiquetas (“ir a etiqueta”)
• Consta de una condición de salto y una etiqueta de salto (dirección)• La etiqueta consta de cuatro caracteres. No debe comenzar con carácter numérico• Los saltos pueden ser hacia delante o hacia atrás. Siempre dentro de un módulo
– Salto Incondicional – Salto Condicional, basado en el RLO, BR, OV / OS, CC1 y CC0– ...
Salto
Etiqueta
Si se ejecuta el salto lasinstrucciones situadasentre el salto y la etiquetano se procesan
Introducción
Ejemplo:
Introducciones de SaltoOperaciones de Salto en STL
Salto si RLO = 1 y salva RLOEtiquetaJCB
Distribuidor de saltosEtiquetaJL
Bucle por saltoEtiquetaLOOP
Salto si overflow memorizadoEtiquetaJOS
Salto si overflowEtiquetaJO
Salto si resultado de operación inválidoEtiquetaJUO
Salto si resultado de operación menor o igual a 0EtiquetaJMZ
Salto si resultado de operación menor que 0EtiquetaJM
Salto si resultado de operación mayor o igual a 0EtiquetaJPZ
Salto si resultado de operación mayor que 0EtiquetaJP
Salto si resultado de operación distinto a 0EtiquetaJN
Salto si resultado de operación igual a 0EtiquetaJZ
Salto si BR = 0EtiquetaJNBI
Salto si BR = 1EtiquetaJBI
Salto si RLO = 0 y salva RLOEtiquetaJNB
Salto si RLO = 0EtiquetaJCN
Salto si RLO = 1EtiquetaJC
Salto InconcicionalEtiquetaJU
Salto Incondicional (JMP)El Salto Incondicional se ejecuta independientemente de cualquier condición; este salto no lee ni se ve afectado por los bits de la palabra del estado.
JU CAS1.......
CAS1: A I 0.4R Q 4.1
AWL
Segmento 1
Segmento X
FUP
Segmento 1
JMP
CAS1
....
Segmento X
CAS1
R
Q 4.1
I 0.4
.
.
.
.
Instrucciones de Salto Incondicional
Salto Condicional (JMP, JMPN)El Salto Condicional se ejecuta en función de una condición reflejada en uno o varios bits de la palabra de estado.
A I 0.0JC CAS2....
CAS2: A I 0.4R Q 4.1
AWL
Segmento 1
Segmento X
FUP
Segmento 1
JMP
CAS2
I 0.0
Segmento X
CAS2
R
Q 4.1
I 0.4
.
.
.
.
Instrucciones de Salto Condicional
A I 0.0JCN CAS3....
CAS3: A I 0.4R Q 4.1
AWL
Segmento 1
Segmento X
FUP
Segmento 1
JMPN
CAS3
I 0.0
Segmento X
CAS3
R
Q 4.1
I 0.4
.
.
.
.
Salto Condicional (JC, JCN)
Salta si RLO = 1
A I 0.0A I 1.0JC NEW1
Salta si RLO = 0
A I 0.0A I 1.0JCN REC2
• El bit de la palabra de estado Resultado de la Operación Lógica (RLO) determina cuando se ejecuta este salto condicional.
• También existen instrucciones que además guardan el resultado en el RB
Salta si RLO = 1 y almacénalo en RB
A I 0.0A I 1.0JCB NEW1
Salta si RLO = 0 y almacénalo en RB
A I 0.0A I 1.0JNB REC2
STL: Saltos Condicionales Basados en RLO
Salto Condicionales Basados en BR, OV, OS
• Salto si BR = 1 (JBI)
• Salto si BR = 0 (JNBI)
• Salto si OV = 1 (JO)
• Salto si OS = 1 (JOS)
STL: Saltos Condicionales Basados en BR, OV, OS
Los bits del la palabra de estado Resultado Binario (RB) o Desbordamiento/Desbordamiento Memorizado determinan cuando se ejecutan estos saltos condicionales. La evaluación de los bits RB, OV y OS proporciona un medio de verificar condiciones de error.
Salto Condicionales Basados en CC1 y CC0
CC0 CC1 Salto ejecutado0 0 JZ Salto si el resultado es Cero
JMZ Salto si cero o menor de ceroJPZ Salto si cero o mayor de cero
1 0 JM Salto si es menor de cero (negativo)JMZ Salto si cero o menor de cero (negativo)JN Salto si no cero
0 1 JP Salto si es mayor de cero (positivo)JPZ Salto si cero o mayor de cero (positivo)JN Salto si no es cero
1 1 JUO Salto si resultado no es admisible
• Cuando se ejecuta en el programa un cálculo matemático, los bits CC1 y CC0 se actualizan en la palabra del estado.
• Los bits CC1 y CC0 se evalúan en las siguientes instrucciones de salto de la tabla
STL: Saltos Condicionales Basados en CC1 y CC0
Instrucción JL• Un salto distribuidor JL permite especificar (calcular) saltos a una sección del programa
en el módulo condicionado a un número de posición.• Trabaja conjuntamente con una lista de saltos incondicionales JU• Hay una etiqueta de salto en JL que apunta al final de la lista• Puede tener hasta 255 entradas• Utiliza el byte bajo del ACU1
L Numero_de_posiciones //Número para decidir el saltoJL END //Selector de “x” posicinesJU M0 //Si ACU1 tiene “0” salta a meta 0JU M1 //Si ACU1 tiene “1” salta a meta 1..JU Mx // Si ACU1 tiene “x” salta a meta x
END: JU ERR // Si ACU1 es mayor de “x” o menor de “0”.....M0: L MW 30
STL: Distribuidor de Saltos
STL: Distribuidor de Saltos
Inicio del Contador de Bucle
Sección de Programaque va a ser ejecutadovarias veces
Decremento del Contador de Bucles
¿ Contador deBucle <>0 ?
Sí
NoContinuar
L +4 // cargar el contador de bucleNEXT:T MB10 // primera instrucción del bucle
. // bucle
. // bucle
. // bucle
. // bucle
. // bucleL MB10 // últimas instrucciones del bucleLOOP NEXT // salto a la etiqueta NEXT
En este ejemplo, el programa comprendidoentre NEXT y NEXT se ejecutará 4 veces.
STL: Función Bucle
STL: Función Bucle
Saltos Condicionados
JU M2
A I 0.0JC M1
BE
FC100
M1 -
M2 -
M3 -
?
A
B
AN I 0.1JC M1
A I 0.2= Q 4.0JU M2
M1 A I 0.3= Q 4.1
M2 A I 0.4= Q 4.2
Si No?
C
AN I 0.5JC M3
A I 0.6= Q 4.3
M3 A I 0.7= Q 1.4
Si No
?
D M4 AN I 2.0= Q 4.5
A I 2.1JC M4
Si
No
?A
Si
No
?B ?
C
Si
No
Si
No
Ejemplos de Saltos:Incidencia sobre TemporizadoresFC10 A I 0.0 Salto a meta1 con entrada a 1 JC MET1 A I 0.1 Combinación binaria A I 0.2 = Q 4.0 A I 0.2 Temporizador L S5T#1S SD T 0 A I 0.3 R T 0 A I 0.4 Contador CU C 1 A I 0.5 CD C 1 A I 0.6 L C#10 S C 1 A I 0.7 R C 1 L C 1 Carga y Transferencia T QW 6 L C 1 Comparación L C#12 ==I = Q 4.1 A T 0 Salida temporizador = Q 4.2 dentro de salto MET1 A T 0 = Q 4.3 BE
Ejemplos de Saltos: Ejecución PrioritariaFC13 A I 0.0 Con I0.0 se ejecutan ‘A’ y ‘D’ JC PRI1 A I 0.1 Con I0.1 se ejecutan ‘B’ y ‘D’ JC PRI2 A I 0.2 Con I0.2 se ejecutan ‘C’ y ‘D’ JC PRI3 JU FIN PRI1 A I 1.0 Programa ‘A’ A I 1.1 = Q 4.0 JU FIN PRI2 A I 1.2 Programa ‘B’ A I 1.3 = Q 4.1 JU FIN PRI3 A I 1.4 Programa ‘C’ A I 1.5 = Q 4.2 JU FIN FIN A I 1.6 Programa ‘D’ A I 1.7 = Q 4.3 JU FIN BE
Mediante un selector de 5 posiciones, realizar el programa que permita ajustar el tiempo de funcionamiento de una mezcladora. Los tiempos fijos asignados a cada posición se encuentran en el DB 10
Ejemplos de Saltos: Mezcladora
FC10 OPN DB 10 L DBW 0 A I 0.0 JC META L DBW 2 A I 0.1 JC META L DBW 4 A I 0.2 JC META L DBW 6 A I 0.3 JC META L DBW 8 A I 0.4 JC META BEU META T MW 10 BE
DB10 0 S5T#1S 2 S5T#2S 4 S5T#3S 6 S5T#4S 8 S5T#5S
FC11 A I 1.0 L MW 10 SE T 20 A T 20 = Q 4.0 BE
OB1 CALL FC 10 CALL FC 11 BE
FC14 L PB 0 Primera consulta de alarma T MB 0 A M 0.0 S M 10.0 JC ALA0 ALA1 R M 10.0 . Código de Programa Principal . . L PB 0 Segunda consulta de alarma T MB 0 A M 0.0 S M 10.1 JC ALA0 ALA2 R M 10.1 . Código de Programa Principal . . L PB 0 Tercera consulta de alarma T MB 0 A M 0.0 S M 10.2 JC ALA0 ALA3 R M 10.2 . Código de Programa Principal . . BEU ALA0 L IB 1 Programa de alarma T PB 1 A M 10.0 JC ALA1 A M 10.1 JC ALA2 A M 10.2 JC ALA3 BE
Ejemplos de Saltos: Lector de Alarmas
Ejemplos de Saltos: Cinta Transportadora
FC20 Nomb CINTA A I 0.0 Evaluación de orden de AN M 1.0 desplazar = M 2.0 S M 1.0 AN I 0.0 R M 1.0 AN M 2.0 BEC AN I 0.1 Salto si es buena JC BUEN L MB 20 Si es defectuosa se desplaza SLW 1 el registro de desplazamiento L 1 y se introduce un “1” +I T MB 20 JU FIN BUEN L MB 20 Si es buena se desplaza el SLW 1 registro de desplazamiento T MB 20 FIN L MB 20 Presentar el registro de T QB 4 desplazamiento en QB4 BE
I 0.0
MB 20
Reconocimientode pieza defectuosa
Expulsor
FC 14L IB 0JL OVERJU M0JU M1JU M2JU M3
OVER: L 0T QW 4BEU
M0: L -16SSI 2 //Desplazar con signo a derechaT QW 4BEU
M1: L 16SSI 2T QW 4BEU
M2: L -16SRW 2T QW 4BEU
M3: L 16SRW 2T QW 4
Ejemplos de Saltos: Saltos Distribuidos
Saltos en Step 7 (I) – SPA , SPB y SPBN (If -Then-Else)
Las operaciones de saltos en Step 7 son parecidas conceptualmente a los que nos podemos encontrar en otros lenguajes: interrumpen la ejecución normal del programa (secuencial) y lo retoman en una etiqueta dada.
Los saltos tienen una serie de características y requisitos:
Constan de una condición de salto y una dirección donde saltar (la etiqueta). La etiqueta puede tener como máximo 4 caracteres y el primer carácter no puede ser un número. Los saltos pueden ser incondicionales y condicionados. Se distinguen en los nombres de las etiquetas entre mayúsculas y minúsculas (“aaa” no es la misma
etiqueta que “AAA”)
En la entrada de hoy vamos a ver un salto incondicional (SPA) y dos condicionados (SPB y SPBN). Te mostraré en futuras entradas más saltos para poder hacer un CASE o un FOR-NEXT, pero de momento veremos estos que son los más simples y probablemente más habituales.
Saltos en Step 7: SPA
La operación de salto SPA es un salto incondicional, es decir, se ejecuta siempre que se encuentre en el camino de la ejecución del programa y no depende del estado del RLO.
La sintáxis será de la siguiente forma:
….
SPA pepe
(código que no se ejecutará)
pepe: NOP 0
(Código que continuará ejecutándose)
…
Tras la etiqueta hay que escribir 2 puntos y obligatoriamente una instrucción.
La instrucción NOP 0 es una instrucción nula. No hace nada de nada. Ocupa 2 bytes en memoria y lleva un minúsculo tiempo de ejecución. Además sólo es programable en AWL.
A mi personalmente me gusta colocar el NOP 0 tras la etiqueta por varios motivos
Porque cuando estás colocando las etiquetas SPA u otras me gusta colocar la etiqueta de salto inmediatamente después. Como no sé cómo va a seguir el programa, coloco la NOP 0.
Si coloco una instrucción tras la etiqueta y mañana borro la primera instrucción tras el salto corro el peligro de no darme cuenta que además de la instrucción, he borrado también el salto.
A mi juicio queda más limpio ya que todas las etiquetas siempre llevarán el mismo empiece y es más visible entre todo el código.
Manías personales (la de más peso probablemente de todas)
La operación de salto SPA en general no irá sola ya que salvo en ocasiones que quieras evitar la ejecución de una parte del código porque estés depurando alguna parte, no tiene mucha utilidad en sí misma.
Normalmente va a ir acompañada de otras instrucciones de salto, complementando las acciones. En el vídeo de ejemplo podrás ver cómo se pueden combinar.
Saltos en Step 7: SPB y SPBN (If /Then)
Saltos en Step 7
Estas dos operaciones de salto son condicionadas, es decir, dependen del estado del RLO:
SPB: Se ejecutará el salto cuando el resultado de la operación booleana sea true (RLO = 1) SPBN: Se ejecutará el salto cuando el resultado de la operación booleana sea FALSE (RLO = 0)
En definitiva es lo que podríamos llamar los IF- THEN de otros lenguajes de programación.
La sintáxis será de la siguiente forma:
….
Condición booleana
SPB pepe
(código que se ejecutará si RLO = 0 y no se ejecutará con RLO=1)
pepe: NOP 0
(Código que continuará ejecutándose con o sin salto)
…
Evidentemente con SPBN sería idéntico:
….
Condición booleana
SPBN pepe
(código que se ejecutará si RLO = 1 y no se ejecutará con RLO=0)
pepe: NOP 0
(Código que continuará ejecutándose con o sin salto)
…
Como bien indica la sintáxis el salto se produce si y sólo si se produce la condición de salto (RLO=0 ó 1 dependiendo de si elijes SPB o SPBN). Esto implica, y quiero dejarlo bien claro aunque sea una obviedad, que el código que está bajo la condición de salto y la etiqueta se ejecutará normalmente si la condición de salto no se satisface.
Para que tengas una idea de cómo hacer un IF-THEN-ELSE… la estructura sería del estilo
…
Condición IF
SPB Etiq1
(Codigo ELSE)
SPA Etiq2
Etiq1: NOP 0
(Codigo del IF)
Etiq2: NOP 0
…
Como puedes ver, hemos combinado el SPB con el SPA de forma que:
Si la condición de salto se cumple, saltamos al Etiq1 y ejecutamos el código del IF y continuamos evitando el código del ELSE.
Si la condición de salto NO se cumple, ejecutamos a continuación el código del ELSE y hacemos un salto incondicional (SPA) para evitar y no ejecutar el código del IF saltando al Etiq2.
Como veis estas instrucciones empiezan a ser interesantes ya que nos van a dar bastante juego a la hora de realizar nuestros programas.
¿Cuándo los voy a usar?
En general vas a usar estas instrucciones cuando el código a evitar o no no lleven aparejado un FC/FB ya que en otro caso, es más simple crear una booleana que te active la llamada a la funcion FB/FB que no andar con saltos.
Es decir, la usaré dentro de los FC/FB cuando el código a ejecutar o a esquivar sea pequeño y no merezca tener un FC/FB para ello ya que si el código va a ser muy largo, bajo mi punto de vista es mejor englobarlo en una función para un mejor seguimiento y depuración.
¿Existen más tipos de saltos en Step 7?
Efectivamente hay otros tipos de salto para realizar otro tipos de tareas como pueden ser los que se generan en otros lenguajes como son las sentencias SELECT-CASE o FOR-NEXT entre otros
LOOP en Step 7 (Saltos II) – Bucle For – Next y ejemplo de filtrado analogico
11 enero, 2013 en ejemplos, Teoría, Tutoriales, Uncategorized, Videos 1 Comentario
inShare
En la última entrada vimos los saltos en Step 7 más comunes. Hoy te voy a mostrar un nuevo tipo de salto, que si provienes de la programación en otros lenguajes, te va a sonar. Se trata de hacer bucles tipo FOR-NEXT mediante la instrucción LOOP en Step 7.
Realmente la instrucción es muy sencilla: LOOP Etiqueta. Para explicarlo bien, vamos a desgranar el siguiente código:
(Código)
L 10 –> Lo primero que hacemos es cargar en el acumulador el número de ciclos del bucle.
NEXT: T MW10 -> Transferimos el valor del ACU-1 a nuestra marca de contador de ciclos
(Código) –> Implementamos el código que queramos
L MW10 –> Cargamos el valor del contador de ciclos en el ACU-1 LOOP NEXT –> Ejecutamos el loop y saltamos a la etiqueta deseada (Llamada NEXT en este caso pero podríamos llamarla pepe)
(Código) –> Continuamos con el código que queramos.
Vayamos con la explicación del LOOP.
¿Qué hace el LOOP en Step 7?
La instrucción LOOP hace lo siguiente:
[unordered_list style="bullet"]
Toma el valor del ACU-1 y le resta una unidad. Evalua el resultado de restar la unidad. Si el resultado no es cero, salta a la etiqueta. Si es cero (ya
ha terminado), continua en la línea siguiente (no ejecuta el salto).
[/unordered_list]
Hay que tener en cuenta que es necesario una variable (en nuestro ejemplo MW10) de 16bits que sea entera no negativa. El salto puede ser hacia delante o hacia atrás, pero la forma de hacer un FOR-NEXT tradicional es como se muestra.
Por tanto, hemos hecho lo siguiente:
Cargar el número de iteraciones en el acumulador 1. Por ejemplo 10.
L 10
Tras ello, generamos cual va a ser nuestra meta de salto (Llamarla NEXT creo que es bastante adecuada por su significado) y transferimos el valor del ACU-1 al contador de ciclos.
NEXT: T MW10
Por tanto, en el primer ciclo, MW10 valdrá 10.
Como nota podrás pensar… en el post sobre los saltos dijiste que lo mejor es poner la Meta seguido de NOP 0 y ahora estás usando la instrucción directamente. Correcto. Es cierto que lo escribí y lo mantengo. De hecho aquí podría hacer lo mismo y poner un
NEXT: NOP 0
T MW 10
… pero sin que sirva de precedente creo que es más intuitivo y fácil de entender que el NEXT va asociado intrínsecamente al contador de ciclos por lo que evitamos el poner a instrucción nula ya que siempre, siempre, siempre, ha de ponerse la transferencia del contador de ciclos tras la meta, por tanto, seguido es más adecuado en este caso ¿no crees?
Bien, sigamos. Una vez transferido el valor a MW10 (recordemos que vale 10), ejecutaremos el código que queramos. Ojo, sin usar MW10 salvo de lectura, no carguéis sobre él valores ya que desvirtuaría el valor del contador.
Una vez terminado el código ejecutamos
L MW10
LOOP NEXT
Lo que hacemos es cargar el valor del contador (10 en la primera iteración) y ejecutar LOOP. Como vale 10 >0, le resta una unidad (9) y salta a NEXT.
Es decir, saltará a NEXT: T MW10 y por tanto ahora el contador de ciclos valdrá 9 ya que es lo que tenemos en el acumulador 1!!
Luego volverá a ejecutar el código que queramos, cargará nuevamente este valor 9, le restará la unidad y devolverá un 8 para que se lo transfiramos al contador de ciclos.
¿Fácil verdad? Espero que no os haya parecido una explicación para niños de párvulos pero es que hay veces que con el tema de los acumuladores, mucha gente se lía un poco.
Finalmente os he preparado un ejemplo que creo que os va a gustar. Se trata de realizar un filtrado de una señal analógica de esta forma:
[unordered_list style="bullet"]
Tomaremos la señal cada 100 ms. Pasaremos como entrada el valor analógico en tipo entero Realizaremos un filtrado de los “n” últimos ciclos donde “n” puede ser como mucho 200. Nos devolverá la media de los “n” últimos ciclos como valor real Nos devolverá la medida de los 200 últimos ciclos si hemos puesto n>20 y una señal booleana de
alarma indicando que el número de ciclos es demasiado grande y que por tanto devolvemos solamente la media del máximo número de ciclos.
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
Control del flujo del programa: Ops. de Salto
• Permiten al programa interrumpir su desarrollo lineal, para continuar el procesamiento en un punto diferente del programa.
• El operando de una instrucción de salto es una meta o etiqueta. – meta:
• 4 caracteres máximo (el 1º letra) y distingue mayúsculas y minúsculas
Ejemplo: SPA MOT1
• Debe ir seguida de : instrucción de línea cuando sea la marca del salto. Ejemplo: MOT1: L EB 124
PLC’s Página 3 Curso 2009/10 Curso 2009/10
Operaciones de Salto incondicional
• SPA salto incondicional a una meta (anterior o posterior)
• SPL salto utilizando una lista de metas
permite distribuir saltos conjuntamente con SPA
Ejemplo:
PLC’s Página 5 Curso 2009/10 Curso 2009/10
Operaciones de Salto condicional (I)
• Su ejecución dependerá del cumplimiento, o no, de una determinada condición, vinculada a bits de la palabra de estado.
• Las operaciones más utilizadas son:
– SPB salto si RLO = 1
– SPBN salto si RLO = 0
• Otros saltos condicionales, en función de otros bits de palabra de estado: – SPBI y SPBIN vinculadas a RB
– SPO y SPS vinculadas a OV y OS, respect
– SPZ, SPN, SPP, SPM, SPMZ, SPPZ y SPU vinculadas a resultados de operaciones aritm. =0 <>0 >0 <0 <=0 >=0 no válido (op. Artimética no permitida, ejem: dividir por cero)
PLC’s Página 8 Curso 2009/10 Curso 2009/10
Ops. de Salto: Bucle
• La instrucción utilizada para el bucle es LOOP y el operando será una meta para que salte a ella en cada iteración.
• LOOP decrementa ACU1-L y salta si “ACU1-L <> 0” a META
• Ejemplo: L +5 inicializa contador de bucles
PROX: T MB 10 meta a la que salta
¨¨¨¨¨¨¨¨
¨¨¨¨¨¨¨¨
L MB 10
LOOP PROX decrementa ACU1-L y salta si ACU1-L <>0
Segmento que se repite
PLC’s Página 9 Curso 2009/10 Curso 2009/10
Ops. de fin de bloque (I)
• BEA o BE fin de bloque incondicionado. Salta a) al fin de OB1 o b) a línea siguiente a la de llamada al bloque actual
• BEB fin de bloque condicionado al RLO (si RLO=1)
PLC’s Página 10 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 6)
• Tenemos una mezcladora que produce 2 tipos de productos, magdalenas y donuts, para lo cual controla la receta, modificando las proporciones de harina (A124.0) y leche (A124.1), y el tiempo que está mezclándolos (A124.2).
• La producción empezará cuando E124.0 se ponga a 1 • Si E124.1=1 produce magdalenas, para lo cual A124.0 está
encendido 2 segundos, A124.1 está encendido 1 segundo y A124.2 durante 3 sg.
• Si E124.1=0 produce donuts, para lo cual los tiempos son 3, 2 y 4 segundos respectivamente.
• El sistema debe ser robusto de forma que si está en medio de una receta no debe interrumpirse aunque cualquiera de los dos botones de entrada se modifique
• La entrada E124.2 permite elegir si los productos y el proceso de mezcla se realizan simultáneamente (si E124.2=0) o de manera secuencial (si E124.2=1)
www.campusabierto.es Curso de Programación de Autómatas
SI : Impulso ‐ Impulso Conexión Si
SV : Impulso prolongado TP * Impulso Conexión No
SE: Retardo a la conexión TON Retardo Conexión Sí
SS: Retardo a la conexión memorizado ‐ Retarso Conexión No
SA: Retardo a la desconexión (PRORROGA) TOFF ‐ Desconexión ‐
Tipo Arranque Depende de laseñal arranque
Equivalente IEC
* TP: no se redispara con arranques próximos
www.campusabierto.es Curso de Programación de Autómatas
SI
SV
SE
SS
SA
Disparo
Reset
Tiempo
Valor booleano
Disparo
Reset
Tiempo
Valor booleano
Disparo
Reset
Tiempo
Valor booleano
Disparo
Reset
Tiempo
Valor booleano
1
Operaciones con Temporizadores S7-300/400
Los temporizadores permiten distintas operaciones:
• Funcionamiento en un modo determinado.• Borrar la temporización.• Re-arrancar un temporizador (FR).• Consultar su estado como un operando más en operaciones lógicas
de bit.• Consultar su valor en ACU 1.
Modos de funcionamiento:
• Impulso (SI).• Impulso prolongado (SV).• Retardo a la conexión (SE).• Retardo a la conexión con memoria (SS).• Retardo a la desconexión (SA).
2
Carga de un valor de temporización
El valor de temporización se debe cargar en la parte baja del ACU para desde allí transferirlo al temporizador mediante el set que determine el modo de temporización adecuado.
El valor de temporización puede cargarse en la palabra baja del ACU 1 en formato binario, hexadecimal o BCD. Desde 0 a 9990 segundos
La siguiente sintaxis permite cargar un valor de temporización predefinido: L W#16#abcd
a = base de tiempos bcd = valor de temporización en formato BCD Base de tiempos y código respectivo: 10 ms 0
100 ms 1 1 s 2
10 s 3
Registros afectados: ACU 1, ACU 2
3
Carga de un valor de temporizaciónEjemplo:
L W#16#210 //esto introduce un valor de 10 segundos en ACU 1 (2 base de 1s, 10 los segundos que deseamos) L S5T#aH_bbM_ccS_ddMS a = horas, bb= minutos, cc = segundos, dd = milisegundos
En este caso la base de tiempos se selecciona de forma automática, tomándose la de valor más bajo posible. Debido a esto los valores de resolución demasiado alta se redondean por defecto, alcanzando el rango pero no la resolución deseada.
Las posibles resoluciones y rangos son: 0,01 s 10MS a 9S_990MS
0,1 s 100MS a 1M_39S_900MS1 s 1S a 16M_39S10 s 10S a 2H_46M_30S
L S5T#00H02M23S00MS //esto introduce un valor de temporización de2 minutos y 23 segundos en el ACU 1
4
Temporizador como impulso (SI)
Instrucción: SISi el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca. El temporizador marcha con el valor de tiempo indicado en ACU1. Si el RLO cambia de 1 a 0 antes de terminar el tiempo, el temporizador se detiene. La salida del temporizador entrega 1 mientras el temporizador corre.
Registros afectados: ER
Ejemplo:
U E 0.0 //Empleamos la entrada 0.0 como entrada del temporizador L S5T#45s //Introducimos un valor de temporización de 45 segundos SI T 2 //Empleamos el temporizador 2 como impulso U T 2 //Leemos la salida del temporizador = A 0.1 //Asignamos la salida del temporizador a la salida 0.1
5
Temporizador como impulso prolongado (SV)
Instrucción: SVSi el RLO (al ejecutar esta instrucción) cambia de 0 a 1, el temporizador arranca y continua en marcha incluso si el RLO cambia a 0 antes de que el temporizador termine. Mientras el tiempo esta corriendo, la salida vale 1.
Registros afectados: ER
Ejemplo:
U E 0.2 //Empleamos la entrada 0.2 como entrada del temporizador L S5T#85s //Introducimos un valor de temporización de 85 segundos SV T 9 //Empleamos el temporizador 9 como impulso prolongado U T 9 //Leemos la salida del temporizador = A 9.1 //Asignamos la salida del temporizador a la salida 9.1
6
Temporizador como retardo a la conexión (SE)
Instrucción: SEEl temporizador arranca cuando hay un flanco creciente en el RLO (al ejecutar esta instrucción). El temporizador continua en marcha con el valor de temporización indicado en el ACU 1 mientras sea positivo el estado de señal en la entrada (el RLO). El estado de la salida es 1 si el tiempo ha transcurrido sin errores y si el estado de la entrada (RLO) es 1. Si la entrada (RLO) cambia de 1 a 0 mientras está en marcha el temporizador, éste cambia el estado de la salida a 0. Registros afectados: ER
Ejemplo:
U E 0.7 //Empleamos la entrada 0.7 como entrada del temporizador L S5T#65s //Introducimos un valor de temporización de 65 segundos
SE T 4 //Empleamos el temporizador 4 como retardo a la conexiónU T 4 //Leemos la salida del temporizador= A 8.1 //Asignamos la salida del temporizador a la salida 8.1
7
Temporizador como retardo a la conexión (SS)
Instrucción: SSSi la entrada (RLO en la ejecución de la instrucción) cambia de 0 a 1, el temporizador arranca y continua corriendo incluso si la entrada (RLO) cambia a 0, antes que el temporizador termine de contar. Si el tiempo ha concluido la salida continua a 1 independientemente del estado de la entrada (RLO). Solo se puede poner a 0 la salida mediante un Reset. El temporizador vuelve a arrancar con el valor de temporización indicado en el ACU 1 si el estado de la señal en la entrada (RLO) cambia de 0 a 1 mientras el temporizador está en marcha. Registros afectados: ER
Ejemplo:
U E 1.2 //Empleamos la entrada 1.2 como entrada del temporizadorL S5T#32s //Introducimos un valor de temporización de 32 segundosSS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoriaU T 2 //Leemos la salida del temporizador= A 3.1 //Asignamos la salida del temporizador a la salida 3.1
8
Temporizador como retardo a la desconexión (SA)
Instrucción: SA Si la entrada (RLO en la ejecución de la instrucción) cambia de 1 a 0, el temporizador arranca y continua corriendo. Si la entrada (RLO) cambia a 1 antes que el temporizador termine de contar, se resetea el temporizador. Mientras el tiempo está corriendo, la salida vale 1.
Registros afectados: ER
Ejemplo:
U E 4.2 //Empleamos la entrada 4.2 como entrada del temporizadorL S5T#32s //Introducimos un valor de temporización de 32 segundosSA T 7 //Empleamos el temporizador 7 como retardo a la desconexiónU T 7 //Leemos la salida del temporizador= A 1.1 //Asignamos la salida del temporizador a la salida 1.1
10
Borrado de un Temporizador AWL S7-300/400
Instrucción: R TEsta instrucción borra (reinicia) el temporizador indicado. El temporizador vuelve al estado dereposo, es decir parado y con la salida igual a 0.
Registros afectados: ER
Ejemplo:
U E 0.0 //Empleamos la entrada 0.0 como entrada del temporizadorL S5T#2s //Introducimos un valor de temporización de 2 segundosSS T 2 //Empleamos el temporizador 2 como retardo a la c. con memoriaU E 0.1 //Empleamos la entrada 0.1 como entrada de borradoR T 2 //Si la entrada 0.1 cambia de 0 a 1 el temporizador 2 se borraU T 2 //Leemos la salida del temporizador= A 3.1 //Asignamos la salida del temporizador a la salida 3.1
11
Re-arranque de un Temporizador AWL S7-300/400Instrucción: FR T
Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador.
Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha, es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque continúa procesándose con un RLO de 1. Registros afectados: ER
Ejemplo:U E 2.0 //Empleamos la entrada 2.0 como re-arranque FR T 1 //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1 U E 2.1 //Empleamos la entrada 2.1 como entrada del temporizador L S5T#5s //Introducimos un valor de temporización de 5 segundos SI T 1 //Empleamos el temporizador 1 como impulsoU T 1 //Leemos la salida del temporizador= A 4.0 //Copiamos la salida del temporizador a la salida 4.0
Si el RLO cambia de 0 a 1 en la entrada de re-arranque mientras está en marcha el temporizador, el temporizador vuelve a arrancar. El tiempo programado se emplea como tiempo actual para el re-arranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto.
Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay un RLO 0 en la entrada del temporizador.
12
Re-arranque de un Temporizador AWL S7-300/400Instrucción: FR T
Cuando el RLO cambia de 0 a 1 (flanco de subida) delante de una operación FR se habilita el temporizador. Este cambio del estado de señal siempre es necesario para habilitar un temporizador.
Para arrancar un temporizador y ejecutar una operación normal de temporizador no hace falta habilitarlo. Esta función se emplea únicamente para redisparar un temporizador que está en marcha, es decir, para rearrancarlo. Este rearranque sólo puede efectuarse cuando la operación de arranque continúa procesándose con un RLO de 1. Registros afectados: ER
Ejemplo:U E 2.0 //Empleamos la entrada 2.0 como re-arranque FR T 1 //Re-arrancamos el temporizador 1 si la E 2.0 pasa a 1 U E 2.1 //Empleamos la entrada 2.1 como entrada del temporizador L S5T#5s //Introducimos un valor de temporización de 5 segundos SI T 1 //Empleamos el temporizador 1 como impulsoU T 1 //Leemos la salida del temporizador= A 4.0 //Copiamos la salida del temporizador a la salida 4.0
Si el RLO cambia de 0 a 1 en la entrada de re-arranque mientras está en marcha el temporizador, el temporizador vuelve a arrancar. El tiempo programado se emplea como tiempo actual para el re-arranque. Un cambio del RLO de 1 a 0 en la entrada de re-arranque no produce ningún efecto.
Un cambio del RLO de 0 a 1 en la entrada de habilitación no afecta al temporizador si todavía hay un RLO 0 en la entrada del temporizador.
13
Lectura de un valor de Temporización AWL S7-300/400
Instrucciones: L T y LC T
Con la instrucción "L T" introducimos en el ACU 1 (parte baja) el valor del temporizador especificado en binario. El valor en ACU 1 puede ser introducido en otro temporizador. Con la instrucción "LC T" introducimos en el ACU 1 (parte baja) el valor del temporizador especificado en BCD. En esta codificación no es posible pasar el valor de ACU 1 a otro temporizador.
Registros afectados: ACU 1, ACU 2
Ejemplos:
L T 1 //introduce el valor del temporizador 1 en el ACU 1LC T 2 //introduce el valor del temporizador 2 en el ACU 1 enBCD
14
Operaciones con Temporizadores S7-300/400
TEMPORIZADORES “SE” Y “SI”
Temporizadores sin memoria: Tenemos los temporizadores “SE” y ”SI”. Analicemos cada uno de ellos.
Temporizador “SE”: Es un temporizador de retardo a la conexión. Para programar el temporizador, necesitamos cinco operaciones como mínimo.
1ª Necesitamos una condición a partir de la cual empiece a temporizar. Esta condición puede constar de una sola instrucción o de varias.
2ª Necesitamos decirle cuanto tiempo tiene que temporizar.
3ª Necesitamos decirle el modo de funcionamiento y nº de temporizador que queremos utilizar. (En cada CPU tenemos una cantidad de temporizadores)
4º Queremos que en algún momento dado, (mientras temporiza, cuando ha acabado de temporizar, etc.)
5º haga algo.
Alguna de estas operaciones pueden constar de más de una instrucción.
15
Temporizadores SE y SI S7-300/400
El modo de funcionamiento es el siguiente:
Además de lo que hemos visto, en cualquier momento podemos hacer un RESET del temporizador. Para hacer un RESET necesitamos una condición. En el momento se cumpla si al temporizador le correspondía estar a 1, automáticamente se pondrá a cero aunque por su modo de funcionamiento no le corresponda.
16
Temporizadores SE y SI S7-300/400
Tenemos un semáforo con las tres luces verde, amarillo y rojo. Tenemos dos pulsadores de mando: un pulsador de marcha y un pulsador de paro.
Con el pulsador de marcha quiero que comience el ciclo. El ciclo de funcionamiento es el siguiente:
1º/ Verde durante 5 seg.2º/ Verde + Amarillo durante 2 seg.3º/ Rojo durante 6 seg.
El ciclo es repetitivo hasta que se pulse el pulsador de paro. En ese momento se apaga todo. Siempre que le dé al pulsador de marcha quiero que empiece por el verde.
17
Temporizadores SE y SI S7-300/400
U E 0.0 //Al activar el pulsador de marchaS A 4.2 //Encender el verdeU A 4.2 //Si se ha encendido el verdeL S5T#5S //Cuenta 5 segundosSE T 1 //Con el temporizador 1U T 1 //Y cuando acabes de contarS A 4.1 //Enciende el amarilloU A 4.1 //Si se ha encendido el amarilloL S5T#2S //Cuenta 2 segundosSE T 2 //Con el temporizador 2U T 2 //Y cuando acabes de contarS A 4.0 //Enciende el rojoR A 4.1 //Apaga el amarilloR A 4.2 //Y apaga el verdeU A 4.0 //Si se ha encendido el rojoL S5T#6S //Cuenta 6 segundosSE T 3 //Con el temporizador 3U T 3 //Cuando acabes de contarS A 4.2 //Enciende el verdeR A 4.0 //Y apaga el rojoU E 0.1 //Si se activa el pulsador de paroR A 4.0 //Apaga el rojoR A 4.1 //Apaga el amarilloR A 4.2 //Apaga el verdeBE
19
Automatización de un depósito AWL S7-300/400Se tiene un tanque de líquidos para su operación se tiene un selector de mando. Podemos seleccionar modo manual o modo automático. Si seleccionamos modo manual, lo que queremos es que mientras esté conectada, la bomba esté funcionando, y cuando desconectemos que se pare la bomba. No se quiere atender a la señalización de nivel. En modo automático el nivel se debe mantener entre los detectores de nivel. Se dispone de una protección térmica de motor con indicador luminoso en el panel de control.
Segmento 1: MANUAL
U E 0.0 //Si activamos en modo manual= A 4.0 //Pon en marcha la bomba= A 4.1 //Enciende la luz de marcha
Segmento 2: AUTOMÁTICO
U E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléU E 0.2 //Y está activo el nivel de abajoUN E 0.3 //Y no está activo el nivel de arribaS A 4.0 //Pon en marcha la bombaS A 4.1 //Y enciende la luz de marchaU E 0.1 //Si está en automáticoU E 0.7 //Y está bien el reléUN E 0.2 //Y no está activo el nivel de abajoU E 0.3 //Y se ha activado el nivel de arribaON E 0.7 //O ha saltado el reléR A 4.O //Para la bombaR A 4.1 //Apaga la luz de marchaUN E 0.7 //Si ha saltado el relé= A 4.7 //Avísame con la luz de reléBE
20
Automatización de un depósito AWL S7-300/400
Si hacemos la prueba de este circuito veremos que no funciona correctamente. Vemos que en modo manual sí que funciona pero en modo automático no para la bomba cuando debería.
Para resolver este circuito: nos hace falta utilizar marcas auxiliares. En un mismo bloque no podemos activar la misma salida dos veces con condiciones diferentes porque se interfieren entre ellas.
Las salidas no se activan en el mismo instante en el que se lee la instrucción correspondiente. Existe un registro interno que se denomina PAA (Imagen de proceso de salida), en el que se van almacenando los valores que se tienen que transferir a las salidas cuando finalice el correspondiente ciclo de scan.
Cuando se lea la instrucción BE es cuando se mandarán estos valores a las salidas reales. Si hemos enviado varios valores dentro del mismo ciclo de scan, el que realmente llegará a las salidas, será el último que hemos enviado.
21
Automatización de un depósito AWL S7-300/400
Segmento 1: MANUAL
U E 0.0 //Si está en manual= M 0.0 //Activa la marca 0.0= M 0.1 //Y activa la marca 0.1
Segmento 2: AUTOMÁTICO
U E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienU E 0.2 //Y está activo el nivel inferiorUN E 0.3 //Y no está activo el nivel superiorS M 0.2 //Activa la marca 0.2S M 0.3 //Y activa la marca 0.3U E 0.1 //Si está en automáticoU E 0.7 //Y está el relé bienUN E 0.2 //Y no está activo el nivel inferiorU E 0.3 //Y se ha activado el nivel superiorON E 0.7 //O ha saltado el reléR M 0.2 //Desactiva la marca 0.2R M 0.3 //Y desactiva la marca 0.3UN E 0.7 //Si no está el relé= A 4.7 //Activa la luz de relé.
22
Automatización de un depósito AWL S7-300/400
A continuación se añaden las marcas a las salidas.
U M 0.0 //Si está activa la marca 0.0O M 0.2 //O está activa la marca 0.2= A 4.0 //Pon en marcha la bombaU M 0.1 //Si está activa la marca 0.1O M 0.3 //O la marca 0.3= A 4.1 //Enciende la luz de marcha
Ahora ya no funciona el térmico en el modo manual. Al utilizar marcas diferentes para cada tipo de funcionamiento, el térmico sólo actúa sobre las marcas de modo automático. Sólo estamos haciendo un reset de una de las marcas que activan la bomba. Nos falta resetear la otra marca. Tendremos que añadir las siguientes líneas.
UN E 0.7 //Si ha saltado el reléR M 0.0 //Desactiva la marca 0.0R M 0.1 //Y desactiva la marca 0.1BE
Otra posible solución sería programar el paro de la bomba por apertura del relé térmico en el último segmento. Los paros de emergencia se suelen programar al final.
Ahora podemos hacer todas las objeciones que queramos y corregir sobre lo que ya tenemos hecho.
23
Automatización de un depósito AWL S7-300/400
Por ejemplo, puedo querer asegurarme que cuando se pone en marcha en modo manual no está a la vez en modo automático. Se puede suponer que por error se pueden dar las dos circunstancias a la vez y quiero evitar ese error.
Se añaden las instrucciones pertinentes.
U E 0.0UN E 0.1
Ahora ya tenemos la base del programa. Podemos añadir todo lo que creamos que sea necesario o conveniente. Por ejemplo, en este caso no se ha tenido en cuenta la situación de que después de haber estado en manual o en automático,volvamos a la posición de reposo. En automático he hecho sets a ciertas marcas. Cuando volvamos a la posición de reposo esas marcas tendrán que volver a cero. De lo contrario podría darse el caso de que estando en la posición de reposo, tengamos la bomba en marcha. Para remediar esto podría añadir las siguientes instrucciones:
UN E 0.0UN E 0.1R A 4.0R A 4.1 .......
24
Control cintas transportadoras AWL S7-300/400
Funcionamiento: Es un automatismo para seleccionar cajas por su tamaño. La cintatransportadora A4.0 está activa esperando una caja. Cuando se activa el sensor E0.0 la cinta A4.1 se pone en marcha, y la cinta A4.0 se detiene. Para seleccionar la caja hay dos sensores: E0.1 y E0.2, este último también indica que la caja sale de la cinta.
• Si la caja es grande se activarían los 2 sensores a la vez, por lo que la caja se desplazaría por la cinta transportadora A5.0 que funcionaría durante 5 seg.• Si la caja es pequeña nunca se activarían los dos sensores a la vez, y pasaría a la cinta para cajas pequeñas A5.1 que funcionaría 4 seg. Una vez que la caja salga de la cinta intermedia A4.1 podremos procesar otra caja activando A4.0.
Las cajas van llenando dos contenedores. Como opción, se podrá poner dos contadores quecuenten las cajas grandes y pequeñas, y que cuando lleguen a 7 cajas grandes y 5 pequeñas, sedetenga el proceso hasta que el operario sustituya los contenedores por otros vacíos y le dé a unpulsador de acuse de recibo.
25
Automatización de un sistemas de cintas AWL S7-300/400
//Activación de las cintasUN A 4.1 //Si no está activada la cinta intermedia= A 4.0 //que se activa la primera cintaU E 0.0 //Si sensor de llegada de caja a la cinta intermediaS A 4.1 //activar la cinta intermedia
//Selección por tamaño:
U E 0.1U E 0.2 //Si se activan los dos sensoresS M 0.0 //Es que es una caja grande, lo guardo en una marcaU E 0.2 //Cuando se activa el sensor de salida de la cintaFN M 0.1 //intermedia por flanco positivo= M0.2 //Lo guardo en una marca
//Según el tamaño activo la cinta de salida:
U M 0.2 //Cuando sale la cajaU M 0.0 //y es grandeL S5T#5SSV T 1U T 1= A 5.0 //activo la cinta para grandes durante 5 seg.U M 0.2 //Cuando sale la cajaUN M 0.0 //y no es grandeL S5T#4SSV T 2U T 2= A 5.1 //activo la cinta para pequeñas durante 4 segU M 0.2 //Cuando sale la cajaR A 4.1 //Desactivo la cinta intermediaR M 0.0 //Reseteo la marca que me indica el tamaño
Automatización Industrial
Operaciones de Temporización
TEMA – Operaciones de Temporización
1. – Operaciones de Tiempo
2. – Orden de las Instrucciones
3. – Cargar una Temporización
4. – Salida de una Temporización
5. – Elección del Temporizador Apropiado
6. – Elección del Temporizador Apropiado
7. – Programación de Temporizadores
8. – Ejemplos de Programación de Temporizadores
8.1 – Generador de Impulsos
8.2 – Generador de Onda Cuadrada Simétrica
8.3 – Generador de Onda Cuadrada Asimétrica
8.4 – Arranque Estrella/Triángulo
Índice
• Las operaciones relacionadas con temporizadores permiten medir secuencias de tiempo, como, esperas, periodo de tiempo de una medida o generar impulsos
• En la memoria para cada temporizador hay reservados 16 bits
• Tiene acceso a la zona de temporizadores:• las operaciones de temporización• actualización por reloj (S.O.) de las palabras de temporización
• Se contemplan 5 tipos de temporizadores:• impulso• impulso prolongado• retraso a la conexión• retraso a la conexión memorizado• retraso a la desconexión
Introducción
Operaciones de TiempoOperación Operando Significado
SP Arrancar como Impulso una Temporización La temporización se arranca con el flanco creciente del RLO. Con el RLO a “0” se pone a “0” la temporización. Cualquier consulta durante la temporización indica estado de señal “1”.
SE Arrancar como Impulso Prolongado una Temporización La temporización se arranca con el flanco creciente del RLO. Un RLO a “0” no afecta la temporización. Cualquier consulta durante la temporización indica estado de señal “1”.
SD Arrancar como Retardo a la Conexión una Temporización La temporización se arranca con el flanco creciente del RLO. Con el RLO a “0” se pone a “0” la temporización. Las consultas indican estado de señal “1” cuando ha transcurrido la temporización y en la entrada sigue aplicando el RLO.
SS Arrancar como Retardo a la Conexión Memorizada una Temporización La temporización se arranca con el flanco creciente del RLO. Un RLO a “0” no afecta la temporización. Las consultas indican estado de señal “1” cuando ha transcurrido la temporización. El estado de señal es “0” cuando la temporización ha sido borrada con la operación “R”.
SF Arrancar como Retardo a la Desconexión una Temporización La temporización se arranca con el flanco decreciente del RLO. Con el RLO a “1” se ajusta la temporización a su valor inicial. Las consultas indican estado de señal “1” mientras el RLO a la entrada sea “1” o corra la temporización.
R Reponer (borrar) una Temporización La temporización se repone al valor inicial mientras el RLO sea “1”. Un RLO “0” no afecta la temporización. Las consultas indican estado de señal “0” mientras la temporización se reponga o no haya sido todavía arrancada.
Identificador T
Parámetro AG S7-300 0 ... 127
Tipos de TemporizadoresImpulso
A I 0.0 L S5T#2S SP T 1
TT <T
Arrancar
Poner a 0
Salida Q
Impulso Prolongado
A I 0.1 L S5T#2S SE T 2
T
Arrancar
Poner a 0
Salida Q T T
Retardo a la Conexión
A I 0.2 L S5T#2S SD T 3
Arrancar
Poner a 0
Salida Q T T < T
Retardo a la Conexión
Memorizado
A I 0.3 L S5T#2S SS T 4
Arrancar
Poner a 0
Salida Q T T T
Retardo a la Desconexión
A I 0.4 L S5T#2S SF T 5
Arrancar
Poner a 0
Salida Q TT
Señal de entrada
tRetraso a la conexión (SD)
tImpulso prolongado (SE)
tImpulso (SP)
tRetraso a la conexiónmemorizado (SS)
tRetraso a ladesconexión (SF)
Tipos de Temporizadores
Elección del Temporizador Apropiado
<< T >>
ArrancarI 0.0
Poner a ceroI 0.1
Corre eltiempo
Estado en Q
Valor detemporizaciónBI, BCD
I 0.0
S5T#2S
I 0.1
DBW 6
QW 6
Q 4.0
ARRANCAR
A I 0.0L S5T#2S SD T 0
PONER A CERO
A I 0.1R T 0
CONSULTASDIGITALES
L T 0 T DBW 6 LC T 0 T QW 6
CONSULTASBINARIAS
A T 0 = Q 4.0
S_ODTS BI
TV BCD
R Q
T 0
Orden de las Instrucciones
Irrelevante Base detiempo
Valor de temporización en BCD (0 a 999)
11 8 7 4 3 015 12
010110210
Código binario Base de tiempo Resolución Rango de tiempo00 10 ms 0.01segundos 10 Ms a 9S 990MS01 100 ms 0.1segundos 100 MS a 1M 39S 900MS10 1 s 1 segundo 1S a 16M 39S
11 10 s 10 segundos 10S a 2H 46M 30S
• Para fijar el valor de tiempo hay que respetar las siguientes reglas sintácticas- S5T#aHbbMccSdddMSsiendo: a=horas, bb=minutos, cc=segundos y ddd=milisegundos- La base de tiempos se selecciona automáticamente y el valor del temporizador
se redondea al próximo número inferior con esa base de tiempo
Formato de la Palabra de Tiempo
Especificación del Tiempo (I)
• El valor de temporización se debe cargar en la parte baja del ACU 1, para desde allí transferirlo al temporizador mediante el set que determine el modo de temporizaciónadecuado.
• El tiempo va decrementando hasta ser igual a 0.
• El valor de temporización puede cargarse en la palabra baja del ACU 1 en formato binario, hexadecimal o BCD.
• Se debe elegir una base de tiempos y un valor dentro de dicha base, con lo que podemos realizar temporizaciones desde 0 a 9990 segundos (0H00M00S00MS a 2H46M30S00MS).
Especificación de Tiempo
Especificación del Tiempo como una ConstanteFormato: L W#16#abcd
• a = base de tiempos• bcd = valor de temporización en formato BCD Ejemplo: L W#16#2010; //esto introduce un valor de 10 segundos en ACU 1
//(2 base de 1s, 10 los segundos que deseamos)
Especificación del Tiempo (II)
Formato “S5TIME#” o “S5T#”: L S5T#aHbbMccSddMS•a = horas, bb= minutos, cc = segundos, dd = milisegundos
En este caso la base de tiempos se selecciona de forma automática, tomándose la de valor más bajo posible. Debido a esto los valores de resolución demasiado alta se redondean por defecto, alcanzando el rango pero no la resolución deseada.
Ejemplos: L S5T#00H02M23S00MS //esto introduce un valor de temporización de //2 minutos y 23 segundos en el ACU 1
L S5TIME#10s; //Duración 10 segundosL S5T#1m10ms; //Duración 1 minuto + 10 milisegundos
Especificación del tiempo comouna Variable
L S5T#10m; //Duración 10 minutosT MW 20; //Salvar la duración.......L MW 20; //Cargar el tiempo
- Constante S5TIME- Palabra de Datos DBW- Palabra de Entrada IW- Palabra de Salida QW- Palabra de Marca MW- ...
- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
- - 0 1 0 0 1 10 0 1 1 0 0 1 1
- - 0 1 0 0 1 1 0 0 1 1 0 0 1 1
DBW 10
IW 126
333.1
126
127
Configuración de la Palabrapara la Preselección delTiempo (333 x 0,1s)
Bits de Estado de los Temporizadores(en preselección sin significado) Base de Tiempos
Valor de Temporización (0..999 BCD)
Base de TiemposS_ODT
S BI
TV BCD
R Q
Preselección de Tiempo
B ase 0 1 2 3 B in a rio 0 0 0 1 1 0 1 1 F ac to r 0 ,0 1 s 0 ,1 s 1 s 1 0 s
Carga de una Temporización
Temporización enBinario
Temporización de tresdígitos en BCD
Base detiempos
Posiciones de bits ocupadas con “0”
Tiempo actual en T1
ACU 1
L T1 LC T1
Lectura de un Temporizador
Lectura de una TemporizaciónPalabra de Temporización Dual
DBW 1 L T 10T DBW 1
MW 2 L T 10T MW 2
QW 3 L T 10T QW 3
PW 4 L T 10T PW 4
T 10
0 0 0 0 0 0
L T 10
ACU 1
Valor de Temporización
15 10 9 0
15 10 9 0
S_ODTS BI
TV BCD
R Q
DBW 5 LC T 10T DBW 5
MW 6 LC T 10T MW 6
QW 7 LC T 10T QW 7
PW 8 LC T 10T PW 8
Palabra de Temporización Decimal (BCD)
T 10
0 0
LC T 10
ACU 1
Valor de Temporización15 13 12 10 9 0
Base deTiempo
15 13 12 11 8 7 4 3 0
Dual BCD
Base deTiempo
Valor de Temporización102 101 100
S_ODTS BI
TV BCD
R Q
Temporizador en modo ImpulsoCuadro FBD Parámetro Tipo de
datos Area de memoria
Descripción
No. TIMER T Número de identificación del temporizador. El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, C
Entrada de arranque
TV S5TIME I, Q, M, D, L o constante
Valor de temporización preseleccionado (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, C
Entrada de desactivación
BI WORD I, Q, M, D, L Tiempo restante (formato de entero) BCD WORD I, Q, M, D, L Tiempo restante (formato BCD) Q BOOL I, Q, M, D, L Estado del temporizador
Cronograma Esquema Eléctrico
5s
1
0
1
0
Estados deseñal
Tiempo en s
Q 4.5
I 0.0
T1
Q 4.5
I 0.0
T1: Relé de tiempo con contacto de paso al conectar
STL FBD LAD A I 0.0 L S5T#5S SP T 1 NOP 0 NOP 0 NOP 0 A T 1 = Q 4.5
Temporizador en modo Impulso ProlongadoCuadro FBD Parámetro Tipo de
datos Area de memoria
Descripción
No. TIMER T Número de identificación del temporizador. El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, C
Entrada de arranque
TV S5TIME I, Q, M, D, L o constante
Valor de temporización preseleccionado (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, C
Entrada de desactivación
BI WORD I, Q, M, D, L Tiempo restante (formato de entero) BCD WORD I, Q, M, D, L Tiempo restante (formato BCD)
Q BOOL I, Q, M, D, L Estado del temporizador
Cronograma Esquema Eléctrico
t
1
0
1
0
Estados deseñal
Tiempo
Q 4.5
I 0.0
t
T2
Q 4.5
I 0.0
T2: Relé de tiempo con formación de paso al conectar
STL FBD LAD
A I 0.0 L IW 16 SE T 2 NOP 0 NOP 0 NOP 0 U T 2 = Q 4.5
Temporizador en modo Retraso a la ConexiónCuadro FBD Parámetro Tipo de
datos Area de memoria
Descripción
No. TIMER T Número de identificación del temporizador. El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, C
Entrada de arranque
TV S5TIME I, Q, M, D, L o constante
Valor de temporización preseleccionado (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, C
Entrada de desactivación
BI WORD I, Q, M, D, L Tiempo restante (formato de entero) BCD WORD I, Q, M, D, L Tiempo restante (formato BCD)
Q BOOL I, Q, M, D, L Estado del temporizador
Cronograma Esquema Eléctrico
9s
1
0
1
0
Estados deseñal
Tiempo en s
Q 4.5
I 0.0
9s
4
I 0.0
Q 4.5
T3
STL FBD LAD
A I 0.0 L S5T#9S SD T 3 NOP 0 NOP 0 NOP 0 A T 3 = Q 4.5
Temporizador en modo Retraso a la Conexión MemorizadoCuadro FBD Parámetro Tipo de
datos Area de memoria
Descripción
No. TIMER T Número de identificación del temporizador. El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, C
Entrada de arranque
TV S5TIME I, Q, M, D, L o constante
Valor de temporización preseleccionado (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, C
Entrada de desactivación
BI WORD I, Q, M, D, L Tiempo restante (formato de entero) BCD WORD I, Q, M, D, L Tiempo restante (formato BCD)
Q BOOL I, Q, M, D, L Estado del temporizador
Cronograma Esquema Eléctrico
t
1
0
1
0Tiem po en s
Q 4.5
I 0.1
t
I 0.01
0
2
4
I 0.1
I 0.0 H 1
H 1Q 4.5
T 4
H 1: Relé auxiliar
H 1
STL FBD LAD
A I 0.0 L S5T#5S SS T 4 A I 0.1 R T 4 NOP 0 NOP 0 A T 4 = Q 4.5
Temporizador en modo Retraso a la DesconexiónCuadro FBD Parámetro Tipo de
datos Area de memoria
Descripción
No. TIMER T Número de identificación del temporizador. El área depende de la CPU utilizada.
S BOOL I, Q, M, D, L, T, C
Entrada de arranque
TV S5TIME I, Q, M, D, L o constante
Valor de temporización preseleccionado (margen: 0 – 9999)
R BOOL I, Q, M, D, L, T, C
Entrada de desactivación
BI WORD I, Q, M, D, L Tiempo restante (formato de entero) BCD WORD I, Q, M, D, L Tiempo restante (formato BCD)
Q BOOL I, Q, M, D, L Estado del temporizador
Cronograma Esquema Eléctrico
t
1
0
1
0Tiempo en s
Q 4.5
I 0.0
t
4
I 0.0
Q 4.5
T5
STL FBD LAD A I 0.0 L MW 14 SF T 5 NOP 0 NOP 0 NOP 0 A T 5 = Q 32.5
Representación Esquemática Explicación
L S5T#1S
SP T 17
A T 17
= Q 4.5
Programa Señal delTemporizador 17
0 1
n: Cantidad de ejecuciones del programatp: Tiempo de ejecución del programa
1s - n * tp
La figura muestra la ejecución “n + 1” desde el arranque del temporizador T 17 (S5T#1S es 1s). A pesar de que la temporización transcurrió “justo” tras la instrucción “ = Q 4.5”, la salida 4.5 semantiene activada. Este cambio sólo se considera durante la siguiente ejecución del programa.
Forma de Cargar un Temporizador
Marcas de Ciclo (I)
Las marcas de ciclo cambian su estado binario periódicamenteLa relación impulso-pausa es 1:1La frecuencia está ajustada y es fijaHay definidas 8 frecuencias fijas que pueden almacenarse en un byte de marcasEl byte de marcas se parametriza en la configuración de la CPU
7 6 5 4 3 2 1 00.1 seg. (10 Hz)0.2 seg. (5 Hz) – parpadeo0.4 seg. (2.5 Hz) – intermitencia rápida0.5 seg. (2 Hz)0.8 seg. (1.25 Hz) – intermitencia1.0 seg. (1 Hz)1.6 seg. (0.625 Hz) – intermitencia lenta2.0 seg. (0.5 Hz)
Marcas de Ciclo (II)
Configuración en hardware de la CPU
Ejemplo – Generador de Impulsos
Cronograma Ejemplo
< 2s >
1
0
1
0Tiempo
M 2.0
I 0.0
< 2s > < 2s >
Se desea que la marca 2.0 funcione como un generador de impulsos de periodo 2 segundos
STL FBD LAD A I 0.0 AN M 2.0 L S5T#2S SD T 7 NOP 0 NOP 0 NOP 0 A T 7 = M 2.0
Ejemplo – Generador de Onda Cuadrada Simétrica
Cronograma
< 2s >
1
0
1
0
Tiempo
M 2.0
I 0.0
< 2s >
1
0
< 2s >
Q 4.0
Ejemplo Se desea una onda cuadrada de periodo 4s. Para ello utilizamos el generador de impulsos del ejemplo anterior y un divisor binario. Colocaremos la salida en la Q 4.0.
STL FBD A I 0.0 AN M 2.0 L S5T#2S SD T 7 NOP 0 NOP 0 NOP 0 A T 7 = M 2.0 *** A M 2.0 AN M 1.0 S Q 4.0 A M 2.0 A M 1.0 R Q 4.0 NOP 0 *** AN M 2.0 A Q 4.0 S M 1.0 AN M 2.0 AN Q 4.0 R M 1.0 NOP 0
Ejemplo – Generador de Onda Cuadrada AsimétricaCronograma Ejemplo
1
0
1
0
Tiempo
Q 4.0
Salida T2
1
0
1
0
1
0
1
0
I 0.0
Tiempo de Marcha T1
Salida T1
Tiempo de Marcha T2
Se desea que la salida Q 4.0 funcione como un generador de onda cuadrada asimétrica de 3s con valor “0” y 5s con valor “1”.
STL FBD A( A I 0.0 AN T 2 L S5T#3S SD T 1 NOP 0 NOP 0 NOP 0 A T 1 ) = Q 4.0 A Q 4.0 L S5T#5S SD T 2 NOP 0 NOP 0 NOP 0 NOP 0
Ejemplo – Arranque Estrella/Triángulo I
I 0.0
I 0.1 L
LQ 4.0
Y T ∆Q 4.1 Q 4.2
∆
T
Y
T
∆
STL FBD Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0
Q 4.0
>=1I 0.1
Q 4.0
&
I 0.0
Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0
S5T# 3S
T 1
S_ODTS BI
TV BCD
R Q
&
2
Q 4.0
Q 4.2
Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &
Q 4.0
Q 4.2
T1 Q 4.1
Segmento 4 Triángulo A Q 4.0 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2
&Q 4.1
T1
Q 4.2
>=1Q 4.2
&
Q 4.0
Ejemplo – Arranque Estrella/Triángulo IISTL FBD
Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0
Q 4.0
>=1I 0.1
Q 4.0
&
I 0 .0
Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0
S5T# 3S
T 1
S_ODTS BI
TV BCD
R Q
&
2
Q 4.0
Q 4.2
Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &
Q 4.0
Q 4.2
T1 Q 4.1
Segmento 4 Temporizador de Retardo A Q 4.0 AN Q 4.2 L S5T#100ms SD T 2 A Q 4.2 R T 2 NOP0 NOP0 NOP0
S5T# 100M S
T 2
S_ODTS BI
TV BCD
R Q
&
2
Q 4.0
Q 4.1
Q 4.2
Segmento 5 Triángulo A Q 4.0 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2
&Q 4.1
T2
Q 4.2
>=1Q 4.2
&
Q 4.0
STL FBD Segmento 1 Línea A I 0.0 A( O I 0.1 O Q 4.0 ) = Q 4.0
Q 4.0
>=1I 0.1
Q 4.0
&
I 0.0
Segmento 2 Temporizador A Q 4.0 AN Q 4.2 L S5T#3s SD T 1 NOP0 NOP0 NOP0 NOP0
S5T# 3S
T 1
S_ODTS BI
TV BCD
R Q
&
2
Q 4.0
Q 4.2
Segmento 3 Estrella A Q 4.0 AN Q 4.2 AN T 1 = Q 4.1 &
Q 4.0
Q 4.2
T1 Q 4.1
Segmento 4 Triángulo A Q 4.0 A I 0.3 A( AN Q 4.1 A T 2 O Q 4.2 ) = Q 4.2
&Q 4.1
T1
Q 4.2
>=1Q 4.2
&
I 0.3
Q 4.0
SFB 3 TPGenerador de pulsos
Las funciones de tiempo están integradas en FBs en la CPU. Están disponibles:
Nombre Declaración Tipo dato DescripciónIN INPUT BOOL Entrada de arranquePT INPUT TIME Longitud del pulso o duración de esperaQ INPUT BOOL Estado del temporizadorET INPUT TIME Tiempo pasado
SFB 4 TONOn delay
SFB 5 TOFOff delay
Funciones de Tiempo en IEC
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL • Introducción • Operaciones lógicas a nivel de bit • Marcas • Simbólicos • Flancos • Temporizadores • Diagnosis e información del sistema • Contadores • Carga y Transferencia • Operaciones con acumuladores • Saltos
3. PROGRAMACIÓN ESTRUCTURADA
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10 Curso 2009/10
• Son nombres simbólicos que le podemos dar a entradas, salidas, marcas, temporizadores, contadores y módulos.
• En el programa podemos usar esos nombres en vez de las direcciones absolutas.
• Para cada símbolo debemos rellenar: nombre simbólico, dirección absoluta a la que sustituye, tipo de dato que es (se rellena sólo), y un comentario (opcional)
Simbólicos
PLC’s Página 3 Curso 2009/10 Curso 2009/10
• Hay dos maneras de crear tabla de símbolos: – Desde el administrador Simatic (Programa S7): Fuentes Bloques Símbolos
– Creando “Tabla de Símbolos” desde OB1: “herramientas” --> tabla de símbolo. Esto llama al editor de símbolos.
Se introducen símbolos y se cierra, “Tabla” --> “cerrar” y eso la guarda.
• Además para insertar/editar símbolos en tabla: – Si estamos en el editor de AWL: “insertar” --> “símbolo” --> “Nuevo”.
Se meten las entradas adecuadas y se acepta
• En “Ver” decidimos si se quiere ver: – direcciones absolutas o símbolos.
Simbólicos
PLC’s Página 4 Curso 2009/10 Curso 2009/10
• Permiten averiguar en qué ciclo ha habido – un flanco positivo FP (paso de “0” a “1” del RLO) – o un flanco negativo FN (paso de “1” a “0” del RLO) de una señal.
• Se necesita una marca auxiliar que almacena el estado anterior, para poder compararlos. Puede usarse cualquier marca.
• Ej. Flanco positivo
U E 124.0
FP M1.0
= A 124.1
• El RLO sólo estará a 1 un tiempo de ciclo: en el que cambie.
M 1.0
RLO
E 124.0
Flancos
PLC’s Página 5 Curso 2009/10 Curso 2009/10
• Un temporizador es un contador de tiempos. La CPU 314-IFM tiene 128 temporizadores
• Por cada temporizador se reservan 16 bits y tiene un rango de valores de 10ms a 9990s (2h 46m 30s)
• Un temporizador realiza dos funciones – Contar tiempo – Poner una variable de salida asociada a nivel alto
• Los tipos de temporizadores se diferencian entre sí en: – cuándo comienzan a contar el tiempo y – cuándo activan la salida asociada.
Temporizadores
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Tipos de temporizadores – SI - Temporizador de impulso El tiempo máximo que la señal de salida permanece a 1 corresponde al valor de temporización To programado. La señal de salida permanece a 1 durante un tiempo inferior si la señal de entrada cambia a 0.
– SV - Temporizador de impulso prolongado La señal de salida permanece a 1 durante el tiempo programado, independientemente del tiempo que la señal de entrada esté a 1.
Temporizadores
PLC’s Página 8 Curso 2009/10 Curso 2009/10
– SS - Temporizador con retardo a la conexión con memoria La señal de salida cambia de 0 a 1 solamente si ha finalizado el tiempo programado, independientemente del tiempo en que la señal de entrada esté a 1.
• ¿cuándo termina la temporización?
• Tipos de temporizadores – SE - Temporizador con retardo a la conexión La señal de salida es 1 solamente si ha finalizado el tiempo programado y (AND)
la señal de entrada sigue siendo 1.
– SA - Temporizador con retardo a la desconexión La señal de salida es 1 el tiempo que la señal de entrada es 1 y, a partir de ahí, el
tiempo marcado por el temporizador. El temporizador arranca cuando la señal de entrada cambia de 1 a 0.
Temporizadores
PLC’s Página 10 Curso 2009/10 Curso 2009/10
• Programación de un temporizador (T0, T1, ...)
– Carga el tiempo de inicialización en un acumulador interno con la operación load (L)
• Formato: L S5T#aH_bM_cS_dMS Ejemplo: L S5T#10M_30S
– Generación de un RLO que condicionará la activación del temporizador
– Activación del temporizador • Formato: tipo nº timer
Si hay un flanco en el RLO de entrada respecto del ciclo anterior. El temporizador se inicializa con el tiempo que se había cargado en el acumulador interno.
• SI T0 - SV T0 - SE T0 - SS T0 - SA T0
Temporizadores
PLC’s Página 11 Curso 2009/10 Curso 2009/10
• Inicialización: U E124.0 L S5T#10S L S5T#10S U E124.0 SI T0 SI T0
• Consulta de la salida • Ejemplo:
U T0 = A124.0
• Reseteo de un temporizador • Ejemplo:
U E124.1 R T0
Temporizadores
PLC’s Página 12 Curso 2009/10 Curso 2009/10
• Temporizador de Impulso (SI) – El temporizador
• arranca con el flanco de subida del RLO de entrada de la sentencia SI • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ al arrancar el temporizador • se pone a ‘0’ al terminar la temporización o al ponerse a cero el RLO de entrada
T T T T
T
E X.x RLO
A-T0
Temporizadores
PLC’s Página 13 Curso 2009/10 Curso 2009/10
• Temporizador de Impulso Prolongado (SV) – El temporizador
• arranca con el flanco de subida del RLO de entrada de la sentencia SV • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ al arrancar el temporizador (flanco de subida del RLO de entrada de SV) • se pone a ‘0’ al terminar la temporización
T T T T
E X.x RLO
A-T0
Temporizadores
PLC’s Página 14 Curso 2009/10 Curso 2009/10
• Temporizador de Retardo a la Conexión (SE) – El temporizador
• arranca con el flanco de subida del RLO de entrada de la sentencia SE • se detiene al finalizar el tiempo de temporización o con un cero en el RLO de entrada
– La salida asociada • se pone a ‘1’ al terminar el temporizador • se pone a ‘0’ al cuando el RLO de entrada de SE pasa a cero
T T T T
E X.x RLO
A-T0
T
Temporizadores
PLC’s Página 15 Curso 2009/10 Curso 2009/10
• Temporizador de Retardo a la Desconexión (SA) – El temporizador
• arranca con el flanco de bajada del RLO de entrada de la sentencia SA • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ con el flanco de subida del RLO de entrada de SA • se pone a ‘0’ al terminar la temporización
T T T
E X.x RLO
A-T0
T
Temporizadores
PLC’s Página 16 Curso 2009/10 Curso 2009/10
• Temporizador de Retardo a la Conexión Memorizado (SS) – El temporizador
• arranca con el flanco de subida del RLO de entrada de la sentencia SS • se detiene al finalizar el tiempo de temporización
– La salida asociada • se pone a ‘1’ al terminar la temporización • se pone a ‘0’ sólo mediante una instrucción de reset
T T
E X.x RLO
A-T0
T T
Reset
Temporizadores
PLC’s Página 17 Curso 2009/10 Curso 2009/10
• Otras consideraciones sobre los temporizadores • Hay que ser muy cuidadosos si utilizamos el mismo
temporizador en dos sitios distintos del código, ya que podemos estarlo arrancando o no en los distintos puntos y se producirá un funcionamiento erróneo.
• La variable que arranca el temporizador debe producir un flanco positivo. Para que ese flanco positivo se produzca, el programa debe pasar por ese punto con valor 0 y posteriormente con valor 1, o no verá el flanco. Esto es especialmente crítico en el caso de utilizar temporizadores con elementos que se verán posteriormente como saltos o bloques (FCs/FBs).
Temporizadores
PLC’s Página 18 Curso 2009/10 Curso 2009/10
• Comprobar el funcionamiento de los diferentes tipos de temporizadores
U E 124.0 Condición de arranque del temporizador L S5T#10S SI T0
U E 124.1 Condición de reseteo del temporizador R T0
U T0 Presentación de la señal asociada al temporizador = A124.0
• Probar otros ejemplos con
SV SE SA SS
Temporizadores
PLC’s Página 19 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 2)
Se dispone de un semáforo, el cual en condiciones normales se encuentra del modo siguiente:
- Verde vehículos - Rojo Peatones.
En el mismo instante que un peatón accione sobre el pulsador situado en el semáforo, éste pasará a amarillo para vehículos, estado que durará durante 3 ‘‘. Finalizado este, pasara a estado rojo para vehículos y verde para peatones.
El tiempo de duración fijado para rojo vehículos: 6 ‘‘.
Finalizado el proceso, el semáforo regresará al estado normal.
Durante el tiempo de duración del ciclo, deberá evitarse que cualquier nueva activación sobre el pulsador verde, rearme el ciclo.
Press button
A124.0
A124.1
A124.2
E124.0
A125.0
A125.1
Tipos de temporizadores IEC
Los autómatas S7-1200 han incorporado en su biblioteca de programación los temporizadores basados en software que dicta la norma IEC 1131-3:
TP - Temporizador de impulsos. TON - Temporizador a la conexión. TONR -Temporizador a la conexión con memoria. TOF - Temporizador a al desconexión.
Si eres un programador procedente del entorno de los S7-200, observarás que hay un cambio radical en la forma que se utilizan dichos temporizadores. Si estás habituado a la programación de los temporizadores hardware de los S7-300, también tendrás que adaptarte al nuevo concepto ya que comprobarás que son bastante diferentes,. Sin embargo, si alguna vez has utilizado los temporizadores software (Temporizadores IEC) de la librería Standard Library>Systems Funciton Blocks del STEP 7, no tendrá ninguna dificultad con los temporizadores de los S7-1200, ya que son prácticamente idénticos. El siguiente tutorial se basa en el temporizador TON, pero puede ser utilizado de forma similar con los demás tipos.
Uso de los temporizadores
Los temporizadores del S7-1200, al estar basados en software, no requieren direccionamiento a una zona de memoria determinada del hardware y por tanto, no se identifican con un número (T1, T37, etc) como ocurre, por ejemplo, en los S7-200. Así, cada vez que se inserta un temporizador en la zona de programación, éste pide que se asigne un bloque de datos (DB) a instancia. Dicho DB debe identificarse mediante un nombre simbólico reconocible y que sea fácilmente distinguible de otros que se puedan utilizar en el mismo programa.
En el campo PT del temporizador debe escribirse el tiempo de preselección en formato TIME. Por ejemplo: T#3S (tres segundos) ó T#1M10S (un minuto 10 segundos) ó T#100Ms (cien milisegundos).
Ejemplo 1: Activación directa de una salida una vez transcurrido un tiempo.
Un uso inmediato de los temporizadores, consiste en utilizar la salida Q, de tipo binario, para activar de forma directa, una vez que se ha superado el tiempo de preselección PT, elementos de programación en formato de bit como salidas, marcas o cualquier otra combinación lógica.
Ejemplo 2: Asociación de contactos a un temporizador.
Al no ser temporizadores hardware y no existir un direccionamiento directo a una zona de memoria específica para ellos, ya no es posible asignar, como se hacía en otros PLC's, contactos a los temporizadores mediante su identificador: T1, T2, T3, etc. No obstante, para hacer algo similar se puede recurrir a diferentes técnicas.
Opción 1: Uso de una marca asociada al temporizador.
Cuando la marca es "verdadera", los contactos asociados invierten su valor lógico, activando o desactivando los segmentos en los que se encuentran programados.
Se puede decir que esta es una solución muy "eléctrica" similar a la utilizada en los automatismos cableados con relés.
Opción 2: Uso de la variable Q del DB a instancia asociado al temporizador.
En este caso no es necesario asignar ninguna bobina a la salida Q del temporizador. Sin embargo, los contactos asociados deben leer el valor de dicha salida directamente del DB a instancia. Para ello cada contacto debe tener la siguiente sintaxis: "Nombre del DB".Q (en nuestro ejemplo "Temp_1".Q).
Ejemplo 3: Uso de un solo temporizador para acciones a diferentes valores de tiempo.
Lo visto anteriormente requiere usar un temporizador por cada conmutación temporizada que se desee realizar. Es decir, si se desea activar una salida a los 5 segundos y otra a los 10 segundos, es necesario utilizar dos temporizadores independientes configurados, cada uno de ellos, con sus respectivos tiempos de preselección. Sin embargo, si se lee el valor de la salida ET del temporizador a a través de una variable o a través de DB a instancia, es posible realizar acciones a diferentes valores de tiempo de un mismo temporizador.
Opción 1: Comparar el valor de una variable asignada a la salida ET del temporizador.
La variable debe tener el formato de doble entero (DInt) y debe escribirse en la salida ET del temporizador. El tiempo se almacena en ella en formato de milisegundos. Por tanto, las operaciones de comparación deben hacerse teniendo esto en cuenta. En el siguiente ejemplo se muestra como la salida Q0.6 se activa si el tiempo de temporizador es mayor o igual a 3 segundos (3000ms) y la Q0.7 lo hace si el tiempo es superior o igual a 8 segundos (8000ms).
Opción 2: Comparar el valor de la salida ET del temporizador.
De igual forma que para la salida Q del del DB a instancia, es posible leer la salida ET (que tiene formato DInt) y operar con ella en las comparaciones sin necesidad de crear ninguna variable intermedia.
En las comparaciones se puede utilizar una constate numérica en ms o directamente emplear el dato en formato TIME:
Programación estructuradaProgramación estructurada 11DivDiv. Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y AutomáticaDivDiv. Ingeniería de . Ingeniería de Sistemas y AutomáticaSistemas y Automática
Tema 6 Ejemplo
Ejemplo Programación Estructurada
Programación estructuradaProgramación estructurada 66
Mutiinstancia
Supongamos que su tarea de automatización requiere otros controles de motor, p.ej., para un motor que funciona con aceite de colza, para un motor de hidrógeno, etc.Procediendo de la misma forma que lo hemos hecho hasta ahora, utilizaríamos el FB1 asignándole un nuevo DB por cada control adicional.
MULTIINSTANCIAPara ello se tiene que crear un nuevo FB de orden superior (en nuestro ejemplo, el FB10) y llamar desde el mismo al FB1, que ha permanecido invariable, como "instancia local". En cada llamada, el FB1 subordinado deposita sus datos en el bloque de datos DB10 del FB10 de orden superior, con lo cual no se tienen que asignar más DBs al FB1. Todos los FBsacceden a un único bloque de datos (aquí, el DB10).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 1 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Manual de formación
para soluciones generales en automatización
Totally Integrated Automation (T I A )
MÓDULO B4
Bloques de datos
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 2 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Este documento fue suministrado por SIEMENS Siemens A&D SCE (Tecnología en Automatización y Accionamientos, Siemens A&D, coopera con la Educación) para formación. Siemens no hace ningún tipo de garantía con respecto a su contenido. El préstamo o copia de este documento, incluyendo el uso e informe de su contenido, sólo se permite dentro de los centros de formación. En caso de excepciones se requiere el permiso por escrito de Siemens A&D SCE (Mr. Knust: E-Mail: [email protected]). Cualquier incumplimiento de estas normas estará sujeto al pago de los posibles perjuicios causados. Todos los derechos quedan reservados para la traducción y posibilidad de patente. Agradecemos al Ingeniero Michael Dziallas, a los tutores de las escuelas de formación profesional, así como a todas aquellas personas que nos han prestado su colaboración para la elaboración de este documento.
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 3 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
PÁGINA: 1. Introducción.................................................................................................. 4 2. Notas sobre los Bloques de Datos................................................................. 6 3. Generando Bloques de Datos ....................................................................... 7
Los símbolos siguientes acceden a los módulos especificados: Información Programación Ejercicio Ejemplo Notas
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 4 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
1. INTRODUCCIÓN
El módulo B4 pertenece al contenido de las Funciones Adicionales de Programación STEP 7. Finalidad del Aprendizaje: En este módulo, el lector aprenderá sobre como utilizar los Bloques de Datos para almacenar información. • Generando Bloques de Datos • Specificando la estructura de un Bloque de Datos • Accediendo a un elemento de un DB en un programa STEP 7 Requirements: Requisitos: Para el correcto aprovechamiento de este módulo, se requieren los siguientes conocimientos: • Conocimientos de uso de Windows 95/98/2000/ME/NT4.0 • Programación Básica de PLC con STEP 7 ( Módulo A3 - ‘Puesta en Marcha’ programando PLC
con STEP 7) • Conocimientos Básicos de programación estructurada (Anexo I – Programación Básica de PLC –
Programando con un SIMATIC S7-300)
Sistemas de Bus de Campo Industrial
2- 3 días Módulos D
Visualización de Procesos
2- 3 días Módulos F
Programación Secuencial
2- 3 días Módulos C
Comunicación IT con SIMATIC S7
1- 2 días Módulo E
Programación Básica De STEP 7
2 - 3 días Módulos A
Funciones Adicionales de Programación STEP 7
2- 3 días Módulos B
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 5 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Hardware y software Necesarios 1 PC, Sistema Operativo Windows 95/98/2000/ME/NT4.0 con
- Mínimo: 133MHz y 64MB RAM, aprox. 65 MB de espacio libre en disco duro - Óptimo: 500MHz y 128MB RAM, aprox. 65 MB de espacio libre en disco duro
2 Software STEP 7 V 5.x 3 Interfase MPI para PC (p.e. PC- Adapter) 4 PLC SIMATIC S7-300 con al menos un módulo de entradas/salidas . Ejemplo de configuración:
- Fuente de Alimentación: PS 307 2A - CPU: CPU 314 - Entradas Digitales: DI 16x DC24V - Salidas Digitales: DO 16x DC24V / 0.5 A -
1 PC
2 STEP 7
4 SIMATIC S7-300
3 PC Adapter
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 6 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
2. NOTAS SOBRE LOS BLOQUES DE DATOS
Los Bloques de Datos (DBs) pueden ser utilizados en el programa para salvar información en la CPU. Tienen una capacidad de memoria de hasta 8 KBytes ( 8192 Bytes ). Existen dos tipos de Bloques de Datos. DBs Globales , en los cuales todos los OBs, FBs y FCs pueden guardar o leer datos y DBs de Instancia, los cuales se encuentran asignados a un FB en particular. En los DBs, se pueden almacenar diferentes tipos de datos (p.e. BOOL o WORD ) de manera aleatoria. La estructura de un DB se genera a través de la herramienta Editor KOP/ AWL//FUP: Programar Bloques de STEP7 . En la estructura del programa STEP 7, los bloques de datos se encuentran de la siguiente manera:
Call FB1, DB10 UC FC2
OB = Bloque de Organización FB = Bloque de Función FC = Función DB = Bloque de Datos
DB de Instancia Solo datos locales al FB1
DB Global Para todos los FBs FCs OBs
L DB11.DBW0 BE
OB 1 DB 11 DB 10 FB 1
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 7 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
3. GENERANDO BLOQUES DE DATOS
Los Bloques de Datos son generados y abiertos como cualquier otro tipo de bloque en la herramienta Editor KOP/ AWL//FUP: Programar Bloques. Sirven para almacenar datos e información de estados.
En el párrafo siguiente, se describe a través de un ejemplo la utilización de un bloque de datos global: Por esto, los valores se seleccionarán con los interruptores 'S0' a 'S7' y visualizados en un módulo de ‘Display’ de salidas. La representación numérica del valor a almacenar se representa con estos interruptores, donde el interruptor S7 tendrá el mayor peso del valor y el interruptor S1 el menor peso. El ejemplo se corresponde con las direcciones siguientes: Entradas: - Interruptor S0 = E 0.0 - Interruptor S1 = E 0.1 - Interruptor S2 = E 0.2 - Interruptor S3 = E 0.3 - Interruptor S4 = E 0.4 - Interruptor S5 = E 0.5 - Interruptor S6 = E 0.6 - Interruptor S7 = E 0.7 Salidas: - Display = AW4
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 8 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Para poder generar este ejemplo del programa, deben de los seguirse los siguientes pasos (Por eso el programa se distribuye con la creación de la configuración del hardware):
1. Llamar al Administrador SIMATIC con un doble click ( → Administrador SIMATIC)
Administrador SIMATIC.lnk
2. Crear un proyecto nuevo ( → Archivo → Nuevo)
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 9 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
3. En el campo Nombre, asignamos el nombre del proyecto Proyecto_Prueba_DB.
(→ ’Proyecto_Prueba_DB’ → OK)
4. Insertar un nuevo Programa S7 ( → Insertar → Programa → Programa S7).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 10 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
5. Seleccionar la carpeta Bloques. (→ Bloques)
6. Insertar un Bloque de Datos ( → Insertar → Bloque S7 → Bloque de Datos).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 11 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
7. Introducir el nombre DB10, seleccionar la opción DB Global y aceptar con OK (→ DB10 → DB
Global -> OK).
8. Abrir el bloque de datos DB10 con un doble click(→ DB10).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 12 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Nota: Los bloques de datos asignados a un FB se generan automáticamente en la llamada al
FB. No tiene sentido, por tanto, generarlos antes de generar el FB. Por otro lado, los bloques de datos asociados a un tipo de datos (UDT) son DBs cuya estructura es una copia exacta del UDT.
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 13 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
10. Cada registro del DB tiene un Nombre, Tipo, Valor Inicial y Comentario (opcional).
En el momento en que se pasa al campo siguiente, se le genera una dirección en le DB que no puede ser alterada.
El bloque de datos será salvado y cargado el PLC . El selector de modo del PLC deberá
estar en STOP! (→ Nombre→ Tipo → Valor Inicial → Comentario → → )
Nota: Si el bloque de datos es declarado como de instancia a un FB, al abrir dicho DB ya
aparece la tabla con la estructura del DB y no puede modificarse. Dicha estructura es una copia exacta de la tabla de declaraciones del FB.
Comentario para documentación ( opcional ).
Valor inicial en formato compatible con el tipo de dato seleccionado ( opcional ).
Tipo de dato asignado (ver tabla abajo) al registro.
Nombre simbólico con el que se accede a la dirección absoluta asignada.
La dirección absoluta es asignada por STEP 7, cada vez que se valida un registro con ENTER. El formato de la dirección puede ser BIT, BYTE, WORD, .... Se puede acceder también a este elemento a través de su dirección absoluta (después de haber compilado y cargado el DB).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 14 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Los datos en un bloque de datos deben de llevar asignado un tipo de datos. Los tipos de datos estándar STEP 7 se definen en la tabla mostrada abajo :
Tipo y descripción
Tamaño
en Bits
Formato-Opciones
Rango y notación numérica
(Valores máximo y mínimo)
Ejemplo
BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE
BYTE (Byte) 8 Número Hexadecimal
B#16#0 a B#16#FF B#16#10
WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000
Número Hexadecimal
W#16#0 a W#16#FFFF W#16#1000
BCD C#0 a C#999 C#998
Número Decimal sin signo
B#(0,0) a B#(255,255) B#(10,20)
DWORD (Doble Palabra)
32 Número Binario 2#0 a 2#1111_1111_1111_1111_1111_1111_1111_1111
2#1000_0001_0001_1000_1011_1011_0111_1111
Número Hexadecimal
DW#16#0000_0000 a DW#16#FFFF_FFFF
DW#16#00A2_1234
Número Decimal sin signo
B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)
INT (Entero) 16 Número Decimal con signo
-32768 a 32767 1
DINT (Int,32 bit) 32 Número Decimal con signo
L#-2147483648 a L#2147483647 L#1
REAL (Número en coma flotante)
32 Número en coma flotante IEEE
Máximo: +/-3.402823e+38 Mínimo: +/-1.175495e-38
1.234567e+13
S5TIME (Tiempo Simatic)
16 Tiempo S7 en pasos de 10 ms
S5T#0H_0M_0S_10MS a S5T#2H_46M_30S_0MS and S5T#0H_0M_0S_0MS
S5T#0H_1M_0S_0MS S5TIME#1H_1M_0S_0MS
TIME (Tiempo IEC)
32 Tiempo IEC en pasos desde 1ms, entero con signo
-T#24D_20H_31M_23S_648MS a T#24D_20H_31M_23S_647MS
T#0D_1H_1M_0S_0MS TIME#0D_1H_1M_0S_0MS
DATE (Fecha IEC)
16 Fecha IEC en pasos de 1 día
D#1990-1-1 a D#2168-12-31 DATE#1994-3-15
TIME_OF_DAY (Fecha y Hora)
32 Tiempo en pasos de 1ms
TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3
CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 15 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
11. El contenido de los valores del bloque de datos se puede modificar. No es recomendable hacerlo
a través del campo Valor Inicial. Se debe de hacer a través de la opción de menú Datos ( → Ver → Datos).
12. Es ahora cuando se puede introducir un nuevo valor en el campo Valor Actual y salvarlo en el
disco duro con así como cargarlo en la CPU con ( → Valor Actual → → ).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 16 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 17 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
13. Para poder acceder a los registros del DB en el programa STEP 7, el OB1 debe ser abierto con
un doble click en el icono asociado del Administrador SIMATIC ( → Administrador SIMATIC → OB1).
14. Aceptamos la pantalla con OK (→ OK ).
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 18 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
Existen tres posibilidades de acceso a los datos: 1. Acceso por Direccionamiento Directo: Se puede acceder a un elemento de un DB con las siguientes instrucciones: Ejemplo: L DB 20. DBB2 Cargamos el byte de datos 2 del DB20 en el ACCU 1 L DB 22. DBW4 Cargamos el byte de datos 4 del DB22 en el ACCU 1 A DB 2. DBX5.6 Consultamos el estado del bit de datos 5.6 del DB2. 2. Accesso a un elemento de un DB que ya se encontraba abierto: Para poder acceder a un elemento de datos, primero se debe abrir su correspondiente DB a través de las instrucciones OPN DB o OPN DI. Una vez hecho esto, varios bits de datos (DBX/DIX),bytes de datos (DBB/DIB), palabras de datos (DBW/DIW) o dobles palabras de datos (DBD/DID) pueden ser procesadas en diferentes operaciones binarias o aritméticas. Al utilizar la instrucción OPN DI se abre un DB de Instancia. Esta instrucción puede utilizarse también con DBs globales, cuando 2 DBs permanecen abiertos al mismo tiempo. Ejemplo: OPN DB 20 Abrimos el DB20 OPN DI 22 Abrimos el DB22 L DBW 0 Cargamos la palabra de datos 0 del DB20 en el ACCU 1 T MW 1 Transferimos el contenido del ACCU 1 a la palabra de marcas 1 A DIX 0.0 Operación AND sobre el bit de datos 0.0 del DB22 con A E 1.0 el bit de entradas 1.0 = A 4.0 Asignamos el resultado al bit de salidas digitales 4.0 3. Acceso a datos de un DB de Instancia a través de la llamada de un Bloque de Función: Los datos pueden ser transferidos a un DB de Instancia a través de la llamada a su correspondiente bloque de función con la instrucción CALL FB1, DB19. La asignación de las variables, que deberían de haber sido previamente definidas en la tabla de definiciones del FB, y cuyo contenido se almacena en el DB de instancia, son tomadas de las direcciones asignadas a los parámetros del FB (p.e. EW0, M 10.0 o AW4) con la instrucción CALL. Ejemplo: CALL FB1, DB19 CONTADOR:= EW 0 La Variable CONTADOR corresponde con la dirección EW 0. SALIDA:= A 4.0 La variable SALIDA corresponde con la dirección A 4.0. Nota: El formato de las variables del DB de Instancia y la dirección asignada en el parámetro
del FB deben de ser iguales.
Tecnología en Automatización y Accionamientos -SCE
T I A Manual de Formación Página 19 de 18 Módulo B4
Edición: 02/2002 Bloques de Datos
Indice Notas Generando Bloques de Datos
15. Con el Editor KOP/ AWL//FUP: Programar Bloques, se dispone de una herramienta para
generar el programa STEP 7. La selección del elemento de datos se realiza a través de los diferentes interruptores, como se muestra en la imagen de abajo. Cuando se hayan contemplado todas las posibilidades de selección con los interruptores (S0 a
S7) en el OB1, se deberá guardar en el disco duro y cargado en el PLC . El interruptor de
modo de la CPU deberá estar en STOP! ( → → )
16. Cuando el selector de modo del PLC se ponga en RUN, el programa comienza su ejecución.
Activando sólo uno de los interruptores S0 a S7, el valor almacenado en el correspondiente registro del bloque de datos es visualizado en el módulo de salidas a través de la dirección AW4.
Automatización Industrial
Módulos de Función
TEMA – Módulos de Función
1. – Llamadas a Módulos
2. – Partes de un Módulo
2.1 – Variables Locales
3. – Funciones FC´s
4. – Módulos de Función FB´s
5. – Parámetros de Funciones
5.1 – Parámetros Formales
5.2 – Parámetros Actuales
6. – Módulos de Función y Módulos de Datos
6.1 – Módulos de Datos a Instancia
6.2 – Módulos de Multi-Instancia
Índice
Módulo que llama Módulo llamado(OB, FB, FC, SFB, SFC) (FB, FC, SFB, SFC)
Ejecución del Programa
Ejecución del ProgramaInstrucción que llama
a otro módulo(FB, FC, SFB, SFC)
Ejecución del Programa
Ejecución del Programa
Instrucción que llama a otro módulo
(FB, FC, SFB, SFC)
Llamada a Módulos
• Para que un módulo de código sea procesado debe ser llamado• Una llamada a módulo consta de la sentencia de llamada (CALL FC 10) y la lista de
parámetros (si el módulo llamado tiene parámetros)• Después de la llamada, el módulo es procesado hasta encontrar una sentencia de fin de
módulo• En el caso de los OB se retorna al sistema operativo• La información requerida por la CPU para el retorno es almacenada en la pila del módulo
(pila B)• Los parámetros del módulo son el interfaz de datos al módulo llamado• Con CALL se pueden llamar FBs, FCs, SFBs y SFCs• La sentencia CALL es una llamada incondicional• Si el módulo llamado tiene parámetros tiene que utilizarse esta sentencia
Llamada General “CALL”
Llamadas a Módulos (I)
Llamada a Funciones
• Se puede llamar a una función con CALL por su dirección absoluta o por su dirección simbólica
• Se deben inicializar todos los parámetros de la función• Normalmente, las funciones tienen el parámetro RET_VAL en el que
devuelven códigos de error
Llamada a Módulos de Función
• En la llamada a un FB hay que especificar el DB de instancia asociado separados ambos por una coma
• Se puede utilizar para ambos módulos direcciones absolutas o simbólicas• En FBs no es necesario inicilizar todos los parámetros del módulo• Los parámetros no inicializados mantienen su valor inicial
Llamada a Funciones y Módulos de Función del Sistema
• Todas las funciones y módulos de función del sistema deben llamarsecon la instrucción CALL
Llamadas a Módulos (II)
Llamada con “UC” y “CC”:
• Permiten llamar a funciones y módulos de función• La función llamada no debe tener parámetros ni DB de instancia• El editor no chequea estas condiciones• UC y CC no distinguen entre FCs y FBs. Los tratan igual• UC es una llamada incondiconal• CC es una llamada condicional al valor del RLO• Otras posibilidades:
• Direccionamiento indirecto de llamadas a FB o FC con UC y CC• Llamada vía parámetros de bloque con UC• Llamada vía parámetros de bloque con CC también en FB
Fin de Módulo:
• BEC. Fin de módulo condicionado al RLO• BEU. Fin de módulo incondicional• BE. Fin de módulo. Última sentencia del módulo
Llamadas a Módulos (III)
Caja de instrucciones STL(FC, FB, Move, Add, etc)
EN ENO
Si está activo (1), se ejecuta la instrucciónde la caja.
Si no está activo (0), no seejecuta la instrucción.
Si está activo (1), indica que la instrucción se ejecutó sin error.
Si no está activo (0), no se llamóa la instrucción o no se produjo lala ejecución de la instrucción
EN = Entrada Enable ENO = Salida Enable
Uso del Parámetro EN/ENO
Tabla deDeclaraciónde Variables
Sección deCódigo
Partes de un Módulo
• Los Datos Locales utilizados normalmente en un módulo son :
– Variables Temporales
– Parámetros
– Variables Permanentes o estáticas
Datos Locales
Dirección
Tipo de Declaración Tipo de Datos
Símbolo Valor Inicial
Comentario
• Las variables locales son las declaradas como “temp” • Se definen en la cabecera del módulo • Se pueden definir en cualquier módulo de código• Se usan para almacenar datos locales de la ejecución del programa• Temporalmente se almacenan en la pila de datos locales. La pila la controla el S.O.
Variables Locales Temporales (I)
• Se utilizan para almacenar resultados intermedios en la ejecución de un módulo• Solamente están disponibles durante la ejecución del módulo• Se puede utilizar direccionamiento absoluto o simbólico • En los OB hay que declarar 20 bytes de información de comienzo de cada uno de ellos• Normalmente se accede por direccionamiento simbólico • El identificador de datos locales es la L
• un bit se direcciona con L• un byte se direcciona con LB• una palabra con LW• una doble palabra LD
Dirección Declaración Nombre Tipo Valor inicial Comentario0.0 temp temporal1 INT 0 Variable temporal2.0 temp temporal2 REAL 0 Variable temporal
Variables Locales Temporales (II)
Dirección
Tipo de Declaración Tipo de Datos
Símbolo Valor Inicial
Comentario
Variables Locales Estáticas (I)
• Datos locales estáticos son direcciones que un módulo de función FB almacena en el módulo de datos de instancia DI.
• Las variables estáticas son las declaradas como “stat”• Son declaradas en la cabecera del módulo• Están en la memoria del módulo de función. • Mantiene la información hasta que es modificada por programa• El número está limitado por el tipo de dato de las variables y por el
tamaño del DB• Se puede utilizar direccionamiento absoluto aunque debe ser la excepción• En el FB, el DB de instancia se abre con OPN DI xxx
• se puede direccionar un bit con DIX y.x• un byte con DIB y• una palabra con DIW y• una doble palabra con DID y
Variables Locales Estáticas (II)
• Se puede utilizar direccionamiento simbólico utilizando sus nombres• Se pueden utilizar las mismas sentencias que las utilizadas con DBs globales
Dirección Declaración Nombre Tipo Valor inicial Comentario0.0 temp temporal1 INT 0 Variable temporal2.0 stat Total INT 0 Variable estática
Ejemplo:
Dirección Declaración Nombre Tipo0.0 temp In INT2.0 stat Total INT
Dirección Declaración Nombre Tipo0.0 temp In INT2.0 stat Total INT
FB “Totalizador” DB “TotalizadorDato”
L #InL #Total+IT #Total
Variables Locales Estáticas (III)
Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro módulo. Cuando se la llama, la función actúa como una subrutina del programa.Cuando termina de ejecutar su código, el control se devuelve al módulo y al segmento desde el cual fue llamada.
Instrucción que llama a otro módulo
Programa Principal Módulo Subrutina
Ejecucióndel programa
Ejecución delPrograma
OB1 FC
Funciones FC´s
Un Módulo de Función (FB) tiene un módulo adicional de memoria asociado a él. Un Módulo de Datos (DB) mantiene una copia de los parámetros que van a pasar al área de datos locales. Después de la ejecución del FB, se borra el área de memoria local, pero el DB asociado retiene sus valores.
Llamada a unmódulo con los parámetrosactualesEjemplo:
Call FB1,DB10
Área de Declaración Local
Sección de Códigodel módulo llamadousando los valoresdel área dememoria local.
DB10 FB1
Copia la parte de declaración local del FB
Módulos de Función FB´s
• Los parámetros de un módulo representan el interfaz entre el modulo que llama yel módulo llamado
• Soportan parámetros las funciones y los módulos de función• Los parámetros pueden declararse de IN, OUT ó IN_OUT
Declaración de los Parámetros:
Parámetros de Funciones
Progr. en módulo que llama
// Primera llamada
CALL “Adder”Numb_1 := MW 30Numb_2 := MW 32Numb_3 := MW 34Result := MW 40
// Segunda llamada
CALL “Adder” Numb_1 :=DB 10.DBW 30Numb_2 :=DB10.DBW 32Numb_3 :=DB10.DBW 34Result :=DB10.DBW 40
Progr. en módulo llamado
#L Numb_1
#L Numb_2
I+
#L Numb_3
+I
#T Result
Programa ejecutado
// Primera llamadaL MW 30L MW 32+IL MW 34+IT MW 40
// Segunda llamadaL DB 10.DBW 30L DB10.DBW 32+IL DB10.DBW 34+IT DB10.DBW 40
Parámetrosformales
Parámetrosactuales
Parámetrosdel módulo
Procesamiento de los Parámetros
Dirección
Tipo de Declaración Tipo de Datos
Símbolo Valor Inicial
Comentario
• Los nombres de los parámetros de hasta 24 caracteres• El nombre de un parámetro no puede ser una palabra clave• Los parámetros IN/OUT pueden ser tipos de datos elementales, complejos o definidos
por el usurio• El valor inicial y el comentario son opcionales
Declaración de Parámetros
• Los tipos de parámetros los clasifica en: datos simples, datos compuestos y parámetros
Parámetros Formales
Parámetros Formales: Tipos de Datos (I)
Tipo BOOL
Parámetros de módulo de tipo de dato digital:
• Ocupan 8, 16 o 32 bits• Se leen con la instrucción L (load). p. e. L xxxx• Se escriben con la instrucción T (transfer). p.e. T xxxx
• Direcciones que pueden asignar tipos de datos elementales• Direcciones que pueden asignar un tipo de parámetro
Parámetros de módulo de tipo TIMER:• Funciones binarias • Tipos de temporizadores:
• SP, SE, SD, SS, SF, R xxxx (parámetro de entrada tipo timer)
Parámetros de módulo de tipo COUNTER:• Funciones binarias • Tipos de contadores:
• S, CU, CD, R xxxx (parámetro de entrada tipo counter)
Parámetros Formales: Tipos de Datos (II)
Parámetros de módulo de tipo de dato BLOCK_xx:
• OPN - Abrir módulo de datos (parámetro tipo BLOCK_DB)• UC - Llamada a función (parámetro tipo BLOCK_FC)• UC - Llamada a FB (parámetro tipo BLOCK_FB)• CC - Llamada condicional a FC (parámetro tipo BLOCK_FC)• CC - Llamada condicional a FB (parámetro tipo BLOCK_FB)
- xxxx vía parámetro de entrada
• Cuando se abre un DB con parámetro, la CPU lo usa como DB global• Las funciones y módulos de función pasados con parámetros de módulo
no deben contener parámetros de módulo• Una llamada condicional a módulo vía un parámetro de módulo es sólo
posible si el parámetro de bloque es de un módulo de función
#Data es un parámetro tipo BLOCK_DBCALL FB 10.#Data
El usuario debe asegurar que #Data es elDB de instancia del FB 10
Parámetros Formales: Tipos de Datos (III)
• Cuando se llama a un módulo se inicializan los parámetros con los parámetros actuales con los que el módulo se ejecuta
• Pueden ser constantes, direcciones absolutas, direcciones simbólicas, ..• El parámetro actual debe ser del mismo tipo que el parámetro del bloque• Cuando se llama a funciones se deben inicializar todos los parámetros• En los FBs es opcional inicializar todos o sólo alguno de los parámetros
Parámetros Actuales
• Son permitidos como parámetros actuales de tipos de datos básicos:
Parámetros Actuales: Tipos de Datos Básicos
Llamada a módulo (FC, FB)
Tabla de Declaración
Valor_1
Valor_2
Valor_Total
Input
Output
In/Out
Call FC10Medida_1:=Valor_1Medida_2:=Valor_2Medida_Total:= Valor_Total
Paso de Parámetros de un módulo lógico a otro
Módulo llamado (FC, FB)
Tabla de Declaración
Medida_1
Medida_2
Medida_Total
Input
Output
In/Out
Acceso y Restricciones de los Parámetros de Paso
• Combinaciones posibles en el paso de parámetros de módulos:
E = Tipos de datos elementalesC = Tipos de datos complejosP = Parámetros tipo TIMER, COUNTER y BLOCK_xx
Paso de Parámetros entre módulos
FC1 (Cálculo)OB1
FC1
Entrada1
Entrada2
Entrada3
Salida_A
FC1
Entrada1
Entrada2Entrada3
Salida_A
MW5
3369
MW10
AW12
AW20MW2
6869
MW16
SUB_I
IN1IN2
O
ADD_I
IN1IN2
O #TEMP1#Entrada1#Entrada2
#TEMP1#Entrada3
#Salida_A
0.0
2.0
4.06.0
8.0
Entrada1
Entrada2
Entrada3
Salida_A
TEMP1
in
in
in
out
temp
int
int
int
int
int
muestra 1
constante
distanciaresultado
intermedia
#Entrada1 , si es variable local”Entrada1" , si es variable global (simbólico)
Parámetros y Variables Locales (I)
EN ENOFB7DB45
Llama al FB7 (utilizandoun Módulo de Datosa instancia DB45) y le pasa los parámetros
CALL FB7, DB45Comenzar:=I 1.0Parar:=I 1.1Longitud:=MW 20Correr:=M2.1Parámetros “Formales”
del FB
Direcciones “Actuales” donderesiden los datos o se almacenarán
I 1.0I 1.1
MW20
ComenzarPararLongitud
Correr M2.1
STL
FBDLlama al FB7 (utilizandoun Módulo de Datosa instancia DB45) y le pasa los parámetros
Parámetros “Formales”del FB
Direcciones “Actuales”donde residen los datoso se almacenarán
Parámetros y Variables Locales (II)
• Para almacenar datos se pueden utilizar:• zona de marcas• módulos de datos
• Los módulos de datos presentan mayores prestaciones • Los módulos de datos pueden ser:
• globales. Pueden acceder cualquier módulo• de instancia. Sólo se puede acceder desde el FB asociado
• Los DBs deben de crearse con el editor o en runtime SFC 22 CREAT DB• Deben de ser cargados en la memoria de trabajo para que se pueda leer y
escribir en ellos• la CPU utiliza dos registros:
• registro DB: para módulos de datos globales• registro DI: para módulos de datos de instancia • se puede tener abierto simultáneamente un módulo de datos de cada tipo
Módulos de Función y Módulos de Datos
• Un Módulo de Datos a Instancia es un duplicado de la Tabla de Declaración del Módulo de Función asociado a él. Los datos de DB a Instanciapermanecerán después de cerrar el FB.
=
Módulos de Datos a Instancia
• El STEP7 Versión 2.X le permite crear y utilizar un FB sin usar un DB asociado a él. Utilizado de esta forma, el FB trabaja igual que un FC.
=
FB sin DB a Instancia FC
Tabla de Declaraciónusando la memoria local
Sección de Código
Tabla de Declaraciónusando la memoria local
Sección de Código
Uso de un FB sin DB a Instancia
• Se hace en dos pasos:• asignar nombre simbólico al DB en la tabla de símbolos. p.e. “MOTOR1” al DB 51• asignar dirección de los datos en el módulos de datos. p.e. “PAR” a la DBW 20
• Con direccionamineto simbólico queda: L “MOTOR1”.PAR • Con direccionamiento absoluto queda: L DB 51.DBW 20
Dirección de datos Localizado en DB abierto vía el Registro DB Registro DI
Bit DBX y.x DIX y.xByte DBB y DIB yPalabra DBW y DIW yDoble palabra DBD y DID y
Direcciones de Datos
Direccionamiento Completo
• En este caso hay que conocer las direcciones absolutas que el editor asigna a las variables. Poco recomendable.
Direccionamiento Absoluto de Direcciones de Datos
Módulos de Función y Módulos de Datos (II)
Operaciones con Módulos de Datos
Módulos de Datos (I)
Abrir Módulos de Datos
• OPN DB x• OPN DB nombre• OPN DI x• OPN DI nombre
Direccionamiento PartidoOPN DB 25L DBW 10
Direccionamiento CompletoL DB25.DBW 10
Cambio los Registros de los Módulos de DatosCDB
Longitud y Número de DB´s
L DBLG // longitud de un DBL DBNO // número de un DBL DILG // longitud de un DIL DINO // número de un DI
Funciones del Sistema para DB´s
SFC 22 CREAT_DB. //Crea un módulo de datosSFC 23 DEL_DB // Borra un módulo de datosSFC 24 TEST_DB // Test de un módulo de datos
Módulos de Datos (II)
• Los módulos Multi-Instancia le permiten usar un Módulo de Datos para mantener unos valores separados mientras llama a un FB con un DB asociado. Un FB ejecuta la sección de código actual mientras otro maneja el Módulo de Datos a Instancia.
FB que ejecuta las instrucciones
lógicas
FB que manejala sección del módulode datos a instanciaque mantendrá losúltimos parámetros
Módulo de DatosMulti-instancia
asociado a un FBUsar este área primero
Usar este área después
Usar este área después
Segmentos dentrodel DB que contendránlos datos separados delos parámetros pasados
Módulos de Datos Multi-Instancia (I)
Para utilizar DB´s multiinstancia: – Incorporar los FBs a llamar en forma de variables estáticas en la declaración de
variables del FB invocante– El FB invocante llama otros bloques de función sin DBs de instancia propios (es
decir, adicionales), – Esto permite concentrar los datos de instancia en un solo bloque de datos de
instancia, pudiéndose así aprovechar mejor el número disponible de DBs.
Módulos de Datos Multi-Instancia (II)
Variables usadas:setpoint_value: realsum: realactual_value: real
Módulo de control FB 101 FB 100 con múltiples llamadas al FB101
DB Multi instancia
Módulos de Datos Multi-instancia (III)
PLC’s Página 1 Curso 2009/10
1. STEP 7
2. PROGRAMACIÓN BÁSICA AWL
3. PROGRAMACIÓN ESTRUCTURADA • Introducción • Bloques de organización (OB) • Funciones (FC) • Bloques de Función (FB) • Boques de datos (DB)
Tema 2: Programación de PLCs
PLC’s Página 2 Curso 2009/10
Facilita modularidad del programa, y clarifica su organización y análisis
Permite generar funciones reutilizables y no repetir código
Simplifica el test y la puesta en servicio
Introducción
Sistema operativo
OB1
FC
FB
SFC
SFB
Otros OBs
FC
FB
PLC’s Página 3 Curso 2009/10 Curso 2009/10
Modularización de tareas: – Las tareas parciales se solucionan
con sus propios módulos – La asignación de parámetros
flexibiliza la programación • Ejemplo: Ciclo de taladro con
profundidad asignable por parámetro
Reutilización de los Módulos: – Los Módulos pueden llamarse
tantas veces como se necesite – Restricciones:
• no se tiene acceso a direcciones globales
OB 1
Motor 1
FB1
Válvulas
FB2
Controlador
FB10
FC 5 Valor límite Copia
SFC
. . .
.
.
CALL FB1, DB2 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A12.0 Velocidad :=AW14
.
.
FB 1 Direc. Decl. Nombre Tipo 0.0 in Marcha BOOL 0.1 in Paro BOOL 2.0 out Motor_on BOOL 4.0 out Velocidad INT 6.0 stat Veloc_ant INT 0.0 temp Calc_1 INT
.
.
. U #Marcha UN #Paro = #Motor_on .
DB 2 OB 1
Introducción
PLC’s Página 4 Curso 2009/10 Curso 2009/10
Propiedades
Móduo de Organización (OB)
- interfase para el usuario - prioridades graduadas (0 a 27) - información de inicio específica en la pila de datos locales
Tipo de Módulo
Módulo de Función (FB) - parametrizable (los parámetros pueden asignarse en una llamada) - con (rellamada) memoria (variables estáticas)
Función (FC) - parametrizable (los parámetros deben asignarse en la llamada) - básicamente sin memoria (sólo variables temporales)
Bloque de Datos (DB) - almacenamiento estructurado de datos locales (DB de instancia) - almacenamiento estructurado de datos globales (válido en todo el programa)
Módulos de Función del Sistema (SFB)
- FB (con memoria) guardado en el sistema operativo de la CPU y llamable por el usuario
Función del Sistema (SFC)
- función (con memoria) guardada en el sistema operativo de la CPU y llamable por el usuario
Bloques de Datos del Sistema (SDB) - bloque de datos para datos de configuración y parámetros
Introducción
PLC’s Página 5 Curso 2009/10 Curso 2009/10
Variables temporales • se borran después de la ejecución del bloque asociado
• almacenamiento temporal en la L stack
• utilizables en OBs / FCs / FBs
Varibales estáticas • se mantienen incluso después de que sea ejecutado el bloque
• almacenamiento permanente en DBs.
• solo se pueden usar en FBs
Variables/Datos Locales (sólo válidos en un bloque)
Variables/Datos Globales (válidos en todo el programa)
• PAE / PAA
• E / A • M / T / Z
• Áreas de DB
simbólico absoluto
Acceso
Introducción
PLC’s Página 6 Curso 2009/10 Curso 2009/10
• Parámetros de Entrada (IN) solo en FBs, FCs, SFBs y SFCs Con ayuda de los parámetros de entrada se pueden asignar datos necesarios para el
procesamiento del bloque.
• Parámetros de Salida (OUT) solo en FBs, FCs, SFBs y SFCs En los parámetros de salida, los resultados del procesamiento del bloque son depositados
aquí.
• Parámetros de Entrada/Salida (IN_OUT) solo en FBs, FCs, SFBs y SFCs En los parámetros de Entrada/Salida, los contenidos de estos parámetros y el resultado del
procesamiento del bloque depositado en ellos mismos.
• Datos Estáticos (STAT) sólo en FBs y SFBs Los datos estáticos son los datos locales a un bloque de función, los cuales son
almacenados en un bloque de datos de instancia y por tanto preservados hasta el siguiente procesamiento del bloque.
• Datos Temporales (TEMP) en todos los bloques Los datos estáticos son los datos locales a un bloque que almacenan valores durante el
proceso de dicho bloque en una pila de datos locales (L-Stack) y, una vez ha terminado de procesarse el bloque, el contenido de estas variables se pierde.
Introducción
PLC’s Página 7 Curso 2009/10 Curso 2009/10
"Motor" EN ENO
Marcha
Dir. Decl. Nombre Tipo Valor inicial ... 0.0 in Marcha BOOL FALSE 0.1 in Paro BOOL TRUE 2.0 in Velocidad INT 0 2.0 out Motor_on BOOL FALSE 8.0 out Consigna INT 0 10.0 inout EMER_OFF BOOL FALSE ... stat ... ... ... ... temp .. ... ...
Consigna
EMER_OFF
Motor_on Paro Parámetros
de entrada
Parámetros In/Out
Parám. de Salida
Los parámetros son canales para transferir información:
– Parámetros de Entrada (In): – Parámetros de Salida (Out): – Parámetros E/S (In/Out):
Los parámetros de un módulo: – Están en la sección de código
como variables "locales" – Pueden tener cualquier tipo de
dato
Velocidad
Introducción
PLC’s Página 8 Curso 2009/10 Curso 2009/10
• Son los encargados de poner programa de usuario a disposición de la CPU, es decir, nuestro programa debe estar incluido en un OB para poder ser ejecutado por el Autómata
• Los OBs son llamados cíclicamente por el sistema operativo. Nunca por otro módulo lógico . Un OB puede ser interrumpido por otro OB de mayor prioridad.
• Están jerarquizados en prioridades y se dividen en dos tipos: – Dedicados a tareas periódicas:
OB1: Programa principal (mínima prioridad) OB10: Interrupción horaria OB35: Interrupción cíclica, etc.
– Dedicados a tratamiento de errores: OB40: Error hardware OB121 y 122: Error síncrono, etc.
Bloques de organización
PLC’s Página 9 Curso 2009/10 Curso 2009/10
OB 10...17 (Alarmas horarias)
OB 80...87 (Errores Asíncronos)
OB 20...23 (Alarmas de retardo)
Ejecución Periódica De un programa
OB 30...38 (Alarmas Cíclicas)
Ejecución del programa Sujeta a eventos
OB 40...47 (Alarmas de Proceso)
Arranque
OB 102
OB 100
OB 101
Ejecución Cíclica del Programa
OB 1
OB 121, 122 (Errores Síncronos)
OBs de Alarma Error OBs
Bloques de organización
PLC’s Página 10 Curso 2009/10 Curso 2009/10
Ej. OB82 (Prio.26) = Manejo de Error. Ejecutado en el caso de rotura de un hilo en la entrada analógica PEW 352
Ej. OB10 (Prio.2) = Alarma Horaria. Ejecutada una vez Por minuto desde las 9:30 El
OB1 Se ejecuta contínua- mente .....
Prioridad OB 1
3 Alarma Horaria
Alarma Cíclica
1
16 Manejo de Error
Programa Cíclico
Alarma de retardo
Alarma de proceso
2
12
26 / 28
OB 20
OB 40
OB 10
OB 35
OB 82
Nº OB Tipo de OB
Ej. OB20 (Prio.3) = Alarma de retardo. La ejecución comienza 3.25s después de la detección de un objeto.
...... Hasta que es interrumpido por otro OB
Bloques de organización
PLC’s Página 11 Curso 2009/10 Curso 2009/10
Lectura de la PAE
Ejecución del OB1
Escritura de la PAA
Rearranque Completo
automatico manual
S7-300 / 400
Alimentación
S7-300
STOP->RUN
S7-400 STOP->RUN
+ CRST
Borrado de la imagen de proceso, M, T, Z no remanentes
Ejecución del OB 100
Habilitación de Salidas
C I C L O
Bloques de organización: OB de Arranque
PLC’s Página 12 Curso 2009/10 Curso 2009/10
• Las Funciones son módulos de código que se ejecutan al ser llamadas desde otro módulo.
• Cuando se la llama, la función actúa como una subrutina del programa. Cuando termina de ejecutar su código, el control se devuelve al módulo y al segmento desde el cual fue llamada.
Programa Principal Módulo Subrutina
Ejecución del programa
Ejecución del Programa Instrucción que llama
a otro módulo
OB1 FC
fin de bloque
Las Funciones son bloques lógicos sin memoria Las variables temporales de las FCs se memorizan en la tabla de datos locales
Funciones
PLC’s Página 13 Curso 2009/10 Curso 2009/10
Módulos parametrizables: – tantos parámetros de entrada,
salida, y entrada/salida como se necesiten.
– sin memoria, p.e. sólo variables temporales
– sin acceso a variables globales y direcciones absolutas
– con los mismos parámetros de entrada devuelven el mismo resultado
– Amplían el juego de instrucciones del procesador
Ejecución del programa
CALL FC 10 On_1 := E 0.1 On_2 := E 0.2 Off := A8.0
Function FC10
in On_1 BOOL in On_2 BOOL out Off BOOL ...
... U #On_1 U #On_2 = #Off ...
Funciones
PLC’s Página 14 Curso 2009/10
• Contienen instrucciones a modo de subrutinas
• Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo modo que se insertan VATs)
• Llamada (equivalen a CALL pero no es posible transferir parámetros): UC llamada incondicional Ej.: UC FC12 CC llamada condicionada a RLO=1 Ej.: U E125.0 CC FC1
• El fin de una función se realiza con la instrucción – BEA (incondicional) o – BEB (condicional a RLO=0)
Funciones: sin parámetros
PLC’s Página 15 Curso 2009/10
• Contienen instrucciones a modo de subrutinas
• Se insertan como nuevo bloque desde el administrador SIMATIC (del mismo modo que se insertan DBs o FCs sin parámetros)
• Al darles contenido (introducir código) se debe rellenar también su Tabla de Declaración, donde se incluyen los parámetros formales de la función (con los que se diseña la función) declarados como IN, OUT o IN/OUT.
• Los parámetros actuales serán los que se transfieran desde el bloque actual a la función, siendo estos valores asignados a los parámetros formales de la FC para que trabaje con ellos
• El fin de una función con parámetros se realizará igualmente con instrucciones BEA y BEB
Funciones: con parámetros
PLC’s Página 16 Curso 2009/10
• Ejemplos:
– Llamada a una función sin parámetros: CALL FC 12
– Llamada a una función con parámetros: CALL FC 25 Velocidad := MW10 Inicio := E124.0 Alarma := A125.0 Parámetros formales: Velocidad, Inicio y Alarma
Parámetros actuales: MW10, E124.0 y A125.0
– Dentro de FC 25 (en su Tabla de Declaración) se habrán definido las características de Velocidad, Inicio y Alarma
– CALL llama a un bloque lógico independientemente del RLO
Funciones: con parámetros
PLC’s Página 17 Curso 2009/10 Curso 2009/10
Instrucción CALL – El tiempo de procesamiento para CALL depende del número y la posición de
memoria de los parámetros actuales – La instrucción CALL asegura que los parámetros de módulo son provistos
correctamente con datos actuales – Ejemplo:
• CALL FC10 On_1 := E 0.1 On_2 := E 0.2 Off := A 8.0
Instrucción de llamada UC y CC – Llamada a módulo independiente del RLO (UC) o dependiente del RLO (CC)
• Ejemplos: UC FC20 ó CC FC20 – Sólo se pueden usar cuando la FC no tiene parámetros
Funciones
PLC’s Página 18 Curso 2009/10
• Es un bloque con memoria. Tiene asociado un bloque de datos DB de instancia, de tal forma que en cada nueva llamada se puede conservar el valor de las variables internas de la función. Esto no era posible en FCs
Llamada a un módulo con los parámetros actuales Ejemplo:
Call FB1,DB10
Área de Declaración Local
Sección de código del módulo llamado usando los valores del área de memoria local.
DB10
FB1
Copia la parte de declaración local del FB
Bloques de función
PLC’s Página 19 Curso 2009/10 Curso 2009/10
FB 5
in Marcha BOOL in Paro BOOL out Motor_on BOOL out Velocidad INT stat ... Temp...
... U #Marcha UN #Paro = #Motor_on ...
• Módulos parametrizables: – tantos parámetros de entrada,
salida y entrada/salida como se necesiten
– con memoria, es decir, con variables estáticas (también puede haber temporales)
– Llamada con área de datos propia (instancia)
• Aplicación: – Funciones de temporización y
contadores – Unidades de control de procesos
con estados internos • calderas • motores, válvulas, etc.
CALL FB5, DB16 Marcha :=E 0.0 Paro :=E 0.1 Motor_on :=A8.0 Velocidad :=AW12
0.0 Marcha BOOL 0.1 Paro BOOL 2.0 Motor_on BOOL 4.0 Velocidad INT
DB 16
Motor
Es necesario
Bloques de función
PLC’s Página 20 Curso 2009/10
• Tipos de variables añadidos (no en FCs): STAT: estático; conserva el valor de la variable de un ciclo para el siguiente, ya que almacena su valor en el módulo de datos DB asociado a la función.
• Llamada a módulo de función: CALL FBnx, DBny CALL FB1, DB3
• Desde el administrador SIMATIC se habrán creado (dentro del Proyecto y en la carpeta Bloques) FB 1 y DB 3:
– Primero se crea FB1: tabla de declaración de variables, código de función, etc. – Después se crea DB3 (asociado a FB1) y toma la tabla de declaración de FB1 – Asignación del valor actual al parámetro/variable formal:
• desde el DB3: Ver > datos > valor actual • Desde el OB100: Load + Transfer
Bloques de función
PLC’s Página 21 Curso 2009/10
• Mediante la llamada con varias instancias de un FB se pueden controlar varios equipos con el mismo FB
Bloques de función
PLC’s Página 22 Curso 2009/10
• Zonas de memoria para almacenamiento de datos organizados del programa
• No pierden la información cuando el programa los ha acabado de utilizar
• Existen DB´s de dos tipos: – Globales: disponibles para cualquier módulo lógico del programa. – De instancia: asignado a un módulo de función, por lo que sólo es accesible por éste.
Bloques de datos
PLC’s Página 23 Curso 2009/10
• Son remanentes: no pierden la información aunque se corte la alimentación (en coherencia con el programa cargado en la CPU)
• Tras la creación de un DB, éste debe ser definido (rellenado) con las variables que se desee. – Tipo de variables:
• Simple (bool, byte, entero, palabra, doble palabra). • Compuesto (STRING, DATE_AND_TIME, ARRAY). • Estructuras.
• Apertura: AUF DB8
• Acceso: L DB8 U DB8.DBX3.0 lleva implícito AUF DB8 T DB7.DBW3 lleva implícito AUF DB7 U DB6.DBD4 lleva implícito AUF DB6
• Los DB permiten la asignación de simbólicos.
Bloques de datos globales
PLC’s Página 24 Curso 2009/10 Curso 2009/10
DB 99 "Valores" Acceso Tradicional
Acceso Total
o L DB99.DBB1 o L “Valores".Estados
o U DB99.DBX0.0 o U “Valores".Estado
o L DB99.DBW2 o L “Valores".Numero
o L DB99.DBD4 o L "Valores".Peso[1]
absoluto simbólico
AUF DB 99 L DBB 1
1.0 Estados BYTE AUF "Valores" U DBX 0.0
0.0 Estado BOOL
AUF "Valores" L DBW 2
2.0 Numero INT
4.0 Peso[1] REAL
AUF DB 99 L DBD 8 8.0 Peso[2] REAL
Dir. Nombre Tipo
Bloques de datos globales
PLC’s Página 25 Curso 2009/10
AUF DB 19 L DBB 1 Cargar el byte de datos 1. L DBW 2 Cargar la palabra de datos 2 (byte 2/3). L 5 Cargar el número 5. T DBW 4 Transferir a la palabra 4. L 'A' Cargar el carácter ASCII A. L DBB28 Cargar el byte de datos 28. ==I Comparar.
U DBX 3.1 Consultar el bit 1 del byte 3.
L DB19.DBW4 Cargar la palabra de datos 4 del DB19 (incluye AUF DB 19).
Abrir módulo de datos Carga y transferencia en módulos de datos
Bloques de datos globales
PLC’s Página 26 Curso 2009/10
• Asociado a un bloque de función FB. Antes de crear un DB instancia debe existir el FB
• Cuando se inserta en el proyecto desde el Administrador SIMATIC, se debe asociar a un bloque de función FB ya existente.
• Aparecen en la tabla de variables los parámetros correspondientes al FB asociado automáticamente.
• Pueden asociarse varios DBs a un único FB. •
CALL FB22,DB201
CALL FB22,DB202
CALL FB22,DB203
Bloques de datos de instancia
PLC’s Página 27 Curso 2009/10 Curso 2009/10
• CALL FC1 • UC FC1 • CC FC1
AWL
KOP FC1
EN ENO
( CALL )
FB
sin param., sin DB inst.
• UC FB1 • CC FB1
FB1 EN
ENO
FB1 EN ENO
Con parámetros
• CALL FC2 Par1: ... Par2: ... Par3: ...
FC2 EN ENO
Par3
Par1
Par2
FC2 EN
ENO
Par1
Par2
Par3
Con param., con DB inst.
• CALL FB2, DB3 Par1: ... Par2: ... Par3: ...
FB2 EN ENO
Par3
Par1 Par2
DB3
FB2 EN
ENO
Par3
Par1
Par2
DB3
Sin parámetros Len- guaje
FC
FC1
Resumen
PLC’s Página 28 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 7)
• Tenemos una mezcladora que produce 3 tipos de productos, magdalenas, sobaos y donuts, para lo cual controla la receta modificando las proporciones de harina (A124.0), leche (A124.1), levadura (A124.2), azúcar (A124.3) y un motor que realiza la mezcla (A124.4).
• La producción empezará con un flanco de subida de la señal E124.0. • El byte EB125 controla el producto a fabricar: magdalenas si es 0, sobaos si vale 1
y donuts en caso de que almacene 2. En cualquier otro caso la mezcladora se mantendrá parada.
• La tabla de tiempos para cada producto es la siguiente:
• La entrada E124.5 permite elegir si los productos y el proceso de mezcla se realizan simultáneamente (si E124.2=0) o de manera secuencial (si E124.2=1)
Harina Leche Levadura Azúcar T mezcla Magdalenas 3 2 3 2 4 Sobaos 1 2 3 1 3 Donuts 2 1 2 1 2
PLC’s Página 29 Curso 2009/10 Curso 2009/10
EJERCICIO (Entregable 7)
• Resuelva el ejercicio utilizando: • Funciones con parámetros. • Bloques de función con DB’s de instancia.
• Evite, en la medida de lo posible, el uso de saltos.
Direccionamiento Indirecto S7-1200 y S7-1500
El ejemplo de programación con un autómata Siemens S7-1500 (también es valido para S7-1200) muestra como trabajar con direccioamiento indirecto dentro de un ARRAY
Para ello se simulará el registro de temperatura de un proceso, almacenando la temperatura en un DB Array
¿Que es un direccionamiento indirecto?
Mediante esta función podemos acceder a diferentes áreas de memoria de una manera indirecta inidicada por un índice o puntero. Este tipo de direccionamiento nos puede llegar a ahorrar muchas lineas de programa sobre todo cuando trabajamos moviendo datos.
Si por ejemplo queremos mover un valor a diferentes puntos de una variable array podemos hacer dos cosas:
DIRECCIONAMIENTO DIRECTO
Creamos una función MOVE para mover el valor a cada uno de los punto de la variable array
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[1]
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[2]
DIRECCIONAMIENTO INDIRECTO
Creamos una sola función MOVE en donde moveremos el valor a donde nos indique el valor de la variable "Puntero"
MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura["Puntero"]
Si "Puntero" =3 moveremos "Temperatura" a Registro_Temperatura".Temperatura[3] Si "Puntero" =8 moveremos "Temperatura" a Registro_Temperatura".Temperatura[8]
De esta forma cambiando el valor de "Puntero" podemos acceder con misma función MOVEa cualqueir punto del Array
Programación del Ejemplo
Lo primero que hacemos es crear una DB (Bloque de datos) a la que llamaremos "Registro_Temperatura".
Dentro de la DB creamos una variable que llamaremos "Temperatura" y será del tipo Array[1..10] of Int
Este sería el programa del PLC
## Borrado de Array y reinicio de puntero - Al habilitar el registro mediante flanco ascendente de "Habilita_Registro" borramos todo el array con la función FILL_BLK - También reiniciamos el puntero (lo ponemos a 0)
## Temporización de registro Al Habilitar el registro de datos "Habilita_Registro" lanzamos un temporizador cada 10 Seg que activara el bit "Flag_Registro" que realiza el registro de datos y reinicia el temporizador De esta manera generamos cada 10 segundos un bit que realiza el registro de forma periódica
## Registro de datos e incremento de puntero Al activarse el "Flag_Registro" realizamos dos cosas: - Incremento del valor del "Puntero" con la instrucción INC - Mover el valor de "Tenperatura" al Array "Registro_Temperatura" que nos marca el puntero
## Fin de registro Comparamos el valor de "Puntero" con +10 (el tamaño del array) y si es igual a 10 ponemos a reset el bit "Habilita_Rgistro" De esta forma tenemos 10 registro en el Array
Direccionamiento indirecto en Step 7 (I) – Memoria y punteros a área
3 marzo, 2014 en Teoría, Tutoriales, Videos 18 Comentarios
tweet inShare
Para empezar con el tema del direccionamiento indirecto, vamos a explicar una serie de conceptos básicos y luego nos pondremos con la formas más básicas de direccionamientos indirectos.
Los tipos de direccionamientos son tres:
Direccionamiento Inmediato Direccionamiento Directo Direccionamiento Indirecto
Los dos primeros, son los que conocemos muy bien:
El direccionamiento inmediato es cargar directamente el valor del operando (de cualquier tipo), por ejemplo L 32.
El direccionamiento directo será del tipo L MW10 (donde el valor de MW10 sea el 32 anterior) es decir, en la carga se apunta directamente al sitio de la memoria donde reside el valor que queremos cargar.
Nada nuevo bajo el sol. Ahora bien, ¿qué pasa cuando queremos recorrer áreas de memoria de forma recursiva o leer un área dinámicamente?
Direccionamiento indirecto
Como decimos, podemos acceder a los valores de la memoria de una forma indirecta.. vamos a querer saber el contenido de una variable (o área de memoria) usando otra variable que se referirá a está área de la que queremos saber su valor.
Parece un poco enrevesado pero es bastante fácil de entender mediante un ejemplo: podemos abrir el DB10 con AUF de dos formas:
AUF DB10
o bien:
AUF DB[MW20], teniendo la marca MW20 el valor 10.
Esta última forma de cargar el valor de la marca MW10 es uno de los tipos de direccionamiento indirecto, pero hay varios:
Direccionamiento Indirecto por Memoria con Número Direccionamiento Indirecto por Memoria con Puntero de Área Direccionamiento Indirecto por Registro e Intraárea (área interna) Direccionamiento Indirecto por Registro e Interárea (área cruzada)
El caso anterior, el usado es el primero, mediante número.
Direccionamiento Indirecto por Memoria
Dentro de los direccionamientos indirectos por memoria con número a su vez, podemos usar MW (o DW de un DB) o MD (o DD de un DB) para acceder:
Usando formato palabra: accederemos a temporizadores, contadores , abriremos DB y accederemos a FB y FC.
Usando formato doble palabra: accederemos a datos de tipo bit, byte, palabra y doble palabra.
Formato palabra – número (indexados)
Es el más fácil de entender: en un número entero (palabra) introducimos el valor de DB, FB , temporizador etc que queramos leer.
Así podemos hacer un
L 10
T MW 10
U T[MW10]
con lo que estaremos leyendo el estado del temporizador T10.
Digamos que nos sirve para valores operandos que están indexados mediante un número como son los DB , los contadores etc. Para hacer referencia a ellos, nos servimos de un número ya que existe una lista de estos elementos.
Direccionamiento Indirecto con formato doble palabra – Punteros a área
Aquí ya se introduce el concepto estrella del direccionamiento indirecto… el puntero.
Hagamos un pequeño paréntesis para ver este concepto.
Un puntero no es más que una dirección. Nada más. No tiene un valor, sólo apunta con el dedo como un niño pequeño dónde mirar, pero no dice qué está viendo.
Los punteros pueden ser:
Interárea (Área cruzada) : Por ejemplo P#M10.0, o P#E10.0 o P#DBX10.0 Intraárea (Área interna): Por ejempo P#10.0
Como ves hay una gran diferencia. Los que tienen área de memoria se posicionan, dentro de todas las áreas la memoria en una en concreta, y de esa, en una posición definida (siguen sin decir lo que vale, pero la dirección es completa).
En cambio, los que no llevan área de memoria, simplemente es una dirección. ¡pero no sabemos de qué área de memoria!
En nuestro caso, y siguiendo con los direccionamientos indirectos, vamos a usar los punteros SIN área de memoria.
Así podremos hacer esto:
L P#10.0
T MD10
U E[MD10]
= A [MD10]
En este ejemplo de una imaginación sin parangón, lo que hemos hecho es cargar un puntero (en el área de direcciones de la que ya hablaremos AR1) y se lo hemos transferido a la marca MD10. Por tanto, el código de arriba sería lo mismo que escribir:
U E10.0
= A10.0
¿Ves a dónde te puede llevar esto y las posibilidades que ofrece? ¿También se te ha erizado el bello?.
Sigamos…
¿Se puede cargar los punteros de otra forma?
Pues sí.
Resumiendo diremos que le damos la dirección bien mediante el puntero (P#10.0) o contando con los dedos cuántos bits tiene la dirección. Es decir:
Podemos hacer, al igual que en el caso de arriba:
L 80 (porque la dirección 10.0 son 80 bits)
T MD10
U E[MD10]
= A [MD10]
¿Es lo mismo? Extrictamente lo mismo. Hemos creado el puntero de la misma forma. Por tanto, de forma numérica, un puntero se verá como el número de bits de ese puntero.
Direccionamiento indirecto en Step 7 (II) – Registros y áreas
11 marzo, 2014 en Curso online, ejemplos, Teoría, Tutoriales, Videos 22 Comentarios
inShare4
En esta nueva entrada sobre direccionamiento indirecto es con la que terminamos el curso. En ella vamos a ver la segunda parte de cómo automatizar y recorrer zonas de memoria para trabajar con ellas de forma indirecta y recursiva. Lo primero que has de hacer es leer el direccionamiento indirecto en Step 7 (I) si no lo has hecho ya.
Registro de direcciones
Como sabes, cuando se carga un valor, hay dos registros, el ACU1 y el ACU2. Pues también existen dos registros de direcciones, el AR1 y el AR2 para usarlos en el direccionamiento indirecto.
La forma de cargar y transferir los valores a los registros son de la siguientes 3 maneras:
Cargar directamente el puntero en el AR1 Cargar el puntero y transferirselo al AR1 Cargar el valor numérico de bits y transferirselo al AR1
Cargar directamente el puntero
Es el más rápido si se sabe qué hay que cargar:
LAR1 P#1.0
Lo que cargará en el AR1 el puntero 1.0
Cargar el puntero y transferirlo al AR1
L P#1.0
LAR1
Al igual que el anterior, cargamos el puntero P#1.0 en el AR1
Cargar el valor numérico de bits y transferirlo al AR1
o, como dijimos en direccionamiento indirecto (I), podemos crear al puntero diciendo cuántos bits tiene la dirección
L 8
LAR1
Hará exactamente lo mismo que los casos anteriores. Hay que puntualizar que si queremos acceder a una dirección que tenga más de 32768 bits (16 bits) la carga debería ser del estilo:
L L#80000
TAR1
De tal forma que cargaremos la dirección 10000.0
Un poco altita la dirección aunque esa sería la forma. A decir verdad, lo suyo es jugar siempre con números en doble palabra como ya veremos más adelante aunque hacerlo como enteros también es válido aunque limitado a la capacidad de una palabra frente a la doble.
Direccionamiento Indirecto por Registro e Intraárea/Interárea
La diferencia fundamental entre el registro e Intraárea y registro e Interárea es:
Intraárea: No se especifica el área de memoria Interárea: Vamos a especificar el área de memoria (el tipo, por así decirlo)
¿Y esto qué significa en cristiano?
Pues a la hora de la verdad, y para nosotros, no mucha cosa. En resumen, y que permitan los puristas, lo que vamos a hacer es o bien:
LAR1 P#50.0 // Cargar el puntero
L MW [AR1, P#10.0] // Decir el operando (en este caso de carga), el tipo de área (marcas) y la dirección.
O también podemos hacer:
LAR1 P#M50.0 // Cargar el puntero CON la zona de memoria
L W [AR1, P#10.0] // Decir el operando y la dirección.
¿Resultado?
Pues básicamente el mismo. La diferencia es que en el direccionamiento de tipo intraárea, el contenido del AR1 va a tener la misma pinta que el direccionamiento por memoria que veíamos en el capítulo I. No tiene el área de memoria asignado (marcas en nuestro caso).
¿Qué se usa más?
Personalmente intraárea, pero supongo que es cuestión de gustos. Además imaginemos que mezclamos las cosas y hacemos lo siguiente:
LAR1 P#E50.0
L MW[AR1,P#10.0]
Como veis hemos indicado el área en la carga del registro AR1 y luego hacemos una carga de MW… ¿vamos a mandar la CPU a Stop o crearemos un agujero espacio-tiempo?
Pues no. No sé si lamentablemente, pero no.
Simplemente del AR1 tomaremos la dirección, pero no la zona de memoria y ejecutaremos el operando de carga MW.
Por tanto, y a mi juicio, es mejor siempre usar el intraárea. Me parece más metódico ya que siempre vas a construir los punteros de la misma forma, independientemente del uso que le vayas a dar posteriormente.
Muy bien, me parece estupendo… pero me he perdido en el L MW [AR1, P#10.0]… ¿qué significa?
Muy sencillo. Lo que hay entre corchetes es la dirección inicial más un desplazamiento. De tal forma que en nuestro ejemplo, realmente estamos leyendo la MW60 (50 del AR1 +10 del offset por así decirlo).
¿Es obligatorio poner ese offset siempre?
Si. Siempre. Sin excepción. Pones un P#0.0 si no lo quieres y listo.
¿Qué pasa si cargo un P#50.0 en el AR1, cargo un offset P#0.1 y hago una lectura MB, MW o MD?
Pues que estarías provocando un bonito error de runtime. Ya que para hacer una lectura de byte, word o doble word, necesitas que el bit del puntero sea 0 (ojo, el bit, no el byte). No puedes crear un MW50.1 como puedes imaginar. Así que cuidadín con eso.
¿Qué más puedo hacer con los registros?
Como no sólamente del AR1 vive el hombre, existe también un segundo registro, el AR2 . Con esta pareja, podemos jugar indistintamente para cargar nuestros punteros e incluso combinarlos en las operaciones.
Así, para seguir con el ejemplo anterior, podríamos hacer:
LAR1 P#50.0
LAR2 P#10.0
L MW[AR1,AR2] : No se puede usar ambos AR para hacer este tipo de direccionamiento
L MW[AR1,p#0.0]
T MW[AR2,P#10.0]
¿Qué operaciones puedo hacer con los registros?
LARn : Cargar el contenido del ACU1 en el registro ARn, siendo n=1 o 2.
Offtopic: Y no, no es un 102, es un 1 O 2. A la RAE le ha parecido buena idea no tener que acentuar desde hace un tiempo la O entre números. Qué país.
TARn: Transferir desde el registro n, su contenido al ACU1.
+ARn: Sumar al contenido del ARn, el contenido del ACU1.
Pero como hemos visto, podemos hacer cargas y transferencias directas:
LARn <Dirección>: Cargamos la dirección al ARn. Por ejemolo LAR1 P#50.0
TARn <Dirección>: Cargamos el contenido del ARn en la dirección. Por ejemplo TAR1 MD50
+ARn <Puntero>: Añadimos al ARn el puntero que queramos. Por ejemplo, +AR1 P#10.0
Para rizar el rizo, podemos copiar la información entre los AR haciendo:
LAR1 AR2, con lo que cargaremos en el AR1 el contenido del AR2
TAR1 AR2, con lo que recuperamos el contenido del AR1 y se lo cargamos en el AR2.
Como ves las combinaciones son unas cuantas si bien se pueden resumir en asignación y suma.
¿Y todo esto, ya sirve para algo?
Pues aunque pueda parecer lo contrario, el direccionamiento indirecto sirve para muchas cosas, pero sobre todo para recorrer información y tratarla.
¿En qué se diferencian las operaciones para el direccionamiento indirecto entre el STEP 7 y el STEP 5?
Mostrar referencias
http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=24520698&nodeid0=37217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=WW
Instrucciones: En el direccionamiento indirecto en el STEP 7, se diferencia entre:
1. El direccionamiento indirecto por memoria con un número: Para el direccionamiento de temporizadores, contadores, y módulos,
2. El direccionamiento indirecto por registro con un puntero de área: Para el direccionamiento de zonas de memoria: Periferia, entradas, salidas, marcas, datos globales (DBX), datos de instancia (DIX) y datos locales.
direccionamiento indirecto por memoria con un número
Ejemplos:
STEP 7 Analogía en el STEP 5
L 2 Carga un número L KF+2 Carga un número
T MW 33 Guardar en la palabra de marcas 33
T MW 33 Guardar en la palabra de marcas 33
L T [MW33] Carga en valor de tiempo actual del temporizador 2
B MW33 Elabora la palabra de marcas 33
L T0 Carga en valor de tiempo actual del temporizador 2
....... ....... ....... .......
AUF DB[MW33] Abre el DB2 B MW33 Elabora la palabra de marcas 33
A DB0 Abre el DB2
....... ....... ....... .......
CC FC[MW33] Llama al FC2 si VKE = 1:
B MW33 Elabora la palabra de marcas 33
Sólo funciona, si FC2 no tiene parámetros
SPB FC0 Llamada al FC2 si VKE = 1: Sólo funciona si FC2 no tiene parámetros
El operando de la dirección, en la que se guarda el número (en este caso, la MW33), puede estar en la zona de Marcas, datos globales (DBX), datos de instancia (DIX) y datos Locales. La utilización de los datos de instancia de zona (DIX) para el operando de la dirección solo es posible en los módulos de función (FBs) con CODE_VERSION1 (no en los FBs con capacidad de multinstancia).
Direccionamiento indirecto por registros con ayuda del puntero de área
Ejemplo con un puntero de área interno
STEP 7 Analogía en el STEP 5
L P#4.5 Carga el puntero para el Byte4, Bit 5
L KF +4 Carga el número de Byte
L KF +5 Carga el número de Bit
SLW 8 Desplaza el número de Bit al Byte alto
OW Bit en el Byte alto, Byte en el Byte bajo
Ejemplo para un puntero de área externo:
STEP 7 Analogía en el STEP 5
L P#M 2.3 Carga el puntero para la M2.3
Cálculos del puntero
Una propiedad decisiva del puntero de área es que los cálculos del puntero se pueden realizar con las operaciones normales para coma fija. Esto quiere decir lo siguiente en cualquier puntero:
Suma de 1: El puntero aumenta al siguiente Bit Suma de 8: El puntero aumenta al siguiente Byte, el número de Bit permanece invariante.
Ejemplos:
STEP 7 Analogía en el STEP 5
L P#M 2.3 Carga el puntero para la M2.3
L P#4.5 Carga el puntero para el Byte4, Bit 5
....... .......
+D Resultado: El puntero apunta a la M7.0, es
decir, estas 3 instrucciones tienen el mismo significado que: L P#M7.0
....... ....... ....... .......
L P#DBX 2.3 Carga el puntero para el Bit de datos global 2.3
L 16 Carga 16 .......
-D El puntero se reduce en 16 Bits, es decir, estas 3 instrucciones tienen el mismo significado que: L P#DBX0.3
En los cálculos con punteros de área, sólo se puede utilizar un puntero con denominación de área (diferente a cero). En caso contrario, las posiciones del identificador de área se "suman" o "restan", y aparece una identificación no válida.
Direccionamiento indirecto por memoria con ayuda del puntero de área
Ejemplos:
STEP 7 Analogía en el STEP 5
L P#2.0 Carga el puntero para el Byte2, Bit 0
L KF +2 Carga el número de Byte
T MD44 Se guarda en la doble palabra de marcas 44
L KF +0 Carga el número de Bit
U E [MD44] Consulta de la entrada 2.0 para saber si vale "1"
SLW 8 Desplaza el número de Bit al Byte alto
OW Bit en el Byte alto, Byte en el Byte bajo
T MW44 Se guarda en la palabra de marcas 44
B MW44 Elabora la palabra de marcas 44
U E 0.0 Consulta de la entrada 2.0
para saber si vale "1"
......... .......... ....... .......
L 123 Carga 123 L KF +123 Carga 123
T MW [MD44] Guarda el 123 en la palabra de marcas 2
B MW44 Edita la palabra de marcas 44
T MW 0 Guarda el 123 en la palabra de marcas 2
Para la colocación de los operandos de las direcciones (en este caso, la MD44) en las posibles áreas de memoria, son válidas las mismas declaraciones que con el direccionamiento indirecto con un número (consulte arriba). La diferencia es que se necesita una doble palabra.
En el direccionamiento indirecto por memoria, el identificador de área en el puntero tiene que ser 0. Sólo se pueden utilizar punteros internos de área.
En el acceso indirecto a un Byte, palabra o doble palabra, la dirección del Bit en el puntero tiene que ser 0.
Direccionamiento indirecto por registros con ayuda del puntero de área
Ejemplos:
STEP 7 Analogía en el STEP 5
Ejemplo a
L P#2.0 Carga el puntero para el Byte2, Bit 0
LAR1 Carga el puntero en el registro de direcciones 1
.......
// Direccionamiento indirecto por registro con un área interna
U E [AR1, P#0.0] Consulta de la entrada 2.0 para saber si vale "1"
Ejemplo b
LAR1 P#E 2.0 Carga el puntero para la entrada 2.0
// Direccionamiento indirecto por registro con un área externa
.......
U [AR1, P#0.0] Consulta de la entrada 2.0 para saber si vale "1"
.......
Ejemplo c
LAR1 P#DBX 2.0 Carga el puntero para el bit de datos globales 2.0
L MW [AR1, P#0.0] Carga la palabra de marcas 2
....... .......
Ejemplo d1
LAR1 P#A 2.0 Carga el puntero para la salida 2.0 en el AR1
= [AR1, P#2.2] Asigna el VKE actual a la salida 4.2
Ejemplo d2
+AR1 P#2.0 Aumenta el puntero en el registro en 2 Bytes
T W [AR1, P#0.0] Escribe desde la palabra baja del acumulador 1 en la palabra de salida 4.0
.......
L P#4.5 Carga el puntero para el Byte4, Bit 5
+AR1 Aumenta el puntero en el registro con el AKKU1
S [AR1, P#1.0] Activa la salida 9.5 si VKE = 1
En el direccionamiento indirecto por registros, el puntero puede tener un identificador de área:
Si falta el identificador (ejemplo a), hay que indicarlo en las instrucciones indirectas por registro Si el identificador está dentro del puntero (ejemplo b), puede faltar en las instrucciones
indirectas por registro. Tenga en cuenta en este caso que hay que indicar el ancho de acceso Byte, Word, Doble Word en las operaciones de carga y transferencia (ejemplo d2).
Si el identificador está dentro del puntero y se indica en la instrucción (ejemplo c), vale el área indicada en la instrucción; El identificador en el puntero se ignora.
En las instrucciones indirectas por registro, se puede indicar un OFFSET (ejemplo d). Éste se suma al puntero del registro en caso de ejecutarse el acceso. El contenido del registro permanece invariante.
La utilización del identificador de área L en el puntero no es posible en las CPUs antiguas.
El OFFSET indicado entre corchetes [AR1, <OFFSET>] puede estar dentro del rango P#0.0 ..... P#8191.7.
La instrucción "+AR1" sólo tiene en cuenta la palabra baja del OFFSET indicado en el AKKU1 o como operando, e interpreta los 16 Bits como un número con signo:
P#0.0 ..... P#4095.7 es un OFFSET positivo para el "+AR1" y
P#4096.0 ..... P#8191.7 es un OFFSET negativo para el "+AR1".
Ejemplos:
L P#0.1 OFFSET positivo más pequeño para el "+AR1"
+AR1 Aumenta el contenido de AR1 en P#0.1
......... .........
L P#4095.7 OFFSET positivo más grande para el "+AR1"
+AR1 Aumenta el contenido de AR1 en P#4095.7
....... .......
L P#4096.0 OFFSET negativo más grande para el "+AR1": Se corresponde con "P#-4096.0"
+AR1 Se reduce el contenido AR1 en P#4096.0
....... .......
L P#M 8191.0 Se corresponde con "P#-1.0" ("+AR1" ignora el identificador "M")
+AR1 Se reduce el contenido AR1 en P#1.0 !
....... .......
L P#8191.7 OFFSET negativo más pequeño para el "+AR1": Se corresponde con "P#-0.1"
+AR1 Se reduce el contenido AR1 en P#0.1 !
....... .......
L P#E 8192.0 Se corresponde con P#0.0" ("+AR1" ignora el identificador "E")
+AR1 El contenido del AR1 no se modifica
Debido a que la operación "+AR1" sólo tiene en cuenta la palabra baja del AKKU1, también se pueden utilizar punteros con identificador de área: El identificador no molesta en la palabra alta; Al contrario que en el cálculo del puntero con operaciones con enteros.
Por favor, tenga en cuenta que, independientemente de las posibilidades para aumentar y disminuir el registro de direcciones en una instrucción indirecta por registros, el contenido del registro siempre tiene que estar dentro del rango P<identificador eventual> 0.0 ..... P<identificador eventual> 65535.7.
Indicación general De forma análoga al registro de direcciones 1, en las CPUs existe un segundo registro AR2 con las mismas posibilidades de utilización.
Si se utiliza el registro de direcciones, existen limitaciones, que si no se tienen en cuenta pueden provocar reacciones inesperadas en el programa de usuario. Información más detallada se puede ver en la ayuda del STEP 7, bajo la palabra de búsqueda "AR1".
Ayuda para elegir las posibilidades del direccionamiento indirecto:
Si se utiliza el registro de direcciones, es preferible elegir el direccionamiento indirecto por registros con punteros de área internos
El área de memoria llamada por la instrucción se ve en la misma. De esta forma, el programa es más claro, hay menos posibilidades de fallo y será mejor para el mantenimiento;
En este caso, no hay que tener en cuenta la vida útil de los operandos de las direcciones. La utilización del registro de direcciones es posible actualmente, independientemente del DB abierto o los datos locales.
Las ventajas de la utilización del direccionamiento indirecto por memoria, con un puntero en la zona de marcas, son las siguientes:
No se tienen en cuenta las limitaciones para la utilización del registro; Tampoco hay que tener en cuenta la vida útil de los operandos de las direcciones, porque la zona
de marcas está disponible sin limitaciones en todos los puntos del programa. Se pueden utilizar varios punteros en paralelo. Sin embargo, no se dispone de la cómoda posibilidad del "+ARi" ni de la indicación de un
OFFSET.
Una advertencia para trabajar con punteros o punteros ANY:
Ambos contienen el puntero de área en los 32 bits más bajos, tal como se ha mostrado arriba.
Al utilizar el direccionamiento indirecto, los errores de programación no suelen aparecer tan rápidamente como cuando se utiliza el direccionamiento directo. Además, no solo puede que la zona de memoria deseada aparezca en un punto que no se ha tenido en cuenta, sino que se pierdan datos sin querer de otras zonas de memoria. Por tanto, proceda con cuidado, y compruebe el programa con profundidad.
Advertencia: En la ayuda Online del STEP 7, se dispone de información adicional y ejemplos en
Formato del tipo de parámetro ANY, Formato del tipo de parámetro POINTER, Utilización del tipo de parámetro POINTER, Utilización del tipo de parámetro ANY
¿Cómo se pueden abrir indirectamente bloques de datos en STEP 7 V5.x y cómo se pueden llamar, arrancar y evaluar temporizadores de manera indexada?
Mostrar referencias
Instrucciones Se disponen de las siguientes posibilidades para abrir indirectamente un módulo de datos:
Programando parámetros formales del tipo "BLOCK_DB (ejemplo 1)
A través de la pila de datos locales (variables temporales del módulo) (ejemplo 2)
Por medio del direccionamiento indirecto de memoria (ejemplo 3)
La figura 01 muestra 3 ejemplos para la apertura indirecta de un bloque de datos en AWL:
Figura 01
Ejemplo 1 Para el parámetro de entrada "Data2" aquí se asigna el parámetro formal del tipo "BLOCK_DB". El contenido de "Data2" se corresponde con el número del bloque de datos a abrir.
Ejemplo 2 El parámetro de entrada "InWord" del tipo "WORD" se asigna a la variable temporal "Data1". El número que se tiene en la variable temporal "Data1" de tipo WORD es el número del bloque de datos global. El bloque de datos global se carga con la instrucción AUF DB[Data1].
Ejemplo 3 Con el direccionamiento indirecto de memoria, en la palabra de marcas MW20 se carga, por ejemplo, el número 10 de DB. Con la instrucción AUF DB[MW20] se abre el bloque de datos global, cuyo número está disponible en la palabra de marcas MW20. AUF DB[MW20] es lo mismo que la instrucción AUF DB10.
Otras instrucciones para abrir un bloque de datos mediante direccionamiento indirecto es posible con AUF DB[DBW <Número>] y AUF DB[DIW <Número>].
Si no se utilizan FBs, se pueden utilizar libremente los 2 registros de DB, es decir, todas las variantes se pueden abrir con AUF DI ....
Indicación Tenga también en cuenta para el tipo de parámetro "BLOCK_DB" la información indicada en la ayuda online del STEP 7, bajo el punto "Tipos de datos admisibles al asignar parámetros".
Llamar, arrancar y evaluar un temporizador de manera indexada Un temporizador se puede llamar de manera indexada a través de una variable de tipo WORD. Esta variable puede ser:
Una variable global [MW] o Una variable local en un DB [DBW] o Una variable temporal dentro de un módulo.
El acceso se realiza de la siguiente manera (ejemplo):
SI T[MW2] // El número de temporizador se encuentra en la palabra de marcas 2, codificado en hexadecimal.
SI T[DBW2] // El número de temporizador se encuentra en la palabra del módulo de datos 2, codificado en hexadecimal. El DB tiene haberse abierto anteriormente de manera explícita.
SI T[#zeit_x] // La variable "#zeit_x" es una variable temporal de tipo WORD.
Conceptos de búsqueda Direccionamiento indirecto, llamada a un DB
puntero a DB
Supongamos que tu DB es el DB1, con datos byte ( Valen tambien nombres simbólicos)
AUF DB1 // ABRO EL BLOQUE EN EL QUE VOY A LEER
LAR1 P#DBX0.0 // MANDO EL PUNTERO AL INICIO DEL BLOQUE O DONDE SEA NECESARIO
L 100 // ULTIMO VALOR A LEER DEL BLOQUE
L #actual //VALOR ACTUAL DEL PUNTERO AL BLOQUE : VARIABLE DE MEMORIA MWxx
==I // COMPARO LOS VALORES
SPBN SIG // SI NO SON IGUALES SIGO
L 0 // SI SON IGUALES CARGO 0
T #actual // Y REINICIO EL CONTADOR
SIG: NOP 0
L 4
L #actual
+I // SUMO 4 AL VALOR ACTUAL
T #actual
L #actual // CARGO EL VALOR ACTUAL
L 4 // CARGO 4
-I // RESTO 4 DEL VALOR ACTUAL
SLW 3 //AGREGO DESPLAZAMIENTO DEL POINTER. EN ESTE CASO ASUMO BYTE.
+AR1 // SUMO EL VALOR OBTENIDO AL REGISTRO DE DIRECCIONES,CON LO CUAL MI PUNTERO AHORA ESTA
DONDE LO NECESITO
L DBD [AR1,P#0.0] // LEO EL VALOR EN PALABRA DOBLE
// DE LA DIRECCION ACTUAL
a partir de aquí colocas las instrucciones de lo que harás con el valor obtenido, en el próximo scan el puntero se
incrementará en 4 con lo que iras a parar a la siguiente palabra doble del DB.
Por supuesto la variable #actual debe ser estática o bien puede ser una marca, para que no se pierda al salir del
bloque en el que coloques tu código, el valor que puse de 100 para el último valor es simplemente un ejemplo,
ahí colocas tu último valor a leer +4.
Si en vez de leer los valores de la tabla quisiera escribirlos en una tabla de igual tamano, en la ultima instruccion
tendria que poner:
T DBD [AR1,P#0.0]
en vez de:
L DBD [AR1,P#0.0]
Gracias y perdon por preguntar tanto
Puntero a DB
por Ricardo » Dom Jun 15, 2003 3:53 am
Cuando yo puse #actual lo que quise indicar es que esa será la variable en la que se va almacenando un valor
auxiliar, que es el que se me irá sumando al puntero que fijo al principio para ir avanzando a lo largo del DB, este
valor auxiliar lo puedes tranquilamente almacenar ( si no quieres usar variables estáticas del bloque) en una
palabra de marcas, o sea para el caso es lo mismo que en lugar de #actual coloques por ejemplo MW10, esta
variable es unvalor dinámico que irá cambiando a medida que tu programa vaya leyendo los sucesivos valores se
incrementará como ves de 4 en 4(0, 4, 8, 12, 16,...).
Esto es mas facil de ver si analizas como funciona el código:
Lo primero que haces es fijar un puntero al comienzo de la zona del bloque de datos de la que quieras leer:
LAR1 P#DBX0.0
Con esto lo que haces es decirle a tu programa "bien, ahora voy a comenzar a trabajar a partir del Byte 0 Bit 0 del
bloque que tengo abierto", este es el concepto del puntero, le indico el punto de referencia sobre el que voy a
trabajar, si por ejemplo quisieras empezar a trabajar a partir de tu segundo dato obviando el primero, el puntero
sería P#DBX4.0 ( ya que cada palabra ocupa 4 Bytes), o sea le diría a mi programa: " comenzamos a leer el bloque
pero a partir del Byte 4 Bit 0".
En el primer ciclo de lectura el valor de #actual es 0 ya que no tenía ningun valor previo. Lo primero que hago a
continuacion es verificar si llegue al final de la lectura, obviamente esto no es así ya que #actual ( o MW10 si
usaste una marca) es 0, sumo ahora 4 al valor de #actual para ya prepararlo para el siguiente ciclo, obviamente si
usara el valor que ahora tiene #actual para sumarle al puntero leería la palabra doble que empieza en 4.0 en el
DB, es decir estaría saltandome el primer dato, por lo cual ejecuto un pequeño truco: le resto 4 al valor de #actual
pero no transfiero el valor a #actual, con lo cual el resultado solo me queda en el ACU1 este resultado lo desplazo
3 lugares a la izquierda y lo sumo al puntero con la instruccion +AR1 con lo cual ahora estoy posicionado en---->
DBX0.0 + #actual - 4, como en este primer ciclo #actual es 4 --->AR1 es 0 por lo que no me moví del inicio del
bloque y leo la primera palabra doble del DB con la instrucción:
L DBD [AR1,P#0.0]
En el siguiente ciclo sumo 4 a #actual con lo que ahora valdrá 8 y, luego de la resta y la suma, AR1 será 4 con lo
cual leo mi segundo valor, y así sucesivamente (el ciclo se repite hasta que el valor de #actual sea = al fin del
bloque +4), y luego reinicia desde 0 nuevamente.
Respecto del valor de control para verificar si llegaste al final de tu DB, debes tener en cuenta lo siguiente: Las
direcciones de los PLC´s estan expresadas en Bytes, y las correspondientes a los DB no son la excepción, por lo
que si consideras que las palabras dobles ocupan 4 Bytes y tu quieres leer 15 valores de palabras dobles deben
hacer:
15*4= 60
Es decir tu bloque de datos tendrá una longitud de 60 Bytes, por lo que le valor de control será precisamente ese,
es decir deberás contrastar #actual contra 60 para verificar si llegaste al final del bloque, ya que no debes poner
tu número de dato (1,2,3,4,etc.) sino la direccion en el DB ( ya que trabajas con punteros a direcciones).
Espero te haya aclarado algo mas, sino pregunta nuevamente.
Saludos
Ricardo
Tipo y
descripción Tamaño
en Bits
Formato-
Opciones
Rango y notación numérica
(Valores máximo y mínimo)
Ejemplo
BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE
BYTE (Byte) 8 Número
Hexadecimal
B#16#0 a B#16#FF B#16#10
WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000
Número
Hexadecimal
W#16#0 a W#16#FFFF W#16#1000
BCD C#0 a C#999 C#998
Número Decimal
sin signo
B#(0,0) a B#(255,255) B#(10,20)
DWORD (Doble
Palabra)
32 Número Binario 2#0 a
2#1111_1111_1111_1111_1111_1111
_1111_1111
2#1000_0001_0001_1000_10
11_1011_0111_1111
Número
Hexadecimal
DW#16#0000_0000 a
DW#16#FFFF_FFFF
DW#16#00A2_1234
Número Decimal
sin signo
B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)
INT (Entero) 16 Número Decimal
con signo
-32768 a 32767 1
DINT (Int,32 bit) 32 Número Decimal
con signo
L#-2147483648 a L#2147483647 L#1
REAL (Número en
coma flotante)
32 Número en coma
flotante IEEE
Máximo: +/-3.402823e+38
Mínimo: +/-1.175495e-38
1.234567e+13
S5TIME
(Tiempo Simatic)
16 Tiempo S7 en
pasos de 10 ms
S5T#0H_0M_0S_10MS a
S5T#2H_46M_30S_0MS and
S5T#0H_0M_0S_0MS
S5T#0H_1M_0S_0MS
S5TIME#1H_1M_0S_0MS
TIME
(Tiempo IEC)
32 Tiempo IEC en
pasos desde
1ms, entero con
signo
-T#24D_20H_31M_23S_648MS a
T#24D_20H_31M_23S_647MS
T#0D_1H_1M_0S_0MS
TIME#0D_1H_1M_0S_0MS
DATE
(Fecha IEC)
16 Fecha IEC en
pasos de 1 día
D#1990-1-1 a D#2168-12-31 DATE#1994-3-15
TIME_OF_DAY
(Fecha y Hora)
32 Tiempo en pasos
de 1ms
TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3
CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´
Existen tres posibilidades de acceso a los datos:
1. Acceso por Direccionamiento Directo:
Se puede acceder a un elemento de un DB con las siguientes instrucciones:
Ejemplo:
L DB 20. DBB2 Cargamos el byte de datos 2 del DB20 en el ACCU 1
L DB 22. DBW4 Cargamos el byte de datos 4 del DB22 en el ACCU 1
A DB 2. DBX5.6 Consultamos el estado del bit de datos 5.6 del DB2.
2. Accesso a un elemento de un DB que ya se encontraba abierto:
Para poder acceder a un elemento de datos, primero se debe abrir su correspondiente DB a
través de las instrucciones OPN DB o OPN DI. Una vez hecho esto, varios bits de datos
(DBX/DIX),bytes de datos (DBB/DIB), palabras de datos (DBW/DIW) o dobles palabras de
datos (DBD/DID) pueden ser procesadas en diferentes operaciones binarias o aritméticas.
Al utilizar la instrucción OPN DI se abre un DB de Instancia. Esta instrucción puede utilizarse
también con DBs globales, cuando 2 DBs permanecen abiertos al mismo tiempo.
Ejemplo:
OPN DB 20 Abrimos el DB20
OPN DI 22 Abrimos el DB22
L DBW 0 Cargamos la palabra de datos 0 del DB20 en el ACCU 1
T MW 1 Transferimos el contenido del ACCU 1 a la palabra de marcas
1
A DIX 0.0 Operación AND sobre el bit de datos 0.0 del DB22 con
A E 1.0 el bit de entradas 1.0
= A 4.0 Asignamos el resultado al bit de salidas digitales 4.0
3. Acceso a datos de un DB de Instancia a través de la llamada de un Bloque de
Función:
Los datos pueden ser transferidos a un DB de Instancia a través de la llamada a su
correspondiente bloque de función con la instrucción CALL FB1, DB19. La asignación de las
variables, que deberían de haber sido previamente definidas en la tabla de definiciones del
FB, y cuyo contenido se almacena en el DB de instancia, son tomadas de las direcciones
asignadas a los parámetros del FB (p.e. EW0, M 10.0 o AW4) con la instrucción CALL.
Ejemplo:
CALL FB1, DB19
CONTADOR:= EW 0 La Variable CONTADOR corresponde con la dirección EW
0.
SALIDA:= A 4.0 La variable SALIDA corresponde con la dirección A 4.0.
Nota: El formato de las variables del DB de Instancia y la dirección asignada en el
parámetro del FB deben de ser iguales.
Automatización Industrial
Direccionamiento en STEP 7
TEMA – Direccionamiento en STEP7
1. – Tipos de Direccionamiento
1.1 – Direccionamiento Inmediato
1.2 – Direccionamiento Directo
1.3 – Direccionamiento Indirecto
2. – Punteros y Tipos de Punteros
2.1 – Punteros de Número
2.2 – Punteros a Área
2.3 – Punteros a DB
2.4 – Punteros ANY
3. – Direccionamiento Indirecto por Memoria
4. – Direccionamiento Indirecto por Registro
5. – Operaciones Relacionadas con Registros
Índice
La dirección del operando se encuentra codificada en la operaciónEjemplo: L MW 122; A I 1.2
Direccionamiento Directo
El valor del operando está codificado directamente en la operaciónEjemplo: L W#16#3478
Direccionamiento Inmediato
• Direccionamiento Inmediato• Direccionamiento Directo• Direccionamiento Indirecto
Tipos de Direccionamiento
Tipos de Direccionamiento
El operando indica la dirección del valor que va a procesar la operación.Ejemplo: A I[MD 2];
Direccionamiento Indirecto
El valor del operando está codificado directamente en la operación, es decir que la operación va seguida directamente del operando con el que operará. Por otra parte, una operación también puede aportar su propio valor.
Direccionamiento Inmediato
Direccionamiento Inmediato
La dirección del operando se encuentra codificada en la operación, es decir, el operando indica la dirección del valor que va a procesar la operación. El operando se compone de dos partes:
• un identificador (p. ej. “IB” para “byte de entrada”)• una dirección exacta dentro del área de memoria indicada por el identificador.
El operando indica directamente la dirección del valor.
Direccionamiento Directo
Direccionamiento Directo
Área Ejemplo Tipo de Acceso Descripción
I I 0.0 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de EntradasQ QB 4 Bit, Byte, Palabra, Doble palabra Imagen de Proceso de SalidasPI PI W 10 Byte, Palabra, Doble palabra Entradas de periferiaPQ PQ D 24 Byte, Palabra, Doble palabra Salidas de periferiaM M 100.0 Bit, Byte, Palabra, Doble palabra MarcasT T 15 - TemporizadoresC C 80 - ContadoresDB DBX0.0 Bit, Byte, Palabra, Doble palabra Datos de un DB globalDI DIW20 Bit, Byte, Palabra, Doble palabra Datos de un DB de instanciaL LB 34 Bit, Byte, Palabra, Doble palabra Datos locales
Direccionamiento Directo
Direccionamiento Indirecto
Direccionamiento Indirecto• Permite asignar direcciones que no son conocidas hasta la ejecución• Permite múltiples procesamientos de partes del programa • Como las direcciones no son calculadas hasta la ejecución hay un riesgo de que áreas de la
memoria sean sobrescritas.
Tipos de Direccionamiento IndirectoDirecciones Indirectas
Número de 16 bitsIndirecto por MemoriaTemporizadores (T), Contadores (C ), Funciones (FC´s), Bloques Funcionales (FB´s), Boques de Datos (DB´s)
Puntero de ÁreaIndirecto por Memoria Indirecto por Registro
E/S de Periferia, Entradas, Salidas, Bits de Memoria, Datos Globales, Datos de Instancia, Datos Locales, Datos Temporales
PunteroDireccionamientoDirecciones que pueden ser especificadas de Modo Indirecto
Tipos de Direccionamiento Indirecto• Direccionamiento Indirecto por Memoria con Número• Direccionamiento Indirecto por Memoria con Puntero de Área• Direccionamiento Indirecto por Registro e Intraárea (área interna)• Direccionamiento Indirecto por Registro e Interárea (área cruzada)
Punteros y Tipos de Punteros
• Punteros a Área: son de 32 bits de longitud y contiene una dirección específica• Punteros a DB: son de 48 bits de longitud y contienen el número de DB además del
puntero a área• Punteros ANY: son de 80 bits de longitud y contienen especificaciones adicionales
(como tipo de dato de la dirección) además del puntero a DB
Un puntero se usa para apuntar a una dirección
Punteros
Tipos de Punteros
Punteros a Área (I)
El puntero a área contiene la dirección y es posible también el área direccionada:
Definición
1. Intraárea (Área Interna): El puntero no especifica el área direccionada2. Interárea (Área Cruzada): El puntero especifica el área direccionada
Tipos de Punteros a Área
1. Intraárea (Área Interna): P#y.x Ejemplo: P#22.02. Interárea (Área Cruzada): P#Zy.x Ejemplo: P#M22.0
Notación Constante
• x=dirección bit; y=dirección byte, Z=áreaCon el área se especifica el identificador de la dirección
Código: Bit 31=1 El registro contiene una dirección y la zona de memoria .Bit 31=0 El registro contiene una dirección y no la zona de memoria .
Zonas de acceso (Áreas de Operando):RRR Identificador: 000 Periferia
001 Entradas (PII)010 Salidas (PIQ)011 Marcas100 Datos en DB Global (DB)101 Datos en DB de instancia (DI)110 Datos locales del módulo (L)111 Datos locales del módulo anterior (V)
Rango de direcciones:Y...Y Dirección ByteXXX Dirección Bit
Puntero aInterárea
Punteros a Área (II)Puntero aIntraárea
Byte n+2
Dirección byte Dirección bit
1 0 0 0 0 R R R 0 0 0 0 0 y y y y y y y y y y y y y y y y x x x
Byte n Byte n+1 Byte n+3
Área operando
Dirección byte Dirección bit
0 0 0 0 0 0 0 0 0 0 0 0 0 y y y y y y y y y y y y y y y y x x x
Byte n Byte n+1 Byte n+2 Byte n+3
Punteros a DB
Un puntero a DB, además de un puntero a área, contiene un número de bloque de datos como un número positivo INT en adición al puntero a área.
Se especifica el Bloque de Datos si el puntero de área contiene las áreas de dirección de DB global o DB de instancia. En los demás casos los dos primeros bytes son cero.
Definición
P#DataBlock.DataAddress Ejemplo: P#DB10.DBX 20.5
Notación Constante
Número deBloque de Datos
Puntero aÁrea
Byte n+5
Byte n+4
Byte n+3
Byte n+2
Byte n+1
Byte nPuntero a DB
Punteros ANY (I)
Un puntero ANY, además de un puntero a DB, contiene un tipo de datos y un factor de repetición.
Definición
1. Variables con Tipos Datos: El puntero contiene un puntero DB2. Variables con Tipos Parámetros: El puntero contiene un número (temporizadores,
Contadores y Bloques)
Tipos de Punteros ANY
1. Variables con Tipos Datos: P#[Bloque de Datos.] Dirección Tipo Cantidad2. Variables con Tipos Parámetros : L#Número Tipo Cantidad
Notación Constante
P#DB11.DBX 30.0 INT 12 ; Área con 12 palabras en DB11 desde DBB30
P#M 16.0 BYTE 8 ; Área con 8 Bytes desde MB16
P#I 18.0 WORD 1 ; Palabra de Entradas IW18
P#I 1.0 BOOL 1 ; Entrada I1.0
L#10 TIMER 1 ; Temporizador T10
L#2 COUNTER 1 ; Contador C2
Ejemplos:
Punteros ANY (II)
Byte n+5
Byte n+4
Byte n+3
Byte n+2
Byte n+1
Byte n
Número deBloque de Datos
Puntero aÁrea
Cantidad
Tipo
16#10
Byte n+9
Byte n+8
Byte n+7
Byte n+6
16#0000
Número
Cantidad
Tipo
16#10
Tipo
16#00
16#0000
Número
Cantidad
Tipo
16#10
16#0000
Puntero ANYpara Tipos Datos
Puntero ANYpara Temp/Cont
Puntero ANYpara Bloques
Campo Tipo en el Puntero ANY
Tipos de Datos Tipos de DatosElementales Complejos01 BOOL 0E DT02 BYTE 13 STRING03 CHAR Tipos Parámetro04 WORD 17 BLOCK_FB05 INT 18 BLOCK_FC06 DWORD 19 BLOCK_DB07 DINT 1A BLOCK_SDB08 REAL 1C COUNTER09 DATE 1D TIMER0A TOD0B TIME Puntero Cero0C S5TIME 00 NIL
En el direccionamiento indirecto por memoria, el operando indica la dirección del valor que va a procesar la operación. El operando se compone de las siguientes partes:
• Un identificador (p. ej. “IB” para “byte de entrada”)• Una palabra que contiene el número de un temporizador (T), de un contador (Z), de
un bloque de datos (DB), de una función (FC) o de un bloque de función (FB)• Una palabra doble que contiene la dirección exacta de un valor del área de memoria,
indicada por el identificador.
Direccionamiento Indirecto por Memoria (I)
Si utiliza un operando indirecto por memoria que esté almacenado en el área de memoria del bloque de datos, deberá abrir primero el bloque de datos, utilizando a tal efecto la operación Abrir bloque de datos.
Ejemplo: OPN DB10L IB [DBD20]
Direccionamiento Indirecto por Memoria (II)
El operando indica la dirección del valor o del número de forma indirecta, es decir, utilizando el puntero. Esta palabra o palabra doble puede encontrarse en una de las siguientes áreas:
• Marca (M)• Bloque de datos (DB)• Bloque de datos de instancia (DI)• Datos locales (L).
Direccionamiento Indirecto por Memoria con un Número (III)
El direccionamiento indirecto con un número puede considerarse como otro tipo de direccionamiento el Direccionamiento Indexado.Es necesaria la utilización de un valor numérico de 16 bits (WORD) que debe de encontrarse en una de las siguientes áreas:
Los Punteros de Palabra contienen números y se utilizan para direccionar elementos como:• Temporizadores (T)• Contadores (C )• Bloques de Datos (DB´s)
Formato del Puntero de Palabra
• Funciones (FC´s)• Bloques de Función (FB´s)
• Marcas (MW)• Datos Locales (LW)
• Bloques de Datos Globales (DBW)• Bloques de Datos Instancia (DIW)
Direccionamiento Indirecto por Memoria con Número
Direccionamiento Indirecto por Memoria (IV)
L 133 //cargar puntero en ACU1T MW 20 //salvar en palabra de memo.OPN DB[MW20] //abrir DB global.....SP T[MW 20] //arrancar temporizador
OPN DB [MW 20]
133
MW 20
OPN DB 133
Direccionamiento Indirecto por Memoria con Puntero a Área
L P#30.0 //cargar puntero en ACU1T MD 10 //salvar en palabra dobleL MW[MD10] //asignar dirección digital.....A M[MD 10] //asignar dirección binaria
A M [MD 10]
P#30.0
MD 10
A M 30.0
Direccionamiento Indirecto por Registro (I)Direccionamiento Indirecto por Registro e Intraárea• La dirección del área interna está definida en uno de los dos registros de direcciones (AR1 ó AR2).• El contenido del registro de direcciones es un puntero a área interna• Con el direccionamiento indirecto por registro, se especifica un offset que se suma al registro de
direcciones• La suma se realiza cuando la operación es ejecutada sin modificar el contenido del registro de
direcciones• El offset tiene el formato de un puntero a área• En direccionamiento indirecto de direcciones digitales, el offset debe tener como dirección bit “0”• El máximo valor es: P#8191.7
Direccionamiento Indirecto por Registro (II)Direccionamiento Indirecto por Registro e Interárea• La dirección general está definida en uno de los dos registros de direcciones (AR1 ó AR2).• El contenido del registro de direcciones es un puntero en general• Con el direccionamiento general, se escribe el área de direcciones junto con el puntero a área dentro
del registro de direcciones• Con direccionamiento indirecto sólo se especifica un identificador para la dirección:
No especificar un bit, “B” para byte, “W” para palabra y “D” para doble palabra• Se especifica con un offset con dirección bit
Direccionamiento Indirecto por Registro e Intraárea
LAR1 P#10.0 //cargar puntero dir. reg. 1.......T MW[AR1,P#4.0] //asignar dirección digital.....A I[AR1,P#2.1] //asignar dirección binaria
Direccionamiento Indirecto por Registro e Interárea
LAR1 P#M12.0 //cargar puntero dir. reg. 1......L B[AR1,P#4.0] //asignar dirección digital.....= [AR1, P#0.7] // asignar dirección binaria
A I [AR1, P#2.1]
P#10.0AR1
A I 12.1
P#2.1
+
L B [AR1, P#4.0]
P#M12.0AR1
L M B 16.0
P#4.0
+
Direccionamiento Indirecto por Registro (III)
Operaciones relacionadas con AR1 y AR2
Operaciones Relacionadas con los Registros
Transfiere contenido del AR1 en registro de direcciones AR2.AR2TAR1
Cargar contenido del AR2 en registro de direcciones AR1.AR2LAR1
Cargar el contenido de la dirección en registro de direcciones AR2.P#área, byte.bitLAR2
Transfiere el contenido del registro de direcciones 2 AR2 al destino direccionado.<Dirección>TAR2
Intercambia el contenido de AR1 y AR2.TAR
Carga el contenido del área direccionada en el registro de direcciones AR2.<Dirección>LAR2
Carga el contenido del área direccionada en el registro de direcciones AR1.<Dirección>LAR1
Cargar contenido de ACU1 en registro de direcciones AR1.LAR1
Transfiere el contenido del registro de direcciones 2 AR2 al ACU1. TAR2
Cargar contenido de ACU1 en registro de direcciones AR2.LAR2
Suma una constante puntero al contenido del registro de direcciones AR2.P#Byte.Bit+AR2
Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR2.+AR2
Suma una constante puntero al contenido del registro de direcciones AR1.P#Byte.Bit+AR1
Suma el contenido de la palabra baja del ACU 1 al contenido del registro AR1.+AR1
Transfiere el contenido del registro de direcciones 1 AR1 al destino direccionado.<Dirección>TAR1
Transfiere el contenido del registro de direcciones 1 AR1 al ACU1. TAR1
Cargar el contenido de la dirección en registro de direcciones AR1.P#área, byte.bitLAR1
FunciónOperandoOperación
Ejemplo 1:L 11T MW 60OPN DB[MW60] OPN DB 11
L P#24.0T MD 50L IW [MD50]
DirecciónTipo de Acceso
Zona de Acceso
L IW 24
Ejemplos: Direccionamiento Indirecto (I)
Ejemplo 2:
LAR1 P#10.0 // PreselecciónL MW [AR1,P#200.0]
Tipo Zona de Registro Constante de InstrucciónDato Acceso Dirección Desfase Ejecutada
31 23 15 7 000000000 00000000 00000000 01010000
00000RRR 00000BBB BBBBBBBB BBBBBXXX
+200
Ejemplos: Direccionamiento Indirecto (II)Ejemplo 3:
L MW 210
AR1
LAR1 P#I 100.0 // PreselecciónL B [AR1,P#110.0]
Zona de Registro Constante de InstrucciónAcceso Dirección Desfase Ejecutada
31 23 15 7 010000001 00000000 00000011 00100000
10000RRR 00000BBB BBBBBBBB BBBBBXXX
+210
Ejemplo 4:
L IB 210
AR1
Ejemplo 7: Registro Intraárea Ejemplo 8: Registro Interárea
Ejemplo 5: Memoria con NúmeroL 5T DBW100A T[DBW100]
LAR1 P#0.0L 8
M01: T MW 20A I[AR1, P#0.0]= Q[AR1, P#4.0]+AR1 P#0.1L MW 20LOOP M01
LAR1 P#I0.0LAR2 P#Q4.0L 8
M02: T MW 20A [AR1, P#0.0]= [AR2, P#0.0]+AR1 P#0.1+AR2 P#0.1L MW 20LOOP M02
Ejemplos de Direccionamiento (III)
Ejemplo 6: Memoria con PunteroL P#0.0T MD 100A I[MD 100]L MD[MD 100]
Ejemplo 9:STEP 7 STEP 5
L 11 L KF11T MW 60 T MW 60OPN DB[MW 60] OPN DB 11 B MW 60
(A DB 11) A DB 0
L P#24.0 L KF 24T MD 50 T MW 50L IW [MD50] L IW 24 B MW 50
L IW 0
Ejemplos: Direccionamiento Indirecto (IV)
Comparación STEP5 STEP7
SIMATIC S7 NIVEL II Dir_indirecto.ppt 1
Curso SIMATIC S7 Nivel II
Direccionamiento indirecto
Abril 2003
SIMATIC S7 NIVEL II Dir_indirecto.ppt 2
Direccionamiento directo (I)
E 0 .0Zona de memoria:•E -> Entrada•A -> Salida•T -> Temporizador•M -> Marca•DB -> Módulo de datos•P -> Acceso directo (PA, PE)
Número de byte (cada zona tendrá su rango)
Número de bit (0 - 7)
SIMATIC S7 NIVEL II Dir_indirecto.ppt 3
Direccionamiento directo (II)
Área Ejemplo Tipo de Acceso DescripciónE E 0.0 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso EntradasA AB 4 Bit, Byte, Palabra, Doble Palabra Imagen de Proceso SalidasPE PEW 10 Byte, Palabra, Doble Palabra Entradas de PeriferiaPA PAD 24 Byte, Palabra, Doble Palabra Salidas de PeriferiaM M 100.0 Bit, Byte, Palabra, Doble PalabraMarcasT T15 - TemporizadoresC Z80 - Contadores
SIMATIC S7 NIVEL II Dir_indirecto.ppt 4
Direccionamiento directo (III)
Dentro de cada byte, palabra o doble palabra, los bits se
numeran de derecha a izquierda, de 0 al 7. E 124.0
Dir. byte: área de memoria + B + nº de byte EB124
Dir. palabra: área de memoria + W + nº de su 1er byte
EW124 => EB124 EB125
Dir. doble palabra: área de memoria + D + nº de su 1er byte
MD0 => MB0 MB1 MB2 MB3
SIMATIC S7 NIVEL II Dir_indirecto.ppt 5
Direccionamiento directo (IV)
Direccionamiento directoEs necesario especificar:Zona de memoriaTipo de accesoPosición de bytePosición de bit
U E 125.3 U T0L E B 124 U Z3T M B 12 UC FC1
CALL FC3L DB2.DBW3
SIMATIC S7 NIVEL II Dir_indirecto.ppt 6
Direccionamiento indirecto
En el puntero se almacena la dirección de bit.El tipo de acceso (bit, byte, palabra y doble palabra) y a que zona de memoria se refiere, se especifican en la instrucción.
L P#124.0T MD 50
L E W [MD50] L E W 124
Zona Tipo de Direcciónacceso
L 11T MW 60AUF DB[MW 60] AUF DB 11
Se puede acceder de forma indirecta a las posiciones de memoria.
L P#124.0 carga la dirección byte 124, bit 0 en formato de puntero. OJO: es la dirección, no el contenido. No se ha indicado la zona de memoria, que se especificará al utilizar la dirección.
SIMATIC S7 NIVEL II Dir_indirecto.ppt 7
Direccionamiento Indirecto
Direccionamiento indirecto con marcasMW o palabra de DBSe pueden utilizar con llamadas a módulos o para direccionar
contadores, temporizadores, FC’s, FB’s y DBs. En la marca almacenamos el número del contador, temporizador o DB.
L 8 // Carga un 8 en ACU1T MW10 // Lo transfiere a la palabra de marcas 10U Z [MW10] // Equivale a U Z 8: comprueba el contador 8
MD o doble palabra de DBSe pueden utilizar para el resto de direccionamientos. El valor del
puntero deberá de ser introducido como constante de puntero en una doble palabra.
L P#124.0T MD50L EW[MD50] --- L EW124
SIMATIC S7 NIVEL II Dir_indirecto.ppt 8
Direccionamiento indirecto
Registros de direcciones (AR1 y AR2)Registros de 32 bits utilizados para direccionamiento indirectoContiene la dirección interna de memoria para realizar los direccionamientos.Cuando hacemos p#E124.0, se genera un puntero, que tiene la siguiente forma:
Configuración:
Código: Bit 31=1 El registro contiene una dirección y la zona de memoria .Bit 31=0 El registro contiene una dirección y no la zona de memoria .
Zonas de memoria (si está disponible):RRR Identificador: 000 Periferia
001 Entradas (PAE)010 Salidas (PAA)011 Marcas100 Datos en DB 1 (DB)101 Datos en DB 2 (DI)110 Datos locales del módulo (variables de un FC)
Rango de direcciones:B...B Dirección Byte
XXX Dirección Bit
31 23 15 7 010000 RRR 00000 BBB BBBBBBBB BBBBBXXX
SIMATIC S7 NIVEL II Dir_indirecto.ppt 9
Direccionamiento indirecto
• La carga del registro se realiza con las instrucciones LAR1 y LAR2.• Las instrucciones TAR1 y TAR2 se utilizan para ver el contenido de
los registros de direcciones. • El formato puntero P# hace posible el introducir la dirección de
memoria en el registro de direcciones (byte/bit).
Ejemplo: LAR1 P# E 100.0El registro 1 contiene la dirección de la entrada 100.0 .
Carga del registro de direccionesL P#125.0 - 0000 0000 0000 0011 1110 1000LAR1L P#E125.0 - 1000 0001 0000 0011 1110 1000LAR1
LAR1 P#125.0
LAR1 P#E125.0
SIMATIC S7 NIVEL II Dir_indirecto.ppt 10
Direccionamiento Indirecto
+ 200LAR1 P#10.0 // Preselección
L M W [AR1, P#200.0]L MW 210
Tipo Tipo Registro Constante de InstrucciónDato Acceso Dirección Desfase Ejecutada
•Una vez almacenado el puntero con LAR1, podemos utilizarlo con una instrucción indirecta.•En la instrucción indirecta hay que especificar una zona de acceso (E, A, M, T, C, etc..), un tipo de acceso (byte, palabra, etc.) y un desfase. 10
SIMATIC S7 NIVEL II Dir_indirecto.ppt 11
Direccionamiento Indirecto
También es posible utilizar el direccionamiento indirecto para direccionar bits.
Ejemplo:
LAR1 P#E 100.0U [AR1, P#110.5] // Se quiere acceder no a la entrada 100.0: // si no a la 100.0+110.5 =210.5
:
:
“U E 210.5” // Equivale a esta instrucción
SIMATIC S7 NIVEL II Dir_indirecto.ppt 12
Direccionamiento Indirecto
Otras funcionesLAR1LAR1 P#valorLAR2LAR2 P#valorLAR1 AR2 AR2 --> AR1TAR1 AR1 --> ACU1TAR1 MD20 AR1 --> MD20TAR Intercambia AR1 y AR2+AR1 AR1 + ACU1 --> AR1+AR2+AR1 P#valor AR1 + valor --> AR1
En estas funciones, cuando se utiliza una marca, ésta debe ser de 32 bits, porque el AR1 y AR2 lo son.Los valores que se introducen o suman a AR1 y AR2 deben ser punteros.
SIMATIC S7 NIVEL II Dir_indirecto.ppt 13
Ejercicio 1
Realice un programa que active el bit de la palabra de salida AW124 que indique el valor que haya en el EB124. Para valores no válidos se apagarán todos los bits de salida. (Realice el ejercicio primero con saltos y posteriormente utilizando direccionamiento indirecto)
SIMATIC S7 NIVEL II Dir_indirecto.ppt 14
Ejercicio 2
Realice un programa que lea de un DB su contenido a través de dir. Indirecto. Para ello suponga que en dicho DB se registra el contenido de una tabla y que se desea acceder a cualquier posición de esa tabla mediante EB124, y que en AB124 se representa el contenido de dicha tabla.
Automatización Industrial
Ejecución Especial
TEMA – Ejecución Especial
1. – Ejecución de Programas
2. – Ejecución Cíclica de Programas
2.1 – Tiempos de Ciclo
2.2 – Programación del OB1
3. – Ejecución en el Arranque
4. – Ejecución por Interrupciones
5. – Ejecución por Tiempo – Alarmas Cíclicas
6. – Ejecución por Tiempo – Alarmas Horarias
7. – Ejecución por Tiempo – Alarmas de Retardo
8. – Ejecución por Error – Alarmas de Error
Índice
... a menos que sea interrumpido por otro OB
OB10 :Interrupción Horaria
OB1se ejecuta
continuamente
OB82:Error
Asíncrono
Ejecución de Programas – Módulos de Organización
OB1
Programa Principal
Ejecución cíclicahasta ser interrumpidopor un OB con una másalta prioridad.
Una vez interrumpido por el sistema operativoel OB1 rompe su cicloy ejecuta el OB requerido.
Ejemplo de OB10:Ejecuta este módulo cada minuto.Empieza a las 9:00
Ejemplo de OB20:Ejecuta este módulo2.35” después dedetectar un evento
Ejemplo de OB82:Ejecuta este módulosi hay un cortocircuitoen la entradaanalógica PIW532
El sistema operativollama a otros OBspara utilizarlos:
Módulos de Organización (OB´s)
El sistema llama a un nuevo OB
Antes de ejecutar el nuevo OB, se salvanlos registros delmódulo interrumpido
Pila de Interrupción (Pila I)
Pila de Módulo (Pila B)
Contenido acumuladores ACCU1,ACCU2
Contenido registros direcciones AR1, AR2
Contenido registros módulos datos DB, DI
Puntero en la Pila L
Palabra Estado, Registro MCR, Puntero Pila B
Registros DB y DI
Puntero de datos temporales (pila L)
Número de Módulo
Dirección de retorno
Almacenamiento de Datos de un OB Interrumpido
• Los OBs se encuadran dentro de dos categorías; sus respectivas funciones determinan qué dispara el punto de ruptura del OB que se esté ejecutando.
– OBs que realizan tareas periódicas (Interrupción Horaria)• Se ejecuta en una fecha u hora del día especificada• Se ejecuta tras una demora especificada después de un evento• Se ejecuta en un ciclo especificado
– OBs que reaccionan a condiciones de error (Interrupción Error)• Se ejecuta si la CPU detecta un error de proceso o de hardware• Se ejecuta si la CPU detecta un error que no está relacionado con una
instrucción específica del programa• Se ejecuta si la CPU detecta un error que puede ser asociado al procesamiento
de una instrucción específica del programa
OB´s de Error y de Interrupción
Tipo de Alarma OB´s Prioridad ComentariosCiclo libre OB1 1 Bloque de organización para la
(OB1) ejecución cíclicaAlarmas horarias OB 10 a OB 17 2 Bloques de organización para la
(OB 10) alarma horaria (OB 10 a OB 17) Alarmas de retardo OB 20 a OB 23 3 a 6 Bloques de organización para
(OB 20) alarma de retardo (OB 20 a OB 23)Alarmas cíclicas OB 30 a OB 38 7 a 15 Bloques de organización de alarma
(OB 35) cíclica (OB 30 a OB 38)Alarmas de proceso OB 40 a OB 47 16 a 23 Bloques de organización de alarma
(OB 40) de proceso (OB 40 a OB 47)Errores asíncronos OB 80 a OB 87 26 ò 28 Bloques de organización para el
(OB 82) tratamiento de errores Arranque OB 100 a OB 102 27 Bloques de organización de
(OB 100) arranque (OB 100/OB 101/OB 102)Errores síncronos OB 121 y OB 122 - Bloques de organización para el
tratamiento de errores
• Otros OB´s soportados por la CPU 315:• OB 80, OB 81, OB 85, OB 87, OB 121 y OB122
Módulos de Organización de Alarmas
• La ejecución más común es la ejecución cíclica• Existen otros tipos de ejecuciones conducidas por eventos • En la mayoría de los casos, la ejecución de un programa conducido por eventos es un
añadido a la ejecución cíclica • El programa principal es invocado desde el OB1:
• se ejecuta con el nivel más bajo de prioridad• puede ser interrumpido por todos los otros tipos de procesamiento
del programa • Al finalizar la ejecución del OB1 se actualizan las imágenes del proceso• Si se presenta un error en la actualización de las imágenes se llama al OB 85
(programa que se ejecuta ante errores)• Si no existe el OB 85, la CPU pasa a STOP
Ejecución Cíclica de Programas
• El tiempo de ejecución del programa del OB 1 es supervisado• El valor por defecto es 150 mseg.• Se puede ajustar desde 1 mseg a 6 segundos en la configuración de la CPU• Si el tiempo de procesamiento del programa principal es mayor que el tiempo fijado, llama
al OB 80 (“error de tiempo”). Si el OB 80 no existe la CPU pasa a modo STOP.• El tiempo de ciclo ajustado debe cubrir:
• El tiempo de procesamiento del OB1. Actualización de las imágenes• El tiempo de procesamiento de interrupciones de alta prioridad • Procesos de comunicación del sistema operativo • Acceso a la CPU desde un dispositivo de programación
SFC 43 RE_TRIGR: Arrancar de nuevo el tiempo de vigilancia de ciclo• Inicia de nuevo el tiempo de vigilancia de ciclo• No tiene parámetros
Tiempo de Ciclo (I)
• El tiempo de ciclo es el tiempo que el S.O. necesita para:• ejecutar el programa cíclico• partes del programa que interrumpen al cíclico (ejecución otros OBs)• actividades del sistema (p.e. actualización de imágenes, ..)
• El tiempo de ciclo se vigila• El tiempo de ciclo no es igual para cada ciclo
Tiempo de Ciclo (II)
Tiempo de Ciclo (III) – Marcas de Ciclo
Variable Tipo de datos DescripciónOB1_EV_CLASS BYTE Clase de evento e identificadores: B#16#11: activoOB1_SCAN_1 BYTE Información de arranque
B#16#01: Conclusión del rearranque completo(caliente)B#16#02: Conclusión del rearranqueB#16#03: Conclusión del ciclo libreB#16#04: Conclusión del arranque en frío
OB1_PRIORITY BYTE Prioridad: 1OB1_OB_NUMBR BYTE Número de OB (01)OB1_RESERVED_1 BYTE ReservadoOB1_RESERVED_2 BYTE ReservadoOB1_PREV_CYCLE INT Tiempo de ejecución del ciclo anterior (ms)OB1_MIN_CYCLE INT Tiempo de ciclo mínimo (ms) desde el último arranqueOB1_MAX_CYCLE INT Tiempo de ciclo máximo (ms) desde el último arranqueOB1_DATE_TIME DATE_TIME Fecha y hora en que se solicitó el OB
Variables Locales del OB1
SFC 6 RD_INFO: Leer información de arranque del OB actual
Parámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Información de errorTOP_SI OUTPUT STRUCT D, L Información de arranque
del OB actualSTART_UP_SI OUTPUT STRUCT D, L Información de arranque del
último OB activado
SFC´s – Diagnóstico
SFC 0 SET_CLK. Ajustar la hora
SFC 1 READ_CLK. Leer la hora
Parámetro Declaración Tipo de datos Area de memoria DescripciónPDT INPUT DT D, L, Entrada PDT para indican fecha
y hora que se desea ajustarRET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error.
Parámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de errorCDT OUTPUT DT D, L En la salida CDT se emiten la
fecha y la hora actuales.
SFC 64 TIME_TCK: Leer el cronómetro del sistemaParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT TIME E, A, M, D, L El parámetro tiene el cronometro
del sistema, comprendido entre0 a 2elevado a 31–1 ms.
SFC´s – Gestión del Reloj en Tiempo Real
SFC 2 SET_RTM: Ajustar contador de horas de funcionamientoParámetro Declaración Tipo de datos Area de memoria DescripciónNR INPUT Byte E, A, M, D, L, Número del contador de horas
Const. de funcionamiento que se deseaajustar. Valores posibles: 0a 7.
PV INPUT INT E, A, M, D, L, Contiene ajuste para el contadorConst. de horas de funcionamiento.
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error
Parámetro Declaración Tipo de datos Area de memoria DescripciónNR INPUT Byte E, A, M, D, L, Número del contador de horas
Const. de funcionamiento que se deseaarrancar o parar. Valores (0 - 7)
S INPUT BOOL E, A, M, D, L, Arranca o para el contadorConst. Se para con ”0”, arranca con”1”
RET_VAL OUTPUT INT E, A, M, D, L Parámetro con código de error
SFC 3 CTRL_RTM: Arrancar y parar contador de horas de funcionamiento
SFC´s – Gestión del Contador de Horas de Funcionamiento (I)
• SFC 4 READ_RTM: Leer el contador de horas de funcionamientoParámetro Declaración Tipo de datos Area de memoria DescripciónNR INPUT Byte E, A, M, D, L, Número del contador de horas de
Const. funcionamiento. Valores: 0 a 7.CQ OUTPUT BOOL E, A, M, D, L Indica si contador está en marcha
o parado. Un ”0” indica parado.Un ”1” indica en marcha.
CV OUTPUT INT E, A, M, D, L Emite el valor actual del contador.RET_VA L OUTPUT INT E, A, M, D, L Parámetro con código de error
SFC´s – Gestión del Contador de Horas de Funcionamiento (II)
SFC 25 COMPRESS: Comprimir la memoria de usuarioParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Información de errorBUSY OUTPUT BOOL E, A, M, D, L Información si está activada la
compresión con la SFC 25 (1si)DONE OUTPUT BOOL E, A, M, D, L Informa. si proceso a finalizado
con con éxito (1 significa éxito)
SFC 46 STP. Poner la CPU en stop• No tiene parámetros
Parámetro Declaración Tipo de datos Area de memoria DescripciónWT INPUT INT E, A, M, D, L El parámetro WT contiene el
tiempo de retardo en ms.
SFC 47 WAIT:. Retarda el tratamiento del programa de usuario
SFC´s – Varios
• Previamente a que la CPU ejecute el programa principal se puedeejecutar una rutina de arranque
• Mediante los módulos de ejecución en el arranque es posible fijar elcomportamiento del autómata antes de la primera ejecución del programa
• El módulo de organización asignado a cada tipo de arranque se ejecutauna sola vez en cada arranque
• Mientras se ejecutan los módulos asignados al arranque no está activada lavigilancia de tiempo de ciclo
• La CPU tiene 4 posibles estados, STOP, STARTUP, HOLD y RUN • El relacionado con la fase de arranque se denomina STARTUP
Ejecución en el Arranque
(1) Alimentación al equipo. La CPU pasa a modo STOP(2) Si la llave esta en RUN o RUN-P, la CPU pasa a modo STARTUP(3) Posteriormente a modo RUN(4)(5) Error no reconocido o cambio de posición de la llave, paso a STOP(6)(7) En el modo HOLD el programa de usuario es testeado. Se puede
conmutar a este modo desde STARTUP o RUN y retornar al modooriginal cuando el test es interrumpido
(8) Se puede llevar la CPU a STOP desde el modo HOLDEl comportamiento en el arranque se define en la configuración de la CPU
STOP
STARTUP
HOLD
RUN1
352
7
86
4
Modos de Operación de las CPU´s (I)
• Existen tres modos de arrancar el equipo• arranque en frío (cold restart)• arranque completo• arranque en caliente (warm restart)
• En el arranque en frío o completo, el programa principal se ejecuta desde el comienzo. En un arranque en caliente, continua el programa principal en elpunto de interrupción y finaliza el ciclo.
• Cada modo de arranque tiene asignado un módulo de organización• arranque completo, OB 100• arranque en frío, OB 102• arranque en caliente, OB 101• si no existen ninguno de estos módulos se pasa al programa principal
• En los modos STOP o HOLD los módulos de salida no están operativos• Cuando la ejecución cíclica comienza, los módulos están liberados• En el arranque en frío o completo, las imágenes del proceso son puestas a cero• Desde el OB 100 y OB 102, se pueden consultar entradas y activar salidas
accediendo a periferia.
Modos de Operación de las CPU´s (II)
• Las CPUs se ponen en STOP:• cuando esta seleccionado este modo con la llave• cuando se conmuta de RUN a STOP• cuando se presenta un error no reconocible en la ejecución del programa• cuando se ejecuta la SFC 46 (STOP)• cuando se solicita desde el dispositivo de programación
• La CPU introduce la razón del STOP en el buffer de diagnóstico, que puede ser consultado con el aparato de programación
• En modo STOP el programa de usuario no es ejecutado• En modo STOP se puede hacer un reset de la memoria de usuario:
• desde el selector de la CPU• desde el aparato de programación
Modo STOP
Variable Tipo de datos DescripciónOB100_EV_CLASS BYTE Clase de evento e indicativos: B#16#13: activadoOB100_STRTUP BYTE Solicitud de arranque:
B#16#81: Sol. manual de rearranque completo (en caliente)B#16#82: Sol. automática de rearranque completo (en caliente)B#16#83: Sol. manual de rearranqueB#16#84: Sol. automática de rearranqueB#16#85: Sol. manual de arranque en fríoB#16#86: Sol. automática de arranque en frío
OB100_PRIORITY BYTE Prioridad: 27OB100_OB_NUMBR BYTE Número de OB (100, 101 ó 102)OB100_RESERVED_1 BYTE ReservadoOB100_RESERVED_2 BYTE ReservadoOB100_STOP WORD Número del evento que ha llevado la CPU a STOPOB100_STRT_INFO DWORD Informaciones complementarias sobre el arranque actual
(tabla)OB100_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
Variables Locales de los OB´s de Arranque
Inhibir módulosde salida
Borrar imagen delproceso de entradas
Borrar imagen delproceso de salidas
Reset salidas del proceso
Borrar datos no remanentes
Inicializar módulos
EjecutarOB 100
Actualizar imagen proceso de entradas
Liberar módulos de salida
Arranquecompleto
Transferir imagenproceso de salidas
Actualizar imagen proceso de entradas
Programa principal OB 1
RUN
Arranque Completo
• SFCs para direccionar módulos:SFC 5 GADR_LGC Determinar la dirección lógica de un canalSFC 49 LGC_GADR Determinar el slot de una dirección lógicaSFC 50 RD_LGADR Determinar direcciones lógicas de un módulo
• Las Funciones de Sistema integradas (SFCs) permiten direccionar módulos y realizar comprobaciones previas a la ejecución cíclica del programa
• SFCs para transferir a registros:SFC 54 RD_DPARM Leer parámetros definidosSFC 55 WR_PARM Escribir parámetros dinámicosSFC 56 WR_DPARM Escribir parámetros predefinidosSFC 57 PARM_MOD Parametizar móduloSFC 58 WR_REC Escribir registrosSFC 59 RD_REC Leer registro
SFC´s Para Programar OB´s de Arranque
Parámetro Declaración Tipo de datos Area de memoria DescripciónSUBNETID INPUT BYTE E, A, M, D, L Identificador del área:
Const. - 0, en caso que el slot esté enbastidor central o de ampliación
RACK INPUT WORD E, A, M, D, L, Número del bástidor en el caso deConst. Identificador de área = 0
SLOT INPUT WORD E, A, M, D, L, No de slotConst.
SUBSLOT INPUT BYTE E, A, M, D, L, Receptáculo de submóduloConst. (sin submódulo 0)
SUBADDR INPUT WORD E, A, M, D, L, Offset en el espacio de direccionesConst. de datos útiles del módulo
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de errorIOID OUTPUT BYTE E, A, M, D, L Identificador del área:
B#16#54: Entrada de periferia (PE)B#16#55: Salida de periferia (PA)
LADDR OUTPUT WORD E, A, M, D, L Dirección lógica del canal
SFC 5
Parámetro Declaración Tipo de datos Area de memoria DescripciónIOID INPUT BYTE E, A, M, D, L, Identificador del área:
Const. B#16#54: Entrada de periferia (PI)B#16#55: Salida de periferia (PQ)
LADDR INPUT WORD E, A, M, D, L, Dirección lógica Const.
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de errorAREA OUTPUT BYTE E, A, M, D, L Identificador del área: Indica
cómo interpretar el restode los parámetros de salida.
RACK OUTPUT WORD E, A, M, D, L No. de bastidorSLOT OUTPUT WORD E, A, M, D, L No. de slotSUBADDR OUTPUT WORD E, A, M, D, L Offset en el espacio de dirección
de datos útiles del módulo
SFC 49
Parámetro Declaración Tipo de datos Area de memoria DescripciónIOID INPUT BYTE E, A, M, D, L, Identificador del área:
Const. B#16#54: Entrada de periferia (PI)B#16#55: Salida de periferia (PQ)
LADDR INPUT WORD E, A, M, D, L, Una dirección lógicaConst.
RET_VAL OUTPUT INT E, A, M, D, L Informaciones de errorPEADDR OUTPUT ANY E, A, M, D, L Campo para direcciones PI,
elementos de campo debenser del tipo de datos WORD.
PECOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PIdevueltas
PAADDR OUTPUT ANY E, A, M, D, L Campo para las direcciones PA;los elementos de campo debenser del tipo de datos WORD.
PACOUNT OUTPUT INT E, A, M, D, L Cantidad de direcciones PAdevueltas
SFC 50
• El manejo de las interrupciones es siempre llevada por eventos• Cuando se presenta un evento, el sistema operativo interrumpe la
ejecución del programa principal y llama a la rutina de atenciónal evento particular
• Cuando finaliza la rutina de atención al evento, el sistema operativo retorna al programa principal continuando en el punto en el que seprodujo la interrupción
• Existen varios tipos de ejecuciones conducidas por eventos• En la mayoría de los casos, la ejecución de un programa conducido por
eventos es un añadido a la ejecución cíclica• Las ejecuciones conducidas por eventos admiten una prioridad • La ejecución se puede permitir o inhibir con las SFCs de gestión de
eventos de alarma:• SFC 39 DIS_IRT SFC 40 EN_AIRT• SFC 41 DIS_AIRT SFC 42 EN_IRT
Ejecución por Interrupciones
• Las interrupciones de hardware permiten detectar inmediatamente en elprograma de usuario eventos ocurridos en el control del proceso
• STEP 7 ofrece los OB 40 a OB 47 para la ejecución por interrupción • En la CPU 315 soporta únicamente el OB 40 con prioridad 16 por defecto • Las interrupciones se parametrizan en la configuración del hardware • Se pueden parametrizar los módulos con capacidad de interrupción en fase de
ejecución con las SFCs para transferir registros:• SFC 55 WR_PARM Escribir parámetros dinámicos• SFC 56 WR_DPARM Escribir parámetros predefinidos• SFC 57 PARM_MOD Parametrizar módulo
• Por defecto las interrupciones de hardware no están permitidas• se puede especificar si se tiene que producir la interrupción con el evento• se permite modificar los parámetros dinámicamente (RUN) con SFCs
• Las interrupciones de hardware son reconocidas en el módulo cuando el módulode organización que contiene la rutina de atención a la interrupción ha finalizadosu ejecución
Interrupciones del Hardware (I)
• En la rutina de arranque los módulos no generan interrupciones hardware• El manejo de las interrupciones comienza con la transición a RUN • Si una interrupción hardware es generada pero no hay OB de atención a la
misma, el S.O. llama al OB 85 (ejecución por error). Si el OB 85 no ha sidoprogramado la CPU se va a stop
• Las llamadas a los OBs pueden ser bloqueadas o habilitadas con las SFCs: • SFC 39 DIS_IRT Bloquear tratamiento de nuevos eventos de alarma• SFC 40 EN_IRT Habilitar tratamiento de nuevos eventos de alarma
• Pueden ser retrasadas y habilitadas con los SFCs:• SFC 41 DIS_AIRT Retardar el tratamiento de eventos de alarmas• SFC 42 EN_AIRT Habilitar el tratamiento de eventos de alarmas
Interrupciones del Hardware (II)
Configuración Hardware de Alarmas del Proceso
Variable Tipo de datos DescripciónOB40_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma está activadaOB40_STRT_INF BYTE B#16#41: Alarma a través de línea de interrupción 1
B#16#42: Alarma a través de línea de interrupción 2 (S7–400)B#16#43: Alarma a través de línea de interrupción 3 (S7–400)B#16#44: Alarma a través de línea de interrupción 4 (S7–400)
OB40_PRIORITY BYTE Prioridad parametrizada; valor prefijado: de 16 a 23OB40_OB_NUMBR BYTE Número de OB (40 hasta 47)OB40_RESERVED_1 BYTE ReservadoOB40_IO_FLAG BYTE Módulo de entradas: B#16#54
Módulo de salidas: B#16#55OB40_MDL_ADDR WORD Dirección básica lógica del módulo que ha activado
la alarmaOB40_POINT_ADDR DWORD En módulos digitales: Mapa de bits con los estados de
las entradas en el móduloEn módulos analógicos, CPs o IMs: Estado de alarmadel módulo
OB40_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
Variables Locales de OB´s de Alarma del Proceso
SFC 39 DIS_IRT: Bloquea tratamiento de alarmaParámetro Declaración Tipo de datos Area de memoria DescripciónMODE INPUT BYTE E, A, M, D, L, Define los eventos de alarma y de
Const. error asíncrono que se bloqueanOB_NR INPUT INT E, A, M, D, L, Nº del OB
Const. RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar
la función, el valor de retornocontiene el código.
Parámetro Declaración Tipo de datos Area de memoria DescripciónMODE INPUT BYTE E, A, M, D, L, Define los eventos de alarma y
Const. error asíncrono que se habilitan OB_NR INPUT INT E, A, M, D, L, Nº del DB
Const.RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar la
función, el valor de retornocontiene el código.
SFC 40 EN_IRT: Habilita el tratamiento de alarma
SFC´s Relacionados con Interrupciones (I)
SFC 41 DIS_AIRT: Retarda el tratamiento de alarmaParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos (= cantidad de
llamadas de la SFC 41)
SFC 42 EN_AIRT: Habilita el tratamiento de eventos de alarmasParámetro Declaración Tipo de datos Area de memoria DescripciónRET_VAL OUTPUT INT E, A, M, D, L Cantidad de retardos programados tras la
ejecución de SFC 42 o código de error
SFC´s Relacionados con Interrupciones (II)
+27648 = 10V.
0
Módulo de Entradas Analógicas
+ 8 V. Límite superior para la interrupción
Si el valor del transmisor de nivel PIW 288es mayor que el límite superior (8 voltios)o menor que el límite inferior (2 voltios)habilitados para esta entrada analógica, llama al OB40.
+ 2 V. Límite inferior para la interrupción
Interrupciones de Proceso (I)
+27648
0
Tarjeta de Entradas Analógicas
+20000Límite superiorpara la interrupción
Si el valor de la PIW 288 es mayorque el límite superior para este canalanalógico, llama al OB40.Visualiza un mensaje de error.
AW0
Interrupciones de Proceso (II)
SFC 55
SFC´s Relacionados con Interrupciones (III)
SFC 56
SFC´s Relacionados con Interrupciones (IV)
Parámetro Declaración Tipo de datos Area de memoria DescripciónREQ INPUT BOOL E, A, M, D, L, REQ=1: Petición de escritura
Const.IOID INPUT BYTE E, A, M, D, L, Identificador del área:
Const. B#16#54 = Entrada de periferia (PI)B#16#55 = Salida de periferia (PQ)
LADDR INPUT WORD E, A , M, D, L, Dirección base lógica del módulo. EnConst. un módulo mixto es necesario indicar
la menor de las dos direcciones.RET_VAL OUTPUT INT E, A, M, D, L Si ocurre un error al procesar la función,
el valor de retorno contiene un códigode error.
BUSY OUTPUT BOOL E, A, M, D, L BUSY = 1: La operación de escriturano ha finalizado aún.
SFC 57 PARM_MOD: Parametrizar módulo
SFC´s Relacionados con Interrupciones (V)
• Una alarma cíclica es una interrupción que es generada en intervalosperiódicos de tiempo.
• La alarma permite ejecutar un programa concreto periódicamente, independientemente del tiempo de ejecución del programa cíclico
• En STEP 7 se dedican a esta función desde el OB 30 al OB 38• La CPU 315 dispone únicamente del OB 35 que tiene la prioridad 12• Se puede fijar el intervalo de tiempo en el rango de 1 mseg a 1 minuto• El comienzo del tiempo para el intervalo de tiempo es el instante de la
transición START UP a RUN • La ejecución se puede permitir o inhibir con las SFCs:
• SFC 39 DIS_IRT SFC 40 EN_AIRT• SFC 41 DIS_AIRT SFC 42 EN_IRT
Ejecución por Tiempo – Alarmas Cíclicas
• El OB de interrupciones cíclicas (OB35) permite interrumpir el programa a intervalos de tiempo fijos.
Una vez activado, el OB35 se ejecutará según un intervalo de tiempo fijado al “Configurar el HW”.
...interrumpe el OB1 y se ejecuta el OB35 cada 250ms
OB1se ejecutacontinuamente
OB35
OB35OB35
OB35
Interrupciones Cíclicas
Configuración de Interrupciones Cíclicas
Variable Tipo de datos DescripciónOB35_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma está activadaOB35_STRT_INF BYTE (B#16#31: Solicitud de arranque para OB 30)
:B#16#36: Solicitud de arranque para OB 35:(B#16#39: Solicitud de arranque para OB 38)
OB35_PRIORITY BYTE Prioridad parametrizada; valor prefijado:de 7 (OB 30) a 15 (OB 38)
OB35_OB_NUMBR BYTE Número de OB (30 hasta 38)OB35_RESERVED_1 BYTE ReservadoOB35_RESERVED_2 BYTE ReservadoOB35_PHASE_OFFSET WORD Desfase en msOB35_RESERVED_3 INT ReservadoOB35_EXC_FREQ INT Cadencia temporal en msOB35_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB.
Variables Locales de OB de Alarma Cíclica
• Una alarma horaria es una interrupción que permite ejecutar un programaen un tiempo concreto, una sola vez o periódicamente.
• En STEP 7 se dedican a interrupciones horarias del OB 10 al OB 17• La CPU 315 dispone únicamente del OB 10 que tiene la prioridad 2• Las interrupciones horarias se pueden parametrizan:
• en la configuración del hardware• en fase de ejecución usando SFCs
• Se puede arrancar una interrupción horaria:• una sola vez: el OB es llamado una sola vez en el momento especificado• periódicamente: depende de la configuración (cada minuto, hora, día,...
Ejecución por Tiempo – Alarmas Horarias
• El OB Horario (OB10 en el S7-315) permite interrumpir el OB cíclico y ejecutar un código en una fecha especificada o a intervalos especificados. Se puede programar este OB para que se ejecute en los siguientes intervalos: – Una vez: se ejecuta una vez, en el momento especificado.– Cada minuto: Se ejecuta en intervalos de 1 minuto, empezando desde el momento
especificado– Cada hora: Se ejecuta en intervalos de 1 hora, empezando desde el momento
especificado– Cada día: Se ejecuta 1 vez al día, desde el momento especificado– Cada semana: Se ejecuta 1 vez por semana, empezando desde el momento
especificado– Cada mes: Se ejecuta 1 vez al mes, empezando desde el momento especificado– Cada año: Se ejecuta 1 vez al año, empezando desde el momento especificado
Interrupciones Horarias (I)
• En el arranque en frío o en el arranque completo, el sistema operativoborra todas las activaciones realizadas mediante SFCs.
• Las realizadas en la configuración del hardware son mantenidas• Se puede consultar el estado de la alarma horaria con la SFC 31 y
posteriormente, activar o desactivar la interrupción• Las interrupciones horarias son atendidas sólo en modo RUN• Si el OB de una interrupción horaria es llamado pero no está programado:
• el S.O. primero llama la OB 85 (programa de ejecución por error)• si OB 85 no está programado, la CPU se va a STOP
• La ejecución se puede anular, activar, ajustar y consultar con las SFCs:• SFC 28 SET_TINT SFC 29 CAN_TINT• SFC 30 ACT_TINT SFC 31 QRY_TINT
Interrupciones Horarias (II)
Configuración de Interrupciones Horarias
Variable Tipo de datos DescripciónOB10_EV_CLASS BYTE Clase de evento e identificadores:
B#16#11: Alarma activadaOB10_STRT_INFO BYTE B#16#11: Solicitud de arranque para OB 10
(B#16#12: Solicitud de arranque para OB 11):(B#16#18: Solicitud de arranque para OB 17)
OB10_PRIORITY BYTE Prioridad parametrizada; valor por defecto: 2OB10_OB_NUMBR BYTE Número de OB (10 hasta 17)OB10_RESERVED_1 BYTE ReservadoOB10_RESERVED_2 BYTE ReservadoOB10_PERIOD_EXE WORD El OB se ejecuta en el intervalo indicado:
W#16#0000: Una vezW#16#0201: Cada minutoW#16#0401: Cada horaW#16#1001: Cada díaW#16#1201: Cada semanaW#16#1401: Cada mesW#16#1801: Cada año
OB10_RESERVED_3 INT ReservadoOB10_RESERVED_4 INT ReservadoOB10_DATE_TIME DATE_TIME Fecha y hora a las que se solicitó el OB
Variables Locales de OB de Alarma Horaria
SFC 28 SET_TINT: Ajustar hora de arranque de la alarma horaria
Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB que se activa en el
Const. instante SDT(fecha y hora de arranque)SDT INPUT DT D, L Fecha y hora de arranquePERIOD INPUT WORD E, A, M, D, L, Periodicidad desde el instante SDT:
Const. W#16#0000 = una vezW#16#0201 = cada minutoW#16#0401 = cada horaW#16#1001 = diariaW#16#1201 = semanalW#16#1401 = mensualW#16#1801 = anualW#16#2001 = al final del mes
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
• Funciones del Sistema integradas (SFCs) se pueden utilizar para controlar y supervisar las interrupciones asociadas a alarmas horarias. Las SFCs relacionadas con alarmas horarias son las siguientes.
SFC´s para Programar OB´s de Alarmas Horarias (I)
Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB cuya fecha
Const y hora de arranque se han deborrar (OB10 a OB17).
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC 29 CAN_TINT: Anular alarma horaria activada
SFC 30 ACT_TINT: Activar un OB de alarma horaria Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB que se desea
Const. activar (habilitar)(OB10 a OB17)
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.
SFC´s para Programar OB´s de Alarmas Horarias (II)
SFC 31 QRY_TINT: Consultar alarma horaria
Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB cuyo estado
Cons. se ha de consultar(OB10 a OB17).
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.STATUS OUTPUT WORD E, A, M, D, L Estado de la alarma horaria
SFC´s para Programar OB´s de Alarmas Horarias (III)
Tarjeta de Entradas Analógicas
+14000 = Temperatura Superior+13000 = Temperatura Inferior
Q5.7 Calentador
PIW288
La CPU tiene unallamada a un OB queverifica y controla latemperatura para estetanque una vez cada minuto, comenzando auna fecha y hora específica.
Programación de una Alarma Horaria
• Una alarma de retardo es una interrupción que permite ejecutar un programa después de una espera determinada independientemente de los temporizadores
• En STEP 7 se dedican a interrupciones de retardo del OB 20 al OB 23• La CPU 315 dispone únicamente del OB 20 que tiene la prioridad 3
RETARD
O
Ejecución por Tiempo – Alarmas de Retardo
Configuración de Interrupciones de Retardo
RETARD
O
Variable Tipo de datos Declaración DescripciónOB20_EV_CLASS BYTE TEMP Clase de evento e identificadores:
B#16#11: Alarma está activadaOB20_STRT_INF BYTE TEMP B#16#21: Solicitud arranque OB 20
B#16#22: Solicitud arranque OB 21B#16#23: Solicitud arranque OB 22B#16#24: Solicitud arranque OB 23
OB20_PRIORITY BYTE TEMP Prioridad; valor prefijado: de 3 (OB20)OB20_OB_NUMBR BYTE TEMP Número de OB (20 hasta 23)OB20_RESERVED_1 BYTE TEMP ReservadoOB20_RESERVED_2 BYTE TEMP ReservadoOB20_SIGN WORD TEMP Identificador de usuario: parámetro de
entrada SIGN de la llamada de SFC 32”SRT_DINT”
OB20_DTIME TIME TEMP Tiempo de retardo transcurrido en msOB20_DATE_TIME DATE_TIME TEMP Fecha y hora a las que se solicitó el OB
RETARD
O
Variables Locales de OB de Alarma de Retardo
Parámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB que se arrancará
Const. al transcurrir el tiempo de retardo(OB 20 a OB 23).
DTIME INPUT TIME E, A, M, D, L, Valor del retardo (1 a 60000 ms)Const.
SIGN INPUT WORD E, A, M, D, L, Identificador que, al llamar el OBConst. de alarma de retardo, aparece en
la información de eventos dearranque del OB.
RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC 32 SRT_DINT: Arrancar alarma de retardo
• Funciones del sistema integradas (SFCs) se pueden utilizar para arrancar y supervisar las interrupciones asociadas a alarmas de retardo.
Las SFCs relacionadas con alarmas de retardo son las siguientes.RET
ARDO
SFC´s para Programar OB´s de Alarmas Horarias de Retardo (I)
SFC 33 CAN_DINT: Anular alarma de retardoParámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB que se ha de
Const. anular (OB20 a OB23).RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error
SFC 34 QRY_DINT: Consultar estado de alarma de retardoParámetro Declaración Tipo de datos Area de memoria DescripciónOB_NR INPUT INT E, A, M, D, L, Número del OB, cuyo STATUS
Const. se ha de consultar (OB 20 a 23)RET_VAL OUTPUT INT E, A, M, D, L Parámetro de código de error.STATUS OUTPUT WORD E, A, M, D, L Estado de la alarma de retardo
RETARD
O
SFC´s para Programar OB´s de Alarmas Horarias de Retardo (II)
• El OB20 se arranca mediante una llamada al SFC32 (SRT_DINT). Se define la demora en los parámetros que le pasa al SFC de la siguiente forma:– OB_NR Número del OB que arrancará después de retardo– DTIME Duración de la demora (desde 1 hasta 60000 ms)– SIGN Identificador que se pone en la información de
arranque del OB cuando se llama al OB de retardo – RET_VAL Contiene el código de error si se produce un error
mientras el OB se procesa
M0.1 SFC32(SRT_DINT)EN ENO
OB_NRDTIMESIGN
RET_VAL20T#500msW#16#01
MW10
M2.0
RETARD
O
Interrupciones de Retardo
+27648
0
Módulo de Entradas Analógicas
Si el módulo analógico ha sido configurado para habilitar la rotura de hilo comointerrupción hardware, se utilizar cualquierproblema de hardware en el transmisorpara llamar a un OB de detección de errores(por ejemplo, el OB82)
X
Interrupciones por Error del Hardware
• El STEP7 proporciona otros OBs utilizados para interrumpir el programa además de las interrupciones por errores en el hardware. Los errores que llaman a esos OBs se consideran errores en tiempo de ejecución; se detectan mediante los diagnósticos internos del PLC.
Errores en Tiempo de EjecuciónErrores Asíncronos Errores Síncronos
OB de Error OB de ErrorOB80 Error de Tiempo (por ejemplo,
tiempo de ciclo excedido) OB85 Error de Secuencia de Programa
(por ejemplo, OB no cargado)OB87 Fallo de Comunicaciones
(por ejemplo, Datos Globales)
OB121 Error de Programación (por ejemplo, DB no cargado)
OB122 Error de Acceso(por ejemplo, intento deacceder a un módulo periférico no presente)
Interrupciones por Error en el Programa/Sistema
• Las Funciones de Sistema integradas (SFCs) se pueden utilizar para controlar y monitorizar las interrupciones asociadas a errores síncronos y asíncronos. Estas SFCs proporcionan los parámetros formales listados debajo los cuales pueden ser programados con valores actuales mediante la instrucción de llamada a SFC.
• SFCs para manejo de Errores Síncronos– SFC36 MSK_FLT Enmascarar errores de sincronización– SFC37 DMSK_FLT Desenmascarar errores de sincronización– SFC38 READ_ERR Leer el registro de estado de eventos
• SFCs para manejo Errores Síncronos y Asíncronos – SFC39 DIS_IRT Inhabilitar Interrupción– SFC40 EN_IRT Habilitar Interrupción– SFC41 DIS_AIRT Inhabilitar Interrupciones de Alarma– SFC42 EN_AIRT Habilitar Interrupciones de Alarma
SFC´s para Programar OB´s de Error
Trabajar con analógicas
* Cómo funcionan las analógicas.
Las tarjetas analógicas de S7 convierten:
· Para la lectura de entradas analógicas, un valor analógico procedente de un sensor
o transductor en un valor digital de 16 bits que se almacena en la periferia del S7
(no confundir estos 16 bits con la resolución de la entrada analógica). Esta
resolución oscilará según los casos entre 11 bits mas signo y 8 bits.
· Para las salidas analógicas, un valor digital de 16 bits de la periferia de salidas en
una señal analógica mediante un conversor digital-analógico.
Existen dos parámetros que determinan una entrada o una salida analógica:
· El tipo de sonda (en el caso de entradas), o el tipo de actuador (en el caso de
salidas), a conectar (4-20 mA, 0-10 V, etc...)
· La resolución a alcanzar en la lectura o escritura. Cuanta mayor sea la resolución,
mayor será la exactitud de la lectura y menor el error entre el valor real y el
almacenado en el autómata. Por contra, también será mayor el tiempo de
conversión analógico / digital y por lo tanto las variaciones en el proceso tardarán
más en reflejarse en el PLC.
* Tipos de señales analógicas.
Las tarjetas analógicas del S7 soportan una gran cantidad de tipos de medidas,
configurándose desde Hardware de Step 7 a través de los adaptadores de margen
laterales de la tarjeta (para más información, ver manual “Datos de los módulos S7”).
Sin embargo, es muy importante tener en cuenta que las entradas analógicas de los
S7 300 se agrupan en grupos de 2 canales, por lo que ambos deben de estar configurados
de la misma manera, ya sea para 0-10 V, para 4-20 mA, etc... Por lo tanto, no se puede
mezclar en el canal 0 una señal de 0-10 V, p . ej., y en el canal 1 una de 4-20 mA. Deberá
de dejarse vacío dicho canal si no se dispone de ninguna sonda de 0-10 V, y cablear la de
4-20 mA en el siguiente grupo libre.
Vamos a realizar un repaso a las conexiones más usuales con S7 de sensores de
campo.
* Medidas de tensión.
La más utilizada en la industria es 0-10 V. El Simatic S7 300 posee el rango +/-10 V,
que es el adecuado para esta lectura. Como la sonda no va a dar tensión negativa, se va a
comportar de manera unipolar, por lo siempre vamos a tener un valor de 0 al valor máximo
que hayamos seleccionado de resolución.
El inconveniente de este tipo de lectura es que al ser una tensión, las distancias sin
atenuación de la señal debido a caídas de tensión en el cable son relativamente cortas,
por lo que la sonda debe estar cerca del cuadro eléctrico donde se encuentre el módulo
analógico.
Los límites de lectura son:
Lectura +/-10 V:
Estado de lectura Tensión en la entrada anal. Valor de la entrada anal.
Desbordamiento positivo >= 11,759 32.767
Rebase positivo De 11,7589 a 10,0004 De 32511 a 27649
Valor nominal De 10,0 a –10,0 De 27648 a –27648
Rebase negativo De -10,0004 a -11,759 De –27649 a –32512
Desbordamiento negativo <= -11,76 -32.768
* Medidas de intensidad.
Dentro de las medidas de intensidad se suelen gastar principalmente dos tipos: 0-
20 mA y 4-20 mA. Este último tipo es el más utilizado en la lectura analógica, ya que
permite grandes distancias al ser la lectura por corriente, y a la vez es fácil reconocer la
rotura del hilo, ya que por debajo de 4 mA es que no llega lectura del elemento.
Lectura 0 a 20 mA:
Estado de lectura Corriente (mA) Valor de la entrada anal.
Desbordamiento positivo >= 23,516 32.767
Rebase positivo De 23,515 a 20,0007 De 32511 a 27649
Valor nominal De 20 a 0 De 27648 a 0
Rebase negativo De –0,0007 a –3,5185 De -1 a –4864
Desbordamiento negativo <= -3,5193 -32.768
Lectura 4 a 20 mA:
Estado de lectura Corriente (mA) Valor de la entrada anal.
Desbordamiento positivo >= 22,815 32.767
Rebase positivo De 22,810 a 20,0005 De 32511 a 27649
Valor nominal De 20 a 4 De 27648 a 0
Rebase negativo De 3,9995 a 1,1852 De -1 a –4864
Desbordamiento negativo <= 1,1845 -32.768
* Medidas PT100.
Las sondas PT100 se utilizan para la medida de la temperatura en procesos que
oscilen entre 850ºC y –200ºC. Una PT100 es una termoresistencia que varía su
resistividad en función de la temperatura que exista en contacto con la misma. A través de
dos hilos (1 canal del módulo de entradas analógicas), se hace circular por la PT100 una
corriente constante. Otros dos hilos toman la medida de la resistencia en los extremos de
la sonda, con lo que se obtiene la variación de resistencia, y al ser conocida su linealidad
con respecto a la temperatura en los márgenes anteriormente citados, se obtiene ésta.
Lectura PT100:
Estado de lectura Temperatura Valor de la entrada anal.
Desbordamiento positivo >= 1000,1 32.767
Rebase positivo De 1000 a 850,1 De 1000 a 850,1
Valor nominal De 850 a –200 De 8500 a –2000
Rebase negativo De –200,1 a -243 De –2000 a –2430
Desbordamiento negativo <= -243,1 -32.768
Observar que lógicamente una sonda PT100 consumirá dos canales de entradas
analógicas: 1 para la lectura en extremos de la sonda, y otro para la corriente constante
que se suministra a la misma. Si la lectura se realizara por el mismo cable con el que se
alimenta la PT100, las fluctuaciones de la resistencia del cable de cobre que une el PLC a
la sonda con respecto a la temperatura variarían la magnitud de lectura. Por lo tanto, en
una tarjeta de 8 entradas analógicas sólo se podrán conectar 4 sondas PT100.
Automatización Industrial
Tratamiento Analógico
TEMA – Tratamiento Analógico
1. – Conversiones D/A, A/D
2. – Tarjetas de Entradas y Salidas Analógicas
3. – Representación Digital de Valores Analógicos
4. – Configuración de las Tarjetas de Entradas y Salidas Analógicas
5. – Tiempos de Ciclo y Conversión
6. – Ajuste de Valores Analógicos
7. – Normalización de Valores Analógicos
Índice
abcd
RR/2R/4R/8
+-
SALIDAANALOGICA
Rf
Vs
02122232 5 v
Amplificador sumador
Red de resistencias
e
f
e
s
RR
VVA −==
Ve
i
i
f
s
e
e
RV
RVi −==
Convertidor Digital-Analógico, D/A
133.015020) ==Aa
- Supongamos Rf = 20 K, y R = 150 K, sin tener en cuenta el cambio signo queda:
266.07520) ==Ab
533.05.37
20) ==Ac
066.17.18
20) ==Ad
25755.3775*5.37) =
+=Abyc
665.0133.0*5133.0* === es VV
33.1266.0*5266.0* === es VV
665.2533.0*5533.0* === es VV
33.5066.1*5066.1* === es VV
48.0*58.0* === es VV8.02520) ==vAbyc
e
f
e
s
RR
VVA −==
Convertidor Digital-Analógico, D/A
CONTADOR DEN BITS+
- SALIDADIGITAL
ConvertidorD/A
RESETRELOJ
ENTRADAANALOGICA
- Lentos en la conversión - Tiempo de conversión variable- Aumenta con el valor que se tiene que convertir
COMPARADORB SU AF D LF E IE D R A
&
Convertidor Analógico-Digital, A/D – Convertidor en Rampa
CIRCUITO DECONTROL
REGISTRO DEDESPLAZAMIENTO
+-
SALIDADIGITAL
REGISTRO DE APROXIMACIONES
SUCESIVAS
RELOJ
ENTRADAANALOGICA
- Rápidos- Tiempo de conversión fijo
COMPARADOR B SU AF D LF E IE D R A
ConvertidorD/A
Convertidor Analógico-Digital, A/D – Convertidor por Aproximaciones Sucesivas
Convertidor A/D MK 50808 de MOSTEK
Por sondeo
A/D
I0
I7
3
OE
START
ALE
Pµ
Puerto
- Hay que programar un tiempo de espera necesario para la conversión
MULTIPLEXOR
Control de Convertidores A/D (I)
Por interrupción
MULTIPLEXOR
A/D
I0
I7
3
EOCSTART
INT
ALE
Pµ
Puerto
- No hay que programar tiempo de espera
OE
Control de Convertidores A/D (II)
• La conversión A/D se realiza mediante tarjetas de entradas analógicas
Tarjetas de Entradas Analógicas – Diagrama de Bloques
Tarjetas de Entradas Analógicas – Módulo SM 331
• La conversión D/A se realiza mediante tarjetas de salidas analógicas
Tarjetas de Salidas Analógicas – Diagrama de Bloques
Tarjetas de Salidas Analógicas – Módulo SM 332
Rack0
Rack1
Rack2
Rack3
IM
IM(Receptor)
IM512a
526
528a
542
544a
558
560a
574
576a
590
592a
606
608a
622
624a
638
384a
398
400a
414
432a
446
448a
462
464a
478
480a
494
496a
510
416a
430
256a
270
336a
350
352a
366
368a
382
304a
318
320a
334
272a
286
288a
302
IM640a
654
656a
670
672a
686
688a
702
704a
718
720a
734
736a
750
752a
766
(Receptor)
(Receptor)
(Emisor)
Fuente dealimentac.
Fuente dealimentac.
CPUy
fuente dealimentac.
Fuente dealimentac.
• El identificador de direcciones es:- PIW para las entradas analógicas - PQW para las salidas analógicas
Direccionamiento de Tarjetas Analógicas
Valores Analógicos de Trabajo
• Unipolares1 a 5 V 0 a 10 V
• Bipolares± 10 V ± 5 V ± 2,5 V ± 1 V± 500 mV ± 250 mV ± 80 mV
Valores en Tensión
• Unipolares0 a 20 mA 4 a 20 mA
• Bipolares± 20 mA ± 10 mA ± 3,2 mA
Valores en Intensidad
10 kΩ 150Ω 300Ω 100Ω
Valores en Resistencia
• La resolución máxima es de 15 bits• La resolución es inferior, los dígitos insignificantes se rellenan con 0• La resolución depende del tipo de tarjeta analógica y de su parametrización • La misma tarjeta se puede parametrizar:
• para intensidad o tensión. Unipolar o bipolar• el signo: “0” -->+, “1” --> -• las direcciones utilizadas son: PIW 288 y PIW 290. PQW 304 y PQW 306
S 02122215 14
3242526272829210211212213214213 12 11 10 9 8 7 6 5 4 3 2 1 0Número del bit
Peso del bit
0 X X X X X X X X X X X X X X 0Cod. 14 bits (+S)
0 X X X X X X X X X X X X 0 0 0Cod. 12 bits (+S)
0 X X X X X X X X X 0 0 0 0 0 0Cod. 9 bits (+S)
Resolución Valor analógico
Representación Digital – Resolución
• Valores Analógicos en los valores de entrada de 0 a 10V y 1 a 5V
Representación de Valores de Medida de E/A
• Valores Analógicos en los valores de salida de 0 a 10V y 1 a 5V
Representación de Valores de Medida de E/A
L PIW 288 // Leer valor E/AT MW 10
A(L MW 10 //Comparación con 2 V.L 5530>I)A(L MW 10 //Comparación con 4 V.L 11060<I)OA(L MW 10 //Comparación con 6 V.L 16589>I)A(L MW 10 //Comparación con 8 V.L 22118<I)= Q 4.0
• Se trata de que se active la salida “Q 4.0” para valores de tensión , en la entrada analógica “PIW 288” , entre 2 y 4 o entre 6 y 8 voltios
Ejemplo
L PIW 288 // Leer valor E/AITDDTRL 2.764800e+004/RL 1.000000e+001*RRNDT MD 10
A(L MD 10 //Comparación con 2 V.L 2>I)A(L MD 10 //Comparación con 4 V.L 4<I)OA(L MD 10 //Comparación con 6 V.L 6>I)A(L MD 10 //Comparación con 8 V.L 8<I)= Q 4.0
• El tiempo de conversión se compone de:• tiempo de conversión básico
depende directamente del tipo de conversión (por integración, o valores instantáneos).en el caso de integración, el periodo de integración se considera directamente en el tiempo de conversiónel periodo de integración tiene efecto directo sobre la resoluciónel periodo de integración depende de la supresión de frecuencias perturbadoras.los periodos de conversión básicos son 2.5, 16.6, 20 y 100 mseg.
• tiempos suplementariostiempo para la medida de resistenciatiempo para la vigilancia de rotura de hilo
• La conversión A/D y la transferencia a la CPU se realiza secuencialmente• El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un
módulo
Tiempo de Ciclo
Tiempo de Conversión de Entradas Analógicas
Tiempo de Conversión y de Ciclo de E/A
• El tiempo de conversión de un canal de salida analógica es el tiempo que transcurre entre la consideración de un valor de salida digitalizado de la memoria interna y la conversión digital-analógica
• La conversión de canales de salida analógica se realiza secuencialmente• El tiempo de ciclo es el tiempo que tarda en convertir todos los canales activos en un
módulo de salida analógica
Tiempo de Conversión
Tiempo de Ciclo
• El tiempo de establecimiento (t2 a t3) es el tiempo que transcurre entre la aplicación del valor convertido y el momento en que alcanza el valor especificado en la salida analógica.
• El tiempo de establecimiento depende de la carga.• Hay que distinguir entre cargas resistivas, capacitivas e inductivas.
Tiempo de Establecimiento
Tiempos de Conversión, Ciclo, Establecimiento para S/A
• El tiempo de respuesta (t1 a t3) es el tiempo que transcurre entre la escritura de los valores de salida en la memoria interna y el momento en que se alcanza el valor especificado en la salida analógica física.
• En el caso más desfavorable, es la suma de los tiempos de ciclo y de establecimiento.
Tiempo de Respuesta
Tiempos de Respuesta de S/A
• Los módulos analógicos se parametrizan off-line con el STEP 7• Algunos parámetros pueden modificarse también en el programa de usuario por medio de
las SFC 55, SFC 56 y SFC 57.• Hay que distinguir entre:
• parámetros estáticos. Se ajustan con el aparato de programación • parámetros dinámicos. Se ajustan con el aparato de programación o SFC 55
• habilitaciones de alarma (del proceso, de diagnóstico) (dinámico)• alarmas de valor límite (límite superior, límite inferior) (dinámico)• alarmas de diagnóstico (colectivo, detección rotura de hilo) (estático)• medida (tipo, margen, supresión frecuencias perturbadoras) (dinámico)
Propiedades Parametrizables de Canales de Entrada
• habilitaciones de alarma (de diagnóstico) (dinámico)• alarma de diagnóstico (colectivo) (estático) • valores de sustitución (comportamiento en STOP de la CPU) (dinámico)• salida (tipo, margen de salida) (dinámico)
Propiedades Parametrizables de Canales de Salida
Parámetros de los Módulos Analógicos
Configuración de las Tarjetas Analógicas
• La función de diagnóstico permite determinar si los valores analógicos se han tratado sin errores, y en caso contrario, qué error ha aparecido.
• El diagnóstico se parametriza con el STEP 7• La evaluación se realiza si está habilitada la función de diagnóstico• Los mensajes de diagnóstico evaluados provocan las siguientes acciones:
• indicación luminosa en módulo analógico. • transmisión de mensaje de diagnóstico a la CPU• activación de alarma de diagnóstico (sólo si esta habilitada)
Diagnosis de los Módulos Analógicos
Mensajes deDiagnósticopara EntradasAnalógicas
Mensajes deDiagnósticopara SalidasAnalógicas
• Los módulos analógicos tienen la capacidad de emitir alarmas • Se distinguen dos tipos de alarmas:
• alarma de diagnóstico• alarma de proceso
• Las alarmas se parametrizan con el STEP7• Por defecto están bloqueadas
• Cuando se detecta un fallo o desaparece éste, el módulo emite una alarma de diagnóstico siempre que esté habilitada
• La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de tratamiento de alarma de diagnóstico OB 82
Alarma de Diagnóstico
Alarmas de los Módulos Analógicos (I)
• La parametrización de los límites superior e inferior define un margen de trabajo• Cuando la señal de proceso abandona dicho margen, el módulo activa una alarma de
proceso siempre que esté habilitada• La CPU interrumpe el tratamiento del programa de usuario y procesa el módulo de
tratamiento de alarma de proceso OB 40• Para detectar qué canal ha rebasado el límite consultar información del byte 4 de la
información adicional de alarma de proceso del OB 40
Alarma de Proceso
Alarmas de los Módulos Analógicos (II)
El bus P (bus periférico) permite acceder directamente a los valores analógicoscomo entradas desde el campo o como salidas al campo.Al bus periférico se puede acceder en formato de byte, palabra y doble palabra
Procesamiento de Valores Analógicos en S7
LT
Sensor de NivelPIW 288
Nivel alto
Nivel bajo
Tratamiento de Señales Analógicas
1000 L
0 L
Tarjeta de Entradas Analógicas
PIW 288 = +10960
Valor después de la conversión A/D
0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0
Cuando la tarjeta de entradas analógicasrecibe desde campo una señal de tensión ocorriente, la tarjeta convierte la señal a unvalor binario (A/D) al que puede acceder elprograma de CPU a través del bus P.
Conversión de Señales Analógicas de Entrada
• STEP7 permite ver o usar valores analógicos tanto de entrada como de salida en múltiples formatos numéricos. La tabla de variables de abajo muestra: PIW288 y PIW290 (entradas analógicas) como dec, hex, bin.
Presentación de Valores Analógicos
Tarjeta de Salidas Analógicas
CPU -> Tarjeta AnalógicaL +13824T PQW 304
Cuando el programa de CPU envía un valor ala tarjeta de salidas analógicas a través delbus P, la tarjeta ejecuta la conversión D/A.El resultado de la tarjeta es una variación envoltaje o intensidad, que se usa para el controlde dispositivos externos de campo.
Flujo de control
Válvula de posición variable
Suponiendo tarjeta de salida analógica de 0 a +10 Vpara el valor digital 13824, después de la conversión D/A debe sacar 5 V.
Conversión de Señales Analógicas de Salida
LT
Sensor deNivelPIW 288
Nivel alto: 9 voltios ó 24883
Nivel bajo:1 Voltio ò 2765
Q 4.0Válvula de llenado
Q 5.7Válvula de drenaje
- Si sensor de nivel menos de 1 V. --> abrir válvula de llenado- Si sensor de nivel más de 9 V. --> abrir válvula de drenaje
L PIW 288L 24883>=I= Q 5.7
L PIW 288L 2765<=I= Q 4.0
Valores Analógicos para Observación de Alarmas
• Cuando las características del dispositivo de campo analógico tiene un 20% offset o “puesta a cero”, se hace necesario un offset del valor analógico en la CPU para compensar.
PIW 288sensor denivel:midiendoun valor de4 a 20 mA
20 mA
4 mA
+ 27648
+5530 (20% de rango)
1000 L
0 L
Suponiendo un offset del 20%, el valor equivalente si tener en cuenta el offset es:(valor analógico medido - 20% del rango usado en la CPU) x 125 / 100Ejemplo: Para PIW 288 = 16.589, el valor representa:(16.589 - 5530) x 1.25 = 13.824, que representan un volumen del 50% del tanque
Uso del Offset con Señales de Entrada Analógicas
• Cuando las características del dispositivo de campo analógico tiene un 20% offseto “señala cero”, se hace necesario un offset del valor analógico en la CPU para compensar.
Salida PQW 304valor de 4 a 20 mA
Tarjeta de Salidas Analógicas
IP
Válvula deposicionamiento en 3 a 15 psi
Transductor de corriente a presión
Suponiendo un offset de salida del 20%, el valor que hay que enviar es:(valor de la señal analógica sin offset x 100) / 125 + 20 % del rango utilizableEjemplo: Para abrir la válvula a la mitad:PQW 304 = ( (MW 20 x 100) / 125) + 5530, Donde MW 20 = 27648/2=13824
Uso del Offset con Señales de Salida Analógicas
• El ajuste de los valores analógicos nos permite trabajar y comparar en las mismas unidades que la variable controlada, en vez de trabajar con los valores numéricos dados por la conversión A/D. Mediante ecuaciones matemáticas, se puede usar unidades de ingeniería tales como grados, metros, gramos, litros......
Ajuste de Valores Analógicos
-100 grados-276480 litros0 grados0
500 litros100 grados+27648
NivelRango unipolar
TemperaturaRango bipolar
Rango Nominal de la Conversión
• Para calcular el valor ajustado de una señal unipolar, se usa la siguiente ecuación:
Valor ajustado = (Medida de la entrada PV x PV medido en unidades de ingeniería / rango de CPU) + PV offset
+27648
0
Rango de CPU(unipolar)0 -> +27648
400 L
0 L
Rango deseado enunidades de ingeniería0 -> 400 L
Ajuste:MD10 = (PIW 288 x 400) / 27648
Si el recipiente está al 50 %, elvalor analógico de entrada dePIW 288=+13824 ;MD10 igual a 200.
PIW 288
Ejemplo:
Ajuste de Valores Analógicos Unipolares
in PV INT 0 Palabra de la E/A medidoin PV_Superior REAL 0 Límite superior del rango en unid. ing.in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.out Valor_Graduado REAL 0 Resultado del valor graduadotemp PV_Real REAL 0 PV convertido a valor realtemp Rango_Ing REAL 0 PV_Superior - PV_Inferior
L #PV //Carga el valor medido dela E/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº real
L #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #Rango_Ing
L #PV_Real //Entrada analógica en formato de nº realL 2.764800e+04 //Cargar rango de CPU para la conversión (+27648)/R //DivideL #Rango_Ing //Cargar rango en unidades de ingeniería*R //MultiplicarL #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV+R //SumarT #Valor_Graduado //Resultado final
Segmento 1
Segmento 2
Segmento 3
FC 28
Función de Ajuste de Valores Analógicos Unipolares
Para calcular el valor ajustado del 20 % offset de una señal unipolar, use la siguiente ecuación:Valor ajustado con 20% offset = ((Medida de la entrada analógica PV - 20% del rango de la CPU) x PV medido en / rango de CPU - 20%) + PV offset
+27648
+5530
Rango de CPU(unipolar)
+5530 -> +27648
200 L
0 L
Rango deseado enunidades de ingeniería0 -> 200 L
Ajuste:MD20 = ((PIW 288 - 5530) x 200) /
22118
Si el recipiente está al 50%, laentrada analógica dePIW 288=+16589 ;MD20 igual a 100.
PIW 288Ejemplo:
Ajuste del Offset de Valores Analógicos Unipolares
in PV INT 0 Palabra de la E/A medidain PV_Superior REAL 0 Límite superior del rango en unid. ing.in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.out Valor_Graduado_20 REAL 0 Valor graduado resultante del offset 20%temp PV_Real REAL 0 PV convertido a valor realtemp PV_Real_20 REAL 0 PV_Real offset por 20%temp Rango_Ing REAL 0 PV_Superior - PV_Inferior
L #PV //Carga del valor medido dela E/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº realL #PV_Real //L 553000e+03 //Cargar 20% del rango de conversión de la CPU (5530)-RT #PV_Real_20 //Almacenar el valor real del offset del PVL #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #Rango_IngL #PV_Real_20 //Cargar valor real PV con offset 20% del rango de CPUL 2.211800e+04 //Cargar rango de CPU menos 20%(27648-5530)/R //DivideL #Rango_Ing //Cargar rango en unidades de ingeniería*R //MultiplicarL #PV_Inferior //Cargar el PV_Inferior para calcular el offset PV+R //SumarT #Valor_Graduado //Resultado final
FC 29
Función Ajuste del Offset de Val. Analóg. Unipolares
• Para calcular el valor ajustado de una señal bipolar, se usa la siguiente ecuación: Valor bipolar ajustado = (Medida de la entrada PV x PV medido / rango de CPU x2) + Medio rango PV
Ajuste:MD30 = (PIW 288 x 100) / 55296
Si la entrada analógica PIW 288 medida +13824 , MD30 = +25+27648
-27648
Rango de CPU(bipolar)
de -27648 a +27648
+ 50 grados
-50 grados
Rango deseado enunidades de ingenieríade -50 a +50 grados
PIW 288medida del sensor de temperaturade +10 a -10V
Ejemplo:
Ajuste de Valores Analógicos Bipolares
in PV INT 0 Palabra de la E/A medidoin PV_Superior REAL 0 Límite superior del rango en unid. ing.in PV_Inferior REAL 0 Límite inferior del rango en unid. ing.out Valor_Graduado_Bi REAL 0 Resultado del valor graduadotemp PV_Real REAL 0 PV convertido a valor realtemp PV_Mid REAL 0 (PV Superior-PV Inferior) / 2 +PV Inferiortemp Rango_Ing_Bi REAL 0 PV_Superior - PV_InferiorL #PV //Carga del valor medido dela E/AITD //Convierte de entero a entero dobleDTR //Convierte de entero doble a realT #PV_Real //Valor analógico de entrada en formato nº realL #PV_Superior //Rango en unidades de ingenieríaL #PV_Inferior-RT #Rango_Ing_Bi //Variable PV medio rango L #Rango_Ing_Bi //L 2.00000e+00 ///R //L #PV_Inferior+R //T #PV_Mid //Almacena la variable PV medio rangoL #PV_Real //Cargar valor real PVL #Rango_Ing_Bi //Cargar rango en unidades de ingeniería bipolares*R //MultiplicarL 5529600e+4 //Cargar el rango de CPU bipolar (27648 x 2)/R //L #PV_Mid //Cargar la variable PV rango medio+R //SumarT #Valor_Graduado_Bi //Resultado final
FC 34
Función de Ajuste de Valores Analógicos Bipolares
• Con el uso de un módulo de ajuste, tal como un FC, el OB1 puede llamar el módulo y pasar los parámetros para resolver el ajuste del valor. En este ejemplo, un sensor de temperatura mide un rango de 0 a 100 grados (conectado a la PIW 288).
FC28
PV
PV_Superior
PV_InferiorValor_Graduado
PIW288
100
0
inininouttemptemp
PVPV_SuperiorPV_InferiorValor _AjustadoPV_RealRango_Ing
INTREALREALREALREALREAL
OOOOOO
FC28
MD10
Segmento 1:Convierte un valor analógico de entradaa real
Segmento 2:Determina el rango en unidades de ingeniería
Segmento 3:Ajuste del valor analógico
Llamada a Módulos y Ajuste de Valores
FC 105 SCALE: Escalar valores
Lectura y Normalización de un Valor Analógico