Dicas e técnicas avançadas para programação de CLPs



Documentos relacionados
02 - Usando o SiteMaster - Informações importantes

PROGRAMAÇÃO BÁSICA DE CLP

Controladores Lógicos Programáveis CLP (parte-3)

Lição 1 - Criação de campos calculados em consultas

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Trecho retirando do Manual do esocial Versão 1.1

Módulo I. Desenvolvimento Software CLP - Básico

Desenvolvendo Websites com PHP

Gerenciamento de software como ativo de automação industrial

Atualizaça o do Maker

Como funciona o site treinamento técnico ON-LINE?

Manual. Atualização nº 1160 Novembro/ /11/2015

Profª Danielle Casillo

Como-Funciona-Banco-Damus-Excel-Com-VBNet-Em-3-Idiomas

Manual SAGe Versão 1.2 (a partir da versão )

Registro e Acompanhamento de Chamados

Programação de Robótica: Modo Circuitos Programados - Avançado -

Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

Cadastramento de Computadores. Manual do Usuário

Em 2012, a Prosoft planejou o lançamento da Versão 5 dos seus produtos.

MANUAL DE INSTRUÇÕES USUÁRIO

Monitor de Rede Elétrica Som Maior Pro. Manual do Usuário Versão 3.9f

TRANSMISSOR ECF. Sistema de transmissão de arquivos Nota Fiscal Paulista. Manual de Utilização

EXEMPLO DE COMO FAZER UMA MALA DIRETA

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

Como consolidar dados nas planilhas utilizando o comando CONSOLIDAR do Excel

Nota de Aplicação. Utilizando os recursos de segurança dos controladores HI. HI Tecnologia. Documento de acesso público

Entendendo como funciona o NAT

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

COMO FAZER A TRANSIÇÃO

Dadas a base e a altura de um triangulo, determinar sua área.

OCOMON PRIMEIROS PASSOS

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Como instalar uma impressora?

Procedimentos para Reinstalação do Sisloc

Descrição do Produto. Altus S. A. 1

Manual de Utilização

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

Manual de Atualização MATERIAL DE APOIO - KB IMÓVEIS

Permissões de compartilhamento e NTFS - Parte 1

Como funciona? SUMÁRIO

Operador de Computador. Informática Básica

PROGRAMAÇÃO EM LINGUAGEM LADDER LINGUAGEM DE RELÉS

Manual de Atualização Versão

A01 Controle Linguagens: IL e LD

Escaneando seu computador com o Avira AntiVir 10

2 Diagrama de Caso de Uso

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

Autorização de Intercâmbio pela Web

Orientação a Objetos

Criando um script simples

Guia. PDA e SmartPhones. Windows Mobile, Pocket PC e CE.

MANUAL TISS Versão

Manual do Atendente. Treinamento OTRS Help Desk

1. Objetivos do curso 2. 2 Comunicação Interna (CI) 13 3 Ofício 18 4 DEFINIÇÕES GERAIS 23 5 CONCLUSÃO 27

CONSTRUÇÃO DE BLOG COM O BLOGGER

Configuração do Linux Educacional 5 para melhor uso do MonitorINFO-V4

Alterações Easycaptive

MANUAL DE SUPORTE. Controle de Suporte. Este manual descreve as funcionalidades do controle de suporte.

PROCEDIMENTOS PARA CONVERSÃO DE IMAGENS DIGITALIZADAS EM DOCUMENTO PDF ÚNICO UTILIZANDO A IMPRESSORA FREEPDF XP.

Celebre este natal e ano novo junto aos seus amigos e familiares distantes.

Banco de Dados BrOffice Base

Manual Operacional SIGA

Pesquisa e organização de informação

Boletim Técnico R&D 02/08 Simulador do software A1 Automation Tools 27 de fevereiro de 2008

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Manual de digitação de contas Portal AFPERGS

Controladores Lógicos Programáveis 2

