Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

CONTROLADORES LÓGICOS 
PROGRAMÁVEIS 
AULA 3 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof.ª Carla Eduarda Orlando de Moraes de Lara 
 
 
CONVERSA INICIAL 
Nesta etapa, vamos discutir um assunto extremamente importante 
quando nos referimos aos controladores lógicos programáveis, a sua 
programação. Portanto, durante nossos estudos vamos conhecer e analisar as 
cinco linguagens de programação de CLP padronizadas. 
Antes de começarmos, precisamos entender como e por que ocorreu essa 
padronização. Após a criação do CLP, ocorreu uma vasta aplicação desse 
dispositivo na automação industrial, sendo assim, seu mercado de 
desenvolvimento e fabricação estava muito aquecido. Várias empresas 
começaram a fabricar modelos de CLP, porém, cada uma desenvolvia o 
dispositivo e não existia uma padronização, o que gerava diversos modelos com 
diferentes formas de programá-los e incompatibilidade entre os sistemas. Além 
disso, exigia que os usuários tivessem conhecimento de diferentes linguagens e 
informações sobre cada modelo. Isso gerava diversos problemas, como 
desperdício de recursos humanos em diferentes treinamentos para entender 
como utilizar e programar os modelos de CLP, além de, como já mencionado, a 
existência de incompatibilidade entre os sistemas. 
Nesse cenário, foi percebida a necessidade de uma padronização desses 
dispositivos, então, a Comissão Eletromecânica Internacional (do inglês 
International Electrotechnical Commission – IEC) reuniu uma força-tarefa para 
criar uma norma que padronizasse o CLP, que é chamada de IEC 61131, e é 
destinada ao projeto completo do CLP, definindo desde seu hardware até suas 
especificações e testes, conforme pode ser visto no Quadro 1 a seguir. Nesta 
etapa, vamos discutir a respeito da terceira parte dessa norma, que é dedicada 
à padronização das linguagens de programação. 
Quadro 1 – Norma IEC 61131 
Parte Título 
Parte 1 Informações gerais 
Parte 2 Requisitos de equipamentos e testes 
Parte 3 Linguagens de programação 
Parte 4 Orientações ao usuário 
Parte 5 Comunicações 
Parte 6 Comunicação via fieldbus 
Parte 7 Programação de controle FUZZY 
Parte 8 Orientações para implementação das 
linguagens de programação 
 
 
3 
Fonte: Elaborado por Lara, 2022 com base em Silva, 2016. 
Conforme apresentado e discutindo por Silva (2016), a parte 3 da norma 
IEC 61131 apresenta e define cinco linguagens de programação que visam cobrir 
uma variedade de aplicações, sendo essas linguagens divididas entre gráficas e 
textuais. Ainda, segundo esse mesmo autor, essa padronização culminou em 
vantagens como: 
• possibilidade de programação empregando a melhor linguagem para cada 
parte da planta, conforme suas necessidades; 
• economia no tempo de processamento; 
• qualidade na programação, sendo possível empregar todas as linguagens 
em uma mesma planta. 
Entre as linguagens gráficas estão o diagrama de blocos funcionais, o 
sequenciamento gráfico de funções e o diagrama ladder; já entre as textuais se 
encontram o texto estruturado e a lista de instruções. Cada linguagem tem 
características próprias e são indicadas para diferentes processos, sendo assim, 
em cada tópico desta etapa abordaremos uma dessas linguagens. 
TEMA 1 – TEXTO ESTRUTURADO 
A linguagem texto estruturado, do inglês structured text (ST), é uma das 
duas linguagens textuais definidas pela norma IEC 61131-3, conforme já 
discutimos. Podemos considerar que as instruções sobre o processo serão 
inseridas no programa de instruções por meio de statements, que são palavras 
que apresentam significados de funções e sub-rotinas que alterarão variáveis do 
programa. Outra característica dessa linguagem é que ela é lida de maneira 
simplificada, com estruturas de laços de repetição, contadores e lógicas 
condicionais, como if, then e for. 
A linguagem ST teve origem nas linguagens de programação Pascal e C, 
e como já mencionado, ela possibilita a utilização de laços condicionais e de 
iterações, transformando-a em uma boa opção quando se deseja implementar 
lógicas rápidas e personalizadas dentro de determinada aplicação. Ainda, essa 
linguagem é considerada a mais robusta entre as cinco padronizadas, isso 
porque todo programa desenvolvido nas demais linguagens é convertido para 
ST por meio da compilação. Isso ocorre porque a linguagem ST é muito próxima 
 
 
4 
a da linguagem de máquina, portanto, ela é facilmente compreendida pela 
unidade central de processamento do CLP. 
Para compreendermos com mais detalhes essa linguagem, nas próximas 
subseções vamos discutir seus elementos, suas instruções, além dos seus 
comandos. 
1.1 Elementos característicos do texto estruturado 
Cada linha do programa de instruções desenvolvido em ST trabalha com 
expressões formadas por operadores e operandos responsáveis por retornar 
valores quando executados (Silva, 2016). Quando falamos em elementos, 
precisamos discutir a respeito de alguns itens como atribuição, expressões, 
operandos e operadores. 
Quando desejarmos atribuir valores a uma variável, empregamos o 
operador “:=”, que pode ser usado tanto para atribuir um valor de uma variável a 
outra como o retorno de uma função. Na Quadro 2 a seguir, temos alguns 
exemplos de atribuições. 
Quadro 2 – Exemplos de atribuições em ST 
Atribuição Exemplo 
Atribuindo valor literal a uma variável X:= 25 
Atribuindo valor de uma variável a outra variável X:=Y 
Atribuindo valor de uma operação para uma variável Y:=(X-K*V)/Z 
Atribuindo valor de uma função para uma variável Z:=MOD(X,Y) 
Fonte: Lara, 2022. 
Além da atribuição, a linguagem ST trabalha com expressões, as quais 
são formadas por operadores e operandos que retornam um valor ao serem 
executados. Após a execução de uma expressão, o valor atual de uma variável 
é substituído pelo resultado da avaliação da expressão. Podemos definir uma 
expressão como uma especificação da variável do lado esquerdo seguida pelo 
operador de atribuição e pela expressão a ser validada (Silva, 2016). Outra 
observação importante é que as expressões devem trabalhar com variáveis do 
mesmo tipo em ambos os lados. 
Um operando pode ser um endereço, um valor literal, uma variável, ou 
ainda, uma chamada de função ou bloco funcional (Silva, 2016). Seguindo a 
mesma regra que mencionamos anteriormente, os tipos de dados dos operandos 
envolvidos em uma instrução devem ser sempre iguais. 
 
 
5 
Já os operadores pedem um símbolo de operação aritmética, uma 
operação lógica, ou ainda, uma função a ser executada. Além disso, os 
operadores são adaptáveis aos tipos de dados dos operandos, bem como são 
executados seguindo a sequência de prioridade de execução. 
1.2 Instruções 
As instruções podem ser aplicadas em diferentes situações. Nesta seção, 
vamos discutir duas instruções, sendo elas: 
• IF...THEN...END_IF; 
• IF...THEN...ELSE...END_IF. 
A instrução IF...THEN...END_IF pode ser definida como a determinação 
para que uma instrução ou um grupo de instruções seja executado caso a 
expressão booleana que rege a condição estiver em nível lógico alto 
(verdadeiro). Caso a condição esteja em nível lógico baixo (falso), a instrução ou 
o grupo não será executado. Nessa situação, a instrução identifica o fim da 
condição, sendo que a instrução END_IF finaliza a instrução como um todo. 
Outra possibilidade é a instrução IF...THEN...ELSE...END_IF, na qual 
existe a instrução ELSE após a instrução. Nesse caso, a instrução IF é 
executada caso as expressões associadas às instruções anteriores forem 
verdadeiras, ou, caso sejam falsas, a instrução não será executada. Um exemplo 
de uso dessa instrução é dado na Figura 1 a seguir, que consiste na 
implementação de uma partida direta por meio de um CLP. 
Figura 1 – Chave de partida direta com instrução ELSE 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
 
 
6 
1.3 Comando condicional CASE 
Outra possibilidade de instrução é o comando condicional CASE,que é 
destinado a expressões que envolvam dados do tipo INT, além de lista de grupo 
de instruções. Basicamente, podemos descrever o seu funcionamento com a 
função CASE contendo ações a serem realizadas caso a condição seja atingida, 
e em alguns casos sendo implementado uma função ELSE dentro dessa 
instrução para executar ações caso a expressão do CASE não seja atendida. Na 
Figura 2 a seguir, ilustramos a estrutura do comando condicional CASE. 
Figura 2 – Comando condicional CASE 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
1.4 Comando de repetição 
Quando falamos em comandos de repetição, estamos nos referindo a 
instruções que possibilitam implementar ações que serão executadas por uma 
determinada quantidade de vezes, ou então, enquanto alguma condição for 
atendida. Seguindo esse conceito, vamos discutir a respeito de dois comandos 
de repetição, sendo eles, FOR...DO e WHILE...DO...END_WHILE. 
Quanto ao emprego do comando FOR...DO, ele pode ser utilizado sempre 
que o número de ocorrência pode ser determinado. Nesse caso, uma sequência 
de instruções é executada até que o comando do valor final END_FOR seja 
acionado. O número de ocorrência depende do valor inicial, valor final e da 
variável de controle, sendo que todos devem ser do mesmo tipo. A variável de 
controle sobre incrementos é de um valor inicial até o final, sendo o padrão o 
incremento unitário, porém, é possível definir valores de incremento diferentes 
de 1. O laço é repetido até que a variável de controle assuma o valor final, sendo 
um exemplo de uso desse comando dado na Figura 3 a seguir. 
 
 
7 
Figura 3 – Comando de repetição FOR...DO 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
Quando a sequência de instruções precisa ser executada repetidamente 
até que a sua expressão não seja mais verdadeira, é preciso empregar o 
comando de repetição WHILE...DO...END_WHILE. Portanto, podemos definir o 
funcionamento desse comando como executar uma sequência de instruções 
enquanto for atendida determinada condição; a partir do momento que não for 
mais atendida, ocorre a instrução END_WHILE, que finaliza o laço de repetição. 
Na Figura 4 a seguir, apresentamos um exemplo de uso do comando 
WHILE...DO...END_WHILE. 
Figura 4 – Comando de repetição WHILE...DO...END_WHILE 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
TEMA 2 – DIAGRAMA DE BLOCOS FUNCIONAIS 
A primeira linguagem de programação de CLP gráfica que estudaremos é 
o diagrama de blocos funcionais, do inglês functional block diagram (FBD). Essa 
linguagem é semelhante à eletrônica digital, por isso, acaba sendo a preferida 
dos profissionais com experiência em eletrônica. Outro fato interessante é que 
os blocos funcionais também existem e são utilizados dentro das demais 
linguagens de programação de CLP, como a linguagem ladder. 
Essa linguagem faz uso de diagramas de circuitos que representam 
blocos e são interconectados por linhas de fluxo de sinal, formando assim o 
programa de instruções. Ainda, podemos definir um bloco como um elemento 
que apresenta entradas, realiza um processamento específico, e então realiza a 
alteração das saídas com o resultado obtido (Silva, 2016). Basicamente, 
 
 
8 
podemos dividir os blocos em dois tipos, sendo estes funções e blocos 
funcionais. 
As funções executam suas ações e encerram a execução, não sendo 
mantida nenhuma informação além do resultado da saída. Além disso, as 
funções podem ser provenientes do sistema, como os temporizadores e 
contados, ou então implementadas pelo usuário. Já os blocos funcionais têm 
como característica permanência de dados, sendo necessário especificá-los, e 
ainda, podem conter diferentes ciclos de execução. 
Conforme discutido por Silva (2016), o uso da linguagem FBD agrega 
diversos benefícios como simplificação da representação do programa, 
facilidade na depuração do aplicativo e redução no número de códigos gerados. 
Ademais, as saídas de um bloco funcional podem ser conectadas às entradas 
de outros blocos funcionais, sendo cada ligação responsável por indicar que 
determinado parâmetro de entrada de um bloco obtém o valor de um parâmetro 
específico da saída do bloco anterior. 
Para desenvolver programas na linguagem FBD, é necessário seguir 
algumas regras, que são: 
• acesso externo apenas aos parâmetros de entrada e de saída do bloco; 
• execução do bloco, em caso de este fazer parte de uma rede de blocos; 
• as instâncias de um bloco funcional podem ser empregadas na definição 
de outros blocos e programas; 
• as instâncias de um bloco funcional declarado como global são acessíveis 
em qualquer parte do recurso ou configuração (Silva, 2016). 
Nas seções a seguir, vamos discutir os blocos funcionais padrões que 
existem nos CLPs e as funções elementares. Além disso, finalizaremos nosso 
tópico analisando um exemplo de programa de instruções desenvolvido na 
linguagem FBD. 
2.1 Bloco funcional padrão 
Quando falamos em bloco funcional padrão, estamos nos referindo a 
elementos que os fabricantes de CLPs criam agrupando em bibliotecas que 
acompanham os softwares. Esses blocos são básicos e destinados a 
programação de lógicas e algoritmos mais complexos. Além desses blocos 
considerados padrões, o usuário também poderá criar blocos funcionais, que 
 
 
9 
serão armazenados em uma outra biblioteca. Embora exista a possibilidade de 
criação de blocos, é recomendado que sejam utilizados os blocos padrões da 
norma IEC 61131-3, para ter uma maior facilidade em caso de portabilidade. 
Os primeiros blocos funcionais padronizados que vamos discutir são os 
blocos set e reset, que também são chamados de “blocos biestáveis”, que são 
utilizados como memórias SR e RS, respectivamente. Uma representação para 
o bloco set pode ser verificada na Figura 5 a seguir. Nesse bloco, a função set 
domina, ou seja, se os sinais de set e reset são ambos verdadeiros em suas 
entradas (S1 e R), a saída Q1 será verdadeira. Ainda, na Figura 5, podemos 
observar uma representação do bloco set por meio de blocos lógicos. 
Figura 5 – Representação para o bloco set 
 
