Você está na página 1de 23

LINGUAGEM LADDER p/ microcontroladores microchip PIC

Autor: Daniel Corteletti Centro Tecnolgico de Mecatrnica SENAI

Ladder: uma linguagem de programao grfica, em forma de diagrama, que por ser de fcil criao e interpretao e representar ligaes fsicas entre componentes eletrnicos (sensores e atuadores), acaba sendo bastante utilizada em ambiente industrial. Em um diagrama LADDER simples, podemos encontrar trs tipos de elementos bsicos: 1) CONTATO (Contact): o elemento que representa o sensor, ou seja, a entrada de sinal no bloco de controle lgico. Pode ser uma chave, um sensor reflexivo, um final de curso ou at mesmo o contato de algum rel auxiliar.

2) BOBINA (coiL): o elemento atuador, ou seja, o elemento acionado ou desligado pelo bloco de controle lgico. Pode ser uma contactora, um motor, uma lmpada, um atuador auditivo, etc...

3) MEMRIA ou Rel Interno (Internal Relay): a representao do estado de um contato ou bobina em memria, sem conexo direta com elementos externos.

Existem ainda outros elementos auxiliares que permitem realizar operaes mais complexas, como temporizao, contagem e manipulao de dados. Estes elementos sero 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 MEMRIAS (rels internos). Os elementos S1, S2, BE, VC e S3 s aparecem ao lado esquerdo do diagrama, no formato de colchetes [ ], o que pressupe que sejam sensores (entradas). Na primeira linha, observamos que a regra do programa define que a sada 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 sada MOT ir ligar se BE estiver DESLIGADO (a barra significa inverso) 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 programao LADDER: 1) No permitido (ou pelo menos recomendado) o uso de uma mesma bobina (sada) em mais de uma linha, pois as regras iro conflitar. Por exemplo, no poderamos inserir no diagrama anteriormente representado mais uma linha que acionasse o atuador CIL1. 2) Existe a possibilidade, em algumas variaes 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.

LADDER PARA MICROCONTROLADOR PIC O LDMICRO A linguagem LADDER nasceu na necessidade de facilitar a programao em ambientes industriais, remetendo para uma linguagem de alto nvel e fcil de ser utilizada. No entanto existe um programa, (LDMICRO) de Jonathan Westhues, que permite a programao LADDER de microcontroladores, que viabiliza o estudo e implementao de controles de baixssimo custo. Este software muito verstil, no requer instalao (basta executar o arquivo ldmicro.exe em ambiente windows ou emulador compatvel), e de livre distribuio, como podemos ver na janela abaixo, extrada do prprio HELP do programa em questo:

O LDMICRO funciona da seguinte forma: 1) Inicie o programa executvel (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 construda (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 posio do cursor (barra piscante) para definir o local da insero. Ou seja, para inserir uma bobina ou contato abaixo de outra, posicione primeiro o cursor na posio 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 (memria). Para este caso, note que o nome do contato ser precedido pela letra R. Se for definido como INPUT PIN (padro), 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 possvel em ladder), basta ativar a opo OUTPUT PIN. Neste caso o nome do elemento inserido ser precedido pela letra Y. A caixa [/] define que a entrada funcionar negada (com lgica invertida), ou seja, aciona zerando o contato, e desativa ligando o contato.

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

Depois de editar este programa (observe que os elementos usados so somente e exatamente XBOTLIGA, XBOTDESL, YMOTOR). No deve haver nenhum outro elemento no programa. SALVANDO Aps escrever seu programa, salve-o clicando em FILE -> SAVE AS... Salve como um arquivo com extenso LD. SIMULANDO Com o programa salvo, para simular o programa, clique em SIMULATE SIMULATION MODE, e posteriormente em SIMULATE START REAL TIME SIMULATION. 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.

COMPILANDO 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 padro 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. 3) Agora clique em COMPILE COMPILE AS.. e indique o nome do arquivo a ser gerado. IMPORTANTE: No esquea de colocar a extenso HEX. Ex: PROG.HEX. Caso voc no informe a extenso, ficar mais difcil ach-la depois com o programa de gravao (EPIC, ICPROG, etc...) Comandos mais usados:
Inserir nova linha Inserir um comentrio Detecta borda subida Detecta borda descida Temporizar para desligar Temporizar para ligar Temporizar para ligar retentivo Contador incremental Contador decremental Contador circular Compara igualdade Compara se maior Compara se menor Compara se maior ou igual Compara se menor ou igual Insere BOBINA Insere Contato Insere reset de contador Carrega varivel c/ valor Insere operao soma Insere operao subtrao Insere operao multiplic. Insere operao de diviso Leitura de analgico shift V ou shift 6 ponto e vrgula / \ F O T U I J = > < . , L C E M + * D P

Exerccios: 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: Boto emergncia. Se OK, est em 1. Pressionado em 0. YMORSA : Atuador MORSA, que prende a pea. Liga com um bot. press. YPRENSA : Atuador PRENSA, somente liga quando press. os 2 botes. YBUZZER : Alerta sonoro. Deve indicar emergncia acionada (em zero). RPISCA : Rel auxiliar que ficar piscando a cada 400 ms. 2) Tente adicionar um sensor de pea no sistema acima. Caso a pea no seja detectada, a morsa no deve ligar. 3) Agora adicione tambm um sinal sonoro indicando se um boto foi pressionado e a pea no foi colocada.

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

