Você está na página 1de 48

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E

TECNOLOGIA DE GOIÁS (IFG)

CAMPUS JATAÍ

CONTROLADORES LÓGICOS
PROGRAMÁVEIS (CLP´s)
Programando no Software Codesys

Lucas Carvalho Souza


1. INTRODUÇÃO

A automação surgiu como um meio para simplificar a participação do trabalho humano sobre
os processos industriais. Entende-se por automação um conceito e um conjunto de técnicas por
meio das quais se constroem sistemas ativos capazes de atuar com uma eficiência ótima pelo uso de
informações recebidas do meio sobre o qual atuam.
Durante a década de 60, foi desenvolvido a partir de uma demanda existente na indústria
automobilística norte-americana, o Programmable Logic Controller (PLC) ou Controlador Lógico
Programável (CLP). O CLP é a principal ferramenta de um processo industrial automatizado.
Segundo a NEMA (National Electrical Manufacturers Association), o CLP é um aparelho eletrônico
digital que utiliza uma memória programável para armazenar internamente instruções para
implementar funções específicas, tais como lógica, sequenciamento, temporização, contagem e
aritmética, controlando, por meio de módulos de entradas e saídas, vários tipos de máquinas ou
processos.
Os Controladores Programáveis proporcionam para as fábricas modernas uma estrutura de
processo automatizado, que se apoiam em dispositivos de hardware e software, combinados de
forma organizada, que permite um controle total acerca das informações envolvidas. O Controlador
Programável monitora o estado das entradas e saídas de acordo com às instruções programadas na
memória, e energiza ou desenergiza as saídas, conforme o resultado lógico obtido através das
instruções do programa. O programa pode ser entendido como uma sequência de instruções a serem
executadas pelo CLP para realizar um determinado processo.
Existem no mercado de automação, nacional e mundial, vários fabricantes de CLP’s, cada um
com sua arquitetura, rede de comunicação, linguagem e software de programações diferentes. Uma
Linguagem de programação pode ser entendida como um conjunto padronizado de instruções que o
sistema computacional é capaz de reconhecer (FRANCHI e CAMARGO, 2008). O problema dos
CLP’s é que cada fabricante possui software próprio, sem manter um determinado padrão ou
modelo, utilizando-se de linguagens de programação diferentes que impossibilitam a portabilidade
de código, ou seja, atualmente o programa desenvolvido para determinado equipamento não pode
ser utilizado diretamente em outro. Isto pode acarretar perca de tempo e elevação dos custos de
produção.
Para uniformizar as várias metodologias de programação dos CLP’s, a International
Electrotechnical Commission (IEC) publicou a norma IEC 61131-3 (1993), a qual define regras de
semântica e sintaxe para as linguagens de programação mais comuns, que podem ser empregadas
em dispositivos comerciais, facilitando serviços de manutenção e desenvolvimento de projetos para
que os fabricantes possam expandir e adaptar estas regras para suas próprias implementações em
CLP’s. A norma define cinco linguagens de programação, sendo elas: Ladder, Diagrama de Blocos
de Funções, Sequenciamento Gráfico de Funções, Lista de Instruções e Texto Estruturado.
Atualmente o software de programação Codesys, é um dos poucos softwares existentes
padronizados de acordo com a IEC 61131-3, que oferece uma ferramenta de automação avançada,
contendo inúmeras funções pré-definidas e métodos para desenvolvedores de aplicação. Nesse o
intuito, a apostila em questão o trabalho teve como objetivo realizar um estudo do software
Codesys. Para isso, teve-se o propósito de dominar as cinco linguagens de programação
estabelecidas pela IEC 61131-3, simulando uma aplicação de um processo industrial para cada
linguagem de programação. Visando a disseminação do conhecimento na área de automação
industrial para o ensino técnico profissionalizante, alunos de graduação e profissionais de indústria.
2. CONCEITOS DA IEC 61131-3.

A IEC, International Electrotechnical Commission (Comissão Eletrotécnica Internacional) é


uma organização internacional de padronização de tecnologias elétricas, eletrônicas e relacionadas.
Alguns dos seus padrões são desenvolvidos juntamente com a ISO, International Organization for
Standardization. (Organização Internacional para Padronização).
Assim que os primeiros CLP’s começaram a funcionar nas décadas de 60 e 70, buscou-se
uma normalização das linguagens de programação. Foi só na década de 90 que a então IEC1131-3
estabeleceu 5 linguagens de programação principais, a mesma foi renumerada algum tempo
depois e passou a ser conhecida como IEC 61131-3. O que poucas pessoas sabem é que a norma
IEC 61131-3 é na verdade só um capítulo do grupo de normas IEC 61131, que abrange apenas
CLP’s.
Hoje, a IEC 61131-3 é o único padrão mundial para programação de controle industrial que
consiste na definição das linguagens de programação:
• Textuais:
IL - Instruction List ou Lista de Instruções.
ST - Structured text ou Texto Estruturado.
• Gráficas:
LD - Ladder Diagram ou Diagrama Ladder.
FBD - Function Block Diagram ou Diagrama de Blocos de Funções.
SFC – Sequential Function Chart ou Sequenciamento Gráfico de Funções.

2.1. Introdução à declaração de variáveis e tipos de variáveis.


