9 Programación autómatas Siemens.
Suma 2 al acumulador para señalar a la siguiente dirección de palabra.
MOVW *AC1, AC0
Transfiere a AC0 el valor de palabra al que se señala el puntero AC1 (VW200)
formato de memoria CPU 221 CPU 222 CPU 224 CPU 226 IB 0 ‐ 15 0 ‐ 15 0 ‐ 15 0 ‐ 15 QB 0 ‐ 15 0 ‐ 15 0 ‐ 15 0 ‐ 15 MB 0 ‐ 31 0 ‐ 31 0 ‐ 31 0 ‐ 31 SMB 0 ‐ 179 0 ‐ 299 0 ‐ 549 0 ‐ 549 SB 0 ‐ 31 0 ‐ 31 0 ‐ 31 0 ‐ 31 LB 0 ‐ 59 0 ‐ 59 0 ‐ 59 0 ‐ 59 AC 0 ‐ 3 0 ‐ 3 0 ‐ 3 0 ‐ 3 Palabra VW 0 ‐ 2046 0 ‐ 2046 0 ‐ 5118 V 1.22 0 ‐ 8190 V 2.00 0 ‐ 10238 XP 0 ‐ 5118 V 1.23 0 ‐ 10238 V 2.00 IW 0 ‐ 14 0 ‐ 14 0 ‐ 14 0 ‐ 14 QW 0 ‐ 14 0 ‐ 14 0 ‐ 14 0 ‐ 14 MW 0 ‐ 30 0 ‐ 30 0 ‐ 30 0 ‐ 30 SMW 0 ‐ 178 0 ‐ 298 0 ‐ 548 0 ‐ 548 SW 0 ‐ 30 0 ‐ 30 0 ‐ 30 0 ‐ 30 T 0 ‐ 255 0 ‐ 255 0 ‐ 255 0 ‐ 255 C 0 ‐ 255 0 ‐ 255 0 ‐ 255 0 ‐ 255 LW 0 ‐ 58 0 ‐ 58 0 ‐ 58 0 ‐ 58 AC 0 ‐ 3 0 ‐ 3 0 ‐ 3 0 ‐ 3 AIW 0 ‐ 30 0 ‐ 30 0 ‐ 62 0 ‐ 62 AQW 0 ‐ 30 0 ‐ 30 0 ‐ 62 0 ‐ 62 Palabra doble VD 0 ‐ 2044 0 ‐ 2044 0 ‐ 5116 V 1.22 0 ‐ 8188 V 2.00 0 ‐ 10236 XP 0 ‐ 5116 V 1.23 0 ‐ 10236 V 2.00 ID 0 ‐ 12 0 ‐ 12 0 ‐ 12 0 ‐ 12 QD 0 ‐ 12 0 ‐ 12 0 ‐ 12 0 ‐ 12 MD 0 ‐ 28 0 ‐ 28 0 ‐ 28 0 ‐ 28 SMD 0 ‐ 176 0 ‐ 296 0 ‐ 546 0 ‐ 546 SD 0 ‐ 28 0 ‐ 28 0 ‐ 28 0 ‐ 28 LD 0 ‐ 56 0 ‐ 56 0 ‐ 56 0 ‐ 56 AC 0 ‐ 3 0 ‐ 3 0 ‐ 3 0 ‐ 3 HC 0 ‐ 5 0 ‐ 5 0 ‐ 5 0 ‐ 5 9.20.- Variables locales.
La tabla de variables locales del editor de programas se puede utilizar para asignar variables que existan únicamente en una subrutina o en una rutina de interrupción individual
Las variables locales se pueden usar como parámetros que se transfieren a una subrutina, lo que permite incrementar la portabilidad y la reutilización de la subrutina.
Cada unidad de organización del programa tiene su propia tabla de variables locales con 64 bytes de la memoria L. Las tablas de variables locales permiten definir variables con ámbito limitado: una variable local sólo es válida en la unidad de organización del programa donde se haya creado.
En cambio, los símbolos globales, válidos en todas las unidades de organización del programa, sólo se pueden definir en la tabla de símbolos/tabla de variables globales. En los casos en que se pueda utilizar un mismo nombre simbólico tanto para un símbolo global como para una variable local, la definición local tiene prioridad en la unidad de organización del programa donde se haya definido la variable local, en tanto que la definición global se usa en las demás unidades de organización del programa.
En la tabla de variables locales se deben asignar un tipo de declaración (TEMP, IN, IN_OUT u OUT) y un tipo de datos. El editor de programas asigna automáticamente direcciones de la memoria L a todas las variables locales.
La asignación de direcciones simbólicas de una tabla de variables locales asocia un nombre simbólico a una dirección de la memoria L donde se guarda el valor de datos en cuestión.
La CPU no pone a "0" los valores de datos de las variables locales. Las variables locales utilizadas se deben inicializar en el programa.
9.20.1.- Tipos de declaración de las variables locales.
El tipo de variable local asignada depende de la unidad de organización del programa donde se efectúe la asignación.
El programa principal (OB1), las rutinas de interrupción y las subrutinas pueden utilizar variables temporales (TEMP). Las variables temporales sólo estarán disponibles mientras se está ejecutando el bloque, pudiéndose sobrescribir cuando se haya completado el mismo. Las subrutinas también pueden utilizar parámetros de llamada (IN, IN_OUT, OUT). Tipos de declaraciones:
• IN. Parámetro de entrada suministrado por la unidad de organización del programa invocante.
• OUT. Parámetro de salida devuelto a la unidad de organización del programa invocante.
• IN_OUT. Parámetro cuyo valor es suministrado por la unidad de organización del programa invocante, modificado por la subrutina invocada y devuelto luego a la unidad de organización del programa invocante.
• TEMP. Variable que se almacena temporalmente en la pila de datos locales. Cuando la unidad de organización del programa se haya ejecutado por completo, el valor de la variable temporal ya no se encuentra disponible. Las variables temporales no conservan su valor entre las ejecuciones de las unidades de organización del programa.
9.20.2.- Mostrar y ocultar la tabla de variables locales.
Si arrastramos la barra horizontal divisoria hacia el extremo superior de la ventana del editor de programas, la tabla de variables locales ya no se verá, aunque se encuentra todavía allí. Arrastraremos la barra divisoria hacia abajo para visualizar nuevamente la tabla de variables locales.
Resulta más eficiente efectuar asignaciones en la tabla de variables locales antes de utilizar las variables locales en el programa.
El límite máximo de parámetros de entrada/salida en cada llamada a subrutina es de 16. Si intentamos cargar un programa que exceda este límite, se devolverá un error.
9.20.3.- Introducir la primera asignación de una variable local.
Para efectuar una asignación en una tabla de variables locales, seguiremos los siguientes pasos:
1. Verificamos que en el editor de programas se visualice la unidad de organización del programa correcta. En caso necesario, haremos clic en la ficha correspondiente a la unidad deseada. (Puesto que cada unidad de organización del programa tiene su propia tabla de variables locales) 2. Si la tabla de variables locales está oculta, arrastraremos hacia abajo la
3. Seleccionamos una fila que tenga el tipo de declaración correcto para el tipo de variable que deseamos definir, y en la columna "Nombre", tecleamos el nombre de la variable. Si hacemos una asignación en el OB1 o en una rutina de interrupción, la tabla de variables locales contendrá únicamente variables TEMP. Si hacemos una asignación en una subrutina, la tabla de variables locales contendrá variables IN, IN_OUT, OUT y TEMP. No es necesario que introduzcamos un signo de número (#) antes del nombre en la tabla de variables locales. Las variables locales sólo deben ir precedidas de un signo de número en el código del programa.
Los nombres de las variables locales pueden contener máximo 23 caracteres alfanuméricos y de subrayado, incluyendo también el juego ampliado de caracteres (ASCII 128 a 255). El primer carácter debe ser una letra. No se permite utilizar palabras clave en calidad de nombres simbólicos.
Los nombres contenidos en la tabla de variables locales se cargan y se guardan en la memoria de la CPU. La utilización de nombres de variables largos podría reducir la capacidad de memoria disponible para almacenar el programa.
4. Situamos el puntero del ratón en el campo "Tipo de datos" y hacemos clic con objeto de seleccionar del cuadro de lista el tipo de datos apropiado para la variable local.
9.20.4.- Efectuar asignaciones adicionales en una tabla de variables locales. En las tablas de variables locales del OB1 y de las rutinas de interrupción se visualizan filas predefinidas con variables TEMP. Éste es el único tipo de declaración que se puede utilizar en el OB1 y en las rutinas de interrupción. Para agregar más filas a la tabla, haga clic en una celda de la última fila y pulse la tecla INTRO para desplazarse por esa fila y luego hacia abajo, donde se insertará automáticamente una nueva fila.
En las tablas de variables locales de las subrutinas se visualiza una serie de filas predefinidas con tipos de declaración en el siguiente orden: IN, IN_OUT, OUT y TEMP. Este orden no se puede modificar. Las variables locales deben tener en la tabla el mismo orden que utilizarán los correspondientes operandos cuando éstos se asignen a la operación de llamada a la subrutina. Si desea agregar variables locales adicionales, haga clic con el botón derecho del ratón en una fila existente y utilice el menú contextual para insertar otra variable local del mismo tipo que el de la fila donde ha hecho clic. Elija el comando de menú Insertar>Fila para insertar la nueva fila arriba de la fila seleccionada, o bien Insertar>Fila abajo para insertarla debajo.
9.20.5.- Tipos de datos.
Si se hacen asignaciones en una tabla de variables locales, se debe definir un tipo de datos para cada una de las variables locales.
Si se asigna explícitamente un tipo de datos a un valor, STEP 7-Micro/WIN recibe instrucciones precisas de cuánta memoria se debe poner a la disposición de ese valor (por ejemplo, el valor 100 se podría almacenar en calidad de BYTE, WORD (palabra) o DWORD (palabra doble)) y de cómo representar el valor (¿El valor 0 se debe tratar como valor BOOL (booleano) o como valor numérico?).
Tipos de datos simples
Tamaño del
tipo de datos Descripción Área
BOOL 1 bit Valor booleano 0 a 1
BYTE 8 bits Byte sin signo 0 a 255
BYTE 8 bits Byte con signo ‐128 a +127
WORD 16 bits Entero sin signo 0 a 65.535 INT 16 bits Entero con signo ‐32768 a +32767 DWORD 32 bits Entero doble sin signo 0 a 4294967295
DINT 32 bits Entero doble con signo ‐2147483648 a +2147483647 REAL 32 bits Valor de 32 bits en coma
flotante (IEEE)
+1,175495E‐38 a +3,402823E+38 ‐1,175495E‐38 a ‐3,402823E+38
STRING 2 a 255 bytes
Literal de constante ASCII almacenado en la memoria de la CPU como byte de longitud de 1 cadena seguido de bytes de datos ASCII
Caracteres ASCII 128 a 255
Tipos de datos
complejos Descripción Área
TON Temporizador con retardo al conectar 1ms T32, T96 10ms T33 a T36, T97 a T100 100ms T37 a T63, T101 a T255 TOF Temporizador con retardo al desconectar 1ms T32, T96 10ms T33 a T36, T97 a T100 100ms T37 ‐ T63, T101 ‐ 255 TP Temporizador por impulsos 1ms T32, T96 10ms T33 a T36, T97 a T100 100ms T37 ‐ T63, T101 ‐ 255
CTU Contador ascendente 0 a 255
CTD Contador descendente 0 a 255
Marcas especiales.
SM0.0 Siempre ON.
SM0.1 Primer ciclo.
SM0.2 Datos remanentes perdidos. SM0.3 Alimentación .
SM0.4 30 s OFF / 30 s ON . SM0.5 0,5 s OFF / 0,5 s ON. SM0.6 OFF 1 ciclo / ON 1 ciclo. SM0.7 Selector en posición RUN . SM1.0 Resultado de la operación = 0. SM1.1 Desbordamiento o valor no válido. SM1.2 Resultado negativo.
SM1.3 División por 0. SM1.4 Tabla llena. SM1.5 Tabla vacía.
SM1.6 Error de conversión de BCD a binario. SM1.7 Error de conversión ASCII a hexadecimal.