(Parte 1 de 3)

p// microcontroladores mmiiccrroocchhiip PIC Autor: Daniel Corteletti Centro Tecnológico de Mecatrônica SENAI

Ladder: É uma linguagem de programação gráfica, em forma de diagrama, que por ser de fácil criação e interpretação e representar ligações físicas entre componentes eletrônicos (sensores e atuadores), acaba sendo bastante utilizada em ambiente industrial.

Em um diagrama LADDER simples, podemos encontrar três tipos de elementos básicos:

1) CONTATO (Contact): É o elemento que representa o sensor, ou seja, a entrada de sinal no bloco de controle lógico. Pode ser uma chave, um sensor reflexivo, um final de curso ou até mesmo o contato de algum relé auxiliar.

motor, uma lâmpada, um atuador auditivo, etc

2) BOBINA (coiL): É o elemento atuador, ou seja, o elemento acionado ou desligado pelo bloco de controle lógico. Pode ser uma contactora, um

3) MEMÓRIA ou Relé Interno (Internal Relay): É a representação do estado de um contato ou bobina em memória, sem conexão direta com elementos externos.

Existem ainda outros elementos auxiliares que permitem realizar operações mais complexas, como temporização, contagem e manipulação de dados. Estes elementos serão discutidos na segunda parte deste tutorial.

Veja o exemplo de um diagrama LADDER:

Para este diagrama, temos o controle de 3 elementos, sendo estes M1, MOT e CIL1. Estes elemendos podem ser BOBINAS (ATUADORES) ou MEMÓRIAS (relés internos).

Os elementos S1, S2, BE, VC e S3 só aparecem ao lado esquerdo do diagrama, no formato de colchetes [ ], o que pressupõe que sejam sensores (entradas).

Na primeira linha, observamos que a regra do programa define que a saída M1 irá ativar somente se os sensores S1 e S2 estiverem AMBOS ligados.

Na segunda linha deste programa, observa-se que a regra determina que a saída MOT irá ligar se BE estiver DESLIGADO (a barra significa inversão) e se M1 ou MOT estiver acionado (ao menos um destes).

Na terceira linha, observa-se que o atuador CIL1 irá ativar caso o sensor FC estiver DESLIGADO (novamente observe a barra), e se o sensor S3 estiver acionado.

Existem ainda algumas outras regras importantes sobre programação LADDER:

1) Não é permitido (ou pelo menos recomendado) o uso de uma mesma bobina (saída) em mais de uma linha, pois as regras irão conflitar. Por exemplo, não poderíamos inserir no diagrama anteriormente representado mais uma linha que acionasse o atuador CIL1. 2) Existe a possibilidade, em algumas variações da linguagem, do uso do comando SET e RESET (liga e desliga) que determina em que momento um determinado atuador irá ligar ou desligar. 3) Existem blocos especiais que permitem temporizar, detectar pulso, borda, contagem e outros recursos. Isso pode variar conforme a linguagem utilizada.

A linguagem LADDER nasceu na necessidade de facilitar a programação em ambientes industriais, remetendo para uma linguagem de alto nível e fácil de ser utilizada. No entanto existe um programa, (LDMICRO) de Jonathan Westhues, que permite a programação LADDER de microcontroladores, que viabiliza o estudo e implementação de controles de baixíssimo custo.

Este software é muito versátil, não requer instalação (basta executar o arquivo ldmicro.exe em ambiente windows ou emulador compatível), e é de livre distribuição, como podemos ver na janela abaixo, extraída do próprio HELP do programa em questão:

O LDMICRO funciona da seguinte forma: 1) Inicie o programa executável (LDMICRO.EXE). Será exibida a seguinte tela:

É neste ambiente que você pode gerar o programa LADDER para microcontrolador.

Para inserir uma bobina, pressione L.

Você notará que será construída (ou complementada) a linha editada com a bobina indicada. É permitido inserir mais de uma bobina para a mesma linha.

Clicando duas vezes sobre a bobina criada, será aberta a caixa de propriedade da bobina:

Se a bobina for definida (no campo Source) como INTERNAL RELAY, o nome da bobina no diagrama ladder será precedido pela letra R. Exemplo: Se o nome da bobina for new (como no exemplo acima), e se esta for definida como Internal Relay, será exibida como Rnew.

Se a bobina for definida como PIN ON

MCU, o nome da bobina será precedido pela letra Y (no caso do exemplo, Ynew).

Observe que ao se inserir um contato ou bobina, será respeitada a posição do cursor (barra piscante) para definir o local da inserção. Ou seja, para inserir uma bobina ou contato abaixo de outra, posicione primeiro o cursor na posição horizontal.

Para inserir um contato: Posicione o cursor no local desejado, e pressione C.

Note que surgirá um campo definido por colchetes --] [--- com o nome

Xnew. Clique duas vezes sobre este item para abrir a caixa de propriedades do contato.

No campo source, você pode definir se o contato é um relé interno (memória). Para este caso, note que o nome do contato será precedido pela letra R. Se for definido como INPUT PIN (padrão), o contato é um sensor, uma entrada de sinal digital. Neste caso, o nome do contato será precedido pela letra X (como no exemplo acima: Xnew).

Se você desejar usar uma bobina como contato (isso é possível em ladder), basta ativar a opção OUTPUT PIN. Neste caso o nome do elemento inserido será precedido pela letra Y.

A caixa [/] define que a entrada funcionará negada (com lógica invertida), ou seja, aciona zerando o contato, e desativa ligando o contato.

Prática:

Tente agora montar o seguinte diagrama LADDER usando os recursos acima citados:

Depois de editar este programa (observe que os elementos usados são somente e exatamente XBOTLIGA, XBOTDESL, YMOTOR). Não deve haver nenhum outro elemento no programa.

Após escrever seu programa, salve-o clicando em FILE -> SAVE AS

Salve como um arquivo com extensão LD.

A partir deste momento, observe no painel da parte inferior da janela o estado dos contatos e das bobinas. Basta dar um DUPLO CLICK sobre o item para mudar seu estado. Teste alterando o estado dos sensores, e veja se o programa funciona.

Para gerar um arquivo HEX a partir deste programa, basta seguir estes passos:

1) Clique em SETTINGS MICROCONTROLER e defina qual o microcontrolador a ser utilizado. Para melhor funcionamento, clique em

SETTINGS MCU PARAMETERS e defina o valor do cristal de clock utilizado. O padrão é 4MHz. 2) Agora de um duplo clique sobre cada elemento DIGITAL IN ou DIGITAL OUT da parte inferior da janela, associando cada CONTATO ou BOBINA a um pino do microcontrolador.

gerado. IMPORTANTE: Não esqueça de colocar a extensão HEX. Ex: PROG.HEX. Caso você não informe a extensão, ficará mais difícil achá-la depois com o programa de gravação (EPIC, ICPROG, etc...)

Inserir nova linhashift V ou shift 6
Compara se é maior ou igual

Comandos mais usados: Inserir um comentário ponto e vírgula Detecta borda subida / Detecta borda descida \ Temporizar para desligar F Temporizar para ligar O Temporizar para ligar retentivo T Contador incremental U Contador decremental I Contador circular J Compara igualdade = Compara se é maior > Compara se é menor < Compara se é menor ou igual , Insere BOBINA L Insere Contato C Insere reset de contador E Carrega variável c/ valor M Insere operação soma + Insere operação subtração - Insere operação multiplic. * Insere operação de divisão D Leitura de analógico P

Exercícios: Tente executar os seguintes programas LADDER no microcontrolador: 1)

Obs: Para inserir uma linha, use SHIFT + V Observe os nomes CORRETOS dos itens envolvidos:

XB1 : Botoeira 1 do sistema bi-manual. XB2 : Botoeira 2 do sistema bi-manual. XEMERGENCIA: Botão emergência. Se OK, está em 1. Pressionado em 0. YMORSA : Atuador MORSA, que prende a peça. Liga com um bot. press. YPRENSA : Atuador PRENSA, somente liga quando press. os 2 botões. YBUZZER : Alerta sonoro. Deve indicar emergência acionada (em zero). RPISCA : Relé auxiliar que ficará piscando a cada 400 ms.

