Escolar Documentos
Profissional Documentos
Cultura Documentos
Ricardo S. Santos Prh34 Ufsc Das G
Ricardo S. Santos Prh34 Ufsc Das G
< +
=
0 ___ _______ 60
0 ___ _ __________
t a t a
t a t a
t c t c se t c t c
t c t c se t c t c
t d
O bit correspondente da tabela EPT s deve ser setado se:
( )
at
t t d
Onde t
at
representa o tempo de atraso definido como parmetro de entrada
da FC 44.
63
Network 3 FC 44
SEE: L #rep_factor //Carrega fator de repetio
VSZ: T #contador_2 //Transfere para o contador do loop
OPN DB [#ep_dbn]
LAR1 #ep_end //Verifica se a double word da tab.
EP zero
L D [AR1,P#0.0]
L 0
==D
JC IDOU //Se sim, pula para IDOU / Se no,
faz varredura nos bits
L 32 //Carrega com 32 (bits numa double)
IF1: T #contador //Carrega o contador do loop
OPN DB [#ep_dbn]
LAR2 #ep_end
A [AR2,P#0.0] //Carrega o ponto cujo endereo est
em ep_end
OPN DB [#sub_dbn]
LAR1 #sub_end //sub_end aponta para o estado de ep
no scan anterior
FP [AR1,P#0.0] //Verifica se houve transio
positiva
= #ciclo
JC MEMT //Se sim, pula para MEMT / Se no,
verifica se ep j est em 1
OPN DB [#ep_dbn]
A [AR2,P#0.0] //Verifica se ep est em 1
= #ciclo
JC SETA //Se sim, pula para SETA
OPN DB [#ept_dbn] //Se no
LAR1 #ept_end
R [AR1,P#0.0] //Reseta bit ept correspondente
JU IBIT //Pula para seqncia de incremento
de bits
MEMT: L DB1.DBB 7 //Carrega segundos do clock do CLP
OPN DB [#att_dbn]
T DBB [#att_end] //Transfere para byte correspondente
do DB de armazenamento do tempo de transio
JU IBIT //Pula para seqncia de incremento
de bits
SETA: L DB1.DBB 7 //Carrega segundos do clock do CLP
OPN DB [#att_dbn]
L DBB [#att_end] //Carrega segundo em que ocorreu a
transio positiva (previamente armazenado no DB de armazenamento do
instante de transio)
-I //Subtrai os valores (para ver se
ept j deve ser setado)
L B#16#0 //Verifica se o resultado deu
negativo
<I
TAK //Troca ACCU1 com ACCU2 para colocar
o zero no ACCU2 e a diferena em ACCU1
JC ANOR
JU NORM
ANOR: L B#16#60 //Adiciona 60 diferena (caso em
que T_ATRASO + instante de transio negativa > 59)
+I
NORM: L #T_ATRASO //Ateno: escrever em HEXADECIMAL o
tempo de espera (em segundos: 01h, 02h, ... , 58h ou 59h)
(CONTINUA NA PRXIMA PGINA)
64
>=I //Verifica se a diferena maior ou
igual ao T_ATRASO
JC UM //Se sim, pula para UM
JU IBIT //Se no, pula para IBIT
UM: OPN DB [#ept_dbn]
LAR1 #ept_end
S [AR1,P#0.0] //Seta bit ept correspondente
IBIT: L #ep_end //Incremento dos ponteiros (para bits)
L P#0.1
+D
T #ep_end
L #ept_end
L P#0.1
+D
T #ept_end
L #sub_end
L P#0.1
+D
T #sub_end
L #att_end
L P#1.0
+D
T #att_end
L #contador //Decrementa o Contador do Loop
LOOP IF1
JU INCD //Pula para INCD, para decrementar o
contador_2
IDOU: OPN DB [#ept_dbn]
LAR1 #ept_end
L 0
T D [AR1,P#0.0] //Reseta a double apontada por ept_end
OPN DB [#sub_dbn]
LAR1 #sub_end
L 0
T D [AR1,P#0.0] //Reseta a double apontada por sub_end
L #ep_end //Incremento dos Ponteiros
L P#4.0
+D
T #ep_end
L #ept_end
L P#4.0
+D
T #ept_end
L #sub_end
L P#4.0
+D
T #sub_end
L #att_end
L P#32.0
+D
T #att_end
INCD: L #contador_2
LOOP VSZ
BEU
65
6.3.5: Funo de Gerao das Entradas Polarizadas Bypassadas (EPB)
Para a gerao das entradas polarizadas bypassadas, foi criado um bloco de
programa do tipo funo. Este bloco faz uma operao com a tabela da Entrada
Polarizada Temporizada (EPT) e com a tabela Requisio de Bypass (BYP) para a
gerao da tabela das Entradas Polarizadas Bypassadas (EPB). A operao lgica
executada :
epb byp ept =
Tabela 6-3 Tabela Verdade da Operao
Fig. 6.13 Operao de Gerao de EPB
Na Tabela 6-3 mostrada a tabela verdade da operao que executada
para a gerao da tabela EPB. Esta operao tem por objetivo dar ao operador do
sistema a liberdade de ignorar um sinal em 1 vindo do campo. Para tal basta
atribuir ao bit correspondente da tabela de requisio de bypass o valor 1. Este
artifcio utilizado para, por exemplo, ignorar sinais vindos de sensores defeituosos.
Pela tabela verdade da operao percebe-se que o bit da tab. EPB somente
setado quando ept est em 1 e byp est em 0.
Quanto localizao na memria do CLP, as tabelas EPT, BYP e EPB
podem se localizar tanto na Memria de Bits (M) como em um Bloco de Dados (DB).
ept byp epb
0 0 0
0 1 0
1 0 1
1 1 0
66
6.3.6: Funcionamento do FC 45 Gerador de Entradas Polarizadas
Bypassadas
O bloco FC 45 um bloco do tipo funo resposvel por fazer a operao
descrita no item anterior. Os parmetros do bloco FC 45 so trs ponteiros do tipo
ANY responsveis por enderear as reas de memria das tabelas envolvidas na
operao. Tem-se a informao, atravs do ponteiro ANY, das trs reas de
memria envolvidas e de seu tamanho.
A FC 45 possui ainda variveis usadas dentro do bloco listadas na tabela de
declaraes. Todas elas so do tipo temp, ou seja, temporrias.
Fig. 6.14 Tabela de declaraes de variveis do FC 45
A primeira network da FC 45 faz o armazenamento das variveis locais,
definidas na tabela de declaraes, dos dados provenientes dos ponteiros ANY. Os
dados armazenados so o fator de repetio, o nmero de DB (se existente) e o
endereo inicial da rea apontada.
67
Network 1 FC 45
L P##EPT //Carrega endereo do ponteiro EPT
LAR1 //Transfere para o AR1
L W [AR1,P#2.0] //Carrega o fator de repetio
T #ept_rep_factor //Transfere para uma varivel local
L W [AR1,P#4.0] //Carrega nro. do DB (se existente)
T #ept_dbn //Transfere para uma varivel local
L D [AR1,P#6.0] //Carrega informao de endereo
T #ept_end //Transfere para uma varivel local
L B [AR1,P#6.0] //Carrega informao de rea de mem.
T #ept_area //Transfere para uma varivel local
L P##BYP //Carrega endereo do ponteiro BYP
LAR1 //Transfere para o AR1
L W [AR1,P#2.0] //Carrega o fator de repetio
T #byp_rep_factor //Transfere para uma varivel local
L W [AR1,P#4.0] //Carrega nro. Do DB (se existente)
T #byp_dbn //Transfere para uma varivel local
L D [AR1,P#6.0] //Carrega informao de endereo
T #byp_end //Transfere para uma varivel local
L P##EPB //Carrega endereo do ponteiro EPB
LAR2 //Tranfere para o AR2
L W [AR2,P#2.0] //Carrega o fator de repetio
T #epb_rep_factor //Transfere para uma varivel local
L W [AR2,P#4.0] //Carrega nro. do DB (se existente)
T #epb_dbn //Transfere para uma varivel local
L D [AR2,P#6.0] //Carrega informao de endereo
T #epb_end //Transfere para uma varivel local
A segunda network da funo , da mesma maneira que nas outras funes,
um verificador de tamanho de tabelas. A estrutura bsica da network a mesma. O
menor fator de repetio armazenado em uma varivel local para que seja
Network 2 FC 45
L #ept_rep_factor
L #byp_rep_factor
<I
JC REP1
L #epb_rep_factor
<I
JC REP2
T #rep_factor
JU INI
REP1: L #ept_rep_factor
L #epb_rep_factor
<I
JC REP3
T #rep_factor
JU INI
REP2: L #byp_rep_factor
T #rep_factor
JU INI
REP3: L #ept_rep_factor
T #rep_factor
JU INI
68
Network 3 FC 45
INI: L #rep_factor //Carrega o menor fator de repetio
IF1: T #contador //Carrega o contador do loop
OPN DB [#byp_dbn] //Abre DB (se existente)
LAR1 #byp_end //Transfere o endereo do BYP p/ AR1
L D [AR1,P#0.0] //Carrega dword apontada por byp_end
INVD //Inverte BYP
OPN DB [#ept_dbn] //Abre DB (se existente)
LAR1 #ept_end //Transfere o endereo de EPT p/ AR1
L D [AR1,P#0.0] //Carrega dword apontada por ept_end
AD //Executa a lgica AND
OPN DB [#epb_dbn] //Abre DB (se existente)
LAR1 #epb_end //Transfere o endereo do EPB p/ AR1
T D [AR1,P#0.0] //Transfere resultado da lgica
L #ept_end //Seqncia de incr. dos ponteiros
L P#4.0
+D
T #ept_end
L #byp_end
L P#4.0
+D
T #byp_end
L #epb_end
L P#4.0
+D
T #epb_end
L #contador // Decrementa o contador do loop
LOOP IF1
BEU
utilizado posteriormente na execuo da operao lgica.
A terceira network a responsvel pela execuo da lgica. A rotina bsica
um loop que faz a operao descrita em 32 bits por volta. O primeiro passo a
transferncia do fator de repetio para o contador do loop indicando o nmero de
voltas que sero dadas. Logo aps, uma instruo OPN faz a abertura do Bloco de
Dados se esta for realmente a rea de dados endereada. Caso contrrio, o
registrador de Bloco de Dados carregado com 0 e no influencia no resto das
instrues. Percebe-se que, da mesma maneira que nas outras funes, h um uso
intensivo de endereamento indireto atravs do endereamento indireto de registro
de rea cruzada e indireto de memria.
Os passos finais so os incrementos nos ponteiros a cada volta do loop e a
instruo BEU indicando fim de bloco incondicional.
69
6.3.7: Funo de Gerao das Entradas Polarizadas Bypassadas Seladas
(EBS)
Para a gerao das entradas polarizadas bypassadas seladas, foi criado um
bloco de programa do tipo funo. Este bloco opera a tabela das entradas
polarizadas bypassadas (EPB) e a Tabela de Reconhecimento de Alarme (REC)
gerando a Tabela das Entradas Polarizadas Bypassadas Seladas (EBS). A
operao lgica executada um travamento lgico do estado 1 de epb (bit da
tabela EPB) at que haja o reconhecimento por parte de rec (bit da tabela REC).
Fig. 6.15 Operao de Gerao de EBS
O reconhecimento uma operao executada pelo operador, na sala de
controle, atravs de um comando no supervisrio da planta. Quando ocorre de um
sinal da tabela EPB ser ativado, um alarme acionado no supervisrio da planta e o
respectivo bit da tabela EBS setado. No entanto, o sinal que de fato utilizado na
lgica do intertravamento o proveniente da tabela EPB (ver Fig. 6.1). Para o sinal
de EBS ser resetado, deve-se aguardar o respectivo sinal da tabela EPB ser levado
a 0 antes, e o sinal da tabela REC ser setado.
O objetivo desta funo assegurar que haja o reconhecimento, por parte do
operador, de uma mudana de estado no campo. Enquanto no h o
reconhecimento um alarme disparado na tela do supervisrio. De posse desta
informao o operador pode tomar as medidas necessrias para o correto
funcionamento do processo.
A localizao das tabelas na memria do CLP , como na maioria dos casos,
varivel. Todas as tabelas podem se localizar tanto na Memria de Bits (M) como
em um Bloco de Dados (DB).
70
6.3.8: Funcionamento do FC 46 Gerador de Entradas Polarizadas
Bypassadas Seladas
O bloco FC 46 um bloco do tipo funo que faz a operao de travamento
do alarme na tela do supervisrio. Os parmetros deste bloco so trs ponteiros tipo
ANY que endeream as tabelas alocadas em alguma rea de memria do CLP.
Como j descrito, o ponteiro ANY descreve toda a rea de memria e no apenas o
endereo inicial.
Alm destes, a FC 46 possui variveis internas que auxiliam as operaes
necessrias na implementao (Fig. 6.16).
Fig. 6.16 Tabela de declaraes de variveis do FC 46
A primeira network da FC 46 armazena em variveis locais os dados
informados pelos ponteiros ANY. Como nas outras funes, os dados armazenados
so o fator de repetio, o nmero do DB e o endereo inicial da rea apontada.
A segunda network faz a verificao do tamanho das tabelas e utiliza o menor
valor de tamanho na execuo da opeao. Esta network funciona como j descrito
71
Network 1 FC 46
L P##EPB //Carrega endereo do ponteiro
LAR1 //Transfere para AR1
L W [AR1,P#4.0] //Carrega nro. do DB
T #epb_dbn //Transfere p/ var. local
L D [AR1,P#6.0] //Carrega informao de endereo
T #epb_end //Transfere p/ var. local
L W [AR1,P#2.0] //Carrega fator de repetio
T #epb_rep_factor //Transfere p/ var. local
L P##REC //Carrega endereo do ponteiro
LAR1 //Transfere para AR1
L W [AR1,P#4.0] //Carrega nro. do DB
T #rec_dbn //Transfere p/ var. local
L D [AR1,P#6.0] //Carrega informao de endereo
T #rec_end //Transfere p/ var. local
L W [AR1,P#2.0] //Carrega fator de repetio
T #rec_rep_factor //Transfere p/ var. local
L P##EBS //Carrega endereo do ponteiro
LAR1 //Transfere para AR1
L W [AR1,P#4.0] //Carrega nro. do DB
T #ebs_dbn //Transfere p/ var. local
L D [AR1,P#6.0] //Carrega informao de endereo
T #ebs_end //Transfere p/ var. local
L W [AR1,P#2.0] //Carrega fator de repetio
T #ebs_rep_factor //Transfere p/ var. local
Network 2 FC 46
L #epb_rep_factor
L #rec_rep_factor
<I
JC REP1
L #ebs_rep_factor
<I
JC REP2
T #rep_factor
JU INI
REP1: L #epb_rep_factor
L #ebs_rep_factor
<I
JC REP3
T #rep_factor
JU INI
REP2: L #rec_rep_factor
T #rep_factor
JU INI
REP3: L #epb_rep_factor
T #rep_factor
JU INI
anteriormente nas outras funes. Na Fig. 6.8 tem-se a descrio detalhada de
como funciona a network.
A terceira network da FC 46 faz o travamento lgico do alarme. Em primeiro
lugar se carrega o fator de repetio obtido na network 2, que igual ao tamanho da
menor tabela envolvida na operao, sendo o tamanho o nmero de double words
da tabela. Este valor transerido ao contador do loop e ser decrementado a cada
volta. A primeira operao executada a lgica OU entre os bits de EPB e REC
72
Network 3 FC 46
INI: L #rep_factor //Carrega fator de repetio
ROT: T #contador //Transfere para o contador do loop
LAR1 #rec_end //Transfere rec_end p/ AR1
OPN DB [#rec_dbn] //Abre DB (se existente)
L D [AR1,P#0.0] //Carrega dword do REC
INVD //Faz complemento de 1 (inv. sinal)
LAR2 #epb_end //Transfere epb_end p/ AR2
OPN DB [#epb_dbn] //Abre DB (se existente)
L D [AR2,P#0.0] //Carrega dword de EPB
OD //Faz operao OU nas dwords
LAR1 #ebs_end //Transfere ebs_end p/ AR1
OPN DB [#ebs_dbn] //Abre DB (se existente)
L D [AR1,P#0.0] //Carrega dword de EBS
AD //Faz operao E nas dwords
OPN DB [#epb_dbn] //Abre DB (se existente)
L D [AR2,P#0.0] //Carrega dword de EPB
OD //Faz operao OU nas dwords
OPN DB [#ebs_dbn] //Abre DB (se existente)
T D [AR1,P#0.0] //Transfere resultado p/ EBS
L #epb_end //Incrementa ponteiros
L P#4.0
+D
T #epb_end
L #rec_end
L P#4.0
+D
T #rec_end
L #ebs_end
L P#4.0
+D
T #ebs_end
L #contador
LOOP ROT //Decrementa contador do loop
BEU //Fim de Bloco
(Fig. 6.15). O valor obtido desta operao imediatamente utilizado sem ser
armazenado para fazer a lgica E com o valor da tabela EBS. O valor desta
operao tambm utilizado sem ser armazenado para obter o novo valor de EBS.
O passo final do loop fazer o incremento dos ponteiros e o decremento do
contador para a prxima volta.
Quando o loop finalizado, a instruo de fim de bloco executada.
73
6.3.9: Funo de Reset de Reconhecimento
Para a implementao da funo de reset de reconhecimento foi criado um
bloco de programa do tipo bloco de funo. Este bloco opera a tabela REC e uma
tabela auxiliar REC de maneira a resetar a primeira.
Fig. 6.17 Operao de Reset de REC
Esta funo tem por objetivo fazer no prprio CLP o comando de reset do
reconhecimento. Isto feito em primeiro lugar porque o supervisrio (que envia o
sinal de reconhecimento) no possui um comando no formato pulso. O outro
motivo pelo qual o reset do reconhecimento feito no CLP, garantir que o sinal de
reconhecimento chegue a lgica de tratamento de entradas e sadas. Se o sinal
fosse pulsado e o CLP estivesse em um ciclo de varredura longo (situao rara mas
possvel), poderia ocorrer de o sinal de reconhecimento ir para 0 antes de sua
utilizao na lgica de tratamento de entradas.
Na Fig. 6.17 tem-se o diagrama de funcionamento do bloco de funo. Os
dois temporizadores tem por objetivo gerar uma onda quadrada de perodo T = 2s.
Esta onda ora habilita, ora desabilita o bloco de movimentao. Quando os bits
correspondentes das tabelas EBS e REC esto ativados, em algum momento o bit
REC tambm o ser.
Quanto localizao na memria do CLP, as tabelas EPT, BYP e EPB
podem se localizar tanto na Memria de Bits (M) como em um Bloco de Dados (DB).
6.3.10: Funcionamento do FB 47 Reset de Reconhecimento de Alarme
O bloco FB 47 um bloco do tipo bloco de funo que faz a operao de
reset de reconhecimento de alarme. Este reconhecimento feito atravs de um
comando do supervisrio. Os parmetros de entrada deste bloco so trs ponteiros
tipo ANY que endeream as tabelas do CLP envolvidas na operao. Alm destes
74
parmetros de entrada, o bloco FB 47 possui variveis outras variveis do tipo
temp e do tipo stat. Aqui, deve-se dizer o porqu de se utilizar um FB e no um
FC como nos outros blocos de programa. Como j descrito anteriormente, os FBs
possuem a capacidade de armazenar, de uma varredura para a outra, os valores de
algumas variveis. Neste caso, como foi necessrio o uso de temporizadores, isso
foi imprescindvel. Os temporizadores devem, necessariamente, armazenar algumas
variveis para por exemplo, saber se esto ativos ou no. Para a chamada do bloco,
necessrio ainda designar um Bloco de Dados que ser o seu Bloco de Dados
Instance (todo bloco de funo deve ser chamado com a designao de um Bloco
de Dados Instance). Na Fig. 6.18, tem-se a visualizao das variveis do Bloco.
Fig. 6.18 Tabela de declaraes de variveis do FB 47
A primeira network do Bloco de Funo armazena em variveis locais os
dados informados pelos ponteiros ANY. Os dados armazenados so o fator de
repetio, o nmero do DB e o endereo inicial da rea apontada. Eles sero
usados nas networks seguintes.
75
Network 1 FB 47
L P##REC //Carrega o endereo do Ponteiro
LAR1 //Transfere para o AR1
L W [AR1,P#4.0] //Carrega nro. do DB (se existente)
T #rec_dbn //Transfere para varivel local
L D [AR1,P#6.0] //Carrega endereo inicial
T #rec_end //Transfere para varivel local
L W [AR1,P#2.0] //Carrega fator de repetio
T #rec_rep_factor //Transfere para varivel local
L P##EBS //Carrega o endereo do Ponteiro
LAR1 //Transfere para o AR1
L W [AR1,P#4.0] //Carrega nro. do DB (se existente)
T #ebs_dbn //Transfere para varivel local
L D [AR1,P#6.0] //Carrega endereo inicial
T #ebs_end //Transfere para varivel local
L W [AR1,P#2.0] //Carrega fator de repetio
T #ebs_rep_factor //Transfere para varivel local
L P##RECL //Carrega o endereo do Ponteiro
LAR1 //Transfere para o AR1
L W [AR1,P#4.0] //Carrega nro. do DB (se existente)
T #recl_dbn //Transfere para varivel local
L D [AR1,P#6.0] //
T #recl_end //Transfere para varivel local
L W [AR1,P#2.0] //
T #recl_rep_factor //Transfere para varivel local
A segunda network serve para a verificao do tamanho das tabelas e utiliza
o menor valor deles na execuo da opeao. Esta network anloga quela
descrita na Fig. 6.8.
A terceira network do Bloco de Funo faz a gerao da onda quadrada
atravs de dois temporizadores. Eles so do tipo atraso na subida ou seja, quando
um sinal 1 aparece na sua entrada, o temporizador retarda um tempo definido pelo
Network 2 FB 47
L #recl_rep_factor //Carrega tam. de REC
L #rec_rep_factor //Carrega tam. De REC
<I //REC < REC?
JC REP1 //Se sim, pula p/ REP1
L #ebs_rep_factor //Se no, carrega tam. EBS
<I //REC < EBS
JC REP2 //Se sim, pula p/ REP2
T #rep_factor //Se no, rep_factor = tam. EBS
JU INI //Pula p/ network seguinte
REP1: L #recl_rep_factor //Carrega tam. REC
L #ebs_rep_factor //Carrega tam. EBS
<I //REC < EBS?
JC REP3 //Se sim, pula para REP3
T #rep_factor //Se no, rep_factor = tam. EBS
JU INI //Pula p/ network seguinte
REP2: L #rec_rep_factor //Carrega tam. REC
T #rep_factor //rep_factor = tam. REC
JU INI //Pula p/ network seguite
REP3: L #recl_rep_factor //Carrega tam. REC
T #rep_factor //rep_factor = tam. REC
JU INI //Pula p/ network seguinte
76
Network 4 FB 47
A #onda.Q //Se a onda estiver em 1
JCN TMRZ //Vai para network 6, seno para a 5
usurio seu aparecimento na sada. Com dois temporizadores ligados em srie
(como mostrado na Fig. 6.19), pode-se fazer a onda quadrada, de qualquer perodo,
apenas ajustando o tempo de retardo. Dependendo do estado da onda quadrada
(alto ou baixo) o fluxo de programa direcionado para a network 5 ou para a
network 6 atravs de um jump condicional. Este teste feito na network 4.
Fig. 6.19 Network 3 do FB 48
A network 4 faz o teste para verificar em que estado se encontra a onda
quadrada.
A network 5 faz a operao lgica E entre os bits da tabela EBS e da tabela
REC e transfere o resultado para a tabela REC. J se sabe de antemo que, se se
est na network 5, o estado da onda quadrada alto. Ento, o que se faz realmente
nesta network a operao lgica E entre trs sinais: os dois j descritos mais o
sinal da onda quadrada. Isto vem ao encontro do especificado graficamente pela
Fig. 6.17.
77
Network 5 FB 47
L #rep_factor //Carrega fator de repetio
RREC: T #contador //Transfere p/ contador do loop
LAR1 #rec_end //Transfere rec_end p/ AR1
OPN DB [#rec_dbn] //Abre DB (se existente)
L D [AR1,P#0.0] //Carrega double da tab. REC
LAR2 #ebs_end //Transfere ebs_end p/ AR2
OPN DB [#ebs_dbn] //Abre DB (se existente)
L D [AR2,P#0.0] //Carrega double da tab. EBS
AD //Faz operao lgica E
LAR1 #recl_end //Transfere recl_end p/AR1
OPN DB [#recl_dbn] //Abre DB (se existente)
T D [AR1,P#0.0] //Transfere resultado da operao
L #rec_end //Incrementa ponteiros
L P#4.0
+D
T #rec_end
L #ebs_end
L P#4.0
+D
T #ebs_end
L #recl_end
L P#4.0
+D
T #recl_end
L #contador //Carrega contador
LOOP RREC //Decrementa contador
BEU //Fim de Bloco
A network 6 faz a operao de movimentao tambm descrita na Fig. 6.17.
Esta network somente executada se o estado da onda quadrada for baixo.
Durante o estado baixo da onda quadrada que se faz de fato reset da tabela de
reconhecimento de alarme (REC). Isso se d pela transferncia dos valores da
tabela REC para a tabela REC.
78
Network 6 FB 47
TMRZ: L #rep_factor //Carrega o fator de repetio
MV: T #contador //Transfere para o contador do loop
LAR2 #recl_end //Transfere recl_end p/ AR2
OPN DB [#recl_dbn] //Abre DB (se existente)
L D [AR2,P#0.0] //Carrega double de REC
LAR1 #rec_end //Transfere rec_end p/ AR1
OPN DB [#rec_dbn] //Abre DB (se existente)
T D [AR1,P#0.0] //Transfere para double de REC o
valor da double de REC
L #rec_end //Incremento dos ponteiros
L P#4.0
+D
T #rec_end
L #recl_end
L P#4.0
+D
T #recl_end
L #contador //Carrega contador
LOOP MV //Decrementa contedo de ACCU 1 e
pula para MV se seu contedo for > 0
BEU //Fim de Bloco Incondicional
Ao final, a tabela de reconhecimento (REC) resetada depois de a lgica
anterior (lgica de reconhecimento) ter sido executada pelo CLP. Tem-se assim o
reconhecimento do sinal de campo em seu estado alterado de uma maneira segura.
6.3.11: Funo de Gerao de SL1
Para a implementao desta funo, foi criado um bloco de programa do tipo
funo. Este bloco opera com a tabela Sada da Lgica (SLG) e a tabela Requisio
de Override 1 (OV1) para a gerao da tabela SL1. Esta tabela o resultado da
operao de override 1 no sinal de sada. A operao lgica necessria a OU
(Tabela 6-4).
1 1 lg sl ov s = +
Tabela 6-4 Operao OU entre SLG e OV1 gerando SL1
slg ov1 sl1
0 0 0
0 1 1
1 0 1
1 1 1
79
Fig. 6.20 Operao OU
A operao OU permite o sinal vindo de SLG aparea em SL1 quando OV1
0. Quando o bit de SLG 0, a operao permite sobrescrever a lgica atravs do
sinal de OV1 bastando para isso, escrever 1 no bit correspondente. Esta operao
pode ser til em casos como testes, falhas de equipamentos ou lgica defeituosa.
A tabela SLG a sada da lgica ou seja, o resultado do intertravamento.
Pode estar alocada tanto em Memria de Bits (M) como em Bloco de Dados (DB).
As outras tabelas podem, da mesma maneira, estar alocadas na Memria de Bits ou
em um Bloco de Dados (DB).
6.3.12: Funcionamento do FC 48 Gerador de SL1
O bloco FC 48 um bloco do tipo funo que faz a operao lgica OU entre
os sinais das tabelas SLG e OV1. O bloco opera de maneira semelhante ao FC 43,
apenas alterando a operao (de OU EXCLUSIVO para OU) e as tabelas
envolvidas. Da mesma maneira, os parmetros do bloco so trs ponteiros do tipo
ANY que endeream as diferentes reas de memria envolvidas na operao.
A funo FC 48 possui variveis que auxiliam a execuo da operao e so
declaradas na tabela de declaraes (Fig. 6.21).
A primeira network armazena em variveis locais as informaes fornecidas
pelo ponteiro ANY das trs reas envolvidas na operao.
A segunda network faz a lgica de escolha do menor fator de repetio. O
funcionamento semelhante ao das outras funes j explicadas.
A terceira network faz a lgica de override 1. Os sinais de SLG e OV1 so
carregados e a operao OU executada de double word em double word.
Obs.: por questo de semelhana com a FC 43, apenas a network 3
mostrada neste caso.
80
Fig. 6.21 Tabela de declaraes do bloco FC 48
Network 3 FC 48
INI: L #rep_factor //Carrega fator de repetio
IF1: T #contador //Transfere p/ contador do loop
OPN DB [#slg_dbn] //Abre DB (se existente)
LAR1 #slg_end //Transfere slg_end p/ AR1
L D [AR1,P#0.0] //Carrega double de SLG
OPN DB [#ov1_dbn] //Abre DB (se existente)
LAR1 #ov1_end //Transfere ov1_end p/ AR1
L D [AR1,P#0.0] //Carrega double de OV1
OD //Executa operao OU
OPN DB [#sl1_dbn] //Abre DB (se existente)
LAR1 #sl1_end //Transfere sl1_end p/ AR1
T D [AR1,P#0.0] //Transfere resultado p/ SL1
L #slg_end //Incremento dos ponteiros
L P#4.0
+D
T #slg_end
L #ov1_end
L P#4.0
+D
T #ov1_end
L #sl1_end
L P#4.0
+D
T #sl1_end
L #contador //Carrega contador
LOOP IF1 //Decrementa contador e pula p/ IF1
BEU //Fim de Bloco
81
6.3.13: Funo de Gerao de SLO
Para a implementao da funo de gerao da Sada da Lgica (SLO), foi
criado um bloco de programa do tipo funo. Este bloco opera com a tabela SL1 e
com a tabela Requisio de Override 0 (OV0) para a gerao da tabela SLO. Esta
tabela o resultado da operao de override 0 no sinal de sada. A operao
lgica necessria mostrada na equao abaixo e na Tabela 6-5.
slo ov sl = 0 1
Tabela 6-5 Tabela Verdade da Operao
Fig. 6.22 Gerao de SLO
Com as operaes de override possvel que o operador tenha controle do
sinal que sai da lgica do intertravamento. Neste caso, basta fazer uma requisio
na tabela OV0 no bit correspondente para que o bit de SLO seja 0. Pela Tabela
6-5, pode-se notar que basta o bit de OVO ser igual a 0 que o bit correspondente
de SLO tambm o ser.
Quanto localizao na memria, as trs tabelas podem se localizar tanto
em Memria de Bits (M) como em Bloco de Dados (DB).
6.3.14: Funcionamento do FC 49 Gerador de SLO
O bloco FC 49 um bloco do tipo funo que faz a operao descrita no item
anterior. Assim como o bloco FC 48, este bloco opera de maneira semelhante ao FC
43, apenas alterando a operao (de OU EXCLUSIVO para a descrita acima) e as
tabelas envolvidas. Os parmetros de entradas so os mesmos ponteiros ANY que
endeream as tabelas SL1, OV0 e SLO.
sl1 ov0 slo
0 0 0
0 1 0
1 0 1
1 1 0
82
A funo possui as variveis locais temp que auxiliam a execuo do bloco
de programa (Fig. 6.23).
A primeira network armazena em variveis locais as informaes fornecidas
pelo ponteiro ANY das trs reas envolvidas na operao.
A segunda network faz a lgica de escolha do menor fator de repetio. O
funcionamento semelhante ao das outras funes j explicadas.
A terceira network faz a lgica de override 0. Os sinais de SL1 e OV0 so
carregados e a operao descrita executada de double word em double word e
armazenada em SLO.
Obs.: por questo de semelhana com a FC 43, apenas a network 3
mostrada para esta funo.
Fig. 6.23 Tabela de declaraes de variveis do FC 49
83
6.3.15: Funo de Gerao de Sadas Fsicas (SAI)
Para a implementao da funo de gerao da Sada Fsica (SAI), foi criado
um bloco de programa do tipo funo. Este bloco opera com a tabela Sada da
Lgica (SLO) e com a tabela Sadas Esperadas (SSP) para a gerao das Sadas
Fsicas (SAI). Esta tabela o resultado da operao OU EXCLUSIVO entre as duas
primeiras. A operao lgica necessria mostrada abaixo e na Tabela 6-6.
sai ssp slo =
Tabela 6-6 Operao OU EXCLUSIVO entre SLO e SSP gerando SAI
slo ssp sai
0 0 0
0 1 1
1 0 1
1 1 0
Network 3 FC 49
INI: L #rep_factor //Carrega fator de repetio
IF1: T #contador //Transfere p/ contador do loop
OPN DB [#ov0_dbn] //Abre DB (se existente)
LAR1 #ov0_end //Transfere ov0_end para AR1
L D [AR1,P#0.0] //Carrega double de ov0
INVD //Inverte sinal de OV0
OPN DB [#sl1_dbn] //Abre DB (se existente)
LAR1 #sl1_end //Transfere sl1_end p/ AR1
L D [AR1,P#0.0] //Carrega double de SL1
AD //Faz lgica E
OPN DB [#slo_dbn] //Abre DB (se existente)
LAR1 #slo_end //Transfere slo_end p/ AR1
T D [AR1,P#0.0] //Transfere resultado p/ SLO
L #sl1_end //Incremento dos ponteiros
L P#4.0
+D
T #sl1_end
L #ov0_end
L P#4.0
+D
T #ov0_end
L #slo_end
L P#4.0
+D
T #slo_end
L #contador //Carrega contador
LOOP IF1 //Decrementa contador e pula p/ IF1
BEU //Fim de Bloco
84
Fig. 6.24 Gerao de SAI
A operao de gerao de SAI tem o mesmo princpio da gerao das
entradas polarizadas (EP). O estado normal dos comandos armazenado na
tabela SSP. Quando existe uma diferena entre um bit de SLO e de SSP a sada
fsica ativada.
Quanto localizao na memria, as trs tabelas podem se localizar tanto
em Memria de Bits (M) como em Bloco de Dados (DB).
6.3.16: Funcionamento do FC 50 Gerador de Sadas Fsicas (SAI)
O bloco FC 50 um bloco do tipo funo que faz a operao OU
EXCLUSIVO entre os sinais de SLO e SSP. Este bloco opera de maneira
praticamente igual ao FC 43, apenas alterando as tabelas envolvidas na operao.
Os parmetros de entradas so ponteiros ANY que endeream as tabelas SLO,
SSP e SAI.
Como nos outros blocos, a funo possui as variveis locais temp que
funcionam como temporrias (Fig. 6.25).
Fig. 6.25 Tabela de declaraes de variveis do FC 50
85
A primeira network armazena em variveis locais as informaes fornecidas
pelo ponteiro ANY das trs reas envolvidas na operao.
A segunda network faz a lgica de escolha do menor fator de repetio. O
funcionamento semelhante ao das outras funes j explicadas.
A terceira network faz a lgica de OU EXCLUSIVO. A operao realizada
de double word em double word.
Obs.: por questo de semelhana com a FC 43, apenas a network 3
mostrada para esta funo.
Network 3 FC 50
INI: L #rep_factor //Carrega fator de repetio
IF1: T #contador //Transfere para contador do loop
OPN DB [#slo_dbn] //Abre DB (se existente)
LAR1 #slo_end //Transfere sl0_end para AR1
L D [AR1,P#0.0] //Carrega double word de SLO
OPN DB [#ssp_dbn] //Abre DB (se existente)
LAR1 #ssp_end //Transfere ssp_end para AR1
L D [AR1,P#0.0] //Carrega double word de SSP
XOD //Faz operao OU EXCLUSIVO
OPN DB [#sai_dbn] //Abre DB (se existente)
LAR1 #sai_end //Transfere sai_end para AR1
T D [AR1,P#0.0] //Transfere resultado para SAI
L #slo_end //Incremento dos ponteiros
L P#4.0
+D
T #slo_end
L #ssp_end
L P#4.0
+D
T #ssp_end
L #sai_end
L P#4.0
+D
T #sai_end
L #contador //Carrega contador
LOOP IF1 //Decrementa contador e pula p/ IF1
BEU
86
Captulo 7: Resultados
Neste captulo sero mostrados os resultados obtidos com o sistema de
tratamento de entrada implementado e sua posterior anlise.
Os resultados referem-se a testes feitos em laboratrio com o CLP Siemens
S7-400. Algumas consideraes a respeito dos
monitorao e modificao das variveis foi feita por uma estao conectada
ao CLP via Ethernet.
7.1: Condies de Obteno dos Resultados
A situao em que foram realizados os testes de verificao do sistema
diferem da situao em que o sistema ser implementado nos seguintes aspectos:
A modificao da tabela ENT se dar pela mudana no estado dos sinais
de campo, vindos da rede Profibus DP e no pela modificao manual via
tabela d e variveis;
A modificao da tabela REC se far via supervisrio. No caso dos testes
a modificao feita via tabela de variveis.
Em ambas as situaes, as condies de laboratrio, apesar de diferentes
das condies de campo, no alteram grandemente os resultados que seriam
obtidos em campo. No caso da modificao da tabela ENT, a diferena se d pelo
tempo de atualizao da rede Profibus DP. No segundo caso, a situao de
laboratrio praticamente igual a de campo. A diferena que a estao que
modifica a tabela REC outra, no entanto est conectada na mesma rede Ethernet.
87
7.2: Visualizao do Funcionamento
Os testes em laboratrio foram realizados utilizando uma tabela de variveis
que monitora o valor dos bits (Memria do CLP) online.
Fig. 7.1 Exemplo de Tabela de Variveis
Esta mesma ferramenta permite modificar o valor das variveis, verificar o
tempo de ciclo, forar valores, etc. Em comparao monitorao de variveis
diretamente no bloco, a tabela de variveis permite que se visualize diretamente, em
uma mesma tela, todas as variveis de interesse. a melhor maneira para fazer
testes com vrios blocos, pois independe da quantidade de chamadas.
7.3: Resultados Obtidos
Em relao ao sistema anteriormente implementado, o novo Sistema de
Tratamento de Entradas e Sadas apresentou solues que mudaram sua
caracterstica. A primeira grande mudana se deu no endereamento dos sinais. O
88
sistema anterior, em vez fazia o endereamento bit a bit para os blocos que
utilizavam temporizadores. Esta abordagem fazia com que os blocos de programa
ficassem com um tamanho extremamente grande porque, para cada sinal de
entrada, era feita uma network com a respectiva lgica.
Toda a lgica do Sistema de Tratamento dos Pontos de Entrada e Sada
desenvolvida ocupa uma rea na memria de trabalho de 3.004 bytes. No sistema
antigo, apenas para a gerao da tabela EPT, havia dois blocos com o tamanho de
24.986 bytes cada um. Este tamanho se deve ao exposto anteriormente. Para cada
ponto do sistema havia uma network com todas as instrues necessrias para
fazer a lgica de temporizao. No novo Sistema apenas necessrio informar a
rea dos sinais. A lgica de temporizao feita em apenas uma network.
No sistema antigo, no havia a possibilidade de haver variaes de rea de
memria para uma determinada tabela. Para isso era necessria a criao de um
novo bloco de programa. Por isso, o sistema s funcionava para tabelas alocadas
na Memria de Bits (M). Com o novo Sistema, toda rea de memria pode ser
enderaada para uma tabela, basta que o ponteiro ANY contenha esta informao.
Quanto ao tempo do ciclo de varredura, o CLP Siemens possui uma
ferramenta de anlise que permite verificar os tempos mnimo, mdio e mximo de
ciclo. No entanto, os resultados obtidos em laboratrio no podem ser extrapolados
diretamente para a plataforma. Isto porque no se tem uma relao direta entre o
nmero de pontos das tabelas e o tempo de execuo. Para tabelas com 160
pontos (5 double words), o tempo de execuo mdio do tratamento de entradas
de 3 ms e o de tratamento de sadas de 1 ms. Este tempo aumentado quando
por exemplo, so mudados vrios pontos da tabela ENT no mesmo ciclo. Quando
foram alterados os 160 pontos no mesmo ciclo de varredura, o CLP acusou um
tempo de ciclo mximo de 64 ms. Isto porque provavelmente o bloco FC 44 de
temporizao atuou em seus ciclos mais longos demandando mais tempo de
execuo. A alterao de tantos pontos em to pouco tempo , no entanto, muito
difcil de ocorrer na prtica. Alm disso, a especificao Petrobras sobre tempo de
ciclo em relao ao tempo mdio e no em relao ao tempo mximo. Porm,
como foi dito anteriormente, a relao entre o nmero de pontos das tabelas e
tempo de ciclo no direta. Para um nmero maior de pontos (8 double words), o
tempo de execuo mdio do tratamento de entradas se manteve em 3 ms. O
89
tempo de ciclo mdio exigido pela Petrobras para as CPUs de no mximo 150 ms.
Com o sistema funcionando provisoriamente, o tempo de ciclo mdio das CPUs
(mdia dos tempos mdios das 5 CPUs) est em cerca de 100 ms.
90
Captulo 8: Concluses
A lgica de controle ficou muito mais clara do que a implementada
anteriormente. A principal vantagem advinda do Sistema de Tratamento dos Pontos
de Entrada e Sada a rapidez de execuo e a clareza da lgica. Agora, basta
descrever a rea de memria onde os pontos esto alocados e reservar uma rea
de memria para algumas tabelas auxiliares. O uso dos ponteiros ANY
fundamental nesta tarefa. Qualquer lugar de memria pode alocar os pontos
envolvidos na operao pois os blocos de programa foram desenvolvidos para lidar
com esta variedade.
No entanto, o entendimento da lgica por parte da Petrobras essencial para
que o Sistema seja aprovado para uso na plataforma. As providncias para que isso
ocorra esto sendo tomadas por aqueles que trabalham diretamente na plataforma
P-43. a primeira vez que estas especificaes esto sendo implementadas em um
CLP Siemens, por isso este processo pode ser um pouco mais demorado. No
entanto, testes devem ser realizados na P-43 (que se encontra em fase de
comissionamento em Niteri) para garantir a viabilidade do sistema. Um dos
problemas que pode ocorrer o excessivo tempo de execuo da lgica. Nos testes
feitos em laboratrio isto no ocorreu porque o nmero de pontos simulados na
entrada do sistema foi muito inferior ao que ser na prtica. A relao direta entre
tamanho de tabelas e tempo de execuo no foi encontrada. Se necessrio,
algumas alteraes devero ser executadas nos blocos mais crticos, principalmente
no FC 44 e FB 47, visivelmente os gargalos do sistema pela presena de
temporizao.
O Sistema de Tratamento de Entradas e Sadas um passo em busca do
mais importante em plataformas de petrleo: a segurana. Ele foi praticamente todo
desenvolvido em STL, linguagem que otimiza utilizao do espao e faz programas
mais velozes, especialmente porque esta era uma das partes crticas do projeto. O
que se buscou em todos os momentos foi a robustez e a simplicidade do programa.
Isto foi alcanado graas ao uso intensivo dos diversos tipos de ponteiros
91
disponveis, da organizao interna dos blocos (todos seguem um padro) e da
diviso do sistema em subtarefas (um bloco para cada operao lgica).
Com esta simplicidade e organizao espera-se que, com os testes que
sero realizados em plataforma, o Sistema de Tratamento dos Pontos de Entrada e
Sada possa cumprir fielmente com o papel para o qual foi desenvolvido.
92
Bibliografia:
[1] site: petrobras.com.br
[2] SIMATIC NET NCM S7 for PROFIBUS / FMS Manual, Vol. 2, pg. 16-19, 2001.
[3] SIMATIC S7-400 Manual, 2003.
[4] C. C. de Moraes e P. L. Castrucci, Engenharia de Automao Industrial, LTC,
2001.
[5] SIMATIC System Software for S7-300/400 System and Standard Functions,
2002.
93
Anexo A Instrues STL utilizadas
Neste anexo esto listadas as instrues utilizadas nos blocos do Sistema de
Tratamento dos Pontos de Entrada e Sada, com seus respectivos formatos e
descries.
Instrues Lgicas de Bit:
1. A (AND)
Formato: A <Bit>
Descrio: A instruo A verifica se o estado do bit endereado 1 e
faz a lgica AND com o bit RLO.
2. R (RESET)
Formato: R <Bit>
Descrio: A instruo R escreve 0 no bit endereado se o RLO = 1.
3. S (SET)
Formato: S <Bit>
Descrio: A instruo S escreve 1 no bit endereado se o RLO = 1.
4. = (ATRIBUIO)
Formato: = <Bit>
Descrio: A instruo = escreve o contedo de RLO no bit
endereado.
5. FP (SENSOR DE TRANSIO POSITIVA)
Formato: FP <Bit>
Descrio: A instruo FP detecta uma borda positiva quando o RLO
transiciona de 0 para 1 e indica isso escrevendo 1 em RLO.
94
Durante cada ciclo de varredura, o estado de RLO comparado com o
obtido no ciclo anterior para verificar se houve mudana de estado. O
estado anterior de RLO armazenado no endereo indicado por <Bit>
para se fazer a comparao.
Instrues de Salto: todas as intrues de salto utilizam como parmetro
um jump label. Este jump label pode ter no mximo quatro caracteres e o
primeiro deles deve ser uma letra. So seguidos obrigatoriamente por : e
devem preceder a instruo de programa.
1. JU (Jump Unconditional)
Formato: JU <jump label>
Descrio: A instruo JU interrompe o funcionamento seqencial do
programa e salta para um destino identificado por <jump label>. O
<jump label> deve ser nico e pode se localizar tanto antes como
depois da instruo, porm deve estar no mesmo bloco de programa.
2. JC (Jump Conditional)
Formato: JC <jump label>
Descrio: A instruo JC interrompe o funcionamento seqencial do
programa e salta para <jump label> se RLO = 1.
3. JCN (Jump if RLO = 0)
Descrio: A instruo JCN interromper o funcionamento seqencial
do programa e salta para <jump label> se RLO = 0.
Instrues com Double Words, Word e Bytes:
1. ==D (Compara Double Integer)
Formato: ==D
95
Descrio: Esta instruo compara o contedo do ACCU 1 com o
contedo do ACCU 2. Se ambos so iguais, RLO escrito com 1.
2. +D (Adio com Double Integer)
Formato: +D
Descrio: Esta instruo soma o contedo de ACCU 1 e ACCU 2 e
armazena o resultado em ACCU 1. O contedo dos acumuladores
interpretado como inteiros de 32 bits.
3. <I (Compara Integer)
Formato: <I
Descrio: Esta instruo verifica se o contedo, interpretado como um
nmero inteiro, de ACCU 2-L menor do que o de ACCU 1-L.
4. >=I (Compara Integer)
Formato: >=I
Descrio: Esta instruo verifica se o contedo, interpretado como um
nmero inteiro, de ACCU 2-L maior ou igual do que o de ACCU 1-L.
5. I (Subtrao Integer)
Formato: I
Descrio: Esta instruo subtrai o contedo de ACCU 1-L do
contedo de ACCU 2-L e armazena o resultado em ACCU 1-L.
6. L (Load)
Formato: L <address>
Descrio: Esta instruo carrega o byte, word ou double word
endereado no ACCU 1 depois de o antigo contedo deste ser copiado
para ACCU 2 e de o ACCU ser resetado para 0.
7. T (Transfer)
Formato: T <address>
96
Descrio: Esta instruo copia o contedo do ACCU1 para o destino
endereado por <address>. O nmero de bytes copiado para o destino
depende do tamanho expressado no endereo de destino.
8. LAR1 ou LAR2 (Load AR1 or AR2)
Formato: LAR1 <D>
Descrio: Esta instruo carrega o registrador AR1 com o contedo
da double word <D> ou do ponteiro.
9. TAK (Toggle Accu 1 with Accu 2)
Formato: TAK
Descrio: Esta instruo troca o contedo dos acumuladores ACCU 1
e ACCU 2.
10. INVD (Complemento de um de double interger)
Formato: INVD
Descrio: Esta instruo forma o complemento de 1 do contedo de
ACCU 1. Isto inverte o valor, bit a bit, do contedo de ACCU 1.
11. AD (And double word)
Formato: AD
Descrio: Faz a operao booleana E entre o contedo de ACCU 1 e
ACCU 2 e armazena o resultado em ACCU 1.
12. OD (Or double word)
Formato: OD
Descrio: Faz a operao booleana OU entre o contedo de ACCU 1
e ACCU 2 e armazena o resultado em ACCU 1.
13. XOD (Exclusive OR double word)
Formato: XOR
Descrio: Faz a operao booleana OU EXCLUSIVO entre o
contedo de ACCU 1 e ACCU 2 e armazena o resultado em ACCU 1.
14. OPN (Open a data block)
97
Formato: OPN <data block>
Descrio: Esta instruo armazena <data block> no registrador de
DB. Este DB pode ser Compartilhado ou Instance.
15. LOOP (Faz o Loop)
Formato: LOOP <jump label>
Descrio: Esta instruo decrementa ACCU 1-L e salta para <jump
label> se ACCU 1-L for diferente de zero.
16. BEU (Block End Unconditional)
Formato: BEU
Descrio: Encerra o processamento do bloco atual e salta para o
bloco que chamou o atual. A varredura recomea na instruo
imediatamente subseqente que chamou o bloco.
17. CALL (Block Call)
Formato: CALL <logic block indentifier>
Descrio: Usado para chamar FCs, FBs, SFCs ou SFBs.