Almacenamiento de Datos en un DB Indice Pág. Tipo de Datos Simples en STEP 7 ....................................................................................................... 2 Areas de Almacenamiento de Datos .................................................................................................... 3 Visión Global de Tipos de Datos en STEP 7 ....................................................................................... 4 Tipo de Datos Simples en STEP 7 ....................................................................................................... 5 Tipo de Datos Complejos ………........................................................................................................... 6 Ejemplo de una Estructura ................................................................................................................... 7 Ejemplo de un Array .......................................................................................................................... 8 Creando un Nuevo Bloque de Datos .................................................................................................. 9 Introducir, Guardar, Cargar y Observar un Bloque de Datos ................................................................ 10 Direccionando los Datos de un DB ...................................................................................................... 11 Acceso a los Datos .............................................................................................................................. 12 Validación de un DB Abierto .............................................................................................................. 13 Tipo de Datos Definidos por el Usuario (UDT) ..................................................................................... 14 Introduciendo un Bloque UDT .............................................................................................................. 15 Creando un DB a partir de un UDT ...................................................................................................... 16 Ejemplo: Array de UDTs ....................................................................................................................... 17 Ejercicio: Programa de Planta de Embotellado - Almacenamiento de Datos - .................................... 18
Areas de Almacenamiento de Datos Bloques de Datos DBx DBy DBz . Bit de Marcas PAE L stack PAA Area I/O Visión Global Además de los bloques programables, los programas de usuario se componen de datos que contienen información acerca de los estados del proceso, señales, etc..., los cuales son procesados según las instrucciones del programa de usuario. Los datos son alamacenados en variables de usuario, las cuales se identifican por: • Lugar de Alamacenamiento (dirección: P, PAE, PAA, bit de marcas, L stack, DB) • Tipo de dato (simple, complejo, parámetro) Hay que hacer una distinción, dependiendo del tipo de accesibilidad: • Variables Globales: Se declaran en la Tabla de Símbolos o en un DB Global • Variables Locales: Se declaran en la zona de declaración de los OBs, FBs y FCs. Las variables pueden permanecer almacenadas de forma permanente en la imagen de proceso, bit de marcas o en un DB, o pueden ser creadas dinámicamente en la L stack, cuando se ejecute un módulo. Pila de Datos Locales La Pila de Datos Locales (L stack) es un área de almacenamiento para: • variables temporales de un bloque lógico, incluyendo la información de arranque de un OB • parámetros que se deben pasar al llamar a una función • resultados lógicos intermedios en programas realizados en KOP Este tema es tratado en el capítulo "Funciones y Bloques de Función". Bloques de Datos Son utilizados por los bloques lógicos como zona de almacenamiento de las variables de un programa. A diferencial de los datos temporales, los datos en un DB no se sobreescriben durante la ejecución de un bloque lógico o cuando se cierra un DB.
Bloques de Datos (DBs) Accesible todos los módulos Función FC10 OB1 Datos Globales DB20 Accesible todos los módulos Función FC10 OB1 Función FC20 DB de Instancia DB5 DB de Instancia del FB1 Bloque de Función FB1 Visión Global Los Bloques de Datos se utilizan para almacenar datos.Al igual que los bloques lógicos, los DBs ocupan espacio en la memoria de usuario. Los DBs contienen datos variables (p.e. valores numéricos) que son utilizados en el programa de usuario. El programa de usuario accede a los datos de un DB a nivel de bit, byte, palabra o doble palabra. Puede hacerlo de manera simbólica o absoluta. Usos Los DBs se pueden utilizar de diferentes maneras, dependiendo de su contenido. Se puede distinguir entre: • DBs Globales: Contienen la información a la que puede accederser desde cualquier bloque lógico en el programa de usuario. • DB de Instancia: Son siempre asignados a un FB. Los datos en cada DB de Instancia sólo pueden utilizarse en el FB donde han sido asignados. Los DBs de Instancia son tratados con más detalle en el capítulo "Funciones y Bloques de Función“. Creando DBs Se pueden crear DBs Globales utilizando el Editor de Programas o a través de un “Tipo de Datos Definido por el Usuario“ (UDTs) ya generado. Los DBs de Instancia se crean cuando se llama a un FB con la instrucción “Call“. Registros La CPU tiene dos registros de bloques de datos: el DB y el DI. Por lo tanto, se pueden tener dos DBs abiertos al mismo tiempo. Para más información, remitirse a un curso de nivel avanzado.
Visión Global de Tipos de Datos en STEP 7 • Bit de datos (BOOL, BYTE, PALABRA, DOB. PAL., CHAR) • Matemáticos (INT, DINT, REAL) • Tiempo (S5TIME, TIME, DATE, TIME_OF_DAY) Tipos de Datos Simples (hasta 32 bits) • Time (DATE_AND_TIME) • Array (ARRAY) • Structura (STRUCT) • Cadena de Caracteres (STRING) Tipos de Datos Complejos (más de 32 bits) Visión Global Los tipos de datos determinan las propiedades de dicho dato, esto es, la forma en la que el contenido es representado y el rango de valores permisible. El tipo de datos determina además las operaciones disponibles para dicho tipo. Tipo de Datos El tipo de datos Simple son predefinidos de acuerdo con el IEC 1131-3. Simples Determinan la cantidad de espacio de memoria requerida. Por ejemplo, una palabra de datos ocupa 16 bits de memoria de usuario. El tipo de datos Simple nunca exceden de 32 bits, ya que esta es la longitud máxima de los acumuladores en un S7, y el máximo tamaño con el que puede trabajar una instrucción en STEP 7. Tipos de Datos El tipo de datos Complejo sólo se puede utilizar junto con variables declaradas Complejos en DBs globales. El tipo de datos complejo no se pueden carcar completamente en los acumuladores. Para poder procesar los datos complejos, se utilizan librerías estándar ("IEC" S7 Program). Tipos de Datos El tipo de datos definidos por el usuario (UDTs)se pueden utilizar en un bloque Definidos por de datos o como un tipo de datos en una tabla de declaración de variables. el Usuario Los UDTs se crean con el Editor de DBs. La estructura de un UDT puede contener grupos de datos simples y/o datos complejos. UDT (User Defined Type) Tipos de Datos de Usuario (más de 32 bits)
Tipo de Datos Simples en STEP 7 Sintaxis Long. (en bits) Ejemplo de definición de un valor BOOL 1 1 or 0 BYTE 8 B#16#A9 PALABRA 16 W#16#12AF D. PALABRA 32 DW#16#ADAC1EF5 CHAR 8 ' w ' S5TIME 16 S5T#5s_200ms INT 16 123 DOBLE INT 32 65539 REAL 32 1.2 or 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 BOOL, BYTE, Las variables tipo BOOL consisten en un bit, las de tipo BYTE, PALABRA y PALABRA Y DOBLE DOBLE PALABRA se componen de 8, 16 y 32 bits respectivamente. Los bits PALABRA individuales no se evaluan en esos tipos de datos. Un tipo especial de datos es los números en BCD, el valor de contaje de una función de contaje y el tipo CHAR (representa un carácter del código ASCII). S5TIME Son variables que se requieren para especificar el tiempo de temporización de un Temporizador (son el equivalente a las constantes de temporización del S5). El tiempo se especifica en horas, minutos, segundos o milisegundos. Se pueden introducir los valores con un guión bajo (1h_4m) o sin guión bajo (1h4m). Las funciones FC 33 y FC 40 de la librería de conversión, convierten el formato de tiempo S5TIME a formato TIME y el formato TIME a S5TIME, respectivamente. INT, DINT, REAL Estos tipos de variables representan números que pueden ser utilizados en operaciones matemáticas. TIME Una variable tipo TIME ocupa una doble palabra. Esta variable se utiliza, por ejemplo, para especificar valores de temporización en funciones de tiempo IEC. El contenido de la variable se interpreta como un valor Doble Entero (DINT), pudiendo ser positivo o negativo (p.e.: T#1s=L#1 000, #24d20h31m23s647msw = L#214748647). DATE A variable of data type DATE is stored in a word in the form of an unsigned integer. The contents of the variable represent the number of days since 01.01.1990 (e.g.: D#2168-12-31 = W#16#FF62). TIME_OF_DAY Una variable tipo TIME_OF_DAY ocupa una doble palabra. Contiene el número de milisegundos desde que comenzó el día (0:00 en punto) en formato de Entero sin signo (p.e.: TOD#23:59:59.999 = DW#16#05265B77).
Tipo de Datos Complejos Sintaxis Long. (en bits) Ejemplo DATE_AND_TIME 64 DT#97-09-24-12:14:55.0 STRING 8 * (número de ´Esto es una Prueba´ (Cadena de valores tipo char, con long. Máx. 254) caracteres +2) ´SIEMENS´ ARRAY Definido por el ARRAY[1..20] (Grupo de elementos de un Usuario INT mismo tipo de datos) STRUCT Definido por el Motor: STRUCT (Grupo de elementos de Usuario Speed : INT diferentes tipos de datos) Current: REAL END_STRUCT UDT (User Defined Data Type = Definido por el UDT como módulo UDT como array “Plantilla" formada por Usuario tipos de datos simples o complejos REAL END_STRUCT Tipos de Datos Los tipods de datos complejos (arrays y estructuras) se componen de grupos de Complejos grupos de datos simples o incluso de grupos de datos complejos. Permiten crear tipos de datos que se adapten a un problema determinado, pudiendo almacenar grandes cantidades de datos y procesarlos de manera simbólica. Los tipos de datos complejos no pueden procesarse todos de una vez con instrucciones de STEP 7 (el límite está en 32 bits), sino que se hace elemento a elemento. Los datos complejos son predefinidos. Mientras que los tipos DATE_AND_TIME tienen una longitud de 64 bits, la longitud de los tipos ARRAY, STRUCT y STRING son determinados por el usuario. Las variables complejas sólo pueden ser declaradas en DBs globales y como parámetros o variables locales de bloques lógicos. Tipos de Datos Los tipos de datos definidos por el usuario representan una estructura Definidos por autodefinida. Se almacenan en bloques UDT (UDT1 al UDT65535) y se pueden el Usuario utilizar como “plantilla“ para definir otros tipos de datos complejos. A través de una “plantilla“, el usuario puede ahorrarse el tener que teclear la misma estructura varias veces. Ejemplo: Se necesita introducir una misma estructura en un DB 10 veces. Primero se define la estructura y se guarda, por ejemplo, en el UDT 1. En el DB 10, se define la variable “Recetas" como una array de 10 elementos de tipo UDT 1: Recetas array[1..10] UDT 1 En definitiva, se han creado 10 registros con la estructura previamente definida en el UDT 1 y sin tener que teclearlos todos en el DB 10.
Ejemplo de una Estructura Motor_data Velocidad, tipo de datos Entero Estructura con el nombre "Motor_data" (varios elementos con diferentes tipos de datos) Corriente Consumida, tipo de datos Real Corriente de arranque, tipo de datos Real Sentido de Giro, tipo de datos Bool Visualización en el Editor de Programa (Bloque de Datos DB 1): Estructura La figura muestra un ejemplo de estructura, con el nombre de "Motor_data". La estructura se compone de varios elementos de diferentes tipos de datos. Los elementos que componen una estruuctura pueden ser simples y/o complejos. Para acceder de manera individual a cada uno de los elementos de la estructura, se hace a través del nombre de dicha estructura, lo cual lo hace más fácil de comprender. Para poder acceder a los elementos de forma simbólica, el DB debe suministrarse también en su forma simbólica. Algunos ejemplos de acceso para el DB “Drive_1": L “Drive_1".Motor_data.rated_current o L “Drive_1".Motor_data.operating_speed “Drive_1" es el nombre simbólico del DB que contiene la estructura. El nombre de la estructura se coloca a continuación (y separado por un punto) del nombre del DB. Después de otropunto de separación, se escribe el nombre simbólico de l elemento de la estructura que se quiere consultar. Definir una La sintáxis en STEP 7 para definir una estructura es la palabra "STRUCT". El Estructura en un DB final de una estructura se determina con la palabra "END_STRUCT". Además, la estructura debe tener un nombre (en el ejemplo: "Motor_data").
Ejemplo de un Array Punto_de_Medida 1. Punto_de_Medida, tipo Real Array con el nombre de “Punto_de_Medida" (varios elementos con el mismo tipo de datos) • Visualización en el Editor de Programa (Bloque de Datos DB 2): Array Un array se compone de varios elementos del mismo tipo de datos. En el ejemplo de la figura, se puede ver el array "Punto_de_Medida" con 10 elementos de tipo REAL. Posteriormente, se almacenarán varios valores en ese array. Definir un Array La sintáxis en STEP 7 para definir un array es la palabra "ARRAY[n..m]". El en un DB primer (n) y el último (m) elemento de un array se determina entre corchetes. En el ejemplo, [1..10] significa 10 elementos. Por tanto, el primer elemento es el que tiene índice [1] y el último el de índice [10]. No obstante, si se quiere, en vez de [1..10], se podría poner, por ejemplo, [0..9] y funcionaría de la misma forma. Todo esto sólo afecta al acceso de los elementos. Nota Para crear un DB vacío, se define un array con el tipo de datos que se quiera. Ver Datos Para poder ver los valores almacenados en los diferentes elementos, seleccionar la opción de menú Ver -> Datos para cambiar de modo de visualización. En “Ver Datos“, encontrará los valores almacenados actualmente en la columna “Valor Actual".
Creando un Nuevo Bloque de Datos Editor de Programas Para abrir un DB ya existente o crear uno nuevo, se hace con el Editor AWL/KOP/FUP. Opción "Nuevo" Cuando se hace Click en el icono de "Nuevo“, se muestra la ventana de diálogo "Nuevo". Se selecciona el proyecto, el programa de usuario y se introduce un número de DB, por ejemplo el DB 4, en la casilla de “Nombre del Objeto“ (los DBs y todo módulo programable debe definirse como tipo objeto en la casilla de selección “Tipo de Objeto“). Al hacer Click en el botón de "OK“, aparece la ventana de diálogo "Nuevo Bloque de Datos". Ventana de Diálogo En esta ventana de diálogo, se selecciona el tipo de DB que se quiere crear: "Nuevo Bloque de Datos“ • DB (bloque de datos globales) • DB asociado a un UDT (crea un DB utilizando la misma estructura de un UDT ya creado) • DB asociado a un FB (crea un DB de Instancia para un FB). Este elemento se explica con más detalle en el capítulo "Funciones y Bloques de Función".
Introducir, Guardar, Cargar y Observar un Bloque de Datos Introduciendo Datos Para introducir los datos en un DB, seleccionar el primer registro vacío en la tabla, en la columna de "Nombre" e introducir el nombre del elemento. Utilizando la tecla “Tab“ se puede cambiar a otras columnas ( Tipo, Valor Inicial, y Comentario). Columnas El significado de cada columna es el siguiente: • Dirección - lo introduce el Editor de Programas al pulsar la tecla “Enter“. Representa el primer byte ocupado por la variable en el DB. • Nombre - nombre simbólico del elemento. • Tipo - tipo de datos (se selecciona con el botón derecho del ratón). • Valor Inicial - se utiliza para establecer un valor inicial en un elemento. Si no se introduce nada en esta columna, el elemento se inicializará con un valor de “0“. • Comentario - para documentar el elemento (opcional). Guardar Utilizando el icono de "Diskette“, se guardan las modificaciones en el disco duro de la programadora. Cargar Al igual que los bloques lógicos, los DBs se pueden cargar en la CPU. Observar Para observar un los valores de un DB determinado, primero hay que cambiar al modo de visualización de datos en "Ver Datos". Se utiliza el icono de las “gafas“ de la barra de herramientas para poder observar.
Direccionando los Datos de un DB 8 Bits 7 Byte de Datos 0 DBB 0 Byte de Datos 1 DBW 0 Byte de Datos 2 DBD 0 Byte de Datos 3 DBX 4.1 Byte de Datos 8191 DBD 8188 DBW 8190 DBB 8191 General Se pueden direccionar los elementos de un DB byte a byte, al igual que en las marcas de memoria. Se pueden cargar y transferir tamaños de datos byte, palabra o doble palabra. Al utilizar palabras de datos, sólo se especifica el byte alto de la palabra (p.e. L DBW 2). Los dos bytes son cargados en el acumulador. En el caso de doble palabra, se cargan 4 bytes en el acumulador y se especifica también con el byte alto. Número, Longitud El número de DBs depende de la CPU que se esté utilizando. La longitud máxima de un DB es de 8KByte en el S7-300 y de 64KByte en el S7-400. Nota Si se intenta acceder a un elemento que no existe en un DB, la CPU pasará automáticamente a STOp, siempre y cuando no se haya codificado el correspondiente OB de error.
Acceso a los Datos Acceso Completo Acceso Tradicional DB 19 (Nombre del Símbolo: Values) absoluto simbólico AUF DB19 U DBX 0.0 1) o AUF DB19.DBX0.0 o AUF “Values".Start 1 2 3 4 5 6 7 8 9 AUF DB19 L DBW2 Número o L DB19.DBW2 o L “Values".Número AUF DB19 L DBB5 Bucle o L DB19.DBB5 o L “Values".Bucle Abrir un DB La instrucción “AUF DB..." abre un DB global. Si el DB global ya se encuentra abierto de antemano, se cierra de manera DB (e.g: “Values"), dicho DB puede ser abierto a través de direccionamiento simbólico con la instrucción AUF “Values" . Acceso a un DB Las instrucciones para acceso de lectura (carga) y escritura (transferencia) se muestran en la figura de arriba. Si el DB ya está abierto, basta con la carga o transferencia directa del elemento. La instrucción combinada, por ejemplo L DB19.DBW2, incluye ya la apertura del DB, con lo que la instrucción AUF ya no es necesaria. Acceso Simbólico El acceso simbólico sólo es posible cuando se cumplen los siguientes requisitos: 1. Se le asignó un nombre simbólico al DB en la tabla de símbolos. 2. Se asignaron nombres simbólicos a cada uno de los elementos del DB en el Editor KOP/AWL/FUP. Ejemplo: La instrucción L “Valores".Número, abre el DB con el nombre ‘Valores' y carga el elemento de datos cuyo nombre es ‘Número'. Nota Como recomendación, se utilizará el acceso simbólico por lo siguiente: • el programa es más fácil de seguir, • garantiza un correcto acceso a los datos del DB, • es más fácil hacer modificaciones en la estructura del DB a posteriori. Con el acceso absoluto, se tienen que corregir todas las direcciones de comienzo en el programa. Con el acceso simbólico no hace falta cambiarlas todas (solo las modificadas). Data bit 0.0 with the element name "Start" 1)
Validación de un DB Abierto OB 1 FC 1 DB 4 CALL FC 1 T DBW 4 AUF DB 4 L DBW2 DB 4 T DBW 8 CALL FC 2 FC 2 DB 5 DB 5 AUF DB 5 L DBB6 DB 6 AUF DB 6 L DBB6 T DBW 2 DB 4 DB 5 L DBW 0 DB 2 T DB2.DBB 0 DB 2 L DBW 4 FB 1 CALL FB1, DB1 ??? ! Introducción Un DB abierto permanece activo hasta que se abra otro DB distinto o se utilice una instrucción de acceso combinado (p.e. L DB4.DBW6). Llamada a un FC Si se interrumpe la ejecución de un OB o un FC por que se ha saltado a otro bloque FC, el DB actual permanece vigente. Cuando se vuelve al OB o FC llamante, el DB que se encontraba abierto en el momento en que se salió del módulo, vuelve a abrirse. Llamada a un FB La llamada a un FB es diferente. Un FB siempre tiene asignado un DB de Instancia (ver capítulo "Funciones y Bloques de Función“ para más información). Al llamar a un FB, su DB de Instancia se abre de manera automática. Cuando se retorna al módulo llamante, el DB que había sido abierto en dicho módulo ya no está vigente. Esto implica que, tras llamar a un FB, el DB global debe volver a abrirse. Nota Se puede abrir un DB con la instrucción “AUF“ (p.e. AUF DB 1). Pero también se puede abrir un DB, referenciando la dirección del elemento al que se quiere acceder (p.e. "DB 4.DBW6",). Recomendacion: Siempre que sea posible, utilizar el direccionamiento simbólico. L DBW 10 DB ??
Tipo de Datos Definidos por el Usuario (UDT) UDT como Plantilla DB Global (Ejemplo) Harina Leche Huevos Levadura Azucar Receta 1 Harina Leche Huevos Levadura Azúcar Array con 3 elementos de tipo UDT Receta 2 Harina Leche Huevos Levadura Azúcar Harina Leche Huevos Levadura Azúcar DB creado con respecto a la UDT Receta 3 Harina Leche Huevos Levadura Azúcar Utilización El tipo de datos definido por el usuario se utilizan para: • crear DBs estructurados, • crear arrays que contengan varias veces una misma estructura, • crear variables locales en un FC, FB a partir de una estructura ya dada (ver el capítulo "Funciones y Bloques de Función"). Los tipos de datos definidos por el usuario se almacenan en el disco duro de la PG como UDTs. Se utilizan como “plantillas", para evitar el tener que volver a escribirlos al generar un nuevo DB con la misma estructura. Tipo de Datos Los UDTs se componen de tipos de datos simples, compuestos e incluso de Definidos por otros UDTs. El Usuario Estos tipos de datos no se pueden almacenar en la CPU del PLC. Ejemplo: Alamacenar datos en una Receta (ver páginas siguientes).
Introduciendo un Bloque UDT Introduciendo un Se puede crear un UDT en el Editor KOP/AWL/FUP a través de la opción de Tipo de Datos menú Archivo - > Nuevo y asignando como nombre de objeto: UDT.. . Se introduce la estructura de datos que se desee. Se deben rellenar los campos "Nombre" y "Tipo", siemdo los campos “Valor Inicial" y “Comentario" opcionales (se puden dejar en blanco). Guardando un Finalmente, se guarda la estructura de datos (haciendo Click en el icono de Tipo de Datos “Guardar“).
Creando un DB a partir de un UDT Creando un DB Cuando se haya definido un tipo de datos y se haya guardado como bloque UDT, se pueden obtener varios bloques de datos con la misma estructura que la del UDT. Cómo hacerlo 1. Seleccionar la opción de menú Archivo - > Nuevo en el Editor de Programas 2. Seleccionar el proyecto, programa de usuario y un DB. 3. Activar la opción de "DB asociado a un UDT". 4. Seleccionar el UDT que se desee en la ventana de “Asignación". 5. Guardar el DB.
Ejemplo: Array de UDTs Vista de la Declaración Vista de los Datos Ejemplo Si se necesita utilizar la misma estructura de datos varias veces en un mismo DB, se puede utilizar un array de UDTs, por ejemplo. Si se ha asignado el nombre simbólico de “Tarta“, un acceso simbólico en el programa de usuario podría ser: L “Tarta".Receta[2].Huevos Carga el “Número de Huevos" desde la segunda receta del DB “Tarta“. Notas Se tiene que cambiar al modo de visualización de datos para poder cambiar la cantidad de los ingredientes. Se puede cambiar los valores iniciales en la columna de “Valor Actual“ con las cantidades deseadas. Para cambiar la estructura de un UDT a posteriori, se tienen que volver a crear todos los DBs que contengan al UDT cambiado en alguna parte de la estructura. Además, deben actualizarse todos los accesos a este DB. La forma más fácil de hacer todo esto es a través de un programa fuente. Se puede asignar nombres simbólicos a un UDT.
Ejercicio: Programa de Planta de Embotellado - Almacenamiento de Datos - Bloque de Datos DB5 Botellas Vacías (MW 100) Variable: vacío Botellas Llenas (MW102) Variable: lleno Botellas “Rotas" (MW 104) Variable: roto Objetivo En el ejercicio de almacenamiento de datos de producción (botellas llenas, vacías y rotas), estos datos se guardaban en palabras de marcas. Esas palabras de marcas no eran remanentes, con lo cual se podían perder todos los datos de producción al rearrancar el sistema. Para evitar que ocurra esto, se almacenarán los datos de producción en un DB. Cómo hacerlo 1. Crear un DB 5 en el programa “LLENADO“, que contenga las variables especificadas en el fichero INI. 2. Cambiar el FC 18 block de forma que los datos de producción (botellas llenas, vacías y rotas) se guarden en el DB 5, en vez de en palabras de marcas de memoria. 3. Cargar todos los bloques en el PLC y probar el resultado en el entrenador. Resultado Debería funcionar.