12_direccionamiento step7

14
¿En qué se diferencian las operaciones para el direccionamiento indirecto entre el STEP 7 y el STEP 5? Mostrar referencias http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=24520698&nodeid0=37 217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&vi ewreg=WW Instrucciones: En el direccionamiento indirecto en el STEP 7, se diferencia entre: 1. El direccionamiento indirecto por memoria con un número: Para el direccionamiento de temporizadores, contadores, y módulos, 2. El direccionamiento indirecto por registro con un puntero de área: Para el direccionamiento de zonas de memoria: Periferia, entradas, salidas, marcas, datos globales (DBX), datos de instancia (DIX) y datos locales. direccionamiento indirecto por memoria con un número Ejemplos: STEP 7 Analogía en el STEP 5 L 2 Carga un número L KF+2 Carga un número T MW 33 Guardar en la palabra de marcas 33 T MW 33 Guardar en la palabra de marcas 33 L T [MW33] Carga en valor de tiempo actual del temporizador 2 B MW33 Elabora la palabra de marcas 33 L T0 Carga en valor de tiempo actual del temporizador 2 ....... ....... ....... ....... AUF DB[MW33] Abre el DB2 B MW33 Elabora la palabra de marcas 33 A DB0 Abre el DB2 ....... ....... ....... ....... CC FC[MW33] Llama al FC2 si VKE = 1: B MW33 Elabora la palabra de marcas 33 Sólo funciona, si FC2 no tiene parámetros SPB FC0 Llamada al FC2 si VKE = 1: Sólo funciona si FC2 no tiene parámetros

Upload: sihamasiham

Post on 23-Dec-2015

248 views

Category:

Documents


5 download

DESCRIPTION

divers

TRANSCRIPT

Page 1: 12_DIRECCIONAMIENTO sTEP7

¿En qué se diferencian las operaciones para el direccionamiento indirecto entre el STEP 7 y el STEP 5?

Mostrar referencias

http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=24520698&nodeid0=37217116&load=treecontent&lang=es&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=WW

Instrucciones: En el direccionamiento indirecto en el STEP 7, se diferencia entre:

1. El direccionamiento indirecto por memoria con un número: Para el direccionamiento de temporizadores, contadores, y módulos,

2. El direccionamiento indirecto por registro con un puntero de área: Para el direccionamiento de zonas de memoria: Periferia, entradas, salidas, marcas, datos globales (DBX), datos de instancia (DIX) y datos locales.

direccionamiento indirecto por memoria con un número

Ejemplos:

STEP 7 Analogía en el STEP 5

L 2 Carga un número L KF+2 Carga un número

T MW 33 Guardar en la palabra de marcas 33

T MW 33 Guardar en la palabra de marcas 33

L T [MW33] Carga en valor de tiempo actual del temporizador 2

B MW33 Elabora la palabra de marcas 33

L T0 Carga en valor de tiempo actual del temporizador 2

....... ....... ....... .......

AUF DB[MW33] Abre el DB2 B MW33 Elabora la palabra de marcas 33

A DB0 Abre el DB2

....... ....... ....... .......

CC FC[MW33] Llama al FC2 si VKE = 1:

B MW33 Elabora la palabra de marcas 33

Sólo funciona, si FC2 no tiene parámetros

SPB FC0 Llamada al FC2 si VKE = 1: Sólo funciona si FC2 no tiene parámetros

Page 2: 12_DIRECCIONAMIENTO sTEP7

El operando de la dirección, en la que se guarda el número (en este caso, la MW33), puede estar en la zona de Marcas, datos globales (DBX), datos de instancia (DIX) y datos Locales. La utilización de los datos de instancia de zona (DIX) para el operando de la dirección solo es posible en los módulos de función (FBs) con CODE_VERSION1 (no en los FBs con capacidad de multinstancia).

Direccionamiento indirecto por registros con ayuda del puntero de área

Ejemplo con un puntero de área interno

STEP 7 Analogía en el STEP 5

L P#4.5 Carga el puntero para el Byte4, Bit 5

L KF +4 Carga el número de Byte