COMO ATUALIZAR AUTOMATICAMENTE PLANILHAS EM EXCEL OBTENDO INFORMAÇÕES ON-LINE VIA INTERNET

02. O software ainda permite instalar a barra de ferramentas do Google como recurso extra. Faça a escolha desejada e continue a instalação.

Manual de Instalação... 2 RECURSOS DESTE RELÓGIO REGISTRANDO O ACESSO Acesso através de cartão de código de barras:...

Microsoft Office PowerPoint 2007

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

Manual Sistema de Autorização Online GW

Software. Gerenciamento de Manutenção

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

MANUAL DE PROCEDIMENTOS PARA CADASTRO DE PEDIDO DE COMPRA

Conectar diferentes pesquisas na internet por um menu

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

4.3. Máquina de estados: São utilizados em sistemas de complexos, é de fácil transformação para ladder desde que não haja muitas ramificações.

Quadro de consulta (solicitação do mestre)

Manual do Usuário. Plano de Corte

Manual do Programa de Caixa1

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

- Versão 1.0 Página 1

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Profª Danielle Casillo

MANUAL HELP-DESK DATACOM AUTOMAÇÕES

Auxiliar de instalação (Português Brasileiro) Primeiros passos

Manual do Painel Administrativo

Guia Site Empresarial

Automação Industrial Parte 2

Manual do Módulo SAC

MONTAGEM DE PROCESSO VIRTUAL

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Transcrição:

Dicas e técnicas avançadas para Documento número: 3.0018.01.02 Outubro de 2014

Í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...17 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

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 25 anos de experiência na construção de software para a área de automação industrial. Sabendo que este documento certamente chegará às mãos de excelentes profissionais da área de automação industrial, e que certamente muitos deles terão inúmeras recomendações a fazer e dicas a acrescentar, nos colocamos à disposição para discutir as técnicas aqui apresentadas através dos contatos publicados no site da Branqs (www.branqs.com.br). Agradecemos pelo 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. Equipe de desenvolvimento da Branqs Automação Nota: Este 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 de boas práticas Utilizando nomes ao invés de códigos secretos Utilize sempre nomes elucidativos para os sinais existentes na lógica de seu programa. Infelizmente muitos desenvolvedores não respeitam esta regra simples e acabam gerando código de difícil interpretação. Como resultado, obtemos um programa mais suscetível a erros que fatalmente provocarão o incorreto funcionamento de um equipamento. Para exemplificar, segue abaixo um trecho de código obtido a partir de um site que ensina programação de CLP na Internet: I3.1 I3.2 Q4.2 Q4.11 Perceba que mesmo representando uma lógica "aparentemente" simples, fica difícil saber o efeito final da execução deste código em um equipamento. Isso ocorre pois não podemos facilmente interpretar o significado dos sinais I3.1, I3.2, Q4.2 e Q4.11. Na mesma página da web, 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

Sem dúvida nenhuma a tabela ajuda bastante. Mas vamos ver agora o mesmo código utilizando nomes melhores diretamente no diagrama. Por exemplo: botaoavanço limite Avanço solenoide Recuo solenoide Avanço É fácil perceber que o aumento da clareza se torna evidente. Infelizmente esse problema muitas vezes é motivado por limitações do próprio ambiente de desenvolvimento de sistemas de automação. Alguns ambientes não permitem utilizar nomes longos, e por isso comprometem significativamente a qualidade do código. Ainda analisando o exemplo da Internet, podemos perceber que as descrições oferecidas na tabela também não estão suficientemente completas. Considere a seguinte definição: 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. Que tal se inseríssemos o nome do movimento específico na descrição do sinal. Exemplo: botaoavanço Cilindro Fechamento Quanto mais aplicado este tipo de prática, mais robusto seu software irá se tornar. www.branqs.com.br Página 5 de 24

