Linguagem ladder

linguagem de programação

A linguagem Ladder foi originalmente desenvolvida para construir circuitos de relés, utilizados em processos industriais [1]. Desta forma, era possível acionar máquinas industriais no chão de fábrica, como cilindros hidráulicos e motores elétricos. Todos os dispositivos de circuitos elétricos, como botões, válvulas e solenoides podem ser representados em símbolos nos Diagramas Ladder, incluindo suas conexões. Na atualidade, os quadros de relés foram substituídos por Controladores Programáveis (CLP).

Parte de um Diagrama Ladder

A linguagem Ladder, diagrama Ladder ou diagrama de Escada é um auxílio gráfico para programação de Controladores Lógicos Programáveis (CLPs), no qual as funções lógicas são representadas através de contatos e bobinas, de modo análogo a um esquema elétrico com os contatos dos transdutores e atuadores. A linguagem ladder está entre as cinco linguagens de programação de CLPs definidas pela IEC 61131-3 : FBD (Function Block Diagram, Diagrama de Blocos), LD (Ladder diagram, Diagrama Ladder), ST (Structured text, Texto Estruturado), IL (Instruction list, Lista de Instruções) e SFC (Sequential function chart, Diagrama de Funções Sequenciais) [2] [3].

O nome (ladder, escada em inglês) provém do fato que a disposição dos contatos e bobinas é realizada, de maneira geral, na vertical, que lembra o formato de uma escada. A cada lógica de controle se dá o nome de rung (degrau), composta por linhas e colunas [4].

A verificação do código pode variar entre os fabricantes de CLPs, mas é comum que a atualização seja feita da esquerda para a direita e de cima para baixo.

Visão Geral

editar

A linguagem Ladder é uma linguagem de alto nível utilizada para programar CLPs, capaz de realizar o controle de sistemas industriais complexos, substituindo os antigos circuitos controladores a relés que eram caros e de difícil manutenção, além de menos seguros. A principal vantagem de representar as lógicas de controle por meio de diagramas Ladder é que permite à engenheiros e técnicos de campo desenvolver "códigos" sem conhecimento prévio de outras lógicas de programação como o FORTRAN ou o C, devido à familiaridade com a lógica a relés. Além disso, pode-se facilmente montar um circuito elétrico físico a partir do software, e vice-versa [5]

Um dos principais problemas apresentados pela linguagem é a incompatibilidade entre CLPs, mesmo entre modelos diferentes da mesma família. Embora a IEC 61131-3 tenha diminuído as diferenças mais marcantes entre os diferente CLPs, transferir um código de um controlador para o outro ainda pode ser um trabalho custoso.

Devido ao fato de todos os processos do diagrama serem realizados pelo processador (CPU) do CLP de forma sequencial, é preciso de um uma estrutura de loop que executa um certa quantidade de vezes por segundo, fazendo com que os resultados na saída sejam quase imediatos. Para isso, o CLP utiliza um Ciclo de Varredura que consiste nos seguintes passos:[6]

  • Leitura das entradas e atualização da memória, que podem ser tantos as entradas externas como sensores e chaves, como entradas internas como valores de bobinas e temporizadores.
  • Execução do programa, onde todos os passos da programação são realizados, da esquerda para a direita e de cima para baixo. Nenhum valor obtido nesse processo é utilizado nos cálculos, portanto se alguma bobina obter um novo valor e houver alguma chave associada a ela, esse valor não é alterado até a próxima execução do ciclo de varredura.
  • Escrita da memória e atualização das saídas, onde os novos valores obtidos no passo de Execução do programa são atualizados na memória e as saídas externas são alteradas.

Os componentes da linguagem

editar

Existem 3 tipos de elementos na linguagem Ladder:

  • as entradas (ou contatos), que podem ler o valor de uma variável booleana;
  • as saídas (ou bobinas) que podem escrever o valor de uma variável booleana;
  • os blocos funcionais que permitem realizar funções avançadas.

Os elementos estão associados à variáveis internas que podem tanto ser virtuais como entradas e saídas físicas de um CLP.

As entradas (ou contatos)

editar

Existem dois tipos de contatos:

  • O contato normalmente aberto (NA) (em inglês, NO normally open):
   X
--| |--  a instrução de LÓGICA DIRETA tem na programação o mesmo nível lógico vinculado ao endereçamento.

Tal contato está fechado quando a variável booleana associada (no nosso caso X) é verdadeira, caso contrário, ele está aberto.

  • O contato normalmente fechado (NF) (em inglês, NC normally closed):
   X