L KF +5 Carga el número de Bit

SLW 8 Desplaza el número de Bit al Byte alto

OW Bit en el Byte alto, Byte en el Byte bajo

Ejemplo para un puntero de área externo:

STEP 7 Analogía en el STEP 5

L P#M 2.3 Carga el puntero para la M2.3

Cálculos del puntero

Una propiedad decisiva del puntero de área es que los cálculos del puntero se pueden realizar con las operaciones normales para coma fija. Esto quiere decir lo siguiente en cualquier puntero:

Suma de 1: El puntero aumenta al siguiente Bit Suma de 8: El puntero aumenta al siguiente Byte, el número de Bit permanece invariante.

Ejemplos:

STEP 7 Analogía en el STEP 5

L P#M 2.3 Carga el puntero para la M2.3

L P#4.5 Carga el puntero para el Byte4, Bit 5

....... .......

+D Resultado: El puntero apunta a la M7.0, es

Page 3: 12_DIRECCIONAMIENTO sTEP7

decir, estas 3 instrucciones tienen el mismo significado que: L P#M7.0

....... ....... ....... .......

L P#DBX 2.3 Carga el puntero para el Bit de datos global 2.3

L 16 Carga 16 .......

-D El puntero se reduce en 16 Bits, es decir, estas 3 instrucciones tienen el mismo significado que: L P#DBX0.3

En los cálculos con punteros de área, sólo se puede utilizar un puntero con denominación de área (diferente a cero). En caso contrario, las posiciones del identificador de área se "suman" o "restan", y aparece una identificación no válida.

Direccionamiento indirecto por memoria con ayuda del puntero de área

Ejemplos:

STEP 7 Analogía en el STEP 5

L P#2.0 Carga el puntero para el Byte2, Bit 0

L KF +2 Carga el número de Byte

T MD44 Se guarda en la doble palabra de marcas 44

L KF +0 Carga el número de Bit

U E [MD44] Consulta de la entrada 2.0 para saber si vale "1"

SLW 8 Desplaza el número de Bit al Byte alto

OW Bit en el Byte alto, Byte en el Byte bajo

T MW44 Se guarda en la palabra de marcas 44

B MW44 Elabora la palabra de marcas 44

U E 0.0 Consulta de la entrada 2.0

para saber si vale "1"

......... .......... ....... .......

Page 4: 12_DIRECCIONAMIENTO sTEP7

L 123 Carga 123 L KF +123 Carga 123

T MW [MD44] Guarda el 123 en la palabra de marcas 2

B MW44 Edita la palabra de marcas 44

T MW 0 Guarda el 123 en la palabra de marcas 2

Para la colocación de los operandos de las direcciones (en este caso, la MD44) en las posibles áreas de memoria, son válidas las mismas declaraciones que con el direccionamiento indirecto con un número (consulte arriba). La diferencia es que se necesita una doble palabra.

En el direccionamiento indirecto por memoria, el identificador de área en el puntero tiene que ser 0. Sólo se pueden utilizar punteros internos de área.

En el acceso indirecto a un Byte, palabra o doble palabra, la dirección del Bit en el puntero tiene que ser 0.

Direccionamiento indirecto por registros con ayuda del puntero de área

Ejemplos:

STEP 7 Analogía en el STEP 5

Ejemplo a

L P#2.0 Carga el puntero para el Byte2, Bit 0

LAR1 Carga el puntero en el registro de direcciones 1

.......

// Direccionamiento indirecto por registro con un área interna

