Implementação de um Micro PLC em uma Plataforma Aberta de Baixo Custo<br />Renato Mintz<br />Trabalho de Conclusão de Curs...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
Arduino<br />Contexto<br />4<br />Arduino é uma plataforma aberta de hardware e software, de baixo custo, desenvolvida com...
Hardware<br />ATmega168 ou ATmega328<br />32K Flash, 2K SRAM, 1K EEPROM<br />14 pinos de entrada/saída digital<br />6 dele...
Software<br />C/C++ normal ou simplificado<br />Bibliotecas com código aberto<br />Expansões<br />Ethernet, Bluetooth, Zig...
Linguagens padrão IEC-61131-3<br />Contexto<br />Fonte: http://www.isa.org<br />Fonte: http://engineeronadisk.com<br />7<b...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
Programação usando Ladder<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino....
Programação usando Ladder<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino....
Programação usando LadderInstructionList<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em h...
Programação usando LadderInstructionList<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em h...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
Ambientes gráficos para Arduino<br />BrickLayer<br />ModKit<br />Iniciativas Semelhantes<br />14<br />
PLC Aberto<br />Beremiz<br />PLCOpen Editor – FBD, SFC, LD, ST, IL<br />MatPLC IEC Compiler – gera código em C<br />CANOpe...
Especifica um modelo de desenvolvimento para um PLC em ambiente RTLinux.<br />Seleciona um subconjunto de IL como linguage...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
18<br />Abordagem<br />
19<br />Abordagem<br />Loader e Interpretador InstructionList<br />Acesso TTY<br />
20<br />Abordagem<br />Loader e Interpretador ILcode<br />Acesso TTY<br />Compilador InstructionList - ILcode<br />LoaderI...
21<br />Passos<br />8 3 77 1 0 10 3 73 0 6 10 3 73 0 7 14 3 77 1 0 13 3<br />
Temporizadores<br />22<br />Blocos de Função  IEC-61131-3<br />Biestáveis<br />Detectores de Borda<br />TP<br />TON<br />T...
Temporizadores<br />23<br />Blocos de Função Implementados<br />Biestáveis<br />Detectores de Borda<br />4<br />4<br />2 x...
24<br />Ciclo de Execução<br />
25<br />Arquitetura<br />
26<br />Dinâmica de um Ciclo<br />
27<br />Dinâmica de um Ciclo<br />
28<br />Dinâmica de um Ciclo<br />
29<br />Dinâmica de um Ciclo<br />
30<br />Conjunto de Instruções<br />
31<br />Operandos<br />
32<br />Memória Interna<br />
33<br />Memória Interna<br />
34<br />Memória Interna<br />
35<br />Memória não Volátil<br />
36<br />Modos de Funcionamento<br />Reset<br />Temporização ou comando “.” sem STEP<br />Modo Programação<br />Modo Execuç...
37<br />Modo Programação<br />Console usando Windows Hyperterminal<br />
38<br />Carga de Programa<br />A carga do programa ILcode a ser executado é feita usando o comando “l” a partir do endereç...
39<br />Configuração de E/S<br />13<br />12<br />11<br />10<br />9<br />8<br />7<br />6<br />5<br />4<br />3<br />2<br />1...
40<br />Modo Passo-a-Passo<br />Dois tipos:<br />Passo-a-Passode Instrução<br />Passo-a-Passode Ciclo de Execução<br />Sta...
41<br />ILCode<br />Formato da Instrução<br />Modificador<br />Operador<br /><ul><li>Operando: código ASCII da letra
Byte: número do byte
Bit: número do bit ou 64 quando a operação for sobre um byte completo</li></li></ul><li>Compila e carrega programa em IL v...
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
44<br />Elevador<br />
45<br />Memorização de Chamadas<br />
46<br />Memorização do Último Andar Visitado<br />
47<br />Sentido do Movimento<br />
48<br />Partida e Parada do Motor<br />
Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br ...
Fatos do Desempenho<br />PLCduino ocupa 58% de RAM e Flash do Arduino<br />Exemplo do Elevador<br />Ocupa 96% da memória d...
Facilidade de Desenvolvimento<br />IL tem um conjunto adequado de instruções e é viável como “linguagem de máquina”.<br />...
Novo Ambiente de Desenvolvimento<br />Interface TCP/IP<br />Expansão do Número de Portas<br />52<br />Sugestões de Continu...
Próximos SlideShares
Carregando em…5
×

PLCduino - A PLC using Arduino platform

12.867 visualizações

Publicada em

see http://plcduino.blogspot.com

Publicada em: Tecnologia