Semântica dos nomes de sinais Além da utilização de nomes mais completos e elucidativos, é muito importante também incluir o significado do estado representado pelo sinal. No exemplo anterior obtido da Internet, a descrição do sinal I3.2 era Front Limit OK. Neste momento pode surgir uma grande dúvida, afinal, o que o autor quis dizer com OK? Para não depararmos com situações deste tipo é 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 Perceba que o nome utilizado acrescenta várias informações: Primeira informação O sinal representa uma entrada digital Segunda informação Podemos concluir que o sinal é referente a um sensor Terceira informação O sinal deixa bem claro que estamos falando do movimento do cilindro Quarta informação O sinal terá o estado lógico "verdadeiro" quando o cilindro estiver "avançado" A falta de preocupação com nomes provoca situações que induzem ao erro, pois podem existir diferentes interpretações da função de cada sinal. Por exemplo, considere os seguintes nomes de sinais: motor protetor segurançahidráulica Podemos identificar potenciais problemas nos nomes acima: Perceba que é difícil saber se estes sinais representam atuadores ou sensores. É difícil também determinar em que situação estes sinais serão acionados ou desacionados. Por exemplo, mesmo considerando que o sinal do motor representasse uma entrada, ainda assim seria difícil saber se o sinal representa que o motor está ligado, desligado ou com problema. Seguem abaixo alguns exemplos de nomes de sinais com melhor qualidade: entradasensormotorligado entradasensormotordesligado entradasensorprotetorcompletamenteaberto entradasensorprotetorfechado entradasensorprotetornãofechado saídafechaprotetor saídaabreprotetor saídaativasegurançahidráulica www.branqs.com.br Página 6 de 24

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. Com o passar do tempo, é muito comum haver a necessidade de implementar pequenas melhorias e realizar a inclusão de novos recursos no software. Neste segundo caso, quando a implementação do novo recurso implica em alterações físicas no equipamento, muito cuidado deve ser tomado, pois o novo software possivelmente não poderá ser mais aplicado aos equipamentos antigos, já que estes não possuem as alterações físicas necessárias para aceitar o novo programa. 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. Exemplo de identificação de um sistema de automação idvxxryy Onde: id = representa o código de identificação do equipamento Vxx = Número da versão do software Ryy = Número da revisão do software Regra para alteração do valor da versão e da revisão Se a alteração a ser realizada permitir que o software seja utilizado em equipamentos com revisões anteriores, então aumentamos somente o número da revisão. 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: Número original Alteração realizada Novo número 2017v01r00 Corrigido um erro que existia no código 2017v01r01 1013v02r05 1015v01r00 Implementado um novo recurso no software, que poderá ser usado nas máquinas com as revisões de software antigas Implementado um novo recurso que necessitou incluir um novo sensor na máquina 1013v02r06 1015v02r00 www.branqs.com.br Página 7 de 24

Histórico das alterações O controle sobre as alterações realizadas em um software de automação também é outra prática muito importante. O registro adequado das alterações permite evoluir nosso conhecimento sobre os equipamentos e sobre o resultado de modificações feitas ao longo do tempo. Porém dependendo da ferramenta utilizada, este tipo de registro pode se tornar bastante trabalhoso. Nos exemplos abaixo iremos demonstrar uma forma muito interessante de manter o registro do histórico das alterações realizadas em um código, gerando assim uma boa base de conhecimento a ser consultada em situações futuras. Considere o seguinte código: botaoavanco Cilindro Fechamento entradasensor Cilindro Fechamento Avancado saidasolenoide AvancoCilindro Fechamento A primeira coisa a fazer é inserir um cabeçalho no arquivo do programa, descrevendo informações a respeito das alterações realizadas. Perceba que para cada alteração criamos uma TAG de identificação do motivo. Ex: tag //////// //Programa: 1003 //Versao: 02 //Revisao: 01 //Data: 16/02/2010 //Autor: Fernando //Descricao: Alteracoes no comportamento do avanço do cilindro // //10030201.0 O cilindro deve continuar avançando ao final do curso Em seguida, as alterações seriam realizadas no código, e faríamos a citação dos indicadores dos motivos descritos no cabeçalho. Por exemplo: botaoavanco Cilindro Fechamento entradasensor Cilindro Fechamento Avancado saidasolenoide AvancoCilindro Fechamento 10030201.0 tag www.branqs.com.br Página 8 de 24

