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
Publicar un comentario