+1 500 000 produtos na nossa oferta

7000 encomendas enviadas diariamente

+300 000 clientes de 150 países

QuickBuy Favoritos
Carrinho

Linguagens de programação de controladores lógicos programáveis (PLC)

Data de publicação: 14-03-2025 🕒 6 min de leitura

Controladores PLC são amplamente utilizados na indústria em todos os locais onde é necessário o controle de parâmetros e o gerenciamento de processos. O desenvolvimento da eletrônica embarcada fez com que esses dispositivos tivessem parâmetros rigorosos, fossem resistentes a interferências EMI e condições ambientais, além de serem amigáveis ao usuário. Diferente de antigamente, os ambientes para criação de programas são muito semelhantes entre si e na maioria deles é possível encontrar uma maneira de executar o programa que nos agrade. Então, como se programa um controlador PLC?

As linguagens de programação dos controladores PLC tornaram-se objeto da norma IEC 61131 publicada em 2013. Na parte 3 dessa norma, são apresentadas recomendações sobre as linguagens e métodos de programação de controladores PLC. Além dos tipos de dados, variáveis, configuração e modo de descrição, unidades de organização do programa e princípios de programação orientada a objetos, são listadas 5 linguagens de programação básicas para controladores PLC e definidas as exigências quanto à sua funcionalidade. Devido a essa norma, as linguagens de programação básicas utilizadas por programadores de PLC tornaram-se:

Ladder LD (LAD)

A linguagem ladder LD (ou LAD) é a mais popular e disponível em todos os ambientes para criação de programas para PLC. É uma linguagem gráfica, mas usa símbolos simples, então em soluções mais antigas utilizava-se semigrafia criada com caracteres ASCII padrão. Esses caracteres eram fáceis de apresentar também na tela do PLC, o que permitia a criação de programas mais simples ad hoc, sem o uso de um computador PC. Nesta linguagem, cria-se o esquema do programa usando símbolos semelhantes aos usados em esquemas elétricos – bobinas e contatos. Os contatos podem ser normalmente abertos (NO) ou normalmente fechados (NC), e as bobinas podem ter diferentes funcionalidades, como ajuste, reset ou negação. Também é possível inserir funções e blocos funcionais inteiros, como temporizadores, contadores ou flip-flops. A linguagem ladder é compreensível mesmo para programadores inexperientes.

Figura 1. Fragmento de programa na linguagem ladder LD (LAD)

Diagrama de Blocos Funcionais FBD

Outro método de programação muito intuitivo, especialmente para aqueles familiarizados com a técnica digital, é o diagrama de blocos funcionais FBD. Um exemplo de fragmento de "código" feito com FBD é mostrado na figura 2. As entradas, saídas e operações individuais são representadas por blocos funcionais e portas, que não apenas realizam funções lógicas, mas também são capazes de processar sinais de acordo com o algoritmo especificado. Entre os blocos funcionais estão controladores PID, uma ampla gama de geradores de formas de onda, contadores e outros. Alguns ambientes de programação também permitem a definição de blocos próprios com a funcionalidade necessária. FBD é uma linguagem gráfica. Os blocos individuais são dispostos no esquema e conectados entre si, o que lembra o desenho de circuitos lógicos. Alguns ambientes de programação permitem não apenas a conexão de entradas/saídas, mas também a criação de barramentos e referências que transmitem uma série de parâmetros (na figura 2, os barramentos são representados por linhas em negrito – aqui transmitem constantes e variáveis multibit).

Figura 2. Exemplo de fragmento de programa feito com FBD

Linguagem de Texto Estruturado ST

A linguagem de texto estruturado ST é uma linguagem de alto nível, que lembra a outrora muito popular linguagem Pascal. Permite operações mais complexas, cujo registro não é limitado por uma confusão de linhas na tela e pela capacidade de realizá-las como no caso do FBD, o que muitas vezes requer um monitor grande com boa resolução. Programar em ST é semelhante a criar código em linguagens de programação tradicionais para computadores PC. São suportadas instruções complexas, como loops repeat…until, do…while, instruções condicionais if…then…else, case e funções matemáticas sqrt(), sin(). Importante, independentemente do fabricante do hardware ou do ambiente, as funções da linguagem ST são comuns a eles e foram definidas na norma IEC 61131. Como a norma mencionada permite a combinação das linguagens nela listadas, a linguagem ST também pode ser usada para criar "inserções" ou blocos FBD não padronizados.

Listing 1. Exemplo de função feita na linguagem ST 
//=======================================================================
// Function Block Timed Counter :  Incremental count of the timed interval
//=======================================================================
FUNCTION_BLOCK FB_Timed_Counter
    VAR_INPUT
        //Trigger signal to begin Timed Counting
        Execute     : BOOL := FALSE;
        //Enter Cycle Time (Seconds) between counts 
        Time_Increment  : REAL := 1.25;
        //Number of Desired Count Cycles
        Count_Cycles    : INT  := 20;
    END_VAR

VAR_OUTPUT
        //One Shot Bit indicating Timer Cycle Done
        Timer_Done_Bit  : BOOL := FALSE;
        //Output Bit indicating the Count is complete
        Count_Complete  : BOOL := FALSE;
        //Accumulating Value of Counter
        Current_Count   : INT  := 0;