É 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: Onde: (botaoavancocilindrofechamento) (entradasensorcilindrofechamentoavancado) (saidasolenoideavancocilindrofechamento) = Se ligado = e não = Memoriza Após realizar as mesmas alterações, o código ficaria com o seguinte aspecto: (botaoavancocilindrofechamento) //10030201.0 (entradasensorcilindrofechamentoavancado) (saidasolenoideavancocilindrofechamento) tag Quando uma TAG é inserida antes da linha, indica que a linha foi retirada. Perceba que dessa forma, mesmo após realizarmos as alterações, é possível ver como o software era antes de haver a intervenção. Com certeza isso irá ajudá-lo muito durante toda a vida útil desse sistema. www.branqs.com.br Página 9 de 24

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 outro equipamento semelhante. Existem inúmeras vantagens em se trabalhar assim. É importante perceber porém, que 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 grande 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. Percebeu? Aproveitar um código previamente elaborado e testado, que sem dúvida nenhuma seria uma vantagem, pode virar um pesadelo. Isso acontece porque ao longo de várias alterações necessárias, o software pode se tornar muito confuso e cada vez mais propenso a apresentar erros que podem comprometer o correto funcionamento do equipamento e conseqüentemente a segurança de pessoas. Considerando que estamos falando de equipamentos semelhantes, significa que as características relacionadas ao domínio do problema são praticamente as mesmas. Só para exemplificar, considere os vários modelos de automóveis que existem no mercado. Praticamente todos possuem motor (que liga, acelera, desacelera e desliga), câmbio (com relações para andar para frente e para trás), portas (que abrem e fecham), volante (que direciona o carro para esquerda ou para a direita), vidros (que abrem e fecham) e etc. Todos os carros realizam estas funções, e portanto possuem propósitos semelhantes. Porém é importante lembrar que cada modelo utiliza diferentes quantidades e diferentes tipos de atuadores (válvulas, solenóides, lâmpadas, etc) e sensores (contatos, pressostatos, amperímetros, voltímetros, etc). Resumindo, o domínio do problema é o mesmo, porém existem diferenças significativas na implementação, já que cada carro possui sua própria configuração de sensores e atuadores. Da mesma forma que o exemplo dos automóveis, na área industrial encontramos vários www.branqs.com.br Página 10 de 24

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. E onde estas diferenças interferem no desenvolvimento do sistema de automação? Resposta: No tratamento dos sinais de entrada e saída (I/O) do CLP. Por exemplo, para um determinado modelo de prensa, é necessário utilizar um único atuador digital para comandar seu fechamento (ex:uma válvula direcional). Já em outros modelos, podem ser necessários dois atuadores digitais e um atuador analógico. Perceba porém que os diferentes acionamentos realizam a mesma função, ou seja, o fechamento da prensa. 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. Exemplificando, quando decidimos realizar o fechamento de uma prensa somente caso a porta de proteção do operador esteja fechada, representa uma discussão de domínio do problema e não deveria depender da quantidade e tipo de sensores e atuadores utilizados. Dessa forma, dependendo de como o software de automação foi elaborado, a adaptação do programa para inserir ou retirar sensores e atuadores pode causar grande impacto no funcionamento do mesmo, fazendo com que funções triviais que funcionavam bem no primeiro equipamento, apresentem falhas inesperadas no segundo. Sendo assim, a proposta da idéia da proteção do núcleo do software consiste em: Não utilizar sinais de entradas e saídas físicas na lógica de domínio do problema, mas sim, sinais cujo estado é resultado de uma lógica elaborada para tratar tanto o interfaceamento de entrada como o de saída. Considerando que a definição acima ficou um pouco complicada, vamos simplificar através de exemplos relacionados à automação de uma Máquina de tampar potes fictícia. www.branqs.com.br Página 11 de 24

