Linguagens de Programação da IEC 61131-3
- Paulo Ricardo Siqueira Soares
- Sep 14, 2023
- 6 min read
Updated: May 10
Vamos falar um pouco das linguagens de programação utilizadas nos CLP's, essas são padronizadas conforme uma norma específica a nossa famosa IEC 61131-3, que foi divulgada em sua primeira versão ainda em 1993, sua segunda versão liberada em 2003 e em 2013 ocorreu a sua última atualização (conforme você pode conferir aqui: https://webstore.iec.ch/publication/4552)
Desde a sua criação a utilização dos CLPs pela indústria tem ganhado cada dia mais destaque, muito pela sua flexibilidade para atender diversas aplicações como a facilidade de programação e robustez, mas essas facilidades tiveram muito haver com a adoção de uma série de normas da IEC (International Electrotechnical Commission), que compactou dentro desse pacote de normas, regras para padronizar o hardware e o software a nossa IEC61131, que está dividida nos seguintes capítulos:
Parte 1 - General information (informações Gerais)
Parte 2 - Equipment and testing requirements (Equipamentos e requisitos de teste)
Parte 3 - Programming Languages (Linguagens de Programação)
Parte 4 - User Guidelines - (Guia de Usuário)
Parte 5 - Comunicação
Aqui eu vou falar apenas da parte 3 - Linguagens de programação, a grande motivação da criação dessa norma foi a necessidade de linguagens padronizada entre fabricantes, facilitando para os engenheiros e técnicos programarem e darem suporte a diferentes fabricantes, uma vez que até antes da norma cada fabricante teria não só a sua plataforma mas também a sua própria linguagem gráfica ou não, com simbologia, funções, etc, o que criava enormes dificuldades para todos os envolvidos na utilização de CLPs.
Vale lembrar que cada fabricante adotou a norma na sua velocidade, por exemplo a Siemens adotou a norma na plataforma Step5, mesmo a plataforma S5 sendo originária da década de 80 (Siemens - Simatic History and Siemens S5 Manual), porém a Omron só adotou em 2007 (Mário Souza).
As Linguagens dentro da norma:
Ladder(LD):
Como todos sabem, originária da lógica de relés, dos comandos elétricos, traz um conceito mais familiar para aqueles que vem da elétrica.
Apesar de sua simplicidade com ajuda de blocos específicos é possível elaborar lógicas complexas, sua grande vantagem é quando programamos interlocks para sequencias lógicas ou segurança, uma vez que sua forma gráfica torna muito intuitiva o monitoramento de sinais, porém lógicas que demandam laços de repetição, por exemplo não são recomendáveis, uma vez que seu monitoramento e organização dentro dessa linguagem gráfica, se tornam extremamente confusos, então pense nisso quando decidir utilizar a linguagem.
Usando o conceito de energizado e não energizado, é fácil aplicar lógicas booleanas como "E"(AND), "OU"(OR), "NEGADO"(NOT), etc, sua simbologia também foi padronizada, abaixo alguns exemplos de simbologia e lógicas simples.

Uma pequena lógica ladder, utilizando Siemens TIA Portal.

Uma pequena lógica ladder, utilizando AB-Rockwell Studio Logix 5000.
Alguns símbolos básicos:
--| |-- **** Contato Aberto ou Verifica 1, torna-se verdadeiro quando a variável analisada no contato está em nível alto (1 em binário), exemplo um sensor normal aberto acionado torna esse contato verdadeiro;
--| / |-- **** Contato Fechado ou Verifica 0, torna-se verdadeiro quando a variável analisada no contato está em nível baixo (0 em binário), exemplo um sensor normal fechado quando acionado torna esse contato verdadeiro;
--( ) *** Coil / Inactive Coil ou energiza saída - utilizado para mudar o estado lógico de uma saída física, ou memória de 0 para 1, seu estado normal é 0 sendo que a saída ou memória só ira ser energizado caso a lógica da linha de programação onde está inserida seja verdadeira;
--( / ) *** Negate Coil/ active Coil ou desenergiza saída, utilizado para alternar o estado lógico da saída ou memória de 1 para zero, seu estado lógico normal é energizado e a saída/memória só será desenergizada caso a linha de programação onde está inserido seja verdadeira;
Temos também funções de set/reset, contadores, temporizadores, de operações lógicas e matemáticas, etc, aqui neste artigo, o intuito é explicar o que é a linguagem e não ensinar como programar, por isso não entrarei em detalhes.
Function Block Diagram (FBD):
Mais uma linguagem gráfica, baseada em blocos de função, os quais você estimula as suas entradas com sinais, e obtém os resultados da função em suas saídas. É uma linguagem muito utilizada em CLP's de segurança e para controle de processos contínuos. Conectando blocos de funções, sejam eles padronizados pela norma ou criados pelo o programador, FBD torna-se uma linguagem muito interessante para trabalhar no dia a dia.
Então na prática a sua grande vantagem é ser modular e facilmente reusável, tem como desvantagem dificuldade para controle de fluxo do programa, menos intuitiva para a conversão de algoritmos em software utilizável,

Uma pequena lógica FBD, utilizando Siemens TIA Portal.

