Direccionamiento Indirecto SIEMENS

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 MOVE a cualqueir punto del Array


Programación del Ejemplo


Lo primero que hacemos es crear una DB (Bloque de datos) a la que llamaremos "Registro_Temperatura".


Dentro de la DB creamos una variable que llamaremos "Temperatura" y será del tipo Array[1..10] of Int


Este sería el programa del PLC

## Borrado de Array y reinicio de puntero

- Al habilitar el registro mediante flanco ascendente de "Habilita_Registro" borramos todo el array con la función FILL_BLK 
- También reiniciamos el puntero (lo ponemos a 0)


## Temporización de registro

Al Habilitar el registro de datos "Habilita_Registro" lanzamos un temporizador cada 10 Seg que activara el bit "Flag_Registro" que realiza el registro de datos y reinicia el temporizador
De esta manera generamos cada 10 segundos un bit que realiza el registro de forma periódica


## Registro de datos e incremento de puntero

Al activarse el "Flag_Registro" realizamos dos cosas:
- Incremento del valor del "Puntero" con la instrucción INC
- Mover el valor de "Tenperatura" al Array "Registro_Temperatura" que nos marca el puntero


## Fin de registro

Comparamos el valor de "Puntero" con +10 (el tamaño del array) y si es igual a 10 ponemos a reset el bit "Habilita_Rgistro"
De esta forma tenemos 10 registro en el Array


Aquí podemos ver la tabla del Array y sus registros






Comentarios

Lo más leído del Blog

Explicación del Estado de la CPU y errores de LED Siemens S7 300

Introducción al PLC

Instrucciones de Bit