O primeiro requisito da norma é a declaração de todas as variáveis que iremos utilizar no
programa. As variáveis possuem, nome, endereço, tipo, especificação e atributo. Independente se
vamos utilizar uma variável interna, como uma memória, uma entrada digital ou analógica, um
temporizador, etc...
O nome da variável é escolhido única e simplesmente pelo programador. Ao invés de utilizar
um endereço, por exemplo “%mx0.0” o programador pode utilizar nomes maiores e
autoexplicativos, como por exemplo “BombaDeRecalque_Tanque23”, este nome é referenciado a
um endereço físico, e em todo o programa trabalhamos com este nome, que fará muito mais sentido
ao programador que o endereço puro e simplesmente.
Segue abaixo algumas dicas para escolha do nome das variáveis.
• Os nomes podem ter até 30 caracteres.
• Não é permitido o uso de: caracteres com acento, espaço ou hífen.
• Não é permitido começar o nome de uma variável com um número.
• Não é permitido o uso de palavras reservadas como nome de variáveis.(Por ex.: LD,
ST, IF, ELSE, AND , ADD...)
• Não é permitido o uso de caracteres como: ! @ # $ % & * ( ) < > ; :\ / ? [ ] {} no nome
das variáveis.
• Use nomes autoexplicativos para suas variáveis.
• Use sempre letras maiúsculas para iniciar o nome da variável. Ex. Bomba.
• Separe o nome das variáveis com underline (_), se este consiste de mais de uma
palavra. Inicie cada palavra com letra maiúscula. Ex. Bomba_Recalque.
• Ou utilize as palavras com uma letra maiúscula entre elas E.x. BombaRecalque.
Uma vez que escolhemos o nome para nossa variável o próximo passo é endereçá-la caso a
variável seja uma entrada ou saída do CLP. Se as variáveis não forem endereçadas,
automaticamente o CLP compreende que elas devem ser tratadas como memórias internas,
então o próprio software endereça as variáveis automaticamente.

Por exemplo: Nome da variável Endereço da variável


BotaoDePartida AT %IX0.0: BOOL;
MotorDaBombaDagua AT %QX0.0: BOOL;
SensorDeTemperatura AT %IW12: INT;
ValvulaDePressao AT %QW20: INT;
Controle_IHM AT%MX100.7: BOOL;

Finalmente, para trabalharmos com variáveis básicas, cada variável possui seu tipo, as
variáveis podem ser numéricas (usadas para operações aritméticas), Booleanas (operações de
lógica), Texto (Trabalhar com caracteres) e Data/Tempo (operações com data, hora e tempo).
2.1.1. Variáveis booleanas.
As variáveis BOOLEANAS são utilizadas quando se deseja realizar operações lógicas.
Por exemplo uma entrada ou uma saída digital seria do tipo BOOL. Um cartão com 16
entradas ou saídas digitais poderia ser endereçado em sua totalidade como uma WORD.
2.1.2. Declaração de variáveis Locais e Globais
Definimos uma variável como local ou global dependendo da utilização do Tag no programa
2.1.2.1. Variável Local
Quando declaramos uma variável como Local, definimos que a utilização da Tag será
somente na sub-rotina de programação.
OBS.: É possível declarar o mesmo nome de Tag em diferentes sub-rotinas quando a
declaração é local.
2.1.2.2.Variável Global
Quando declaramos uma variável como Global, definimos que a utilização do Tag será para
todo o programa e sub-rotinas, inclusive para comunicações com IHM’s, Supervisórios ou redes de
comunicação tipo OPC.

3. LINGUAGENS DE PROGRAMAÇÃO

3.1. Diagrama Ladder


A linguagem gráfica Ladder é a mais popular, de fácil entendimento e visualização. Baseada
em diagrama de elétrico de contatos e graficamente próxima do entendimento do mantenedor.
Nessa linguagem utiliza-se bobinas e contatos. Os símbolos de contatos programados em uma
linha representam as condições que serão avaliadas de acordo com a lógica. Como resultado
determinam o controle de uma saída, que normalmente é representada pelo símbolo de uma bobina.
O Diagrama Ladder (LD) baseia-se em uma série de redes, uma rede é limitada nos lados direito e
esquerdo por uma linha vertical. No meio está um diagrama de circuito composto de contatos,
bobinas e linhas de conexão. O desenvolvimento do processo utilizando o Diagrama Ladder, pode
ser visto na figura abaixo:
Programação desenvolvida em LD
3.2. Diagrama de Blocos de Funções
É uma linguagem gráfica baseada em diagramas lógicos de circuitos, de fácil entendimento,
desde que o programador esteja familiarizado com representações gráficas das lógicas de Boole.
Um bloco funcional é representado por um retângulo com entradas no seu lado esquerdo e saídas no
direito.
As entradas e saídas são conectadas a esses blocos criando uma malha de interconexões que
possibilita a obtenção dos mesmos resultados de outras lógicas de programação. A linguagem é
próxima a Ladder, com exceção da representação gráfica e algumas funcionalidades especificas de
cada linguagem, o que pode ser observado na Figura abaixo que representa a edição da simulação
feita em Blocos de Funções.

Programação desenvolvida em FBD


Essa linguagem permite um desenvolvimento hierárquico e modular do software, uma vez que
podem ser construídos blocos de funções mais complexos a partir de outros menores e mais
simples.
3.3. Sequenciamento Gráfico de Funções
É uma linguagem gráfica muito poderosa, proporciona uma representação das sequências do
processo controlado na forma de um diagrama. O Sequenciamento Gráfico de Funções (SFC) é
utilizado para dividir um problema de controle, permitindo uma visão geral do processo e
facilitando o diagnóstico.
O SFC é descendente direto do Grafcet, fornece os meios para estruturar uma unidade de
organização de um programa num conjunto de etapas separadas por transição. A cada transição está
associada uma repetitividade que terá de ser satisfeita para que a transposição da transição ocorra,
para que o programa evolua para a etapa seguinte.
De forma prática, podemos analisar o funcionamento de uma edição da simulação produzida
em SFC observando a Figura abaixo. Os retângulos representam os passos a serem executados no
controle do processo e, entre alguns retângulos, a condição necessária para que se chegue ao novo
passo. Sendo assim, podemos garantir que determinado passo nunca ocorra sem que uma transição
esteja concluída.

