Lógica Ladder para microcontroladores PIC and AVR

Extraído de http://cq.cx/ladder-pt.html em 21/07/2-13

(translated from the English original; thanks to Daniel Corteletti)

Resumo: Escrevi um compilador que permite gerar código nativo para microcontroladores PIC16 e AVR a partir de um diagrama ladder. Suas características são:

  • Entradas e saídas digitais
  • Temporizadores (TON, TOF, RTO)
  • Contadores (CTU, CTD, ‘contadores circulares’ para usar como sequenciadores)
  • Entradas analógicas e saídas (PWM) analógicas
  • Variáveis inteiras e instruções aritméticas
  • Comunicação serial facilitada para conexão a PCs, LCDs e outros dispositivos
  • Registradores de deslocamento, tabelas “look-up”
  • Variáveis em EEPROM (que mantêm os dados quando falta energia elétrica)
  • Simulador, para testar seu programa antes de gerar o código PIC ou AVR.

Este programa é livre. O código fonte e executáveis estão disponíveis para download.

Introdução

PLCs (Circuitos Lógicos Programáveis) são geralmente programados em lógica ladder. Isso porquê os PLCs originalmente substituíram sistemas de controle baseados em lógica de relés, e quarenta anos depois, ainda permanecemos utilizando esta linguagem. Um PLC, assim como um microprocessador, executa uma lista de instruções em seqüência. Ferramentas ladder deixam isso transparente; você pode programar o PLC ligando os contatos de relés e bobinas na tela, e o interpretador PLC irá simular o circuito que você desenhou. Alguns contatos de relés podem ser ligados a sinais de entrada reais; Algumas das bobinas podem ser ligadas a saídas. Desta forma, você pode fazer a simulação de seu circuito e interagir com outros dispositivos, e até controlar coisas. Este é o objetivo.

