• Nenhum resultado encontrado

Tratamento de Entradas e Saídas

No documento Ricardo s. Santos Prh34 Ufsc Das g (páginas 54-93)

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

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,

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

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

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

ep esp

ent⊕ =

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

ent esp ep

0 0 0

0 1 1

1 0 1

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

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.

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.

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

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.

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

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

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

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.

Network 2 — FC 44

L #ep_rep_factor //Carrega tamanho da tab. EP L #ept_rep_factor //Carrega tamanho da tab. EPT

No documento Ricardo s. Santos Prh34 Ufsc Das g (páginas 54-93)

Documentos relacionados