Programação desenvolvida em SFC

3.4. Lista de Instruções


A Lista de Instruções é baseada na linguagem assembly e de característica essencialmente
sequencial, caracterizando-se por instruções que possuem um operador e, dependendo do tipo de
operação, podem incluir um ou mais operandos, separados por vírgulas.
De certo modo, podemos dizer que a linguagem é a transcrição do diagrama de relés (LD), ou
seja, a passagem de uma linguagem gráfica para uma linguagem escrita. A linguagem utiliza uma
única instrução por linha de programação, como pode ser observado na Figura abaixo que
representa a edição da simulação em Lista de Instruções. Faz-se necessário um controle muito
eficiente na utilização dos registradores e interfaces de entrada e saída para não haver falhas durante
a programação.

Programação desenvolvida em IL

3.5. Texto Estruturado


A linguagem de programação Estruturada, ou Structured Text (ST), é uma linguagem textual
muito próxima das linguagens de alto nível como PASCAL, ou linguagem C. Podemos escrever
expressões matemáticas e lógicas em uma linha, ou utilizar comandos de decisão, laço, contagem
etc. Contém os elementos essenciais de uma linguagem de programação moderna, incluindo as
instruções condicionais (IF, THEN, ELSE e CASE OF) e instruções de iterações (FOR, WHILE e
REPEAT). Permite a programação de funções e blocos que ficariam de difícil solução com outras
linguagens.
A linguagem possibilita a utilização de mais de uma instrução por linha, agiliza e facilita a
tarefa dos programadores em projetos mais complexos. Esta linguagem é muito utilizada por quem
vem da área de Informática devido à sua similaridade com as linguagens de programação de alto-
nível. A tela de programação para a linguagem ST é demonstrada na Figura abaixo.

Programação desenvolvida em ST
4. INICIANDO O SOFTWARE

4.1. Passos necessários para a criação de um programa.

4.2. Introdução à declaração de variáveis e tipos de variáveis.

O primeiro requisito da norma é a declaração de todas as variáveis que iremos utilizar no


programa. As variáveis possuem, nome, endereço, tipo, especificação e atributo.
Independente se vamos utilizar uma variável interna, como uma memória, uma entrada digital
ou analógica, um temporizador, etc.

Tela Codesys
Sendo definido:
ORGANIZADOR - é usado para gerenciar os novos itens de cada pasta. Através dele
inserimos novos elementos nas pastas localizadas abaixo e solicitamos a visualização /edição
de alguns itens.
ORGANIZADOR/PROGRAMAS – Nesta pasta alocamos os programas do CLP, bem
como suas funções e seus blocos de função.
ORGANIZADOR/ TIPOS DE DADOS – Aqui nós colocamos nossos tipos de dados,
Structures, Enumeration, etc...São tipos de dados criados pelo usuário conforme a IEC 61131-3
ORGANIZADOR / VISUALIZADOR – Dentre os recursos oferecidos pelo CoDeSys, está
a criação de telas para visualização do programa criado, tanto on-line como off-line (modo
simulação), estas telas são criadas e gerenciadas nesta pasta.
ORGANIZADOR / RECURSOS – Pasta responsável por vários itens no CoDeSys. Entre
eles: Configuração de hardware, configuração do sistema da CPU, criação de variáveis de rede,
geração de gráficos de tendência, criação de tabelas de monitoração etc...
ÁREA DE TRABALHO – Quando selecionamos ou criamos algo em qualquer pasta do
organizador, este item aparece na área de trabalho para edição ou visualização.
BARRA DE FERRAMENTAS – Aqui ficam algumas ferramentas para acesso mais rápido a
algumas funções do programa, esta barra muda conforme o item selecionado na Área de Trabalho.
MENU PRINCIPAL – Aqui ficam todas as opções de acessibilidade e funcionamento do
CODESYS.
Os passos necessários para a criação de um programa são:
• Criar um novo projeto
• Configurar o Hardware
• Criar os arquivos fontes necessários (POU)
• Criar as Variáveis
• Realizar a lógica do programa
• Criar blocos de função e /ou funções.
• Compilar o programa
• Realizar os testes
• Configurar as telas / ferramentas de visualização.
• Executar os testes do programa em modo OFF-line.
• Realizar o comissionamento da máquina.
• Transferir o programa para o CLP
• Executar os testes do programa em modo ON-line
• Armazenar os programas fontes no CLP. (Quando desejado)

4.3.Iniciando um novo projeto:


Entre no menu principal opção Arquivo -> Novo, ou selecione o ícone . A seguinte tela
abrirá:

Selecione: 3S CoDeSys SP PLCWintNT V2.4


Na aba GERAL, selecione o item Config. de símbolos: arquivo INI.
Pressione: OK.
Ao selecionarmos a CPU que desejamos utilizar, pressionamos OK.

Na opção Tipo do POU selecionamos se queremos criar um programa, um Function Block ou


