sábado, 7 de agosto de 2010

Elevador - a demonstração

Ficou pronto o modelo de elevador de três andares para a demonstração do meu trabalho de conclusão de curso. Apresentei este trabalho na última semana e... foi aprovado!

Na realidade é quase um elevador pois, como bem observou a minha filha, decepcionada, não tem motor! Temos apenas um led vermelho e um verde indicando se o elevador deveria descer ou subir. Estou treinando um macaquinho para fazer isto...



A lógica de controle foi programada concebida em Ladder, mas programada em Instruction List, pois ainda não tenho um ambiente de desenvolvimento em Ladder.

O código está publicado em https://code.google.com/p/plcduino/ e os slides da apresentação foram postados no Slideshare e podem ser vistos abaixo.

domingo, 9 de maio de 2010

PLCDuino sabe contar

Nos últimos finais de semana implementei temporizadores e contadores no PLCDuino.

Para implementar os temporizadores usei a biblioteca MsTimer2 para gerar uma base de tempo de 1 segundo. Talvez acabe gerando uma base de tempo menor para melhorar a precisão quando os tempos gerados são pequenos (menores que 10s).

Quanto aos contadores, optei por implementar somente o contador CTUD (up and down) ao invés de implementar separadamente contadores que incrementam, que decrementam e híbridos.

O vídeo abaixo mostra o primeiro teste do contador CTUD.

sábado, 24 de abril de 2010

Sinais de Vida

Hoje o PLCDuino começou a mostrar sinais mais consistentes de vida. Já é possível executar os seguintes passos:

1) Escrever um programa bem básico usando Instruction List simplificado.
2) Compilar este programinha em um PC, transformando-o em um conjunto de instruções em código decimal.
3) Carregar este conjunto de instruções (manualmente ou copy/paste) no PLCDuino utilizando um emulador de terminal.
4) EXECUTAR!

Simples né?

Para isto tive que definir e implementar alguns conceitos importantes que irei esclarecendo aos poucos neste blog e no meu trabalho. O primeiro conceito é o dos modos de funcionamento.

O PLCDuino terá dois modos de funcionamento - Programação e Execução. No modo de programação o PLCDuino permitirá que, com o uso de um emulador de terminal (tipo o HyperTerminal do Windows), sejam alterados o programa de controle, a configuração das entradas/saídas e sejam realizadas operações de diagnóstico.

Sempre que o PLCDuino for reiniciado ele entrará temporáriamente no modo de programação. Caso não haja nenhum comando em um certo intervalo de tempo e haja um programa válido na memória, ele passará automáticamente para o modo de execução.

Para o primeiro teste fiz um programinha assim:

     LD   %I000/2
     STN  %Q001/5
     LD   %I000/4
     STN  %X000/0

Traduzindo:

LD %I000/2 - Le o bit 2 da entrada zero  (isto corresponde ao pino digital 2 do Arduino).

STN %Q001/5 - Armazena o valor lido no bit 5 da saída 1 (isto corresponde ao pino digital 13 do Arduino, que tem um led ligado).

LD %I000/4 - adivinhe...

STN %X000/0 - Armazena o valor lido no bit zero do byte de controle interno do PLCDuino (o bit zero do byte de controle, quando em zero, faz o PLCDuino sair do modo de execução e voltar para o modo de programação).



sábado, 20 de março de 2010

Arduino e Eclipse

Finalmente consegui usar o Eclipse como ambiente de desenvolvimento para o Arduino. Não sei bem o que havia acontecido da primeira vez que tentei, mas agora segui as instruções em http://www.chipkin.com/articles/using-eclipse-with-arduino-duemilanove e funcionou muito bem, exceto por duas coisas.

A primeira é que nas instruções o autor sugere alterar a linha do comando do linker para:

${COMMAND} –cref -s -Os ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} -lm ${FLAGS}

Eu havia passado por cima deste passo, por descuido, e funcionou. Quando fiz esta alteração, deixou de funcionar. Então, recomendo manter a configuração default do Eclipse que, no meu caso, era

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

A segunda, que o autor menciona no FAQ, é que sempre que vou carregar um novo programa, eu devo desconectar e conectar novamente a USB.

Fora isto, tudo bem...