Início / Descargas / Siemens / Software & Programacion / Direccionamiento Indirecto S7-1200 y S7-1500

Direccionamiento Indirecto S7-1200 y S7-1500

  • Publicado: 13 Enero 2015
  • Siemens
  • Leído Visto: 15953 veces

 

El ejemplo de programación con un autómata Siemens S7-1500 (también es valido para S7-1200) muestra como trabajar con direccioamiento indirecto dentro de un ARRAY 

Para ello se simulará el registro de temperatura de un proceso, almacenando la temperatura en un DB Array

¿Que es un direccionamiento indirecto?

Mediante esta función podemos acceder a diferentes áreas de memoria de una manera indirecta inidicada por un índice o puntero. Este tipo de direccionamiento nos puede llegar a ahorrar muchas lineas de programa sobre todo cuando trabajamos moviendo datos.

Si por ejemplo queremos mover un valor a diferentes puntos de una variable array podemos hacer dos cosas:

DIRECCIONAMIENTO DIRECTO

Creamos una función MOVE para mover el valor a cada uno de los punto de la variable array

MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[1]

MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura[2]

DIRECCIONAMIENTO INDIRECTO

Creamos una sola función MOVE en donde moveremos el valor a donde nos indique el valor de la variable "Puntero"

MOVE "Temperatura" a "Temperatura" a Registro_Temperatura".Temperatura["Puntero"]

Si "Puntero" =3 moveremos "Temperatura" a Registro_Temperatura".Temperatura[3]
Si "Puntero" =8 moveremos "Temperatura" a Registro_Temperatura".Temperatura[8]

De esta forma cambiando el valor de "Puntero" podemos acceder con misma función MOVEa cualqueir punto del Array

Programación del Ejemplo

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

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

Este sería el programa del PLC

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

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


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

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

Aquí podemos ver la tabla del Array y sus registros

 

 Descarga proyecto ejemplo para TIA Portal v13: 2219_infoPLC_Direccionamiento_Indirecto.rar