uma função.
Funções são elementos de software, que podem ser utilizados várias vezes dentro de um
mesmo programa, de tal forma que, quando executados com um certo conjunto de valores de
entrada, sempre produzem um único valor como resultado.
Blocos de funções são uma categoria da Unidade de Organização de Programa (POU). Que
permitem um algoritmo específico, ou conjunto de ações, que podem ser chamados em várias
instâncias dentro de um mesmo programa, de tal forma que, a serem aplicados em um conjunto de
dados de entrada eles produzem um novo conjunto de dados de saída.
No nosso caso iremos selecionar a opção Program, pois iremos criar primeiro um programa.
Na opção nome do POU deixamos PLC_PRG. Este nome, na programação mono-task,
designa o programa principal, ou seja, o compilador sabe que é por este programa que o
equipamento irá começar a execução. Na linguagem podemos escolher entre seis linguagens de
programação diferentes.
4.4. Exemplo
O exemplo de problema a ser resolvido que será implementado nas cinco linguagens de
programação, consiste na contagem de objetos em uma esteira rolante, que deverá ser acionada ao
ligar o processo. Ao contar 4 objetos, o processo deverá parar por um tempo de cinco segundos
(tempo de retirada dos objetos). Contados cinco segundos o processo inicia novamente. Caso o
processo parar durante a contagem dos objetos, o mesmo deverá recomeçar a contagem quando for
energizado novamente.

4.4.1. Iniciando a Programação na Linguagem LADDER

Definição das variáveis globais


Entradas:
• I1: desliga geral (NF) e botão que aciona a bobina M2 (Reset do contador);
• I2: liga geral (NA);
• I3: botão que simula a contagem dos objetos (NA);

Saídas:
• M1: bobina virtual que segura o processo;
• M2: bobina virtual que “reseta” o contador;
• C1: Contador;
• T1: Temporizador;
No Organizador, selecionar a opção RECURSOS.

Clique no item Variáveis globais e selecione Variáveis globais como mostra a figura abaixo.

A seguinte tela irá aparecer:

Na tela abaixo de VAR_GLOBAL, declarar as variáveis de entrada e saída, definindo-as


como do tipo BOOL. Ex.: I1: BOOL.
Minimize a tela Variáveis globais.

Inserindo as entradas e saídas nas linhas lógicas

Barra de ferramentas
• Para implementação (digitação da lógica de programação) siga os seguintes passos:
• Na área do programa clique sobre a linha de comando que aparece e clique no menu
em Inserir->Contato (negado) ou pressione o ícone na barra de ferramentas:
• Na linha de comandos irá aparecer um contato NF:

• Clicando nas interrogações, pressione a tecla ( . ) para selecionar a variável do contato


(I1,nesse caso).
• Clique sobre a linha de comando e selecione na barra de ferramentas a opção: .
Selecione a variável I2.
• Clique agora em I2 e selecione na barra de ferramentas a opção: . Selecione a
variável M1.
• Clicando novamente na linha de comando, selecione agora na barra de ferramentas a
opção: .

• Selecione a variável M1.


Isto irá inserir uma bobina de saída nesta linha lógica. A primeira linha de comando deverá
ficar de seguinte forma:
Agora vamos inserir a próxima linha. Vá ao menu principal e selecione Inserir, opção Rede
(depois) ou pressione o ícone .
Uma segunda linha irá surgir.
Coloque um contato NA e selecione a variável I3.
Iremos inserir o contador. Clique na linha de comando, vá ao menu Inserir e selecione a opção
Bloco Funcional ou pressione o ícone na barra de ferramentas:
A tela Assistente de entrada irá abrir:

Selecione CTU (FB), que é um contador bloco funcional de incremento. As variáveis de


entrada CU e RESET, bem como a variável de saída Q são do tipo BOOL, a variável de entrada PV
e a de saída CV são do tipo WORD.
Um contador irá aparecer na linha lógica.

Clique nas interrogações acima do contador e coloque o nome Contador. Assim que damos
um nome para o contador, a seguinte janela irá abrir:
Isso ocorre porque o assistente de declaração verifica que não há nenhuma variável declarada
como Contador, sendo assim, ele solicita que entremos com mais dados sobre esta variável.
Preencha esta caixa de diálogos com os seguintes dados (se estiver preenchido não é
necessário alterar):
• Nome: Contador.
• Tipo: CTU.
O bloco de função irá aparecer na declaração local de variáveis.

No contador, nas interrogações ao lado de RESET, definimos qual contato ou bobina irá
“resetar” o contador, selecione M2. Nas interrogações ao lado de PV (Preset Value), definimos com
quantos pulsos o contador irá atuar, digite 4.
Após o contador, insira uma bobina com o nome da variável C1. A segunda linha de comando
deverá ficar da seguinte forma:

Agora iremos definir a terceira linha de comando. Insira mais uma linha lógica abaixo.
Coloque um contato NA da bobina C1. Clique na linha lógica com o botão direito do mouse e
selecione Bloco Funcional. A tela Assistente de entrada abrirá novamente. Selecione na biblioteca
Blocos Funcionais Padrão o bloco de função TON (FB) na pasta Timer.
O mesmo poderia ser feito selecionando na barra de ferramentas a opção:
Um temporizador irá aparecer no meio da linha lógica.

Clique nas interrogações acima do temporizador e coloque o nome de Temporizador. Assim


que der um nome para o temporizador a seguinte tela irá abrir:

Preencha esta caixa de diálogos com os seguintes dados:


• Nome: Temporizador;
• Tipo: TON.
O bloco de função irá aparecer na declaração local de variáveis.
Nas interrogações que estão ao lado esquerdo do temporizador escrevemos o tempo desejado.
Por se tratar de uma entrada do tipo TIME, o tempo deve ser escrito da seguinte forma: T#5S.
Coloque uma bobina na linha lógica, logo após o temporizador e selecione a variável T1.
A terceira linha de comando deverá ficar da seguinte forma:

Para a quarta linha de comando insira mais uma linha lógica abaixo e coloque a seguinte
lógica:

Para a quinta e última linha de comado insira mais uma linha lógica e implemente:

O programa completo deverá ficar da seguinte forma:


4.4.1.1.Simulação do Programa

Para simular o programa, faremos uma interface IHM, em que poderemos visualizar os botões
de cada contato e uma sinalização que nos indique que uma bonina (saída) está energizada.
No organizador selecione a opção Visualizações:

Clique com o botão direito na pasta Visualizações e selecione a opção Acrescentar objeto. A
janela Nova visualização irá aparecer em “Nome da nova visualização” dê um nome para a tela de
visualização, como por exemplo: Interface.
Clique em OK. A tela nomeada Interface irá aparecer:

Verifique os itens na barra de ferramentas e verifique quais se adequam ao seu programa

Primeiramente vamos criar o botão I1. Clique no ícone para criar um botão na janela de
visualização. Assim que selecionar esta opção, clique e arraste com o mouse na tela de
visualização para criar o botão.
Dê um duplo clique neste botão para editá-lo.

Selecione a opção texto.

Escreva na lacuna Conteúdo: I1. Mantenha o alinhamento central e escolha um fonte de texto
qualquer.
Selecione agora a opção Entrada.

Selecione a opção Pulsar variável. Clique com o mouse dentro do quadro branco e pressione
F2, selecione a variável I1 (BOOL) e pressione OK. O botão I1 estará pronto. Da mesma forma,
crie os botões I2 e I3.
Vamos criar agora a sinalização das bobinas (saídas), lembrando que a única saída física é a
bobina Q1. Selecione na barra de ferramentas a opção elipse e crie um círculo conforme abaixo:

Dê um duplo clique no círculo e a tela de Configuração irá aparecer.


Na opção Texto -> Conteúdo escreva o seguinte: M1.
Entre agora na opção cores.

Nesta opção podemos escolher as cores do círculo.


Em Cor escolhemos a cor do objeto no estado desligado (nível 0) e em Cor do alarme
escolhemos uma cor a ser utilizada quando o objeto estiver ligado (nível 1).
Clique em Cor -> Preenchimento e escolha a cor vermelha.
Clique em Cor do alarme -> Preenchimento e escolha a cor verde.
Clique agora na opção Variáveis e na lacuna Trocar de cor pressione F2, a tela Assistente de
entrada irá aparecer, selecione M1 (BOOL).
Repita o mesmo procedimento para criar a sinalização das bobinas Q1 e M2. A tela de
visualização deverá ficar da seguinte forma:
4.4.1.2. Simulando o Programa

Para utilizar as ferramentas de simulação deve-se ter o programa compilado como se fosse
transferi-lo para o CLP.
Habilite no menu principal a opção Comunicação -> Modo simulação. Isso irá colocar o
programa em modo de simulação.

Agora selecione a opção -> Login: . Isso fará com que o software faça um login com um
CLP virtual.
Este CLP virtual inicializa em Run, selecione a opção Run: .Estaremos com este CLP
virtual em modo Run. A tela que aparecerá é a seguinte:
4.4.2. Iniciando a Progamação em Diagrama de Blocos de Funções (FBD –
Function Block Diagram)

Com o software configurado para programação em Blocos de Funções (opção FBD),


conforme explicado anteriormente, daremos início a programação.
No Organizador, selecione a opção Recursos.

Clique no item Variáveis globais e selecione Variáveis globais.

A seguinte tela irá aparecer:


Abaixo de VAR_GLOBAL, digitar as variáveis de entrada e saída, definindo-as como do tipo
BOOL. Ex.: I1: BOOL.

Minimize a tela “variáveis globais”.

4.4.2.1.O editor gráfico FBD


O Editor FBD funciona com uma lista de redes, na qual cada rede contém uma estrutura que
exibe, respectivamente, uma expressão lógica ou aritmética, uma chamada de bloco funcional, uma
função, um salto ou uma instrução de retorno.
Para programação nesse editor, os comandos mais importantes são encontrados no menu de
contexto (botão direito do mouse ou <Ctrl>+<F10>).

4.4.2.2.Funções Lógicas
Porta lógica é um circuito que contém um ou mais terminais de entrada de sinais (onde são
colocadas as variáveis booleanas) que executa uma operação booleana entre as variáveis presentes
nas suas entradas e transfere o resultado para a saída. Tais dispositivos obedecem às leis da álgebra
de Boole.
4.4.2.3.Posições do Cursor em FBD
Todo texto é uma posição possível do cursor. O texto selecionado está em um plano de
fundo azul e agora pode ser alterado.
Também pode-se reconhecer a posição presente do cursor por um retângulo pontilhado. A
seguir está uma lista de todas as posições possíveis de cursor com um exemplo.
4.4.2.4. Símbolos da barra de ferramentas

