Você está na página 1de 15

BLOCOS DE FUNÇÃO

Desde que as primeiras linguagens de programação foram desenvolvidas, houve um


considerável avanço em termos de facilitação para que o usuário pudesse escrever mais
rapidamente o programa que atendesse às suas necessidades.
As primeiras linguagens disponíveis, também chamadas de linguagem de primeira
geração, dispunham apenas de um pequeno conjunto de instruções básicas disponíveis.
Assim, qualquer outra função que o usuário desejasse deveria ser programada a partir deste
pequeno conjunto.
Com o passar dos anos, e à medida que as novas gerações de linguagens de
programação para CLP foram sendo desenvolvidas, os fabricantes de CLP passaram a
incluir no conjunto de instruções uma série de funções de alto nível capazes de realizar
facilmente um sem número de tarefas. Algumas destas funções, inclusive já são
padronizadas pela norma IEC 61132-3.
Assim, neste capítulo serão abordadas algumas destas funções mais usuais para a
programação de CLP.

Figura 1 - Tela de programação com ambiente selecionado para Bloco de Funções


Um Diagrama de Blocos de Função, (Function Block Diagram) FBD é uma
linguagem gráfica para programação de CLP baseado na interpretação do comportamento
do sistema. Este comportamento pode ser descrito em termos do fluxo de sinais entre os
elementos do diagrama, caracterizando-se por uma grande semelhança com circuitos
eletrônicos digitais.
Os elementos da linguagem FBD devem ser interconectados por linhas de fluxo,
seguindo a convenção utilizada em geral para linguagens gráficas. Nesta convenção o lado
esquerdo é destinado para os sinais de entradas do bloco, enquanto o lado direito é
reservado para os sinais de saída do bloco. A ilustração a seguir exemplifica o uso de um
bloco para representar a operação lógica E entre duas variáveis (BOTAO_1 e BOTAO_2)
cujo resultado deverá acionar a variável MOTOR.

Figura 2 - Exemplo de bloco de função

Cada bloco tem um número fixo de pontos de conexão de entrada e de saída, e é


representado por um simples retângulo A saída de um bloco pode ser conectada a entrada
de outro bloco. Os sinais se propagam da saída dos blocos para as entradas de outros blocos
e as saídas são atualizadas como um resultado do processamento dos blocos. A ilustração a
seguir mostra duas redes de blocos usados para montar as lógicas de SET e de RESET da
variável MOTOR. Observe que um sinal denominado TRUE (em inglês significa
verdadeiro) é utilizado para indicar a presença permanente de um nível lógico alto.

Figura 3 - Exemplo de conexões entre blocos

Num bloco de função deve-se estar atento à simbologia que se emprega para cada
sinal de entrada quanto ao tipo de sensibilidade. Conforme o caso pode ser sensível a nível
(alto ou baixo) ou por borda (de subida ou de descida). Veja a ilustração a seguir, onde o
bloco OR é sensível: ao nível lógico alto da variável SINAL_1, ao nível lógico baixo da
variável SINAL_2, à borda de subida da variável SINAL_3, e à borda de descida da
variável SINAL_4.

Figura 4 - Tipos de sensibilidade dos sinais de entrada

Devido à sua complexidade, algumas funções exigem um bloco para poderem ser
representadas, é o caso de temporizadores, contadores e outras, conforme será apresentado
nas seções seguintes.

BLOCOS BIESTÁVEIS

Este bloco de função realiza a memorização do estado da saída Q em nível lógico 0 ou


1 dependendo da entrada que for ligada (SET ou RESET). Seu comportamento segue o
mesmo princípio do programa exemplo mostrado na Figura 29 no capitulo anterior, sendo
na verdade uma forma alternativa de se escrever o mesmo programa. Assim, A primeira vez
que a função é executada o valor da saída Q é posto em 0. Ao se ligar a entrada SET o valor
da saída Q é colocado em nível 1, o sucessivo desligamento de SET não ocasiona o
desligamento da saída Q, ou seja, permanece memorizado. Para comutar a saída Q
novamente para nível 0 será preciso acionar a entrada RESET. Caso ambas as entradas
forem atuadas esta função dará prioridade ao desligamento da saída. A figura abaixo mostra
a representação gráfica de um bloco RS.

Figura 5 - Bloco biestável RS

Um bloco de função biestável SR é um bloco similar ao bloco RS, com a diferença


de que caso ambas as entradas forem atuadas esta função dará prioridade ao desligamento
da saída. A figura abaixo mostra a representação gráfica de um bloco SR.
Figura 6 - Bloco biestável SR

TEMPORIZADORES

Os temporizadores constituem uma importantíssima função possível de ser