Fonte: Elaborada por Lara, 2022 com base em Moraes, 2015. 
Já para o bloco reset, temos uma representação dada na Figura 6 a 
seguir. Nesse bloco, a função que domina é a reset, ou seja, se os sinais de set 
e reset são ambos verdadeiros em suas entradas (S e R1), a saída Q1 será falsa. 
Ainda, na Figura 6, podemos observar uma representação do bloco reset por 
meio de blocos lógicos. 
Figura 6 – Representação para o bloco reset 
 
Fonte: Elaborada por Lara, 2022 com base em Moraes, 2015. 
Ainda, conforme estudamos em momento anterior, existem os blocos de 
contagem e de temporização. Nos blocos de contadores, a saída será do tipo bit 
para contagem, enquanto nos blocos temporizadores a saída será do tipo bit 
para tempo. Como já discutimos anteriormente sobre os tipos de contadores e 
de temporizadores, nesta etapa abordaremos apenas suas representações 
 
 
10 
dentro da linguagem FBD. Sendo assim, na Figura 7 a seguir trazemos as 
representações para os blocos contadores padrões e, na Figura 8, as 
representações para os temporizadores padrões. O bloco contador crescente 
(CTU) é apresentado na Figura 7 (a) e o contador decrescente é apresentado na 
Figura 7 (b). Além disso, o bloco temporizador com atraso na ligação (TON) é 
apresentado na Figura 8 (a) e o bloco temporizador com atraso no desligamento 
(TOF) é apresentado na Figura 8 (b). 
Figura 7 – Representação para os blocos contadores 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
Figura 8 – Representação para os blocos temporizadores 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
2.2 Função elementar 
Conforme já discutimos, as funções elementares não apresentam estados 
internos, sendo assim, os valores de entrada são os mesmos e o valor de saída 
também será o mesmo todavez que a função for executada. Graficamente, uma 
função elementar é representada por um bloco com entradas e saídas, sendo 
que as entradas serão sempre representadas à esquerda, enquanto as saídas 
 
 
11 
sempre ficarão à direita do bloco. Além disso, o nome da função, que também 
indicará seu tipo, é apresentado no centro do bloco. Ainda, o número de 
execução será apresentado à direita do tipo de função. 
As funções elementares mais comuns para os CLPs são as operações 
lógicas, como as lógicas AND, OR, NOT e XOR, que também estudamos em 
momento anterior. As funções lógicas AND e NOR estão representadas a seguir 
na Figura 9 (a) e (b), respectivamente. Já as funções lógicas OR e XOR são 
apresentadas na Figura 10 (a) e (b), respectivamente. 
Figura 9 – Representação para as funções AND e NOT 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
Figura 10 – Representação para as funções OR e XOR 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
2.3 Exemplo de programa empregando FBD 
O exemplo de programa de instruções desenvolvido na linguagem FBD 
que estudaremos se trata da chave de partida direta de um motor elétrico 
empregado no acionamento de uma esteira. O motor é ligado pelo botão B1 e 
desligado pelo botão B0, além de que o sistema conta com proteção térmica do 
relé térmico RT1. O sistema apresenta sinalização para o funcionamento do 
motor; a lâmpada L1 indica que o motor está desligado e a lâmpada L2 indica 
motor ligado. O motor é acionado pelo contator C1. O FBD para a chave de 
 
 
12 
partida direta pode ser observado na Figura 11 a seguir, que ilustra a conexão 
dos blocos de funções para formar a lógica de acionamento. 
Figura 11 – FDB da chave de partida direta 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
TEMA 3 – LISTA DE INSTRUÇÕES 
A outra linguagem textual definida pela norma IEC 61131-3 é a lista de 
instruções, do inglês instruction list (IL). Essa linguagem faz uso de mnemônicas 
para a construção das instruções do programa que comandará os processos no 
CLP. Além disso, é considerada semelhante à linguagem de máquina, portanto, 
é muito eficiente. Outra característica dessa linguagem é que ela é semelhante 
à linguagem Assembly. 
Em razão das características já mencionadas, essa linguagem é preferida 
por profissionais que tenham experiência com linguagens de programação. A 
linguagem IL faz uso de instruções que são inseridas de modo a construir a 
sequência de operações do programa de instruções. Cada instrução começa em 
uma linha do código, e deve conter um operador com modificadores opcionais 
(Silva, 2016). Ainda, é possível inserir um ou mais operando separados por 
vírgulas, os quais serão empregados no uso de funções ou blocos de funções. 
Cada linha deve conter uma estrutura formada por rótulo, operador e modificador 
 
 
13 
operando e comentário, nessa sequência, sendo uma representação dessa 
configuração dada na Figura 12 a seguir. 
Figura 12 – Configuração de uma linha de instrução em IL 
 
