Vous êtes sur la page 1sur 8

Tipos de direccionamiento

Existen dos tipos de direccionamiento en la programación de S7:


• Directo: Es aquel en el que la instrucción va precedida del
operando con el que se desea operar.
Ejemplos: S M4.0, L DB10.DBW2.
• Indirecto: El operando indica la dirección del valor que va a
procesar la operación.

Direccionamiento Indirecto.
Existen dos tipos de punteros para el direccionamiento indirecto:
• puntero formato de palabra: utilizado para las declaraciones de
DB´s, temporizadores y contadores.
• Puntero formato doble palabra: utilizado para el resto de zonas
de memoria (marcas, variables de DB´s, entradas, salidas).
Direccionamiento Indirecto

En cualquier caso, las variables que pueden contener el


formato de puntero para el direccionamiento indirecto
únicamente pueden ser de la zona de marcas o de
DB´s.

Ejemplos de funcionamiento del direccionamiento indirecto,


ejemplos de punteros de palabra:

– U T[MW0] -> El número de temporizador es el valor que se


encuentre dentro de la MW0.
– AUF DB[MW0] -> La DB a abrir es el valor que se encuentre
dentro de la MW0.
– L Z[mw0] -> El número de temporizador del que se desea cargar el
valor actual se encuentra en el valor de la MW0.
Direccionamiento Indirecto

Punteros de doble palabra:

• U E[MD0] -> Consulta el estado de la entrada de número almacenado


en la MD0. Si en la MD0 tuviésemos un 2.0, el resultado
transferido al procesador del PLC sería U E 2.0.
• = A[MD4] -> Activa la salida indicada en la MD4.
• L DB1.DBW[MD8] -> Carga en la DB1, en la palabra cuya dirección se
encuentra dentro del valor de la MD8. Si la MD8
vale 10, la palabra a cargar será la DBW10.
• Inconveniente con punteros es: desconocer como funciona el formato de
puntero de doble palabra.
Formato de puntero de doble palabra
Direccionamiento Indirecto

Esto nos obliga a desplazar tres bits hacia la izquierda un valor que
deseemos cargar cuando la dirección a la que nos queremos dirigir es
distinta de un bit.

Por ejemplo, supongamos que queremos acceder a la dirección


DB1.DBD, siendo la dirección del valor real un valor que introducimos
desde una OP. Supongamos también que el valor de la OP se
encuentra en la MD0, y actualmente vale 6. Necesitaremos desplazar
dicho valor 3 bits hacia la izquierda para que adopte el formato 6.0,
requerido para poder acceder a la dirección indicada. Posteriormente el
valor cargado lo almacenamos siempre en una palabra que está
asociada al OP.

L MD 0 // CARGA EL VALOR DE OP
SLD 3 // DESPLAZA 3 A LA IZQUIERDA
T MD 4 // GUARDAR YA CON FORMATO PUNTERO

AUF DB 1 // ABRE DB1


L DBD [MD 4] // CARGA UN VALOR REAL CON FORMATO INDIRECTO
T MD 20 // TRANSFERIR A LA PALABRA DE DISPLAY DE OP
Ejemplo direccionamiento Indirecto

El direccionamiento indirecto generalmente se usa para


introducir los datos de un trozo de programa parametrizado
desde la tabla de declaración de una función.
Supongamos que deseamos crear una función que nos permita
copiar una zona determinada de una DB en una zona de marcas.
Creamos una función con una cabecera como la siguiente:

Se crea una función con una cabecera como la siguiente:


Ejemplo direccionamiento Indirecto
La función presenta el código siguiente:

L #DATO_DB // CARGA DB A ABRIR


T #TEMP_DB // TRANSIERE A TEMPORAL
AUF DB [#TEMP_DB] // ABRE DB PARAMETRIZADA
L #DATO_DBB_INI // CARGA DBB INICIAL
SLD 3 // DESPLAZA
T #TEMP_DBB_INI // GUARDA EN FORMATO DE PUNTERO
L #DATO_DBB_FIN // CARGA DBB FINAL
SLD 3 // DESPLAZA
T #TEMP_DBB_FIN // GUARDA EN FORMATO DE PUNTERO
L #DATO_MB_INI // CARGA MB INICIAL
SLD 3 // DESPLAZA
T #TEMP_MB // GUARDA EN FORMATO DE PUNTERO
M002: L DBB [#TEMP_DBB_INI] // CARGA VALOR DBB
T MB [#TEMP_MB] // TRANSFIERE A MB
L #TEMP_DBB_INI // CARGA DBB ACTUAL
L #TEMP_DBB_FIN // CARGA DBB FINAL
==D // SI SE HA LLEGADO AL FINAL
SPB M001 // TERMINA
L #TEMP_DBB_INI // CARGA DBB ACTUAL
L8 // DESPLAZA 8 DEBIDO AL FORMATO DE UN PUNTERO
+D
T #TEMP_DBB_INI // GUARDA DBB ACTUAL
Ejemplo direccionamiento Indirecto
L #TEMP_MB // CARGA MB ACTUAL
L8 // DESPLAZA 8 DEBIDO AL FORMATO
DE UN PUNTERO
+D
T #TEMP_MB // GUARDA MB ACTUAL
SPA M002 // VUELVE A REALIZAR EL BUCLE
M001: NOP 0 // FINALIZA

La llamada a la función puede tener el siguiente aspecto:

CALL FC 3 // FUNCION DE COPIA DE DBS A MBS


DATO_DB :=10 // DB FUENTE
DATO_DBB_INI:=0 // DBB INICIAL FUENTE
DATO_DBB_FIN:=10 // DBB FINAL FUENTE
DATO_MB_INI :=18 // MB INCIAL DESTINO

Vous aimerez peut-être aussi