END_VAR

VAR
        //Timer FB from Command Library
        CycleTimer      : TON;
        //Counter FB from Command Library
        CycleCounter    : CTU;
        //Converted Time_Increment in Seconds to MS
        TimerPreset : TIME;
    END_VAR

    // Start of Function Block programming
    TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000;

    CycleTimer(
        in := Execute AND NOT CycleTimer.Q,
        pt := TimerPreset);

        Timer_Done_Bit := CycleTimer.Q;

        CycleCounter(
        cu := CycleTimer.Q,
        r := NOT Execute,
        pv := Count_Cycles);

        Current_Count := CycleCounter.cv;
        Count_Complete := CycleCounter.q;
END_FUNCTION_BLOCK

Diagrama de Função Sequencial SFC

O diagrama de função sequencial é outra das linguagens de programação gráficas. Seu protótipo foi a linguagem GRAFCET, inspirada nas redes de Petri binárias. Permite descrever a sequência de passos (ações) que devem ser executados em uma ordem estritamente definida. É particularmente útil para criar programas para processos que exigem sincronização ou processos que podem ser divididos em etapas. Os principais componentes do programa em SFC são: passos (etapas) associados a ações, transições associadas a condições lógicas, conexões diretas entre passos e transições.

Frequentemente, a linguagem SFC é combinada com outro método de programação, como a ladder LD. SFC é, por natureza, uma linguagem de programação concorrente, na qual muitas POU (Program Organization Units), ou seja, unidades que controlam o fluxo, podem estar ativas ao mesmo tempo. Alguns ambientes permitem também a criação de macroações, ou seja, ações dentro de POU que afetam o estado de outra POU. Dessa forma, uma POU pode decidir sobre os passos ativos tomados por outra POU.

Figura 3. Exemplo de fragmento de programa na linguagem SFC

Lista de Instruções IL

A lista de instruções já é considerada um método de programação obsoleto. Esta linguagem lembra um pouco o assembly, mas apesar de ser implementada para diferentes controladores PLC equipados com diferentes processadores, a linguagem IL é independente do tipo de processador usado. Assim como o assembly, é composta por instruções muito simples, e operações mais complexas requerem o uso de muitas delas. O controle da execução do programa é realizado por meio de instruções de salto e chamadas de subprogramas.

Muitos fabricantes de controladores, apesar da total conformidade do hardware e software oferecidos com a norma IEC 61131-3, oferecem chamadas/blocos funcionais adicionais, específicos para cada fornecedor e adaptados ao hardware oferecido, como leitura ou gravação em entradas/saídas. Por exemplo, a linguagem IL destinada aos controladores PLC da Siemens foi chamada de "Statement List" ou "STL" em inglês e "Anweisungs-Liste" ou "AWL" em alemão. O nome alemão também foi transferido para as versões nacionais do ambiente de execução em italiano e espanhol. O usuário do pacote Simatic pode escolher entre mnemônicos alemães e internacionais para representar instruções. Por exemplo, "A" significa "AND" ou "U" significa "UND", "I" significa "Entrada" ou "E" significa "Eingang", etc.

Listing 2. Exemplo de fragmento de programa na linguagem IL
        LD      Speed
        GT      2000
        JMPCN       VOLTS_OK
        LD      Volts
VOLTS_OK    LD      1
        ST      %Q75

Qual linguagem é a melhor? Depende…

O objetivo deste texto não é ensinar a programar controladores PLC, mas sinalizar certas possibilidades e opções de escolha. Cada programador de PLC deve escolher o método que seja mais adequado às suas necessidades, ou combiná-los dependendo da aplicação. Por exemplo, o diagrama FBD provavelmente agradará aos usuários que conhecem e entendem circuitos lógicos, enquanto a ladder LD será útil para programar sequências de controle mais simples. Por outro lado, ST e SFC são adequados para programar processos complexos, embora, por exemplo, a linguagem ST tenha sido implementada no microcontrolador PLC Easy da Eaton, que provavelmente será útil para realizar funções de controle e monitoramento mais simples e menos exigentes. Por outro lado, não há recomendações sobre qual linguagem pode ser usada para o quê, qual é adequada para o quê. Com mais ou menos esforço, usando qualquer um dos métodos discutidos, é possível criar o software apropriado. A melhor opção parece ser combinar linguagens conforme necessário para obter a maior clareza possível na aplicação.

A Transfer Multisort Elektronik (TME) é um dos maiores distribuidores globais de componentes eletrônicos, peças eletrotécnicas, equipamentos de oficina e automação industrial. O catálogo inclui mais de 1.500.000 de produtos de 1.300 fabricantes líderes. Os modernos centros logísticos da TME em Łódź e Rzgów (Polónia), com uma área total superior a 40.000 m², enviam quase 6.000 pacotes diariamente para clientes em mais de 150 países.

A TME também investe no desenvolvimento do conhecimento e das competências de jovens engenheiros e entusiastas da eletrónica através do projeto TME Education e apoia a comunidade tecnológica organizando a série de eventos TechMasterEvent, promovendo a inovação e a troca de experiências.

rightColumnPicture rightColumnPicture

CONSULTE TAMBÉM