Você está na página 1de 23

Endereamento Indireto e Instrues com Registrador de Endereos

1
2

oin
#P

ter

#Ini_Value

9
10
#Counter

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.1

[AR1,

P#200.0]

Conhecimento em Automao
Training Center

Contedo

Pg.

Opes de endereamento com STEP7 ...........................................................................................


Endereamento Direto de variveis .................................................................................................
Endereamento Direto de variveis em DBs ..................................................................................
Avaliao de informao de DB no programa .................................................................................
Memria de Endereamento Indireto ..............................................................................................
Estrutura de ponteiros com Endereamento Indireto de Memria ....................................................
Caractersticas do Endereamento Indireto de Memria .................... ............................................
Exemplo de Endereamento Indireto ...............................................................................................
Exerccio 4.1: Programao de Loop com Endereamento Indireto .................................................
Endereamento Indireto de Registrador de rea Interna ...............................................................
Endereamento Indireto de Registrador de rea Cruzada .............................................................
Instrues para carregamento dos Registradores de Endereo ......................................................
Outras instrues com Registradores de Endereo .........................................................................
Caractersticas do Registrador de Endereamento Indireto ............................................................
Exerccio 4.2: Loop com Registrador de Endereamento Indireto ....................................................
Tipos de ponteiros do STEP7 .........................................................................................................
Estrutura e atributos de um dado tipo "POINTER ...........................................................................
Configurao de um dado tipo "ANY ..............................................................................................
Atributos dos parmetros de dados tipo "ANY ...............................................................................
Atributos indiretos de parmetros do tipo ANY ............................................................................
Avaliando um ponteiro tipo "ANY .....................................................................................................
Exerccio 4.3: Funo para calcular valor da soma e mdia
......................................................

Siemens Ltda.
Training Center

Pgina 1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

ST-7PRO2
Endereamento Indireto

Opes de Endereamento com STEP 7


Procedimento de endereamento

Endereamento Direto

absoluto

simblico

Endereamento Indireto

memria indireta

registrador indireto

16-bit pointer
(DB, T, C)

32-bit pointer
rea interna

32-bit pointer
rea interna

32-bit pointer
rea cruzada

OPN DB[MW10]
SP T["runtime"]

A I[MD30]
L IW["Number"]

A I[AR1,P#0.0]
L ID[AR1,P#5.0]

A [AR1,P#0.0]
T W[AR1,P#0.0]

Exemplos:
A I4.0
L IW10

A "Mot_on"
L #num

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.2

Conhecimento em Automao
Training Center

Endereamento
Direto

Com endereamento direto, o local da memria codificado na instruo, ou


seja, o endereo especifica o valor do endereo com a qual a instruo deve
processar.

Endereamento
Simblico

Num programa, endereos podem ser endereados absolutamente (p.ex.


I1.0) ou simbolicamente (p.ex."start signal"). Os endereos simblicos usam nomes
ao invs de endereos absolutos.
Um programa facilmente interpretado quando so usados nomes com significado.
Com endereamento simblico feita uma diferenciao entre smbolos locais
(tabela de declaraes de um bloco) e globais (tabela de smbolos).

Endereamento
Indireto

Com endereamento indireto pode-se enderear endereos que somente


so definidos durante a execuo do programa. Com endereamento indireto,
partes do programa podem ser executadas repetidas vezes (Loop) e cada
varredura com um endereo diferente.
Com endereamento indireto feita diferenciao entre:
endereamento indireto de memria: Um ponteiro do endereo endereado
ser encontrado em uma clula de memria da memria do usurio (p.ex. MD30).
Com endereamento indireto de memria, as variveis, na memria na
qual
o ponteiro de endereamento de endereo est guardada, tambm pode ser
atribudo um nome simblico.
endereamento indireto de registro: O ponteiro do endereo endereado
carregado em um dos dois registradores de endereos do S7 (AR1 e AR2) antes
de serem acessados.

Precauo

Como no endereamento indireto os endereos somente so definidos


durante a execuo do programa, deve-se tomar o cuidado de no
sobrescrever reas de memria que possam causar reaes inesperadas do
PLC.

Siemens Ltda.
Training Center

Pgina 2

ST-7PRO2
Endereamento Indireto

Endereamento Direto de Variveis


Operando

Endereo do
Operando (p. ex.)

Dimenses de
Accesso Adicionais

Designao

37.4

Byte, word,
double word

Entradas (Inputs)

27.7

Byte, word,
double word

Sadas (Outputs)

PIB

655

Byte, word,
double word

Periferia de Entrada
(Peripheral inputs)

PQB

653

Byte, word,
double word

Periferia de Sada
(Peripheral outputs)

55.0

Byte, word,
double word

Bits de Memria
(Bit memories)

114

--

Temporizadores (Timers)

13

--

Contadores (Counters)

DBX

2001.6

Byte (DBB), word (DBW), Dado endereado via


double word (DBD)
Registrador de DB

DIX

406.1

Byte (DIB), word (DIW),


double word (DID)

Dado endereado via


Registrador de DI

88.5

Byte (LB), word (LW),


double word (LD)

Pilha de Dados Local


(Local data stack)

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.3

Conhecimento em Automao
Training Center

Endereamento
Direto de Variveis

O endereamento direto permite enderear variveis simples (elementares),


variveis com comprimento mximo de 4 bytes. Variveis simples consistem de:
um operando (p.ex.: "IB" para input byte)
um endereo exato (localizao de memria)(byte ou bit) da rea de memria
que determinada pelo identificador de endereo.
Endereos ou variveis simples tambm podem ser endereadas de modo global
por nomes simblicos (tabela de smbolos).

Perifricos

Para endereamento perifrico, diferente do S5, agora necessrio fazer uma


distino entre inputs (L PIW) e outputs (T PQW).

Dados locais

Com STEP 7 possvel tambm ter acesso aos dados da pilha de endereos
locais de cada bloco, por exemplo:
A L 12.6 (lgica E do bit local 12.6 )
L LW 12 (Carrega a palavra de dados local 12 no ACCU1)

DBX/DIX

Voc pode tambm acessar variveis simples contidas em DBs:


A DBX 12.6
(lgica E do bit 12.6 do DB que estiver aberto).
L DB5.DBW10 (Carrega o DBW10 do DB5 no ACCU1)

Variveis
Complexas

Voc pode acessar variveis locais, que possua um tipo de dado complexo,
como estruturas (struct) ou vetores (array), simbolicamente.
Acesso absoluto s possvel com componentes de variveis complexas, das
quais suas partes so dados tipo elementares.

Siemens Ltda.
Training Center

Pgina 3

ST-7PRO2
Endereamento Indireto

Endereamento Direto de Variveis em DBs


Carregar e
Transferir no DB

Abrir o DB
OPN DB 19
OPN "Values"
OPN DI 20

Instruo combinada
(contm OPN DB..)

L DBB 1
L DBW 2
L5
T DBW 4
L 'A'
L DIB28
==I

Carrega o byte de dado 1 do DB


Carrega palavra de dado 2 (byte 2/3)
Carrega o nmero 5
Transfere para a palavra 4 do DB
Carrega o caracter A em ASCII
Carrega o byte de dado 28 do DI
Compara

A DBX 0.0

L contedo do bit 0, byte 0

L DB19.DBW4

Carrega palavra 4 do DB 19

L "Values".Number_1

A DB10.DBX4.7

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.4

Acesso simblico da
varivel Number_1.
DB19 tem o nome
simblico "Values"
L contedo do bit 7, byte 4
do DB 10

Conhecimento em Automao
Training Center

Viso Geral

A CPU dispe de dois registradores de DB para processamento de dados. O


endereo dos DBs correntemente em uso esto guardados nestes registradores.
Antes de voc acessar dados de um DB, voc deve primeiro abri-lo via um destes
dois registradores.
Abrir um DB pode ser feito explicitamente pelas seguintes instrues:
Opn DBx ou OPN DIx
ou implicitamente com auxilio de endereamento combinado com operando:
L DBx.DBWy
(L DIx.DIWy no possvel!)
Neste caso o nmero do DB tambm carregado no registrador de DB.

Endereamento

DBs so organizados byte a byte no STEP7. O acesso direto aos endereos pode
ser em BIT, BYTE, WORD ou DWORD (como I/Q/M).

Acesso Simblico

Para acesso simblico deve-se entrar com o nome do smbolo do DB na lista de


smbolos. Depois cria-se pelo editor de DB os elementos e seus respectivos
smbolos.
Agora um completo acesso simblico aos elementos de dados possvel com a
instruo L "Values".Number_1. Com isto, DB19 aberto ("Values" o nome
simblico do DB 19) e DBW 2 carregado (Number_1 o nome simblico do
DBW2).

Siemens Ltda.
Training Center

Pgina 4

ST-7PRO2
Endereamento Indireto

Avaliao de Informao de DB no Programa

Instrues com DB Registers:

CDB: Troca de DB Registers


DB-Register

123

DI-Register

24

24

CDB

123
depois:

antes:

Carregar o DB Register no ACCU1


L DBNO (Carregue o numero do DB aberto no ACCU1)
L DINO (Carregue o numero do DI aberto no ACCU1)

Carregar o comprimento dos DBs


L DBLG (carregue o comprimento/bytes do DB aberto no ACCU1)
L DILG (carregue o comprimento/bytes do DI aberto no ACCU1)

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

Conhecimento em Automao
Training Center

4/10/2007
PRO2_04P.5

Registradores DB, DI Estes registradores contm o nmero dos DBs atualmente abertos. Dois Blocos de
Dados podem ser abertos simultaneamente.
STL usa o primeiro registrador de DB preferencialmente para acessar o DB global e
o segundo registrador de DB preferivelmente para acessar o DB instance. Estes
registradores so tambm chamados de DB register ou DI register por esta razo.
A CPU trata os dois registradores igualmente. Todo DB pode ser aberto por um
destes dois registradores (at mesmo via ambos simultaneamente).
CDB

CDB (troca dos DB registers) troca o contedo dos registradores DB e DI. O


contedo do registrador de DB transferido para o registrador de DI e vice versa.
Esta instruo no influencia o contedo do ACCU1 e nem os bits de status.

L DBLG, L DILG:

Estas instrues lem o comprimento em byte dos DBs abertos. Com a ajuda
destas instrues o programa de usurio pode saber antes do DB ser acessado se
ele possui o comprimento necessrio.

L DBNO, L DINO:

Estas instrues retornam o nmero dos DBs atualmente abertos.

Siemens Ltda.
Training Center

Pgina 5

ST-7PRO2
Endereamento Indireto

Memria de Endereamento Indireto


Ponteiro de 16-bit em formato Word
(Endereamento de DBs, T, C)
L 11
T MW 60
OPN DB[MW 60]

OPN DB 11

Ponteiro de 32-bit em formato Double Word


(Endereamento de I, Q, M, ...)
L
T

P#24.0
MD 50

rea

SIMATIC S7
Siemens AG 1998. All rights reserved.

[MD50]

L IW 24

Dimenso Endereo
do Acesso

Date:
File:

4/10/2007
PRO2_04P.6

Conhecimento em Automao
Training Center

Viso Geral

Com endereamento indireto de memria, o endereo da varivel a qual ser


acessada encontra-se em um endereo (localizao de memria).
Programas que usam endereamento indireto de memria contm:
uma instruo (p.ex.: OPN, A, L, etc.)
um identificador de endereo (DB, C, T, I, QW, MD, etc.)
e uma [varivel], a qual tem que estar entre colchetes.
Esta varivel contm o endereo (ponteiro) do operando a qual a instruo
ir acessar.
Dependendo do identificador de endereo usado, a instruo interpretar o dado
armazenado [varivel] especificada, ou como um ponteiro de dimenso word ou
double word.

Instrues com
Ponteiros 16-bit

Para enderear temporizadores, contadores ou blocos (DB, FC, FB) use


um ponteiro de 16 bits.
Todas as instrues de temporizadores ou contadores podem ser endereadas
usando endereamento indireto. Para enderear temporizadores, contadores ou
blocos use identificadores de rea dos formatos T, C, DB, DI, FB, FC. O endereo
(localizao de memria) do operando endereado armazenado em uma
palavra.
Um DB pode ser aberto via registrador de DB bem como um DI. Se um zero
encontrado no ponteiro quando voc abre um bloco de dados (DB, DI)
indiretamente, ento o registrador DB/DI carregado com o valor 0. Um erro
no gatilhado quando voc carrega com 0.
A chamada dos blocos lgicos podem ser endereados indiretamente com a
ajuda das instrues UC ou CC (no CALL). Os blocos, contudo, no podem
conter quaisquer parmetros ou variveis estticas.
Este ponteiro em formato palavra (word) interpretado como nmero inteiro (0 ...
65 535). Isto se refere ao nmero de um temporizador (T), um contador (C), um
bloco de dados (DB, DI) ou um bloco lgico (FC, FB).

Siemens Ltda.
Training Center

Pgina 6

ST-7PRO2
Endereamento Indireto

Estrutura de Ponteiros com Endereamento Indireto de Memria


Estrutura com um Ponteiro 16-bit:
15

14

13

12

11 10

146

0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
215

27

20

Interpretao como inteiro sem sinal entre 0 ... 65 535

Estrutura com um Ponteiro 32-bit (rea-interna):


31

30

29

28

27 26

25

24

23

22

21

20 19

18

17

16 15

14

13

12

11 10

0 0 0 0 0 0 0 0 0 0 0 0 0 B B B B B B B B B B B B B B B B X X X
215

20 22

Endereo do Byte ( inteiro sem sinal)

No avaliado

20

Endereo
do Bit

Carregamento de Constantes Ponteiro 32-bit (rea-interna):


L P#25.3 (P = "Pointer", Endereo do Byte= 25, Endereo do Bit= 3)

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.7

Conhecimento em Automao
Training Center

Instruo com
Ponteiros 32-bit

Os seguintes endereos podem ser acessados com auxlio de


endereamento indireto de memria via ponteiros 32-bit:
Bits que so endereados por operaes de lgica binria. I, Q, M, L, DIX
ou DBX podem ser usados como identificadores de endereo.
Bytes, words e double words que podem ser endereados por instrues
Load ou Transfer IB, IW, ID, DBB, DBW, DBD, DIB, DIW,
DID, PIB, PIW,
PID, etc., podem ser usados como identificadores de endereo.
O endereo do operando endereado interpretado como ponteiro 32-bit. Nesta
double word, os bits menos significativos (bit 0 a 2) so interpretados como
endereo do bit, os prximos 16 bits (bit 3 a 18) so interpretados como endereo
do byte. Bits 19 a 31 no so avaliados pela memria de endereamento indireto.

Nota

Se voc quiser acessar um endereo por meio do endereamento indireto de


memria com instrues Load ou Transfer, voc precisa se certificar de que o
endereo de bit do ponteiro usado 0.
Se no for este o caso, a CPU identificar um erro durante a execuo.

Carregando
Constantes
Ponteiro 32-bit

Uma constante ponteiro 32-bit pode ser carregada no ACCU1 com auxlio
da seguinte sintaxe:
L P#<Endereo do Byte>.<Endereo do Bit>

Localizao dos
Ponteiros

Ponteiros de 16-bit e 32-bit para endereamento indireto de memria


devem ser armazenadas em uma das seguintes opes:
M - Memria M
L - Dado local
D - Bloco de Dados (DB ou DI)

Siemens Ltda.
Training Center

Pgina 7

ST-7PRO2
Endereamento Indireto

Caractersticas do Endereamento Indireto de Memria

reas de endereo para guardar Ponteiros de 16-bit e 32-bit:

Memrias M (endereamento absoluto ou simblico,


p.ex.:OPN DB[MW30], OPN DI["Motor_1"], etc.
A I[MD30], T QD["Speed_1], etc.)
Pilha de Dado Local (endereamento absoluto ou simblico,
p.ex.. OPN DB[LW10], OPN DI[#DB_NO], etc.
A I[LD10], T QD[#Pointer], etc.)
DBs globais (s endereamento absoluto, DB deve ser aberto antes do uso,
p.ex.: OPN DB[DBW0] (sobrescreve registrador DB !!!), OPN DI[DBW22], etc.
A I[DBD10], T QD[DBD22], etc.)
DBs Instance (s endereamento absoluto, DI deve ser aberto antes do uso,
p.ex.: OPN DB[DIW20], OPN DI[DIW0] (sobrescreve registrador DI !!!), etc.
A I[DID10], T QD[DID22, etc.)

Caractersticas na Passagem de Ponteiros para FBs e FCs

Ponteiros passados por parmetros no podem ser usados diretamente para


endereamento indireto de memria
Ponteiros passados para endereamento indireto de memria devem ser
copiados em variveis temporrias antes do acesso

SIMATIC S7
Siemens AG 1998. All rights reserved.

reas de endereos
para Ponteiros

Date:
File:

4/10/2007
PRO2_04P.8

Conhecimento em Automao
Training Center

Com endereamento indireto de memria, o endereo (local da memria)


encontrado em um endereo de 16-bit ou 32-bit. Este endereo pode ser
guardado em uma das seguintes reas:
Memria M: como operando endereado absolutamente ou como varivel
endereada simbolicamente via tabela de smbolos.
Pilha de Dados Local: como operando endereado absolutamente ou como
varivel temporria declarada na lista de declaraes dos blocos.
DBs Globais: como operando endereado absolutamente. Quando DBs
compartilhados (Globais) so usados para guardar ponteiros, deve-se tomar
o cuidado de abrir o DB correto (p.ex.OPN DBn) antes de ser
acessado.
dados
DBs Instance: como operando endereado absolutamente . Quando
instance so usados, os seguintes pontos devem ser observados:
OBs e funes: Dentro de funes ou OBs, um ponteiro que est armazenado num DB
instance, pode ser usado exatamente como se estivesse armazenado num DB global.
Somente deve-se lembrar que ao invs do registrador DB, agora o registrador DI que
est sendo usado.
FBs: Dentro de FBs, dados instance, que so parmetros ou variveis estticas,
geralmente no podem ser usados simbolicamente para endereamento indireto de
memria.
Acesso absoluto a dados locais dentro de um FB , em princpio, possvel atravs do
endereo apresentado na tabela de declaraes, contudo, deve ser observado que,
quando a FB usada como multi instance, o endereo no o endereo absoluto
especificado no instance DB. O endereo de fato estar no AR2.

Nota

Siemens Ltda.
Training Center

Quando voc passa ponteiros por memria de endereamento indireto para


blocos ou quer manter o valor permanentemente em variveis estticas, ento
voc tem que copiar o valor de ponteiro do parmetro ou varivel de esttica em
uma varivel temporria e ento tem que completar o acesso por esta varivel
temporria.

Pgina 8

ST-7PRO2
Endereamento Indireto

Exemplo de Endereamento Indireto


FC30: Exemplo de endereamento indireto
Network 1:

abrir DB com endereamento indireto

L
#dbnumber
T
MW 100
OPN DB[MW 100]
Network 2:
L
T
L
anf: T
L
T
L
L
-D
T
L
LOOP

SIMATIC S7
Siemens AG 1998. All rights reserved.

// Copia o nmero do DB no MW100


//
// Abre o DB

Loop de apagamento

P#18.0
MD 40
10
MB 50
0
DBW[MD 40]
MD 40
P#2.0

//
//
//
//
//
//
//
//
//
//
//
//

MD 40
MB 50
anf

Date:
File:

Endereo final(DBW18)como Ponteiro


no MD 40;
Preseta contador do loop em 10
e transfere para MB 50;
Carrega valor inical 0
e transfere para o DB;
Carrega o ponteiro e
decrementa de 2 Bytes
e ento transfere de volta
para MD 40;
Carrega o contador do loop
decrementa e se necessrio salta;

4/10/2007
PRO2_04P.9

Conhecimento em Automao
Training Center

Descrio

Este exemplo mostra uma funo que inicializa os dados de um DB com o valor
"0". O n do DB passado para a funo por um parmetro de entrada.
O DB endereado antes de tudo aberto no segmento 1. Por isso, o n do DB
passado (parmetro: #dbnumber) copiado numa memory word (MW100) e ento
o DB aberto atravs desta memory word.
No segmento 2, as primeiras 10 words do DB so setadas em 0 pelo loop. O loop
usa a instruo LOOP, de maneira que o contador de loop memorizado no MB
50.
A transferncia do valor "0" para cada DBW do DB aconteceu com o auxilio do
endereamento indireto via MD40.
Antes de entrar no loop, o ponteiro com o endereo do ltimo DBW (DBW 18)
carregado no MD 40. A cada loop o endereo de acesso no MD40 decrementado
de P#2.0, pois os endereos so zerados de word em word e no de byte em byte
no DB.

Notas

Na prtica, tambm faria sentido programar o endereo inicial e o comprimento da


rea com 0 como parametrizveis e checar antes de abrir o DB, se o DB
realmente existe e com o comprimento necessrio.
Ao invs de se utilizar o endereamento indireto via ponteiro com memria M, qual
seria uma alternativa melhor? Porqu?

Siemens Ltda.
Training Center

Pgina 9

ST-7PRO2
Endereamento Indireto

Exerccio 4.1: Programando Loop com Endereamento Indireto

DB41

Endereo do Byte

#Ini_Value

1.0

Meas_Value[1]

4
er
i nt
o
o

P
e
er
ar_
nd
#P
e
do al
iro Loc
e
t
a
n
Po Pilh
a
n

2.0

Meas_Value[2]

32
36

#Counter

40

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.10

9.0
10.0

Meas_Value[9]
Meas_Value[10]

11.0
.
.
.

Meas_Value[11]
etc.

Conhecimento em Automao
Training Center

Objetivo

Familiarizar-se com endereamento indireto em loop com um exemplo prtico.

Definio

Endereamento indireto de memria usado para programao de um loop. Com


isto, 100 sucessivas clulas de memria so preenchidas em ordem ascendente
com os valores de 1.0 a 100.0.
1. Criar um FC41 e um DB41.
2. Nas declaraes do DB41, defina a varivel #Meas_Value como sendo
do
tipo:
ARRAY[1..100] como componente tipo REAL.
3. Na tabela de declaraes do FC41, defina um parmetro de entrada
#DB_Num do tipo INT e quatro variveis temporrias:
#L_Counter do tipo INT,
#Ini_Value do tipo REAL,
#I_DB_Num do tipo WORD,
#Par_Pointer do tipo DWORD.
4. Dentro do FC41, abra o DB, cuja numerao ser passada usando #DB_Num.
Use a varivel temporria #I_DB_NUM para isto.
5. Ento presete os campos #Meas_Value[1] a #Meas_Value[100]
no DB41 em ordem ascendente com os nmeros 1.0 to 100.0.
Use a programao do loop programming para isto (Instruo: LOOP):
- Salve o contador de varreduras do loop na varivel #L_Counter e o
valor de inicializao para os componentes individuais do
Meas_Value[..] na varivel #Ini_Value.
- Use o endereamento indireto de memria para o endereamento
individual dos componentes #Meas_Value[..] . Salve o endereo do
acesso na varivel #Par_Pointer.
6. Chame o FC41 no OB1 e atribua o parmetro de entrada #DB_Num
adequadamente. Transfira os blocos para a CPU e teste o programa.

Siemens Ltda.
Training Center

Pgina 10

ST-7PRO2
Endereamento Indireto

Endereamento Indireto de Registrador de rea Interna


Ponteiro de rea interna em AR 1 ou AR2:
31

30

29

28

27 26

25

24

23

22

21

20 19

18

17

16 15

14

13

12

11 10

0 0 0 0 0 0 0 0 0 0 0 0 0 B B B B B B B B B B B B B B B B X X X
215

20 22

Endereo do Byte (inteiro sem sinal)

No avaliado

20

Endereo
do Bit

Sintaxe de Comando :
LAR1 P#10.0

// Presetando em

[AR1,

AR1: 00000000 0000 0000 0000 0000 0101 0000


+ 200

rea Dimenso
do acesso

SIMATIC S7
Siemens AG 1998. All rights reserved.

P#200.0]

Registr. Constante
de end. de offset

Date:
File:

Instruo :
Executada

4/10/2007
PRO2_04P.11

L MW 210

Conhecimento em Automao
Training Center

Viso Geral

Com Endereamento Indireto de Registrador com rea Interna, o endereo


(localizao da memria) do operando que se est acessando estar em um dos
dois registradores de memria (AR1, AR2).
O contedo dos registradores de memria sero neste caso um ponteiro de 32-bit
com configurao e significado idntico a memria de endereamento indireto.

Sintaxe

Com Endereamento Indireto de Registrador, as instrues consistem em:


uma instruo p.ex.: A, L, T, etc.
um identificador de endereo (I, MB, QD, etc.), que a combinao do
identificador de rea (I, Q, M, DB, DI, etc.) e um identificador de dimenso
(B=Byte, W=WORD, D=DWORD).
e a declarao de um AR, que junto com uma constante de offset deve
ser
colocado dentro de colchetes. Este offset adicionado ao contedo do
endereo especificado no AR antes da instruo ser executada.
O contedo do registrador de endereos (AR) e o offset formaro o ponteiro de
rea interna que consiste do endereo de byte + endereo de bit.
A declarao do offset na sintaxe do comando imperativa.

Notas

Para endereamento indireto de byte, word ou double o word, o offset tem que
ter no endereo do bit o valor "0", caso contrrio um erro de runtime ativado na
CPU durante a execuo da instruo.
Se o AR1 ou AR2 especificado no registro indireto, contm um ponteiro de
rea cruzada (veja prxima pgina), ento o identificador de rea do ponteiro
no ser avaliado durante a execuo da instruo.
O identificador de rea no identificador de endereo vlido.

Siemens Ltda.
Training Center

Pgina 11

ST-7PRO2
Endereamento Indireto

Endereamento Indireto de Registrador de rea Cruzada


Ponteiro de rea cruzada no AR 1 our AR2:
31

30

29

28

27 26

25

24

23

22

21

20 19

18

17

16 15

14

13

12

11 10

1 0 0 0 0 R R R 0 0 0 0 0 B B B B B B B B B B B B B B B B X X X
Endereo do Byte (inteiro sem sinal)

Identificador de rea

Endereo
do Bit

Bit 31=0: rea interna


Bit 31=1: rea cruzada

Identificador de rea :
000
010
100
110

Sintaxe do Comando :

I/O
Sadas (outputs) (PIQ)
Dados no DB Register
Dados locais prprios

LAR1 P#I10.0

// Presetado em

P#200.0]

Dimenso

[AR1,

Siemens AG 1998. All rights reserved.

Entradas (inputs) (PII)


Memrias M
Dados no DB Register 2 (DI)
LD do bloco chamado

AR1: 10000001 0000 0000 0000 0000 0101 0000


+ 200

Regist.
Offset
endereo Constante

SIMATIC S7

001
011
101
111

Instruo
executada:
Date:
File:

4/10/2007
PRO2_04P.12

L IW 210

Conhecimento em Automao
Training Center

Viso Geral

No endereamento indireto de registrador com rea cruzada, o identificador de


rea (I, Q, M, etc.) e endereo (localizao de memria) (byte.bit) do operando que
se deseja acessar, est no ponteiro de rea cruzada em um dos dois registradores
de endereos (AR1, AR2).

Sintaxe

No endereamento indireto de registrador com rea cruzada, a instruo inteira


consiste em:
uma instruo (p.ex.: A, L, T, etc.)
um identificador de dimenso (B=BYTE, W=WORD, D=DWORD).
e a declarao de um AR, que junto com uma constante de offset deve
ser
colocado dentro de colchetes.
O contedo do AR neste caso deve ser ponteiro de rea cruzada com
identificador de rea e endereo de byte.bit.
O offset (byte.bit) adicionado ao contedo do endereo especificado no AR
antes da instruo ser executada.
A declarao do offset na sintaxe do comando imperativa.

Notas

Para endereamento indireto de byte, word ou double o word, o offset tem que
ter no endereo do bit o valor "0", caso contrrio um erro de runtime ativado na
CPU durante a execuo da instruo.
Acesso a dado local prprio (identificador: 110) no possvel com
endereamento indireto de rea cruzada. A mensagem de erro "unknown area
identifer" apresentada.
Acesso a dado local prprio s possvel com endereamento de rea
interna.

Siemens Ltda.
Training Center

Pgina 12

ST-7PRO2
Endereamento Indireto

Instrues para Carregamento dos Registradores de Endereo

Carregando o Registrador de Endereos

LARn (n =1 ou 2):
LARn <Endereo>
LARn P#<Endereo>
<Endereo>:
Registro de processador:
Variveis de 32-bit como:
variveis simbl. 32-bit :
(compartilhada e local)
P#<Endereo>
Ponteiro para endereos
booleanos absolutos:
Ponteiro para local,
endereos simblicos

SIMATIC S7
Siemens AG 1998. All rights reserved.

Carregar contedo do ACCU1 no ARn


Carregar contedo do<Endereo> no ARn
Carregar endereo do<Endereo> no ARn

AR1, AR2 (p.ex. LAR1 AR2 e LAR2 AR1)


MDn, LDn, DBDn, DIDn (p.ex. L DBD5, etc.)
varivel compartilhada 32-bit (p.ex. LAR1 "Index",
etc.) e variveis TEMP de OBs, FBs e FCs
(p.ex. LAR1 #Address, etc.)

In.m, Qn.m, Mn.m, Ln.m, DBDn.m, DIDn.m


(p.ex. LAR1 P#M5.3, LAR2 P#I3.6, etc.)
OB: variveis TEMP (p.ex.: LAR1 P##Pointer, etc.)
FB: variveis IN, OUT, INOUT, STAT e TEMP
FC: variveis TEMP (LAR1 P##Loop, etc.)

Date:
File:

4/10/2007
PRO2_04P.13

Conhecimento em Automao
Training Center

Carregando
Operandos

Com ajuda de funes de carga, possvel iniciar o registrador de


endereos com valores definidos.
A funo de carga LARn (n=1, 2) carrega o ponteiro no ARn. ACCU1 ou ARn ou
uma double word da rea de endereos de memria M, dado local temporrio,
dado de DB global e dado de DB instance podem ser usados como fonte. O acesso
pode ser absoluto ou simblico.
Se voc no especificar o endereo, o contedo do ACCU1 automaticamente
carregado no ARn. O contedo do registrador carregado ou a double word tem que
corresponder ao formato do ponteiro da rea.

Carregando
Ponteiros

Ponteiros diretos (endereos) podem naturalmente tambm ser carregados


em endereos nos registradores de endereos.
Com auxlio da instruo:
L P#<identificador de rea>n.m
voc pode carregar um ponteiro de rea cruzada diretamente no AR especificado.
Somente um acesso absoluto possvel.
Um ponteiro de rea cruzada para uma varivel local de nome #Address pode por
exemplo com ajuda da seguinte instruo:
LARn P##Address (n=1, 2)
ser carregado em um dos dois AR. O ponteiro de rea cruzada formado contm o
endereo do primeiro byte da varivel local.
Este acesso possvel com todas variveis TEMP dos OBs, FBs e FCs, assim
como em variveis IN, OUT, INOUT e variveis STAT dos FBs.

Nota

Se voc quer carregar ponteiros em parmetros IN, OUT e INOUT (#Param) de


uma FC nos ARs, isto no possvel fazer de maneira direta. Um passo
intermedirio deve ser feito:
L P##Param
(Carrega o parmetro ponteiro #Param no ACCU1)
LARn
(Carrega o contedo do ACCU1 no ARn)

Siemens Ltda.
Training Center

Pgina 13

ST-7PRO2
Endereamento Indireto

Outras Instrues com Registradores de Endereo

Transferindo de um Registro de Endereo

TARn (n =1 or 2):
TARn <Endereo>
<Endereo>:
Registro de processador:
Variveis abs. de 32-bit:
variveis simbl. 32-bit :
(compartilhada e local)

AR2 (p.ex. TAR1 AR2 )


MDn, LDn, DBDn, DIDn (p.ex. TAR2 MD5, etc.)
varivel compartilhada 32-bit (p.ex. TAR1 "Index",
etc.) e variveis TEMP de OBs, FBs e FCs
(p.ex. TAR1 #Address, etc.)

Troca dos Registros de Endereo

Transferindo o contedo do ARn para ACCU1


Transferindo o contedo do ARn para o <Endereo>

CAR

Troca dos contedos entre AR1 e AR2

Adicionando ao Registro de Endereo

+ARn
+ARn P#n.m

SIMATIC S7
Siemens AG 1998. All rights reserved.

Soma ACCU1-L ao ARn


Ad. ponteiro de rea interna P#n.m no AR1 ou AR2

Date:
File:

4/10/2007
PRO2_04P.14

Conhecimento em Automao
Training Center

Transferindo do
AR

A instruo TARn transfere a completa rea do ponteiro do registro de


endereo ARn. O outro registro de endereo ou uma double word da rea de
memria M, dado local temporrio, dados de DB ou DI podem ser especificados
como destino.
Se nenhum endereo for especificado, TARn transfere o contedo do AR para o
ACCU1. O valor anterior do ACCU1 deslocado para o ACCU2; o contedo do
ACCU2 perdido.
O contedo do ACCU3 e ACCU4 (S7-400) se mantm inalterados.

Troca entre ARs

A instruo CAR troca os contedos de AR1 e AR2.

Somando aos ARs

Um valor pode ser somado aos registros de endereos, por exemplo,


incrementar o valor do endereo em todo ciclo de loop de um programa . O valor
pode ser especificado como uma constante (ponteiro de rea-interna) com a
instruo ou como o contedo da palavra direita do ACCU1-L .
As instrues +AR1 e +AR2 interpretam o valor encontrado no ACCU1 como um
numero em formato INT, expande-o para 24 bits com o sinal correto e soma-o ao
endereo contido no registrador. Desta forma o ponteiro pode ser menor. Se o valor
ficar abaixo ou acima da rea permitida para endereos de byte (0 ... 65 535),
nenhum impacto ser causado; os bits acima simplesmente so desprezados.
A instruo +ARn P#n.m adiciona um pointer de rea interna ao registro de
endereo especificado. O ponteiro da rea especificada desta forma pode ter um
tamanho mximo de P#4095.7.
Nenhuma das instrues especificadas acima ou na pgina anterior modificam os
bits da status word.

Siemens Ltda.
Training Center

Pgina 14

ST-7PRO2
Endereamento Indireto

Caractersticas do Registrador de Endereamento Indireto

Uso interno do AR1 pelo editor STL/LAD/FBD

Acessando os parmetros de FCs, o AR1 register e o DB register so


sobrescritos, se os parmetros forem do tipo complexo
("ARRAY", "STRUCT", DATE_AND_TIME") .
Acessando parmetros INOUT de FBs, AR1 register e o DB register so
sobrescritos, se o parmetro INOUT do tipo complexo
("ARRAY", "STRUCT", DATE_AND_TIME")
Nenhum acesso a parmetro local deve acontecer entre o
carregamento do registro de endereo e o registro de acesso
indireto da varivel desejada.

Uso interno do AR2 pelo editor STL/LAD/FBD

O AR2 register e o DI register so usados como registrador bsico de


endereos para endereamento de todos parmetros e variveis STAT de FBs.

Se AR2 ou DI forem sobrescritos pelo usurio em um FB,


nenhum acesso aos parmetros do FB ou variveis STAT pode
acontecer depois disso, quer dizer, sem uma restaurao de
ambos os registros.
Nenhuma restrio com relao ao AR2 e DI register dentro de FCs
SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.15

Conhecimento em Automao
Training Center

Registrador de
Endereos AR1

O Editor STEP 7 usa o registrador de endereo AR1 para acessar os


parmetros de bloco complexos. Dentro de funes, com todos acessos simblicos
de parmetros do tipo "ARRAY" ou "STRUCT", os registros AR1 e DB so
sobrescritos.
Bem como, com acessos de parmetros in/out do tipo "ARRAY" ou "STRUCT"
dentro de um FB, os registros AR1 e DB so sobrescritos.
Acesso simblico de variveis temporrias em FBs ou FCs no sobrescrevem nem
o AR1 e nem o registrador DB.

Registrador de
Endereos AR2

O Editor STEP 7 usa a rea interna de registro de endereamento indireto


para acesso simblico de dados instance, quer dizer, de todos os parmetros e das
variveis estticas de um FB. O registrador DI especifica o respectivo DB instance
e o AR2 o respectivo multi instance dentro do instance DB.
Nenhum acesso a dados instance pode acontecer depois destes registradores DI e
AR2 serem sobrescritos, pois o contedo destes dois registradores no so
restabelecidos. Se voc quer usar o AR2 ou registrador DI em um FB para seus
prprios propsitos, ento o seguinte procedimento recomendado:
1. Salve o contedo do DI e AR2 em variveis do tipo DWORD:
TAR2 #AR2_REG // Salva AR2 numa varivel temporria #AR2_REG
L DINO
// Carrega o contedo do DI no ACCU1
T #DI_REG
// Salva numa varivel temporria #DI_REG
2. Use o registrador DI e AR2 para seus prprios propsitos. Nenhum acesso a
parmetros de FBs ou variveis estticas podem ocorrer
durante este
segmento.
3. Restabelea o registrador DI e o AR2:
LAR2 #AR2_REG // Carrega AR2 com contedo do #AR2_REG
OPN DI[#DI_REG] // Restabelece o registrador DI
Os parmetros do FB e variveis estticas podem novamente serem
acessados simblicamente.

Siemens Ltda.
Training Center

Pgina 15

ST-7PRO2
Endereamento Indireto

Exerccio 4.2: Loop com Registrador de Endereamento Indireto


DB42

Endereo do Byte

R1
#A

#ACCU1

d
iro
e
t
n
Po DB
no

e
nd
e
o

Number[1]

Number[2]

o
re

32
36

#ACCU2

40

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.16

9
10

Number[9]
Number[10]

11
.
.
.

Number[11]
etc.

Conhecimento em Automao
Training Center

Objetivo

Familiarizar-se com o uso de endereamento indireto de registrador em Loop com


um exemplo prtico.

Definio

Endereamento indireto do registrador usado para programao de um loop. Os


valores de 1 a 100 so escritos sucessivamente em 100 memrias.
Programar uma soluo tima (sem variveis temporrias adicionais) do exerccio
4.1.
Salve os valores do contador de Loop e inicializao nos acumuladores.
Para enderear os componentes Tank[..] use o AR1 (endereamento indireto do
registrador com rea interna).

Procedimento

1. Gerar uma FC42 e um DB42.


2. Nas declaraes do DB42, defina uma varivel #Number do tipo
ARRAY[1..100] com os componentes tipo DINT.
3. Na tabela de declaraes do FC42, defina um parmetro de entrada
#DB_Num do tipo WORD e uma varivel temporria #I_DB_Num do tipo
WORD.
4. Dentro do FC42, primeiro abra o DB, cujo nmero ser passado usando
#DB_Num. Use a varivel temporria #I_DB_Num para isto.
5. Ento presete os campos #Number[1] a #Number[100] no DB42 em
ordem
ascendentein com os nmeros 1.0 to 100.0.
- Use programao de loop para isto (Instruo: LOOP):
- Use endereamento indireto de registro com AR1 para
endereamento individual dos componentes dos #Number[..] .
6. Chamar FC42 no OB1 e atribua parmetro para o parmetro de entrada
#DB_Num adequadamente. Transfira os blocos para CPU e teste o seu
programa.

Siemens Ltda.
Training Center

Pgina 16

ST-7PRO2
Endereamento Indireto

Tipos de Ponteiros do STEP 7

Ponteiro 16-bit para Endereamento Indireto de Memria

Para acesso indireto de memria de temporizadores, contadores e DBs


abertos

Ponteiro 32-bit p/ Endereamento Indireto de Memria e Registrador

Ponteiro 32 bit de rea interna para acesso indireto de memria e registrador


de endereos em PI, PQ, I, Q, M, DB, DI e L (pilha local)
Ponteiro 32 bit de rea cruzada para acesso indireto do registrador de
endereos PI, PQ, I, Q, M, DB, DI, L e V (Pilha de dados locais do bloco
chamado)

Ponteiro 48-bit (Tipo de Dado POINTER)

Tipo de dado prprio para passagem de parmetros para blocos (FBs e FCs)
Contm, em adio ao ponteiro 32-bit de rea-cruzada, a declarao do
nmero do DB

Ponteiro 80-bit (Tipo de Dado ANY)

Tipo de dado prprio para passagem de parmetros para blocos (FBs e FCs)
Contm, em adio ao ponteiro 32-bit de rea-cruzada, a declarao do
nmero do DB, tipo de dado e fator de repetio

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.17

Conhecimento em Automao
Training Center

Tipos de Ponteiros
do STEP 7

Alm dos tipos de ponteiros descritos na seo anterior (16-bit, 32-bit reainterna e 32-bit rea-cruzada), o STEP 7 reconhece dois tipos de ponteiros
adicionais:
Ponteiro 48-bit (tipo de dado "POINTER")
Ponteiro 80-bit (tipo de dado "ANY")
Os pointers de 16 e 32-bit podem ser carregados diretamente no acumulador ou
registrador de endereo e assim podem ser usados para endereamento indireto
dentro dos blocos.
Os pointers tipo POINTER e ANY (maior que 32 bit) no podem ser carregados
diretamente nos registradores e usados para endereamento indireto nos blocos.
Eles so usados exclusivamente para um endereamento completo dos
parmetros atuais na passagem para parmetros formais dos blocos chamados.
Por exemplo, voc pode declarar um parmetro tipo POINTER ou ANY num bloco
e durante a chamada do bloco atribuir a este parmetro o endereo atual.

POINTER

O dado tipo POINTER usado principalmente pelo STL/LAD/FBD Editor para


passar um parmetro atual do tipo complexo, como "ARRAY", "STRUCT", e DT,
para chamada de FB ou FC.
O editor STL/LAD/FBD checa imediatamente a consistncia do tipo de dado e o
comprimento atribudo ao parmetro atual, basta somente passar o endereo inicial
completo para o parmetro atual interior.
Dentro de um bloco chamado, voc pode ento acessar os parmetros atuais do
registrador indireto usando este PONTEIRO.

ANY

O pointer tipo ANY principalmente usado pelo STEP7 para atribuir parmetros as
funes de sistema (SFCs) e blocos de funes de sistema (SFBs). Parmetros
dos tipos de dados ANY podem tambm serem utilizados pelo usurio para gerar
blocos mais poderosos.

Siemens Ltda.
Training Center

Pgina 17

ST-7PRO2
Endereamento Indireto

Estrutura e Atributos de um Dado Tipo "POINTER

Estrutura do tipo de dado: "POINTER (PONTEIRO)


DB Nmero (INT)

Byte n+1

Byte n+2

1OOO_ORRR_OOOO_OBBB
(ponteiro 32-bit de

Byte n+3

Byte n+4

BBBB_BBBB_BBBB_BXXX
rea cruzada)

Byte n+5

Byte n

Atributos de um parmetro tipo "POINTER"

Ponteiro mostrado
P#DBn .DBX x.y
P#DIn .DIX x.y
P#Zx.y

com: n= DB nmero, x= byte-nmero, y= bit-nmero


(p.ex.: P#DB5.DBX3.4, P#DI2.DIX10.0, etc.)
com:Z= rea, p.ex.: P, I, Q, M e L
(p.ex.: P#I5.3, P#M10.0, etc.)
Declarao de Endereo:
MD30
(Neste caso, identificador do nmero do DB e
#Motor_on
endereo do bit so automaticamente fornecidos
"Motor_1".speed
ao "POINTER")
SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.18

Conhecimento em Automao
Training Center

Dado tipo POINTER

Um parmetro do tipo POINTER contm adicionalmente ao pointer de rea


cruzada, um n de DB (inteiro sem sinal - faixa: 0 ... 65,535). Em todos os demais
casos, quando o endereo endereado se encontra em outras reas (P, I, Q, M, L),
"0" colocado nos primeiros dois bytes do "POINTER".

Atributo de
Parmetro

Se durante a chamada de um bloco (FC ou FB), um parmetro tipo


POINTER tem que ser definido, isto pode ser feito via apresentao do pointer ou
por declarao do endereo.

Apresentao
do Pointer

Neste caso, um pointer (P#...) tem que ser declarado desde o primeiro bit do
endereo, como a seguir:
P#DB10.DBX2.0
// Data bit 2.0 in DB10, identificador de rea "DB"
P#I5.3
// I5.3, DB nmero = 0, identificador de rea "PII")

Declarao do
Endereo

Neste caso, a declarao do endereo suficiente (sem P#...). O endereo


pode ser declarado absolutamente, ou seja, via n de DB , identificador de
endereo e endereo de byte ou bit associado, como a seguir:
DB5.DBW10
// Bit 10.0, DB nmero = 5, identificador de rea
// "DB ou simblico.
#Motor_on, "Motor_1".speed
Em ambos casos, o editor STL/LAD/FBD estabelece o nmero de DB associado, o
identificador de rea e o endereo de byte.bit e coloca isto no "POINTER".

Siemens Ltda.
Training Center

Pgina 18

ST-7PRO2
Endereamento Indireto

Configurao de um dado tipo "ANY

Ponteiro "ANY" para Tipos de Dados


16#10

Byte n

Fator de repetio

Byte n+2

DB Nmero

Byte n+4

Tipo de Dado

Byte n+6

1OOO_ORRR_OOOO_OBBB

Byte n+8

BBBB_BBBB_BBBB_BXXX

Ponteiro "ANY" para Tipos de Parmetros


16#10

Byte n

Tipo de Parmetro

Byte n+2

16#0001

Byte n+4

16#0000

Byte n+6

16#0000

Byte n+8

Nmero do Temporizador, Contador ou Bloco

SIMATIC S7

Date:
File:

Siemens AG 1998. All rights reserved.

Tipo de Dado
VOID
BOOL
BYTE
CHAR
WORD
INT
DWORD
DINT
REAL
DATE
TOD
TIME
S5TIME
DT
STRING

Identificador
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0E
13

Tipo Parmetro
BLOCK_FB
BLOCK_FC
BLOCK_DB
BLOCK_SDB
COUNTER
TIMER

Identificador
17
18
19
1A
1C
1D

Conhecimento em Automao
Training Center

4/10/2007
PRO2_04P.19

Tipo de Dado ANY

O pointer tipo ANY contm adicionalmente ao pointer de cruzamento de rea e o n


de DB, um identificador de tipo de dado um fator de repetio. Com isto, possvel
identificar no somente um endereo individual mas tambm uma rea completa de
dados.
H duas verses do ponteiro ANY:
para variveis com tipos de dados: O ponteiro ANY ento contm um
identificador de sintaxe (syntax-ID) 16#10 para STL, um identificador para o tipo
de dado, um fator de repetio, o nmero do DB e um ponteiro de rea cruzada.
para variveis com tipo de parmetros: neste caso, o pointer ANY consiste
meramente do identificador de sintaxe (syntax-ID) 16#10 para STL, um
identificador de tipo de parmetro e um nmero sem sinal de 16-bit no byte n+8
e byte n+9, que reflete o nmero do bloco. Os bytes n+4, ..., n+7 so preenchidos
com 0.

Declarao dos
Ponteiros ANY

Variveis do tipo ANY geralmente podem ser declaradas como parmetros


IN, OUT e INOUT em FCs e FBs.
A declarao oferece uma possibilidade adicional como varivel temporal dentro de
FBs. Com ajuda desta varivel temporria possvel criar um ponteiro ANY que
mutvel durante a execuo do programa e pass-lo para uma chamada de bloco
(ver: Atribuio de Parmetros Indiretos do Tipo ANY).

Identificador de
rea (RRR):

000
010
100
110

Siemens Ltda.
Training Center

I/O
Sadas (outputs) (PIQ)
Dados no DB register
Dados locais prprios

001
011
101
111

Pgina 19

Entradas (inputs) (PII)


Memrias M (Bit memory)
Dados no DI register
LD do bloco chamado

ST-7PRO2
Endereamento Indireto

Atributos dos Parmetros de Dados Tipo "ANY"

Apresentao do Pointer:

P#[Data block.]Bit address Type Number


P#DB10.DBX12.0 REAL 20 Pointer na rea do DB10, iniciando com Byte
12, constitudo de 20 endereos do dado tipo
REAL (ARRAY[1..20] OF REAL)
P#I 10.0 BOOL 8
Pointer de um campo de 8 bits no IB10

Declarao de Endereos:

absoluto:
DB5.DBD10

IW32
T35
simblico:
#Motor_1.speed
"Pump:Start"

Data type: DWORD, Repetition factor: 1


DB number: 5, Pointer: P#DB5.DBX10.0
Type: WORD, RF: 1, DB-No: 0, Pointer: P#I32.0
Type: TIMER, No.: 35
com dado tipo elementar, o compilador
estabelece o correto tipo de dado, fator de
repetio 1 e pointer

Nota
com atributo simblico (ARRAY, STRUCT, STRING, UDT), o identificador de
tipo de dado 02 (BYTE) e a dimenso da rea em bytes somente
estabelecida pelo compilador e introduzida no ponteiro ANY.

SIMATIC S7
Siemens AG 1998. All rights reserved.

Date:
File:

4/10/2007
PRO2_04P.20

Conhecimento em Automao
Training Center

Atributos

Um parmetro tipo "ANY pode ser declarado como uma declarao direta de
endereos (variveis).

Apresentao do
Ponteiro

Declarando-se o pointer display (p.ex.: P#DB5.DBX10.0 INT 8) o Editor


STL/LAD/FBD monta um ponteiro ANY que corresponde em tipo e em nmero com
as declaraes.
Atribuies na apresentao do ponteiro sempre fazem sentido, quando uma rea
de dados est sendo endereada, para a qual nenhuma varivel tenha sido definida
ou por exemplo, nenhuma varivel adequada (p.ex.: ARRAY ou STRUCT) pode ser
definida (p.ex.: P, PII, PIQ, M).
Adicionalmente a exibio de ponteiro absoluto deve ser usada quando dentro do
bloco chamado a informao correta sobre o fator de repetio e o tipo de dados
requerido (p.ex.: ARRAY[1 ..8] de REAL).

Apresentao
de endereo

Um parmetro do tipo "ANY" pode tambm ser diretamente definido com o


endereo para o qual o ponteiro ANY ser apontado. Esta declarao pode ser
absoluta ou pelo nome de varivel simblica.
Com a declarao do endereo absoluto o editor STL/LAD/FBD estabelece
automaticamente o tipo de dado associado (BOOL, BYTE, WORD, DWORD), um
fator de repetio "1", o nmero do DB assim como ponteiro de rea cruzada no
primeiro bit do endereo e entra com estes valores na estrutura do ponteiro.
Igualmente, o Editor STL/LAD/FBD estabelece a informao correta pelo endereo
quando a declarao acontecer pelo nome simblico e a varivel fornecida do
tipo de dados elementar.
Se a varivel do tipo complexo (p.ex. ARRAY[1..8] de REAL), ento o Editor
STL/LAD/FBD meramente coloca as informaes em bytes sobre a rea ocupada
pela varivel (p.ex.: fator de repetio: 32, dado tipo: BYTE)

Nota

Siemens Ltda.
Training Center

Pgina 20

ST-7PRO2
Endereamento Indireto

Atributos Indiretos de Parmetros do Tipo ANY

Atributos atravs dos parmetros atuais temporrios dos tipos de dados


ANY

declare varivel temporria do tipo de dado ANY na chamada do bloco


p.ex.: temp

aux_pointer

ANY

carregue a varivel temporria ANY com a informao do ponteiro


p.ex.:
LAR1 P##aux_pointer
// Carrega endereo ponteiro aux.
L
B#16#01
// Carrega identificador B#16#01
T
LB [AR1,P#0.0]
// e transfere para Offset 0
L
...
...

Defina o parmetro de bloco tipo ANY (Targetfield) com a varivel


ponteiro auxiliar (aux_pointer)
p.ex.:
CALL FC
111
Targetfield:=#aux_pointer

Vantagem

redefinio do parmetro do pointer ANY durante execuo do programa.

SIMATIC S7
Siemens AG 1998. All rights reserved.

Definio
Indireta

Date:
File:

4/10/2007
PRO2_04P.21

Conhecimento em Automao
Training Center

O bloco chamado tambm pode designar um parmetro de FC ou FB de


dados tipo ANY com uma varivel temporria de dados tipo ANY. Esta varivel
temporria armazenada na pilha de dados locais do bloco de chamada.
Neste caso, o Editor de STL no passa nenhum ponteiro varivel temporria (na
pilha de dados local), mas assume que esta varivel temporria ANY j contm o
ponteiro da varivel de fato desejada.
O Editor passa neste caso o ponteiro ANY contido na varivel temporria da FC ou
da FB chamado.

Vantagem

Siemens Ltda.
Training Center

Voc tem a possibilidade de setar um ponteiro ANY em um parmetro ANY que


voc pode mudar durante execuo do programa. O ponteiro varivel ANY ser
muito til, especialmente nos casos das funes do sistema, como SFC 20
(BLKMOV) ou SFC 21 (FILL) por exemplo.

Pgina 21

ST-7PRO2
Endereamento Indireto

Avaliando um ponteiro tipo "ANY


Address
0.0
0.0
2.0
4.0
6.0

Declaration
in
out
in_out
temp
temp
temp
temp

Name
Par_Pointer

Type
ANY

Data_type
WF
DB_Nr
Area_Pointer

BYTE
WORD
WORD
DWORD

Initial Value

Comment

Network 1: Estabelecimento do tipo de dado, fator de repetio, nmero


do DB e ponteiro de rea
L
LAR1
L
T
L
T
L
T
L
T

P##Par_Pointer
B [AR1,P#1.0]
#Data_type
W [AR1,P#2.0]
WF
W [AR1,P#4.0]
#DB_Nr
D [AR1,P#6.0]
#Area_Pointer

SIMATIC S7
Siemens AG 1998. All rights reserved.

Viso Geral

Procedimento

Siemens Ltda.
Training Center

//
//
//
//
//
//
//
//
//
//

Date:
File:

Carrega endereo do #Pointer no ACCU1


e daqui carrega no AR1;
Cria o tipo de dado do ponteiro
e carrega em varivel temporria
Cria o fator de repetio
e carrega em varivel temporria
Cria o nmero do DB
e carrega em varivel temporria
Cria o ponteiro de rea
e carrega em varivel temporria

4/10/2007
PRO2_04P.22

Conhecimento em Automao
Training Center

Dentro do bloco chamado (FB ou FC) as informaes que esto no ponteiro


passado do tipo "POINTER " ou "ANY " podem ser lidas e avaliadas
adequadamente com ajuda de registrador de endereamento indireto.
A avaliao da informao passada para um pointer ANY " est listada nos passos
seguintes. Os passos esto relacionados ao exemplo anterior onde um parmetro
de entrada (tipo "ANY ") com o nome #Par_Pointer e vrias variveis temporrias
para o armazenamento temporrio de informao foram declaradas.
1. Em primeiro lugar, um ponteiro de rea cruzada estabelecido na passagem
do ponteiro ANY" e carregado no registro de endereo AR1.
Isto acontece com
a instruo:
LAR1 P# #Par_Pointer // em FBs ou
L P# #Par_Pointer
// em FCs, o endereo deve antes de tudo ser
LAR1
// carregado no ACCU1 e dele para o
// registrador AR1
O ponteiro "ANY" passado , no caso de um FB, armazenado no DB instance
(este automaticamente aberto) ou com uma FC, na pilha de dados locais do
bloco que originou a chamada.
2. Usando o Registrador de endereamento indireto, as informaes passadas
no ponteiro "ANY" podem ser lidas agora e, por exemplo, pode ser armazenado
temporariamente em variveis temporais do bloco para outros processamentos.
L B[AR1,P#1.0] // l o identificador do tipo de dados do parmetro
// atual no ACCU1
L W[AR1,P#2.0] // l o fator de repetio no ACCU1
L W[AR1,P#4.0] // l o n do DB no ACCU1, ou "0" quando o
//parmetro atual est armazenado em P, PII, PIQ,
// M, L.
L D[AR1,P#6.0] // l ponteiro de rea cruzada do parmetro atual
// no ACCU1

Pgina 22

ST-7PRO2
Endereamento Indireto

Exerccio 4.3: Funo para calcular valor da soma e mdia

Name
Measurement

Type
STRUCT
ARRAY[1..8]
REAL
END_STRUCT

Decl.
in
out
out

Name
Typ
Measured_values ANY
Sum
REAL
Mean_value
REAL

DB43
103.45
EN

2086.5
1.7895

P#DB43.DBX0.0 REAL 8

Measured_values

....

Siemens AG 1998. All rights reserved.

ENO
Sum

Mean_value

....

SIMATIC S7

FC 43

Date:
File:

4/10/2007
PRO2_04P.23

Conhecimento em Automao
Training Center

Viso Geral

FCs ou FBs genricas podem ser geradas com ajuda do dado tipo"ANY". No so
comprometidos FCs ou FBs genricas de tipo de dados especficos. Elas podem
adaptar-se dinamicamente para os tipos de dados ou comprimentos de campo
passados a eles, ou comprimentos de campo passados a eles.

Objetivo

Gerar a FC43 com a seguinte funcionalidade:


A funo espera um campo REAL valores com parmetro de entrada
Measured_values (tipo "ANY").
A funo fornece os valores somados dos elementos de campo passados no
parmetro #Sum (tipo: REAL) e o valor mdio de todos os elementos de campo
no parmetro de sada #Mean_value (tipo: REAL).
Se outro tipo de dado for passado, ocorrer um erro (parmetro ENO, ou seja,
BR bit=0, n REAL invlido para #Sum e #Mean_value
1. Crie a FC43 e declare os parmetros entrada e de sada listados
anteriormente. Tambm declare as correspondentes variveis temporrias
para armazenamento temporrio de informao sobre fator de repetio, DB n. e
o ponteiro de rea do parmetro atual.
2. Comear com a leitura do ponteiro "ANY" passado dos dados tipo
identificador e sair do FC43 adequadamente, se o tipo de dados do
parmetro atual no REAL.
3. Em um loop (instruo de LOOP), programe a soma de todos os elementos
de campo. Calcule a soma e valor mdio e atribua os resultados aos parmetros
de sada correspondentes.
4. Gerar o DB43. Declare uma varivel Measurement do tipo ARRAY[1..8]
OF REAL em DB43 e entre valores apropriados.
5. Programe a chamada de FC43 em OB1. Nomeie o parmetro de entrada no
pointer display. Nomeie endereos na rea de memria para os parmetros de
sada
6. Descarregue os blocos participantes na CPU e teste o resultado.

Procedimento

Siemens Ltda.
Training Center

Pgina 23

ST-7PRO2
Endereamento Indireto