Máquina de tampar potes Se possível, visualize esta máquina em funcionamento entrando na área de Treinamentos do site www.branqs.com.br Configuração de I/O da máquina de tampar potes Segue a relação de atuadores, sensores e botões da máquina de tampar potes Saídas Digitais da máquina de tampar potes Solenóide de Avança cilindro Solenóide de Recua cilindro Contator Liga motor da esteira Entradas digitais da máquina de tampar potes Sensor Cilindro recuado Sensor Pote embaixo do cilindro Sensor Cilindro avançado Botão de acionamento manual para recuar cilindro Botão de acionamento manual para avançar cilindro Botão de acionamento manual para ligar esteira Botão de acionamento manual para desligar esteira www.branqs.com.br Página 12 de 24

Exemplo de código sem proteção do núcleo Vamos agora brincar um pouco com programação. Analise o código abaixo. Perceba que a lógica que decide se o cilindro irá recuar pode utilizar diretamente sinais de entrada e de saída. Exemplo: (entradabotaorecuocilindro) (entradasensorcilindrorecuado) (saidasolenoiderecuocilindro) É importante notar que, caso ocorra uma mudança em tal equipamento que necessite adicionar algum sensor ou atuador relacionado ao movimento de recuo do cilindro, será necessário alterar a lógica principal dessa função. A idéia de utilizar o conceito de "proteção de núcleo" é evitar este tipo de intervenção, preservando assim todos os testes que já foram realizados e que garantem o correto funcionamento do sistema. Exemplo de código com proteção do núcleo Abaixo apresentamos a mesma função agora escrita utilizando o conceito de proteção do núcleo. Perceba que os sinais de entrada e de saída foram substituídos por sinais auxiliares compatíveis com o domínio do problema, ou seja, a lógica principal (núcleo) agora utiliza sinais independentes de detalhes de implementação existentes neste equipamento. Exemplo: //Interface Entrada (entradabotaorecuocilindro) (pressionoubotaorecuocilindro) (entradasensorcilindrorecuado) (cilindrorecuado) //Núcleo (pressionoubotaorecuocilindro) (cilindrorecuado) (comandorecuocilindro) //Interface Saída (comandorecuocilindro) (saidasolenoiderecuocilindro) Analisando o programa acima, podemos perceber que a qualidade do código melhorou, pois uma vez testado o núcleo que contém a lógica de domínio do problema, podemos implementar adaptações relacionadas ao I/O simplesmente alterando as interfaces, sem precisar alterar o núcleo. www.branqs.com.br Página 13 de 24

Para exemplificar melhor, considere que ao aproveitarmos este programa para automatizarmos uma máquina similar, foi necessário modificar o tratamento de cilindro recuado, já que a nova máquina não possui mais este sensor. Decidimos então fazer uso de um temporizador para considerar que o cilindro está recuado. Segue abaixo um exemplo de como isso poderia ser implementado a partir da técnica: //Interface Entrada (entradabotaorecuocilindro) (pressionoubotaorecuocilindro) (comandorecuocilindro) (dsp_duracaorecuocilindro) (fim_duracaorecuocilindro) (cilindrorecuado) //Núcleo (pressionoubotaorecuocilindro) (cilindrorecuado) (comandorecuocilindro) //Interface Saída (comandorecuocilindro) (saidasolenoiderecuocilindro) Obs: O sinal fim_duracaorecuocilindro será acionado quando o sinal dsp_duracaorecuocilindro for mantido acionado por cinco segundos. Perceba que a alteração foi feita somente na interface de entrada, mantendo assim o núcleo do sistema intacto. É muito importante tomar cuidado ao observar este exemplo de modo isolado. Aparentemente é fácil pensar que a proteção de núcleo não gerou um resultado tão impressionante, e que acabou aumentando um código originalmente bem simples. Porém, quanto maior e mais complexo for o sistema, maior será o benefício oferecido pela técnica em relação à manutenção de código. O exemplo aqui serviu somente para demonstrar como aplicá-la e provar que é possível modificar o software sem comprometer a parte do código responsável pela inteligência do sistema. www.branqs.com.br Página 14 de 24