Na verdade ele é mais amplo do que isso, porque você pode incorporar temporizadores e contadores e operações aritméticas que não poderiam ser (facilmente) executados somente com relês convencionais. O projeto do circuito ainda é útil não só porque ele é intuitivo, mas também porque abstrai facilmente a concorrência. Isso funciona assim:

         ||       Xa               Xb              Yout       ||
       1 ||-------] [------+-------] [------+-------( )-------||
         ||                |                |                 ||
         ||                |       Xc       |                 ||
         ||                +-------]/[------+                 ||

Isto é um simples trecho de uma lógica de combinações. Existem os termos de entrada , Xa, Xb e Xc. Existem termos de saída: Yout. A expressão é Yout := Xa e (Xb ou (não Xc)). Isso faz mais sentido se você pensar em Xa e Xb como relés de contato NA (normalmente aberto), Xc como um relé de contato NF (normalmente fechado) e Yout como uma bobina de um relé ou contactora. Claro que podemos encontrar circuitos mais complexos, como o que segue:

         ||                                                   ||
         ||                                      Asetpoint    ||
       1 ||-------------------------------------{READ ADC}----||
         ||                                                   ||
         ||                                    Atemperature   ||
         ||-------------------------------------{READ ADC}----||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                        {SUB  min_temp  :=}        ||
       2 ||------------------------{ Asetpoint - 20  }--------||
         ||                                                   ||
         ||                        {ADD  max_temp  :=}        ||
         ||------------------------{ Asetpoint + 20  }--------||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||[Atemperature >]                       Yheater     ||
       3 ||[ max_temp     ]+------------------------(R)-------||
         ||                |                                  ||
         ||     Xenable    |                                  ||
         ||-------]/[------+                                  ||
         ||                                                   ||
         ||[Atemperature <]      Xenable          Yheater     ||
         ||[ min_temp     ]--------] [--------------(S)-------||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                       {SUB  check_temp  :=}       ||
       4 ||-----------------------{ Asetpoint - 30    }-------||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||[Atemperature >]                       Yis_hot     ||
       5 ||[ check_temp   ]-------------------------( )-------||
         ||                                                   ||
         ||                                                   ||
         ||                                                   ||
         ||------[END]----------------------------------------||
         ||                                                   ||
         ||                                                   ||

Trata-se de um simples termostato. Há duas entradas analógicas; uma delas é para o set point, para que seja possível, por exemplo, ligar um potenciômetro para o usuário definir a temperatura desejada. A outra é usada para medições de temperatura, conectado a um sensor de temperatura baseado em semicondutores, ou um termopar com interface apropriada. Existe uma saída digital, Yheater. Isso pode ser usado para controlar um elemento de aquecimento, através de um comutador apropriado (um TRIAC, ou um relé, ou um relé de estado sólido, ou seja o que for).

O ciclo foi fechado com uma  simples histerese. Nos definimos mais ou menos 20 unidades do ADC para histerese. Isso significa que quando a temperatura cai abaixo (setpoint – 20), será ligado o aquecimento. e quando isso ultrapassar (setpoint + 20), o aquecimento será desligado.

Eu ainda acresci algumas coisinhas. Primeiramente, há uma entrada de ativação: o aquecedor é forçado a desligar quando Xenable está em nível baixo. Eu também adicionei uma lâmpada indicadora, Yis_hot, para indicar que a temperatura está na faixa pretendida. Isso é feito de modo a comparar continuamente com o limite imposto (setpoint-20) de forma que a luz não fique piscando nos ciclos normais do termostato.

Este é um exemplo trivial, mas deve ficar claro que a linguagem é bastante expressiva. Logica ladder não é uma linguagem de propósito geral, mas é uma linguagem “Turing-completa”, aceita na industria, e, para uma classe limitada de problemas (orientados a controle), surpreendentemente conveniente.

Um compilador de lógica ladder para PIC16 e AVR

Acredita-se que os microcontroladores modernos de baixo custo (abaixo de US$ 3,00) passaram a ter o poder computacional de um PLC a partir de 1975. Eles passaram a processar mais MIPS para rodar uma lógica ladder relativamente complexa com um ciclo de vida de alguns milisegundos. Eu penso que PLCs normalmente tem uma espécie de programa do tipo “interpretador” ou “máquina virtual”, mas se desejarmos realizar uma lógica simples em um processador sem muita memória então um compilador pode ser uma idéia melhor.

Então eu escrevi um compilador. Você começa com um degrau (linha) vazio. Você pode adicionar contatos (entrada) e bobinas (saídas) e estruturas mais complicadas para construir seus programas. Temporizadores (TON, TOF, RTO) também são suportados. As durações máximas e mínimas dependem do ciclo de tempo do ‘PLC’, o qual é configurável; Os temporizadores podem contar deste milisegundos até dezenas de minutos. Á contadores e operações aritméticas (adição, subtração, multiplicação, divisão).

Elementos de circuito podem ser adicionados em série ou em paralelo com outros elementos existentes. E uma lista de entradas e saídas é construída a partir do diagrama lógico traçado. Você tem relês internos (Rfoo), que usam posições de memória alocadas automaticamente, ou entradas (Xfoo) e saídas (Yfoo), para associar a pinos do microcontrolador. A seleção dos pinos disponíveis depende do microcontrolador. Tentamos manter suporte para a maioria dos mais populares microcontroladores PICs e AVRs (veja abaixo).

Você pode editar o programa na forma gráfica:

ladder-sample

Então você pode testar o programa simulando-o em tempo real. O programa aparecera na tela com os elementos ativados (ligados) representados por colchetes em uma cor mais intensa, o que torna fácil a depuração. O estado das variáveis é mostrado na parte de baixo da tela, na lista de entradas e saídas (I/O list).

ladder-sim

Depois do programa ter funcionado na simulação, você pode associar pinos para as entradas e saídas, gerar o código PIC ou AVR. A geração do código não é difícil.  Para o AVR, um bom alocador de registradores proverá uma maior velocidade. Se você quer ter uma otimização de código ainda mais apurada, poderá aplicar algumas regras de redução de algoritmos, e talvez redução de estados também. Isso seria muito mais difícil.

Mesmo ignorando isso, meu código gerador para os AVRs é muito pobre. O “back end” AVR ainda gera código PIC… por exemplo, ele não tira vantagem do fato do AVR ter mais de um registrador. Muitos dos códigos gerados ficam pouco otimizados. O “back end” para PIC é melhor, e não é muito grande. Mas nada disso importa muito se você estiver tentando rodar algumas dezenas de degraus de uma lógica ladder com tempo de ciclo rápido.

Há suporte para conversor A/D, unidade PWM e UART nos microcontroladores utilizados. Isso significa que você pode escrever lógica ladder que leia uma entrada analógica, e que possa enviar e receber caracteres pela serial (por exemplo, para um PC, se você adicionar um MAX232, ou um display LCD de caracteres). Isso é possível mandando seqüência de caracteres através da serial, assim como o valor de variáveis inteiras, como texto ASCII. E por último, fora adicionado suporte a variáveis em EEPROM; Você pode indicar que  uma variável específica irá ser salva automaticamente em uma área de memória não volátil, que será mantida ao se desconectar a energia.

Limitações e isenção de responsabilidades

Naturalmente um microcontrolador com este software não pode fazer tudo que um PLC faz. Muitos PLCs oferecem mais características e blocos predefinidos que minha ferramenta. O Hardware de um PLC é melhor também; usualmente as entradas e saídas são projetadas para suportar alterações elétricas. Você pode montar um PIC16F877 em uma protoboard por alguma dezena de dólares, mas você pagará mais caro por um PLC com as mesmas capacidades.

Até agora, tenho recebido muito poucos relatos de erros, em comparação com o número de pessoas com perguntas e dúvidas. Existe ainda uma grande possibilidade de defeitos, especialmente nos microcontroladores que não tenho fisicamente (e portanto, não podemos testar). Certamente, não use o LDmicro para alguma aplicação segura ou crítica, ou em algo que possa se torar caro se isso falhar.

Com citado anteriormente, o código gerado está longe do “otimo”. Também, nem toda a memória RAM nos dispositivos PIC16 está disponível para o programa na lógica ladder. Isso porque não implementei muito código para suporte a paginação. Eu fiz, no entanto, suporte para a memória de paginação do programa, para permitir acesso a memória ROM nos PIC16 acima de 2k.

Download (instalação)

O programa é testado sobre Windows XP. Relatos informais sugerem que ele pode trabalhar sobre windows 98, a sobre o Wine. O arquivo de download é um arquivo .exe; não há outro arquivo requerido, e não há arquivo de instalação. Salve-o em algum lugar no seu computer, e execute-o. O manual está incluído no arquivo .exe, mas você pode realizar download separadamente se você desejar.

O compilador irá gerar arquivos no formato Intel IHEX. Muitos dos softwares programadores que eu tenho usam este formato. Naturalmente você irá precisar de um programador para transferir o programa para a memória do microcontrolador. Para os AVRs, eu recomendo o tipo STK300, paralelo, como o Olimex. Para os PICs, eu recomendo o Microchip PICkit 2, como o disponível nesta loja virtual.

Agradecemos relatórios de erros. Os seguintes microcontroladores foram testados e são suportados:

  • PIC16F877
  • PIC16F876
  • PIC16F628
  • ATmega64
  • ATmega128

Os microcontroladores abaixo são suportados, mas não foram testados; eles devem funcionar, mas não há garantia. Se você testar, e isso funcionar adequadamente, entre em contato comunicando. Nós agradecemos.

  • PIC16F88
  • PIC16F819
  • ATmega162
  • ATmega32
  • ATmega16
  • ATmega8

O arquivo ladder também é possível se gerar código C. Isso é menos conveniente, mas você pode usar isso em algum processador se você possuir um compilador C.

LDmicro pode gerar um código interpretável. Se estiver escrevendo um interpretador você pode usa-lo para gerar o código ladder para outro tipo de dispositivo. Não há mita documentação sobre isso, mas eu construí um interpretador simples em linguagem C bastante portável.

 

As compilações são disponíveis em diversas línguas:

  • ldmicro.exe (English)
  • ldmicro-de.exe (Deutsch; thanks to Heinz Ullrich Noell)
  • ldmicro-fr.exe (Français; thanks to Marcel Vaufleury)
  • ldmicro-es.exe (Español; thanks to Jose Pascual)

E o código fonte, e vários outros arquivos, também estão disponíveis para download. Este programa pode ser distribuído sob os termos da GPL Version 3.

  • ldmicro-rel1.7.zip (fonte, release 1.7)
  • ldmicro.txt (manual)
  • características / histórico de erros
  • Exemplo: um semáforo simples
  • Exemplo: display de 7 segmentos
  • Exemplo: ‘hello, world;’ enviado pela porta serial

Versões antigas estão disponíveis:

  • ldmicro-rel1.6.zip (fonte, release 1.6)

(botão direito para salvar qualquer um destes arquivos.)

Por favor, relate qualquer defeito.  Este é um software livre, sem nenhum departamento responsável pelo controle de qualidade. Eu mesmo não tenho o hardware para testar a maioria dos dispositivos. Um erro não informado não poderá ser corrigido.

Tenho um tutorial, no qual eu descrevo como gerar um simples diagrama ladder, simulá-lo e então gerar o arquivo IHEX e programá-lo no PIC. Esta é provavelmente a maneira mais fácil de começar a usar este software.

Entendendo as diferenças entre Hacker e Cracker

Autor: Bruno Rosa

Originalmente, e para certos programadores, hackers (singular: hacker) indivíduos que elaboram e modificam software e hardware de computadores, seja desenvolvendo funcionalidades novas, seja adaptando as antigas.

Originário do inglês, o termo hacker é utilizado no português concomitantemente com a forma traduzida, decifradores. Os Hackers utilizam toda a seu conhecimento para melhorar softwares de forma legal. Eles geralmente são de classe média e alta, com idade de 12 a 28 anos, além de a maioria dos hackers serem usuários avançados de Software Livre como o Linux. A verdadeira expressão para invasores de computadores é denominada Cracker e o termo designa programadores maliciosos e ciberpiratas que agem com o intuito de violar ilegal ou imoralmente sistemas cibernéticos.

A controvérsia sobre o termo

Etimologicamente está relacionado ao verbo cortar nas línguas germânicas. O termo desenvolveu-se vindo a ser associado ao ato de modificar ou inventar algo para realizar funcionalidades que não as originais. As atividades criativas e originais de um inventor ou mecânico seriam o equivalente de hacking, “hackear” na língua portuguesa.

A palavra “hack” nasceu num grupo chamado PST chamado Tech Model RailRoad Club (TMRC) na década de 50. Membros do clube(soldier e ChAoS) chamavam as modificações inteligentes que faziam nos relês eletrônicos de ‘hacks’. Quando as máquinas TX-0 e PDP-1 chegaram ao mercado os membros do TMRC começaram a utilizar o mesmo jargão para descrever o que eles estavam fazendo com a programação de computadores. Isso continuou por anos até mesmo quando novas máquinas como o PDP-6 e depois o PDP-10 apareceram. O termo passou a ser usado com diversos significados: sucessos em determinadas áreas, fosse como uma solução não óbvia e particularmente elegante para um problema, ou uma partida inteligente pregada a alguém, ou ligar os sistemas informáticos e telefônicos para fazer chamadas grátis. Eventualmente, o termo passou a ser utilizado exclusivamente na áreas da programação ou eletrônica, em que passou a ser usado para designar indivíduos que demonstravam capacidades excepcionais nestes campos, efetivamente expandindo-os com atividades práticas e artísticas.

Desde o início do século, empresas brasileiras de informática (como a filial Microsoft do Brasil) usam o substantivo decifrador em respeito a língua lusófona. A forma portuguesa da palavra é constante nas guias de ajuda do Windows Vista e nas páginas da IBM Brasil e Google Brasil.

O que o TMRC (Tech Model RailRoad Club) diz a respeito do ‘hacking’:

Nós aqui no TMRC usamos os termo ‘hacker’ só com o seu significado original, alguém que aplica o seu engenho para conseguir um resultado inteligente, o que é chamado de ‘hack’. A essência de um ‘hack’ é que ele é feito rapidamente, e geralmente não tem elegância. Ele atinge os seus objetivos sem modificar o projeto total do sistema onde ele está inserido. Apesar de não se encaixar no design geral do sistema um ‘hack’ é em geral rápido, esperto e eficiente. O significado inicial e benevolente se destaca ao significado recente e mais utilizado da palavra “hacker”, sendo a pessoa que geralmente invade redes de computadores com a intenção de roubar ou vandalizar. Aqui no TMRC, onde a palavra “hack” e “hacker” foram criadas e são usadas com orgulho desde a década de 50, ficamos ofendidos o uso indevido da palavra para descrever atos ilegais. Pessoas que cometem tais coisas são mais bem descritas por expressões como ladrões, “cracker de senhas” ou “vândalos de computadores”. Eles com certeza não são verdadeiros “hackers” já que não entendem os valores “hacker”. Não há nada de errado com o “hacking” ou em ser um “hacker”.

O termo “hacker, é erradamente confundido com “cracker”, os “crakers” são peritos em informática também só que eles fazem o mau uso de seus conhecimentos utilizando para danificar quaisquer tipos de componentes eletrônicos, sendo que os hackers usam seu conhecimentos para a ajuda e aprimoramento de seus componentes

Ética hacker

Existe uma ética hacker. Equivocadamente é usado referindo-se a pessoas relativamente sem habilidade em programação e sem ética, como criminosos que quebram a segurança de sistemas, agindo ilegalmente e fora da ética hacker. O problema é quando os crackers e script kiddies são referidos como hackers pela imprensa, por falta de conhecimento, e com isto gerando uma discussão sem fim.

Nesse sentido, os hackers seriam as pessoas que criaram a Internet, fizeram do sistema operacional Unix o que ele é hoje, mantêm a Usenet, fazem a World Wide Web funcionar, e mantém a cultura de desenvolvimento livre conhecida atualmente. É comum o uso da palavra hacker fora do contexto eletrônico/computacional, sendo utilizada para definir não somente as pessoas ligadas a informática, mas sim os especialistas que praticam o hacking em diversas áreas.

Cultura hacker

É importante lembrar que existe toda uma cultura por trás desse sentido da palavra hacker. A Cultura hacker define diversos pontos para estilo e atitude e, por mais que pareça estranho, muitas das pessoas que se tornam os chamados programadores extraordionários possuem esse estilo e atitude naturalmente e casual.

O termo hoje também é usado para representar todos os que são bons naquilo que fazem, como os artesãos que usavam como principal ferramenta de trabalho o machado, ou Picasso com sua arte fabulosa, eles foram os primeiros hackers. Atualmente o termo indica um bom especialista em qualquer área. Este termo adquiriu esta definição somente após seu uso na informática, designando especialistas em computação.

Os hackers e crackers são indíviduos da sociedade moderna, e possuem conhecimentos avançados na área tecnológica e de informática, mas a diferença básica entre eles é que os hackers somente constróem coisas para o bem e os crackers destróem, porém constróem somente para fins pessoais.

Os termos utilizados na segurança da informação, para diferenciar os tipos de hacker/cracker são:

1) White hat

