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 shift V ou shift 6


Inserir um comentrio ponto e vrgula
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 maior ou igual .
Compara se menor ou igual ,
Insere BOBINA L
Insere Contato C
Insere reset de contador E
Carrega varivel c/ valor M
Insere operao soma +
Insere operao subtrao -
Insere operao multiplic. *
Insere operao de diviso D
Leitura de analgico 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 entrada. um contato.


* Ynome Sada. uma bobina.
* Rnome rel interno. um bit de memria
* Tnome um timer.
* Cnome um contador
* Anome um inteiro lido do conversor A/D
* nome - 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 Yname


----(S)---- ----(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 Yname


----(R)---- ----(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 Citems


----{RES}---- ----{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 := } {Tret := }


-{ 123 MOV}- -{ 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 {ADD kay :=} {SUB Ccnt :=}


(ARITHMETIC OPERATION) -{ 'a' + 10 }- -{ Ccnt - 10 }-

{MUL dest :=} {DIV dv := }


-{ var * -990 }- -{ 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 ==] [var >] [1 >=]


-[ var2 ]- -[ 1 ]- -[ Ton]-

> [var /=] [-4 < ] [1 <=]


-[ var2 ]- -[ vartwo]- -[ 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 Cname


--[CTU >=5]-- --[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) = ( 0, 0)
(x1, y1) = (300, 300)

Que pode ser corrigido desta forma:

(x0, y0) = ( 0, 0)
(x1, y1) = (150, 150)
(x2, y2) = (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 -- carriage return (retorno de carro. Volta para primeira coluna)


* \n -- newline (Nova linha.)
* \f -- formfeed (Alimenta formulrio. Geralmente usado como clear)
* \b -- backspace (Volta um caractere)
* \xAB -- 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 em um simples degrau. Isso


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 ||-------] [--------------( )-------||
|| ||
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 modific-


lo 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 -- Dec 2004


Waterloo ON -- Jun, Jul 2005
Cambridge MA -- Sep, Dec 2005
Feb, Mar 2006
Feb 2007

Você também pode gostar