XBOTAO : Boto do controle remoto. XABERTO: Sensor de final de curso que determina que o porto est aberto XFECHADO: Sensor de final de curso que determina que o porto est fechado XIMPACTO: Sensor de impacto. Detecta que o porto colidiu em algo. YMOT_ABRE: Motor que move o porto no sentido de abrir. YMOT_FECHA: Motor que move o porto no sentido de fechar. Use sua criatividade. Simule o programa no ambiente ladder, e na estao c/ microcontrolador PIC. Bom trabalho.

Para maiores informaes: Prof. Daniel Corteletti daniel@mecatronica.org.br

PARTE 2: DESCRIO DOS COMANDOS LDmicro 1. Insero de comentrio 2. Insero de contato 3. Deteco de borda de subida (pulso) 4. Deteco de borda de descida (pulso) 5. Temporizao para ligar 6. Temporizao para desligar 7. Temporizao retentiva para ligar 8. Contador incremento 9. Contador decremento 10. Contador circular 11. Comparao igual 12. Comparao diferente 13. Comparao maior 14. Comparao maior ou igual 15. Comparao menor 16. Comparao menor ou igual 17. Circuito aberto 18. Circuito fechado 19. Rel de controle principal (geral) 20. Inserir bobina 21. Inserir reset de contador / timer 22. Movimentao de dados (atribuio) 23. Adio (16 bits) 24. Subtrao (16 bits) 25. Multiplicao (16 bits) 26. Diviso (16 bits) 27. Registrador de deslocamento 28. Tabela (look-up) 29. Tabela de valores (associao linear) 30. String formatada pela serial 31. Insere sada pela serial 32. Insere entrada pela serial 33. Ativa PWM 34. Insere leitura A/D 35. Define valor como persistente em EEPROM

