Professional Documents
Culture Documents
Índice
Introdução............................................................................................3
Dicas de boas práticas.............................................................................4
Utilizando nomes ao invés de códigos secretos........................................4
Semântica dos nomes de sinais.............................................................6
Versionamento de código......................................................................7
Exemplo de identificação de um sistema de automação.........................7
Regra para alteração do valor da versão e da revisão............................7
Histórico das alterações.......................................................................8
Técnicas avançadas de estrutura.............................................................10
Proteção do núcleo............................................................................10
Máquina de tampar potes................................................................12
Configuração de I/O da máquina de tampar potes...............................12
Saídas Digitais da máquina de tampar potes...................................12
Entradas digitais da máquina de tampar potes.................................12
Exemplo de código sem proteção do núcleo........................................13
Exemplo de código com proteção do núcleo........................................13
Intertravamento por alarme ...............................................................15
Níveis de alarmes..............................................................................17
Nível 4 - Interrompe todos os movimentos da máquina........................17
Nível 3 - Desliga equipamentos........................................................17
Nível 2 - Interrompe o início do próximo ciclo automático.....................18
Nível 1 - Somente informativo..........................................................18
Classificação dos alarmes em níveis..................................................18
Sequenciador automático....................................................................19
Estrutura básica de cada passo do sequenciador.................................20
Ciclo automático da máquina de tampar potes....................................21
Utilização dos sinais do sequenciador................................................22
Controle de Revisões.............................................................................23
www.branqs.com.br Página 2 de 24
Dicas e técnicas avançadas para
programação de CLPs
Introdução
É com grande satisfação que entregamos a você este conjunto de dicas e técnicas para
a escrita de software para Controladores Lógicos Programáveis (CLP). Procuramos
reunir neste documento um resumo de algumas técnicas aperfeiçoadas em mais de
vinte anos de experiência na construção de software para a área de automação
industrial.
Agradecemos seu interesse e esperamos que este conteúdo possa ajudar várias
pessoas a criar sistemas cada vez mais confiáveis e fáceis de realizar manutenção.
Nota: Este documento foi especialmente desenvolvido para distribuição na Brazil Automation ISA2010. Trata-se de um
documento totalmente original e de propriedade intelectual do autor. Nenhuma parte pode ser copiada ou reproduzida de
alguma forma sem a autorização por escrito da Branqs Automação LTDA.
www.branqs.com.br Página 3 de 24
Dicas e técnicas avançadas para
programação de CLPs
Para exemplificar, segue abaixo um trecho de código obtido a partir de um site que
ensina programação de CLP na Internet:
Mesmo representando uma lógica simples, fica difícil saber o efeito final da execução
deste código em um equipamento , pois não é fácil interpretar os sinais “I3.1, I3.2,
Q4.2 e Q4.11”.
Na mesma página o autor apresenta uma tabela que descreve o significado de cada
sinal:
Address Description
I3.1 Forward pushbutton
I3.2 Front limit OK
Q4.2 Reverse solenoid
Q4.11 Forward solenoid
www.branqs.com.br Página 4 de 24
Dicas e técnicas avançadas para
programação de CLPs
Sem dúvida nenhuma a tabela ajuda bastante, mas seria muito mais interessante
utilizarmos nomes melhores diretamente no diagrama. Por exemplo:
É importante lembrar que infelizmente esse problema muitas vezes é motivado por
limitações do próprio ambiente de desenvolvimento. Alguns ambientes não permitem
utilizar nomes longos, e por isso comprometem significativamente a qualidade do
código.
Forward pushbutton
Em português significaria :
Botão de avanço
Se considerarmos a existência de vários atuadores que poderiam provocar o avanço de
alguma parte do equipamento, chegamos à conclusão de que esse nome ainda pode ser
melhorado se inserirmos o nome específico do movimento. Exemplo:
botaoAvanço
Cilindro
Fechamento
Quanto mais aplicado este tipo de prática, mais claro e à prova de erros seu software
irá se tornar.
www.branqs.com.br Página 5 de 24
Dicas e técnicas avançadas para
programação de CLPs
É muito recomendado utilizar nomes que esclareçam o estado lógico que o sinal vai
assumir em determinada condição física do equipamento. Supondo que o sinal I3.2
representasse um sensor que informa que o cilindro está avançado, poderíamos
melhorar sua descrição utilizando o seguinte nome:
entradaSensor
CilindroAvançado
Analisando as possibilidades acima, é fácil perceber a confusão que os nomes dos sinais
originais poderiam ocasionar.
www.branqs.com.br Página 6 de 24
Dicas e técnicas avançadas para
programação de CLPs
Versionamento de código
O versionamento de código representa outra prática extremamente importante para a
criação de sistemas de software de automação. Ao desenvolvermos softwares
embarcados “de prateleira”, que são utilizados em vários equipamentos ao longo do
tempo, a adoção dessa prática impede grandes dores de cabeça ao se realizar
atualizações.
Dessa forma consideramos uma boa prática adotar um mecanismo de registro e gestão
de todas as diferentes versões e revisões de código gerado. Segue abaixo um modo
muito simples e interessante de realizar esse tipo de controle.
Se a alteração a ser realizada impede que o software seja utilizado no lugar de revisões
anteriores, então aumentamos a versão, zerando o número da revisão. Exemplos:
www.branqs.com.br Página 7 de 24
Dicas e técnicas avançadas para
programação de CLPs
entradaSensor
botaoAvanco Cilindro saidaSolenoide
Cilindro Fechamento AvancoCilindro
Fechamento Avancado Fechamento
/////////////////////////////////////////////////////////////////
//Programa: 1003
//Versao: 02
//Revisao: 01
//Data: 16/02/2010
//Autor: Fernando Branquinho
//Descricao: Alteracoes no comportamento do avanço do cilindro
//
tag //10030201.0 O cilindro deve continuar avançando ao final do curso
tag //10030201.1 Bloqueado o avanço e recuo simultâneo
entradaSensor
botaoAvanco Cilindro saidaSolenoide saidaSolenoide
Cilindro Fechamento RecuoCilindro AvancoCilindro
Fechamento Avancado Fechamento Fechamento
10030201.0 10030201.1
tag tag
www.branqs.com.br Página 8 de 24
Dicas e técnicas avançadas para
programação de CLPs
É importante dizer que este tipo de registro é mais facilmente realizado em ambientes
que fazem uso de lista de instruções. Considere abaixo o mesmo código do exemplo
apresentado em LADDER:
SEL (botaoAvancoCilindroFechamento)
EN (entradaSensorCilindroFechamentoAvancado)
MEMO (saidaSolenoideAvancoCilindroFechamento)
Onde:
SEL = “Se ligado”
EN = “e não”
MEMO = “Memoriza”
SEL (botaoAvancoCilindroFechamento)
//10030201.0 EN (entradaSensorCilindroFechamentoAvancado)
EN (saidaSolenoideRecuoCilindroFechamento) //10030201.1
tag MEMO (saidaSolenoideAvancoCilindroFechamento)
tag
Quando uma TAG é inserida antes da linha, indica que a linha foi retirada, porém
quando é inserida ao final, indica que a linha foi inserida.
www.branqs.com.br Página 9 de 24
Dicas e técnicas avançadas para
programação de CLPs
Técnicas avançadas de
estrutura
Proteção do núcleo
Quando desenvolvemos software para automação de um novo equipamento, é muito
comum e saudável aproveitarmos um código previamente elaborado para algum
equipamento semelhante. Existem inúmeras vantagens em se trabalhar assim. Porém a
falta de adoção de algumas técnicas pode transformar tais vantagens em grandes
problemas. Resumindo, podemos transformar aquilo que era uma vantagem, em uma
desvantagem.
Muita gente já passou por isso. Se conversarmos com alguns amigos profissionais da
área, é muito comum revelarem que já tiveram o seguinte sentimento:
“Caramba, esse software tá ficando muito complicado. Dá até vontade de jogar tudo
fora e começar novamente do zero”.
www.branqs.com.br Página 10 de 24
Dicas e técnicas avançadas para
programação de CLPs
Da mesma forma que o exemplo dos automóveis, na área industrial encontramos vários
fabricantes para tipos semelhantes de equipamentos (ex:Tornos, Prensas, Caldeiras,
Empacotadeiras, Injetoras,Sopradoras, Extrusoras, etc).
Cada tipo de máquina funciona com o mesmo propósito, porém com características
diferentes.
A mesma coisa ocorre em relação aos sensores. Por exemplo: Um determinado modelo
de prensa pode utilizar um único sensor para detectar que a porta de proteção do
operador está fechada. Outros modelos podem utilizar dois, três ou mais sensores. Da
mesma forma, o propósito continua sendo o mesmo, ou seja: “Verificar se o protetor
está fechado”.
www.branqs.com.br Página 11 de 24
Dicas e técnicas avançadas para
programação de CLPs
www.branqs.com.br Página 12 de 24
Dicas e técnicas avançadas para
programação de CLPs
/////////////////////////////////////////////////////////
//Interface Entrada
/////////////////////////////////////////////////////////
SEL (entradaBotaoRecuoCilindro)
MEMO (pressionouBotaoRecuoCilindro)
SEL (entradaSensorCilindroRecuado)
MEMO (cilindroRecuado)
/////////////////////////////////////////////////////////
//Núcleo
/////////////////////////////////////////////////////////
SEL (pressionouBotaoRecuoCilindro)
EN (cilindroRecuado)
MEMO (comandoRecuoCilindro)
/////////////////////////////////////////////////////////
//Interface Saída
/////////////////////////////////////////////////////////
SEL (comandoRecuoCilindro)
MEMO (saidaSolenoideRecuoCilindro)
www.branqs.com.br Página 13 de 24
Dicas e técnicas avançadas para
programação de CLPs
/////////////////////////////////////////////////////////
//Interface Entrada
/////////////////////////////////////////////////////////
SEL (entradaBotaoRecuoCilindro)
MEMO (pressionouBotaoRecuoCilindro)
SEL (comandoRecuoCilindro)
MEMO (dsp_duracaoRecuoCilindro)
SEL (fim_duracaoRecuoCilindro)
MEMO (cilindroRecuado)
/////////////////////////////////////////////////////////
//Núcleo
/////////////////////////////////////////////////////////
SEL (pressionouBotaoRecuoCilindro)
EN (cilindroRecuado)
MEMO (comandoRecuoCilindro)
/////////////////////////////////////////////////////////
//Interface Saída
/////////////////////////////////////////////////////////
SEL (comandoRecuoCilindro)
MEMO (saidaSolenoideRecuoCilindro)
Perceba que a alteração foi feita somente na interface de entrada, mantendo assim o
núcleo do sistema intacto.
www.branqs.com.br Página 14 de 24
Dicas e técnicas avançadas para
programação de CLPs
SEL (pressionouBotaoRecuoCilindro)
EN (cilindroRecuado)
MEMO (comandoRecuoCilindro)
Considere que o sensor de cilindro recuado esteja “em curto”, mantendo-se acionado
mesmo quando o cilindro está avançado. Visualmente o operador identifica que o
cilindro não está recuado e então pressiona o botão para poder recuá-lo. O sistema não
responde e também não informa o motivo.
Para contornar essa situação, alguns desenvolvedores precisam escrever uma lógica de
modo invertido, somente para poder assinalar em uma tela de alarmes o motivo pelo
qual a solicitação que está sendo realizada não pode ser atendida.
Uma forma mais eficiente de resolver esse tipo de problema é utilizar a técnica de
intertravamento por alarme. Nesta técnica, o núcleo do código é dividido em três
blocos:
● Solicitações
● Lógicas de Alarme
● Comandos
O bloco da “Solicitação” irá tratar os sinais que “solicitam” a realização de uma função
(tanto em manual como em automático).
O bloco da “Lógica de alarme” irá identificar que situação deve impedir a realização da
função (intertravamento).
www.branqs.com.br Página 15 de 24
Dicas e técnicas avançadas para
programação de CLPs
O bloco de “comando” irá identificar se uma solicitação foi realizada “e não” existe
impedimento por alarme. Somente nessa condição o comando é realizado.
/////////////////////////////////////////////////////////
//Solicitações
/////////////////////////////////////////////////////////
SEL (pressionouBotaoRecuoCilindro)
MEMO (solicitaRecuoCilindro)
.
. Solicitações de outras funções
.
/////////////////////////////////////////////////////////
//Alarmes
/////////////////////////////////////////////////////////
SEL (solicitaRecuoCilindro)
E (cilindroRecuado)
MEMO (alarmeCilindroRecuado)
.
. Alarmes de outras funções
.
/////////////////////////////////////////////////////////
//Comandos
/////////////////////////////////////////////////////////
SEL (solicitaRecuoCilindro)
EN (alarmeCilindroRecuado)
MEMO (comandoRecuoCilindro)
.
. Comando de outras funções
.
Dessa forma, o impedimento da função é realizado através de um alarme que poderá
ser automaticamente apresentado na IHM do equipamento.
www.branqs.com.br Página 16 de 24
Dicas e técnicas avançadas para
programação de CLPs
Níveis de alarmes
Em um sistema de automação, é muito comum percebermos que certas condições
interferem no comportamento de várias funções ao mesmo tempo. Considere por
exemplo a situação onde um operador pressiona o botão de emergência de uma
máquina. Dependendo do equipamento, situações como esta devem impedir o
acionamento de qualquer função, já que está sendo sinalizada uma situação de perigo
ou de prevenção. De modo informal podemos dizer que o pressionamento do botão
deve possuir um efeito em Broadcast, ou seja, todas as funções do sistema devem ser
influenciadas por esta ocorrência. De modo análogo ao botão de emergência, outras
situações podem também demandar um comportamento comum em várias partes do
sistema. Sendo assim, uma técnica muito interessante que adotamos na construção de
software de automação de equipamentos, é classificar os diversos alarmes existentes
em diferentes níveis que provocam uma reação comum em várias funções. Este tipo de
estrutura simplifica o código e facilita futuras manutenções onde é desejado a mudança
do comportamento da máquina em determinadas situações de alarme.
Cada projetista pode definir seus próprios níveis de alarme, que podem variar de
acordo com sua própria experiência e de acordo com as características dos
equipamentos automatizados. Apresentamos abaixo quatro níveis que temos adotado
ao longo dos anos em vários tipos de equipamentos diferentes.
SEL (solicitaRecuoCilindro)
EN (alarmeCilindroRecuado)
EN (alarmeNivel4)
MEMO (comandoRecuoCilindro)
www.branqs.com.br Página 17 de 24
Dicas e técnicas avançadas para
programação de CLPs
/////////////////////////////////////////////////////////
//Alarmes
/////////////////////////////////////////////////////////
.
. Bloco de alarmes
.
/////////////////////////////////////////////////////////
//Níveis de alarmes
/////////////////////////////////////////////////////////
SEL (alarmeCilindroRecuado)
OU (alarmeCilindroNaoRecuado)
OU (alarmeEsteiraLigada)
MEMO (alarmeNivel1)
SEL (alarmeProducaoConcluida)
MEMO (alarmeNivel2)
SEL (alarmeBotaoEmergenciaPressionado)
MEMO (alarmeNivel3)
SEL (alarmeProblemaSegurancaHidraulica)
OU (alarmeNivel3)
MEMO (alarmeNivel4)
/////////////////////////////////////////////////////////
//Comandos
/////////////////////////////////////////////////////////
.
. Bloco de comandos
.
www.branqs.com.br Página 18 de 24
Dicas e técnicas avançadas para
programação de CLPs
Sequenciador automático
Desde os primórdios da adoção de CLPs pela industria, muitas técnicas foram
elaboradas para ajudar a definir e implementar a lógica do funcionamento automático
de equipamentos. A seguir apresentamos algumas delas que, ligeiramente modificadas
e combinadas com as técnicas de “Proteção do Núcleo”, “Intertravamento por Alarme” e
“Níveis de Alarme”, permitem criar uma estrutura totalmente limpa, eficiente e segura
para escrita do código de um equipamento automático.
Esperando Start
Pressionou START
Recua cilindro
Cilindro recuado
.
Liga motor da esteira
www.branqs.com.br Página 19 de 24
Dicas e técnicas avançadas para
programação de CLPs
SEL (passoAnterior)
E (condiçãoTransição)
EN (alarmeNivel4)
OU (passoAtual)
E (automatico)
EN (próximoPasso)
MEMO (passoAtual)
passo
Atual
Repare que neste bloco são usados sinais referentes a três passos: O “passo atual”, o
“passo anterior” e o “próximo passo”.
www.branqs.com.br Página 20 de 24
Dicas e técnicas avançadas para
programação de CLPs
SEL (autoEsperandoStart)
E (teclaStart)
OU (autoFimCiclo)
EN (alarmeNivel4)
EN (alarmeNivel2)
OU (autoRecuaCilindro)
E (automatico)
EN (autoLigaMotorEsteira)
MEMO (autoRecuaCilindro)
SEL (autoRecuaCilindro)
E (cilindroRecuado)
EN (alarmeNivel4)
OU (autoLigaMotorEsteira)
E (automatico)
EN (autoAvancaCilindro)
MEMO (autoLigaMotorEsteira)
SEL (autoLigaMotorEsteira)
E (poteChegouEmbaixoCilindro)
EN (alarmeNivel4)
OU (autoAvancaCilindro)
E (automatico)
EN (autoFimCiclo)
MEMO (autoAvancaCilindro)
SEL (autoAvancaCilindro)
E (cilindroAvancado)
EN (alarmeNivel4)
OU (autoFimCiclo)
E (automatico)
EN (autoRecuaCilindro)
MEMO (autoFimCiclo)
Perceba que no segundo bloco foi usada também a variável do alarme de nível 2,
impedindo assim o reinício do ciclo em caso de alarme deste tipo.
www.branqs.com.br Página 21 de 24
Dicas e técnicas avançadas para
programação de CLPs
/////////////////////////////////////////////////////////
//Solicitações
/////////////////////////////////////////////////////////
SEL (pressionouBotaoRecuoCilindro)
E (manual)
OU (autoRecuaCilindro)
MEMO (solicitaRecuoCilindro)
Perceba que esta é a única intervenção que precisará ser feita no código de cada
função, pois toda a parte de intertravamento já foi construída em modo manual.
Toda essa clareza e facilidade só foi possível graças a adoção do conjunto de técnicas e
boas práticas demonstradas ao longo deste documento.
www.branqs.com.br Página 22 de 24
Dicas e técnicas avançadas para
programação de CLPs
Controle de Revisões
Versão: 01
Revisão: 00
Data: 16/10/2010
Elaborado por: Fernando Branquinho
www.branqs.com.br Página 23 de 24
www.branqs.com.br