Automação das Plataformas P-34 e P-48: Tratamento dos...
Transcript of Automação das Plataformas P-34 e P-48: Tratamento dos...
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO INDUSTRIAL
Automação das Plataformas P-34 e P-48: Tratamento dos Pontos de Entrada e Saída
Monografia submetida à Universidade Federal de Santa Catarina
como requisito para a aprovação da disciplina:
DAS 5511: Projeto de Fim de Curso
Ricardo Souza Santos
Florianópolis, Março de 2004.
2
Automação das Plataformas P-43 e P-48: Tratamento dos Pontos de Entrada e Saída
Ricardo Souza Santos
Esta monografia foi julgada no contexto da disciplina DAS 5511: Projeto de Fim de Curso
e aprovada na sua forma final pelo Curso de Engenharia de Controle e Automação Industrial
Banca Examinadora:
Fernando Gonçalves Costa Orientador Empresa
Daniel Juan Pagano Orientador do Curso
Prof. Augusto Humberto Bruciapaglia Responsável pela disciplina
Prof. Julio Elias Normey Rico, Avaliador
Rafael Carvalho Uberti, Debatedor
Pedro Alves Brito de Azambuja, Debatedor
i
Agradecimentos
Aos meus pais, por terem me apoiado incondicionalmente, e por terem me
dado todas as condições de concluir os meus objetivos.
Aos meus irmãos, pelo tempo que passamos juntos e por sempre terem me
ajudado.
Aos amigos que fiz em todos nestes 5 anos de convivência na UFSC.
Aos professores do DAS, pela extrema competência e dedicação, em
especial aos professores Augusto Humberto Bruciapaglia e Daniel Juan Pagano que
me deram uma oportunidade de ingressar no mundo da pesquisa e, até o momento,
no mundo do petróleo.
Ao orientador Fernando Gonçalves Costa, com quem tive calorosas e
valorosas discussões.
À Unicontrol pela excelente oportunidade que me deu.
ii
Resumo
A P-43 e P-48 são as mais novas plataformas de exploração de petróleo
desenvolvidas pela estatal Petrobras. Elas são a aposta da auto-suficiência na
produção de petróleo no Brasil depois de anos em busca desta meta.
A construção de estruturas de grandes proporções como estas exige um
longo trabalho de logística e engenharia. Neste contexto, a Unicontrol foi a
responsável por toda a parte de desenvolvimento e implantação do sistema de
automação destas plataformas.
O sistema de controle é baseado em automação por CLP. No caso das
plataformas, isto significa controle central com entradas e saídas distribuídas
através de redes de comunicação. O sistema é composto de vários subsistemas
redundantes que cuidam, cada uma deles, de uma função de controle. Assim por
exemplo, existe o sistema de controle do processo, o sistema de desligamento de
emergência e assim por diante.
Este sistema de controle é diretamente dependente da interação com os
sinais de campo. Neste trabalho, foi desenvolvido o Sistema de Tratamento dos
Pontos de Entrada e Saída, uma interface de software que visa garantir o
cumprimento de especificações de projeto. Estas especificações são definidas pela
Petrobras e visam facilitar o desenvolvimento da lógica e garantir uniformidade e
confiabilidade na comunicação entre os sinais de campo e os controladores centrais
(CLPs).
O desenvolvimento do software se deu em linguagem STL para o CLP
Siemens da família S7-400. Blocos de programa foram desenvolvidos e testados em
laboratório e cumprem com os requisitos especificados. O Sistema de Tratamento
dos Pontos de Entrada e Saída substituiu outro, desenvolvido anteriormente, com
vantagens em relação ao tempo de execução, clareza da lógica e principalmente em
relação ao espaço de memória utilizado.
iii
Abstract
P-43 and P-48 are the newest oil platforms developed by the stated-owned
Petrobras. With this two projects, Brazil will accomplish its goal of self-sufficiency in
oil production. To build structures like these, a whole engineering and logistic work is
needed. In this context, Unicontrol has been responsible for the development and
implementation of the automation system.
The control system is based in central PLCs controlling distributed I/O over a
networked system. The system is composed by a set of redundant subsystems
which are responsible, each one, for a control function. Thus, for example, there is
the Process Control System, the Emergency Shutdown System, etc.
This control system is directly dependant on the communication with field
signaling. In this work, it has been developed an I/O Signals Management System, a
software interface which aims at a project specification accomplishment. These
specifications are defined by Petrobras to facilitate the logic development and to
ensure sameness and reliability in the communication between field signaling and
PLCs.
The software has been developed in STL (Statement List) Language for
Siemens S7-400 PLC. Software blocks have been developed and tested in
laboratory and they accomplish the specifications required. This system has
displaced another one, previously developed, with advantages related to the scan
time and mainly related to the memory space required for the logic. In this way,
control system gets faster ensuring a whole system better performance.
iv
Sumário
Agradecimentos................................................................................................. i
Resumo ............................................................................................................ ii
Abstract ........................................................................................................... iii
Sumário ........................................................................................................... iv
Capítulo 1: Introdução ......................................................................................1
Capítulo 2: Unicontrol no Projeto......................................................................4
Capítulo 3: Características Construtivas das Plataformas................................7
3.1: Características do Óleo..........................................................................9
3.2: Visão Geral do Processo .......................................................................9
Capítulo 4: Arquitetura Geral das Redes de Controle ....................................11
4.1: Acesso aos Dados Remotos................................................................12
4.2: Rede Profibus DP ................................................................................13
4.3: Profibus FMS e Nível Superior de Controle .........................................14
Capítulo 5: S7-400 e S7-300 ..........................................................................18
5.1: Hardware — Controlador Central.........................................................18
5.2: Princípios de Programação do S7-400 ................................................24
Capítulo 6: Tratamento de Entradas e Saídas ...............................................47
6.1: Objetivo do Tratamento de Entradas e Saídas....................................47
6.2: Mapeamento de Memória do CLP .......................................................49
6.3: Implementação ....................................................................................50
Capítulo 7: Resultados ...................................................................................86
7.1: Condições de Obtenção dos Resultados.............................................86
7.2: Visualização do Funcionamento ..........................................................87
v
7.3: Resultados Obtidos..............................................................................87
Capítulo 8: Conclusões ..................................................................................90
Bibliografia:.....................................................................................................92
Anexo A — Instruções STL utilizadas ............................................................93
1
Capítulo 1: Introdução
Os Campos de Produção de Óleo de Caratinga e Barracuda estão
localizados na parte central da Bacia de Campos, onde a lâmina d’água atinge 1040
metros. O Projeto das Plataformas P-43 / Barracuda e P-48 / Caratinga consiste da
construção de duas plataformas FPSO (Floating Production, Storage and Offloading
Units) para processar 150.000 bpd (barris por dia) de óleo cru e 3.000.000 Nm3/d
(metros cúbicos por dia nas condições normais de temperatura e pressão) de gás
natural cada uma. Estas plataformas são responsáveis pela extração de um total de
45 poços (26 para P-43 / Barracuda e 19 para P-48 / Caratinga). Nestas refinarias
flutuantes, onde a primeira fase do refino é executada, o petróleo dos reservatórios
é transportado para a superfície, separado da água, gás e areia que o
acompanham.
Fig. 1.1 — Localização dos Campos de Barracuda e Caratinga
Estas plataformas exigem um complexo e extenso sistema de controle e
supervisão de maneira a promover o funcionamento automatizado do sistema. Uma
rede eficiente, com possibilidade de integração a outros sistemas, é uma das
ferramentas necessárias ao atendimento deste requisito.
2
A rede de controle utilizada nestas plataformas é na verdade um conjunto de
redes que atuam em conjunto para garantir segurança e confiabilidade ao sistema.
Sua arquitetura e tecnologia foram projetadas para evitar ao máximo que falhas
afetem a controlabilidade do sistema. Um exemplo disso são os anéis de
comunicação que interligam os painéis remotos aos CLPs: além da redundância,
seguem caminhos alternativos na plataforma. São ainda construídos em fibra ótica
garantindo segurança nas áreas classificadas, imunidade a ruídos eletromagnéticos
e menor perda de pacotes de informação. Outra rede existente, utilizada
especificamente para fazer a manutenção preditiva da instrumentação baseada em
sinais de 4 a 20 mA, é o protocolo Hart. Há ainda a rede do AFDS (Sistema
Endereçável de Detecção de Fogo), responsável pela interligação dos sensores de
fogo e gás.
O sistema supervisório está concentrado na ECOS (Estação Central de
Operação e Supervisão), localizado na sala de controle. O sistema de controle é
central e é basicamente formado por 5 CPUs de CLP redundantes, totalizando 10
CPUs. A ECOS é ligada aos CLPs através de uma rede Ethernet.
As plataformas P-43 e P-48 fazem parte da categoria das grandes
plataformas. Seu sistema de controle possui mais de 15.000 pontos de E/S. Estes
sinais são parte fundamental do sistema de controle da plataforma. O tratamento de
sinais de E/S visa prover o sistema de controle de informação vinda do campo de
uma maneira padronizada, realizando funções de temporização, bypass de entrada
e travamento de estado (selo de alarme). A saída do sistema é igualmente tratada,
dando ao operador do sistema a flexibilidade de sobrescrever os bits da lógica do
intertravamento, através do supervisório.
Uma dificuldade em implementar tal sistema está no fato de a linguagem
disponível para programação ser de baixo nível. Para fazer a varredura (scan) de
todos os bits teve-se de utilizar um ponteiro especial que dá informação de endereço
e comprimento de área. Além disso, o fato de se utilizar temporização (na verdade,
um atraso no sinal) cria uma dificuldade adicional que será explicada no capítulo
específico.
Nos capítulo 2, será feita a descrição do papel da Unicontrol no projeto,
principalmente do escopo de suprimento.
3
No capítulo seguinte, algumas características construtivas das plataformas
serão descritas, assim como uma visão geral do processo.
No quarto capítulo, a arquitetura das redes de controle será mostrada. As
particularidades de cada uma e sua importância no alcance do projeto.
No quinto capítulo, as características do hardware serão mostradas, assim
como as de software. Alguns conceitos básicos do CLP utilizado serão mostrados
para que no sexto capítulo seja caracterizada a implementação propriamente dita.
No sétimo capítulo serão apresentados os resultados obitidos e será discutida
a solução adotada. No oitavo e último capítulo, serão expostas as conclusões
acerca do trabalho realizado.
4
Capítulo 2: Unicontrol no Projeto
O projeto de construção das plataformas Barracuda e Caratinga P-43 / P-48
teve início com a abertura da licitação. A Petrobras não constrói as plataformas mas
contrata empresas competentes para fazê-lo. A vencedora da licitação para a
construção foi a empresa KBR, ligada à americana Halliburton. A KBR recebeu da
Petrobras um contrato de cerca de U$ 1,3 bilhão para ser usado na perfuração dos
poços e construção das duas plataformas. Devido à magnitude do projeto, e à
diversidade de tarefas envolvidas na construção, nem todos os serviços são
realizados pela ganhadora da licitação (Tabela 2-1). Outras empresas são
usualmente contratadas para tarefas mais específicas como por exemplo a
automatização das plataformas. Neste contexto, a Unicontrol foi então escolhida
pela KBR para ser a responsável pela automação da plataforma.
Tabela 2-1 — Ordem de Contratação das Empresas
Produção de Petróleo
Construção da P-43 e P-48
Automação
O papel da Unicontrol envolveu o suprimento de todo o equipamento e
serviços para a ECOS (Estação Central de Operação e Supervisão), incluindo:
• 11 painéis de E/S remotos com grau de proteção IP54.
5
• 12 painéis de E/S remotos com grau de proteção IP65.
• 45 km de fibra ótica (halogen free para evitar propagação de incêndio).
• CLPs para todos os subsistemas de controle e painéis de E/S, num
total de 10 CPUs e 1750 cartões de E/S.
• 8 estações de trabalho e 2 servidores.
• 19 microcomputadores e notebooks para manutenção, administração e
aplicações de terceiros.
• Sistema de detecção de Fogo & Gás (AFDS).
A Unicontrol cobriu as áreas de engenharia, manufatura, compra,
desenvolvimento de software e comissionamento. Toda a parte de engenharia foi
concentrada no Brasil já que a Halliburton / KBR e Petrobras têm seus centros de
operação para este projeto no Rio de Janeiro. A compra dos equipamentos foi feita
através do escritório da Unicontrol em São Paulo.
Os painéis com grau de proteção IP54 (proteção contra poeira e projeções
d’água) foram usados para áreas não-classificadas enquanto os painéis IP65
(proteção total contra poeira e contra jatos d’água), tiveram de ser projetados e
manufaturados pela Unicontrol, com o processo de certificação feito no Brasil. Estes
foram posteriormente enviados à Singapura, local da construção naval da P-43,
conforme a necessidade.
Toda a programação do CLP, desde a análise das matrizes de causa-efeito
até o desenvolvimento, aprovação e implementação dos blocos de função estão sob
a responsabilidade da Unicontrol.
A Arquitetura de Controle por Unidade de Processo (MCPU) divide a
segurança e as funções do processo de qualquer unidade em cinco grupos:
Controle do Processo (Control), Fogo & Gás (F&G VAC), Utilidades da Embarcação
(Vessel), Gerenciamento de Energia (Electrical) e Desligamento de Emergência
(ESD). Cada grupo funcional é implementado na configuração do seu próprio
hardware redundante.
6
O uso da Arquitetura MCPU resulta em cada unidade do processo sendo
controlada por até cinco controladores diferentes, cada um responsável por um dos
grupos funcionais descritos acima. Neste sentido, a perda de parte da
funcionalidade em algum grupo funcional não significará que a plataforma como um
todo será afetada.
Devido à configuração por funções, a cada dispositivo inteligente é permitido
comunicar-se com os elementos instalados em cada área de processo da
plataforma.
Para garantir maior confiabilidade ao sistema, todos os serviços diretamente
envolvidos com a ECOS (Estação Central de Operação e Supervisão) estão
também sob a responsabilidade da Unicontrol. Isto inclui:
• Todo o projeto, desenvolvimento e implementação de todos os
aspectos de engenharia da ECOS.
• Todos os serviços de campo, da instalação ao comissionamento,
startup, operação assistida e treinamento.
• Interligação a outros pacotes já instalados, garantindo sua total
integração à ECOS.
7
Capítulo 3: Características Construtivas das Plataformas
Quanto às plataformas, esta é a primeira vez que duas plataformas estão
sendo construídas em dois lugares diferentes (Singapura e Brasil) para iniciar a
produção quase que simultaneamente. A P-48 está sendo construída no estaleiro
Bras Fels em Angra dos Reis – RJ. A parte de construção naval da P-43 foi quase
que totalmente realizada em Singapura, no Estaleiro Jurong. Isto devido à
inexistência, no Brasil, de um outro dique seco que comportasse o seu porte (337 m
de comprimento). Atualmente, a P-43 encontra-se no Estaleiro Mauá-Jurong em
Niterói – RJ em fase de comissionamento e instalação dos módulos.
As plataformas P-43 e P-48 são resultado da conversão de antigos navios
petroleiros em plataformas e são mais um passo da Petrobras em busca da auto-
suficiência no mercado de petróleo. Juntas ambas podem produzir 300 mil barris de
petróleo por dia.
Os petroleiros utilizados nestas plataforamas não poderiam mais ser
utilizados no transporte de petróleo pelo fato de possuírem casco simples (normas
ambientais internacionais não permitem mais a utilização deste tipo de navio nesta
atividade). Foram então transformadas em FPSOs (Floating Production, Storage and
Offloading), unidades flutuantes que produzem, separando o óleo da água e areia,
armazenam até um certo limite e depois descarregam o óleo produzido em outro
navio de transporte. São versáteis devido a sua capacidade de locomoção, feita
através de rebocadores, e por não precisarem de dutos ligando-as à terra para o
escoamento a produção.
A FPSO P-43, por exemplo, tem uma capacidade de armazenamento máxima
maior do que 1,5 milhão de barris, o que equivale a aproximadamente a 75% da
média diária de produção da Petrobras em 2003, que foi de 2.001.100 bpd
[1]. A produção esperada da plataforma é de 150 mil bpd, ou seja, pode ficar
aproximadamente 10 dias em produção continuada sem descarregamento. No
entanto, quando estiver em funcionamento, prevê-se que o descarregamento da
produção se dará a cada 7 dias durando dois dias. A capacidade de bombeamento
máxima, da P-43 para o navio de transporte, é superior a 60 mil barris por hora.
8
Fig. 3.1 — Stena Continent: Navio convertido na P-43
Fig. 3.2 — P-43 chegando de Singapura (sem os módulos superiores)
9
3.1: Características do Óleo
O óleo a ser produzido em Barracuda tem um API de 26º, o que caracteriza
um óleo pesado, típico da Bacia de Campos. Seus valores de viscosidade são de
30,0 cP (30º C); 21,0 cP (50º C) e 15,7 cP (60º C). O início do deposição de parafina
ocorre a 15º C.
3.2: Visão Geral do Processo
Numerosos poços alimentam as FPSOs de Barracuda e Caratinga (26 poços
do campo de Barracuda para a P-43 e 19 do campo de Caratinga para a P-48).
Estes poços são ligados ao navio através de dutos flexíveis (risers). Existem
também as linhas que fazem a transmissão dos sinais de controle chamadas de
umbilicais. O controle de abertura do poço é feito através de acionamento hidráulico
pela árvore de natal1 molhada, ou seja, localizada no fundo do mar. O óleo extraído
chega à plataforma e passa pelo manifold2. Neste local existe um conjunto de
tubulações grandes proporções, preparadas para receber o petróleo vindo dos
poços. Existem na plataforma três manifolds: dois de produção e um de testes do
óleo produzido. Os testes são necessários para verificar se óleo encontra-se dentro
dos padrões esperados para aquela região e para analisar o efeito dos métodos de
elevação artificial na composição do óleo. Isto inclui a relação água / óleo e a
quantidade de areia.
O óleo vindo dos manifolds de produção é então encaminhado aos
separadores para a retirada de água e gás (Fig. 3.3). A separação neste caso dá-se
por decantação: a água, assim como algumas impurezas presentes no óleo, mais
densas, tendem a descer enquanto o óleo e o gás, menos densos, tendem a subir.
A água retirada não pode ser simplesmente descartada. Ela passa por um processo
de filtragem no hidrociclone e é depois descartada.
1 Árvores de natal são conjuntos de conectores e válvulas usadas para controlar o fluxo dos
fluidos produzidos ou injetados, instalados em cima da cabeça do poço.
2 Manifold é um equipamento de passagem e de manobra da produção, onde o óleo é
agrupado em um mesmo coletor.
10
Deste separador inicial, o óleo segue para o desidratador de óleo e depois
para o tratador eletrostático. O tratador eletrostático retira as impurezas restantes
ainda presentes que não saíram por decantação. Deste, o óleo segue até os
separadores atmosféricos para a retirada do restante do gás.
Já sem água e sem gás, o óleo pode ser armazenado nos tanques de
estocagem do navio. Uma parte do gás pode ser utilizada na elevação artificial por
gas lift. Existem vasos para armazená-lo já que o gás é o combustível utilizado para
a geração de energia na plataforma. O excesso de gás é queimado no flare. Ainda
existem processos auxiliares para a desidratação de gás.
Fig. 3.3 — Fluxo de Processo
11
Capítulo 4: Arquitetura Geral das Redes de Controle
O bom funcionamento da automação da plataforma é diretamente
dependente das redes de comunicação entre os sensores, controladores e
atuadores. Um bom projeto de engenharia é essencial neste caso que envolve mais
de 15000 pontos de entrada e saída. É evidente que esta quantidade de sinais não
pode ser ligada diretamente a módulos de E/S na sala de controle — a quantidade
de cabos torna praticamente impossível esta abordagem. A arquitetura preocupou-
se então em distribuir o controle usando painéis remotos com estes cartões de E/S
deixando a comunicação com o controlador central sob responsabilidade de uma
rede Profibus DP. Desta maneira, reduz-se a fiação e permite-se que os
instrumentos fiquem fisicamente mais próximos de seus cartões de integração.
Garante-se desta maneira maior confiabilidade ao sistema e maior resistência a
falhas.
O controle da plataforma é feito centralmente, a partir de CLPs localizados
em uma sala de painéis ao lado da sala de controle. Mais especificamente, é
realizado por 5 CLPs Siemens S7-400 redundantes alimentados por uma fonte de
alimentação da mesma série. Cada um destes CLPs é responsável por uma função
de controle, os chamados subsistemas de controle.
Estão presentes na plataforma os seguintes subsistemas de controle:
• Emergency Shutdown Subsystem (Sistema de Desligamento de
Emergência) – composto por duas CPUs de CLP redundantes.
• Vessel Control Subsystem (Sistema de Controle de Utilidades da
Embarcação) – composto por duas CPUs de CLP redundantes
• Electrical Control Subsystem (Sistema de Controle Elétrico) –
composto por duas CPUs de CLP redundantes.
• Fire & Gas Subsystem (Sistema de Contenção de Fogo & Gás) –
composto por duas CPUs de CLP redundantes.
12
• Process Control Subsystem (Sistema de Controle de Processos) –
composto por duas CPUs de CLP redundantes.
Além destes, existem outros dois CLPs, também redundantes, totalizando
quatro CPUs, que fazem o controle do Sistema de Gerenciamento de Energia e do
Gerador de Emergência. Estes dois sistemas não estiveram sob responsabilidade
da Unicontrol e não serão abordados neste trabalho.
4.1: Acesso aos Dados Remotos
A comunicação entre os instrumentos de campo e os CLPs é feita através de
subredes que estão associadas a cada um dos subsistemas que formam o sistema
de controle (Emergency Shutdown — ESD; Vessel Control — VCS; Electrical
Control — ECS; Fire & Gas — FGV; Process Control — PCS). Cada subsistema da
plataforma possui seus próprios pontos de entrada e saída.
A arquitetura básica é formada por painéis de entrada e saída remotos,
localizados no campo, próximos aos instrumentos, que centralizam a coleta e
distribuição dos dados. Todos os instrumentos automatizados são ligados a estes
painéis. Nestes painéis estão alocados cartões de E/S digitais e analógicos,
responsáveis pela transformação dos sinais, da série Siemens S7-300 e uma fonte
alimentadora. Desta maneira os sinais podem ser endereçados pela CPU S7-400
(controlador central) e utilizados nas rotinas de controle.
Os sinais de um mesmo subsistema são agrupados em um mesmo módulo
de interface chamado IM. Deste módulo existe uma ligação a um conversor OLM
elétrico / ótico.
Existem usualmente duas abordagens em relação à redundância no campo.
Uma delas prevê a duplicação do I/O, isto é, a utilização de dois instrumentos de
campo para a leitura do mesmo sinal. Outra se utiliza da redundância do meio de
transmissão. Para escolher uma ou outra deve-se levar em conta os custos de
engenharia. Foi devido ao grande número de instrumentos de campo que a segunda
opção foi escolhida. Os cabos redundantes percorrem caminhos diferentes na
13
plataforma para garantir maior segurança. Isto porque, caso houver rompimento de
um deles, não necessariamente o outro se romperá.
Esta rede redundante utiliza o protocolo Profibus DP e interliga painéis e
controladores centrais.
4.2: Rede Profibus DP
No caso do acesso aos dados dos painéis, é utilizada a rede Profibus DP,
considerada uma das redes de campo de mais rápidas e confiáveis disponíveis
atualmente. É um formato de troca de mensagens especificamente projetado para
acesso serial às entradas e saídas. O sufixo DP (decentralized periphery) refere-se
à periferia descentralizada, que é usado para descrever a arquitetura de E/S
distribuído com controle centralizado. No caso das plataformas, como já dito
anteriormente, é imperativa a utilização de um barramento de campo como este.
Com mais de 15000 pontos de E/S, seria impossível ligar todos os dispositivos
diretamente aos controladores centrais, usando um par de fios para cada dispositivo
como no modo mais usual. Os problemas de cabeamento seriam evidentes, tanto
na quantidade como na qualidade das conexões, trazendo muitos problemas ao
controle devido a falhas.
O protocolo permite que os dispositivos de E/S sejam conectados aos seus
respectivos controladores centrais por apenas um par de fios. O Profibus DP utiliza
um mestre no barramento para controle de acesso ao cabo serial RS-485. Um
escravo Profibus DP é qualquer dispositivo periférico que processa informação e
envia sua saída ao mestre. O escravo é uma estação passiva na rede já que não
tem direito a aceso ao barramento e pode apenas enviar sinais de reconhecimento
de mensagens recebidas ou enviar mensagens de resposta ao mestre sob
requisição. Todos os escravos Profibus têm a mesma prioridade e toda a
comunicação da rede se origina do mestre. A CPU S7-400, utilizada no controle
central, suporta a utilização do protocolo Profibus DP e possui uma entrada
específica para este protocolo. No caso da rede utilizada na plataforma, esta CPU
faz o papel de mestre de comunicação. Os mestres são as estações ativas na rede.
Eles determinam a velocidade de transmissão e os escravos detectam
automaticamente esta taxa. Os mestres lidam com o envio e recebimento de dados
14
de seus escravos e agem como os controladores na troca de informação de E/S
com seus escravos, fazendo uma atualização cíclica dos dados.
Os mestres podem acessar escravos de maneira individual, de maneira
grupal (multicast) ou podem endereçar escravos de maneira geral para todos os
escravos conectados (broadcast). Os escravos retornam respostas para todos as
mensagens endereçadas individualmente a eles. Eles não respondem a um
multicast ou um broadcast de um dispositivo mestre.
Devido ao fato de o Profibus DP usar um algoritmo que permite o acesso ao
barramento de maneira cíclica (periódica) ele é um protocolo determinístico. Isto
significa que o sistema Profibus garante um tempo máximo de ciclo no qual todos os
dispositivos serão atualizados. De fato, a rede Profibus DP foi projetada para ter
este comportamento determinístico. Isto garante mais confiabilidade ao sistema pelo
fato de nenhum sinal ficar sem ser lido em um tempo determinado, ou seja, não
ocorre a postergação indefinida no acesso. Isto é especialmente importante na
plataforma pois quase todos os sinais trazem, direta ou indiretamente, informações
sobre segurança do sistema.
Na Fig. 4.1 pode-se ter uma visão geral do sistema, incluindo as redes
Profibus DP e Profibus FMS, que será abordada no próximo item.
4.3: Profibus FMS e Nível Superior de Controle
Cada CLP se comunica com seu redundante via enlace ótico instalado na
própria CPU. A redundância de hardware é mais uma das características do sistema
que visa garantir a segurança do controle. Todo o rack que contém as CPUs é
duplicado. Isto inclui as fontes de alimentação, as próprias CPUs (com entradas MPI
e Profibus DP), o modulo de comunicação via Ethernet, o módulo de comunicação
Profibus FMS e, em alguns subsistemas, os módulos de comunicação via Modbus.
O enlace ótico (Fig. 4.2) é a maneira pela qual as CPUs de um mesmo subsistema
se comunicam para manter a sincronia das informações e para “avisar” que a outra
deve entrar em ação devido a alguma falha na CPU principal. A este sistema dá-se
o nome de hot stand by.
15
Fig. 4.1 — Arquitetura do sistema de controle principal
Todas as CPUs dos 14 CLPs (subsistemas de controle, Sistema de
Gerenciamento de Energia e Gerador de Emergência) são interligadas em um anel
de fibra ótica que funciona utilizando o protocolo Profibus FMS. Para a utilização
desta tecnologia, está acoplado ao rack da CPU S7-400 um módulo Siemens
CP443-5 que contém um cartão específico para esta finalidade. Deste módulo existe
uma ligação a uma OLM, um dispositivo conversor elétrico / ótico. Este dispositivo
possui uma saída elétrica e duas óticas, formando um “T” que permite a topologia
em anel. Desta forma, todas as CPUs do sistema ficam “penduradas” no anel (Fig.
4.2). A topologia em anel possui uma característica que a torna vantajosa em
relação a outras. Em caso de rompimento do cabo em algum ponto, ainda assim a
comunicação via Profibus FMS entre as CPUs poderá acontecer, pois existirá um
caminho ligando todas elas.
16
Fig. 4.2 — Redundância dos racks, enlace ótico e rede Profibus FMS
A transmissão de dados por uma via Profibus FMS (Fieldbus Message
Specification) é adequada para a transmissão de dados estruturados [2], neste caso
entre as CPUs dos CLPs. A grande vantagem do protocolo Profibus FMS é que
estruturas de dados podem ser transferidas em um formato neutro (padrão) e então
convertidos no formato exigido pelo dispositivo final. O direito de acesso à rede é
definido pelo token que é passado de um dispositivo mestre para outro. Os
dispositivos escravos só reagem quando requisitados por um mestre. Em termos de
funcionalidade de um dispositivo FMS, uma distinção é feita entre:
• Cliente FMS: requisita um serviço, assumindo que este é um
dispositivo mestre.
• Servidor FMS: fornece o serviço requisitado. Tanto um mestre no
Profibus como um escravo podem atuar como servidores.
17
Um sistema mestre FMS é formado por dispositivos que tenham, todos eles,
capacidade de se comunicar no formato FMS na mesma subrede Profibus. A rede
utilizada na plataforma, no nível dos CLPs, é deste tipo.
18
Capítulo 5: S7-400 e S7-300
Como exposto anteriormente, o sistema de controle da plataforma é central e
realizado pelo CLP Siemens série S7-400, com a CPU 417H. São dez CPUs, cinco
delas ativas e cinco em modo stand by. Os módulos de expansão de E/S são da
série S7-300. Ambas as séries fazem parte da família Simatic Step 7.
5.1: Hardware — Controlador Central
Os CLPs encontram-se nos racks na sala de painéis, ao lado da sala de
controle da plataforma. A configuração utilizada pode ser visualizada na Fig. 5.1.
Fig. 5.1 — Configuração do Rack
5.1.1: Fonte de Alimentação PS 407
É responsável pela alimentação de todos os dispositivos presentes no rack. É
capaz de fornecer uma tensão de saída de 5 V DC e 24 V DC dependendo da
aplicação. O fornecimento se dá via barramento backplane, localizado na parte de
trás do rack. A tensão de entrada pode ser tanto 120 quanto 230 V AC.
A PS 407 suporta uma corrente máxima de fornecimento de 10 A e ocupa o
espaço correspondente a dois slots no rack.
19
A fonte PS 407 possui, em seu painel frontal:
• Leds para confirmar tensão de saída em
conformidade, tensão correta na bateria de
backup e led para indicar falha interna;
• Chave para reconhecimento de falha;
• Compartimento para bateria de backup;
• Chave para ativação do monitoramento da
bateria;
• Seletor de tensão de entrada;
• Conexão com plug de 3 pinos.
Fig. 5.2 — PS 407
Tabela 5-1 — Especificações Técnicas PS 407 10A R
Especificações Técnicas PS 407 10A R
Entrada
Tensão de Entrada
Tensão Classificada 110 / 230 VDC
120 / 230 VAC
Tensão Permitida 88 até 300 VDC
85 até 264 VAC
Freqüência do Sistema
Freqüência Classificada 50 / 60 Hz
Freqüência Permitida 47 até 63 Hz
Saída
Tensão de Saída (Valores Classificados) 5 / 24 VDC
Corrente de Saída (Valores Classificados) 5 VDC: 10 A / 24 VDC: 1,0 A
20
5.1.2: CPU 417-4H
É a Unidade Central de Processamento usada
na plataforma, utilizada para sistemas que requerem
alto desempenho e segurança. Esta é a CPU mais
poderosa da família S7-400.
Possui entrada para dois módulos de sincronia
para conectar as CPUs redundantes através de um
cabo de fibra ótica. Na plataforma, eles são utilizados.
Possui ainda uma interface mestre Profibus DP
[3] e uma MPI (Multi-Point Interface) integradas
diretamente à CPU.
Fig. 5.3 — Visão esquemática
da CPU 417-4H
Pode-se ainda utilizar cartões para expandir a
memória de carga. Existem cartões de diversos
tamanhos e dependendo da aplicação deve-se optar
por mais ou menos memória. Na plataforma, foi
utilizado um cartão de expansão de memória RAM de 2
MB.
Fig. 5.4 — CPU 417-4H
Tabela 5-2 — Especificações Técnicas CPU 417-4H
Especificações Técnicas CPU 417-4H
Memória Memória do Usuário
2 MB para programa Integrada 2 MB para dados
Expansível Até 10 MB para programa
21
Até 10 MB para dados Memória de Carga
Integrada 256 kB RAM Expansível FEPROM Cartão de Memória até 64 MB Expansível RAM Cartão de Memória até 64 MB
Tempo de Execução das Instruções Operação com Bits (mín.) 0,1 µs Operação com Palavras (mín.) 0,1 µs Operação com Ponto fixo (mín.) 0,1 µs Operação com Ponto-flutuante (mín.) 0,6 µs
Temporizadores / Contadores Contadores S7 512 Retentividade Selecionável C 0 até C 511 Alcance dos Contadores 0 até 999 Contadores IEC Sim Tipo SFB Temporizadores S7 512 Alcance 10 ms a 9990 s Temporizadores IEC Sim Tipo SFB
Áreas de Dados Memória de bits 16 kB Retentividade Selecionável MB 0 até MB 16383
Entradas e Saídas Área total de endereçamento 16 kB Tabela Imagem da Periferia 16 kB Canais Digitais 131072 Canais Analógicos 8192
5.1.3: CP 443-1
O módulo CP 443-1 é o
responsável pela comunicação do S7-
400 com a rede Industrial Ethernet. A
taxa de transmissão é de 10 ou 100
Mbits. A conexão com a rede Ethernet
se dá através de um conector de 15
pinos [3].
Fig. 5.5 — CP 443-1
22
Tabela 5-3 — Especificações Técnicas do Módulo Ethernet CP 443-1
Especificações Técnicas CP 443-1
Interfaces Conexão Industrial Ethernet Soquete de 15 pinos
Consumo de Corrente @ +5 V DC Aproximadamente 1,4 A @ 24 V DC Típico 220 mA, máx. 340 mA Perda de Potência 8,6 W
Condições Ambientais de Operação Temperatura de Operação 0 a 60° C Temperatura de Transporte / Armazenagem
-40 a 70° C
Umidade Relativa @ 25° C Máx. 95% @ 25° C
5.1.4: CP 443-5 BASIC
O CP 443-5 BASIC é o responsável
pela integração do S7-400, como mestre, à
rede Profibus FMS. Suas funcionalidades
incluem a operação com sistemas S7
redundantes, como os presentes na
aplicação da plataforma [3].
Fig. 5.6 — CP 443-5 BASIC
Tabela 5-4 — Especificações Técnicas do Módulo Profibus CP 443-5 BASIC
Especificações Técnicas CP 443-5 BASIC
Taxa de transmissão de dados 9,6 kbits/s a 12 Mbits/s Interface
Tecnologia de transmissão Cabo RS-485 Conexão Soquete de 9 pinos Tensão de alimentação 5 V DC ± 5% Consumo de corrente @ 5 V 1,2 A Perda de Potência 6,5 W
23
Condições Ambientais de Operação Temperatura de Operação 0 a 60° C Temperatura de Transporte / Armazenamento
-40 a 70° C
Umidade Relativa Máx. 95% @ 25° C
5.1.5: CP 441-2
O módulo CP 441-2 é utilizado nos subsistemas
Vessel e Fogo & Gás que possuem comunicação Modbus.
No caso do subsistema Vessel, este tipo de comunicação
seria é usado para controle do nível dos tanques de
produção, enquanto no sistema Fogo & Gás ele é usado
pelo AFDS (Sistema Endereçável de Detecção de Fogo).
O módulo foi projetado para comunicação ponto a
ponto serial de alta velocidade. Ele aceita interfaces
variáveis (2 com 2) para uma comunicação mais eficiente.
Fig. 5.7 — CP 441-2
Tabela 5-5 — Especificações Técnicas do Módulo Modbus CP 441-2
Especificações Técnicas CP 441-2
Interface Número de entradas 2, variável
20 mA (TTY) (máx. 19,2 kbits/s) RS232 (V24) (máx. 115,2 kbits/s)
Método de transmissão
RS422 / RS485 (X27) (máx. 115,2 kbits/s)
Taxa de Trasmissão Máxima 115,2 kbits/s distribuídos nas 2 interfaces
RS 232C (V24): 10m
20 mA (TTY): 1000m
Distância de Transmissão Máxima
RS 422 / 485 (X27): 1200m
Parametrização Via Step 7
24
Existe, neste módulo, um driver disponível para comunicação em Modbus no
formato RTU.
5.1.6: Rack do Controlador Central
A integração dos dispositivos descritos nos itens acima pode ser visualizada
na Fig. 5.8.
Fig. 5.8 — Vista geral do Rack
5.2: Princípios de Programação do S7-400
A maior parte da programação se dá através do software SIMATIC Manager
que é a principal aplicação para execução do projeto pois, através dele, pode-se
configurar, editar e fazer testes nos programas.
O primeiro passo para se iniciar um projeto é configurar o hardware da
aplicação. A primeira comunicação do terminal de programação (geralmente um PC)
com o CLP deve ser através da MPI (Multi-Point Interface) pois este é o único meio
que se conecta ao CLP sem configuração.
A MPI tem como objetivo conectar o CLP ao terminal de programação ou à
interface de operação, ou ainda a outros CLPs. Na CPU existe somente uma MPI
porém é possível acessar através dela todos os outros módulos programáveis.
25
Geralmente, utiliza-se a MPI para se fazer o download de uma configuração
de hardware para a CPU. Isto porque sua taxa de transmissão é de 187,5 kbps,
muito abaixo da taxa de uma rede Ethernet por exemplo que é de 10 Mbps ou 100
Mbps. Então, utiliza-se a MPI somente para configurar uma rede Ethernet para
acessar o CLP do terminal de programação.
A programação no CLP Siemens S7-400 segue a norma IEC 1131. Esta
norma é um documento escrito por um consórcio de fabricantes de CLPs, casas de
sistemas e instituições direcionadas a desenvolver plataformas para níveis de
padronizações na automação industrial. Contém características de funções e
definições de termos gerais comuns para CLPs. Por exemplo, processamento
cíclico, imagem de processo, divisões de tarefas entre dispositivos de programação,
CLPs e Interfaces Homem Máquina.
De maneira geral, o ciclo de processamento da CPU se dá como mostrado na
Fig. 5.9. Ele consiste de três partes principais:
• A CPU atualiza o estado dos sinais de entrada na tabela imagem das
entradas;
• A CPU executa o programa do usuário com as respectivas operações
chamadas pelo OB 1;
• A CPU escreve os valores da tabela imagem das saídas no módulo de
saídas.
As tabelas imagem de entrada e saída são áreas da CPU onde os estados
das entradas e saídas são a cada ciclo armazenadas. Existem áreas distintas para
as entradas e para as saídas. Normalmente o programa de usuário, quando acessa
uma entrada ou saída, está acessando na realidade esta área.
A tabela imagem das entradas do processo é o local onde o estado das
entradas são arquivadas na CPU. Antes do início de cada ciclo de programa, a CPU
lê a periferia (módulos de entrada) e transfere os estados dos sinais digitais para
esta área. Da mesma maneira, a tabela imagem das saídas contém o valor das
26
saídas resultantes do processamento do programa. Somente no final do ciclo de
programa, estes valores de saída são transferidos para os módulos de saída.
Esta abordagem garante que um mesmo sinal de entrada ou saída tenha
sempre o mesmo valor durante um scan do CLP.
Fig. 5.9 — Ciclo de Processamento da CPU
5.2.1: Áreas de Memória
Existem três áreas de memória na CPU S7-400: a memória de carga, a
memória de trabalho e a memória de sistema (Fig. 5.10).
A memória de carga é parte do módulo programável. Ela contém objetos
criados pelo dispositivo de programação e pode ser tanto um cartão de memória
como uma memória integrada na CPU. É ainda dividida em memória de carga
dinâmica e memória de carga retentiva.
A memória de trabalho é do tipo RAM e é aquela que o processador da CPU
acessa quando executa o programa de usuário. Contém o programa de usuário
executável.
27
Fig. 5.10 — Áreas de Memória da CPU S7-400
A memória de sistema também é RAM e é integrada na CPU. Ela armazena
dados de temporizadores, contadores, da memória de bits e dados necessários
internamente pelo sistema operacional. Possui ainda a pilha de blocos (ordem de
chamada dos blocos), a pilha de interrupção e o buffer de diagnóstico (que dá
informações dos últimos eventos ocorridos com a CPU).
A memória de sistema é dividida internamente em algumas áreas que podem
ser acessadas pelo programa de usuário como mostrado na Tabela 5-6.
Tabela 5-6 — Áreas de Endereço da Memória de Sistema
Memória de Sistema
Área de Endereço Notação no S7 Descrição
Tabela Imagem da Periferia de Entrada
Iy No começo do ciclo de varredura (scan) a CPU lê as entradas dos módulos de entrada e salva estes valores nesta área.
Tabela Imagem da Periferia de Saída Qy
Durante o ciclo de varredura (scan) o programa calcula os valores de saída e os aloca nesta área. No final do ciclo, a CPU envia estes valores calculados aos módulos de saída.
Memória de Bit My Esta área fornece espaço para resultados intermediários calculados no programa.
Temporizadores T Fornece espaço para temporizadores.
28
Contadores C Fornece espaço para contadores.
Bloco de Dados DBy
Blocos de Dados contêm informação para o programa. Eles podem ser definidos para uso geral ou podem ser determinados para um específico Bloco de Função ou Bloco de Função do Sistema. São abertos no programa de usuário com a instrução “OPN DB”
Bloco de Dados “Instance” DIy São Blocos de Dados abertos no programa com a
instrução “OPN DI”.
Dados Locais Ly
Esta área contém dados temporários de um bloco enquanto este está sendo executado. A “L stack” também fornece memória para transferência de parâmetros e para salvar resultados temporários.
Obs. 1: y fornece a dimensão de acesso à área. Pode ser B para bytes, W
para words e D para double words.
Obs. 2: quando o acesso é ao bit não é preciso usar o indicador de dimensão
de acesso y, exceto quando o acesso for em um DB ou em um DI. Neste caso deve-
se utilizar X para acessá-lo.
5.2.2: Acesso Direto às E/S
Pode-se acessar diretamente os sinais de entrada e saída. Isto demanda
mais tempo já que é necessário acesso à rede que conecta os periféricos ao CLP
(no caso das plataformas, a rede Profibus DP). Para estas áreas, não é possível o
acesso a bits, porque este acesso foi projetado exclusivamente para endereçamento
a variáveis analógicas.
Tabela 5-7 — Acesso direto à área de E/S
Área Periferia de Entrada PIy
Área Periferia de Saída PQy
As Áreas Periferia de Entrada e Saída permitem acesso direto às entradas e saídas centrais e distribuídas.
29
5.2.3: Registradores
Existem quatro tipos de registradores na CPU S7-400: os acumuladores, os
registradores de endereços, os registradores de blocos de dados e a palavra de
status. A seguir, serão descritos o funcionamento e a utilidade de cada um deles.
5.2.3.1: Acumuladores
Existem quatro acumuladores presentes na CPU S7-400. Eles são utilizados
para instruções envolvendo bytes, words e double words em operações aritiméticas,
comparações e outras. O tamanho dos acumuladores é de 32 bits. Eles são
referenciados por ACCU X, onde X é o número do acumulador. Ainda podem ser
referenciados por ACCU X-L ou ACCU X-H, sendo que L se refere à word menos
significativa e H à word mais significativa. Da mesma maneira, pode haver uma
referência ao byte. Neste caso, utilizam-se duas letras, como por exemplo
ACCU 1-L-L, que se refere ao byte menos significativo da word menos significativa
do acumulador 1.
Fig. 5.11 — Acumuladores no S7-400
Tabela 5-8 — Exemplo de comandos envolvendo acumuladores
L <endereço> Carrega o byte, word ou double word no ACCU 1 (acumulador 1) endereçado depois de o antigo conteúdo do ACCU 1 ter sido salvo no ACCU 2 e depois de ACCU 1 ter sido resetado.
T <endereço> Copia o conteúdo do ACCU 1 no endereço de destino. O número de bytes copiado do ACCU 1 depende do tamanho especificado no endereço de destino.
TAK Troca o conteúdo do ACCU 1 com o conteúdo do ACCU 2.
30
5.2.3.2: Registrador de Endereços
Dois registradores de endereço de 32 bits cada um são usados como
ponteiros para o registro de endereçamento indireto. Eles são referenciados por
AR1 e AR2.
O registrador de endereço contém informação da área de memória (I, Q, M,
DB, etc.), do byte e do bit endereçado. O registro endereça univocamente os bits de
todas as áreas, exceto dos Blocos de Dados (DBs). Para estes, deve-se informar a
priori o número do DB a ser utilizado.
Fig. 5.12 — Formato do Registrador de Endereços
5.2.3.3: Registrador de Bloco de Dados
Os registradores de bloco de dados contêm os números dos blocos de dados
que estão abertos (ativos). Eles possuem 16 bits (tamanho necessário para
armazenar um número inteiro). Assim é possível que dois DBs estejam
simultaneamente abertos; um DB no registrador de DB e o outro como DB Instance
no registrador DI.
Fig. 5.13 — Registradores de Bloco de Dados
Para abrir um Bloco de Dados, deve-se guardar o número deste no
registrador de bloco de dados. Para isso existe a instrução OPN cujo funcionamento
está descrita no Anexo A.
31
5.2.3.4: Palavra de Status
A Palavra de Status contém vários bits que refletem o resultado ou o estado
lógico de instruções individuais durante a execução do programa. Possui 16 bits
mas apenas os 9 primeiros são utilizados.
Fig. 5.14 — Formato da Palavra de Status
O bit 1 da palavra de status é o bit RLO (Result of Logic Operation). É usado
como memória temporária em operações de lógica binária. Uma instrução gerada
verifica o estado de um contato e o combina logicamente com o resultado do
cheque (bit de status) de acordo com as regras da lógica. O resultado é armazenado
no bit de RLO. Existem comandos que atuam diretamente no RLO. Com “SET”
pode-se forçar RLO para “1”, com CLR para “0”, e com NOT inverte-se o estado de
RLO.
O bit 2 da palavra de status é o bit STA (bit de status). Este contém o valor de
um bit endereçado. O bit de status sempre mostra, por leitura ou escrita o estado do
bit endereçado.
Estes são os principais bits da palavra de status e os que são efetivamente
utilizados.
5.2.4: Linguagens de Programação
Estão disponíveis no SIMATIC Manager 4 tipos de linguagens de progração:
LAD (ladder), FBD (function block diagram), STL (statement list) e o SCL que é uma
programação baseada em Pascal.
5.2.4.1: LAD — Ladder
Também chamada de linguagem de diagrama de contatos, esta linguagem
remete à conexão entre álgebra de Boole e circuitos elétricos. Na linguagem ladder,
cada contado, ao assumir dois estados (fechado ou aberto), representa uma variável
booleana, ou seja, uma variável que assume dois estados: verdadeiro ou falso [4].
32
Fig. 5.15 — Exemplo de diagrama ladder
Pela facilidade de construção e pela semelhança com os quadros de
comando elétrico, o diagrama ladder (que quer dizer escada ou cascata) foi uma das
primeiras técnicas de programação de CLPs.
Na Fig. 5.15 tem-se um exemplo de diagrama ladder. Neste caso, a equação
booleana representada em ladder é: Y = A.C + B.
O diagrama possui duas linhas verticais, representando barras de
alimentação. As relações causa-efeito são representadas por linhas horizontais
formadas por um elemento controlado (bobina de relé) e um conjunto de condições
para o controle do elemento (rede de contatores). O diagrama é, no entanto, uma
representação lógica e não considera a tensão das barras de alimentação.
O funcionamento no CLP se dá por uma varredura, chamada scan, de cada
linha horizontal do programa. As bobinas de relés apresentam então um estado
lógico dependente do estado lógico dos contatores que as controlam.
As instruções básicas da linguagem, disponíveis em todos os CLPs são
contatores normalmente abertos (NA ou NO), contatores normalmente fechados (NF
ou NC), bobinas, bobinas inversas, bobinas de rearme (set), bobinas de desarme
(reset), contatores sensíveis à borda de subida e contatores sensíveis à borda de
descida. Ainda existem instruções de temporizador, instruções de contadores,
instruções de movimentação, instruções de comparação e instruções de operações
algébricas que variam de acordo com o fabricante do CLP e outras definidos pela
IEC (International Eletrotechnical Commission).
No SIMATIC Manager pode-se agrupar um determinado número de linhas
horizontais para formar uma network. As networks facilitam o entendimento do
código porque separam o código em pequenos blocos que podem ser comentados e
nomeados.
33
5.2.4.2: FBD — Function Block Diagram
Esta linguagem difere um pouco da linguagem ladder mas possui o mesmo
objetivo. A diferença está no fato de que em FBD a programação é escrita da
mesma maneira que no diagrama de portas lógicas.
Esta linguagem possui as mesmas funcionalidades da linguagem ladder,
apenas a representação é diferente. Como exemplo, temos na Fig. 5.16, a
representação em FDB da equação Y = A.C + B, a mesma mostrada na Fig. 5.15
em ladder.
Fig. 5.16 — Exemplo de Programação em FBD
5.2.4.3: STL — Statement List Programming Language
STL é uma linguagem textual das mais poderosas do CLP S7-400. Com ela
pode-se fazer uma programação mais eficiente porque são eliminadas linhas
desnecessárias de código. Além disso, é permitido o uso de ponteiros, fazendo com
que a programação fique mais ágil. Na Fig. 5.17 é mostrado o exemplo de como
seria a representação da equação booleana Y = A.C + B em STL.
Fig. 5.17 — Exemplo de Programação em STL
Em STL, cada instrução corresponde a um passo da CPU. Um certo número
de instruções, definido pelo usuário, pode ser agrupado para formar uma network.
As instruções são muito mais próximas à linguagem de máquina. Por exemplo, para
mover um byte em ladder, basta utilizar o bloco específico para isto. Em STL, é
34
necessário carregar o byte no acumulador e depois copiar o conteúdo do
acumulador para o local desejado.
Tabela 5-9 — Comandos STL
Exemplos de Comandos em STL
JC <jump label> Se RLO = 1, JC interrompe a varredura seqüencial do programa e pula para o destino identificado por “jump label”.
==D
Compara o conteúdo do ACCU 1 com o conteúdo do ACCU 2 . O conteúdo é interpretado como números inteiros de 32 bits. O resultado é indicado pelo RLO; caso RLO = 1 a comparação é verdadeira, caso contrário, a comparação é falsa.
LAR1 Copia o conteúdo de ACCU 1 no registrador de endereços AR1.
+I Faz a operação de soma entre o ACCU 1-L e o ACCU 2-L e armazena o resultado em ACCU 1-L.
5.2.5: Ponteiros e seus formatos
Pode-se fazer uma programação em STEP 7 com a utilização de ponteiros.
Nesta seção será descrito o funcionamento e a chamada destes.
5.2.5.1: POINTER
O primeiro tipo de ponteiro é o POINTER. O POINTER é um ponteiro de 6
bytes que pode armazenar endereços de todas as áreas de memória de sistema.
Fig. 5.18 — Formato do POINTER
Os dois primeiros bytes se referem ao número do Bloco de Dados (DB)
endereçado. Caso o ponteiro não esteja endereçando um DB, deve-se preencher
35
estes bytes com 0. O byte 2 se refere à área de memória endereçada. São 7 áreas
endereçáveis e cada uma delas possui um código hexadecimal como mostrado na
Tabela 5-10. Os bytes 3, 4 e 5 endereçam os diretamente o byte e o respectivo bit.
Tabela 5-10 — Códigos das Áreas de Memória
Código Hexadecimal Área de Memória Descrição 81 I Tabela Imagem das Entradas 82 Q Tabela Imagem das Saídas 83 M Área de Memória de Bits 84 DB Bloco de Dados 85 DI Bloco de Dados Instance 86 L Dados Locais (pilha) 87 V Dados Locais Prévios
A seguir são dados exemplos de como entrar com um dado do tipo POINTER
no programa:
• P#DB23.DBX5.5 — ponteiro para o bit 5, byte 5 do DB 23;
• P#M20.0 — ponteiro para o bit 0, byte 20 da Memória de bits;
• M20.0 — ponteiro se o parâmetro já foi declarado como sendo POINTER
5.2.5.2: Ponteiro ANY
O parâmetro ANY é um ponteiro um pouco mais completo que o parâmetro
POINTER. São necessários 10 bytes para armazená-lo. O parâmetro ANY, ao
contrário do POINTER pode endereçar toda uma área de memória, além de poder
apontar para temporizadores, contadores e blocos de programa.
Ele pode ser usado em um bloco quando o tipo de dado do parâmetro é
desconhecido ou quando qualquer tipo de dado pode ser usado. Na tabela de
declaração de variáveis do bloco, deve-se declarar o parâmetro como sendo um
ANY. Pode-se então determinar um tipo de dado de qualquer tipo ao parâmetro.
O STEP 7 gerencia de maneira diferente os dados contidos no ponteiro ANY,
de acordo com o seu conteúdo. Se o ponteiro estiver passando um tipo de dado
36
elementar ou complexo o formato é deferente daquele quando o ponteiro passa um
tipo de parâmetro (contadores, temporizadores e blocos de programa).
Para tipos de dados elementares ou complexos, o ponteiro ANY (Fig. 5.19)
armazena: o tipo do dado, o fator de repetição, o número do DB, a área de memória
na qual a informação está armazenada e o endereço inicial dos dados.
Fig. 5.19 — Formato do Ponteiro ANY
O fator de repetição identifica a quantidade do tipo de dado indicado a ser
transferido pelo ponteiro ANY. Ele funciona como uma espécie comprimento de
área. Se, por exemplo, se quiser transferir 10 bytes, o valor 10 deve ser inserido no
fator de repetição e o código de bytes deve ser inserido no campo tipo de dado. O
campo número do DB deve ser mantido em 0 se a área endereçada não for um
Bloco de Dados. O campo seguinte identifica a área de memória (os códigos são os
mesmos que os utilizados para o POINTER). O endereço restante é armazenado no
formato byte.bit.
Caso o campo tipo de dado identifique a passagem de um contador,
temporizador ou bloco de programa, a avaliação dos campos é feita de maneira
diferente (Fig. 5.20).
37
Fig. 5.20 — Formato do ponteiro ANY passando tipos de parâmetros
5.2.6: Blocos de Programa
A programação em STEP 7 permite que o programa de usuário seja
estruturado, fazendo com que este seja repartido em seções de programa. Isso traz
uma série de vantagens como facilidade de compreensão do código, padronização
de seções, organização, facilidade de manutenção no código, debug apenas nas
seções desejadas e facilidade de comissionamento.
Os exemplos mostram que a divisão em tarefas individuais em um grande
processo é vantajosa. As seções de programa de um programa de usuário
estruturado correspondem a estas tarefas individuais (na maioria dos casos) e são
conhecidas como blocos de um programa.
5.2.7: Tipos de Blocos
Os blocos de programa são divididos basicamente em dois tipos: blocos de
sistema e blocos de usuário.
Os blocos de sistema são funções pré-definidas ou blocos de função
integradas ao sistema operacional da CPU. Estes blocos não ocupam nenhum
espaço adicional na memória do usuário. Os blocos de sistema são chamados pelos
programas de usuário.
Os blocos de usuário são áreas disponíveis para escrever o código e os
dados para o programa. Baseado nas necessidades da aplicação, pode-se
estruturar o programa com várias opções de blocos de usuário. Alguns blocos
podem ser executados ciclicamente enquanto outros podem ser executados
38
somente quando necessitado. Blocos de usuário são também chamados de blocos
de programa.
5.2.7.1: Blocos de Usuário
Dentre os blocos de usuário, o mais importante deles é o OB 1. Este faz o
processamento cíclico do programa, ou seja, é executado no início de cada scan e
tem por função chamar os outros blocos e porventura executar instruções.
• Blocos de organização (OB): Faz a interface entre a CPU e o programa
do usuário. O OB 1 é o bloco de processamento cíclico que é
executado a cada scan. Pode-se escrever todo o programa todo nele,
mas uma programação mais elegante usa o OB 1 para chamar outros
blocos quando necessário. Além do OB 1, o sistema operacional pode
chamar outros OBs que reagem a certos eventos, tais como:
interrupção de data programada, interrupção de diagnóstico,
interrupção de erros, interrupção de tempo de ciclo, interrupção de
hardware, start-up do hardware. Caso dois OBs estejam programados
para ser executados ao mesmo tempo, a prioridade do OB será levada
em consideração. Para evitar que isso aconteça, pode-se usar um
deslocamento temporal em um deles (offset) para que as interrupções
ocorram em instantes distintos. Obs.: os OBs temporais utilizam o
clock do CLP para ser ativados. O OB 1, apesar de ser um OB cíclico,
não possui um tempo de execução fixo pois a cada ciclo podem
ocorrem eventos que alteram o tempo de ciclo (por exemplo: chamada
de outro OB, alteração nas entradas que provoquem a chamada de
outro bloco, etc.).
• Blocos de função (FB): Um bloco de função é uma função ou uma
seqüência de comandos armazenados em um bloco lógico, onde os
prâmetros podem ser arquivados em uma memória. O FB utiliza uma
memória adicional na forma de um “Bloco de Dados Instance”.
Parâmetros passados para o FB e alguns dos dados locais são
arquivados neste bloco de dados associado (Instance DB). Outros
39
dados temporários são arquivados na pilha local (L stack). Dados
arquivados em Instance DB são retidos quando o bloco de função é
fechado. Dados arquivados na pilha local não são retidos.
• Função (FC): A função é um bloco de operação lógica similar ao bloco
de função para o qual não é designado área de memória. Um FC não
necessita de um bloco de dados instance. As variáveis locais são
arquivadas na pilha local (L stack) até que a função esteja concluída,
sendo perdidos quando o FC termina a execução.
• Bloco de Dados (DB): Um bloco de dados é uma área de dados
permanente na qual dados ou informações que outras funções
coletaram são armazenados. Blocos de dados são áreas de leitura /
escrita que podem ser carregadas na CPU como parte do programa.
Tabela 5-11 — Tipos de Blocos de Usuário
Blocos de Usuário Tipos de Blocos Características
Blocos de Organização (OB) • Interface do usuário entre sistema e o programa; • Níveis de prioridades (1 a 26); • Informações especiais de inicialização na pilha
de dados locais. Bloco de Função (FB) • Um valor de retorno será transferido (parâmetros
devem ser designados para a chamada); • Parametrizável / Retentivo; • Não Parametrizável / Retentivo; • Não Parametrizável / Não Retentivo.
Função (FC) • Um valor de retorno será transferido (parâmetros devem ser designados para a chamada);
• Parametrizável / Não Retentivo. Blocos de Dados (DB) • Estruturado, arquiva dados locais (DB instance);
• Estruturado, arquiva dados globais (shared DB).
5.2.7.2: Blocos de Sistema
Estes são os blocos que não ocupam espaço adicional na memória. Quando
são FCs ou FBs, têm o código protegido contra leitura.
40
• Função de Sistema (SFC): Função de Sistema é uma função pré-
programada e testada que é integrada na CPU. Algumas das tarefas
suportadas por estas funções são setar parâmetros dos módulos,
comunicação de dados, funções de cópia, etc. Uma SFC pode ser
chamada pelo programa principal mas mesmo assim não ocupará
memória de trabalho.
• Blocos de Função de Sistema (SFB): Um Bloco de Função de Sistema
funciona de maneira similar a um FB porém não ocupa espaço na
memória de trabalho. Da mesma maneira, deve ser associado a um
DB que deve ser transferido à CPU como parte do programa.
• Blocos de Dados do Sistema (SDB): Um Bloco de Dados de Sistema é
uma área de memória que a ferramenta cria para arquivar dados
necessários para o controle de operações. Informações, tais como
dados de configuração, conexões de comunicação e parâmetros são
salvos em SDBs.
Tabela 5-12 — Tipos de Blocos de Sistema
Blocos de Sistema Tipo de Bloco Características
Função de Sistema (SFC) • Arquivados no sistema operacional das CPUs; • Usuário pode chamar esta função (sem memória).
Bloco de Função de Sistema (SFB)
• Arquivados no sistema operacional das CPUs; • Usuário pode chamar esta função (com memória).
Blocos de Dados de Sistema (SDB)
• Blocos de dados para configuração de dados e parâmetros.
5.2.8: Endereçamento com S7-400
Existem várias maneiras de se fazer o endereçamento no SIMATIC Manager.
Dependendo da aplicação, pode ser mais ou menos interessante usar uma ou outra
maneira. A seguir, serão exemplificadas as maneiras de se fazer isto.
41
5.2.8.1: Endereçamento Direto
Com Endereçamento Direto, o local da memória a ser acessado é codificado
na própria instrução, ou seja, na própria intrução está o endereço que a instrução
deve processar.
Ainda há um subdivisão no Endereçamento Direto. Os endereços podem ser
endereçados absolutamente ou simbolicamente.
No endereçamento absoluto é utilizada a identificação da área de memória (I,
M, Q, DB, DI, etc.) seguida da dimensão do acesso (B, W ou D) e do número do
byte. Não é necessário usar dimensão de acesso quando se endereça o bit, exceto
no caso de DB ou DI. Neste caso deve-se usar X para endereçá-los.
Tabela 5-13 — Exemplos de Endereçamento Absoluto
I 10.3 Acesso ao quarto bit (bit 3), do byte 10 da tabela imagem da periferia de entrada.
MW 6 Acesso à word que se inicia no byte 6 (e inclui o byte 7) da memória de bit.
QD 12 Acesso à double word que se inicia no byte 12 (e inclui os bytes 13, 14 e 15) da tabela imagem da periferia de saída.
DBX 13.0 Acesso ao bit 0 do byte 13 do DB que estiver aberto (aquele cujo número estiver armazenado no registrador de DB).
DIB 10 Acesso ao byte 10 do DB Instance (aquele cujo número estiver armazenado no registrador de DI).
No endereçamento simbólico, o acesso é feito através de nomes e não de
endereços absolutos. Para isto é necessário determinar um nome (símbolo) ao
endereço desejado. Isto pode ser feito de duas maneiras. Numa delas o símbolo é
determinado dentro de um bloco na tabela de declaração de variáveis do bloco.
Neste caso o símbolo é local e válido somente dentro do bloco. Quando utilizado, o
símbolo estará precedido de #. A outra maneira é determinar um símbolo global na
tabela de símbolos que será válido em todo o projeto. Quando utilizado no
programa, o símbolo estará entre aspas duplas. Podem ser endereçados
simbolicamente bits, bytes, words e double words.
42
5.2.8.2: Endereçamento Indireto
Com o endereçamento indireto, pode-se acessar áreas de memória que, ao
contrário do endereçamento absoluto, são definidas ou modificadas durante a
execução do programa. O endereçamento indireto permite que partes do programa
sejam executadas repetidamente (loop), cada uma delas com um endereço
diferente.
Existe ainda uma subdivisão do endereçamento indireto: endereçamento
indireto de memória e endereçamento indireto de registro. No endereçamento
indireto de memória, o endereço a ser acessado é armazenado em uma área da
própria memória do usuário. A esta área pode-se dar, se necessário, um nome
simbólico. No endereçamento indireto de registro, o endereço é armazenado em um
dos registradores de endereço (AR1 ou AR2) em vez de ser armazenado em uma
área de memória.
5.2.8.2.1: Endereçamento Indireto de Memória
• Usando Endereço de 32 bits: com este tipo de endereçamento, o endereço
da variável se encontra em uma área de memória (M, L ou DB) a qual pode
ter ou não um nome simbólico definido. A instrução, para se usar
endereçamento indireto de memória, contém a própria instrução (A, L, etc.),
um identificador de área (I, Q, M, DB, etc.), uma dimensão de acesso (B, W
ou D) e uma variável. Esta variável possui 32 bits, ou seja, é uma double
word, deve estar entre colchetes e contém o endereço da variável a ser
acessada.
Ex.: L MW [MD 30] //Carrega no ACCU 1 a MW apontada por
MD30
A I [#pointer_1] //Faz a lógica E da entrada apontada por
#pointer_1
A DBX [#dbn] //Faz a lógica E do bit apontado por #dbn
localizado no DB que estiver aberto (DB cujo número estiver no registrador de DB)
43
Fig. 5.21 — Formato do ponteiro de 32 bits
Para se armazenar um ponteiro em uma locação de memória deve-se
primeiro carregá-lo no ACCU1 e depois copiá-lo para o local desejado.
Ex.: L P#5.2 //Carrega no ACCU1 um ponteiro para o byte 5,
bit 2
T DBD 12 //Copia o conteúdo do ACCU1 para a double
word 12 do DB que estiver aberto
A I [DBD 12] //Faz a lógica E do bit de entrada 5.2
• Usando Endereço de 16 bits: este endereçamento, ao contrário do
endereçamento de 32 bits, é usado para localizar DBs, temporizadores e
contadores além de FBs e FCs. O endereço é armazenado em uma word na
memória (M, L ou DB). O programa interpreta o ponteiro como um inteiro sem
sinal entre 0 e 65535.
Ex.: UC FC [MW 12] //Chama incondicionalmente a FC cujo número
está em MW12
OPN DB [#ent_dbn] //Abre o DB apontado por ent_dbn
Fig. 5.22 — Formato do ponteiro de 16 bits
5.2.8.2.2: Endereçamento Indireto de Registro
Com o Endereçamento Indireto de Registro, o endereço da variável a ser
acessada está armazenado em um registrador de endereço. Também neste tipo de
endereçamento existe uma outra subdivisão: Endereçamento Indireto de Registro de
Área Interna e Endereçamento Indireto de Registro de Área Cruzada. Este tipo de
44
endereçamento serve para acessar dados (bits, bytes, word e double words) que
estejam armazenados na memória.
• Área Interna: uma instrução utilizando o registrador de endereços (área
interna) consiste da própria instrução (A, L, T, etc.), de um indentificador de
área (I, M, Q, DB, etc.), de uma dimensão de acesso (B, W ou DB) e de uma
declaração do registrador utilizado junto com um offset entre colchetes.
Ex.: L MW [AR1,P#0.0] // Carrega no ACCU1 a word da memória de
bits cujo endereço está no registrador de endereços 1 (AR1).
A I [AR2,P#5.3] // Faz a lógica E da entrada apontada por AR2
mais 5 bytes e 3 bits.
No registrador, deve estar armazenado um ponteiro com o endereço
desejado. Para armazenar um ponteiro no registrador de endereço, existe uma
instrução especial.
Ex.: LAR1 P#2.0 // Carrega no AR1 um ponteiro para o byte 2,
bit 2.
L ID [AR1,P#2.0] // Carrega no ACCU1 a double word de entrada
cujo endereço está em AR1 mais 2 bytes, ou seja, ID 4.
Obs.: para instruções com byte, word ou double word, o offset deve ter “0” no
bit caso contrário um erro é ativado na CPU.
• Área Cruzada: este é o ponteiro mais completo pois contém além do
endereço do byte e do bit, a informação da área de memória. Neste caso, ao
armazenar o ponteiro no registrador de endereços, deve-se informar a área
de memória a ser acessada. Uma instrução utilizando o registrador de
endereços (área cruzada) consiste da própria instrução (A, L, T, etc.), de uma
dimensão de acesso (B, W ou DB) e de uma declaração do registrador
utilizado junto com um offset entre colchetes. Neste caso não é necessário
fazer a identificação de área. Ela já foi feita quando o ponteiro foi
armazenado.
45
Ex.: L D [AR1,P#2.0] // Carrega a double word apontada pelo AR1
deslocada de 2 bytes. O ponteiro armazenado em AR1 deve ter a informação de
área de memória, de bytes e de bits.
Para armazenar o ponteiro com informação de área de memória, de bytes e
bits (endereço completo), deve-se utilizar novamente a instrução LAR1 ou LAR2.
Ex.: LAR1 P#I 3.0 // Carrega no AR1 um ponteiro para o byte 3 da
tabela imagem da periferia.
L B [AR1,P#1.0] // Carrega no ACCU1 o byte 4 da entrada
(tabela imagem de periferia de entrada).
Tabela 5-14 — Formas de Endereçamento no S7-400
Endereçamento Direto Endereçamento Indireto
Absoluto Simbólico Memória Indireta Registrador Indireto
Ponteiro de 16 bits
Ponteiro de 32 bits (área int.)
Ponteiro de 32 bits (área int.)
Ponteiro de 32 bits (área cruz.)
Exemplos: Q 6.5
MD 12
“Pump_on”
#var_inc
OPN DB[MW16]
OPN DB[#epdbn]
A M[MD30]
L IW[“analog”]
A I[AR1,P#6.0]
L MB[AR2,P#0.0]
A [AR1,P#0.0]
T W[AR1,P#0.0]
5.2.9: Declaração de Variáveis
Juntamente com os comandos, as variáveis são os mais importantes
elementos do sistema de programação. Pode-se guardar nelas valores que podem
ser salvos na memória no CLP para serem utilizados posteriormente no programa.
As variáveis possuem propriedades que as distinguem de uma área de
memória qualquer que são: nome simbólico, tipo de dado, alcance (faixa de
validade). Antes de utilizar uma variável, deve-se primeiro criá-la, por meio de um
processo de declaração de variável. Existem três maneiras de se declarar uma
variável em S7: por meio da tabela de símbolos global (somente para tipos de dados
46
elementares3), utilizando a tabela de declaração de variáveis de um bloco de
programa e também pela tabela de declaração de variáveis de um Bloco de Dados
global (para todos os tipos de dados, incluindo os dados complexos4 e dados
definidos pelo usuário5).
Uma propriedade das variáveis declaradas na tabela de declaração de
variáveis dos blocos de programa é o tipo de declaração. Dentre os tipos de
declaração temos:
• in: são as variáveis de entrada do bloco, ou seja, necessárias para a
execução;
• in/out: são variáveis que necessárias na chamada do bloco e que podem ser
utilizadas diretamente na saída;
• out: são variáveis retorno da função, ou seja, o resultado de seu
processamento;
• temp: são as variáveis temporárias;
• stat: são as variáveis que ficam armazenadas de uma varredura para outra.
3 Entende-se por Dados Elementares os tipos de dados Bit (BOOL, BYTE, WORD, DWORD,
CHAR), os tipos de dados Matemáticos (INT, DINT, REAL) e os tipos de dados Tempo (S5TIME,
TIME, DATE, TIME_OF_DAY). Possuem até 32 bits.
4 Entende-se por Dados Complexos os tipos de dados Tempo (DATE_AND_TIME), Matriz
(ARRAY), Estrutura (STRUCT) e Cadeia de Caracteres (STRING). Estes tipos de dados são maiores
que 32 bits
5 Entende-se por Dados Definidos pelo Usuário (UDT) os dados maiores do que 32 bits que
podem ser definidos pelo usuário.
47
Capítulo 6: Tratamento de Entradas e Saídas
Para o tratamento dos pontos de entrada e saída foram desenvolvidos 9
blocos de programa. Ele é utilizado em todas as plataformas em operação. Esta é a
primeira vez que o CLP Siemens é utilizado no controle de plataformas da Petrobras
portanto não havia experiência prévia de implementação deste sistema de
tratamento. Algumas dificuldades foram encontradas no decorrer do trabalho
principalmente porque as especificações foram feitas baseadas em CLPs de outras
marcas.
6.1: Objetivo do Tratamento de Entradas e Saídas
Existem alguns motivos pelos quais o tratamento dos pontos de entrada e
saída se tornou uma norma da Petrobras. Eles serão expostos nas seções 6.1.1:
Tratamento de Entradas e 6.1.2: Tratamento de Saídas.
6.1.1: Tratamento de Entradas
O tratamento de entradas garante facilidade de programação através da
uniformização dos sinais de entrada. O que essa uniformização quer dizer é que o
sinal “1” ocorre na lógica (no intertravamento) apenas quando este sinal está em sua
condição anormal, ou seja, fora da condição considerada padrão. Isto ocorre porque
existem sinais de campo que estão, em sua condição normal, enviando “1” e outros
que, em sua condição normal estão enviando “0”. A uniformização, chamada de
polarização de entrada, visa garantir que a programação do intertravamento seja
transparente a estas particularidades. A segunda operação executada pelo
tratamento de entradas é a temporização do sinal. Esta temporização é um atraso
provocado pelo tratamento de entradas no sinal vindo do campo. Este atraso evita
que transitórios ativem alguma lógica no intertravamento, ou seja, confirma através
de um atraso de tempo, a real existência de uma condição anormal. A terceira
operação executada é o bypass de entrada. Esta serve para o operador, através do
supervisório (ECOS), sobrescrever o sinal vindo do campo, ou seja, ignorá-lo. O
sinal resultante destas três primeiras operações é utilizado no intertravamento.
48
Ainda existe uma quarta operação, responsável pela comunicação com o
supervisório. Nesta função, o sinal resultante das três primeiras operações é travado
logicamente e enviado ao supervisório até que ocorra o reconhecimento. Este
reconhecimento é feito através do supervisório e serve para garantir que o operador
tomou conhecimento da alteração do estado do sinal no campo. Existe ainda uma
quinta operação que serve para limpar (resetar) a tabela de reconhecimento de
alarme. Esta função teve de ser implementada porque não existe, no supervisório
utilizado, o comando pulsado.
De maneira concisa, o que o sistema de tratamento de entradas deve fazer é:
• A lógica de polarização da entrada;
• A lógica do filtro;
• A lógica de bypass;
• A lógica de travamento de alarme e de seu reconhecimento.
Fig. 6.1 — Esquema Geral do Tratamento de Entradas
6.1.2: Tratamento de Saídas
O tratamento de saídas faz, como o próprio nome diz, o tratamento dos sinais
provenientes da lógica de intertravamento com destino ao campo. Neste tratamento,
49
a primeira função faz a lógica de sobrescrever “1” no sinal de saída do
intertravamento, se assim desejado pelo operador. A segunda função faz o
contrário, ou seja, a lógica de sobrescrever “0” no sinal proveniente da primeira
função. A terceira função faz a lógica das saídas esperadas. Esta função faz uma
comparação da saída da segunda função com um sinal pré-definido e envia o
resultado ao campo.
De maneira geral, o que o sistema de tratamento de saídas deve fazer é:
• A lógica de sobrescrever a saída da lógica;
• A lógica de polarização da saída.
Fig. 6.2 — Esquema Geral do Tratamento de Saídas
Todas as funções, seus objetivos, e sua implementação, serão
detalhadamente expostos a seguir.
6.2: Mapeamento de Memória do CLP
Todos os sinais dos diagramas da Fig. 6.1 e da Fig. 6.2 são armazenados em
tabelas que o CLP ou o supervisório podem ler ou escrever. Dependendo do sinal,
existem direitos dados ao CLP ou ao supervisório de ler e escrever. A Tabela 6-1
mostra os direitos de acesso aos dados do tratamento de E/S.
Por exemplo, o sinal de entrada física (da tabela ENT) é interno ao CLP.
Somente o controlador tem acesso a este sinal que será posteriormente tratado e
enviado ao supervisório para leitura. A escrita é igualmente proibida pelo
supervisório pois isto poderia trazer conseqüências imprevisíveis para o controle,
além de não refletir a real situação de campo. Para modificar a situação real do
50
campo existe um outro sinal, o de requisição de bypass, ao qual o supervisório tem
direitos de escrita e leitura.
Tabela 6-1 — Memória do CLP
Mnemônico Tabela Ação permitida
ENT Entrada física Interna ao CLP
EPB Entrada polarizada e bypassada Interna ao CLP
SAI Saída física Interna ao CLP
SLG Saída da lógica VXL lê
SLO Saída sobrescrita da lógica VXL lê
EPT Entradas polarizadas temporizadas VXL lê
EBS Entradas polarizadas, bypassadas e seladas VXL lê
REC Reconhecimento de alarme VXL lê / escreve
BYP Requisição de bypass VXL lê / escreve
OV1 Requisição de sobrescrever “1” VXL lê / escreve
OV0 Requisição de sobrescrever “0” VXL lê / escreve
ESP Estado esperado da entrada Definido no CLP
6.3: Implementação
Como já dito anteriormente, o sinal físico não será utilizado diretamente na
lógica, mas sim um sinal previamente tratado. Durante a varredura do CLP, algumas
tabelas são alteradas e outras são usadas como auxiliares do sistema de
tratamento.
6.3.1: Função de Geração das Entradas Polarizadas (EP)
Para a geração das entradas polarizadas, foi criado um bloco de programa do
tipo função. Este bloco faz uma operação com a tabela da Entrada Física (ENT) e
51
com a tabela Estado Esperado da Entrada (ESP) para a geração de uma terceira
tabela, a tabela das Entradas Polarizadas (EP). A operação lógica necessária é a
OU EXCLUSIVO (Tabela 6-2).
epespent =⊕
Tabela 6-2 — Operação OU EXCLUSIVO entre ent e esp gerando ep
Fig. 6.3 — OU EXCLUSIVO
Na Tabela 6-2 é mostrada a tabela verdade da operação OU EXCLUSIVO
entre sinais provenientes de ENT e ESP gerando um sinal que será alocado na
tabela EP.
Esta operação é utilizada porque toda vez que o sinal de campo se encontra
fora de sua condição normal, o sinal “1” deve ser ativado. Isto de fato ocorre quando
se utiliza a operação OU EXCLUSIVO. Pode-se notar que toda vez que o sinal de
campo (tab. ENT) é diferente do sinal esperado (tab. ESP), o sinal de entrada
polarizada (tab. EP) é ativado.
A tabela ENT é proveniente da Tabela Imagem da Periferia de Entrada (I)
enquanto a tabela ESP é definida internamente no CLP podendo ser pertencente a
um bloco de dados (DB) ou à memória de bits (M). Da mesma forma, a tabela
gerada EP pode ser alocada tanto em um bloco de dados (DB) como na memória de
bits (M).
6.3.2: Funcionamento do FC 43 — Gerador de Entradas Polarizadas
O bloco FC 43 tem por função fazer a operação OU EXCLUSIVO entre os
pontos da tabela ENT e os pontos da tabela ESP. O resultado da operação deve ser
ent esp ep 0 0 0 0 1 1 1 0 1 1 1 0
52
seqüencialmente armazenado na tabela EP. Esta operação pode ser melhor
visualizada na Fig. 6.4. Nesta figura, em cada tabela estão representados o
endereço completo (à esquerda) e o conteúdo do endereço (à direita). O endereço
completo está representado como se estivesse armazenado do registrador de
endereços (Fig. 5.12).
Fig. 6.4 — Atualização da tabela EP
A chamada do bloco pode ser feita através da função CALL. Quando se faz
a chamada do bloco, todos os parâmetros de entrada devem ser passados para
este ser executado e para a tabela EP ser atualizada. Enquanto os parâmetros não
são passados as requisições de parâmetro ficam em vermelho e o bloco que está
chamando o outro não pode ser salvo.
Fig. 6.5 — Chamada de Bloco no S7
Fig. 6.6 — Chamada de Bloco com passagem de parâmetros
53
Os parâmetros do bloco FC 43 são três ponteiros do tipo ANY que vão
identificar todas as áreas de memória a ser endereçadas. Neste caso as tabelas
ENT, ESP e EP. Sabe-se de antemão que a tabela ENT é pertencente à área de
memória Tabela Imagem da Periferia de Entrada (I) e que as tabelas ESP e EP
pertencem à Memória de bit (M) ou a um Bloco de Dados (DB). No ponteiro ANY
deve ser identificada a área de memória a qual os dados pertencem, bem como o
endereço inicial, o tipo de dado endereçado (no caso do tratamento de E/S todos
serão double word) e o fator de repetição, que representa o comprimento da área de
memória. Caso a área endereçada seja um Bloco de Dados (DB) deve ainda ser
identificado o número deste. Por exemplo, na Fig. 6.6, está representada uma
chamada de bloco em que a tabela ENT se inicia no edereço 200.0 (byte 200, bit 0)
da Tabela Imagem da Periferia de Entrada (I), possui 5 double words, ou seja 120
bits e ocupa 20 bytes da região I. Da mesma forma, a tabela ESP está alocada na
Memória de Bits, inicia-se no endereço 200.0 e possui 5 double words. Já a tabela
EP está em um Bloco de Dados de número 41, e se inicia no endereço 0.0 deste
DB. Também possui 5 double words, ocupando um total de 20 bytes (até o
endereço 19.7).
A FC 43 possui ainda variáveis declaradas na tabela de declarações do
bloco. Todas elas são do tipo “temp”, ou seja, temporárias.
Fig. 6.7 — Tabela de declarações de variáveis do FC 43
54
Network 1 — FC 43 L P##ENT //Carrega endereço do ponteiro ENT LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega a word (deslocada de 2 bytes)cujo endereço está em AR1; esta armazena o fator de repetição T #ent_rep_factor //Transfere para a variável local L D [AR1,P#6.0] //Carrega informação do endereço T #ent_end //Transfere para ent_end L P##ESP //Carrega endereço do ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega a word que contém o fator de repetição T #esp_rep_factor //Transfere para a variável local L W [AR1,P#4.0] //Carrega o número de DB (se existente, senão carrega zero) T #esp_dbn //Transfere para variável local L D [AR1,P#6.0] //Carrega informação do endereço T #esp_end //Transfere para esp_end L P##EP //Carrega endereço do ponteiro LAR2 //Transfere para o AR2 L W [AR2,P#2.0] //Carrega a word que contém o fator de repetição T #ep_rep_factor //Transfere para a variável local L W [AR2,P#4.0] //Carrega o número de DB (se existente, senão carrega zero) T #ep_dbn //Transfere para variável local L D [AR2,P#6.0] //Carrega informação endereço T #ep_end //Transfere para ep_end
A primeira network da FC 43 tem por objetivo armazenar nas variáveis locais,
definidas na tabela de declarações, os dados provenientes do ponteiro ANY. Os
dados armazenados são o fator de repetição, o número de DB (se existente) e o
endereço inicial da área apontada. Como o ponteiro ANY possui mais de 32 bits ele
não pode ser transferido para nenhum dos acumuladores. Para extrair os dados
nele contidos é necessário usar Endereçamento Indireto de Registro de Área
Cruzada.
A segunda network da função, é um verificador de tamanho de tabelas. É
necessário que a operação de polarização de entradas seja feita entre tabelas de
mesmo tamanho. Isto ocorre para evitar sobreposição de dados. Esta network faz
então uma série de operações de comparação entre os fatores de repetição das
áreas endereçadas. O menor fator de repetição é armazenado em uma variável
local para que seja utilizado posteriormente na execução da operação entre tabelas.
55
Network 2 — FC 43 L #ent_rep_factor // Carrega tamanho da tab. ENT L #esp_rep_factor // Carrega tamanho da tab. ESP <I // Verifica se ENT é menor que ESP JC REP1 // Se sim, pula para REP1 L #ep_rep_factor // Se não, carrega tamanho da tab.
EP <I // E verifica se é menor que ESP JC REP2 // Se sim, pula para REP2 T #rep_factor // Se não, atribui a rep_factor tam.
de EP JU INI // Pula para a próxima network
REP1: L #ent_rep_factor // Carrega tamanho da tab. ENT L #ep_rep_factor // Carrega tamanho da tab. EP <I // Verifica se ENT é menor que EP JC REP3 // Se sim, pula para REP3 T #rep_factor // Se não, atribui a rep_factor tam.
de EP JU INI // Pula para a próxima network
REP2: L #esp_rep_factor // Carrega tamanho da tab. ESP T #rep_factor // E atribui a rep_factor JU INI // Pula para a próxima network
REP3: L #ent_rep_factor // Carrega tamanho da tab. ENT T #rep_factor // E atribui a rep_factor JU INI // Pula para a próxima network
A operação realizada pela network 2 pode ser melhor entendida através da
Fig. 6.8.
Fig. 6.8 — Fluxograma do verificador de tamanho de tabela
A terceira network faz a operação de OU EXCLUSIVO propriamente dita. A
operação é feita em um loop que faz a operação de double word em double word. O
primeiro passo é a transferência do fator de repetição calculado para o contador do
loop. Depois disso, carrega-se no ACCU 1 e ACCU 2 as double words que são
partes das tabelas que serão usadas na operação (ENT, ESP). Faz-se a operação
56
Network 3 — FC 43 INI: L #rep_factor //Inicia a network carregando o
fator de repetição adequado
IFG: T #contador //Transfere para o contador do loop L ID [#ent_end] //Carrega a double word de entrada
apontada por ent_end (ENT) LAR1 #esp_end //Carrega o AR1 com esp_end OPN DB [#esp_dbn] //Abre o DB cujo nro. está em
esp_dbn L D [AR1,P#0.0] //Carrega a double word cujo
endereço está em AR1 (ESP) XOD //Faz a operação de OU EXCLUSIVO
entre ENT e ESP LAR2 #ep_end //Carrega o AR2 com ep_end OPN DB [#ep_dbn] //Abre o DB cujo nro. está em ep_dbn T D [AR2,P#0.0] //Transfere o resultado da operação
para a double word cujo endereço está em AR2 L #ent_end //Incremento dos ponteiros L P#4.0 +D T #ent_end L #esp_end L P#4.0 +D T #esp_end L #ep_end L P#4.0 +D T #ep_end L #contador //Decrementa o contador do loop LOOP IFG BEU //Fim de Bloco
de OU EXCLUSIVO entre as duas double words e transfere-se o resultado para a
tabela EP.
Em alguns casos é necessário guardar no registrador de DB o número do
Bloco de Dados a ser utilizado. Caso não haja DB a ser aberto, o registrador será
carregado com o valor “0” (devido à instrução OPN), não influenciando a operação.
O passo final é o incremento dos ponteiros para a próxima volta do loop. Faz-
se carregando um ponteiro de valor 4 bytes (equivalente a uma double word) e
adicionando este ao endereço utilizado na volta atual. Na próxima volta, os valores
operados serão aqueles cujos endereços foram atualizados na volta atual.
Existe ainda a instrução de fim de bloco para indicar a finalização das tarefas
de atualização das tabelas.
57
6.3.3: Função de Geração das Entradas Polarizadas Temporizadas (EPT)
Para a geração das entradas polarizadas temporizadas, foi criado um bloco
de programa do tipo função. Este bloco opera a tabela das Entradas Polarizadas
(EP) gerada pela função descrita no item acima para a geração de uma outra tabela,
a tabela das Entradas Polarizadas Temporizadas (EPT). Neste caso, nenhuma
operação lógica é necessária, bastando apenas à função retardar o aparecimento
do sinal lógico “1” proveniente da tabela EP, na tabela EPT. Quando o sinal em EP
estiver em “0”, o seu respectivo em EPT também o deve estar.
Fig. 6.9 — Diagrama da Função
Objetivo desta função é fazer uma filtragem temporal nos sinais vindos do
campo. Ela faz uma espécie de confirmação de estado anormal do sinal, ou seja,
apenas após o tempo de atraso pré-definido o sinal é dado como anormal. Isto
serve para ativar a lógica do intertravamento apenas em casos onde o sinal, em seu
estado alterado, persistir. Um caso que pode ilustrar a funcionalidade desta função é
o de uma chave de nível por exemplo. Vamos supor que, em um determinado
momento, devido a uma oscilação do navio, a chave envia sinal e a tabela de
entrada (ENT) é modificada no bit correspondente. No entanto, logo depois, o nível
volta a seu estado anterior e não ativa mais a chave de nível. Se não houvesse a
lógica de filtragem temporal, toda uma lógica no intertravamento poderia ter sido
disparada sem necessidade.
Quanto à localização das tabelas na memória do CLP, a tabela operada EP e
a tabela gerada EPT podem estar armazenadas em duas diferentes áreas de
memória: a Memória de Bits (M) ou em um Bloco de Dados (DB).
58
6.3.4: Funcionamento do FC 44 — Gerador de Entradas Polarizadas
Temporizadas
O bloco FC 44 foi desenvolvido para executar o descrito no item 6.3.3:
retardar o aparecimento do sinal vindo de EP em EPT. A operação é executada de
maneira seqüencial a cada 32 bits (double word).
Os parâmetros do bloco FC 44 são três ponteiros do tipo ANY, um ponteiro
do tipo POINTER, e um número hexadecimal do tamanho de um byte.
Dos ponteiros ANY, dois deles identificam as áreas de memória onde estão
alocadas as tabelas EP e EPT. O outro, identifica uma área de memória onde será
alocada uma tabela auxiliar. Esta tabela auxiliar armazena, no formato hexadecimal,
os tempos nos quais as transições positivas dos bits de EP ocorrem. O ponteiro tipo
POINTER aponta para um Bloco de Dados que guarda o estado dos bits de EP na
varredura anterior. Isto é necessário para utilizar o contato transicional. O parâmetro
tipo byte contém um número hexadecimal que denota, em segundos, o tempo de
espera (retardo do sinal em EPT) para todo o conjunto operado.
A FC 44 possui na tabela de declarações do bloco (Fig. 6.10) variáveis do tipo
“temp” (temporárias) e variáveis “in” (de entrada).
A primeira network da FC 44 tem por objetivo armazenar nas variáveis locais,
definidas na tabela de declarações, os dados provenientes dos ponteiros ANY e
POINTER. Os dados armazenados são o fator de repetição, o número de DB (se
existente) e o endereço inicial da área apontada. Além disso, o FB 1 é chamado,
juntamente com seu Bloco de Dados Instance DB 1. Este FB por sua vez possui
uma chamada a uma Função de Sistema que será utilizada em outra network.
A Função de Sistema utilizada é a SFC 1 “READ_CLK” [5]. Com esta Função,
pode-se ler o valor atual de data ou tempo do clock da CPU. O bloco possui dois
parâmetros, ambos de saída. Um deles é um indicador de erros e o outro fornece os
valores de tempo. Os valores de tempo estão armazenados em duas double words
que contém valores do ano, mês, dia, hora, minutos, segundos e milissegundos
além do dia da semana.
A segunda network faz uma comparação entre os tamanhos das tabelas
(como na FC 43). Neste caso a comparação é somente entre duas tabelas, o que
59
facilita o entendimento do código. Os tamanhos das tabelas são reconhecidos pelas
variáveis locais e o menor deles é copiado na variável #rep_factor.
Fig. 6.10 — Tabela de declarações de variáveis da FC 44
Uma das maneiras de se implementar a FC 44 é fazendo a varredura em
todos os bits da tabela EP. No entanto, observando a operação, notou-se a
existência de uma propriedade na relação EP x EPT: sempre que o bit da tabela EP
está em “0”, seu correspondente na tabela EPT também deve estar. Usando esta
propriedade, a varredura nos bits foi substituída por uma varredura nas double
words. O primeiro passo na network 3 é a verificação de uma double word da tabela
EP. Caso esta double word não seja igual a zero, isto significa que pelo menos um
de seus bits está em “1”. Então se, e somente se, a double word na tabela EP for
60
Network 1 — FC 44 L P##SUB //Carrega endereço do ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#0.0] //Carrega o número do DB T #sub_dbn //Tranfere para a variável local L D [AR1,P#2.0] //Carrega informação do endereço T #sub_end //Tranfere para a variável local L P##ATT //Carrega endereço do ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega a word que contém o fator de repetição T #att_rep_factor //Transfere para a variável local L W [AR1,P#4.0] //Carrega o número de DB (se existente, senão carrega zero) T #att_dbn //Transfere para a variável local L D [AR1,P#6.0] //Carrega informação do endereço T #att_end //Tranfere para att_end L P##EP //Carrega endereço do ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega a word que contém o fator de repetição T #ep_rep_factor //Transfere para a variável local L W [AR1,P#4.0] //Carrega o número de DB (se existente, senão carrega zero) T #ep_dbn //Transfere para a variável local L D [AR1,P#6.0] //Carrega informação do endereço T #ep_end //Tranfere para ep_end L P##EPT //Carrega endereço do ponteiro LAR2 //Transfere para o AR2 L W [AR2,P#2.0] //Carrega a word que contém o fator de repetição T #ept_rep_factor //Transfere para a variável local L W [AR2,P#4.0] //Carrega o número de DB (se existente, senão carrega zero) T #ept_dbn //Transfere para a variável local L D [AR2,P#6.0] //Carrega informação do endereço T #ept_end //Tranfere para ept_end L 0 //Carrega o inteiro 0 T #dbbyte //Transfere para dbbyte
CALL FB 1 , DB1 //Chama FB 1, com DB instance 1
diferente de zero a varredura nos bits é executada (somente da double word
diferente de zero).
Nesta varredura dos bits da tabela EP, uma série de verificações deve ser
feita. A primeira delas é a verificação de transição positiva do bit. Entende-se por
transição positiva a mudança de “0” para “1” em um certo ciclo de varredura. Caso
isto tenha ocorrido, o tempo de transição deve ser armazenado. Isto vai permitir que
se verifique, a cada ciclo, se este sinal deve ser ativado também na tabela EPT. O
local onde este tempo de transição é armazendo é apontado pelo ponteiro ANY.
61
Network 2 — FC 44 L #ep_rep_factor //Carrega tamanho da tab. EP L #ept_rep_factor //Carrega tamanho da tab. EPT <I //Verifica se EP é menor que EPT JC REP1 //Se sim, pula para REP1 T #rep_factor //Se não, atribui a rep_factor
tamanho da tab. EP JU SEE //Pula para SEE (network seguinte)
REP1: L #ep_rep_factor //Carrega tamanho da tab. EP T #rep_factor //E atribui a rep_factor JU SEE //Pula para SEE (network seguinte)
Cada bit da tabela EP possui um espaço reservado nesta área de memória para que
seja armazenado o tempo de transição.
Uma segunda verificação é feita para averiguar se o bit da tabela EP já está
em “1”. Caso ele esteja deve-se ver, através de uma terceira verificação, se não é o
momento de setar, no respectivo lugar da tabela EPT, o bit correspondente. Caso
contrário, o bit de EPT é resetado.
Com o final da varredura dos bits a próxima double word é verificada e todo o
ciclo recomeça. O funcionamento da função pode ser melhor entendido pela Fig.
6.11.
Fig. 6.11 — Fluxograma do funcionamento da FC 44
O ponteiro SUB tipo POINTER, que é utilizado como parâmetro da função,
tem o papel de endereçar uma área de memória que armazena o estado da tabela
EP na varredura anterior. Isto serve para a verificação de transição positiva do bit
(instrução FP). Quando o estado atual do bit é “1” e o estado anterior é “0” o bit RLO
62
da palavra de status é setado para “1”. Isto ocorre e ativa a lógica de
armazenamento do tempo de transição no Bloco de Dados de armazenamento do
tempo de transição.
Na verdade, o tempo de transição armazenado é o segundo em que ocorreu
a mudança de “0” para “1”. Todos os dados do instante de transição poderiam ser
armazenados porém isto demandaria gasto de memória excessivo e desnecessário.
Não é necessário, do ponto de vista prático e como será visto pelo cálculo adiante,
saber a hora em que a transição ocorreu. Desta maneira, decidiu-se utilizar apenas
a informação do segundo de transição, informado pelo clock do CLP, como na Fig.
6.12.
Fig. 6.12 — Segundos do Clock em função do tempo
Esta informação serve apenas para se fazer o cálculo necessário ao atraso
de tempo. Basicamente, o bit em “1” deve ser setado em EPT quando a diferença
entre o instante atual e o instante de tempo de transição for maior ou igual ao tempo
de atraso definido como parâmetro de entrada do bloco.
Seja c(t) a função da Fig. 6.12. Define-se então uma função d(t) que é
dependente da diferença entre o tempo atual (ta) e tempo de transição (tt):
( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( )�
��
<−+−≥−−
=0__________60
0______________
tata
tata
tctcsetctc
tctcsetctctd
O bit correspondente da tabela EPT só deve ser setado se:
( ) atttd ≥
Onde tat representa o tempo de atraso definido como parâmetro de entrada
da FC 44.
63
Network 3 — FC 44 SEE: L #rep_factor //Carrega fator de repetição 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 não, 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 endereço 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 transição positiva = #ciclo JC MEMT //Se sim, pula para MEMT / Se não, 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 não LAR1 #ept_end R [AR1,P#0.0] //Reseta bit ept correspondente JU IBIT //Pula para seqüência 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 transição JU IBIT //Pula para seqüência 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 transição positiva (previamente armazenado no DB de armazenamento do instante de transição) -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 diferença em ACCU1 JC ANOR JU NORM ANOR: L B#16#60 //Adiciona 60 à diferença (caso em que T_ATRASO + instante de transição negativa > 59) +I NORM: L #T_ATRASO //Atenção: escrever em HEXADECIMAL o tempo de espera (em segundos: 01h, 02h, ... , 58h ou 59h) (CONTINUA NA PRÓXIMA PÁGINA)
64
>=I //Verifica se a diferença é maior ou igual ao T_ATRASO JC UM //Se sim, pula para UM JU IBIT //Se não, 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: Função de Geração das Entradas Polarizadas Bypassadas (EPB)
Para a geração das entradas polarizadas bypassadas, foi criado um bloco de
programa do tipo função. Este bloco faz uma operação com a tabela da Entrada
Polarizada Temporizada (EPT) e com a tabela Requisição de Bypass (BYP) para a
geração da tabela das Entradas Polarizadas Bypassadas (EPB). A operação lógica
executada é :
epbbypept =⋅
Tabela 6-3 — Tabela Verdade da Operação
Fig. 6.13 — Operação de Geração de EPB
Na Tabela 6-3 é mostrada a tabela verdade da operação que é executada
para a geração da tabela EPB. Esta operação 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 requisição de bypass o valor “1”. Este
artifício é utilizado para, por exemplo, ignorar sinais vindos de sensores defeituosos.
Pela tabela verdade da operação percebe-se que o bit da tab. EPB somente é
setado quando ept está em “1” e byp está em “0”.
Quanto à localização na memória do CLP, as tabelas EPT, BYP e EPB
podem se localizar tanto na Memória 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 função resposável por fazer a operação
descrita no item anterior. Os parâmetros do bloco FC 45 são três ponteiros do tipo
ANY responsáveis por endereçar as áreas de memória das tabelas envolvidas na
operação. Tem-se a informação, através do ponteiro ANY, das três áreas de
memória envolvidas e de seu tamanho.
A FC 45 possui ainda variáveis usadas dentro do bloco listadas na tabela de
declarações. Todas elas são do tipo “temp”, ou seja, temporárias.
Fig. 6.14 — Tabela de declarações de variáveis do FC 45
A primeira network da FC 45 faz o armazenamento das variáveis locais,
definidas na tabela de declarações, dos dados provenientes dos ponteiros ANY. Os
dados armazenados são o fator de repetição, o número de DB (se existente) e o
endereço inicial da área apontada.
67
Network 1 — FC 45 L P##EPT //Carrega endereço do ponteiro EPT LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega o fator de repetição T #ept_rep_factor //Transfere para uma variável local L W [AR1,P#4.0] //Carrega nro. do DB (se existente) T #ept_dbn //Transfere para uma variável local L D [AR1,P#6.0] //Carrega informação de endereço T #ept_end //Transfere para uma variável local L B [AR1,P#6.0] //Carrega informação de área de mem. T #ept_area //Transfere para uma variável local L P##BYP //Carrega endereço do ponteiro BYP LAR1 //Transfere para o AR1 L W [AR1,P#2.0] //Carrega o fator de repetição T #byp_rep_factor //Transfere para uma variável local L W [AR1,P#4.0] //Carrega nro. Do DB (se existente) T #byp_dbn //Transfere para uma variável local L D [AR1,P#6.0] //Carrega informação de endereço T #byp_end //Transfere para uma variável local L P##EPB //Carrega endereço do ponteiro EPB LAR2 //Tranfere para o AR2 L W [AR2,P#2.0] //Carrega o fator de repetição T #epb_rep_factor //Transfere para uma variável local L W [AR2,P#4.0] //Carrega nro. do DB (se existente) T #epb_dbn //Transfere para uma variável local L D [AR2,P#6.0] //Carrega informação de endereço T #epb_end //Transfere para uma variável local
A segunda network da função é, da mesma maneira que nas outras funções,
um verificador de tamanho de tabelas. A estrutura básica da network é a mesma. O
menor fator de repetição é armazenado em uma variável 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 repetição IF1: T #contador //Carrega o contador do loop OPN DB [#byp_dbn] //Abre DB (se existente) LAR1 #byp_end //Transfere o endereço 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 endereço de EPT p/ AR1 L D [AR1,P#0.0] //Carrega dword apontada por ept_end AD //Executa a lógica AND OPN DB [#epb_dbn] //Abre DB (se existente) LAR1 #epb_end //Transfere o endereço do EPB p/ AR1 T D [AR1,P#0.0] //Transfere resultado da lógica L #ept_end //Seqüência 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 execução da operação lógica.
A terceira network é a responsável pela execução da lógica. A rotina básica é
um loop que faz a operação descrita em 32 bits por volta. O primeiro passo é a
transferência do fator de repetição para o contador do loop indicando o número de
voltas que serão dadas. Logo após, uma instrução OPN faz a abertura do Bloco de
Dados se esta for realmente a área de dados endereçada. Caso contrário, o
registrador de Bloco de Dados é carregado com “0” e não influencia no resto das
instruções. Percebe-se que, da mesma maneira que nas outras funções, há um uso
intensivo de endereçamento indireto através do endereçamento indireto de registro
de área cruzada e indireto de memória.
Os passos finais são os incrementos nos ponteiros a cada volta do loop e a
instrução BEU indicando fim de bloco incondicional.
69
6.3.7: Função de Geração das Entradas Polarizadas Bypassadas Seladas
(EBS)
Para a geração das entradas polarizadas bypassadas seladas, foi criado um
bloco de programa do tipo função. 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
operação lógica executada é um travamento lógico 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 — Operação de Geração de EBS
O reconhecimento é uma operação executada pelo operador, na sala de
controle, através de um comando no supervisório da planta. Quando ocorre de um
sinal da tabela EPB ser ativado, um alarme é acionado no supervisório da planta e o
respectivo bit da tabela EBS é setado. No entanto, o sinal que é de fato utilizado na
lógica 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 função é assegurar que haja o reconhecimento, por parte do
operador, de uma mudança de estado no campo. Enquanto não há o
reconhecimento um alarme é disparado na tela do supervisório. De posse desta
informação o operador pode tomar as medidas necessárias para o correto
funcionamento do processo.
A localização das tabelas na memória do CLP é, como na maioria dos casos,
variável. Todas as tabelas podem se localizar tanto na Memória 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 função que faz a operação de travamento
do alarme na tela do supervisório. Os parâmetros deste bloco são três ponteiros tipo
ANY que endereçam as tabelas alocadas em alguma área de memória do CLP.
Como já descrito, o ponteiro ANY descreve toda a área de memória e não apenas o
endereço inicial.
Além destes, a FC 46 possui variáveis internas que auxiliam as operações
necessárias na implementação (Fig. 6.16).
Fig. 6.16 — Tabela de declarações de variáveis do FC 46
A primeira network da FC 46 armazena em variáveis locais os dados
informados pelos ponteiros ANY. Como nas outras funções, os dados armazenados
são o fator de repetição, o número do DB e o endereço inicial da área apontada.
A segunda network faz a verificação do tamanho das tabelas e utiliza o menor
valor de tamanho na execução da opeação. Esta network funciona como já descrito
71
Network 1 — FC 46 L P##EPB //Carrega endereço 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 informação de endereço T #epb_end //Transfere p/ var. local L W [AR1,P#2.0] //Carrega fator de repetição T #epb_rep_factor //Transfere p/ var. local L P##REC //Carrega endereço 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 informação de endereço T #rec_end //Transfere p/ var. local L W [AR1,P#2.0] //Carrega fator de repetição T #rec_rep_factor //Transfere p/ var. local L P##EBS //Carrega endereço 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 informação de endereço T #ebs_end //Transfere p/ var. local L W [AR1,P#2.0] //Carrega fator de repetição 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 funções. Na Fig. 6.8 tem-se a descrição detalhada de
como funciona a network.
A terceira network da FC 46 faz o travamento lógico do alarme. Em primeiro
lugar se carrega o fator de repetição obtido na network 2, que é igual ao tamanho da
menor tabela envolvida na operação, sendo o tamanho o número de double words
da tabela. Este valor é transerido ao contador do loop e será decrementado a cada
volta. A primeira operação executada é a lógica OU entre os bits de EPB e REC
72
Network 3 — FC 46 INI: L #rep_factor //Carrega fator de repetição 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 operação 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 operação E nas dwords OPN DB [#epb_dbn] //Abre DB (se existente) L D [AR2,P#0.0] //Carrega dword de EPB OD //Faz operação 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 operação é imediatamente utilizado sem ser
armazenado para fazer a lógica E com o valor da tabela EBS. O valor desta
operação é também 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 próxima volta.
Quando o loop é finalizado, a instrução de fim de bloco é executada.
73
6.3.9: Função de Reset de Reconhecimento
Para a implementação da função de reset de reconhecimento foi criado um
bloco de programa do tipo bloco de função. Este bloco opera a tabela REC e uma
tabela auxiliar REC’ de maneira a resetar a primeira.
Fig. 6.17 — Operação de Reset de REC
Esta função tem por objetivo fazer no próprio CLP o comando de reset do
reconhecimento. Isto é feito em primeiro lugar porque o supervisório (que envia o
sinal de reconhecimento) não 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 lógica de tratamento de entradas e saídas. Se o sinal
fosse pulsado e o CLP estivesse em um ciclo de varredura longo (situação rara mas
possível), poderia ocorrer de o sinal de reconhecimento ir para “0” antes de sua
utilização na lógica de tratamento de entradas.
Na Fig. 6.17 tem-se o diagrama de funcionamento do bloco de função. Os
dois temporizadores tem por objetivo gerar uma onda quadrada de período T = 2s.
Esta onda ora habilita, ora desabilita o bloco de movimentação. Quando os bits
correspondentes das tabelas EBS e REC estão ativados, em algum momento o bit
REC’ também o será.
Quanto à localização na memória do CLP, as tabelas EPT, BYP e EPB
podem se localizar tanto na Memória 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 função que faz a operação de
reset de reconhecimento de alarme. Este reconhecimento é feito através de um
comando do supervisório. Os parâmetros de entrada deste bloco são três ponteiros
tipo ANY que endereçam as tabelas do CLP envolvidas na operação. Além destes
74
parâmetros de entrada, o bloco FB 47 possui variáveis outras variáveis do tipo
“temp” e do tipo “stat”. Aqui, deve-se dizer o porquê de se utilizar um FB e não 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 variáveis. Neste caso, como foi necessário o uso de temporizadores, isso
foi imprescindível. Os temporizadores devem, necessariamente, armazenar algumas
variáveis para por exemplo, saber se estão ativos ou não. Para a chamada do bloco,
é necessário ainda designar um Bloco de Dados que será o seu Bloco de Dados
Instance (todo bloco de função deve ser chamado com a designação de um Bloco
de Dados Instance). Na Fig. 6.18, tem-se a visualização das variáveis do Bloco.
Fig. 6.18 — Tabela de declarações de variáveis do FB 47
A primeira network do Bloco de Função armazena em variáveis locais os
dados informados pelos ponteiros ANY. Os dados armazenados são o fator de
repetição, o número do DB e o endereço inicial da área apontada. Eles serão
usados nas networks seguintes.
75
Network 1 — FB 47 L P##REC //Carrega o endereço do Ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#4.0] //Carrega nro. do DB (se existente) T #rec_dbn //Transfere para variável local L D [AR1,P#6.0] //Carrega endereço inicial T #rec_end //Transfere para variável local L W [AR1,P#2.0] //Carrega fator de repetição T #rec_rep_factor //Transfere para variável local L P##EBS //Carrega o endereço do Ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#4.0] //Carrega nro. do DB (se existente) T #ebs_dbn //Transfere para variável local L D [AR1,P#6.0] //Carrega endereço inicial T #ebs_end //Transfere para variável local L W [AR1,P#2.0] //Carrega fator de repetição T #ebs_rep_factor //Transfere para variável local L P##RECL //Carrega o endereço do Ponteiro LAR1 //Transfere para o AR1 L W [AR1,P#4.0] //Carrega nro. do DB (se existente) T #recl_dbn //Transfere para variável local L D [AR1,P#6.0] // T #recl_end //Transfere para variável local L W [AR1,P#2.0] // T #recl_rep_factor //Transfere para variável local
A segunda network serve para a verificação do tamanho das tabelas e utiliza
o menor valor deles na execução da opeação. Esta network é análoga àquela
descrita na Fig. 6.8.
A terceira network do Bloco de Função faz a geração da onda quadrada
através de dois temporizadores. Eles são 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 não, carrega tam. EBS <I //REC < EBS JC REP2 //Se sim, pula p/ REP2 T #rep_factor //Se não, 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 não, 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, senão para a 5
usuário seu aparecimento na saída. Com dois temporizadores ligados em série
(como mostrado na Fig. 6.19), pode-se fazer a onda quadrada, de qualquer período,
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 através 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 operação lógica E entre os bits da tabela EBS e da tabela
REC e transfere o resultado para a tabela REC’. Já se sabe de antemão que, se se
está na network 5, o estado da onda quadrada é alto. Então, o que se faz realmente
nesta network é a operação lógica E entre três 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 repetição 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 operação lógica 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 operação 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 operação de movimentação também 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 transferência dos valores da
tabela REC’ para a tabela REC.
78
Network 6 — FB 47 TMRZ: L #rep_factor //Carrega o fator de repetição 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 conteúdo de ACCU 1 e pula para MV se seu conteúdo for > 0 BEU //Fim de Bloco Incondicional
Ao final, a tabela de reconhecimento (REC) é resetada depois de a lógica
anterior (lógica 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: Função de Geração de SL1
Para a implementação desta função, foi criado um bloco de programa do tipo
função. Este bloco opera com a tabela Saída da Lógica (SLG) e a tabela Requisição
de Override “1” (OV1) para a geração da tabela SL1. Esta tabela é o resultado da
operação de override “1” no sinal de saída. A operação lógica necessária é a OU
(Tabela 6-4).
11lg slovs =+
Tabela 6-4 — Operação 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 — Operação OU
A operação OU permite o sinal vindo de SLG apareça em SL1 quando OV1 é
“0”. Quando o bit de SLG é “0”, a operação permite sobrescrever a lógica através do
sinal de OV1 bastando para isso, escrever “1” no bit correspondente. Esta operação
pode ser útil em casos como testes, falhas de equipamentos ou lógica defeituosa.
A tabela SLG é a saída da lógica ou seja, o resultado do intertravamento.
Pode estar alocada tanto em Memória de Bits (M) como em Bloco de Dados (DB).
As outras tabelas podem, da mesma maneira, estar alocadas na Memória 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 função que faz a operação lógica OU entre
os sinais das tabelas SLG e OV1. O bloco opera de maneira semelhante ao FC 43,
apenas alterando a operação (de OU EXCLUSIVO para OU) e as tabelas
envolvidas. Da mesma maneira, os parâmetros do bloco são três ponteiros do tipo
ANY que endereçam as diferentes áreas de memória envolvidas na operação.
A função FC 48 possui variáveis que auxiliam a execução da operação e são
declaradas na tabela de declarações (Fig. 6.21).
A primeira network armazena em variáveis locais as informações fornecidas
pelo ponteiro ANY das três áreas envolvidas na operação.
A segunda network faz a lógica de escolha do menor fator de repetição. O
funcionamento é semelhante ao das outras funções já explicadas.
A terceira network faz a lógica de override “1”. Os sinais de SLG e OV1 são
carregados e a operação OU é executada de double word em double word.
Obs.: por questão de semelhança com a FC 43, apenas a network 3 é
mostrada neste caso.
80
Fig. 6.21 — Tabela de declarações do bloco FC 48
Network 3 — FC 48 INI: L #rep_factor //Carrega fator de repetição 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 operação 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: Função de Geração de SLO
Para a implementação da função de geração da Saída da Lógica (SLO), foi
criado um bloco de programa do tipo função. Este bloco opera com a tabela SL1 e
com a tabela Requisição de Override “0” (OV0) para a geração da tabela SLO. Esta
tabela é o resultado da operação de override “0” no sinal de saída. A operação
lógica necessária é mostrada na equação abaixo e na Tabela 6-5.
sloovsl =⋅ 01
Tabela 6-5 — Tabela Verdade da Operação
Fig. 6.22 — Geração de SLO
Com as operações de override é possível que o operador tenha controle do
sinal que sai da lógica do intertravamento. Neste caso, basta fazer uma requisição
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 também o será.
Quanto à localização na memória, as três tabelas podem se localizar tanto
em Memória 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 função que faz a operação descrita no item
anterior. Assim como o bloco FC 48, este bloco opera de maneira semelhante ao FC
43, apenas alterando a operação (de OU EXCLUSIVO para a descrita acima) e as
tabelas envolvidas. Os parâmetros de entradas são os mesmos ponteiros ANY que
endereçam as tabelas SL1, OV0 e SLO.
sl1 ov0 slo 0 0 0 0 1 0 1 0 1 1 1 0
82
A função possui as variáveis locais “temp” que auxiliam a execução do bloco
de programa (Fig. 6.23).
A primeira network armazena em variáveis locais as informações fornecidas
pelo ponteiro ANY das três áreas envolvidas na operação.
A segunda network faz a lógica de escolha do menor fator de repetição. O
funcionamento é semelhante ao das outras funções já explicadas.
A terceira network faz a lógica de override “0”. Os sinais de SL1 e OV0 são
carregados e a operação descrita é executada de double word em double word e
armazenada em SLO.
Obs.: por questão de semelhança com a FC 43, apenas a network 3 é
mostrada para esta função.
Fig. 6.23 — Tabela de declarações de variáveis do FC 49
83
6.3.15: Função de Geração de Saídas Físicas (SAI)
Para a implementação da função de geração da Saída Física (SAI), foi criado
um bloco de programa do tipo função. Este bloco opera com a tabela Saída da
Lógica (SLO) e com a tabela Saídas Esperadas (SSP) para a geração das Saídas
Físicas (SAI). Esta tabela é o resultado da operação OU EXCLUSIVO entre as duas
primeiras. A operação lógica necessária é mostrada abaixo e na Tabela 6-6.
saisspslo =⊕
Tabela 6-6 — Operação 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 repetição 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 lógica 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 — Geração de SAI
A operação de geração de SAI tem o mesmo princípio da geração das
entradas polarizadas (EP). O estado “normal” dos comandos é armazenado na
tabela SSP. Quando existe uma diferença entre um bit de SLO e de SSP a saída
física é ativada.
Quanto à localização na memória, as três tabelas podem se localizar tanto
em Memória de Bits (M) como em Bloco de Dados (DB).
6.3.16: Funcionamento do FC 50 — Gerador de Saídas Físicas (SAI)
O bloco FC 50 é um bloco do tipo função que faz a operação 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 operação.
Os parâmetros de entradas são ponteiros ANY que endereçam as tabelas SLO,
SSP e SAI.
Como nos outros blocos, a função possui as variáveis locais “temp” que
funcionam como temporárias (Fig. 6.25).
Fig. 6.25 — Tabela de declarações de variáveis do FC 50
85
A primeira network armazena em variáveis locais as informações fornecidas
pelo ponteiro ANY das três áreas envolvidas na operação.
A segunda network faz a lógica de escolha do menor fator de repetição. O
funcionamento é semelhante ao das outras funções já explicadas.
A terceira network faz a lógica de OU EXCLUSIVO. A operação é realizada
de double word em double word.
Obs.: por questão de semelhança com a FC 43, apenas a network 3 é
mostrada para esta função.
Network 3 — FC 50 INI: L #rep_factor //Carrega fator de repetição 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 operação 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
Capítulo 7: Resultados
Neste capítulo serão mostrados os resultados obtidos com o sistema de
tratamento de entrada implementado e sua posterior análise.
Os resultados referem-se a testes feitos em laboratório com o CLP Siemens
S7-400. Algumas considerações a respeito dos
monitoração e modificação das variáveis foi feita por uma estação conectada
ao CLP via Ethernet.
7.1: Condições de Obtenção dos Resultados
A situação em que foram realizados os testes de verificação do sistema
diferem da situação em que o sistema será implementado nos seguintes aspectos:
• A modificação da tabela ENT se dará pela mudança no estado dos sinais
de campo, vindos da rede Profibus DP e não pela modificação manual via
tabela d e variáveis;
• A modificação da tabela REC se fará via supervisório. No caso dos testes
a modificação é feita via tabela de variáveis.
Em ambas as situações, as condições de laboratório, apesar de diferentes
das condições de campo, não alteram grandemente os resultados que seriam
obtidos em campo. No caso da modificação da tabela ENT, a diferença se dá pelo
tempo de atualização da rede Profibus DP. No segundo caso, a situação de
laboratório é praticamente igual a de campo. A diferença é que a estação que
modifica a tabela REC é outra, no entanto está conectada na mesma rede Ethernet.
87
7.2: Visualização do Funcionamento
Os testes em laboratório foram realizados utilizando uma tabela de variáveis
que monitora o valor dos bits (Memória do CLP) online.
Fig. 7.1 — Exemplo de Tabela de Variáveis
Esta mesma ferramenta permite modificar o valor das variáveis, verificar o
tempo de ciclo, forçar valores, etc. Em comparação à monitoração de variáveis
diretamente no bloco, a tabela de variáveis permite que se visualize diretamente, em
uma mesma tela, todas as variáveis de interesse. É a melhor maneira para fazer
testes com vários blocos, pois independe da quantidade de chamadas.
7.3: Resultados Obtidos
Em relação ao sistema anteriormente implementado, o novo Sistema de
Tratamento de Entradas e Saídas apresentou soluções que mudaram sua
característica. A primeira grande mudança se deu no endereçamento dos sinais. O
88
sistema anterior, em vez fazia o endereçamento 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 lógica.
Toda a lógica do Sistema de Tratamento dos Pontos de Entrada e Saída
desenvolvida ocupa uma área na memória de trabalho de 3.004 bytes. No sistema
antigo, apenas para a geração 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 instruções necessárias para
fazer a lógica de temporização. No novo Sistema apenas é necessário informar a
área dos sinais. A lógica de temporização é feita em apenas uma network.
No sistema antigo, não havia a possibilidade de haver variações de área de
memória para uma determinada tabela. Para isso era necessária a criação de um
novo bloco de programa. Por isso, o sistema só funcionava para tabelas alocadas
na Memória de Bits (M). Com o novo Sistema, toda área de memória pode ser
enderaçada para uma tabela, basta que o ponteiro ANY contenha esta informação.
Quanto ao tempo do ciclo de varredura, o CLP Siemens possui uma
ferramenta de análise que permite verificar os tempos mínimo, médio e máximo de
ciclo. No entanto, os resultados obtidos em laboratório não podem ser extrapolados
diretamente para a plataforma. Isto porque não se tem uma relação direta entre o
número de pontos das tabelas e o tempo de execução. Para tabelas com 160
pontos (5 double words), o tempo de execução médio do tratamento de entradas é
de 3 ms e o de tratamento de saídas é de 1 ms. Este tempo é aumentado quando
por exemplo, são mudados vários 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 máximo de 64 ms. Isto porque provavelmente o bloco FC 44 de
temporização atuou em seus ciclos mais longos demandando mais tempo de
execução. A alteração de tantos pontos em tão pouco tempo é, no entanto, muito
difícil de ocorrer na prática. Além disso, a especificação Petrobras sobre tempo de
ciclo é em relação ao tempo médio e não em relação ao tempo máximo. Porém,
como foi dito anteriormente, a relação entre o número de pontos das tabelas e
tempo de ciclo não é direta. Para um número maior de pontos (8 double words), o
tempo de execução médio do tratamento de entradas se manteve em 3 ms. O
89
tempo de ciclo médio exigido pela Petrobras para as CPUs é de no máximo 150 ms.
Com o sistema funcionando provisoriamente, o tempo de ciclo médio das CPUs
(média dos tempos médios das 5 CPUs) está em cerca de 100 ms.
90
Capítulo 8: Conclusões
A lógica de controle ficou muito mais clara do que a implementada
anteriormente. A principal vantagem advinda do Sistema de Tratamento dos Pontos
de Entrada e Saída é a rapidez de execução e a clareza da lógica. Agora, basta
descrever a área de memória onde os pontos estão alocados e reservar uma área
de memória para algumas tabelas auxiliares. O uso dos ponteiros ANY é
fundamental nesta tarefa. Qualquer lugar de memória pode alocar os pontos
envolvidos na operação pois os blocos de programa foram desenvolvidos para lidar
com esta variedade.
No entanto, o entendimento da lógica por parte da Petrobras é essencial para
que o Sistema seja aprovado para uso na plataforma. As providências para que isso
ocorra estão sendo tomadas por aqueles que trabalham diretamente na plataforma
P-43. É a primeira vez que estas especificações estão 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 Niterói) para garantir a viabilidade do sistema. Um dos
problemas que pode ocorrer é o excessivo tempo de execução da lógica. Nos testes
feitos em laboratório isto não ocorreu porque o número de pontos simulados na
entrada do sistema foi muito inferior ao que será na prática. A relação direta entre
tamanho de tabelas e tempo de execução não foi encontrada. Se necessário,
algumas alterações deverão ser executadas nos blocos mais críticos, principalmente
no FC 44 e FB 47, visivelmente os “gargalos” do sistema pela presença de
temporização.
O Sistema de Tratamento de Entradas e Saídas é um passo em busca do
mais importante em plataformas de petróleo: a segurança. Ele foi praticamente todo
desenvolvido em STL, linguagem que otimiza utilização do espaço e faz programas
mais velozes, especialmente porque esta era uma das partes críticas do projeto. O
que se buscou em todos os momentos foi a robustez e a simplicidade do programa.
Isto foi alcançado graças ao uso intensivo dos diversos tipos de ponteiros
91
disponíveis, da organização interna dos blocos (todos seguem um padrão) e da
divisão do sistema em subtarefas (um bloco para cada operação lógica).
Com esta simplicidade e organização espera-se que, com os testes que
serão realizados em plataforma, o Sistema de Tratamento dos Pontos de Entrada e
Saída 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 Automação Industrial”, LTC,
2001.
[5] SIMATIC System Software for S7-300/400 System and Standard Functions,
2002.
93
Anexo A — Instruções STL utilizadas
Neste anexo estão listadas as instruções utilizadas nos blocos do Sistema de
Tratamento dos Pontos de Entrada e Saída, com seus respectivos formatos e
descrições.
• Instruções Lógicas de Bit:
1. A (AND)
Formato: A <Bit>
Descrição: A instrução A verifica se o estado do bit endereçado é “1” e
faz a lógica AND com o bit RLO.
2. R (RESET)
Formato: R <Bit>
Descrição: A instrução R escreve “0” no bit endereçado se o RLO = 1.
3. S (SET)
Formato: S <Bit>
Descrição: A instrução S escreve “1” no bit endereçado se o RLO = 1.
4. = (ATRIBUIÇÃO)
Formato: = <Bit>
Descrição: A instrução = escreve o conteúdo de RLO no bit
endereçado.
5. FP (SENSOR DE TRANSIÇÃO POSITIVA)
Formato: FP <Bit>
Descrição: A instrução 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 mudança de estado. O
estado anterior de RLO é armazenado no endereço indicado por <Bit>
para se fazer a comparação.
• Instruções de Salto: todas as intruções de salto utilizam como parâmetro
um jump label. Este jump label pode ter no máximo quatro caracteres e o
primeiro deles deve ser uma letra. São seguidos obrigatoriamente por “:” e
devem preceder a instrução de programa.
1. JU (Jump Unconditional)
Formato: JU <jump label>
Descrição: A instrução JU interrompe o funcionamento seqüencial 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 instrução, porém deve estar no mesmo bloco de programa.
2. JC (Jump Conditional)
Formato: JC <jump label>
Descrição: A instrução JC interrompe o funcionamento seqüencial do
programa e salta para <jump label> se RLO = 1.
3. JCN (Jump if RLO = 0)
Descrição: A instrução JCN interromper o funcionamento seqüencial
do programa e salta para <jump label> se RLO = 0.
• Instruções com Double Words, Word e Bytes:
1. ==D (Compara Double Integer)
Formato: ==D
95
Descrição: Esta instrução compara o conteúdo do ACCU 1 com o
conteúdo do ACCU 2. Se ambos são iguais, RLO é escrito com “1”.
2. +D (Adição com Double Integer)
Formato: +D
Descrição: Esta instrução soma o conteúdo de ACCU 1 e ACCU 2 e
armazena o resultado em ACCU 1. O conteúdo dos acumuladores é
interpretado como inteiros de 32 bits.
3. <I (Compara Integer)
Formato: <I
Descrição: Esta instrução verifica se o conteúdo, interpretado como um
número inteiro, de ACCU 2-L é menor do que o de ACCU 1-L.
4. >=I (Compara Integer)
Formato: >=I
Descrição: Esta instrução verifica se o conteúdo, interpretado como um
número inteiro, de ACCU 2-L é maior ou igual do que o de ACCU 1-L.
5. –I (Subtração Integer)
Formato: –I
Descrição: Esta instrução subtrai o conteúdo de ACCU 1-L do
conteúdo de ACCU 2-L e armazena o resultado em ACCU 1-L.
6. L (Load)
Formato: L <address>
Descrição: Esta instrução carrega o byte, word ou double word
endereçado no ACCU 1 depois de o antigo conteúdo deste ser copiado
para ACCU 2 e de o ACCU ser resetado para “0”.
7. T (Transfer)
Formato: T <address>
96
Descrição: Esta instrução copia o conteúdo do ACCU1 para o destino
endereçado por <address>. O número de bytes copiado para o destino
depende do tamanho expressado no endereço de destino.
8. LAR1 ou LAR2 (Load AR1 or AR2)
Formato: LAR1 <D>
Descrição: Esta instrução carrega o registrador AR1 com o conteúdo
da double word <D> ou do ponteiro.
9. TAK (Toggle Accu 1 with Accu 2)
Formato: TAK
Descrição: Esta instrução troca o conteúdo dos acumuladores ACCU 1
e ACCU 2.
10. INVD (Complemento de um de double interger)
Formato: INVD
Descrição: Esta instrução forma o complemento de “1” do conteúdo de
ACCU 1. Isto inverte o valor, bit a bit, do conteúdo de ACCU 1.
11. AD (And double word)
Formato: AD
Descrição: Faz a operação booleana E entre o conteúdo de ACCU 1 e
ACCU 2 e armazena o resultado em ACCU 1.
12. OD (Or double word)
Formato: OD
Descrição: Faz a operação booleana OU entre o conteúdo de ACCU 1
e ACCU 2 e armazena o resultado em ACCU 1.
13. XOD (Exclusive OR double word)
Formato: XOR
Descrição: Faz a operação booleana OU EXCLUSIVO entre o
conteúdo de ACCU 1 e ACCU 2 e armazena o resultado em ACCU 1.
14. OPN (Open a data block)
97
Formato: OPN <data block>
Descrição: Esta instrução armazena <data block> no registrador de
DB. Este DB pode ser Compartilhado ou Instance.
15. LOOP (Faz o Loop)
Formato: LOOP <jump label>
Descrição: Esta instrução decrementa ACCU 1-L e salta para <jump
label> se ACCU 1-L for diferente de zero.
16. BEU (Block End Unconditional)
Formato: BEU
Descrição: Encerra o processamento do bloco atual e salta para o
bloco que chamou o atual. A varredura recomeça na instrução
imediatamente subseqüente à que chamou o bloco.
17. CALL (Block Call)
Formato: CALL <logic block indentifier>
Descrição: Usado para chamar FCs, FBs, SFCs ou SFBs.