Vous êtes sur la page 1sur 23

Endereçamento Indireto e Instruções com Registrador de Endereços

?
? ? 1

er
int
#P
o -
-
-
#Ini_Value -

9
10

#Counter

L W [AR1, P#200.0]

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.1
Opções de Endereçamento com STEP 7

Procedimento de endereçamento

Endereçamento Direto Endereçamento Indireto

absoluto simbólico memória indireta registrador indireto

16-bit pointer 32-bit pointer 32-bit pointer 32-bit pointer


(DB, T, C) área interna área interna área cruzada

Exemplos:

A I4.0 A "Mot_on" OPN DB[MW10] A I[MD30] A I[AR1,P#0.0] A [AR1,P#0.0]


L IW10 L #num SP T["runtime"] L IW["Number"] L ID[AR1,P#5.0] T W[AR1,P#0.0]

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.2
Endereçamento Direto de Variáveis
Endereço do Dimensões de
Operando Designação
Operando (p. ex.) Accesso Adicionais
Byte, word,
I 37.4 Entradas (Inputs)
double word
Byte, word,
Q 27.7 Saídas (Outputs)
double word
Byte, word, Periferia de Entrada
PIB 655
double word (Peripheral inputs)
Byte, word, Periferia de Saída
PQB 653
double word (Peripheral outputs)
Byte, word, Bits de Memória
M 55.0
double word (Bit memories)

T 114 -- Temporizadores (Timers)

C 13 -- Contadores (Counters)

Byte (DBB), word (DBW), Dado endereçado via


DBX 2001.6
double word (DBD) Registrador de DB
Byte (DIB), word (DIW), Dado endereçado via
DIX 406.1
double word (DID) Registrador de DI
Byte (LB), word (LW), Pilha de Dados Local
L 88.5
double word (LD) (Local data stack)

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.3
Endereçamento Direto de Variáveis em DBs

Carregar e
Abrir o DB
Transferir no DB

OPN DB 19 L DBB 1 Carrega o byte de dado 1 do DB


OPN "Values" L DBW 2 Carrega palavra de dado 2 (byte 2/3)
L5 Carrega o número 5
T DBW 4 Transfere para a palavra 4 do DB
OPN DI 20 L 'A' Carrega o caracter A em ASCII
L DIB28 Carrega o byte de dado 28 do DI
==I Compara

A DBX 0.0 Lê conteúdo do bit 0, byte 0


Instrução combinada L DB19.DBW4 Carrega palavra 4 do DB 19
(contém OPN DB..)
L "Values".Number_1 Acesso simbólico da
variável Number_1.
DB19 tem o nome
simbólico "Values"
A DB10.DBX4.7 Lê conteúdo do bit 7, byte 4
do DB 10

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.4
Avaliação de Informação de DB no Programa

 Instruções com DB Registers:


 CDB: Troca de DB Registers
DB-Register 123 24

CDB
DI-Register 24 123

antes: depois:

 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 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.5
Memória de Endereçamento Indireto

 Ponteiro de 16-bit em formato Word


(Endereçamento de DBs, T, C)
L 11
T MW 60

OPN DB[MW 60] OPN DB 11

 Ponteiro de 32-bit em formato Double Word


(Endereçamento de I, Q, M, ...)
L P#24.0
T MD 50

L I W [MD50] L IW 24

Área Dimensão Endereço


do Acesso

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.6
Estrutura de Ponteiros com Endereçamento Indireto de Memória

 Estrutura com um Ponteiro 16-bit:


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 146

215 27 20
Interpretação 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 9 8 7 6 5 4 3 2 1 0

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 20

Não avaliado Endereço do Byte ( inteiro sem sinal) Endereço


do Bit

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


L P#25.3 (P = "Pointer", Endereço do Byte= 25, Endereço do Bit= 3)

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.7
Características do Endereçamento Indireto de Memória
 Áreas de endereço para guardar Ponteiros de 16-bit e 32-bit:
 Memórias M (endereçamento absoluto ou simbólico,
p.ex.:OPN DB[MW30], OPN DI["Motor_1"], etc.
A I[MD30], T QD["Speed_1], etc.)
 Pilha de Dado Local (endereçamento absoluto ou simbólico,
p.ex.. OPN DB[LW10], OPN DI[#DB_NO], etc.
A I[LD10], T QD[#Pointer], etc.)
 DBs globais (só endereçamento 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ó endereçamento 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.)

 Características na Passagem de Ponteiros para FBs e FCs


 Ponteiros passados por parâmetros não podem ser usados diretamente para
endereçamento indireto de memória
 Ponteiros passados para endereçamento indireto de memória devem ser
copiados em variáveis temporárias antes do acesso

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.8
Exemplo de Endereçamento Indireto
FC30: Exemplo de endereçamento indireto

Network 1: abrir DB com endereçamento indireto

L #dbnumber // Copia o número do DB no MW100


T MW 100 //
OPN DB[MW 100] // Abre o DB

Network 2: Loop de apagamento

L P#18.0 // Endereço final(DBW18)como Ponteiro


T MD 40 // no MD 40;
L 10 // Preseta contador do loop em 10
anf: T MB 50 // e transfere para MB 50;
L 0 // Carrega valor inical ‘0’
T DBW[MD 40] // e transfere para o DB;
L MD 40 // Carrega o ponteiro e
L P#2.0 // decrementa de 2 Bytes
-D // e então transfere de volta
T MD 40 // para MD 40;
L MB 50 // Carrega o contador do loop
LOOP anf // decrementa e se necessário salta;

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.9
Exercício 4.1: Programando Loop com Endereçamento Indireto

DB41
Endereço do Byte

0 1.0 Meas_Value[1]

i n te r 4 2.0 Meas_Value[2]
Po o
r _ reç
a e
#P e nd
o do cal -
r o
n tei ha L -
#Ini_Value Po Pil -
na -

32 9.0 Meas_Value[9]
36 10.0 Meas_Value[10]
#Counter
40 11.0 Meas_Value[11]
.
. etc.
.

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.10
Endereçamento 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 9 8 7 6 5 4 3 2 1 0

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 2 0 22 20

Não avaliado Endereço do Byte (inteiro sem sinal) Endereço


do Bit

 Sintaxe de Comando :
LAR1 P#10.0 // Presetando em AR1: 00000000 0000 0000 0000 0000 0101 0000

+ 200
L M W [AR1, P#200.0]

Área Dimensão Registr. Constante Instrução : L MW 210


do acesso de end. de offset Executada

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.11
Endereçamento 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 9 8 7 6 5 4 3 2 1 0

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

Identificador de área Endereço do Byte (inteiro sem sinal) Endereço


do Bit
Bit 31=0: área interna
Bit 31=1: área cruzada

 Identificador de Área :
000 I/O 001 Entradas (inputs) (PII)
010 Saídas (outputs) (PIQ) 011 Memórias M
100 Dados no DB Register 101 Dados no DB Register 2 (DI)
110 Dados locais próprios 111 LD do bloco chamado
 Sintaxe do Comando :
LAR1 P#I10.0 // Presetado em AR1: 10000001 0000 0000 0000 0000 0101 0000

L W [AR1, P#200.0] + 200

Dimen- Regist. Offset Instrução L IW 210


são endereço Constante executada:

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.12
Instruções para Carregamento dos Registradores de Endereço
 Carregando o Registrador de Endereços
 LARn (n =1 ou 2): Carregar conteúdo do ACCU1 no ARn
 LARn <Endereço> Carregar conteúdo do<Endereço> no ARn
 LARn P#<Endereço> Carregar endereço do<Endereço> no ARn
<Endereço>:
 Registro de processador: AR1, AR2 (p.ex. LAR1 AR2 e LAR2 AR1)
 Variáveis de 32-bit como: MDn, LDn, DBDn, DIDn (p.ex. L DBD5, etc.)
 variáveis simból. 32-bit : variável compartilhada 32-bit (p.ex. LAR1 "Index",
(compartilhada e local) etc.) e variáveis TEMP de OBs, FBs e FCs
(p.ex. LAR1 #Address, etc.)
P#<Endereço>
 Ponteiro para endereços In.m, Qn.m, Mn.m, Ln.m, DBDn.m, DIDn.m
booleanos absolutos: (p.ex. LAR1 P#M5.3, LAR2 P#I3.6, etc.)
 Ponteiro para local, OB: variáveis TEMP (p.ex.: LAR1 P##Pointer, etc.)
endereços simbólicos FB: variáveis IN, OUT, INOUT, STAT e TEMP
FC: variáveis TEMP (LAR1 P##Loop, etc.)

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.13
Outras Instruções com Registradores de Endereço

 Transferindo de um Registro de Endereço


 TARn (n =1 or 2): Transferindo o conteúdo do ARn para ACCU1
 TARn <Endereço> Transferindo o conteúdo do ARn para o <Endereço>
<Endereço>:
 Registro de processador: AR2 (p.ex. TAR1 AR2 )
 Variáveis abs. de 32-bit: MDn, LDn, DBDn, DIDn (p.ex. TAR2 MD5, etc.)
 variáveis simból. 32-bit : variável compartilhada 32-bit (p.ex. TAR1 "Index",
(compartilhada e local) etc.) e variáveis TEMP de OBs, FBs e FCs
(p.ex. TAR1 #Address, etc.)

 Troca dos Registros de Endereço


 CAR Troca dos conteúdos entre AR1 e AR2

 Adicionando ao Registro de Endereço


 +ARn Soma ACCU1-L ao ARn
 +ARn P#n.m Ad. ponteiro de área interna P#n.m no AR1 ou AR2

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.14
Características do Registrador de Endereçamento Indireto
 Uso interno do AR1 pelo editor STL/LAD/FBD
 Acessando os parâmetros de FCs, o AR1 register e o DB register são
sobrescritos, se os parâmetros forem do tipo complexo
("ARRAY", "STRUCT", DATE_AND_TIME") .
 Acessando parâmetros INOUT de FBs, AR1 register e o DB register são
sobrescritos, se o parâmetro INOUT é do tipo complexo
("ARRAY", "STRUCT", DATE_AND_TIME")

Nenhum acesso a parâmetro local deve acontecer entre o


carregamento do registro de endereço e o registro de acesso
indireto da variável desejada.

 Uso interno do AR2 pelo editor STL/LAD/FBD


 O AR2 register e o DI register são usados como registrador básico de
endereços para endereçamento de todos parâmetros e variáveis STAT de FBs.

Se AR2 ou DI forem sobrescritos pelo usuário em um FB,


nenhum acesso aos parâmetros do FB ou variáveis STAT pode
acontecer depois disso, quer dizer, sem uma restauração de
ambos os registros.
 Nenhuma restrição com relação ao AR2 e DI register dentro de FCs

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.15
Exercício 4.2: Loop com Registrador de Endereçamento Indireto

DB42
Endereço do Byte

0 1 Number[1]
4 2 Number[2]
R1 ço
A e re
# nd
d oe -
o
t eir -
n
#ACCU1 Po DB -
no -

32 9 Number[9]
36 10 Number[10]
#ACCU2
40 11 Number[11]
.
. etc.
.

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.16
Tipos de Ponteiros do STEP 7
 Ponteiro 16-bit para Endereçamento Indireto de Memória
 Para acesso indireto de memória de temporizadores, contadores e DBs
abertos

 Ponteiro 32-bit p/ Endereçamento Indireto de Memória e Registrador


 Ponteiro 32 bit de área interna para acesso indireto de memória e registrador
de endereços em PI, PQ, I, Q, M, DB, DI e L (pilha local)
 Ponteiro 32 bit de área cruzada para acesso indireto do registrador de
endereços 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 próprio para passagem de parâmetros para blocos (FBs e FCs)
 Contém, em adição ao ponteiro 32-bit de área-cruzada, a declaração do
número do DB

 Ponteiro 80-bit (Tipo de Dado ANY)


 Tipo de dado próprio para passagem de parâmetros para blocos (FBs e FCs)
 Contém, em adição ao ponteiro 32-bit de área-cruzada, a declaração do
número do DB, tipo de dado e fator de repetição

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.17
Estrutura e Atributos de um Dado Tipo "POINTER”
 Estrutura do tipo de dado: "POINTER“ (PONTEIRO)

Byte n DB Número (INT) Byte n+1

Byte n+2 1OOO_ORRR_OOOO_OBBB


Byte n+3
(ponteiro 32-bit de

Byte n+4 BBBB_BBBB_BBBB_BXXX


Byte n+5
Área cruzada)

 Atributos de um parâmetro tipo "POINTER"


 Ponteiro mostrado
P#DBn .DBX x.y com: n= DB número, x= byte-número, y= bit-número
P#DIn .DIX x.y (p.ex.: P#DB5.DBX3.4, P#DI2.DIX10.0, etc.)
P#Zx.y com:Z= área, p.ex.: P, I, Q, M e L
(p.ex.: P#I5.3, P#M10.0, etc.)
 Declaração de Endereço:
MD30 (Neste caso, identificador do número do DB e
#Motor_on endereço do bit são automaticamente fornecidos
"Motor_1".speed ao "POINTER")

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.18
Configuração de um dado tipo "ANY”

 Ponteiro "ANY" para Tipos de Dados Tipo de Dado Identificador


VOID 00
Byte n 16#10 Tipo de Dado BOOL 01
Fator de repetição BYTE 02
Byte n+2 CHAR 03
Byte n+4 DB Número WORD 04
INT 05
Byte n+6 1OOO_ORRR_OOOO_OBBB
DWORD 06
Byte n+8 BBBB_BBBB_BBBB_BXXX DINT 07
REAL 08
DATE 09
TOD 0A
TIME 0B
S5TIME 0C
 Ponteiro "ANY" para Tipos de Parâmetros DT 0E
STRING 13
Byte n 16#10 Tipo de Parâmetro Tipo Parâmetro Identificador
Byte n+2 16#0001 BLOCK_FB 17
BLOCK_FC 18
Byte n+4 16#0000
BLOCK_DB 19
Byte n+6 16#0000 BLOCK_SDB 1A
COUNTER 1C
Número do Temporizador, Contador ou Bloco
Byte n+8 TIMER 1D

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.19
Atributos dos Parâmetros de Dados Tipo "ANY"
 Apresentação do Pointer:
 P#[Data block.]Bit address Type Number
P#DB10.DBX12.0 REAL 20 Pointer na área do DB10, iniciando com Byte
12, constituído de 20 endereços do dado tipo
REAL (ARRAY[1..20] OF REAL)
P#I 10.0 BOOL 8 Pointer de um campo de 8 bits no IB10
 Declaração de Endereços:
 absoluto:
DB5.DBD10 Data type: DWORD, Repetition factor: 1
DB number: 5, Pointer: P#DB5.DBX10.0
IW32 Type: WORD, RF: 1, DB-No: 0, Pointer: P#I32.0
T35 Type: TIMER, No.: 35
 simbólico:

#Motor_1.speed com dado tipo elementar, o compilador


"Pump:Start" estabelece o correto tipo de dado, fator de
repetição 1 e pointer
 Nota
com atributo simbólico (ARRAY, STRUCT, STRING, UDT), o identificador de
tipo de dado 02 (BYTE) e a dimensão da área em bytes é somente
estabelecida pelo compilador e introduzida no ponteiro ANY.

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.20
Atributos Indiretos de Parâmetros do Tipo “ANY”
 Atributos através dos parâmetros atuais temporários dos tipos de dados
ANY
 declare variável temporária do tipo de dado ANY na chamada do bloco
p.ex.: temp aux_pointer ANY
 carregue a variável temporária ANY com a informação do ponteiro
p.ex.:
LAR1 P##aux_pointer // Carrega endereço 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 parâmetro de bloco tipo ANY (Targetfield) com a variável
ponteiro auxiliar (aux_pointer)
p.ex.:
CALL FC 111
Targetfield:=#aux_pointer
 Vantagem
 redefinição do parâmetro do pointer ANY durante execução do programa.

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.21
Avaliando um ponteiro tipo "ANY”

Address Declaration Name Type Initial Value Comment


0.0 in Par_Pointer ANY
out
in_out
0.0 temp Data_type BYTE
2.0 temp WF WORD
4.0 temp DB_Nr WORD
6.0 temp Area_Pointer DWORD

Network 1: Estabelecimento do tipo de dado, fator de repetição, número


do DB e ponteiro de área

L P##Par_Pointer // Carrega endereço do #Pointer no ACCU1


LAR1 // e daqui carrega no AR1;
L B [AR1,P#1.0] // Cria o tipo de dado do ponteiro
T #Data_type // e carrega em variável temporária
L W [AR1,P#2.0] // Cria o fator de repetição
T WF // e carrega em variável temporária
L W [AR1,P#4.0] // Cria o número do DB
T #DB_Nr // e carrega em variável temporária
L D [AR1,P#6.0] // Cria o ponteiro de área
T #Area_Pointer // e carrega em variável temporária

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.22
Exercício 4.3: Função para calcular valor da soma e média

Name Type
STRUCT Decl. Name Typ
Measurement ARRAY[1..8] in Measured_values ANY
REAL out Sum REAL
END_STRUCT out Mean_value REAL

DB43
103.45
EN
FC 43 ENO
2086.5
1.7895 P#DB43.DBX0.0 REAL 8 Measured_values Sum
....
Mean_value
....

SIMATIC S7 Date: 09/03/14 Conhecimento em Automação


Training Center
Siemens AG 1998. All rights reserved. File: PRO2_04P.23