Fonte: Lara, 2022. 
Entre as instruções mais comuns, estão a load (LD) e a store (ST), 
responsáveis por carregar um operando para o acumulador e por armazenar o 
conteúdo do acumulador no local especificado pelo operando, respectivamente. 
As funções e os blocos de funções podem ser inseridos no código por 
meio da chamada desses elementos pelo nome, conforme podemos observar no 
exemplo disposto na Figura 13 a seguir, que ilustra um bloco temporizador sendo 
inserido no código. 
Figura 13 – Exemplo de chamada de bloco temporizador em IL 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
Retomando o conceito das mnemônicas utilizadas na linguagem IL, estas 
representam os operadores, que podem ter modificadores, em alguns casos. Os 
modificadores influenciarão na execução dos operadores, por exemplo, é 
possível tornar inverso um operador empregando o modificador N. No Quadro 3 
a seguir, são apresentados os principais operadores, relacionando estes com 
seus modificadores (caso existam) e seu significado. 
 
 
 
14 
Tabela 3 – Exemplos de mnemônicas empregadas na IL 
Operador Modificador Significado 
LD N Carrega operando no acumulador 
ST N Guarda o resultado no operando 
S Seta operando para 1 
R Reseta operando para 0 
AND N, ( Lógica E 
OR N, ( Lógica OU 
XOR N, ( Lógica OU exclusivo 
NOT N, ( Lógica negativa 
ADD ( Adição 
SUB ( Subtração 
MUL ( Multiplicação 
DIV ( Divisão 
MOD ( Módulo da divisão 
GT ( Maior que: > 
GE ( Maior que ou igual: >= 
EQ ( Igual: = 
NE ( Diferente: ≠ 
LE ( Menor que ou igual: <= 
LT ( Menor que: < 
CAL C, N Chamada de bloco funcional 
RET C, N Retorno de função ou floco funcional 
) Executa o último operador adiado 
Fonte: Lara, 2022. 
Ainda falando sobre os modificadores, eles podem ser tipo: N, C e “(“. 
Caso seja N, ele servirá para inverter o valor do operando ou negar um valor, 
pode ser empregado por exemplo juntamente com os operadores AND e OR 
para gerar as funções lógicas NAND e NOR. O modificador C tem como função 
dar uma condição, portanto, sempre que se desejar condicionar algum operador 
é preciso utilizá-lo. Caso sejam combinados os modificadores C e N (CN), a 
instrução será executada somente se o valor do acumulador for um booleano 
falso. Por fim, o parêntese é empregado quando se deseja mover a avaliação do 
operando (Silva, 2016). 
Além de todos os conceitos que abordamos a respeito da linguagem IL, 
temos que discutir a respeito da inserção de comentários no código, que são 
fundamentais para futuras alterações dele, principalmente se estas não forem 
realizadas pelo desenvolvedor inicial do código. Para inserir comentário na 
linguagem IL, é preciso começá-los com a sequência de caracteres “(*” e finalizar 
com a sequência “*)”, por exemplo, (*comentários*). 
 
 
15 
3.1 Exemplo de programa em IL 
A fim de entendermos melhor a implementação de programas de 
instrução na linguagem IL, vamos analisar um exemplo prático. Nosso exemplo 
consiste em uma esteira comandada por um motor elétrico, M1, que é ligado pela 
botoeira B1 e desligado pela botoeira B0. Além disso, os circuitos contam com 
um relé térmico para proteção (RT1) e a sinalização dada pelas lâmpadas L1 
(indicando motor desligado) e L2 (indicando motor ligado). O acionamento de M1 
fará com que a esteira seja movimentada, portanto, foi implementada uma chave 
de partida direta para acionar M1, o que é comum com motores de baixa potência 
(Silva, 2016). Os diagramas de força e de comando são apresentados na Figura 
14 a seguir, que representam as ligações realizadas por meio de comandos 
elétricos implementados com os componentes eletromecânicos. 
Figura 14 – Diagramas de força e comando da chave de partida direta 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
 
 
16 
Caso o acionamento do motor seja implementado por meio de um CLP, 
este poderá ser controlador por meio de um programa de instruções, que é 
apresentado na linguagem IL por meio do código dado na Figura 15 a seguir. 
Figura 15 – Programa de instruções para chave de partida direta em IL 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
Como podemos observar, o programa apresentado na Figura 15 anterior 
é equivalente aos circuitos de força e comando apresentados precedentemente. 
Ainda, como o código é comentado, podemos verificar o que cada instrução 
realiza. 
TEMA 4 – SEQUENCIAMENTO GRÁFICO DE FUNÇÕES 
A segunda linguagem de programação de CLPs gráfica que estudaremos 
nesta etapa é o sequenciamento gráfico de funções, do inglês sequential flow 
chart (SFC), que pode ser definida como um método gráfico estruturado para o 
desenvolvimento de programas de instruções para controle sequencial ou 
dependentes de tempo, empregando uma sequência de etapas e transições 
(Silva, 2016). 
Outra informação importante a respeito da linguagem SFC é que ela teve 
comobase as redes Petri e o Graphe Fountionnel de Command Etape-Transition 
(Grafcet), por isso, também é comumente chamada de Grafcet. Além disso, é 
uma das linguagens de programação aceitas pela maioria dos CLPs. Entre as 
características do SFC, se configuram a facilidade de interpretação, a 
modelagem do sequenciamento e a modelagem de funções (Silva, 2016). 
Conforme abordado por Moraes (2015), a linguagem SFC é formada por 
passos, transições, arcos, ações qualificadas e expressões booleanas, além de 
ser graficamente desenhada na vertical. Cada passo caracteriza um estado 
particular do sistema descrito e é simbolizado por um retângulo. Já a transição é 
 
 
17 
o elemento que existe entre os passos, e está vinculada a uma condição, que 
caso seja satisfeita avança de um passo para o próximo. 
Quando analisamos o comportamento sequencial, este tem como 
objetivos: 
• descrever o comportamento sequencial de um sistema; 
• apresentar linguagem de estruturação de ações de um programa segundo 
um modelo top-down; 
• descrever o comportamento de baixo nível de um processo sequencial; 
• representar um processo de comunicação de dados; 
• ser aplicado na estruturação de programas, não importando a linguagem 
(Silva, 2016). 
Agora que já contextualizamos essa linguagem, vamos abordar nas 
seções a seguir os detalhes dela, como os elementos estruturais e as regras de 
evolução para o SFC, além de um exemplo de programa de instrução 
desenvolvido nessa linguagem, que é responsável pela implementação do 
controle de uma chave de partida direta, ou seja, o mesmo exemplo que estamos 
estudando nas demais linguagens abordadas nesta etapa. 
4.1 Elementos estruturais do SFC 
De acordo com o que já discutimos, o SFC faz uso de elementos para 
criar a programa de controle, sendo assim, esses elementos são chamados de 
“elementos estruturais”. Nesse cenário, passaremos agora a analisar cada um 
deles de forma detalhada, com a intenção de entender como se relacionam e 
formam os programas de controle. No Quadro 4 a seguir, abordamos as 
simbologias adotadas para os elementos estruturais. 
 
 
18 
Tabela 4 – Símbolos gráficos dos elementos do SFC 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
O passo representa um possível estado operacional do sistema, contendo 
um nome e sendo representado por um retângulo. Ainda, quando um passo se 
encontra ativo, ele é assinalado por meio de uma marca, chamada de token. Um 
passo se torna ativo quando a transição do passo anterior é satisfeita, fazendo 
com que o programa avance para o passo atual. Seguindo essa mesma lógica, 
podemos dizer que esse mesmo passo será desativado quando a transição para 
o próximo passo for satisfeita. Além disso, a cada passo podem ser associados 
blocos de ações, ou ainda, nenhuma ação, sendo nesse caso chamado de 
“passo de espera”. Cada passo recebe um único nome e deve aparecer apenas 
uma vez no diagrama do SFC. O passo inicial tem uma simbologia diferente, 
conforme mostrado no Quadro 4 anterior. 
A cada passo são designadas uma ou mais ações, caso não seja um 
passo de passo de espera. Essas ações são listadas em uma etiqueta retangular 
à direta do símbolo do passo, além disso, elas podem ser de diferentes tipos 
padronizados, chamados de “qualificadores de ações”. Os qualificadores de 
ações definidos pela norma IEC 61131-3 são apresentados no Quadro 5 a 
 
 
19 
seguir. Os qualificadores influenciam a ordem em que as diferentes ações 
designadas em um mesmo passo serão executadas. 
Tabela 5 – Qualificadores de ações 
Qualificador Descrição 
N Ação simples 
S/R Ação de set/reset 
L Ação com tempo limitado 
D Ação de entrada retardada 
SD Ação de entrada com retardo prefixado 
P Ação pulsada 
DS Ação retardada e setada 
SL Ação setada com tempo limitado 
Fonte: Lara, 2022. 
A transição é representada graficamente pela barra que corta a ligação 
entre dois passos sucessivos (conforme pode ser observado no Quadro 4 
anterior), simbolizando uma barreira que precisa ser alcançada para que a 
execução do programa avance do passo atual para o próximo. A cada transição, 
podem ser atribuídas uma ou mais condições, e a execução só avança de um 
passo para outro quando são satisfeitas todas as condições associadas àquela 
transição. 
4.2 Regras de evolução do SFC 
Quando falamos em regras de evolução do SFC, estamos nos referindo à 
dinâmica envolvida na execução e no trânsito de informações no diagrama. Em 
outras palavras, estamos nos referindo à forma e às regras que governam a 
localização e o trânsito da execução. A seguir, vamos discutir a respeito dessas 
regras conforme abordado por Moraes (2015). 
• Simultaneidade: é empregada quando vários passos procedem ou 
sucedem uma mesma transição, sendo necessário utilizar duas linhas em 
paralelo para representar na conexão. 
• OU divergente: duas transições são saídas de um mesmo passo, sem 
simultaneidade. 
• OU convergente: duas transições têm passos distintos de entrada e um 
mesmo passo de saída. 
• E divergente: a transição é sucedida por dois ou mais passos e existe um 
traço duplo de simultaneidade. 
 
 
20 
• E convergente: a transição é precedida por dois ou mais passos, sendo 
marcada com um traço duplo de simultaneidade. 
Quando desenvolvemos um diagrama em SFC, precisamos nos atentar a 
essas características, pois, conforme discutimos, elas influenciarão a ordem de 
execução dos passos. 
4.3 Exemplo de programa em SFC 
De acordo com o que já havíamos mencionado, nosso exemplo de 
programa de instrução em SFC consiste na chave de partida direta, sendo que 
o sistema apresenta o mesmo diagrama de força e comando que foi apresentado 
na Figura 14 anterior. Os componentes do sistema são os mesmos dos exemplos 
dos tópicos anteriores, aqui só mudaremos a linguagem empregada no 
programa de instruções. Portanto, na Figura 16 a seguir é apresentado o 
programa em SFC desenvolvido para a chave de partida direta. 
Figura 16 – Diagrama em SFC para a chave de partida direta 
 
Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 
 
 
21 
TEMA 5 – LINGUAGEM LADDER 
Neste tópico, estudaremos a linguagem de programação de CLP mais 
utilizada, considerada pela norma IEC 61131-3 como uma linguagem gráfica 
chamada de “linguagem ladder”, ou ainda, “diagrama ladder”. De acordo com 
Silva (2016), essa linguagem foi a primeira a ser utilizada pelos fabricantes, além 
de ser a mais aceita pelos programadores de CLP ao redor do mundo. Ainda, 
temos que essa linguagem está presente em praticamente todos os CLPs 
disponíveis no mercado de tecnologia para automação industrial. 
 Mas afinal, o que fez dessa linguagem a preferida e mais utilizada na 
programação de CLP? Para responder a essa pergunta, precisamos refletir 
sobre dois aspectos importantes: em primeiro lugar, é o fato dessa linguagem 
ser muito semelhante à lógica de comandos elétricos, por contar com 
praticamente os mesmos elementos, mudando apenas a forma como os 
representamos; o segundo fato é o de que o CLP substituiu os painéis 
eletromecânicos em diversas aplicações, e as lógicas de comandos destes 
empregava comandos elétricos. Portanto, considerando que essa linguagem é 
muito parecida com os diagramas de força e comandos que já eram 
empregados, ela se tornou a preferida dos programadores por ser possível 
aproveitar sua experiência com o desenvolvimento das lógicas de comandos. 
O diagrama desenvolvido em ladder é formado de três componentes 
principais: contatos, bobinas e blocos de funções. Os contatos podem ser de 
dois tipos, o normalmente fechado (NA) e o normalmente aberto (NA), sendo 
estes associados às entradas ou às saídas do CLP conforme a lógica de 
acionamento. Já as bobinas são associadas sempre às saídas do CLP. Os 
blocos de funções apresentam as configurações já estudadas anteriormente, e 
são inseridos para otimizar e tornar as operações mais fáceisdentro da lógica 
desenvolvida em ladder. A simbologia adotada para os elementos do ladder é 
apresentada na Figura 17 a seguir; além disso, nessa mesma figura é feito uma 
analogia entre eles e os elementos empregados em comandos elétricos. 
Como podemos observar na Figura 17 a seguir, os elementos são os 
mesmos, porém, sua simbologia é diferente. Isso se deve também ao fato de os 
diagramas em comandos serem desenvolvidos na vertical e de cima para baixo. 
Já um diagrama em ladder é formado por duas linhas de alimentação verticais 
unidas por linhas de código empregando os elementos da Figura 17 em um 
 
 
22 
arranjo horizontal. Esse formato do diagrama inclusive está relacionado a seu 
nome, pois a palavra ladder é significa “escada” em inglês, por isso, essa 
linguagem recebeu esse nome, pois o diagrama é semelhante a uma escada, 
sendo cada degrau correspondente a uma linha do código. 
Os contatos NA têm seu estado natural normalmente aberto, e quando a 
variável associada a eles é acionada, ou seja, passa a ter nível lógico alto, eles 
são acionados também, mudando seu estado original para normalmente 
fechados. Já um contato NF tem seu estado natural como fechado, e quando o 
elemento associado a ele é energizado, ele se abrirá. As bobinas são sempre o 
último elemento da linha, além disso, são sempre associadas às saídas do CLP, 
portanto, para energizar uma determinada saída é necessário energizar a bobina 
associada a ela. 
Figura 17 – Simbologia dos elementos em ladder e em comandos elétricos 
 
Fonte: Lara, 2022. 
Além da bobina apresentada na Figura 17 anterior, temos outros dois tipos 
de bobinas que podem ser empregadas nos diagramas desenvolvidos em 
ladder, chamadas de bobinas de set e reset. A bobina de set tem como função 
acionar a saída em que ela foi associada; já a bobina de reset tem como função 
desligar a saída a ela associada. Essas bobinas diferentes, chamadas de 
“bobinas biestáveis”, tem a simbologia ilustrada na Figura 18 (a) a seguir. 
 
 
23 
Figura 18 – Simbologia das bobinas de set/reset e exemplo de uso 
 
Fonte: Lara, 2022. 
Ainda analisando a Figura 18 anterior, temos um exemplo de uso das 
bobinas dado na Figura 18 (b), sendo a entrada I.1 responsável por “setar” a 
saída Q.0, enquanto a entrada I.0 é responsável por resetar essa mesma saída. 
Quando empregamos bobinas de set e reset, é sempre importante inserir 
inicialmente no código a bobina de set e, na sequência, a bobina de reset. Além 
disso, cada bobina associada à saída somente pode aparecer uma vez no 
código, e isso também se aplica a bobinas comuns. 
Outro fato a ser considerado no desenvolvimento de diagramas em ladder 
é a associação de contados, pois, por meio dessas associações, podemos 
implementar condições de acionamentos, por exemplo, as operações lógicas 
que já estudamos. As bobinas podem ser acionadas apenas em paralelo, ou 
seja, jamais podemos associar duas bobinas em série, pois cada linha do 
diagrama deve ter apenas uma bobina. 
Além de tudo o que já discutimos a respeito da linguagem ladder, 
precisamos entender como são feitos os endereçamentos e como funcionam os 
blocos funcionais dentro dessa linguagem. Nas seções a seguir, abordaremos 
esses conceitos. 
5.1 Endereçamento 
Cada instrução, seja ela de entrada ou de saída do CLP, precisa estar 
associada a um endereço, que indica sua localização na memória do 
equipamento. Cada símbolo empregado no diagrama (seja contatos NA, NF ou 
bobinas) é associado a um operando, que pode ser identificado por letra, número 
ou nome. A norma IEC 61131 não especifica essa identificação, que muda de 
fabricante para fabricante, portanto, é necessário consultar o manual do CLP a 
 
 
24 
ser utilizado. O que temos definido na norma é que as entradas serão associadas 
à letra I; as saídas, à letra Q, e as memórias, à letra M. Na Figura 19 a seguir, 
apresentamos um exemplo de endereçamento de um CLP. 
Figura 19 – Exemplo de representação de endereços de um CLP 
 
Fonte: Lara, 2022. 
Analisando a Figura 19 anterior, o modelo de CLP representado tem como 
entradas I1, I2, I3 e I4; já para saídas, temos Q0, Q1, Q2 e Q3. A quantidade de 
entradas e saídas depende do tamanho do CLP, conforme estudado em 
momento anterior. Além disso, as memórias são utilizadas apenas no diagrama 
ladder, não sendo representadas no CLP. Para o exemplo apresentado na Figura 
19 anterior, na entrada I1 do CLP foi conectada a botoeira B1, e na entrada I2, a 
botoeira B0. Além disso, na saída Q0 temos a lâmpada L1 conectada. Todas as 
vezes que as botoeiras forem acionadas ocorrerá uma mudança no sinal nas 
entradas I1 e I2, o que mudará a posição dos contados associados a elas. Em 
contrapartida, quando a saída Q0 for acionada, a lâmpada L1 também será, pois 
está conectada a essa saída, e será desligada quando a saída for desativada. É 
importante mencionar que, no ladder, não deve aparecer os nomes de B1, B0 ou 
L1, pois os dispositivos conectados às entradas e saídas não são identificados 
pelo CLP, e sim os sinais que eles oferecem aos módulos de entrada e saída. 
Na Figura 20 a seguir, ilustramos um exemplo de código em ladder para 
acionamento da lâmpada L1 sempre que a botoeira B1 for acionada, além do 
desligamento dessa lâmpada quando a botoeira B0 é acionada. O diagrama 
dado na Figura 20 faz uso do artifício de contato de selo, que consiste em 
associar um contato NA da saída em paralelo com a entrada que é acionada, 
 
 
25 
assim, com apenas um pulso na entrada de acionamento é possível manter a 
saída energizada. 
Figura 20 – Exemplo de diagrama em ladder considerando endereçamento 
 
Fonte: Lara, 2022. 
5.2 Blocos funcionais 
Outros elementos comuns dentro da construção de programas em ladder 
são os blocos funcionais, os quais já estudamos anteriormente. Esses blocos 
podem ser tanto já definidos e de funções básicas, como as operações lógicas, 
os temporizadores e os contadores, quanto blocos com fins específicos 
desenvolvidos pelo usuário e salvos na memória do CLP. 
Os blocos funcionais são inseridos nas linhas do código, sendo apenas 
definidos quais serão seus parâmetros de entrada e quais elementos serão 
acionados por suas saídas. Na Figura 21 a seguir, é apresentado um exemplo 
de uso de blocos funcionais, no caso temporizador e contador, dentro de um 
programa desenvolvido em ladder. Conforme podemos verificar, o 
funcionamento do programa consiste em acionar a saída Q.0 quando a entrada 
I.0 é ativada; além disso, a saída será desligada por duas situações, seja quando 
a entrada I.1 for acionada ou então ao final da contagem pelo bloco CTU. Já na 
segunda linha, a entrada I.2 é responsável por incrementar a contagem a cada 
vez que é acionada. Quando é atingido o valor de 12 pulsos nessa entrada, a 
saída Q do bloco é ativada, desligando Q.0, ligando Q.1 e iniciando o processo 
de contagem de tempo do temporizador. Ao final da contagem de tempo pelo 
bloco TON, a saída Q.1 é desligada, pois existe um contato NF da saída desse 
bloco na linha que acionada essa saída. 
 
 
26 
Figura 21 – Exemplo de uso de blocos funcionais em ladder 
 
Fonte: Lara, 2022. 
FINALIZANDO 
Ao longo desta etapa, estudamos as cinco linguagens definidas pela 
norma IEC 61131-3, bem como verificamos que existem diferentes tipos destas, 
portanto, sempre haverá uma linguagem que o profissional que programará o 
CLP terá uma maior identificação. Ainda, é importante mencionar que um 
programa de instruções para CLP pode empregar mais de uma linguagem no 
seu desenvolvimento, e as linguagens possíveis de serrem utilizadas 
dependerão do modelo de CLP adotado. 
Cada linguagem é indicada para um tipo de processo, sendo assim, 
apresentamos na Tabela 6 a seguir algumas das indicações de emprego de cada 
uma das linguagens (Groover, 2011). 
 
 
 
27 
Tabela 6 – Características das linguagens de CLP padronizadas pela normaIEC 
61131 
Linguagem Aplicações em que melhor se enquadram 
Linguagem ladder Controle discreto 
Diagrama de blocos funcionais Controle contínuo 
Sequenciamento gráfico de funções Sequenciamento 
Lista de instruções Controle discreto 
Texto estruturado Lógica complexa, cálculos etc. 
Fonte: Elaborada por Lara, 2022 com base em Groover, 2011. 
A linguagem mais empregada na programação de CLP é a ladder em 
razão da semelhança com as lógicas desenvolvidas em comandos elétricos, 
porém, cada linguagem apresenta características que as tornam mais indicadas 
para determinadas aplicações. É sempre importante verificar quais as 
linguagens disponíveis no CLP que será utilizado, inclusive, este é um fator a ser 
analisado já na especificação de um modelo para a aplicação, juntamente com 
outros elementos como quantidade de entradas e saídas, estrutura, entre outros. 
Outro aliado na programação de CLP é o manual do modelo que é 
fornecido pelo fabricante, pois é nesse material que encontraremos informações 
essenciais para sua programação, conforme discutimos nesta etapa. Portanto, o 
processo de programação começa com o estudo das informações destinadas a 
esse tema contidas no manual. 
 
 
 
28 
REFERÊNCIAS 
GROOVER, M. Automação industrial e sistemas de manufatura. 3. ed. São 
Paulo: Pearson Prentice Hall, 2011. 
MORAES, C. C. de. Engenharia de automação industrial. 2. ed. Rio de Janeiro: 
LTC, 2015. 
SILVA, E. A. da. Introdução às linguagens de programação para CLP. São 
Paulo: Blucher, 2016.

Mais conteúdos dessa disciplina