“Entrada (IN)”
Este comando insere um operador de entrada. Com vários operadores, o número de entradas
pode variar.
A entrada inserida é alocada com o texto “???”. Este texto deve ser clicado e transformado na
constante ou variável desejada.
“Saída (OUT)”
Este comando insere uma atribuição adicional em uma atribuição existente. Esse recurso
permite o posicionamento das assim chamadas atribuições “combs”, isto é, a atribuição de valor
atualmente localizado na linha de diversas variáveis.
A saída inserida é alocada com o texto “???”. Este texto deve ser clicado e alterado para a
variável desejada.
“Instrução (Caixa)”
Com este comando, operadores, funções, blocos funcionais e programas podem ser inseridos.
Em primeiro lugar, é inserido um operador “AND”. Isso pode ser convertido por seleção ou
sobrescrição do texto “AND” por outro operador, função, bloco funcional e programa.
Em funções e blocos funcionais, os nomes formais de entradas e saídas são exibidas.
“Atribuição”
Este comando insere uma atribuição
Dependendo da posição selecionada, a inserção ocorre diretamente na frente da entrada
selecionada, diretamente após a saída selecionada ou no final da rede.
Para uma atribuição inserida, uma seleção pode ser feita no texto “???” e a atribuição pode ser
substituída pela variável a ser atribuída.
“Salto”
Este comando insere um salto.
Dependendo da posição selecionada, a inserção ocorre diretamente na frente da entrada
selecionada, diretamente após a saída selecionada ou no final da rede.
Para um salto inserido, uma seleção pode ser feita no texto “???” e o salto pode ser substituído
pelo rótulo a ser atribuído.
“Retorno”
Este comando insere uma instrução de Retorno.
Dependendo da posição selecionada, a inserção ocorre diretamente na frente da entrada
selecionada, diretamente após a saída selecionada, diretamente antes da linha cruzada selecionada,
ou no final da rede.
“Negar”
Com este comando pode-se negar as entradas, saídas, saltos ou instruções de Retorno. O
símbolo para negação é um pequeno círculo em uma conexão.
Se uma entrada estiver marcada, então essa será negada.
Se uma saída for selecionada, essa saída será negada.
Se um salto ou um retorno estiver marcado, a entrada desse salto ou retorno irá ser negada.
“Set/Reset”
Com esse comando pode-se definir saídas Set ou Reset.

4.4.2.5.Edição de um Programa em FBD

Tomando como base o item 4.4 deste capítulo, insira os blocos correspondentes a primeira
linha lógica:

Na segunda linha lógica insira uma “Instrução (Caixa)”, no local em que está escrito “AND”,
digite CTU, que é o bloco funcional referente ao contador que estamos utilizando na edição deste
programa.
No texto “???” em cima do contador, digite por ex.: Contador.
Ao digitar “Contador”, o programa automaticamente abrirá a tela Declarar variável.
Clique em “OK” e configure o contador como a imagem abaixo referente a segunda linha
lógica do programa.
Na terceira linha lógica insira uma “Instrução (Caixa)”, no local em que está escrito “AND”,
digite TON, que é o bloco funcional referente ao temporizador que estamos utilizando na edição
deste programa.
No texto “???” em cima do contador, digite por ex.: Temporizador.
Ao digitar “Temporizador”, o programa automaticamente abrirá a tela declarar variável.
Clique em “OK” e configure o temporizador como a imagem abaixo referente a terceira linha
lógica do programa.

A quarta e quinta, linhas lógicas, deveram ficar da seguinte forma:

O programa completo deverá ficar da seguinte forma:


