Recientemente me he encontrado en la necesidad de mover datos consecutivos en Step 7.
Se trata de un acumulador, el cual tiene una serie de posiciones que se van llenando o vaciando. La forma de trabajar es el habitual FIFO (First In, First Out), es decir, la primea pieza que entra también es la primera pieza que sale.
La cuestión es que el acumulador tiene 40 posiciones susceptibles de ser llenadas con piezas, y la información pertinente a ellas, claro está.
La cuestión entonces es:
¿Cómo mover datos consecutivos en Step 7?
Lo que ocurre en este caso, es que la información de las piezas están guardadas en un DB. La cuestión ahora es determinar cuál es la mejor forma de, cuando entre una nueva pieza, mover toda la información de tal forma que dejemos espacio para esta nueva pieza que entra en el acumulador. Es decir, trabajar como una pila de información.
Imaginemos que tuvieramos un DB100 llamado Datos, con 6 posiciones rellenas con datos de cada una de las piezas. Digamos que 6 en un primer lugar.
Mover datos consecutivos en Step 7 hacia arriba
He realizado un pequeño esquema.
Como ves, solo vas a necesitar un DB exáctamente igual que el DB Datos. Le llamamos "Auxiliar Datos", el DB101.
Cuando queramos mover la información hacia arriba del acumulador, lo que haremos es:
- Copiar completamente el DB100 al DB101.
- Copiar N-1 posiciones desde la posición 1 del DB101 a la posición 2 en adelante de vuelta en el DB100
- Copiaremos la nueva información en la posición 1 del DB100 (la nueva pieza 7).
Mover datos consecutivos en Step 7 hacia abajo
Para realizar el movimiento de bajada del acumulador, es decir, eliminar una pieza de este, trabajaremos de forma similar:
- Copiar completamente el DB100 al DB101
- Copiar N-1 posiciones desde la posición 2 del DB101 a la posición 1 en adelante de vuelta en el DB100
La información de la posición 6 se perdería lógicamente (de ahí que lo haya querido representar en gris claro).
Bien, pero esto aplicado...
Usamos SFC20 para mover datos consecutivos en Step 7
Así, supongamos que el área de cada pieza sea 10 bytes y 10 piezas como máximo.
Usaremos punteros para realizar las copias entre el DB100 y DB101:
P#DB100.DBX0.0 byte 100 -> P#DB101.DBX0.0 byte 100 para realizar la copia de un DB a otro
P#DB101.DBX0.0 byte 90 -> P#DB100.DBX10.0 byte 90 para mover los datos hacia arriba.
Posteriormente llenaremos la información de los primeros 10 bytes con los datos de la pieza 7 (como el caso del ejemplo de la imagen).
En caso de mover hacia abajo, haremos similar:
P#DB100.DBX0.0 byte 100 -> P#DB101.DBX0.0 byte 100 para realizar la copia de un DB a otro
P#DB101.DB10.0 byte 90 -> P#DB100.DBX0.0 byte 90.
Luego llenaremos de ceros con el SFC21 en la posición 10: P#DB100.DBX80.0 byte 10
¿Que te parece?
Como ves, es bastante sencillo realizar este tipo de tracking.
Lógicamente esto no es aplicable cuando los datos no son consecutivos, pero es una forma que seguro, en algún momento, te puede ser útil.
Si necesitas otro tipo de tracking, tienes más información en este post.



Comentarios
No hay comentarios todavía. Sé el primero en dejar uno.