Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
Voc notar que ser construda (ou complementada) a linha editada com a
bobina indicada. permitido inserir mais de uma bobina para a mesma linha.
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.
SALVANDO
Aps escrever seu programa, salve-o clicando em FILE -> SAVE AS...
Salve como um arquivo com extenso LD.
SIMULANDO
Para gerar um arquivo HEX a partir deste programa, basta seguir estes
passos:
1)
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]---------------------------------------------------------||
|| ||
|| ||
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.
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.
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:
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.
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.
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.
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.
INSTRUES
==========
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.
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]-
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.
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.
(x0, y0) = ( 0, 0)
(x1, y1) = (300, 300)
(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.
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.
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:
|| {DIV y :=} ||
||-----------{ 1200 / x }-----------||
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
======================
|| 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.
Agradecimentos:
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.
Jonathan Westhues