Intertravamento por alarme É comum encontrar no mercado várias empresas que fornecem uma listagem do programa LADDER juntamente com a documentação de seu equipamento. É curioso refletir porque isso acontece. O motivo mais plausível é que tal informação ajuda muito a equipe de manutenção a identificar os motivos da "não realização" de uma determinada função pelo equipamento. Por incrível que pareça, esse tipo de iniciativa acaba sendo necessária porque muitos programas possuem deficiências não percebidas por seus desenvolvedores. Para exemplificar melhor, vamos analisar o código da lógica de recuo do cilindro existente no núcleo do programa da máquina de tampar potes: //Núcleo (pressionoubotaorecuocilindro) (cilindrorecuado) (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. Como já dito anteriormente, este tipo de situação é extremamente comum. Em situações como essa, a listagem LADDER é necessária para permitir ao técnico descobrir o que está impedindo o movimento. Eles analisam o código e percebem que o comando não é realizado porque o programa considera que o cilindro já está recuado. Infelizmente até ser reconhecida a causa, predomina aquela sensação de problema no painel de controle da máquina. 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

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. Analise abaixo a alteração realizada no código do núcleo da máquina de tampar potes para contemplar o padrão de intertravamento por alarme. //Solicitações (pressionoubotaorecuocilindro) (solicitarecuocilindro).. Solicitações de outras funções. //Alarmes E (solicitarecuocilindro) (cilindrorecuado) (alarmecilindrorecuado).. Alarmes de outras funções. //Comandos (solicitarecuocilindro) (alarmecilindrorecuado) (comandorecuocilindro).. Comando de outras funções. Dessa forma, o impedimento da função é realizado através de um alarme. Considerando que alarmes tem um papel essencial em sistemas de automação, é bem provável que essa informação seja automaticamente apresentada na IHM do equipamento, alertando assim o operador. É importante lembrar que esta estrutura determina que as solicitações de todas as funções sejam feitas inicialmente, seguidas do bloco de alarmes e por último o bloco de comandos. Agora, atenção! O "Ministério dos Curiosos em Programação" adverte: Depois que você experimenta essa técnica, nunca mais aceita trabalhar sem ela. www.branqs.com.br Página 16 de 24

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. 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. Nível 4 - Interrompe todos os movimentos da máquina Este nível foi criado para impedir o acionamento de qualquer função do equipamento. Para isso, deve ser inserido em série na lógica de comando de todas as funções do sistema. Exemplo: //Comandos (solicitarecuocilindro) (alarmecilindrorecuado) (alarmenivel4) (comandorecuocilindro) Nível 3 - Desliga equipamentos Este nível normalmente é usado para desligar equipamentos que possuem energia potencial, evitando assim a geração de trabalho em situações onde isso não é desejado. É aplicado em situações extremas de parada incondicional, onde os equipamentos bloqueados normalmente são representados por motores e circuitos de alimentação. Dessa forma, existindo algum alarme que necessite provocar o desligamento de equipamentos deste tipo, basta classificá-lo como nível 3. Nível 2 - Interrompe o início do próximo ciclo automático Este nível de alarme é usado em situações onde o alarme ocorrido não necessita interromper imediatamente o funcionamento da máquina, mas sim evitar que um novo ciclo automático seja iniciado. Mais adiante iremos representar sua utilização juntamente com o método de sequenciamento automático. www.branqs.com.br Página 17 de 24