2) Tente adicionar um sensor de peça no sistema acima. Caso a peça não seja detectada, a morsa não deve ligar.

3) Agora adicione também um sinal sonoro indicando se um botão foi pressionado e a peça não foi colocada.

2) Tente criar o esquema ladder para um portão de garagem. Usem os seguintes elementos:

XBOTAO : Botão do controle remoto. XABERTO: Sensor de final de curso que determina que o portão está aberto

XFECHADO: Sensor de final de curso que determina que o portão está fechado

XIMPACTO: Sensor de impacto. Detecta que o portão colidiu em algo. YMOT_ABRE: Motor que move o portão no sentido de abrir. YMOT_FECHA: Motor que move o portão no sentido de fechar.

Use sua criatividade. Simule o programa no ambiente ladder, e na estação c/ microcontrolador PIC. Bom trabalho.

Para maiores informações:

Prof. Daniel Corteletti daniel@mecatronica.org.br

PARTE 2: DESCRIÇÃO DOS COMANDOS LDmicro

1. Inserção de comentário 2. Inserção de contato 3. Detecção de borda de subida (pulso) 4. Detecção de borda de descida (pulso) 5. Temporização para ligar 6. Temporização para desligar 7. Temporização retentiva para ligar 8. Contador incremento 9. Contador decremento 10. Contador circular 1. Comparação – igual 12. Comparação – diferente 13. Comparação – maior 14. Comparação – maior ou igual 15. Comparação – menor 16. Comparação – menor ou igual 17. Circuito aberto 18. Circuito fechado 19. Relé de controle principal (geral) 20. Inserir bobina 21. Inserir reset de contador / timer 2. Movimentação de dados (atribuição) 23. Adição (16 bits) 24. Subtração (16 bits) 25. Multiplicação (16 bits) 26. Divisão (16 bits) 27. Registrador de deslocamento 28. Tabela (look-up) 29. Tabela de valores (associação linear) 30. String formatada pela serial 31. Insere saída pela serial 32. Insere entrada pela serial 3. Ativa PWM 34. Insere leitura A/D 35. Define valor como persistente em EEPROM

Tradução do HELP do LDmicro, documento de Jonathan Westhues, realizada por Daniel Corteletti, em dezembro de 2007

LDmicro gera código nativo para certos microcontroladores Microchip PIC16 e Atmel AVR. Usualmente, o programa para estes microcontroladores é escrito em uma linguagem de programação como assembly, C ou BASIC. Um programa em uma destas linguagens compreende uma série de estruturas complexas e adequadas à arquitetura do processador em questão. Os PLCs (controladores lógico-programáveis), por outro lado, na sua maioria são programados em ‘ladder logic’, uma simples linguagem de programação que se parece com isso:

||||
||Xbutton1 Tdon Rchatter Yred ||
||| ||
||Xbutton2 Tdof | ||
||-------]/[---------[TOF 2.0 s]-+||
||||
||||
||||
||Rchatter Ton Tnew Rchatter ||
||||
||||
||||
||||
||||

(TON é um temporizador para ativação, e TOF é um temporizador para desacionamento. Os elementos representados por colchetes (--] [--) são entradas, como contatos de relés. Os elementos ( ---( )--- )são saídas, e podem ser, entre outras coisas, bobinas de relés a serem acionados. Existem muitas referências sobre esta linguagem na internet, dentre as quais podemos citar:

* O programa é apresentado em um formato gráfico, e não como uma lista textual de elementos. Muitas pessoas acham muito mais fácil entender este tipo de programação, principalmente os principiantes.

* Em níveis mais básicos, o programa se parece muito com um diagrama elétrico de reles, com contatos e bobinas. O programa torna-se bastante intuitivo para programadores que conhecem teoria de circuitos elétricos.

* O compilador ladder fará os cálculos necessários para manter atualizadas as saídas. Você não terá que escrever código para determinar quando as saídas serão recalculadas e nem especificar a ordem e que estes cálculos serão executados; A ferramenta PLC fará isso por você.

LDmicro compila lógica ladder para código nativo de PIC16 e AVR. São suportados : * PIC16F877

* PIC16F88 (não testado)

* ATmega64

* ATmega162 (não testado)

* ATmega32 (não testado)

* ATmega16 (não testado)

* ATmega8 (não testado)

Poderia ser facilmente suportado uma faixa maior de microcontroladores PIC16 e AVR, mas eu não tenho como testar todos os modelos. Se você tiver um modelo em particular que deseja implementar, entre em contato comigo que verei o que posso fazer.

Usando LDmicro, você poderá escrever um diagrama ladder. Você pode sumular a lógica em tempo real no seu PC. E quando você estiver certo que o programa está correto, você pode associar os pinos do microcontrolador as entradas e saídas da lógica ladder. Após é possível gerar o código HEX e transferi-lo para a memória ROM do microcontrolador usando um programador adequado.

LDmicro é desenvolvido para ser similar à maioria dos sistemas de programação de PLCs comerciais existentes. Há algumas exceções, e algumas coisas não são padrão industrial. Leia atentamente a descrição destas instruções, e algumas serão familiares. Este documento assume que há um conhecimento básico em lógica ladder e de estruturas de um software de PLC (o ciclo de execução: ler entradas, processar, atualizar saídas)

É também possível gerar código C ANSI. Você poderá usar com um processo envolvendo um compilador C, mas você será responsável por desenvolver o “runtime”. Isso significa que o LDmicro somente gera código para uma função PlcCycle(). Você deve implementar a chamada a função PlcCycle a cada ciclo de execução, e você deve implementar toda a parte de leitura e escrita nas entradas e saídas digitais. Veja os comentários gerados no programa fonte para maiores detalhes.

E finalmente, LDmicro pode gerar bytecode independente do processador para uma máquina virtual desenhada para rodar lógica ladder. Eu disponibilizei um exemplo de implementação de um interpretador (máquina virtual) escrita em linguagem C. Este pode então rodar em qualquer plataforma onde você consiga instalar a máquina virtual. Isso significa que você pode usar em aplicações onde você deseja usar ladder com uma “linguagem script”, para padronizar o programa. Veja os comentários nos exemplos de interpretador para detalhes.

ldmicro.exe é geralmente executado sem opções de linha de commando. Isso signfica que você pode crier um atalho para o programa, ou simplesmente executá-lo diretamente da área de trabalho ou pasta onde está salvo.

Se o LDmicro for executado em linha de comando, passando-se como parâmetro o nome de um arquivo ld, (como ‘ldmicro.exe asd.ld'), então o programa será iniciado abrindo o arquivo indicado (no caso asd.ld’). Se não existir, será será exibida uma mensagem de erro. Isso significa que você pode associar a extensão ld ao LDmicro, e assim abrir LD os arquivos diretamente ao clicar sobre eles.

Se o LDmicro é chamado passando-se argumentos pela linha de comando, como ‘ldmicro.exe /c src.ld dest.hex', ele irá tentar compilar o arquivo src.ld e gerar o arquivo dest.hex. LDmicro irá sair após a compilação, e possíveis mensagens de erro serão exibidas via linha de comando. Isso é útil quando se deseja usar o LDmicro como compilador em modo linha de comando.

Se você rodar LDmicro sem argumentos, ele iniciará vazio, pronto para edição de um novo programa. LDmicro não importa formatos de outras ferramentas ladder.

Se você não executar um programa existente então você iniciará a construção de um programa novo, com uma linha (degrau) vazia. Então você pode adicionar uma instrução: por exemplo, você pode adicionar um conjunto de contatos (Instruction -> Inser Contacts) denominados ‘Xnew’. ‘X’ significa que o contato é ligado fisicamente a uma entrada do microcontrolador. Você poderá associar o pino correto posteriormente, após escolher o microcontrolador e finalizar os contatos do diagrama. A primeira letra do nome de um elemento indica que tipo de objeto se trata. Por exemplo:

(Parte 1 de 3)

Comentários