White hat (hacker ético): vem do inglês “chapéu branco” e indica um hacker interessado em segurança. Utiliza os seus conhecimentos na exploração e detecção de erros de concepção, dentro da lei. A atitude típica de um white hat assim que encontra falhas de segurança é a de entrar em contacto com os responsáveis pelo sistema e informar sobre o erro, para que medidas sejam tomadas. Um white hat pode ser comparado a um policial ou vigilante, buscando as falhas para corrigí-las. Encontramos hackers white hats ministrando palestras (ou aulas em universidades) sobre segurança de sistemas, e até trabalhando dentro de empresas para garantir a segurança dos dados. Por causa do sentido pejorativo que a mídia associa ao termo “hacker”, normalmente o hacker white hat não é publicamente chamados de hacker e sim de especialista em TI, analista de sistema ou outro cargo na área de informática. No entanto, realmente são hackers.

2) Gray hat

Gray hat – Tem as habilidades e intenções de um hacker de chapéu branco na maioria dos casos, mas por vezes utiliza seu conhecimento para propósitos menos nobres. Um hacker de chapéu cinza pode ser descrito como um hacker de chapéu branco que às vezes veste um chapéu preto para cumprir sua própria agenda. Hackers de chapéu cinza tipicamente se enquadram em outro tipo de ética, que diz ser aceitável penetrar em sistemas desde que o hacker não cometa roubo, vandalismo ou infrinja a confidencialidade. Alguns argumentam, no entanto, que o ato de penetrar em um sistema por si só já é antiético (ética hacker). podemos destacar algums grupo tribushackers