U E [AR1, P#0.0] Consulta de la entrada 2.0 para saber si vale "1"

Ejemplo b

LAR1 P#E 2.0 Carga el puntero para la entrada 2.0

// Direccionamiento indirecto por registro con un área externa

.......

U [AR1, P#0.0] Consulta de la entrada 2.0 para saber si vale "1"

.......

Page 5: 12_DIRECCIONAMIENTO sTEP7

Ejemplo c

LAR1 P#DBX 2.0 Carga el puntero para el bit de datos globales 2.0

L MW [AR1, P#0.0] Carga la palabra de marcas 2

....... .......

Ejemplo d1

LAR1 P#A 2.0 Carga el puntero para la salida 2.0 en el AR1

= [AR1, P#2.2] Asigna el VKE actual a la salida 4.2

Ejemplo d2

+AR1 P#2.0 Aumenta el puntero en el registro en 2 Bytes

T W [AR1, P#0.0] Escribe desde la palabra baja del acumulador 1 en la palabra de salida 4.0

.......

L P#4.5 Carga el puntero para el Byte4, Bit 5

+AR1 Aumenta el puntero en el registro con el AKKU1

S [AR1, P#1.0] Activa la salida 9.5 si VKE = 1

En el direccionamiento indirecto por registros, el puntero puede tener un identificador de área:

Si falta el identificador (ejemplo a), hay que indicarlo en las instrucciones indirectas por registro Si el identificador está dentro del puntero (ejemplo b), puede faltar en las instrucciones

indirectas por registro. Tenga en cuenta en este caso que hay que indicar el ancho de acceso Byte, Word, Doble Word en las operaciones de carga y transferencia (ejemplo d2).

Si el identificador está dentro del puntero y se indica en la instrucción (ejemplo c), vale el área indicada en la instrucción; El identificador en el puntero se ignora.

En las instrucciones indirectas por registro, se puede indicar un OFFSET (ejemplo d). Éste se suma al puntero del registro en caso de ejecutarse el acceso. El contenido del registro permanece invariante.

La utilización del identificador de área L en el puntero no es posible en las CPUs antiguas.

Page 6: 12_DIRECCIONAMIENTO sTEP7

El OFFSET indicado entre corchetes [AR1, <OFFSET>] puede estar dentro del rango P#0.0 ..... P#8191.7.

La instrucción "+AR1" sólo tiene en cuenta la palabra baja del OFFSET indicado en el AKKU1 o como operando, e interpreta los 16 Bits como un número con signo:

P#0.0 ..... P#4095.7 es un OFFSET positivo para el "+AR1" y

P#4096.0 ..... P#8191.7 es un OFFSET negativo para el "+AR1".

Ejemplos:

L P#0.1 OFFSET positivo más pequeño para el "+AR1"

+AR1 Aumenta el contenido de AR1 en P#0.1

......... .........

L P#4095.7 OFFSET positivo más grande para el "+AR1"

+AR1 Aumenta el contenido de AR1 en P#4095.7

....... .......

L P#4096.0 OFFSET negativo más grande para el "+AR1": Se corresponde con "P#-4096.0"

+AR1 Se reduce el contenido AR1 en P#4096.0

....... .......

L P#M 8191.0 Se corresponde con "P#-1.0" ("+AR1" ignora el identificador "M")

+AR1 Se reduce el contenido AR1 en P#1.0 !

....... .......

L P#8191.7 OFFSET negativo más pequeño para el "+AR1": Se corresponde con "P#-0.1"

+AR1 Se reduce el contenido AR1 en P#0.1 !

....... .......

L P#E 8192.0 Se corresponde con P#0.0" ("+AR1" ignora el identificador "E")

+AR1 El contenido del AR1 no se modifica

Debido a que la operación "+AR1" sólo tiene en cuenta la palabra baja del AKKU1, también se pueden utilizar punteros con identificador de área: El identificador no molesta en la palabra alta; Al contrario que en el cálculo del puntero con operaciones con enteros.

Page 7: 12_DIRECCIONAMIENTO sTEP7

Por favor, tenga en cuenta que, independientemente de las posibilidades para aumentar y disminuir el registro de direcciones en una instrucción indirecta por registros, el contenido del registro siempre tiene que estar dentro del rango P<identificador eventual> 0.0 ..... P<identificador eventual> 65535.7.

Indicación general De forma análoga al registro de direcciones 1, en las CPUs existe un segundo registro AR2 con las mismas posibilidades de utilización.

Si se utiliza el registro de direcciones, existen limitaciones, que si no se tienen en cuenta pueden provocar reacciones inesperadas en el programa de usuario. Información más detallada se puede ver en la ayuda del STEP 7, bajo la palabra de búsqueda "AR1".

Ayuda para elegir las posibilidades del direccionamiento indirecto:

Si se utiliza el registro de direcciones, es preferible elegir el direccionamiento indirecto por registros con punteros de área internos

El área de memoria llamada por la instrucción se ve en la misma. De esta forma, el programa es más claro, hay menos posibilidades de fallo y será mejor para el mantenimiento;

En este caso, no hay que tener en cuenta la vida útil de los operandos de las direcciones. La utilización del registro de direcciones es posible actualmente, independientemente del DB abierto o los datos locales.

Las ventajas de la utilización del direccionamiento indirecto por memoria, con un puntero en la zona de marcas, son las siguientes:

No se tienen en cuenta las limitaciones para la utilización del registro; Tampoco hay que tener en cuenta la vida útil de los operandos de las direcciones, porque la zona

de marcas está disponible sin limitaciones en todos los puntos del programa. Se pueden utilizar varios punteros en paralelo. Sin embargo, no se dispone de la cómoda posibilidad del "+ARi" ni de la indicación de un

OFFSET.

Una advertencia para trabajar con punteros o punteros ANY:

Ambos contienen el puntero de área en los 32 bits más bajos, tal como se ha mostrado arriba.

Al utilizar el direccionamiento indirecto, los errores de programación no suelen aparecer tan rápidamente como cuando se utiliza el direccionamiento directo. Además, no solo puede que la zona de memoria deseada aparezca en un punto que no se ha tenido en cuenta, sino que se pierdan datos sin querer de otras zonas de memoria. Por tanto, proceda con cuidado, y compruebe el programa con profundidad.

Advertencia: En la ayuda Online del STEP 7, se dispone de información adicional y ejemplos en

Formato del tipo de parámetro ANY, Formato del tipo de parámetro POINTER, Utilización del tipo de parámetro POINTER, Utilización del tipo de parámetro ANY

Page 8: 12_DIRECCIONAMIENTO sTEP7

¿Cómo se pueden abrir indirectamente bloques de datos en STEP 7 V5.x y cómo se pueden llamar, arrancar y evaluar temporizadores de manera indexada?

Mostrar referencias

Instrucciones Se disponen de las siguientes posibilidades para abrir indirectamente un módulo de datos:

Programando parámetros formales del tipo "BLOCK_DB (ejemplo 1)

A través de la pila de datos locales (variables temporales del módulo) (ejemplo 2)

Por medio del direccionamiento indirecto de memoria (ejemplo 3)

La figura 01 muestra 3 ejemplos para la apertura indirecta de un bloque de datos en AWL:

Figura 01

Ejemplo 1 Para el parámetro de entrada "Data2" aquí se asigna el parámetro formal del tipo "BLOCK_DB". El contenido de "Data2" se corresponde con el número del bloque de datos a abrir.

Ejemplo 2 El parámetro de entrada "InWord" del tipo "WORD" se asigna a la variable temporal "Data1". El número que se tiene en la variable temporal "Data1" de tipo WORD es el número del bloque de datos global. El bloque de datos global se carga con la instrucción AUF DB[Data1].

Page 9: 12_DIRECCIONAMIENTO sTEP7

Ejemplo 3 Con el direccionamiento indirecto de memoria, en la palabra de marcas MW20 se carga, por ejemplo, el número 10 de DB. Con la instrucción AUF DB[MW20] se abre el bloque de datos global, cuyo número está disponible en la palabra de marcas MW20. AUF DB[MW20] es lo mismo que la instrucción AUF DB10.

Otras instrucciones para abrir un bloque de datos mediante direccionamiento indirecto es posible con AUF DB[DBW <Número>] y AUF DB[DIW <Número>].

Si no se utilizan FBs, se pueden utilizar libremente los 2 registros de DB, es decir, todas las variantes se pueden abrir con AUF DI ....

Indicación Tenga también en cuenta para el tipo de parámetro "BLOCK_DB" la información indicada en la ayuda online del STEP 7, bajo el punto "Tipos de datos admisibles al asignar parámetros".

Llamar, arrancar y evaluar un temporizador de manera indexada Un temporizador se puede llamar de manera indexada a través de una variable de tipo WORD. Esta variable puede ser:

Una variable global [MW] o Una variable local en un DB [DBW] o Una variable temporal dentro de un módulo.

El acceso se realiza de la siguiente manera (ejemplo):

SI T[MW2] // El número de temporizador se encuentra en la palabra de marcas 2, codificado en hexadecimal.

SI T[DBW2] // El número de temporizador se encuentra en la palabra del módulo de datos 2, codificado en hexadecimal. El DB tiene haberse abierto anteriormente de manera explícita.

SI T[#zeit_x] // La variable "#zeit_x" es una variable temporal de tipo WORD.

Conceptos de búsqueda Direccionamiento indirecto, llamada a un DB

Page 10: 12_DIRECCIONAMIENTO sTEP7

puntero a DB

Supongamos que tu DB es el DB1, con datos byte ( Valen tambien nombres simbólicos)

AUF DB1 // ABRO EL BLOQUE EN EL QUE VOY A LEER

LAR1 P#DBX0.0 // MANDO EL PUNTERO AL INICIO DEL BLOQUE O DONDE SEA NECESARIO

L 100 // ULTIMO VALOR A LEER DEL BLOQUE

L #actual //VALOR ACTUAL DEL PUNTERO AL BLOQUE : VARIABLE DE MEMORIA MWxx

==I // COMPARO LOS VALORES

SPBN SIG // SI NO SON IGUALES SIGO

L 0 // SI SON IGUALES CARGO 0

T #actual // Y REINICIO EL CONTADOR

SIG: NOP 0

L 4

L #actual

+I // SUMO 4 AL VALOR ACTUAL

T #actual

L #actual // CARGO EL VALOR ACTUAL

L 4 // CARGO 4

-I // RESTO 4 DEL VALOR ACTUAL

SLW 3 //AGREGO DESPLAZAMIENTO DEL POINTER. EN ESTE CASO ASUMO BYTE.

+AR1 // SUMO EL VALOR OBTENIDO AL REGISTRO DE DIRECCIONES,CON LO CUAL MI PUNTERO AHORA ESTA

DONDE LO NECESITO

L DBD [AR1,P#0.0] // LEO EL VALOR EN PALABRA DOBLE

// DE LA DIRECCION ACTUAL

a partir de aquí colocas las instrucciones de lo que harás con el valor obtenido, en el próximo scan el puntero se

incrementará en 4 con lo que iras a parar a la siguiente palabra doble del DB.

Por supuesto la variable #actual debe ser estática o bien puede ser una marca, para que no se pierda al salir del

bloque en el que coloques tu código, el valor que puse de 100 para el último valor es simplemente un ejemplo,

ahí colocas tu último valor a leer +4.

Si en vez de leer los valores de la tabla quisiera escribirlos en una tabla de igual tamano, en la ultima instruccion

tendria que poner:

T DBD [AR1,P#0.0]

en vez de:

L DBD [AR1,P#0.0]

Gracias y perdon por preguntar tanto

Puntero a DB

por Ricardo » Dom Jun 15, 2003 3:53 am

Page 11: 12_DIRECCIONAMIENTO sTEP7

Cuando yo puse #actual lo que quise indicar es que esa será la variable en la que se va almacenando un valor

auxiliar, que es el que se me irá sumando al puntero que fijo al principio para ir avanzando a lo largo del DB, este

valor auxiliar lo puedes tranquilamente almacenar ( si no quieres usar variables estáticas del bloque) en una

palabra de marcas, o sea para el caso es lo mismo que en lugar de #actual coloques por ejemplo MW10, esta

variable es unvalor dinámico que irá cambiando a medida que tu programa vaya leyendo los sucesivos valores se

incrementará como ves de 4 en 4(0, 4, 8, 12, 16,...).

Esto es mas facil de ver si analizas como funciona el código:

Lo primero que haces es fijar un puntero al comienzo de la zona del bloque de datos de la que quieras leer:

LAR1 P#DBX0.0

Con esto lo que haces es decirle a tu programa "bien, ahora voy a comenzar a trabajar a partir del Byte 0 Bit 0 del

bloque que tengo abierto", este es el concepto del puntero, le indico el punto de referencia sobre el que voy a

trabajar, si por ejemplo quisieras empezar a trabajar a partir de tu segundo dato obviando el primero, el puntero

sería P#DBX4.0 ( ya que cada palabra ocupa 4 Bytes), o sea le diría a mi programa: " comenzamos a leer el bloque

pero a partir del Byte 4 Bit 0".

En el primer ciclo de lectura el valor de #actual es 0 ya que no tenía ningun valor previo. Lo primero que hago a

continuacion es verificar si llegue al final de la lectura, obviamente esto no es así ya que #actual ( o MW10 si

usaste una marca) es 0, sumo ahora 4 al valor de #actual para ya prepararlo para el siguiente ciclo, obviamente si

usara el valor que ahora tiene #actual para sumarle al puntero leería la palabra doble que empieza en 4.0 en el

DB, es decir estaría saltandome el primer dato, por lo cual ejecuto un pequeño truco: le resto 4 al valor de #actual

pero no transfiero el valor a #actual, con lo cual el resultado solo me queda en el ACU1 este resultado lo desplazo

3 lugares a la izquierda y lo sumo al puntero con la instruccion +AR1 con lo cual ahora estoy posicionado en---->

DBX0.0 + #actual - 4, como en este primer ciclo #actual es 4 --->AR1 es 0 por lo que no me moví del inicio del

bloque y leo la primera palabra doble del DB con la instrucción:

L DBD [AR1,P#0.0]

En el siguiente ciclo sumo 4 a #actual con lo que ahora valdrá 8 y, luego de la resta y la suma, AR1 será 4 con lo

cual leo mi segundo valor, y así sucesivamente (el ciclo se repite hasta que el valor de #actual sea = al fin del

bloque +4), y luego reinicia desde 0 nuevamente.

Respecto del valor de control para verificar si llegaste al final de tu DB, debes tener en cuenta lo siguiente: Las

direcciones de los PLC´s estan expresadas en Bytes, y las correspondientes a los DB no son la excepción, por lo

que si consideras que las palabras dobles ocupan 4 Bytes y tu quieres leer 15 valores de palabras dobles deben

hacer:

15*4= 60

Es decir tu bloque de datos tendrá una longitud de 60 Bytes, por lo que le valor de control será precisamente ese,

es decir deberás contrastar #actual contra 60 para verificar si llegaste al final del bloque, ya que no debes poner

tu número de dato (1,2,3,4,etc.) sino la direccion en el DB ( ya que trabajas con punteros a direcciones).

Espero te haya aclarado algo mas, sino pregunta nuevamente.

Saludos

Ricardo

Page 12: 12_DIRECCIONAMIENTO sTEP7

Tipo y

descripción Tamaño

en Bits

Formato-

Opciones

Rango y notación numérica

(Valores máximo y mínimo)

Ejemplo

BOOL (Bit) 1 Texto Booleano TRUE/FALSE TRUE

BYTE (Byte) 8 Número

Hexadecimal

B#16#0 a B#16#FF B#16#10

WORD (Palabra) 16 Número Binario 2#0 a 2#1111_1111_1111_1111 2#0001_0000_0000_0000

Número

Hexadecimal

W#16#0 a W#16#FFFF W#16#1000

BCD C#0 a C#999 C#998

Número Decimal

sin signo

B#(0,0) a B#(255,255) B#(10,20)

DWORD (Doble

Palabra)

32 Número Binario 2#0 a

2#1111_1111_1111_1111_1111_1111

_1111_1111

2#1000_0001_0001_1000_10

11_1011_0111_1111

Número

Hexadecimal

DW#16#0000_0000 a

DW#16#FFFF_FFFF

DW#16#00A2_1234

Número Decimal

sin signo

B#(0,0,0,0) a B#(255,255,255,255) B#(1,14,100,120)

INT (Entero) 16 Número Decimal

con signo

-32768 a 32767 1

DINT (Int,32 bit) 32 Número Decimal

con signo

L#-2147483648 a L#2147483647 L#1

REAL (Número en

coma flotante)

32 Número en coma

flotante IEEE

Máximo: +/-3.402823e+38

Mínimo: +/-1.175495e-38

1.234567e+13

S5TIME

(Tiempo Simatic)

16 Tiempo S7 en

pasos de 10 ms

S5T#0H_0M_0S_10MS a

S5T#2H_46M_30S_0MS and

S5T#0H_0M_0S_0MS

S5T#0H_1M_0S_0MS

S5TIME#1H_1M_0S_0MS

TIME

(Tiempo IEC)

32 Tiempo IEC en

pasos desde

1ms, entero con

signo

-T#24D_20H_31M_23S_648MS a

T#24D_20H_31M_23S_647MS

T#0D_1H_1M_0S_0MS

TIME#0D_1H_1M_0S_0MS

DATE

(Fecha IEC)

16 Fecha IEC en

pasos de 1 día

D#1990-1-1 a D#2168-12-31 DATE#1994-3-15

TIME_OF_DAY

(Fecha y Hora)

32 Tiempo en pasos

de 1ms

TOD#0:0:0.0 a TOD#23:59:59.999 TIME_OF_DAY#1:10:3.3

CHAR (Carácter) 8 Caracteres ASCII ´A´, ´B´ etc. ´B´

Page 13: 12_DIRECCIONAMIENTO sTEP7

Existen tres posibilidades de acceso a los datos:

1. Acceso por Direccionamiento Directo:

Se puede acceder a un elemento de un DB con las siguientes instrucciones:

Ejemplo:

L DB 20. DBB2 Cargamos el byte de datos 2 del DB20 en el ACCU 1

L DB 22. DBW4 Cargamos el byte de datos 4 del DB22 en el ACCU 1

A DB 2. DBX5.6 Consultamos el estado del bit de datos 5.6 del DB2.

2. Accesso a un elemento de un DB que ya se encontraba abierto:

Para poder acceder a un elemento de datos, primero se debe abrir su correspondiente DB a

través de las instrucciones OPN DB o OPN DI. Una vez hecho esto, varios bits de datos

(DBX/DIX),bytes de datos (DBB/DIB), palabras de datos (DBW/DIW) o dobles palabras de

datos (DBD/DID) pueden ser procesadas en diferentes operaciones binarias o aritméticas.

Al utilizar la instrucción OPN DI se abre un DB de Instancia. Esta instrucción puede utilizarse

también con DBs globales, cuando 2 DBs permanecen abiertos al mismo tiempo.

Ejemplo:

OPN DB 20 Abrimos el DB20

OPN DI 22 Abrimos el DB22

L DBW 0 Cargamos la palabra de datos 0 del DB20 en el ACCU 1

T MW 1 Transferimos el contenido del ACCU 1 a la palabra de marcas

1

A DIX 0.0 Operación AND sobre el bit de datos 0.0 del DB22 con

A E 1.0 el bit de entradas 1.0

= A 4.0 Asignamos el resultado al bit de salidas digitales 4.0

3. Acceso a datos de un DB de Instancia a través de la llamada de un Bloque de

Función:

Los datos pueden ser transferidos a un DB de Instancia a través de la llamada a su

correspondiente bloque de función con la instrucción CALL FB1, DB19. La asignación de las

Page 14: 12_DIRECCIONAMIENTO sTEP7

variables, que deberían de haber sido previamente definidas en la tabla de definiciones del

FB, y cuyo contenido se almacena en el DB de instancia, son tomadas de las direcciones

asignadas a los parámetros del FB (p.e. EW0, M 10.0 o AW4) con la instrucción CALL.

Ejemplo:

CALL FB1, DB19

CONTADOR:= EW 0 La Variable CONTADOR corresponde con la dirección EW

0.

SALIDA:= A 4.0 La variable SALIDA corresponde con la dirección A 4.0.

Nota: El formato de las variables del DB de Instancia y la dirección asignada en el

parámetro del FB deben de ser iguales.