Nível 1 - Somente informativo Este nível é usado somente para classificar os alarmes que não foram incluídos nos níveis acima. Consideramos uma boa prática utilizá-lo, pois assim fica explícito no código a decisão tomada pelo projetista, evitando que a não classificação em níveis superiores seja interpretada como esquecimento. Classificação dos alarmes em níveis A classificação dos alarmes em níveis deve ser realizada imediatamente após o bloco da lógica de alarmes e antes do bloco de comandos. Exemplo: //Alarmes.. Bloco de alarmes. //Níveis de alarmes OU OU OU (alarmecilindrorecuado) (alarmecilindronaorecuado) (alarmeesteiraligada) (alarmenivel1) (alarmeproducaoconcluida) (alarmenivel2) (alarmebotaoemergenciapressionado) (alarmenivel3) (alarmeproblemasegurancahidraulica) (alarmenivel3) (alarmenivel4) //Comandos.. Bloco de comandos. A adoção desta técnica permite termos mais controle sobre as exceções que podem ocorrer durante o funcionamento do equipamento. Além disso 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, pois em vários casos, basta a reclassificação de um alarme em um nível diferente para atingirmos os resultados desejados. www.branqs.com.br Página 18 de 24

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. Iniciamos a discussão apresentando um diagrama SFC simplificado, que demonstra o funcionamento desejado para a máquina de tampar potes em automático Esperando Start Pressionou START Recua cilindro. Liga motor da esteira Cilindro recuado Desliga motor da esteira Avança cilindro Bordo de subida do pote embaixo do cilindro Terminou tempo de avanço O diagrama acima representa os passos (retângulos) do ciclo automático, e as condições de transição (linhas) entre um passo e outro. Perceba que existe um passo inicial chamado Esperando Start, e um retorno ao passo Recua cilindro após satisfazer a condição Terminou tempo de avanço. Nossa proposta é apresentar uma estrutura que possa reproduzir exatamente o diagrama acima, oferecendo sinais que poderão ser utilizados nos blocos de solicitações apresentados anteriormente. Dessa forma, com o mínimo de alterações no programa, implementamos o código do ciclo automático que aproveita todas as seguranças e intertravamentos previamente definidos no modo manual. Para entendermos esta construção, apresentamos em seguida uma estrutura básica da lógica de definição de cada passo do ciclo automático. Esta estrutura é inspirada pelo método de cadeias estacionárias, porém acrescenta detalhes referentes às técnicas anteriormente comentadas. www.branqs.com.br Página 19 de 24

Estrutura básica de cada passo do sequenciador E OU E (passoanterior) (condiçãotransição) (alarmenivel4) (passoatual) (automatico) (próximopasso) (passoatual) Abaixo podemos ver a mesma estrutura representada em LADDER: passo Anterior condição Transição alarme Nivel4 automatico proximo Passo 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. Os dois primeiros sinais ( passoanterior e condiçãotransição ) definem a lógica de acionamento do passo atual. Ao ser acionado, o passoatual retém seu estado por ter sido utilizado em paralelo com toda a lógica inicial do bloco (normalmente chamamos isto de selo ). O passoatual só será desacionado quando a máquina sair do modo automático ou quando a condição do próximopasso for satisfeita. Seguindo este método, apresentamos o código responsável em habilitar as variáveis (passos) que nos ajudarão a controlar o ciclo automático da máquina de tampar potes conforme o diagrama SFC. www.branqs.com.br Página 20 de 24

Ciclo automático da máquina de tampar potes (automatico) SUBIDA (alarmenivel4) OU (autoesperandostart) E (automatico) (autorecuacilindro) (autoesperandostart) E OU OU E E OU E E OU E E OU E (autoesperandostart) (teclastart) (autofimciclo) (alarmenivel4) (alarmenivel2) (autorecuacilindro) (automatico) (autoligamotoresteira) (autorecuacilindro) (autorecuacilindro) (cilindrorecuado) (alarmenivel4) (autoligamotoresteira) (automatico) (autoavancacilindro) (autoligamotoresteira) (autoligamotoresteira) (potechegouembaixocilindro) (alarmenivel4) (autoavancacilindro) (automatico) (autofimciclo) (autoavancacilindro) (autoavancacilindro) (cilindroavancado) (alarmenivel4) (autofimciclo) (automatico) (autorecuacilindro) (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