4.4.3. Iniciando a Programação em Lista de Instruções (IL – Instruction
List – IL.

Com o software configurado para programação em Lista de Instruções (opção IL), conforme
explicado no primeiro capítulo, daremos início a programação.

No Organizador, selecione a opção Recursos.

• Clique no item Variáveis globais e selecione Variáveis globais.


A seguinte tela irá aparecer:

Abaixo de VAR_GLOBAL, digitar as variáveis de entrada e saída, definindo-as como


do tipo BOOL. Ex.: I1: BOOL.

Feche a tela Variáveis globais.

4.4.3.1.Instruções

Uma Lista de Instruções (IL) consiste de uma série de instruções. Cada instrução começa em
uma nova linha e contém um operador e, dependendo do tipo de operação, um ou mais
operandos separados por vírgulas.
Na frente de uma instrução pode haver uma marca de identificação (rótulo) seguida de
dois pontos (:).
Um comentário dever ser o último elemento em uma linha. Linhas em branco podem
ser inseridas entre instruções.

4.4.3.2. Inserindo as instruções.

Na área do programa, insira as seguintes instruções:


LDN I1
AND (I2
OR M1
)
ST M1

Instruções que correspondem a primeira linha lógica LADDER.

Agora insira as instruções (correspondentes a segunda linha lógica da programação em


LADDER):
CAL Contador (CU:= I3, RESET := M2, PV := 4)
LD Contador.Q
ST C1

Ao digitar “Contador”, o programa automaticamente abrirá a tela declarar variável.


Na lacuna Tipo, selecione a opção Blocos funcionais padrão->Counter->CTU(FB), para que
“Contador” seja declarado como um contador do tipo CTU.

Logo abaixo insira:


CAL Temporizador(IN := C1, PT := T#5S)
LD Temporizador.Q
ST T1

Instruções que correspondem a terceira linha lógica da programação em Ladder.


A tela Declarar variável abrirá novamente. Na lacuna Tipo, selecione a opção Blocos
funcionais padrão->Timer->(FB), para que “Temporizador” seja declarado como um contador do
tipo TON.
T#5S é o tempo de PT do temporizador correspondente a 5 segundos.
Por fim, insira as instruções que correspondem a quarta e quinta linha lógica do programa
em Ladder:
LD M1
ANDN C1
ST Q1
LD T1
OR I1
ST M2

O programa completo deverá ficar da seguinte forma:


4.4.4. Iniciando a Programação em Sequenciamento Gráfico de Funções
(SFC – Sequential Function Chart )

Com o software configurado para programação em Sequenciamento Gráfico de Funções


(opção FBD), conforme explicado no primeiro capítulo, daremos início a programação.
No Organizador, selecione a opção Recursos.

Clique no item “Variáveis globais” e selecione “Variáveis globais”.

A seguinte tela irá aparecer:


Abaixo de VAR_GLOBAL, digitar as variáveis de entrada e saída, definindo-as como do tipo
BOOL. Ex.: I1: BOOL.

Minimize a tela Variáveis globais.

4.4.4.1. O Editor Gráfico SFC

O Sequenciamento Gráfico de Funções (SFC) é uma linguagem orientada graficamente que


torna possível descrever a ordem cronológica de diferentes ações dentro de um programa. Para isso,
as ações são atribuídas aos elementos do passo e a sequência de processo é controlada pelos
elementos de transição.
Um processo em SFC é composto por etapas que serão ativadas de forma sequencial. O
programa é resultado de uma série de passos conectados, que podem ser do tipo simplificado ou do
tipo IEC.
O passo do tipo simplificado consiste em uma ação e um sinalizador que mostra se o passo
está ativo. Se a ação de um passo for implementada, então aparecerá um pequeno triângulo no canto
superior direito do passo.
Um passo IEC consiste de um sinalizador e uma ou mais ações atribuídas ou variáveis
booleanas. As ações associadas são exibidas à direita do passo.
Cada ação em um programa SFC, que está contida em um passo, pode conter um série de
instruções programadas em outras linguagens como LD, FBD, IL, ST ou mesmo outro SFC.
Existem também ações de entrada e saída, uma pode ser executada quando o passo foi ativado e a
outra quando o mesmo foi desativado, respectivamente.
Entre os passos existem transições, que são as condições pelas quais o programa muda de
estado, passando de um estado antecessor para um sucessor.
Um qualificador, utilizado em SFC, é necessário para associar ações com passos IEC, como
mostrado na tabela abaixo:

Qualificador Tipo Descrição


N Não-armazenado A ação está ativa
enquanto o passo estiver
ativo
R Reset A ação é desativada
S Set A ação é ativada e
permanecerá ativa até
haver um reset
L Tempo limitado A ação é ativada por
um determinado tempo (no
máximo enquanto o passo
estiver ativo)
D Retardo de tempo A ação ficará ativa
após um determinado
período de tempo se a
etapa ainda estiver ativa e,
então, ela permanecerá
ativa desde que o passo
esteja ativo
P Pulso A ação é executada
apenas uma vez se o passo
estiver ativo
SD Armazenados e A ação é ativada
retardados no tempo após um determinado
período de tempo e
permanecerá ativa até um
reset
DS Retardados e A ação é ativada
armazenados após um determinado
tempo, contanto que o
passo ainda esteja ativo e
permanecerá ativa até um
reset
SL Armazenados e A ação é ativada por
limitados no tempo um determinado tempo
Na linguagem SFC existem as chamadas ramificações alternativas, que começam a terminam
com uma transição e ramificações paralelas que devem começar e terminar com um passo.
Em SFC, um salto é definido como uma conexão para o passo cujo nome é indicado sob o
símbolo do salto. Saltos são necessários porque não é permitido criar conexões que levam para cima
ou que se cruzem entre si.

4.4.4.2. Símbolos da barra de ferramentas

“Transição de passo (antes)”


Este comando insere um passo no editor SFC seguido por uma transição em frente ao bloco
marcado.
“Transição de passo (depois)”
Este comando insere um passo no editor SFC seguido por uma transição após a primeira
transição no bloco marcado.
“Ramificação alternativa (direita)”
Este comando insere uma ramificação alternativa no editor SFC como uma ramificação à
direita do bloco marcado. Para isso o bloco marcado deve tanto começar quanto terminar com uma
transição. A nova ramificação, então, é composta de uma transição.
“Ramificação alternativa (esquerda)”
Este comando insere uma ramificação alternativa no editor SFC como uma ramificação à
esquerda do bloco marcado. Para isso o bloco marcado deve tanto começar quando terminar com
uma transição. A nova ramificação, então, é composta de uma transição.
“Ramificação paralela (direita)”
Este comando insere uma ramificação paralela no editor SFC como uma ramificação à
esquerda do bloco marcado. Para isso o bloco marcado deve tanto começar quando terminar com
uma transição. A nova ramificação, então, é composta de um passo. Para permitir saltos para as
ramificações paralelas que foram criadas, elas devem ser fornecidas com um rótulo de salto.
“Ramificação paralela (esquerda)”
Este comando insere uma ramificação paralela no editor SFC como uma ramificação à
esquerda do bloco marcado. Para isso o bloco marcado deve tanto começar quando terminar com
um passo. A nova ramificação, então, é composta de um passo. Para permitir saltos para as
ramificações paralelas que foram criadas, elas devem ser fornecidas com um rótulo de salto.
“Saltar”
Este comando insere um salto no editor SFC no final da ramificação, ao qual pertence o bloco
marcado. Para isso a ramificação deve ser uma ramificação alternativa.
“Saltar (transição)”
Este comando insere uma transição no editor SFC, seguida por um salto ao final da
ramificação selecionada. Para isso a ramificação deve ser uma ramificação paralela.
“Usar passos IEC”
Se esse comando está ativado (indicado por um sinal de verificação na frente do item de menu
e um símbolo impresso na barra de ferramentas), então os passos IEC serão inseridos, em vez dos
passos simplificados, após a inserção de transições de passo e ramificações paralelas.

4.4.4.3.Edição de um Programa em SFC


Tomando como base o item 4.4 deste capítulo e os comandos apresentados anteriormente,
implemente a sequência gráfica de funções seguindo os próximos passos.

Primeiramente, a seguinte tela irá aparecer ao entrar no editor SFC:

a) Clique no bloco “Init” e insira “Transição de passo (depois)”, opção da barra de


ferramentas. Um bloco chamado “Step2” irá aparecer.
b) Clique no bloco “Step2” e insira mais uma “Transição de passo (depois)”.

