Professional Documents
Culture Documents
Motor 1
FC10
Meas_Value ARRAY[1..20] REAL Sum REAL Mean_value REAL L P##Meas_Value LAR1 L W [AR1,P#0.0] T #DB_Num OPN DB[DB_Num] L D [AR1,P#2.0] LAR1 . . . .
Motor 2
. . .
FB2
Ventilinsel
. . .
DB5 "Temperatura"
1 configura
"POINTER" no L-Stack
L-Stack (OB1)
LB 21
Funo FC10
in On out Off ... ARRAY[1..10] INT BOOL
BLD
Declaration Name
in out out in_out temp Meas_Val Sum Mean_Val DB_Num
Type
ARRAY[1..8] REAL REAL REAL WORD
Start value
Comment
P## Meas_Val
W [AR1,P#0.0] #DB_Num DB[DB_Num] D [AR1,P#2.0]
// // // // // // //
Carrega endereo do POINTER no ACCU1 e de l carrega no AR1; Determina o nmero do DB e carrega na varivel temporria; Abre DB Determina rea pointer e carrega no AR1;
Network 2: Clculo da soma (sum) L L BEGN: TAK ENT L +R +AR1 TAK LOOP T 0.000000e+000 8 D[AR1,P#0.0] P#4.0; BEGN; #Sum // // // // // // // // // // 0 no ACCU1 (sum =0.0) Contador para ACCU1; Sum=0 p/ ACCU2 Sum p/ ACCU1, contador p/ ACCU2 Contador p/ ACCU3 Componentes do campo no ACCU1 Sum no ACCU1, contador p/ ACCU2 Incrementa AR1 de 4 bytes Loop de contagem no ACCU1, sum no ACCU2 Decrementa loop contagem, salta se necessrio Transfere sum para #Sum
OB1 OB1
BLD = L T L T L T L T L T AC 1 L 20.0 W#16#1005 LW 21 10 LW 23 0 LW25 P#I0.0 LD27 P#DBX0.0 LD23 FC 10 P#L 21 P#Q 8.0 2
Funo FC10
in out ... On Off ANY BOOL
Execuo do Programa
CALL FC10
On Off := P#I0.0 10 INT := Q8.0
BLD
OB1
Funo FC10
in On out Off ... BLD = AC 1 L 20.0 FC 10 P#4.3 P#A 8.0 2 BLOCK_DB BOOL
BLD
L Stack (OB1)
1
...
DBB2 0 0 0 1 0 1 0 0
.. .. .. .. .. 0 1 .. 3
...
LB 20
Funo FC10
in in out ... On_1 On_2 Off BOOL BOOL BOOl
FC51
EN OB1_DATE_TIME IN_DT ENO Sec Min Hour QB13 QB12 QB8
DB2 "Temperature"
Network 1:
Declaration Name
in out out in_out in_out stat Meas_1 Sum_1 Sum_2 Meas_2 DB_Num
Type
ARRAY[1..10] REAL REAL REAL ARRAY[1..15] REAL INT
Start value
0.000000e+000 0.000000e+000
Comment
Network 1: Determinando o endereo de incio do Meas_1 LAR1 P##Meas_1 TAR2 +AR1 // // // // // // Carrega ponteiro de rea cruzada p/parmetro sem offset de endereo (multi-instances) no AR1 Carrega offset de endereo no ACCU1 Soma offset de endereo no AR1; AR1 agora aponta p/parmetros no DB instance DB instance j est aberto
Network 2: Acesso para Meas_1 L L BEGN: TAK ENT L +R +AR1 TAK LOOP T 0.000000e+000 10 D[AR1,P#0.0] // // // // // // // // // // 0 no ACCU1 (Soma =0.0) Contador para ACCU1; Sum=0 p/ ACCU2 Sum no ACCU1, contador no ACCU2 Contador p/ ACCU3 Campo de componente no ACCU1 Soma no ACCU1, contador p/ ACCU2 Incrementa AR1 em 4 bytes Loop de contagem no ACCU1, soma no ACCU2 Decrementa loop de contagem e salta se necessrio Transfere soma para #Sum_1
P#4.0;
BEGN; #Sum_1
Declaration Name
in out out in_out in_out stat Meas_1 Sum_1 Sum_2 Meas_2 DB_Num
Type
ARRAY[1..10] REAL REAL REAL ARRAY[1..15] REAL INT
Start value
0.000000e+000 0.000000e+000
Comment
Network 3: Determinando o endereo inicial do Meas_2 LAR1 P##Messung_2 TAR2 +AR1 L W [AR1,P#0.0] T #DB_Num OPN DB [#DB_Num] L D [AR1,P#2.0] LAR1 Network 4: Access to Meas_2 L L BEGN: TAK ENT L +R ... 0.000000e+000 15 D[AR1,P#0.0] // // // // // // // 0 p/ ACCU1 (Soma =0.0) Contador p/ ACCU1; Soma=0 p/ ACCU2 Soma no ACCU1, contador no ACCU2 Contador p/ ACCU3 Campo de componentes no ACCU1 Soma no ACCU1, contador p/ ACCU2 ... // // // // // // // // Carrega ponteiro de rea cruzada p/POINTER sem Carrega offset de endereo no ACCU1, soma ao AR1; AR1 agora aponta p/POINTER no DB instance Carrega nmero do DB do POINTER no ACCU1 Transfere nmero do DB(ou 0) na varivel esttica Abre DB Carrega ponteiro de rea cruzada p/ parmetro Carrega ponteiro no AR1, AR1 aponta p/parmetro
"Passando" Parmetros
Tamanho do aninhamento:
S7-300: mx. 8
S7-400: mx. 16
OB
FBs
FBs
. .FCs .
P EC x x x x x -
P EC x x x x x x x -
P EC x x x x x x -
PE C x x x x x x x x -
E: Tipo de dado elementar C: Tipo de dado complexo P: Tipo parmetro (Timer, Counter, Block_x)
OB1_DATE_TIME
IN_DT EN IN_DT
OB1_DATE_TIME
IN_DT EN IO_DT