--|/|-- a instrução de LÓGICA INVERSA tem na programação o nível lógico inverso vinculado ao endereçamento.

Tal contato está aberto quando a variável booleana associada é verdadeira, caso contrário, ele está fechado.

As saídas (ou bobinas)

editar

As saídas sempre são bobinas, relés contatores ou "de estado sólido" (óptico, PWM, DC, etc...). Tal saída está ativa quando a variável booleana associada é verdadeira, caso contrário, ela está inativa.

Assim como as entradas, há dois tipos de saídas (bobinas) principais:

  • A bobina normalmente aberta, energizada quando a variável booleana associada é verdadeira.
   X
--( )--  a instrução de SAÍDA LÓGICA tem na programação o resultado em nível lógico que à antecede.

Tal contato está fechado quando a variável booleana associada (no nosso caso X) é verdadeira, caso contrário, ele está aberto.

  • A bobina normalmente fechada, energizada quando a variável booleana associada é falsa.
   X
--(/)-- a instrução de SAÍDA LÓGICA INVERTIDA tem na programação o resultado em nível lógico inverso que à antecede.

Alguns tipos de bobinas especiais são chamadas Blocos Funcionais, por possuírem implementações mais complexas, como as bobinas de SET e RESET, que funcionam de forma semelhante a Latches;

Os blocos funcionais

editar

Os blocos funcionais permitem realizar operações mais complexas que a leitura ou escrita de variáveis. São exemplos de blocos funcionais os contadores, temporizadores, bobinas de set ou reset, etc. Utilizando Diagramas de Blocos, pode-se inclusive criar blocos personalizados (funções encapsuladas) definidas pelo usuário para facilitar a organização. Algumas IDEs fornecem outras opções de blocos funcionais como comparadores (maior que, menor que e igual a), operadores matemáticos (adição, subtração, multiplicação e divisão) e portas lógicas. Ainda há a opção de obter bibliotecas com blocos já prontos para uso. [7]

Temporizadores

editar

Temporizadores são dispositivos utilizados para medir o tempo e atuar ao final do ciclo. Comumente os temporizadores são representados por dois símbolos, um indica um retardo na ativação e outro um retardo na desativação.

Na linguagem Ladder os temporizadores levam alguns argumentos para seu funcionamento, são eles:

  • Entrada para ativação;
  • Tempo a ser atingido (delay do sinal).

Para os temporizadores com delay na subida (TON), no momento que houver uma entrada verdadeira, o tempo programado começará a correr. Após o tempo determinado ser atingido, a saída do temporizador será verdadeira e permanecerá nesse estado enquanto a entrada for verdadeira. Quando o valor da entrada for falso o temporizador volta para o estado falso, sendo que caso outra entrada verdadeira seja aplica o processo ocorrerá novamente. Caso o sinal se torne falso antes de o temporizador atingir o valor máximo, sua contagem é resetada e a saída permanece falsa.

Para os temporizadores com delay na descida (TOF), no momento que aplicar-se uma entrada verdadeira, a saída do temporizador também será verdadeira. Quando o valor da entrada for de verdadeiro para falso, o temporizador contará o tempo programado e então sua saída se tornará falso quando o tempo pré-definido for atingido.

Os temporizadores tem uma grande importância na automatização de processos, devido ao fato de dar ao utilizador o controle do tempo de processos. Os temporizadores podem ser tanto digitais, sendo executados pelo processador, ou físicos, possuindo ligação com o CLP.

Contadores

editar

Os contadores são usados para incrementar ou decrementar um valor até alcançar o número pré-determinado de um processo. As mudanças de estado de um sinal externo são acumuladas, não importando o tempo, apenas a transição. São normalmente conectados a sensores digitais e deste modo é possível controlar o número de pulsos no contador, e quando o valor desejado é alcançado a bobina ligada à saída é acionada. Contadores são retentivos e no caso de queda de energia o valor acumulado não será perdido.

Existem três tipos de contadores, os de contagem crescente (CTU), decrescente (CTD) e o crescente e decrescente (CTUD). Para usar um contador inicialmente é necessário definir uma tag do tipo COUNTER.

Os contadores crescentes (CTU, do inglês Count Up ou CTN,C,CTR) são representados pelo seguinte esquemático:

                CTU
            ╭┈┈┈┈┈┈┈┈┈┈┈╮                                                     
           ┈┃CU      Q  ┃┈┈
           ┈┃RESET      ┃
           ┈┃PV       CV┃┈┈ 
            ╰┈┈┈┈┈┈┈┈┈┈┈╯