Uma pequena lógica FBD, utilizando AB-Rockwell Studio Logix 5000.
Funções comuns:
| & | - and - "E "- Função lógica booleana, a saída é verdadeira se todas as entradas são verdadeiras;
| >=1| - OR -"OU" - Função lógica booleana, a saída é verdadeira se uma das entradas for verdadeira;
Instruction List (IL):
Uma linguagem de baixo nível que lembra muito a linguagem assembly, já considera obsoleta e que caiu em desuso, vai se deparar provavelmente com alguma máquina antiga que possa utilizar a linguagem, basicamente é uma listagem de funções, booleanas ou não que estão codificadas, muitas vezes um pouco difícil de ler, no caso da Siemens em especial, você ainda pode optar por mnemônicos em alemão na sua linguagem de lista de instrução chamada STL.

Uma pequena lógica IL (STL), utilizando Siemens TIA Portal.
Funções comuns:
A - And - "E" - Função booleana E;
O - OR - "OU - Função booleana OU;
= - Assignment - " Atribuição" - atribui o resultado da expressão lógica para a variável.
Inclusive os fabricantes não recomendam o uso da IL, ou já não deixam disponível, como no AB-Rockwell Studio Logix 5000.
Sequential Chart (SFC):
Mais uma linguagem gráfica, baseada na linguagem Grafcet de 1975, que foi formalizada através da norma IEC 60848 em sua primeira edição de 1988.
SFC, como o nome diz, é uma linguagem baseada em gráficos sequenciais que seguem steps (passos), e seu fluxo podem ser dividido e até mesmo processados paralelamente, a mudança entre passos é conhecida como transição. Passos estão associados a ações, como por exemplo acionar uma bomba, e as transições estão associadas a condições lógicas.
Passos podem estar ativados e desativados e somente passos ativos executam ações, o passo pode ser ativado como um passo inicial ou conforme a sequencia lógica durante o scan do CLP, uma vez que o corre a transição o passo que estava ativo, é desativado e o próximo passo é ativado, os passos anteriores sempre estarão desativados e os passos a frente só serão ativados após a transição obedecendo a ordem da sequência.
Ações dentro dos passos:
(S) - Set - Altera o valor da variável ao nível lógico 1 até que a variável receba outra alteração de nível lógico;
(R) - Reset - Altera o valor da variável ao nível lógico 0 até que a variável receba outra alteração de nível lógico;
(N) - Reset - Mantém o valor da variável ao nível lógico 1 enquanto o passo estiver ativo.
É possível também inserir ações em ladder ou em texto estruturado (dependendo do fabricante), criando uma maior flexibilidade nas ações dentro dos passos da SFC.
Esse texto apenas explica de forma básica o funcionamento da linguagem não tem o intuito de apresentar a linguagem em seus mínimos detalhes.

Uma pequena lógica SFC, utilizando Siemens TIA Portal - (A Siemens chama de Graph).

Uma pequena lógica SFC, utilizando AB-Rockwell Studio Logix 5000.
O SFC tem como grande vantagem o controle de fluxo claro do processo, facilidade de monitoramento da sequência, principalmente para processamento de fluxos em paralelo, sua desvantagem é a maior utilização de memória em virtude das variáveis extras criadas.
Structured Text (ST):
Chegamos no nosso famoso texto estruturado, uma linguagem de alto nível, que lembra um pouco Pascal e Basic, tem a sua grande vantagem a capacidade de executar lógicas mais complexas, além de maior controle e facilidade para estruturas mais completas principalmente utilizando laços de repetições e casos, a sua grande desvantagem é em relação ao monitoramento das variáveis, que é menos intuitivo do que nas linguagens gráficas, outra coisa importante é que o texto estruturado torna muito fácil a conversão de algoritmos e os cálculos matemáticos.
Mas por favor não se deixem enganar, texto estruturado não quer dizer programação avançada! ST é apenas mais uma linguagem que possuí vantagens e desvantagens, o importante em programação é lógica e sua capacidade de desenvolver a lógica e saber usar as ferramentas da linguagem, podemos ter lógicas complexas em todas elas, apenas depende do quanto você tem conhecimento, ou seja, programação no que muito você vê em propaganda de curso, não pode ser definida pela linguagem e sim pelo grau de complexidade e ferramentas (funções pré-existentes) são utilizados.

Uma pequena lógica ST, utilizando AB-Rockwell Studio Logix 5000.

Uma pequena lógica ST, utilizando Siemens TIA Portal - (A Siemens chama de SCL).
Observações:
Como podem ver, as linguagens tem vantagens e desvantagens e deve-se atentar a isso no momento de escolha de qual linguagem usar, outros fatores a levarem em consideração é qual a linguagem a CPU interpreta com maior performance, quais os recursos que a IDE de programação do fabricante possui para a linguagem, tanto para programar como para monitorar, e o grau de conhecimento da linguagem pelo time que irá manter esse software depois da entrega.
Espero que tenham gostado!
Até o próximo artigo!
Bibliografia:
IEC61131-3 - https://webstore.iec.ch/publication/4552
Proposed corrections to the IEC 61131-3 standard, Mário de Sousa, October 2010, - https://www.sciencedirect.com/science/article/abs/pii/S0920548910000346
IEC 60848
A formal semantics for Grafcet specifications - Julien Provost (1) , Jean-Marc Roussel (1) , Jean-Marc Faure (1), 2011, https://hal.science/hal-00603189



Comments