implementada nos sistemas automatizados com CLP. Pode-se dizer que praticamente quase
todas as aplicações empregam pelo menos uma das três principais formas de
temporizadores. Estes tipos de temporizadores são denominados: Temporizador de atraso
na subida, Temporizador de atraso na descida e Temporizador de pulso, os quais são mais
bem detalhados a seguir. Observe que em todos os casos eles funcionam ligando uma saída
dependente de uma temporização que tem início definido pelo nível lógico do sinal na
entrada.

a) Temporizador de Atraso de Subida (TON)

Figura 7 - Temporizador TON

Após o início do pulso, a saída fica em nível baixo durante o tempo especificado na
entrada PT; depois irá para nível alto enquanto a entrada IN não volte ao nível baixo. A
saída ET apresenta o valor do tempo decorrido desde o início da temporização. Caso a
entrada IN seja colocada em nível alto por um período de tempo inferior ao tempo
programado, a saída Q não atua. O diagrama temporal a seguir demonstra o comportamento
desta função.
Figura 8 - Diagrama temporal do temporizador TON

b) Temporizador de atraso na descida TOF

Figura 9 - Temporizador TOF

Neste caso a saída vai para nível alto durante todo o tempo em que a entrada IN fica
ligada, permanecendo ainda ligado por um tempo após o desligamento da entrada IN. O
tempo de retardo para desligar é definido pelo valor especificado na entrada PT. A saída ET
apresenta o valor do tempo decorrido desde o início da temporização. Caso a entrada IN
seja recolocada em nível alto antes de ter decorrido a temporização, a saída Q não chega a
desligar. O diagrama temporal a seguir demonstra o comportamento desta função.
Figura 10 - Diagrama temporal para o temporizador TOF

c) Temporizador de pulso definido TP

Figura 11 - Temporizador TP

Neste caso, quando a entrada IN vai para nível alto, a saída Q vai para nível alto e
permanece neste nível durante o tempo especificado na entrada PT, independente do estado
da entrada IN. A saída ET será incrementada enquanto Q estiver em nível alto. Ao final do
pulso, o tempo decorrido será mantido até o início do próximo pulso.
Figura 12 - Diagrama temporal para o temporizador TP

CONTADORES

Similarmente aos temporizadores, os contadores também são estruturas muito úteis em


sistemas automatizados via CLP. Tipicamente eles podem ter estrutura de contagem
crescente, decrescente ou ainda bidirecional. Há, de certa forma uma semelhança conceitual
entre contadores e temporizadores, fato que leva muitos estudantes iniciantes a confundir
seu uso em aplicações diversas. A diferença fundamental entre contadores e temporizadores
é que enquanto estes últimos contabilizam “tempo” para atuarem suas saídas, os contadores
por sua vez contabilizam “eventos” que, geralmente independem do instante de tempo em
que ocorrem.

a) Contador crescente

Figura 13 - Contador crescente


Conta os pulsos (borda de subida) na entrada CU (Counter Up) até que um valor
máximo PV (Programmed Value) seja atingido. Neste instante o valor de contagem é
congelado e a saída Q é ativada. A entrada R (Reset) leva o valor do contador para zero. A
saída CV (Current Value) apresenta o valor atualizado do contador. Matematicamente a
função de temporização pode ser escrita como:

1, seCV ≥ PV 
Q= 
0, seCV < PV 
CV ← (CV + 1)∀ ↑ CU
R = 1 ⇒ CV = 0

O diagrama temporal a seguir na Figura exemplifica o comportamento do contador


crescente no programa exemplo.

Nome da variável Tipo Endereço


Conta CTU
Pulso BOOL I0.0.0.0.1
Zera BOOL I0.0.0.0.2
Saida BOOL Q0.0.0.0.0

Figura 14 - Programa exemplo com contador crescente


Figura 15 - Comportamento do programa exemplo para contador crescente

Para o exemplo anterior deve-se observar que o valor de contagem é zerado todas as
vezes que a entrada R do contador é colocada em nível alto. Por outro lado a saída Q do
cantador vai a nível alto toda vez que o valor de contagem for maior ou igual a cinco, cujo
valor foi programado na entrada PT.

b) Contador decrescente

Figura 16 - Contador decrescente

Decrementa o valor de contagem a cada pulso (borda de subida) na entrada CD


(Counter Down) até atingir o valor zero. Neste instante a contagem é interrompida e a saída
Q vai a nível alto. A entrada LD (Load) é usada para carregar o valor inicial descrito em PV
(Programmed Value). Observe que o valor inicial do contador é zero e, por isto a saída Q é
inicialmente posta em nível alto até que a entrada LD seja acionada. A saída CV (Current
Value) apresenta o valor atualizado do contador. Matematicamente a função de
temporização pode ser escrita como:

1, seCV ≤ 0 
Q= 
0, seCV > 0
CV ← (CV − 1)∀ ↑ CD
LD = 1 ⇒ CV = PV
O diagrama temporal a seguir exemplifica o comportamento do contador
decrescente.

c) Contador bidirecional

Figura 17 - Contador bidirecional