Para o seu funcionamento, o sinal da entrada (associada com a variável CU, do tipo BOOL) deve variar de 0 a 1 fazendo com que o contador adicione um ao seu acumulador (CV, do tipo INT) até alcançar o seu valor limite (PV, do tipo INT) para tornar o valor da sua saída (Q, do tipo BOOL) verdadeira. Caso ocorrer o acionamento da variável do tipo BOOL- RESET, o valor do CV será resetado.

Exemplo de aplicação: contar o número de cerâmicas produzidas em uma olaria, ao atingir o valor limite a linha de produção é interrompida para a retirada do lote. Após é reiniciada a contagem.

Os contadores decrescentes (CTD, do inglês Count Down) são representados pelo seguinte esquemático:

                CTD
            ╭┈┈┈┈┈┈┈┈┈┈┈╮                                                     
           ┈┃CD      Q  ┃┈┈
           ┈┃LOAD       ┃
           ┈┃PV       CV┃┈┈ 
            ╰┈┈┈┈┈┈┈┈┈┈┈╯

O funcionamento do CTD é o contrário do CTU, o sinal da entrada (associada com a variável CD, do tipo BOOL) deve variar de 1 a 0 fazendo com que o contador decremente um ao seu acumulador (CV, do tipo INT) até alcançar o seu valor mínimo (PV, do tipo INT) para tornar o valor da sua saída (Q) verdadeira. Caso ocorrer o acionamento da variável –do tipo BOOL- LOAD, o valor do CV será resetado.

Exemplo de aplicação: um dispositivo de uma fábrica de doces capaz de trocar as embalagens de pacotes de balas é acionado quando o pacote que está sendo enchido, o qual comporta trinta unidades, estiver cheio.

Os contadores crescentes e decrescentes (CTUD, do inglês Count Up Down) são representados pelo esquemático:

                CTUD
            ╭┈┈┈┈┈┈┈┈┈┈┈╮                                                     
           ┈┃CU      QU ┃┈┈
           ┈┃CD      QD ┃┈┈    
           ┈┃RESET      ┃
           ┈┃LOAD       ┃
           ┈┃PV       CV┃┈┈ 
            ╰┈┈┈┈┈┈┈┈┈┈┈╯

O funcionamento do CTUD é a junção de ambos os contadores (CTU E CTD), no qual as variáveis do tipo BOOL QU e QD representam as saídas do contador crescente e do decrescente.

Exemplo de aplicação: cortar pedaços de madeira com determinados comprimentos.

Contadores em cascata: dependendo a aplicação se faz necessário contar eventos que excedem o máximo permitido pelo contador, sendo assim, é possível interconectar dois ou mais contadores usando em forma de cascata. A técnica consiste em acionar uma instrução de um contador a partir da saída de outro com instrução semelhante.

Exemplo de aplicação: monitoramento de hora usando três contadores, para representar horas, minutos e segundos. [8]

Bobinas SET/RESET

editar

Representadas pela bobina padrão com uma letra S (Set) ou R (Reset), esse tipo de bobina armazena um estado (verdadeiro, se a bobina for SET e falso se a bobina for RESET) em uma variável booleana toda vez que uma borda de subida é identificada. O estado então será mantido mesmo com a desenergização da bobina, até que uma outra chamada futura altere seu valor. Esse tipo de bobina facilita a implementação de sistemas com memória.

Exemplos de Programação Ladder

editar

A linguagem Ladder pode ser entendida como uma série de conexões de contatos e bobinas. O lado esquerdo do diagrama é energizado. Se um caminho puder ser traçado da esquerda para a direita e que conecte alguma bobina, então o valor dessa bobina será verdadeiro. Os contatos representam algum valor de entrada, enquanto o valor da "bobina" poderá ser revertido em uma saída física no CLP ou um bit que será usado em alguma outra parte do programa, utilizando-se o nome da bobina como contato.

 ------| |--------------------( )
      Chave                  Bobina

No diagrama acima, ao acionar a Chave, uma conexão é estabelecida entre o lado energizado e a Bobina, que portanto apresentará estado lógico verdadeiro. A maioria dos aparelhos apresentam algum tipo de lógica como esse para ligar e desligar. Note que é necessário que o botão/chave se mantenha pressionado para a bobina manter o estado lógico verdadeiro.

Portas Lógicas

