Automação das Plataformas P-34 e P-48: Tratamento dos...

104
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.

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.