thumb|right|250px| Parte de um Diagrama Ladder

A linguagem Ladder foi originalmente desenvolvida para construir circuitos de relés, utilizados em processos industriais . 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).

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

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 .

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

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

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:SILVA, Edilson Alfredo. Introdução às Linguagens de Programação Para CLP. São Paulo: Blucher, 2016.

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

Temporizadores

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

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

Bobinas SET/RESET