editar

Os contatos e relés simples podem ser utilizados para construir portas lógicas, que servem para facilitar a resolução problemas devido ao fato de ser possível o uso de ferramentas para Álgebra Booleana como o Mapa de Karnaugh e Máquinas de Estados.

Porta Lógica AND

editar

A porta lógica AND pode ser representada por dois contatos em série, já que os dois precisam estar ativos para a bobina ser ativada.

 ------| |--------------| |----------------( )
     Chave 1          Chave 2            Bobina

Porta lógica OR

editar

A porta lógica OR pode ser representada por dois contatos em paralelo, já que, apenas um estando ativo permite a energização de toda a linha.

 --+-------| |-------+--------------------( )
   |     Chave 1     |                   Bobina
   |                 |
   +-------| |-------+
         Chave 2

Porta Inversora NOT

editar

A porta inversora NOT pode ser representada por um contato ou uma bobina invertida (não ambos).

 ------|/|--------------------( )
      Chave                  Bobina

Porta XOR

editar

Com o auxílio de outras portas lógicas, pode-se criar modelos mais complexos, como a porta XOR (OU exclusivo).

 ------|/|--------------| |--------+-------( )
     Chave 1          Chave 2      |     Bobina
                                   |
                                   |
 ------| |--------------|/|--------+
     Chave 1          Chave 2      

Contato de Selo (Trinco)

editar

O contato de selo (ou trinco), também conhecido como Latch, está geralmente associado à botões de INICIAR e PARAR e possui a característica de se manter ativo mesmo quando a chave de início não está mais pressionada, sendo parado somente quando o botão PARAR (ou alguma outra interrupção) for pressionado.

Ao ativar a chave INICIAR, a Bobina é energizada, que por sua vez fecha a chave Bobina, que representa o estado da Bobina. Desse ponto em diante, o circuito só pode ser parado fechando a chave PARAR, que abre o circuito desenergizando a Bobina e voltando o estado lógico da chave Bobina para falso.

 ------| |---------+----|/|-------------( )
     INICIAR       |   PARAR          Bobina
                   |              
                   |              
 ------| |---------+
      Bobina              

Por medidas de segurança, é comum adicionar um contato de Parada de Emergência (P/E) que poderá ser ativada em alguma outra parte do programa.

 ------| |---------+----|/|------|/|-----( )
     INICIAR       |   PARAR     P/E    Bobina
                   |              
                   |              
 ------| |---------+
      Bobina              


Referências

  1. All About Circuits. «"Ladder" Diagrams». Consultado em 17 de nov. de 2015 
  2. Rockwell Automation. «What is IEC 1131?». Consultado em 17 de nov. de 2015. Arquivado do original em 20 de novembro de 2015 
  3. Frank D. Petruzella (2014). Controladores Lógicos Programáveis. [S.l.]: AMGH. ISBN: 978850552829 
  4. Marcelo Georgini (2007). Descrição e Implementação de Sistemas Sequenciais com CLP. [S.l.]: Érica. ISBN: 9788571947245 
  5. W. Bolton (2006). Programmable Logic Controllers. [S.l.: s.n.] ISBN: 9780750681124 
  6. SILVA, Edilson Alfredo. Introdução às Linguagens de Programação Para CLP. São Paulo: Blucher, 2016.
  7. «Ladder Elements». www.unitronics.com. Consultado em 18 de novembro de 2015. Arquivado do original em 4 de março de 2016 
  8. INDUSTRIAL SYSTEMS. XGK/XGB Instructions and Programming. Disponível em: <http://htmmuh.com/Uploads/Dosyalar/506d4f4d-e026-4eba-aec6-b034d9280125.pdf#page=74>. Acesso em: 19 nov. 2016. PAREDE, Ismael Moura; GOMES, Luiz Eduardo Lemes. Contadores. Eletrônica: automação industrial. São Paulo: Fundação Padre Anchieta: 2011, p. 94-100. PETRUZELLA, Frank D. Programação de contadores. Controladores lógicos programáveis. 4. ed. Porto Alegre: AMGH: 2014, p. 347-351. SILVEIRA, Cristiano Bertulucci. A Função dos Contadores na Lógica LADDER. Disponível em: <https://www.citisystems.com.br/contadores-logica-ladder-clp/>. Acesso em: 19 nov. 2016.

Ligações externas

editar
  Este artigo é um esboço. Você pode ajudar a Wikipédia expandindo-o. Editor: considere marcar com um esboço mais específico.