PLCduino - A PLC using Arduino platform

  1. 1. Implementação de um Micro PLC em uma Plataforma Aberta de Baixo Custo<br />Renato Mintz<br />Trabalho de Conclusão de Curso - UFMG – CEAI 2008<br />Orientador: Prof. Júlio de Melo<br />1<br />
  2. 2. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />2<br />
  3. 3. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />3<br />
  4. 4. Arduino<br />Contexto<br />4<br />Arduino é uma plataforma aberta de hardware e software, de baixo custo, desenvolvida com o objetivo de atender artistas, designers ou qualquer pessoa interessada na criação de objetos ou ambientes interativos<br />
  5. 5. Hardware<br />ATmega168 ou ATmega328<br />32K Flash, 2K SRAM, 1K EEPROM<br />14 pinos de entrada/saída digital<br />6 deles podem ser usados como saída PWM<br />6 entradas analógicas de 10 bits<br />Conexão USB<br />5<br />Contexto<br />
  6. 6. Software<br />C/C++ normal ou simplificado<br />Bibliotecas com código aberto<br />Expansões<br />Ethernet, Bluetooth, Zigbee, GPS, etc.<br />Preço < US$30,00<br />6<br />Contexto<br />
  7. 7. Linguagens padrão IEC-61131-3<br />Contexto<br />Fonte: http://www.isa.org<br />Fonte: http://engineeronadisk.com<br />7<br />
  8. 8. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />8<br />
  9. 9. Programação usando Ladder<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino.blogger.com<br />Objetivo<br />9<br />Oferecer aos usuários do Arduino a alternativa de programação de lógicas de controle através de uma linguagem gráfica definida pelo IEC 61131-3 transformando-o na prática, em um micro PLC para aplicações didáticas, artísticas, domésticas e outras sem requisitos de alta confiabilidade.<br />
  10. 10. Programação usando Ladder<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino.blogger.com<br />Objetivo parcialmente atingido<br />10<br />Oferecer aos usuários do Arduino a alternativa de programação de lógicas de controle através de uma linguagem gráfica definida pelo IEC 61131-3 transformando-o na prática, em um micro PLC para aplicações didáticas, artísticas, domésticas e outras sem requisitos de alta confiabilidade.<br />
  11. 11. Programação usando LadderInstructionList<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino.blogger.com<br />Objetivo parcialmente atingido<br />11<br />Oferecer aos usuários do Arduino a alternativa de programação de lógicas de controle através de uma linguagem gráfica definida pelo IEC 61131-3 transformando-o na prática, em um micro PLC para aplicações didáticas, artísticas, domésticas e outras sem requisitos de alta confiabilidade.<br />
  12. 12. Programação usando LadderInstructionList<br />Supervisão ModBus<br />Licença de código livre<br />Progresso publicado em http://plcduino.blogger.com<br />Objetivo parcialmente atingido<br />12<br />Oferecer aos usuários do Arduino a alternativa de programação de lógicas de controle através de uma linguagem gráfica definida pelo IEC 61131-3 transformando-o na prática, em um micro PLC para aplicações didáticas, artísticas, domésticas e outras sem requisitos de alta confiabilidade.<br />
  13. 13. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />13<br />
  14. 14. Ambientes gráficos para Arduino<br />BrickLayer<br />ModKit<br />Iniciativas Semelhantes<br />14<br />
  15. 15. PLC Aberto<br />Beremiz<br />PLCOpen Editor – FBD, SFC, LD, ST, IL<br />MatPLC IEC Compiler – gera código em C<br />CANOpen – interface para I/O físico<br />Ferramenta HMI – construção de telas sinóticas<br />15<br />Iniciativas Semelhantes<br />
  16. 16. Especifica um modelo de desenvolvimento para um PLC em ambiente RTLinux.<br />Seleciona um subconjunto de IL como linguagem básica para a primeira versão deste PLC.<br />Sugere que o IL seja compilado para uma linguagem intermediária e então interpretado.<br />16<br />Iniciativas Semelhantes<br />PLAZA, I.; MEDRANO, C.; CATALAN, C. A Programmable Logic Controller under RTLinux Following Related Standards. Fifth Real-Time Linux Workshop. Valencia, Spain: Department Of Computer Engineering, Universidad Politecnica De Valencia. 2003.<br />
  17. 17. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />17<br />
  18. 18. 18<br />Abordagem<br />
  19. 19. 19<br />Abordagem<br />Loader e Interpretador InstructionList<br />Acesso TTY<br />
  20. 20. 20<br />Abordagem<br />Loader e Interpretador ILcode<br />Acesso TTY<br />Compilador InstructionList - ILcode<br />LoaderILcode<br />Cliente TTY<br />
  21. 21. 21<br />Passos<br />8 3 77 1 0 10 3 73 0 6 10 3 73 0 7 14 3 77 1 0 13 3<br />
  22. 22. Temporizadores<br />22<br />Blocos de Função IEC-61131-3<br />Biestáveis<br />Detectores de Borda<br />TP<br />TON<br />TOF<br />Contadores<br />
  23. 23. Temporizadores<br />23<br />Blocos de Função Implementados<br />Biestáveis<br />Detectores de Borda<br />4<br />4<br />2 x TP<br />2 x TON<br />2 x TOF<br />4<br />TP<br />TON<br />TOF<br />4<br />Contadores<br />4<br />
  24. 24. 24<br />Ciclo de Execução<br />
  25. 25. 25<br />Arquitetura<br />
  26. 26. 26<br />Dinâmica de um Ciclo<br />
  27. 27. 27<br />Dinâmica de um Ciclo<br />
  28. 28. 28<br />Dinâmica de um Ciclo<br />
  29. 29. 29<br />Dinâmica de um Ciclo<br />
  30. 30. 30<br />Conjunto de Instruções<br />
  31. 31. 31<br />Operandos<br />
  32. 32. 32<br />Memória Interna<br />
  33. 33. 33<br />Memória Interna<br />
  34. 34. 34<br />Memória Interna<br />
  35. 35. 35<br />Memória não Volátil<br />
  36. 36. 36<br />Modos de Funcionamento<br />Reset<br />Temporização ou comando “.” sem STEP<br />Modo Programação<br />Modo Execução<br />ABORT<br />Comando “.” com STEP<br />ABORT<br />Comando “.” sem STEP<br />Modo Passo a Passo<br />
  37. 37. 37<br />Modo Programação<br />Console usando Windows Hyperterminal<br />
  38. 38. 38<br />Carga de Programa<br />A carga do programa ILcode a ser executado é feita usando o comando “l” a partir do endereço 20.<br />O PLCduino Client faz isto automaticamente.<br />
  39. 39. 39<br />Configuração de E/S<br />13<br />12<br />11<br />10<br />9<br />8<br />7<br />6<br />5<br />4<br />3<br />2<br />1<br />0<br />1<br />0<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />0<br />0<br />ioMask<br />13<br />12<br />11<br />10<br />9<br />8<br />7<br />6<br />5<br />4<br />3<br />2<br />1<br />0<br />0<br />0<br />0<br />0<br />0<br />1<br />1<br />1<br />1<br />1<br />1<br />ioConfig<br />S<br />S<br />S<br />S<br />S<br />E<br />E<br />E<br />E<br />E<br />E<br />13<br />12<br />11<br />10<br />9<br />8<br />7<br />6<br />5<br />4<br />3<br />2<br />1<br />0<br />0<br />1<br />0<br />0<br />0<br />1<br />0<br />0<br />0<br />0<br />0<br />ioNeg<br />NOT<br />NOT<br />
  40. 40. 40<br />Modo Passo-a-Passo<br />Dois tipos:<br />Passo-a-Passode Instrução<br />Passo-a-Passode Ciclo de Execução<br />Status de Execução<br />Conteúdo da Memória<br />Conteúdo da Pilha<br />
  41. 41. 41<br />ILCode<br />Formato da Instrução<br />Modificador<br />Operador<br /><ul><li>Operando: código ASCII da letra
  42. 42. Byte: número do byte
  43. 43. Bit: número do bit ou 64 quando a operação for sobre um byte completo</li></li></ul><li>Compila e carrega programa em IL via USB<br />42<br />PLCduino Client<br />
  44. 44. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />43<br />
  45. 45. 44<br />Elevador<br />
  46. 46. 45<br />Memorização de Chamadas<br />
  47. 47. 46<br />Memorização do Último Andar Visitado<br />
  48. 48. 47<br />Sentido do Movimento<br />
  49. 49. 48<br />Partida e Parada do Motor<br />
  50. 50. Contexto<br />Objetivos<br />Pesquisa Bibliográfica e Situação Atual<br />Descrição do PLCduino<br />Prova de Conceito<br />Conclusões<br />Sumário<br />49<br />
  51. 51. Fatos do Desempenho<br />PLCduino ocupa 58% de RAM e Flash do Arduino<br />Exemplo do Elevador<br />Ocupa 96% da memória de programa do PLCduino<br />Ocupa 11 das 13 portas digitais do Arduino<br />Tem ciclo de execução de 3mS<br />Análise<br />PLCduino pode ser mais sofisticado<br />ILcode pode ser otimizado<br />Número de portas é gargalo<br />Ciclo de execução é razoável para o tipo de aplicação<br />50<br />Conclusões<br />
  52. 52. Facilidade de Desenvolvimento<br />IL tem um conjunto adequado de instruções e é viável como “linguagem de máquina”.<br />Ainda não é para um usuário leigo, necessita uma “camada” gráfica, com pouca ou nenhuma alteração no PLCduino em si.<br />Facilidades de depuração afetam em muito a produtividade.<br />51<br />Conclusões<br />
  53. 53. Novo Ambiente de Desenvolvimento<br />Interface TCP/IP<br />Expansão do Número de Portas<br />52<br />Sugestões de Continuidade<br />
  54. 54. Este trabalho:<br />Permitiu que eu vivenciasse algumas decisões técnicas envolvidas no desenvolvimento de PLCs.<br />Abriu uma nova possibilidade de programação do Arduino, que não seja o C/C++.<br />Demonstrou a viabilidade de utilização do Arduino como um PLC simples para aplicações diversas.<br />Pode ser um ponto de partida para novos trabalhos na área.<br />O código fonte está disponível em https://code.google.com/p/plcduino/<br />53<br />Considerações Finais<br />

×