Traduo do HELP do LDmicro, documento de Jonathan Westhues, realizada por Daniel Corteletti, em dezembro de 2007
Introduo ============ LDmicro gera cdigo nativo para certos microcontroladores Microchip PIC16 e Atmel AVR. Usualmente, o programa para estes microcontroladores escrito em uma linguagem de programao como assembly, C ou BASIC. Um programa em uma destas linguagens compreende uma srie de estruturas complexas e adequadas arquitetura do processador em questo. Os PLCs (controladores lgico-programveis), por outro lado, na sua maioria so programados em ladder logic, uma simples linguagem de programao que se parece com isso: || || || Xbutton1 Tdon Rchatter Yred || 1 ||-------]/[---------[TON 1.000 s]-+-------]/[--------------( )-------|| || | || || Xbutton2 Tdof | || ||-------]/[---------[TOF 2.000 s]-+ || || || || || || || || Rchatter Ton Tnew Rchatter || 2 ||-------]/[---------[TON 1.000 s]----[TOF 1.000 s]---------( )-------|| || || || || || || ||------[END]---------------------------------------------------------|| || || || || (TON um temporizador para ativao, e TOF um temporizador para desacionamento. Os elementos representados por colchetes (--] [--) so entradas, como contatos de rels. Os elementos ( ---( )--- )so sadas, e podem ser, entre outras coisas, bobinas de rels a serem acionados. Existem muitas referncias sobre esta linguagem na internet, dentre as quais podemos citar: * O programa apresentado em um formato grfico, e no como uma lista textual de elementos. Muitas pessoas acham muito mais fcil entender este tipo de programao, principalmente os principiantes. * Em nveis mais bsicos, o programa se parece muito com um diagrama eltrico de reles, com contatos e bobinas. O programa torna-se bastante intuitivo para programadores que conhecem teoria de circuitos eltricos. * O compilador ladder far os clculos necessrios para manter atualizadas as sadas. Voc no ter que escrever cdigo para determinar quando as sadas sero recalculadas e nem especificar a ordem e que estes clculos sero executados; A ferramenta PLC far isso por voc. LDmicro compila lgica ladder para cdigo nativo de PIC16 e AVR. So suportados : * PIC16F877 * PIC16F628 * PIC16F876 (no testado) * PIC16F88 (no testado) * PIC16F819 (no testado) * ATmega128 * ATmega64 * ATmega162 (no testado) * ATmega32 (no testado) * ATmega16 (no testado) * ATmega8 (no testado)

Poderia ser facilmente suportado uma faixa maior de microcontroladores PIC16 e AVR, mas eu no 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 lgica 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 sadas da lgica ladder. Aps possvel gerar o cdigo HEX e transferi-lo para a memria ROM do microcontrolador usando um programador adequado. LDmicro desenvolvido para ser similar maioria dos sistemas de programao de PLCs comerciais existentes. H algumas excees, e algumas coisas no so padro industrial. Leia atentamente a descrio destas instrues, e algumas sero familiares. Este documento assume que h um conhecimento bsico em lgica ladder e de estruturas de um software de PLC (o ciclo de execuo: ler entradas, processar, atualizar sadas)

CARACTERSTICAS ADICIONAIS ========================== tambm possvel gerar cdigo C ANSI. Voc poder usar com um processo envolvendo um compilador C, mas voc ser responsvel por desenvolver o runtime. Isso significa que o LDmicro somente gera cdigo para uma funo PlcCycle(). Voc deve implementar a chamada a funo PlcCycle a cada ciclo de execuo, e voc deve implementar toda a parte de leitura e escrita nas entradas e sadas digitais. Veja os comentrios gerados no programa fonte para maiores detalhes. E finalmente, LDmicro pode gerar bytecode independente do processador para uma mquina virtual desenhada para rodar lgica ladder. Eu disponibilizei um exemplo de implementao de um interpretador (mquina virtual) escrita em linguagem C. Este pode ento rodar em qualquer plataforma onde voc consiga instalar a mquina virtual. Isso significa que voc pode usar em aplicaes onde voc deseja usar ladder com uma linguagem script, para padronizar o programa. Veja os comentrios nos exemplos de interpretador para detalhes.

OPES DE LINHA DE COMANDO ========================== ldmicro.exe geralmente executado sem opes 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 parmetro o nome de um arquivo ld, (como ldmicro.exe asd.ld'), ento o programa ser iniciado abrindo o arquivo indicado (no caso `asd.ld). Se no existir, ser ser exibida uma mensagem de erro. Isso significa que voc pode associar a extenso 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 aps a compilao, e possveis mensagens de erro sero exibidas via linha de comando. Isso til quando se deseja usar o LDmicro como compilador em modo linha de comando. PRINCIPIOS ========== Se voc rodar LDmicro sem argumentos, ele iniciar vazio, pronto para edio de um novo programa. LDmicro no importa formatos de outras ferramentas ladder.

Se voc no executar um programa existente ento voc iniciar a construo de um programa novo, com uma linha (degrau) vazia. Ento voc pode adicionar uma instruo: 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, aps 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: * * * * * * * Xnome Ynome Rnome Tnome Cnome Anome nome entrada. um contato. Sada. uma bobina. rel interno. um bit de memria um timer. um contador um inteiro lido do conversor A/D uma varivel inteira de uso geral

Escolha o resto do nome de acordo com a funo do objeto, tendo certeza que o nome nico no programa. Objetos com o mesmo nome referem-se ao mesmo objeto (lembrando que Xnome e Ynome no so o mesmo nome, e portanto so objetos diferentes). Por exemplo, se voc tiver um erro ao ter um TON delay chamado Tdelay e um TOF delay chamado Tdelay no mesmo programa, haver problema pois os elementos utilizaro o mesmo contador no programa. Por outro lado, s vezes isso necessrio, como no caso de haver um RTO chamado Tdelay e uma instruo RES (reset) associada a mesma varivel Tdelay para causar o reset deste temporizador retentivo. O nome das variveis pode ser composto por letras, nmeros e underscores (_). O nome das variveis no podem iniciar com nmeros, e diferenciado maisculas de minsculas. As instrues para variveis (MOV, ADD, EQU, etc.) podem trabalhar em variveis com qualquer nome. Isso quer dizer que estas instrues tambm podem acessar contadores e acumuladores. Isso pode ser bastante til, principalmente no caso de comparao de contadores ou temporizadores com uma determinada faixa de valores. Variveis so sempre inteiros de 16 bits com sinal. Isso significa que a faixa suportada de -32768 a 32767. Voc pode atribuir a estas variveis valores constantes, caracteres ASCII (A, z) sempre colocando o caractere entre aspas simples. Na parte de baixo da tela, voc poder ver uma lista de todos os objetos do programa. Esta lista automaticamente gerada a partir do programa. No necessrio atualizada manualmente. Muitos objetos no precisam de nenhuma configurao. Objetos do tipo Xname, Yname e Aname sempre precisam ser associados a pinos do microcontrolador. Mas primeiro, escola o microcontrolador a ser utilizado, usando (Senttings -> Microcontroller). Ento associe seus pinos de I/O clicando duas vezes sobre o item da lista. Voc pode modificar o programa inserindo ou apagando instrues. O cursor piscante no programa indica a instruo e o ponto de insero. Se ele no estiver piscando, ento pressione <TAB> ou clique em uma instruo. Quando estiver selecionada, a instruo pode ser apagada, podem ser inseridas novas instrues ( direita, esquerda) em srie ou (acima e abaixo) em paralelo. Algumas operaes no so permitidas. Por exemplo, no podemos inserir instrues direita de uma bobina (coil). O programa inicia com um nico degrau (linha). Voc pode adicionar mais linhas selecionando as opes Insert Rung Before e Insert Rung After no menu EDIT. Assim que voc terminar de escrever um programa, voc pode test-lo na simulao, e ento gerar o arquivo HEX para transferir memria ROM do microcontrolador.

SIMULAO ========= Para entrar no modo simulao, escolha SIMULATE -> SIMULATION MODE ou pressione CTRL + M. O programa ir ficar diferente em modo de simulao (outras cores, e sem cursor). As instrues ativas (energizadas) aparecero em uma cor mais intensa, e as instrues inativas aparecero em uma cor mais fraca. Pressionando a barra de espao, a simulao ocorrer em um ciclo. Caso queira realizar a simulao em modo contnuo, escolha SIMULAR -> START REAL-TIME SIMULATION ou pressione <Ctrl + R>. As linhas do programa iro ser atualizadas conforme as modificaes provenientes da lgica do programa ocorrerem. Voc pode mudar o estado das entradas do programa pressionando um duplo click na lista na parte inferior da janela, ou dando um duplo click sobre o contato na janela do programa.

COMPILANDO PARA CDIGO NATIVO ============================= O objetivo final do processo gerar um arquivo HEX, que pode ser transferido para a memria do microcontrolador. Primeiramente, precisamos selecionar o tipo de microcontrolador, na opo SETTINGS -> MICROCONTROLER. Ento voc pode associar um pino de I/O para cada objeto. Faa isso clicando duas vezes sobre cada elemento not assigned da lista que h na parte inferior da tela. Surgir uma janela de seleo contendo os pinos no alocados at o momento. Ento voc dever selecionar o tempo de ciclo desejado para o processo em questo, e tambm definir qual o CLOCK do sistema para que os temporizadores sejam incrementados corretamente. Geralmente o tempo de ciclo padro de 10ms suficiente para a maioria das aplicaes. Estas opes so modificadas no menu SETTINGS -> MCU Parameters... Agora voc pode gerar cdigo para seu programa. Escolha COMPILE -> COMPILE, ou COMPILE -> COMPILE AS... caso deseje gerar o programa HEX com outro nome. Se no houver problemas ou erros, o LDMICRO ir gerar o arquivo HEX para posterior programao do microcontrolador escolhido. Use um programador qualquer adequado ao seu hardware para transferir o arquivo HEX para o microcontrolador. Lembre de definir os bits de configurao (fuses). Para o PIC16, os bits de configurao estaro includos no arquivo HEX, e muitos programas de programao vo selecionar estes padres adequadamente de forma automtica. Para processadores AVR, voc deve definir os bits de configurao manualmente.

INSTRUES ========== > CONTATO, NORMALMENTE ABERTO Xname Rname Yname ----] [-------] [-------] [---Tecla de atalho : C Pode ser aplicado : Pinos de entrada, Pinos de sada e Rels internos Se o sinal da instruo (contato) falso, a sada de sinal tambm ser falsa. Interprete como uma chave com conexes em contato normalmente aberto, que quando acionado fecha o circuito.

> CONTATO, NORMALMENTE FECHADO Xname Rname Yname ----]/[-------]/[-------]/[---Tecla de atalho : C Pode ser aplicado : Pinos de entrada, Pinos de sada, Rels internos Se o sinal entrar de entrada for falso, a sada verdadeira. Se o sinal de entrada for verdadeiro, a sada falsa. Entenda como uma chave com conexes em

contato normalmente fechado, que quando acionada ir abrir o circuito, interrompendo a passagem de sinal. Esta instruo similar a anterior, com a diferena da opo |\|Negated ativada.

> BOBINA (COIL), NORMAL

Rname ----( )----

Yname ----( )----

Tecla de atalho: L Aplica-se : Rel interno e pinos de sada Se o sinal vindo das instrues verdadeiro, ento a sada em questo ir ser ativada. Se o sinal falso (circuito aberto), a sada ser desativada. Esta instruo sempre estar mais a direita possvel no diagrama ladder. Podem ser inseridas em paralelo, mas no em srie.

> BOBINA (COIL), NEGATED

Rname ----(/)----

Yname ----(/)----

Tecla de atalho: L Aplica-se : Rel interno e pinos de sada Se o sinal que vai instruo verdadeiro, ento a sada em questo desativada. Caso o sinal de entrada seja falso (circuito aberto), a sada ser ativada. Similar instruo anterior com o valor invertido.

> BOBINA (COIL), SET-ONLY

Rname ----(S)----

Yname ----(S)----

Tecla de atalho: L Aplica-se : Rel interno e pinos de sada Com esta opo, estabelece-se que a sada em questo ir ter seu estado modificado para ATIVADO quando a entrada de sinal for verdadeira, e no desativar quando o sinal de entrada for falso.

> BOBINA (COIL), RESET-ONLY

Rname ----(R)----

Yname ----(R)----

Se o sinal que chega a instruo for verdadeiro, ento o rel interno ou pino de sada ser desativado. Caso contrrio, o pino de sada ou rel interno no ter seu estado modificado. Esta instruo somente poder mudar o estado do pino de LIGADO para DESLIGADO, e geralmente isso utilizado em combinao com uma ao BOBINA SET-ONLY. Esta instruo deve ser a mais a direita possvel.

> RETARDO NA ENERGIZAO (TEMPORIZADOR)

Tdon -[TON 1.000 s]-

Quando o sinal que vai para a instruo comutar de DESLIGADO para LIGADO (borda de subida), a sada permanecer falsa por N segundos antes de ser ativado. Quando o sinal de entrada mudar de LIGADO para DESLIGADO, a sada ir para DESLIGADO imediatamente. O temporizador reiniciado sempre que a entrada estiver em nvel DESLIGADO. O tempo (N) configurvel. No exemplo, o valor de 1 segundo) O nome Tdon ir contar a partir de zero em unidades de scantimes. A instruo de sada TON ir proporcionar sada em nvel alto sempre que o contador de ciclos for igual ou superior ao delay escolhido. tambm possvel manitular esta varivel contadora Tdon, por exemplo com instrues de manipulao de dados como a instruo MOV.

> RETARDO NO DESLIGAMENTO (TURN OFF DELAY)

Tdoff -[TOF 1.000 s]-

Quando o sinal vindo da instruo muda de LIGADO para DESLIGADO, o sinal de sada ainda permanecer ativado por N segundos antes de desativar. Quando o sinal vindo da instruo mudar de DESLIGADO para LIGADO, a sada ir mudar para LIGADO imediatamente. O temporizador reiniciado sempre que a entrada mudar para nvel DESLIGADO. A entrada precisar estar desativada pelo tempo determinado para que a sada mude para estado FALSO. O tempo (N) configurvel. A varivel Tdoff uma varivel contadora crescente que inicia em zero, e incrementa em unidades de tempo de ciclo. possvel manipular esta varivel de tempo atravs de instrues de manipulao de dados, como a instruo MOV.

> TEMPORIZADOR RETENTIVO (RETENTIVE TIMER)

Trto -[RTO 1.000 s]-

Esta instruo est associada ao tempo de durao do pulso da entrada. Se a entrada permanecer ligada por mais de N segundos, a sada ser ativada. Em outro caso, a sada permanecer falsa. A entrada precisa permanecer acionada por, no mnimo, N segundos para ativar a sada, que uma vez ativada, assim o permanecer at que a varivel Trto em questo seja reiniciada, ou atravs de uma instruo manual de reset. possvel manipular o estado da varivel contadora de tempo atravs de instrues de manipulao de memria, como a instruo MOV ou RESET.

> RESET

Trto ----{RES}----

Citems ----{RES}----

Esta instruo reinicia um timer ou contador. Retardos do tipo TON e TOF so automaticamente reiniciados quando as suas entradas mudarem de estado, mas o temporizador retentivo no. O temporizador RTO, contadores CTU e CTD no so reiniciados automaticamente, e devem ser reiniciados manualmente usando a instruo RES. Quando a entrada verdadeira, o contador ou timer associado reiniciado. Esta instruo necessita ser a instruo mais a direita no degrau ladder produzido.

> BORDA DE SUBIDA (ONE-SHOT RISING)

_ --[OSR_/ ]--

Esta instruo produz, por padro, sada DESLIGADA. Se o sinal de entrada mudar durante o processo de DESLIGADO para LIGADO a sada ser ativada. Isso gera um pulso de um ciclo na sada, e pode ser usado para disparar eventos baseados na borda de subida de um sinal.

> BORDA DE DESCIDA (ONE-SHOT FALLING)

_ --[OSF \_]--

Esta instruo produz, por padro, sada DESLIGADA. Se o sinal de entrada mudar durante o processo de LIGADO para DESLIGADO a sada ser ativada. Isso gera um pulso de um ciclo na sada, e pode ser usado para disparar eventos baseados na borda de descida de um sinal.

> CIRCUITO FECHADO, CIRCUITO ABERTO (SHORT CIRCUIT, OPEN CIRCUIT) ----+----+-------+ +---A condio de sada de um CIRCUITO FECHADO sempre igual a sua condio de entrada, e o estado do sinal da sada de um CIRCUITO ABERTO sempre desligado. Isso pode ser til para depurar o programa em situaes de anlise e teste.

> REL PRINCIPAL (MASTER CONTROL RELAY) -{MASTER RLY}Por padro, todos os degraus tem condio de entrada LIGADA. Este rel principal realiza controle esta entrada, e pode desativar estas entradas. Dentro do ciclo do programa, podem ser adicionadas instrues para ativao e desativao parciais do MASTER RLY, sendo isso bastante til para depurao.

> MOVE

{destvar := } -{ 123 MOV}-

{Tret := -{ srcvar

} MOV}-

Quando o sinal de entrada desta instruo for LIGADO, a varivel de destino ser carregada com o valor da varivel de origem ou da constante. Se o sinal de entrada estiver DESLIGADO, nada acontece com a varivel. Voc pode utilizar a instruo MOVE com qualquer varivel, incluindo contadores e temporizadores. Esta instruo precisa ser a mais a direita no degrau de instrues.

> OPERAO ARITMTICA (ARITHMETIC OPERATION)

{ADD kay :=} -{ 'a' + 10 }{MUL dest :=} -{ var * -990 }-

{SUB Ccnt :=} -{ Ccnt - 10 }{DIV dv := } -{ dv / -10000}-

Quando o sinal de entrada desta instruo verdadeiro, a varivel de destino carregada com o resultado da expresso. Isso pode ser realizado tambm em variveis de contagem e temporizadores. Estas instrues aritmticas utilizam um processamento aritmtico de nmeros 16 bits com sinal. Cada ciclo de processamento desencadeia uma operao aritmtica, caso o sinal de entrada esteja verdadeiro. Se voc usar esta instruo para incrementar ou decrementar uma varivel, e isso estiver associado a um sinal de entrada (tipo um boto), use a instruo de borda de subida ou descida para que o incremento ou decremento ocorra somente em uma operao por pulso de entrada. A diviso truncada, e no arredondada. 8 / 3 resulta em 2. Esta instruo precisa ser a mais a direita no bloco (degrau) em uso. > COMPARAO (COMPARE) [var ==] -[ var2 ][var /=] -[ var2 ][var >] -[ 1 ][-4 < ] -[ vartwo][1 >=] -[ Ton][1 <=] -[ Cup]-

>

Se o sinal de entrada para esta instruo DESLIGADO, ento a sada tambm DESLIGADA. Se o sinal de entrada for LIGADO, ento a sada ser LIGADA se e somente se a instruo de comparao for verdadeira. Esta instruo pode ser usada para comparao (igual, maior que, maior e igual, diferente, menor que, menor e igual) entre variveis, ou para comparar uma varivel com uma constante numrica de 16 bits.

> (CONTADOR) COUNTER

Cname --[CTU >=5]--

Cname --[CTD >=5]--

Um contador incremental (CTU, conut up) ou decrementa (CTD, count down) associado deteo de borda de uma determinada condio de entrada. O sinal de sada desta instruo verdadeiro caso o valor do contador tenha atingido o valor limite. Voc pode utilizar instruo de incremento (CTU) e decremento (CTD) com variveis de mesmo nome, e a instruo RES para reiniciar o valor do mesmo.

> CONTADOR CIRCULAR (CIRCULAR COUNTER)

Cname --{CTC 0:7}--

Um contador circular trabalha como um contador normal, exceto pelo fato de, aps atingir o limite, ele reinicia voltando ao valor inicial. Por exemplo, o contador acima, se incrementado, contar 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, ... Isso pode ser muito til se combinado com estruturas condicionais na varivel Cname, podendo ser criado o efeito de seqenciador. CTC conta na borda de subida do sinal de entrada, e esta instruo deve ser a mais a direita no bloco (degrau) ladder.

> SHIFT REGISTER

{SHIFT REG -{ reg0..3

} }-

Um SHIFT REGISTER (Registrador de deslocamento) associado a um grupo de variveis. Por exemplo, este registrador pode ser associado com as variveis reg0, reg1, reg2 e reg3. A cada pulso (borda de subida) na entrada desta instruo, ocorre o deslocamento (reg3 reg2, reg2 reg1, reg1 reg0, e reg0 permanece inalterado). Observe que esta instruo consome uma rea significativa de memria, e deve ser usada com cuidado. Ela precisa ser a instruo mais direita no degrau em uso. > LOOK-UP TABLE {dest := -{ LUT[i] } }-

Uma tabela look-up um conjunto de n dados ordenados. Quando a condio de entrada for LIGADO, a varivel de destino dest ser carregada com o valor da varivel de origem na ocorrncia i. O ndice (i) inicia em zero. Esta instruo deve ser a mais a direita no degrau em uso.

> PIECEWISE LINEAR TABLE

{yvar := -{ PWL[xvar]

} }-

Esta a melhor forma de aproximar uma complicada funo de transformao no linear. Pode ser til, por exemplo, se voc tiver que associar os valores lidos a uma curva de calibrao baseado no valor de entrada de um sensor. Voc pode entrar com dados na tabela associando com um valor linear desejado. O valor ser atribudo a varivel xvar, e isso define o valor da varivel yvar. Se voc atribuir a varivel xvar um valor entre dois pontos lanados na tabela, o valor de yvar ser computado em funo da proximidade deste dois valores. Os pontos precisam ser especificados em ordem crescente em xvar. Em alguns casos, por questes matemticas e de limitaes do processamento aritmtico de 16 bits, o LDmicro poder gerar mensagens de erro relativas a converso. Neste caso, adicione mais dados tabela. Ex: Isso ir produzir um erro, se lanado estes dois pontos: (x0, y0) (x1, y1) = ( 0, 0) = (300, 300)

Que pode ser corrigido desta forma: (x0, y0) (x1, y1) (x2, y2) = ( 0, 0) = (150, 150) = (300, 300)

Em casos extremos pode ser necessrio usar mais de cinco ou seis pontos. Adicionando mais pontos o cdigo fica maior e mais lento para ser executado. A instruo precisa ser a mais direita do degrau em uso.

> A/D CONVERTER READ

Aname --{READ ADC}--

LDmicro pode gerar cdigo para usar o conversor A/D embutido em certos microcontroladores. Se a condio de entrada para esta instruo LIGADO, ento ser obtida uma simples amostra do conversor A/D e isso armazenado na varivel chamada Aname. Testa varivel pode ser manipulada com operaes genricas, como comparao e atribuio. Associe o pino varivel Axxx da mesma forma que associado um pino de entrada/sada digital, clicando duplamente na parte inferior da tela. Para todos os microcontroladores suportados atulamentente, Entradas de 0 Volts corresponde ao valor 0, e uma entrada na tenso mxima do sistema (Vdd) corresponde ao valor 1023 (AD de 10 bits). O software no ir permitir que voc associe pinos que no sejam entradas anlgicas s mesmas. Esta instruo precisa ser a mais a direita no degrau em uso.

> SET PWM DUTY CYCLE

duty_cycle -{PWM 32.8 kHz}-

LDmicro pode gerar cdigo para usar o perifrico PWM embutido em certos microcontroladores. Se a condio de entrada desta instruo for verdadeira, ento o duty cycle do perifrico PWMW definido com o valor da varivel duty_cycle. O duty cycle precisa ser um nmero entre 0 e 100, onde 0 corresponde a sempre desligado, e 100 corresponde a sempre ligado. (Se voc est familiarizado com o procedimento que os perifricos PWM utilizam, deve ter percebido que o LDmicro far a converso proporcional do nmero 0 a 100 em valores binrios correspondentes para os perodos de clock necessrios). Voc pode especificar a freqncia, em Hz. No entanto, a freqncia que voc especificar pode no ser a exata a ser utilizada, dependendo dos divisores internos do microcontrolador e da freqncia de clock utilizada por este. Se voc tentar definir um valor fora da faixa permitida, o LDmicro ir alert-lo. Esta instruo precisa ser a mais a direita no degrau em uso.

> MAKE PERSISTENT

saved_var --{PERSIST}--

Quando a instruo de entrada LIGADA, isso far com que determinada varivel seja salva na EEPROM. Isso significa que o valor persistir quando o sistema for desativado (desconectado da energia eltrica). No necessrio declarar o local onde a informao ser gravada, isso ocorrer de forma automtica, e a varivel ser automaticamente carregada quanto o sistema for reiniciado. Se o sistema abusar deste recurso, gravando muito freqentemente na eeprom, ento este recurso pode ser danificado, pois muitos sistemas garantem um limite de 100000 gravaes somente. Esta instruo precisa ser a mais a direita no degrau em uso.

> UART (SERIAL) RECEIVE

var --{UART RECV}--

LDmicro pode gerar cdigo para usar a UART embutida em certos microcontroladores. Nos AVRs com vrias UARTs, sometne a UART1 (no UART 0) ser suportada. Configure a taxa de transferncia (baud rate) usando a opo Settings MCU Parameters. Certas taxas podem no ser aceitas em certas faixas de freqncia de clock. LDmicro ir alert-lo, neste casos. Se a condio de entrada desta instruo for DESLIGADO, ento nada ir ocorrer. Caso contrrio a instruo tentar receber um simples caracter da UART. Se nenhum caracter for lido, ento a condio de sada ser FALSO. Se um caractere for lido, ento o mesmo ser armazenado na varivel var e a condio de sada da instruo ser LIGADO (por um nico ciclo de execuo).

> UART (SERIAL) SEND

var --{UART SEND}--

Se a entrada desta instruo estiver DESLIGADA, ento nada acontecer. Se a condio estiver LIGADA, a instruo ir enviar um simples caractere na UART. O valor ASCII do caractere a ser enviado deve ter sido previamente armazenado na varivel var. A opo de sada do degrau ser LIGADA enquanto a transmisso estiver ocorrendo, e DESLIGADO quando o processo terminar. Lembre que o caractere toma algum tempo para ser transmitido. Verifique a condio de sada para se certificar que o processo de transmisso do primeiro caractere terminou antes de enviar um segundo. Veja tambm a instruo FORMATTED STRING OVER UART, que muito mais prtica e fcil para enviar grandes trechos de dados.

> FORMATTED STRING OVER UART

var -{"Pressure: \3\r\n"}-

Quanto esta instruo utilizada (com sinal de entrada LIGADO), ela comea a enviar uma seqncia de caracteres (STRING) atravs da porta serial. Na string, onde houver a seqncia \3, ser substituda pela varivel em questo. O \3 significa que o valor ir tomar exatos 3 caracteres; Por exemplo, se a varivel var estiver comportando o valor 35, ento a string exata que ser enviada seri: Pressure: 35\r\n (observe o espao extra antes do nmero). Se, por outro lado, a varivel var poder assumir nmero de mais dgitos, como por exemplo o nmero 1432, ento dever ser mudada esta definio. Ser necessrio usar o \4. Se a varivel em questo poder assumir valores negativos, use \-3d ou \-4d. O dgito aparecer somente quando os valores forem negativos. Para valores positivos, o sinal ser substitudo por um espao. Se mltiplas strings formatadas forem acionadas simultaneamente (ou se uma for acionada antes de outra terminar), ou se estas instrues estiverem sendo usadas simultaneamente com instrues UART TX, o resultado poder ser indefinido. Isso permitido para que possa ser enviada uma simples string de dados, e pelo programa, disparar, em seqncia, os dados em outra linha. Use o caractere especial \\ para exibir uma contrabarra. Abaixo a lista de caracteres especiais que podem ser usados: * * * * * \r \n \f \b \xAB -----carriage return (retorno de carro. Volta para primeira coluna) newline (Nova linha.) formfeed (Alimenta formulrio. Geralmente usado como clear) backspace (Volta um caractere) character with ASCII value 0xAB (hex) (exibir carac. especial)

A sada desta instruo verdadeira enquanto ela estiver transmitindo dados. Esta instruo consome muita memria de programa, e deve ser usada com cuidado. Na implementao atual do LDMicro, esta funo no muito otimizada consumindo muito recurso de processamento.

Observaes ao usar recursos matemticos ======================================== Lembre que o LDmicro realiza somente instrues matemticas com inteiros de 16 bits. Isso significa que o resultado final de qualquer clculo que for realizado dever ser um valor inteiro entre -32768 e 327667. Isso tambm quer dizer que valores intermedirios de clculos tambm devem permanecer nesta faixa. Por exmeplo, supondo que voc queira calcular y = (1/x)*1200, onde x um valor entre 1 e 20. Ento y poder valer 1200 a 60, armazenados em uma varivel inteira de 16 bits. Para isso ser calculado, teoricamente h duas maneiras de se escrever o cdigo: || {DIV temp ||---------{ 1 / x || :=} || }----------|| ||

|| {MUL y := } || ||----------{ temp * 1200}----------|| || || Ou pode realizar a diviso em um passo nico : || {DIV y :=} || ||-----------{ 1200 / x }-----------|| Matematicamente, as duas so equivalents. Mas se voc test-las, poder observar que a primeira sempre dar o incorreto resultado de y = 0. Isso porque a varivel temp somente armazenar valores inteiros, e o resultado do primeiro degrau (1 / x) geralmente ser um nmero menor que 1 (para x = 3, tempo ser 0,3333...) e isso no possvel de se armazenar em uma varivel inteira. Se voc estiver tendo problemas nos resultados de suas equaes, verifique portanto os valores intermedirios, observando se nenhum valor gerado ir resultar em dados no armazenveis em variveis de 16 bits com sinal. Quando voc precisar multiplicar uma varivel por uma frao, use isso usando respectivamente as instrues de multiplicao e diviso. Por exemplo, para multiplicar y por 1.8 * x, calcule: y = (9/5)*x (lembrando que 9/5 = 1.8). E, no cdigo ladder, faa a multiplicao ocorrer antes da diviso. || {MUL temp :=} || ||---------{ x * 9 }----------|| || || || {DIV y :=} || ||-----------{ temp / 5 }-----------|| Isso funcionar para qualquer x < (32767 / 9), ou x < 3640. Para valores maiores de x, a varivel temp ir sair de seu limite.

Estilos de Codificao ====================== permitido mltiplas bobinas em paralelo significa que voc pode fazer coisas como isso: || Xa Ya || 1 ||-------] [--------------( )-------|| || || || Xb Yb || ||-------] [------+-------( )-------|| || | || || | Yc || || +-------( )-------|| || || No lugar disso: || Xa Ya || 1 ||-------] [--------------( )-------|| || || || || || || || || || Xb Yb || 2 ||-------] [--------------( )-------|| || || || || || || || || || Xb Yc || 3 ||-------] [--------------( )-------|| || || em um simples degrau. Isso

Isso permite que, em teoria, voc possa escrever programas em um nico degrau gigante. Na prtica isso pode no ser uma boa idia, porque os degraus ficaro mais complexos e mais difceis de serem editados, lidos e interpretados. Mesmo assim, isso pode ser uma boa idia para grupos de mesma relevncia lgica, tratando-as como um simples degrau. * * *

BUGS ==== LDmicro no gera um cdigo HEX muito eficiente. um pouco lento para ser executado e desperdia muita memria RAM e ROM. Em contrapartida, LDmicro com um microcontrolador de porte mdio (modelos PIC ou AVR) pode fazer tudo que um pequeno PLC pode, o que compensa esta baixa otimizao de recursos. O comprimento mximo do nome das variveis limitado. Programas danificados (arquivo .ld) podem executar cdigo inesperado. Por favor, reporte bugs adicionais ou requisitos ao autor. Agradecimentos: * Marcelo Solano, for reporting a UI bug under Win98 * Serge V. Polubarjev, for not only noticing that RA3:0 on the PIC16F628 didn't work but also telling me how to fix it * Maxim Ibragimov, for reporting and diagnosing major problems with the till-then-untested ATmega16 and ATmega162 targets * Bill Kishonti, for reporting that the simulator crashed when the ladder logic program divided by zero * Mohamed Tayae, for reporting that persistent variables were broken on the PIC16F628 * David Rothwell, for reporting several user interface bugs and a problem with the "Export as Text" function

COPIA, TERMO DE ISENO DE RISCOS e DIREITO AUTORAL =================================================== NO USE CDIGO GERADO POR LDMICRO EM APLICAES ONDE UMA FALHA DE SOFTWARE PODE RESUTLADR EM DANOS A VIDA HUMANA OU DANIFICAR PROPRIEDADE. O AUTOR NO ASSUME QUALQUER RESPONSABILIDADE POR QUAISQUER DANOS RESULTADOS PELA OPERAO DO LDMICRO OU CDIGO GERADOS PELO MESMO. Este programa um software livre: Voc pode redistribui-lo e/ou modificlo sob os termos da GNU (General Public License) publicado pela Free Software Foundation, na verso 3 da licena ou superior. Este programa distribudo na esperana de ser til, mas no h NENHUMA GARANTIA ASSOCIADA, sem nenhuma garantia, seja comercial ou particular. (veja GNU para maiores detalhes) Voc pode obter uma cpia do termo GNU em http://www.gnu.org/licences

Traduzido e adaptado do texto original de Jonathan Westhues por Daniel Corteletti

Jonathan Westhues Rijswijk Waterloo ON -- Dec 2004 -- Jun, Jul 2005

Cambridge MA

-- Sep, Dec 2005 Feb, Mar 2006 Feb 2007