Incrementa o valor de contagem a cada pulso (borda de subida) em CU (Counter


Up) e decrementa este mesmo valor de contagem a cada pulso (borda de subida) em CD
(Counter Down). A entrada R (Reset) zera o valor do contador, enquanto a entrada LD
(Load) carrega o mesmo com um valor inicial descrito em PV (Programmed Value). Toda
vez que o valor de contagem atingir o valor PV a saída QU é colocada em nível alto. E,
toda vez que o valor de contagem cair a zero a saída QD é colocado em nível alto. A saída
CV (Current Value) apresenta o valor atualizado do contador. Matematicamente a função
de temporização pode ser escrita como:

1, seCV ≥ PV 
QU =  
0, seCV < PV 
1, seCV ≤ 0 
QD =  
0, seCV > 0
CV ← (CV + 1)∀ ↑ CU
CV ← (CV − 1)∀ ↑ CD
R = 1 ⇒ CV = 0
LD = 1 ⇒ CV = PV

DETECTORES DE BORDA

Um bloco de detecção de borda realiza a constante monitoração do estado da entrada


afim de dedetctar o exato instante em que a mesma transiciona de 0 para 1, caso se trate de
uma função R_TRIG (Rising Edge Trigger), ou então, detectar o exato instante em que a
mesma transiciona de 1 para 0, caso se trate de uma função F_TRIG (Falling Edge
Trigger). Em ambos os casos esta função irá ligar a saída por apenas um intervalo do ciclo
de varredura a fim de sinalizar a ocorrência da borda. Abaixo tem-se o diagrama de blocos
desta função e, a seguir vê-se um exemplo de seu comportamento através do diagrama
temporal.

Figura 18 - Blocos detectores de borda

Nome da variável Tipo Endereço


Subiu R_TRIG
Desceu F_TRIG
Entrada BOOL I0.0.0.0.1
Memoria BOOL M0.0.0.0.0
Figura 19 - Programa utilizando detectores de borda

Figura 20 - Diagrama temporal do exemplo com detectores de borda

REGISTRADORES

Os registros são conjuntos de bits agrupados de forma a configurar uma das cadeias
descritas no Quadro 5 do capítulo 1. Independente do tipo de dado que representam, estas
cadeias podem ser operadas por funções de grande utilidade na programação de máquinas.
Entre estas funções destacam-se as rotações e deslocamentos de registros.
Uma rotação de registro consiste em deslocar à direita ou à esquerda todos os bits do
registro de forma como se fosse um anel fechado, onde o primeiro bit recebe o conteúdo do
último bit. No exemplo a seguir é mostrado a rotação à direita (e logo após) à esquerda de
uma cadeia de 8 bits.

Cadeia Inicial 1 0 0 0 1 1 0 1

Rotação à esquerda 0 0 0 1 1 0 1 1

Rotação à direita 1 1 0 0 0 1 1 0

Por outro lado o deslocamento de um registro consiste em deslocar à direita ou à


esquerda todos os bits do registro de forma como se fosse um anel aberto, o bit da
extremidade é perdido. No exemplo a seguir é mostrado a rotação à direita (e logo após) à
esquerda de uma cadeia de 8 bits.

Cadeia Inicial 1 0 0 0 1 1 0 1

Deslocamento à esquerda 0 0 0 1 1 0 1 0

Deslocamento à direita 0 1 0 0 0 1 1 0

Uma característica peculiar das operações de deslocamento refere-se ao fato que, caso a
cadeia represente um número inteiro sem sinal, deslocar à esquerda equivale a uma
multiplicação por 2 e, deslocar à direita equivale a uma divisão por dois. Para o caso do
exemplo anterior a cadeia inicial representa o número 114, então facilmente se verifica que
a nova cadeia deslocada à esquerda representa o número 228, enquanto à nova cadeia
deslocada à direita representa o número 57. As representações para todos os blocos de
deslocamento e de rotação estão apresentadas nas quatro ilustrações a seguir.

a) Rotação à esquerda

Figura 21 - Bloco de função para rotacionar à esquerda

b) Rotação à direita
Figura 22 - Bloco de função para rotacionar à direita

c) Deslocamento à esquerda

Figura 23 - Bloco de função para deslocar à esquerda

d) Deslocamento à direita

Figura 24 - Bloco de função para deslocar à direita

COMPARADORES

Os blocos de funções para comparações são capazes de identificar o resultado de um


teste booleano a fim de verificar uma das seguintes relações entre dois operandos:

Relação de comparação Símbolo Mnemônico


Igual = EQ
Diferente ≠ NE
Menor < LT
Menor ou igual ≤ LE
Maior > GT
Maior ou igual ≥ GE
Quadro 1 - Comparadores relacionais
Caso a função relacional avaliada resulte verdadeira então a variável de saída é
colocada em nível alto. Os seis blocos de comparação estão apresentados na figura abaixo.

Figura 25 - Blocos de função: comparadores relacionais

Você também pode gostar