c) Agora clique em “Trans2” e insira “Ramificação alternativa (direita)”, opção da barra de


ferramentas.

d) Clique em “Trans3” e insira “Saltar”, opção da barra de ferramentas.


e) Clique em “Trans2” e repita os itens “c” e “d”.

f) Com as variáveis globais declaradas, mude o nome das variáveis “Trans0”, “Step”, etc.,
conforme a figura abaixo:
g) Clique com o botão direito do mouse no bloco “Q1” e selecione a opção “Zoom
ação/transição”. A tela “Nova ação” aparecerá:

h) Selecione a opção “FBD”, pois iremos implementar uma lógica em FBD na ação a ser
definida. Clique em “OK” e a seguinte tela irá aparecer:
i) As ferramentas de implementação da lógica em blocos aparecerão na barra de
ferramentas. Implemente a seguinte lógica:

j) Repita o item “g”, clicando com o botão direito do mouse em “T1”, inserindo a seguinte
lógica:
4.4.5. Iniciando a Programação em Texto Estruturado (ST – Structured
Text)

Com o software configurado para programação em Texto Estruturado (opção ST), conforme
explicado anteriormente, daremos início a programação.
No Organizador, selecione a opção Recursos.

Clique no item Variáveis globais e selecione Variáveis globais.

A seguinte tela irá aparecer:


Abaixo de VAR_GLOBAL, digitar as variáveis de entrada e saída, definindo-as como do tipo
BOOL. Ex.: I1: BOOL.

Minimize a tela “Variáveis globais”.

4.4.5.1..Definições da linguagem ST

O Texto Estruturado consiste em uma série de instruções que, como determinado em


linguagens de alto nível, (“IF..THEN..ELSE”) ou em laços (WHILE..DO) podem ser executadas.

A linguagem é usada para descrever o comportamento de funções, blocos de funções e


programas.
As expressões geram valores derivados de outras variáveis e constantes. Expressões devem
produzir valores do mesmo tipo de uma variável sendo atribuída. De acordo com Altos (2009), a
avaliação de uma expressão ocorre por meio do processamento dos operadores de acordo com
certas regras de precedência. O operador com a maior precedência é processado primeiro, em
seguida, o operador com a próxima procedência maior, a assim por diante, até que todos os
operadores sejam processados.
Os operadores com mesma ordem de precedência são processados da esquerda para a direita.
Operação Símbolo Característica
Entre parênteses (expressão) Maior precedência
Chamada de função Nome da função
(lista de parâmetros)
Exponencial EXPT
Negação - (NOT)
(complemento)
Multiplicação *
Divisão /
Módulo MOD
Adição +
Subtração -
Comparação <,>,<=,>=
Igual a =
Diferente de <>
E Booleano AND Menor precedência
OU exclusivo XOR
Booleano
OU Booleano OR Menor precedência

Tabela Operadores ST na ordem de precedência. Fonte

4.4.5.2.Chamada de blocos de função

Em ST podemos invocar um bloco de função através de seu nome, tendo como parâmetros
valores válidos para os parâmetros de entrada.
Forma Geral:
InstânciaBlocoFunc(ParamEntrada1:=Expressão1, ParamEntrada2:=Expressão2, …);
• Comando condicional
IF<expressão booleana>THEN
<comandos>
END_IF;
IF<expressão booleana>THEN
<comandos>
ELSE
<comandos>
END_IF;
IF< expressão booleana>THEN
<comandos>
ELSEIF< expressão booleana>
<comandos>
ELSE
<comandos>
END_IF;
• Comando condicional
CASE<expressão inteira>OF
<valor de seletor inteiro>:<comandos>
<valor de seletor inteiro>:<comandos>
<valor de seletor inteiro>:<comandos>
ELSE
<coamando>
END_CASE;
• Comandos de repetição (FOR/DO)
FOR < valor final da expressão>
TO < valor final da expressão>
BY < expressão incremental> DO
<comandos>
END_FOR;
A expressão precedida por BY é opcional. Se BY for omitido, a variável de iteração será
incrementada de 1.
A variável de iteração NÃO deve ser utilizada fora do loop, pois seu valor é dependente da
implementação.
As instruções dentro do comando não devem modificar as variáveis que afetam os valores de
incremento e final
• Comandos de repetição (WHILE/DO)
WHILE<Expressão booleana>DO
<comandos...>
END_WHILE
• Comando REPEAT..UNTIL
REPEAT
<comandos>
UNTIL <expressão booleana>
END_REPEAT

• Comando EXIT
Só pode ser usado dentro de iterações. Aborta loop.
• Comando Return
Só pode ser usado dentro de funções e blocos de função. Aborta a execução da função ou
bloco de execução.
Para implementar o programa proposto siga todos os passos já mencionados anteriormente
(declaração de variáveis locais e globais). O programa que atende o que foi proposto segue na
figura abaixo:

Você também pode gostar