3) Black hat

Black hat,(cracker ou dark-side hacker), indica um hacker criminoso ou malicioso, comparável a um terrorista. Em geral são de perfil abusivo ou rebelde, muito bem descritos pelo termo “hacker do lado negro” (uma analogia à série de filmes Star Wars). Geralmente especializado em invasões maliciosas e silenciosas, são os hackers que não possuem ética.

4) Newbie

Newbie, Noob ou a sigla NB, vem do inglês “novato”. Indica uma pessoa aprendiz na área, ainda sem muita habilidade, porém possui uma sede de conhecimento notável. Pergunta muito, mas freqüentemente é ignorado ou ridicularizado por outros novatos que já saibam mais do que ele (ao contrario dos lammers que são ridicularizados por todos). Hackers experientes normalmente não ridicularizam os novatos, por respeito ao desejo de aprender – no entanto, podem ignorá-los por falta de tempo ou paciência.

5) Phreaker

O termo Phreaker, corruptela do inglês “freak” que significa “maluco”, essencialmente significa a mesma coisa que o original “hacker”, no entanto é um decifrador aplicado à area de telefonia (móvel ou fixa). No uso atual, entende-se que um Hacker modifica computadores, e um Phreaker modifica telefones (experimente discar no seu telefone batendo sucessivas vezes no gancho ao invés de usar o teclado do aparelho, e você estará sendo um phreaker). Os Phreakers também se enquadram no conceito de White hat ou Black hat.

6) Cracker

O termo Cracker, do inglês “quebrador”, originalmente significa alguém que “quebra” sistemas. Hoje em dia, pode tanto significar alguém que quebra sistemas de segurança na intenção de obter proveito pessoal (como por exemplo modificar um programa para que ele não precise mais ser pago), como também pode ser um termo genérico para um Black Hat.

7) Lammer

O termo Lammer indica uma pessoa que acredita que é um hacker (decifrador), demonstra grande arrogância, no entanto sabe pouco ou muito pouco e é geralmente malicioso. Utilizam ferramentas criadas por Crackers para demonstrar sua suposta capacidade ou poder, na intenção de competir por reputação, no entanto são extremamente inconvenientes para convívio social, mesmo com outros hackers. Algumas pessoas acreditam que essa é uma fase natural do aprendizado, principalmente quando o conhecimento vem antes da maturidade.

Fonte do Artigo no Artigonal.com: http://www.artigonal.com/ti-artigos/entendendo-as-diferencas-entre-hacker-e-cracker-3353750.html

Perfil do Autor

Bruno é administrador de sistemas linux, analista de sistemas e CEO do SempiHost | hospedagem de sites – Serviço de hospedagem de sites no Brasil.