Você está na página 1de 64

UNIVERSIDADE FEDERAL DO ESPRITO SANTO CENTRO TECNOLGICO DEPARTAMENTO DE ENGENHARIA ELTRICA PROJETO DE GRADUAO

ESTUDO E DESENVOLVIMENTO DE UM MICRO CLP DE BAIXO CUSTO EM UM PIC

PAULO FRANKLIM MAIA RASKIM FERRUA

VITRIA ES 02/2007

PAULO FRANKLIM MAIA RASKIM FERRUA

ESTUDO E DESENVOLVIMENTO DE UM MICRO CLP DE BAIXO CUSTO EM UM PIC

Parte manuscrita do Projeto de Graduao do aluno Paulo Franklim Maia Raskim Ferrua, apresentado ao Departamento de Engenharia Eltrica do Centro Tecnolgico da Universidade Federal do Esprito Santo, para obteno do grau de Engenheiro Eletricista.

VITRIA ES 02/2007

PAULO FRANKLIM MAIA RASKIM FERRUA

ESTUDO E DESENVOLVIMENTO DE UM MICRO CLP DE BAIXO CUSTO EM UM PIC

COMISSO EXAMINADORA:

___________________________________ Prof. Dr. Paulo Farias Santos Amaral Orientador

___________________________________ Prof. Dra. Raquel FrizeraVassallo Examinadora

___________________________________ Prof. Dr. Alessandro Mattedi Examinador

Vitria - ES, 23, Fevereiro, 2007

DEDICATRIA

minha famlia, minha namorada e aos meus amigos.

AGRADECIMENTOS Agradeo ao professor Paulo Amaral pela sua importante ajuda quando j estava sem saber o que fazer. Agradeo ao professor Jos Denti por nos apresentar o CLP em sua disciplina de Superviso e Controle de Processos. Agradeo a meu companheiro Rogrio Costa Pacheco Neto, que desenvolveu um projeto complementar a este, pela ajuda e por facilitar a comunicao entre os projetos.

ii

LISTA DE FIGURAS Figura 1 Diagrama esquemtico do Micro-CLP............................................................9 Figura 2 Estrutura bsica de funcionamento de um CLP ............................................14 Figura 3 Diagrama lgico (esquerda) e programa ladder (direita) para o acionamento de um motor. ................................................................................................................17 Figura 4 - Circuito eltrico das entradas digitais .........................................................20 Figura 5 - Circuito eltrico das sadas digitais.............................................................21 Figura 6 - Circuito eltrico da entrada analgica.........................................................22 Figura 7 - Circuito eltrico das sadas analgicas .......................................................23 Figura 8 - Esquema de comunicao serial .................................................................24 Figura 9 - Alocao da memria de programa ............................................................25 Figura 10 - Alocao da memria de dados EEPROM ...............................................26 Figura 11 - Fluxograma do programa residente ..........................................................29 Figura 12 - Diagrama Ladder do controle do porto eletrnico ..................................39 Figura 13 - Linguagem intermediria enviada ao Micro-Clp ......................................40 Figura 14 - Vista frontal do Micro-CLP ......................................................................40 Figura 15 - Vista superior do Micro-CLP....................................................................41 Figura 16 - Vista lateral esquerda do Micro-CLP .......................................................41 Figura 17 - Vista lateral direita do Micro-CLP ...........................................................41 Figura 18 - Vista traseira do Micro-CLP .....................................................................42 Figura 19 - Placa de entradas e sadas ........................................................................42

iii

LISTA DE TABELA Tabela 1 - Codificao das Instrues .........................................................................27 Tabela 2 - Mapeamento das Variveis.........................................................................28

iv

GLOSSRIO CLP Controlador Lgico Programvel EEPROM Electrically-Erasable Programmable Read-Only Memory PLC Programmable Logic Controller. PID Proporcional-Integral-Derivativo PWM Pulse Width Modulation ou Modulao por Largura de Pulso

SUMRIO DEDICATRIA........................................................................................................... I AGRADECIMENTOS .............................................................................................. II LISTA DE FIGURAS ............................................................................................... III LISTA DE TABELA ................................................................................................ IV GLOSSRIO ............................................................................................................... V RESUMO ................................................................................................................ VIII 1 INTRODUO ................................................................................................9 1.1 Ferramentas Utilizadas......................................................................................10 1.1.1 Compilador C CCS ..................................................................................10 1.1.2 MPLAB ...................................................................................................11 1.1.3 Eagle ........................................................................................................11 2 CONTROLADOR LGICO PROGRAMVEL .......................................13 2.1 Funcionamento do CLP ....................................................................................14 2.2 Programao do CLP ........................................................................................15 2.2.1 Linguagem LADDER ou Diagrama de Rels .........................................16 3 DESENVOLVIMENTO DO HARDWARE ................................................18 3.1 Microcontroladores PIC ....................................................................................18 3.1.1 Caractersticas do PIC 16F877 ................................................................18 3.2 Definies .........................................................................................................19 3.3 Entradas Digitais ...............................................................................................19 3.4 Sadas Digitais ..................................................................................................20 3.5 Entradas Analgicas..........................................................................................21 3.6 Sadas Analgicas .............................................................................................22 3.7 A Fonte de Alimentao ...................................................................................23 3.8 Display LCD .....................................................................................................23 3.9 Botes................................................................................................................24 3.10 Comunicao Serial ........................................................................................24 4 DESENVOLVIMENTO DO PROGRAMA RESIDENTE ........................25 4.1 Cabealho ..........................................................................................................25 vi

4.2 Instrues ..........................................................................................................26 4.3 Variveis ...........................................................................................................27 4.4 Programao do PIC .........................................................................................29 4.4.1 Entradas e Sadas Digitais .......................................................................29 4.4.2 Entradas Analgicas ................................................................................30 4.4.3 Controle do PWM ...................................................................................31 4.4.4 Interrupes .............................................................................................31 4.4.5 Cronmetros (Timers) .............................................................................32 4.5 Rotinas ..............................................................................................................32 4.5.1 Rotina Principal .......................................................................................33 4.5.2 Carregamento do Ladder .........................................................................35 4.5.3 Funo AND() .........................................................................................37 4.6 Monitorando o programa pela porta serial ........................................................37 5 6 TESTES E RESULTADOS ...........................................................................38 CONCLUSES ..............................................................................................43

APNDICE A CIRCUITO PRINCIPAL .............................................................44 APNDICE B CIRCUITO COMPLETO DE ENTRADAS DIGITAIS ...........45 APNDICE C CIRCUITO COMPLETO DE SADAS DIGITAIS ..................46 APNDICE D CIRCUITO COMPLETO DE ENTRADAS ANALGICAS ..47 APNDICE E CIRCUITO COMPLETO DE SADAS ANALGICAS .........48 REFERNCIAS BIBLIOGRFICAS.....................................................................61

vii

RESUMO Este trabalho apresenta o estudo e o desenvolvimento de um micro PLC em um microcontrolador da famlia PIC da empresa Microchip. Para tal foi necessrio estudar os PLCs do mercado, analisando suas caractersticas e aplicaes principais. As funcionalidades dos Micro-PLCs atuais tambm foram observadas. A seguir estudou-se profundamente as caractersticas do PIC 16F877, escolhido para desempenhar a funo de micro PLC, a fim de adequar as funes a serem implementadas. De posse deste conhecimento foi possvel projetar a interface de entradas e sadas do Micro-PLC. O micro PLC tambm composto por um software capaz de executar um programa especfico de controle. Para o desenvolvimento desse software nativo no PIC, algo como um mini-sistema operacional, estudou-se a linguagem de programao C.

viii

INTRODUO
A necessidade de automatizar sistemas tem impulsionado o desenvolvimento

de novos equipamentos. Os Controladores Lgicos Programveis disponveis no mercado possuem um grande poder de processamento, capacidade de manipular uma grande quantidade de variveis digitais e analgicas. Esta capacidade possui um preo que inviabiliza sua aplicao para sistemas com menor complexidade. Surgiu ento a alternativa de CLPs mais simples, possuindo assim um preo mais acessvel. Este projeto visa a pesquisa e o desenvolvimento de um CLP com poucas entradas e sadas em um microcontrolador PIC garantindo assim um baixo custo e boa funcionalidade. Na Figura 1 observa-se o esquema base do projeto.

Figura 1 Diagrama esquemtico do Micro-CLP

10 Este projeto foi elaborado a partir das seguintes etapas: 1. Estudo dos micro PLCs 2. Definio das especificaes do projeto 3. Implementao da placa de interface entradas/sadas 4. Estudo e definio do programa base executado pelo PIC

1.1 Ferramentas Utilizadas O cdigo a ser desenvolvido deve ser escrito, testado, e armazenado na ROM do microcontrolador. Normalmente o software escrito e compilado em um PC e ento carregado na ROM como cdigo de mquina. Se o programa escrito em linguagem assembler, o PC tem que ter um compilador para gerar o cdigo de mquina para o microcontrolador. Para microcontroladores PIC a programao realizada mediante o aplicativo MPLAB. Este software est disponvel para download grtis na internet (www.microchip.com). Programar um PIC utilizando linguagem assembler pode ser no princpio muito difcil e poderia resultar em um extenso procedimento de depurao. Felizmente compiladores de linguagem de alto nvel esto disponveis e nos permitem programar o PIC a um nvel mais amigvel. Neste projeto utilizado um compilador C chamado CCS.

1.1.1 Compilador C CCS O compilador C CCS inclui uma biblioteca de programas de exemplo para muitas aplicaes comuns. Cada programa de exemplo contm um cabealho com instrues de como rodar o exemplo, e se necessrio, as instrues de instalao eltrica para conectar dispositivos externos [3]. Na programao do PIC este arquivo compilado aparecer como um arquivo '.hex'. O compilador inclui muitas funes em forma de bibliotecas para acessar o hardware de PIC.

11 1.1.2 MPLAB O MPLAB um programa que tem a funo de um gerenciador, para o desenvolvimento de projetos com a famlia PIC de microcontroladores. distribudo gratuitamente pela Microchip, fabricante dos PICs. O MPLAB integra num nico ambiente o editor de programa fonte, o compilador, o simulador e quando conectado s ferramentas da Microchip tambm integra o gravador do PIC, o emulador etc. O Programa fonte, ou simplesmente fonte do programa uma seqncia em texto, escrita numa linguagem de programao que ser convertida em cdigos de mquina para ser gravado no PIC. O Compilador o programa que converte o fonte em cdigos de mquina. O Simulador o programa que simula o funcionamento da CPU (PIC), conforme o programa fonte que est sendo desenvolvido. O Projeto no MPLAB um conjunto de arquivos e informaes que diz ao ambiente integrado qual o PIC que estamos usando, qual freqncia de clock, qual a linguagem de programao usada, qual o layout das janelas etc. Enfim o projeto o nosso trabalho de uma forma global. E para ele guardar todas essas informaes basta salvar e fechar s o projeto, sem se preocupar em fechar todas as janelas abertas no ambiente integrado [4]. importante lembrar que o MPLAB se integra ao ambiente Windows, permitindo cpia de arquivos, de textos de um aplicativo para outro de uma forma bem simplificada.

1.1.3 Eagle Este software utilizado para desenhar circuitos impressos e esquemas eletrnicos. Eagle a sigla para Easily Applicable Graphical Layout Editor. Os componentes so arranjados manualmente na placa, com a ajuda das linhas coloridas que mostram as conexes eventuais entre os pinos que so requeridos pelo diagrama esquemtico, isto ajuda a encontrar uma colocao que permita a disposio mais eficiente das trilhas [7].

12

Este relatrio apresenta os conceitos necessrios para a elaborao do projeto, assim como seus resultados. No Captulo 2 ser apresentado o controlador lgico programvel. O Captulo 3 apresenta o PIC16F877. O Captulo 4 mostra o desenvolvimento do hardware. O Captulo 5 mostra o desenvolvimento do programa residente. O Captulo 6 apresenta os resultado obtidos, e Captulo 7 conclui o trabalho.

13

CONTROLADOR LGICO PROGRAMVEL


Um Controlador Lgico Programvel um computador especializado, baseado

num microprocessador que desempenha funes de controle de diversos tipos e nveis de complexidade. Geralmente as famlias de Controladores Lgicos Programveis so definidas pela capacidade de processamento de um determinado nmero de pontos de Entradas e/ou Sadas (E/S). Controlador Lgico Programvel Segundo a ABNT (Associao Brasileira de Normas Tcnicas), um equipamento eletrnico digital com hardware e software compatveis com aplicaes industriais. Segundo a NEMA (National Electrical Manufactures Association), um aparelho eletrnico digital que utiliza uma memria programvel para armazenar internamente instrues e para implementar funes especficas, tais como: lgica, sequenciamento, temporizao, contagem e aritmtica, controlando, por meio de mdulos de entradas e sadas, vrios tipos de mquinas ou processos [9]. O CLP comeou a ser usado no ambiente industrial desde 1960 embora ainda existam muitas empresas do ramo da indstria de automao que possuem pouca experincia com eles. A grande vantagem dos controladores programveis a possibilidade de reprogramao, motivo pelo qual substituram os tradicionais painis de controle a rels. Esses painis necessitavam de modificaes na fiao cada vez que se mudava o projeto, o que muitas vezes era invivel, tornando-se mais barato simplesmente substituir todo painel por um novo. Os CLPs permitiram transferir as modificaes de hardware em modificaes no software [1]. Um CLP o controlador indicado para lidar com sistemas caracterizados por eventos de lgica binria, ou seja, com processos em que as variveis assumem valores zero ou um (ou variveis ditas digitais, ou seja, que s assumem valores dentro de um conjunto finito). Podem ainda lidar com variveis analgicas definidas por intervalos de valores de corrente ou tenso eltrica. As entradas e/ou sadas digitais so os elementos discretos, as entradas e/ou sadas analgicas so os elementos variveis entre valores conhecidos de tenso ou corrente [2].

14 Os CLPs esto muito difundidos nas reas de controle de processos e de automao industrial. No primeiro caso a aplicao se d nas indstrias com processos do tipo contnuo, produtoras de lquidos, materiais gasosos e outros produtos, no outro caso a aplicao se d nas reas relacionadas com a produo em linhas de montagem, por exemplo na indstria do automvel. Num sistema tpico, toda a informao dos sensores concentrada no controlador (CLP) que de acordo com o programa em memria define o estado dos pontos de sada conectados a atuadores. Os CLPs tm capacidade de comunicao de dados via canais seriais. Com isto podem ser supervisionados por computadores formando sistemas de controle integrados. Softwares de superviso controlam redes de Controladores Lgicos Programveis.

2.1 Funcionamento do CLP O funcionamento de um CLP corresponde a trs etapas distintas, as quais so: entradas, processamento e sadas. Essas etapas so ilustradas na Figura 2. Com essa finalidade o CLP possui uma arquitetura bastante conhecida baseada em microcontroladores e microprocessadores.

Figura 2 Estrutura bsica de funcionamento de um CLP

O hardware de um CLP formado por trs unidades distintas, as quais so: fonte de alimentao, CPU (Unidade Central de Processamento), e interfaces de entrada e sadas ou I/O. Cada unidade que compe um CLP responsvel pelo seu funcionamento.

15

Fonte de Alimentao: A alimentao de energia do CLP utiliza uma fonte chaveada e uma nica tenso de sada de 24 V. Esse valor j utilizado com a finalidade de alimentar os mdulos de entrada e sada de dados e a CPU ao mesmo tempo. Outra caracterstica importante que normalmente as mquinas industriais, funcionam com essa tenso por ser bem menos suscetvel a rudos. Outro ponto destacvel, que essa tenso j compatvel com o sistema de comunicao RS-232.

CPU: responsvel pela execuo do programa do usurio, atualizao da memria de dados e memria-imagem das entradas e sadas. Inicialmente com a 2 gerao de CLP (barramento de dados, endereo e controle), a CPU era constituda por um microcontrolador. A opo por

microcontroladores baseava-se pelo custo-benefcio, facilidade de manuseio, e tambm pela baixa complexidade dos softwares. Com exceo dos CLPs de pequeno porte, geralmente, os CLPs apresentam um microprocessador na forma de um CI (Circuito Integrado) dedicado [6].

Interfaces de I/O: As entradas e sadas de um CLP podem ser divididas em duas categorias: as analgicas e digitais.

2.2 Programao do CLP Atualmente o IEC 61131-3 define cinco modos de programao para os controladores lgicos programveis. So eles: LADDER ou Diagrama de Rels; SFC - Sequential Function Chart ou diagramas de funes seqenciais; IL Instructions List ou Lista de Instrues; Linguagens de blocos funcionais; Texto estruturado. Dentre estes o mais amplamente utilizado o Ladder, e este foi o escolhido para a programao do micro-CLP.

16 O desenvolvimento de um ambiente de programao Ladder no contemplado por este projeto, mas o tema do projeto de graduao do aluno Rogrio Costa Pacheco Neto.

2.2.1 Linguagem LADDER ou Diagrama de Rels Rels so pequenos dispositivos eletromecnicos que, quando energizados, fecham (no caso dos rels normalmente abertos) ou abrem (no caso dos normalmente fechados) um contato eltrico. A passagem ou no de corrente eltrica pelo contato pode ser associada aos estados lgicos verdadeiro e falso respectivamente. A chamada linguagem ladder surgiu para possibilitar a programao dos CLPs, por tcnicos e engenheiros eletricistas, de uma forma bem similar lgica de rels empregada at ento. Num diagrama ladder, elementos de entrada combinam-se de forma a produzir um resultado lgico booleano, que ento atribudo a uma sada. A representao destes elementos feita da seguinte forma: Entradas: So na maioria das vezes representadas por contatos normalmente abertos (NA), representados pelo smbolo ||, e pelos contatos normalmente fechados (NF), cujo smbolo |/|. Estes elementos refletem, logicamente, o comportamento real do contato eltrico de um rel, no programa aplicativo. Sadas: So usualmente representadas pela bobina simples, cujo smbolo ( ). As bobinas modificam o estado lgico do operando na memria do Controlador Programvel, capaz de ativar um dispositivo externo, como um motor, por exemplo. Por lidarem com objetos booleanos, todo diagrama ladder pode ser traduzido para uma diagrama lgico e vice-versa. Contudo, a notao grfica e mais compacta dos diagramas lgicos faz com que os mesmos sejam essenciais na documentao de projetos de automao e controle. Como exemplo de um programa em ladder, imaginemos um motor que controlado por dois botes independentes, um de LIGA e outro de DESLIGA.

17 Considerando que ambos os botes sejam do tipo pushbutton, a Figura 3 apresenta uma lgica simples para o acionamento do motor com base nos estados dos botes:

Figura 3 Diagrama lgico (esquerda) e programa ladder (direita) para o acionamento de um motor.

18

DESENVOLVIMENTO DO HARDWARE
Para a determinao do hardware que ser montado, primeiramente escolheu-

se o microcontrolador, depois os circuitos de entradas e sadas, a fonte, a comunicao serial, o display LCD e os botes.

3.1 Microcontroladores PIC Os PIC (PICmicro) so uma famlia de microcontroladores fabricados pela Microchip Technology, que processam dados de 8 bits (recentemente foi lanada uma famlia de 16 bits com prefixo 24F) com extensa variedade de modelos e perifricos internos, com arquitetura Harvard e conjunto de instrues RISC (conjuntos de 35 instrues a 76 instrues), com recursos de programao por Memria Flash, EEPROM e OTP. Os microcontroladores PIC tm famlias com ncleos de processamento de 12 bits, 14 bits e 16 bits e trabalham em velocidades de at 48MHz, usando ciclo de instruo mnimo de 4 perodos de clock, o que permite uma velocidade de no mximo 10 MIPS. H o reconhecimento de interrupes tanto externas como de perifricos internos. Funcionam com tenses de alimentao de 2 a 6V e os modelos possuem encapsulamento de 6 a 100 pinos em diversos formatos (SOT23, DIP, SOIC, TQFP, etc).

3.1.1 Caractersticas do PIC 16F877 O PIC 16F877 um microcontrolador da famlia de 8 bits e ncleo de 14 bits fabricado pela Microchip Technology. Possui memria flash de programa com 8192 palavras de 14 bits, memria RAM com 368 bytes e memria EEPROM com 256 bytes. Sua frequncia de operao (clock) vai at 20MHz, resultando em uma velocidade de processamento de 5 MIPS. Seu conjunto de instrues RISC se compe de 35 instrues. Pode funcionar com alimentao de 2V a 5,5V. Sua pinagem DIP tem 40 pinos. Como perifricos ele possui: 5 conjuntos de portas de entrada e sada (total de 33 portas)

19 Conversor analgico-digital de 10 bits de resoluo e 8 canais de entrada Perifrico de comunicao paralela e serial (USART e MSSP) 2 Mdulos CCP (Comparao, Captura e PWM) 3 Timers (1 de 16 bits e 2 de 8 bits) Watchdog timer

3.2 Definies A definio de um hardware bsico o ponto principal do projeto, pois a partir desse ponto foi possvel determinar as funes de cada pino do PIC16F877 e o fluxo de dados do CLP. Caractersticas: 8 entradas digitais 8 sadas digitais 3 entradas analgicas 2 sadas PWM 1 display LCD com 2 linhas e 16 colunas 4 botes

3.3 Entradas Digitais Para o barramento de dados definiu-se a porta D do microcontrolador PIC16F877, possibilitando oito entradas e sadas digitais. O sentido do fluxo de dados neste barramento determinado pelos pinos: RC0 em nvel baixo habilita as entradas; RC3 recebendo uma transio positiva habilita as sadas. As entradas so de 24V. O circuito de entradas digitais isolado de interferncias externas por meio de opto acopladores. O sistema possui um GND interno e um GND EXT externo, isto tambm necessrio para o isolamento dos circuitos do micro-CLP.

20 Tomando como exemplo a entrada IN_0 da Figura 4, com o barramento habilitado para entrada, pode-se observar O circuito funciona da seguinte forma quando alimentamos um pino de entrada: 1. O LED1 conduz, demonstrando que a entrada est ativa. 2. Por conseguinte o LED do opto acoplador tambm ativado. 3. Ocorre a saturao do transistor do opto acoplador, que drena a corrente. 4. Dessa forma um nvel baixo chega porta A1 do chip 74HC240N. 5. O Sinal invertido na sada do chip, logo o pino RD0 recebe um nvel alto.

Figura 4 - Circuito eltrico das entradas digitais

3.4 Sadas Digitais O circuito de sadas digitais a transistor isolado de interferncias externas por meio de opto acopladores. A separao dos terras tambm necessria para manter o isolamento dos circuitos, logo este circuito possui um GND (interno) e um GND EXT (externo).

21 Analisando o circuito de sada do pino OUT_0 da Figura 5, com o barramento habilitado para sada, quando chega ao pino RD0 um nvel alto, ocorre o seguinte: O LED do opto acoplador pra de emitir, Consequentemente o transistor do opto acoplador cortado, Com isso o LED1conduz, indicando sada ativa, Finalmente OUT_0 recebe nvel baixo.

Figura 5 - Circuito eltrico das sadas digitais

3.5 Entradas Analgicas As entradas analgicas so tratadas por converso AD realizada pelo prprio microcontrolador PIC. Estas se encontram nos pinos RA0, RA1 e RA3. Adotou-se trs tipos entradas analgicas para cada canal selecionveis por meio de jumpers. So estes:

22 0 a 5V 0 a 10V 4 a 20mA Para entrada de 0 a 10V, deve-se colocar o jumper JP2 na posio 1-2 e o jumper JP1 na posio 5-3. Para entrada de 0 a 5V, deve-se colocar o jumper JP2 na posio 1-2 e o jumper JP1 na posio 1-3. Para entrada de 4 a 20mA, deve-se colocar o jumper JP2 na posio 2-3 e o jumper JP1 na posio 6-4.

Figura 6 - Circuito eltrico da entrada analgica

3.6 Sadas Analgicas As sadas analgicas so de dois tipos: Sinal PWM 0 a 5V O sinal PWM obtido diretamente do PIC16F877 nos pinos RC1 (CCP2) e RC2 (CCP1). As sadas de 0 a 5V so obtidas a partir do sinal PWM.

23

Figura 7 - Circuito eltrico das sadas analgicas

3.7 A Fonte de Alimentao Este projeto no contempla a construo de uma fonte de alimentao. O Micro-CLP necessita de uma alimentao de 5V e 12V fornecidas por uma fonte AT de computador. Tambm necessrio uma alimentao de 24V, esta fornecida por uma fonte do laboratrio de Microprocessadores 1.

3.8 Display LCD A placa est provida de um LCD alfanumrico padro de 16 colunas por 2 linhas. So utilizados os pinos RB4, RB5, RB6 e RB7 do microcontrolador para enviar dados. A linha Enable (E), ligada no pino RB3, permite a ativao do display e a utilizao das linhas R/W e RS. Quando a linha de habilitar (Enable) est em nvel baixo, o LCD fica inibido e ignora os sinais R/W e RS. Quando (E) est em nvel alto, o LCD verifica os estados das duas linhas de controle e reage de acordo com estes. A linha Read.Write (R/W), ligada no pino RB2, determina o sentido dos dados entre o microcontrolador e o LCD. Quando est em nvel baixo, os dados sero escritos no LCD. Quando est em nvel alto, os dados sero lidos do LCD. Com a ajuda da linha de Seleco de registo (RS), o LCD interpreta o tipo de dados presentes nas linhas de dados. Quando est em nvel baixo, ser escrita uma instruo no LCD. Quando est em nvel alto, caracter ser escrito no LCD.

24 3.9 Botes Os botes da parte frontal do Micro-CLP, Figura 14, esto ligados da seguinte forma: Boto B1 ligado ao pino RE2 Boto B3 ligado ao pino RE1 Boto B5 ligado ao pino RE0 Boto B8 ligado ao pino RB0

3.10 Comunicao Serial A placa possui um driver RS232 para adequar os nveis de tenso do microcontrolador (TTL) ao padro RS232C (+12V e 12V). A comunicao feita com 2 vias, a via de TX est ligada ao pino RC6 e a via de RX est ligada ao pino RC7 do microcontrolador. A montagem pode ser vista Figura 8.

Figura 8 - Esquema de comunicao serial

25

DESENVOLVIMENTO DO PROGRAMA RESIDENTE


O programa residente o responsvel pela inicializao do micro-CLP, a

leitura das entradas, a execuo do programa Ladder, a atualizao das sadas, a recepo, gravao, a interpretao e a execuo do programa Ladder. O programa Ladder gravado em um espao reservado da memria de programa EEPROM a partir do endereo 0x1C00.

Figura 9 - Alocao da memria de programa

4.1 Cabealho Para a manipulao das funes de controlador Proporcional-IntegralDerivativo (PID), temporizadores, contadores e comparadores necessrio o envio de algumas constantes especficas para cada funo. So elas: SP1 e SP2 Set Point, referncia do PID1 e do PID2 respectivamente; KP1 e KP2 Constantes de proporcionalidade; KI1 e KI2 Constantes de integrao; KD1 e KD2 Constantes de derivao; K1 e K2 Constantes de comparao;

26 KT1 e KT2 Constantes de temporizao; KC1 e KC2 Constantes dos contadores. Para cada constante reservou-se o tamanho de dois bytes. A este conjunto de constantes deu-se o nome de cabealho. o primeiro bloco de informaes enviado para o micro-CLP. Nota-se que este bloco possui um tamanho fixo de 28 bytes. O cabealho armazenado na memria de dados EEPROM, a partir do endereo 0x00 at o endereo 0x1B. Como a memria de dados EEPROM formada por palavras de oito bits, cada constante ocupa dois endereos na memria.

Figura 10 - Alocao da memria de dados EEPROM

4.2 Instrues Para definir a possvel quantidade de instrues necessrio determinar o formato das instrues na palavra de 14 bits da memria de programa EEPROM. O padro escolhido o seguinte: Instrues Digitais Bits de 13 a 8 Cdigo da instruo Bits 7 a 0 ndice das variveis

Logo possvel um conjunto de 64 instrues com os seis bits do campo de instrues. Foram implementadas as seguintes funes de um programa Ladder bsico: LD() LD_NOT() AND()

27 AND_B() AND_NOT() OR() OUT() OUT_NOT() DISPLAY() END Na Tabela 1 encontram-se a codificao de cada instruo.

Tabela 1 - Codificao das Instrues Instruo LD() LD_NOT() AND() AND_NOT() AND_B() Codificao 000000 000001 000010 000011 000100 Instruo OR() OUT() OUT_NOT() DISPLAY() END Codificao 000101 000110 000111 001000 111111

4.3 Variveis De posse da quantidade de entradas e sadas passa-se a definir as variveis digitais e analgicas possveis. A Tabela 2 mostra o mapeamento das variveis que sero gravadas na memria de dados EEPROM a partir do endereo 0x1C, que o endereo imediatamente aps o cabealho de constantes. A denominao das variveis evidencia a separao dos tipos da seguinte maneira: Iniciadas com X variveis digitais de entrada fsica. Iniciadas com Y variveis digitais de sada fsica. Iniciadas com I variveis digitais internas. Iniciadas com M variveis digitais de sada do comparador 1. Iniciadas com N variveis digitais de sada do comparador 2.

28 Iniciadas com AN variveis analgicas de entrada fsica. Iniciadas com SA variveis analgicas de sada fsica. Iniciadas com IN variveis analgicas internas. O campo ndice da Tabela 2 usado para apontar o endereo das variveis na memria.

Tabela 2 - Mapeamento das Variveis


Denominao X 0 X 1 X 2 X 3 X 4 X 5 X 6 X 7 Y 0 Y 1 Y 2 Y 3 Y 4 Y 5 Y 6 Y 7 I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11 I 12 I 13 I 14 I 15 ndice 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 Denominao M 0 M 1 M 2 N 0 N 1 N 2 AN 0 AN 0 AN 1 AN 1 AN 2 AN 2 SA 0 SA 0 SA 1 SA 1 IN 0 IN 0 IN 1 IN 1 IN 2 IN 2 IN 3 IN 3 IN 4 IN 4 IN 5 IN 5 IN 6 IN 6 IN 7 IN 7 ndice 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00101000 00101010 00101100 00101110 00110000 00110010 00110100 00110110 00111000 00111010 00111100 00111110

29 4.4 Programao do PIC De posse das definies de nmero de entradas, sadas, dos tipos, das instrues e das configuraes de hardware, passa-se definio do programa residente, cujo fluxograma mostrado na Figura 11.

Incio

Inicializao

Leitura das entradas; Execuo do Programa Ladder Atualizao das sadas

Carregamento do Programa Ladder

Aguardando

Ladder Carregado

Figura 11 - Fluxograma do programa residente

Ao ligar o Micro-CLP, ocorre: a inicializao do PIC, a leitura das entradas, a execuo do programa Ladder e a atualizao das sadas, durante este processo ao apertar-se os botes B1 e B3 entra-se no processo de Carregamento de um novo programa Ladder, terminando-se o carregamento, volta-se para o processo de execuo do programa principal. Caso o boto B8 seja pressionado segue-se ao processo Aguardando que um estado parado; pressionando-se o boto B5 volta-se ao estado de execuo do programa principal.

4.4.1 Entradas e Sadas Digitais Os pinos que tm a notao R podem ser utilizados como entradas ou sadas digitais. RD[0-7] configuram oito bits de I/O bidirecional (porta D). De forma

30 semelhante, ocorre para as outras portas. O bit menos significativo se refere ao pino 0 de A, B, C, D ou E. O valor binrio 1 indica que o pino configurado como entrada e o valor 0 indica que o pino configurado como sada. A funo em CCS para setar a direo estas portas set_tris_d() para a porta D. Observa-se a utilizao desta funo no trecho de cdigo a seguir.
// Leitura do estado das entradas int ler_entrada() { int ent; set_tris_d(0xff); output_low(PIN_C0); ent=input_d(); output_high(PIN_C0); return ent; }

Os valores output de todos os pinos digitais podem ser mudados usando os comandos seguintes simultaneamente: output_b(0xFF); // fixa todos os pinos de sada de B em 1

4.4.2 Entradas Analgicas Os pinos identificados como AN podem ser usados como entradas analgicas. Neste caso AN[0-4] (pinos 2, 3, 4, 5 & 7). O PIC16F877 tem um ADC interno (conversor analgico digital) que nos permite introduzir valores analgicos mediante as portas A e E. possvel fixar todos os canais A ou E como analgicos ou pode-se definir canais especficos para serem analgicos[5]. Exemplo: // Todos os pinos so analgicos setup_adc_ports (ALL_ANALOG); // Pinos A0, A1 e A3 so analgicos e todos os outros so digitais. +5v utilizado como referncia de entrada analgica. setup_adc_ports (RA0_RA1_RA3_ANALOG);

31 // Pinos A0 e A1 so analgicos. Pino RA3 usado para a voltagem de referncia e todos os outros pinos so digitais. setup_adc_ports (A0_RA1_ANALOGRA3_REF); //lendo um valor analgico //isto fixar a porta AN2 como analgica set_adc_channel(2); //esta demora um imperativo para o PIC trabalhar delay_us(10); // leia o valor digital do sinal analgico value = read adc();

4.4.3 Controle do PWM Os pinos relativos Modulao por Largura de Pulso (PWM) so CCP1 e CCP2. O PIC pode ter dois drivers com controle de PWM. Tambm podem ser usados para ler um pulso de uma entrada. Na maioria dos casos o algoritmo PWM utilizado para acionamento de motores. Para ativar o controle de PWM primeiro a porta CCP deve ser configurada como sada. Na realidade quando o diagrama de pinos analisado, os pinos CPP so RC1 e RC2[5]. Como um exemplo, assumir que ns queremos usar CCP1 como um PWM para acionar um motor. Neste caso necessrio setar pino C1 como uma sada utilizando o comando set_tris_c () . Utiliza-se o comando: setup_ccp1(CCP_PWM) / / configura CCP1 como um PWM

4.4.4 Interrupes Uma interrupo um evento que fora uma chamada a uma seqncia de dados que normalmente definida como rotina ou servio de interrupo. Fontes tpicas de interrupes no PIC incluem uma transio positiva ou negativa na entrada de RB.0/INT, uma mudana em quaisquer das entradas RB4 - RB7 ou a saturao (overflow) de algum contador ou timer na mudana de valor de 0xFF(255) para 0x00

32 (0). Na interrupo, o processador salva o endereo de retorno na pilha e o controle de programa redirecionado rotina de servio de interrupo[5].

4.4.5 Cronmetros (Timers) Cronmetro uma rotina de interrupo especialmente disponvel com PIC. O PIC tem um nmero de cronmetros que podem ser usados para executar operaes de cronometragem. As operaes de cronmetro tpicas so Timer_0, Timer_1, Timer_2 ou RTCC. Os cronmetros consideram valores inteiros na forma set_timer0 ou set_RTCC (valor). Timer_0 ou RTCC assume um valor inteiro de 8 bits (max 255). Timer_1 e Timer_2 consideram valores de 16 bits. Todas as contas dos cronmetros so incrementais e quando um cronmetro alcana o valor de mximo dever retornar ao seu valor inicial. Como exemplo considerar set_timer0(0) contar

0,1,....254,255,0,1,2... Se a velocidade do clock 4MHz e se fixssemos o RTCC_DIV a 256 (valor mximo) o contador incrementar a uma taxa (4000000/4)/256 vezes por segundo que 3906.25 incrementos por segundo ou 256us por incremento. Pode-se usar este mtodo para contar um perodo de tempo pre-especificado, 1 segundo, 2 segundos e assim por diante. Seguindo o anterior exemplo, o nmero total de contas requeridos para um segundo de durao dado por, (1x1000000/256) = 3906.25 contas. Se fixamos o cronmetro para contar de 0, temos um total de 3906.25 /256 = 15.25 interrupes de cronmetro. Ou ns podemos aproximar a 15 interrupes de cronmetro. Se um valor preciso requerido, o valor de DIV poderia ser diminudo para reduzir o erro.

4.5 Rotinas Nesta seo analisaremos algumas rotinas principais.

33 4.5.1 Rotina Principal A rotina principal inicializa e l as entradas, da seguinte forma: carrega o estado das variveis de entrada para suas respectivas posies de memria. O trecho de cdigo abaixo mostra a leitura da entrada X0.
entradas = ler_entrada(); if ( bit_test(entradas,0)) write_EEPROM( 0x1C, 0xff); else write_EEPROM( 0x1C, 0);

Depois de ler todas as entradas (X0 a X7), segue-se para o trecho em que escolhe-se: carregar um novo programa Ladder ou ficar parado.

selecao = ~ler_botoes(); while ((bit_test(selecao,2)==1)) {

teste = bit_test(selecao,1); switch (teste) { break; case 1 : p2 = 0x1c00; p1 = 0; pc = 0; x = 0; carrega=0; lcd_gotoxy(1,1); printf(lcd_putc,"Carregar Ladder "); printf("Carregar Ladder "); carregar_ladder(); break; default : selecao = ~ler_botoes(); teste2 = bit_test(selecao,3); while (teste2==1) { lcd_gotoxy(1,1);

34
printf("\r Aguardando "); ");

printf(lcd_putc," Aguardando delay_ms(200); selecao = ~ler_botoes(); if ((bit_test(selecao,0)==1)) teste2 = 0; }

break; } selecao = ~ler_botoes(); }

A seguir o programa executado. E sua sada atualizada ao final de cada ciclo do programa Ladder, quando encontrada a funo END.

codigo = read_program_eeprom(p2); indice= codigo & 0b11111111; num_funcao= codigo >> 8; p2++;

lcd_gotoxy(1,1); printf(lcd_putc,"Executando printf("Executando "); ");

switch (num_funcao) { case 0b000000 : LD(indice); printf(" LD %u", indice); break; case 0b000001 : LD_NOT(indice); printf(" LD_NOT %u", indice); break; case 0b000010 : AND(indice); printf(" AND %u", indice);

35
break; case 0b000011 : AND_NOT(indice); printf(" AND_NOT %u", indice); break; case 0b000100 : AND_B(); printf(" AND_B %u", indice); break; case 0b000101 : OR(); printf(" OR %u", indice); break; case 0b000110 : OUT(indice); printf(" OUT %u", indice); break; case 0b000111 : OUT_NOT(indice); printf(" OUT_NOT %u", indice); break; case 0b001000 : DISPLAY(indice); break; case 0b111111 : printf ("END OF FILE!"); p2 = 0x1c00; atualizar_saida(); break; default : lcd_gotoxy(1,2); printf ("funcao nao implementada"); printf (lcd_putc,"funcao nao implementada"); break; }

delay_ms(100);

4.5.2 Carregamento do Ladder A rotina abaixo recebe os dados enviados pelo programa atravs da porta serial. A funo getc() espera um byte chegar. Enquanto o contador pc for menor do

36 que ou igual 27 significa que os dados que esto chegando pertencem ao cabealho, logo so armazenados na memria de programa EEPROM. Quando pc atinge 28, a cada dois bytes formam-se uma palavra que gravada na memria de programa, estas so as instrues Ladder .

void carregar_ladder() { while (carrega==0) { dados=getc(); if (pc>27) { dadosp[x]=dados; x++; if (x==2) { x=0; cod_prog = dadosp[0]; cod_prog = (cod_prog<<8) +dadosp[1]; write_program_EEPROM (0x1c00 + p1,cod_prog); if (cod_prog == 0xffff) { lcd_gotoxy(1,1); printf(lcd_putc,"Ladder Carregado"); carrega=1; } p1++; } } else { write_EEPROM( pc, dados ); pc++; } }

37
}

4.5.3 Funo AND() Cita-se a funo AND() como exemplo das funes Ladder implementadas. A funo AND(argumento) tem como argumento o ndice que somado ao endereo 0x1C aponta para a varivel desejada. A varivel temporria recebe o resultado da operao AND entre um valor na varivel temporria e o contedo da varivel apontada pelo endereo.

void AND(int endf) { device_ent = read_EEPROM(0x1C + endf); temp[pf-1] = temp[pf-1] & device_ent; }

4.6 Monitorando o programa pela porta serial A conexo serial RS232 tambm pode ser usada para transferir e apresentar dados da placa PCB. Dados, como leituras de sensor, podem ser transferidos ao computador em tempo real e facilmente podem ser usados para serem exibidos enquanto a aplicao PIC est rodando. Para exibir os dados, um hyperterminal utilizado via porta serial COM1. Para habilitar o hyperterminal, ir para o menu start e selecionar accessories/communications/hyperterminal para estabelecer uma conexo nova, configurar o PIC como usurio do COM1. Configuraes: 1. Bits Per Second para 9600; 2. Data Bits para 8; 3. Stopbits para 1; 4. Flow Control to None.

38

TESTES E RESULTADOS
Os testes feitos no Micro-CLP foram essenciais no apenas para este projeto

mas tambm para o projeto de desenvolvimento do ambiente de programao Ladder elaborado pelo aluno Rogrio Costa Pacheco Neto. Os testes foram realizados em conjunto. A aplicao utilizada foi o exemplo do controle de um porto eletrnico. Para este exemplo utilizou-se, as seguintes consideraes: Boto de comando para abrir o porto, porta X0. Boto de comando para fechar o porto, porta X1. Sensor de fim de curso porto aberto, na porta X2. Sensor de fim de curso porto fechado, na porta X3. Sada para motor, abrir o porto Y0. Sada para motor, fechar o porto Y1. Gerando o diagrama Ladder visto na Figura 12. Analisando o ladder temos, apertando o boto para abrir o porto (X0), e o sensor de porto aberto (X2) no estando ativado, vai acionar a sada interna I00, que utilizada como selo para que ela s seja desligada quando ocorrer o fim de curso de porto aberto, ou o boto de fechar (X1) seja acionado. A sada interna I00 passada para a sada fsica Y0 que indica que o motor deve ser ligado para abrir o porto. Caso o boto pressionado seja o de fechar o porto (X1), e sensor de porto fechado (X3) no estando ativado, vai acionar a sada interna I01, que tambm ser utilizada como selo para que s seja desligada quando ocorrer o fim de curso de porto fechado, ou o boto de abrir (X0) seja acionado. A sada interna I01 passada para a sada fsica Y1 que indica que o motor deve ser ligado para fechar o porto.

39

Figura 12 - Diagrama Ladder do controle do porto eletrnico

Aps preparar o programa devemos ligar o Micro-CLP e prepar-lo para receber o diagrama Ladder. Ao ligar o Micro-CLP aparece a mensagem MicroCLP. Ao apertar o boto B3, o Micro-CLP vai para o estado de aguardar o carregamento do programa e escreve a mensagem Carregar Ladder. Neste ponto envia-se o programa Ladder gerado no ambiente grfico. A linguagem intermediria enviada mostrada na Figura 13. Quando todo o cdigo enviado, a mensagem que aparece Ladder Carregado.

40

Figura 13 - Linguagem intermediria enviada ao Micro-Clp

Ao apertar o boto B1, o programa executado. Pode-se ver ento o programa em funcionamento no Micro-CLP, atravs dos LEDs que so ativados pelas entradas e sadas. Para setar as entradas foi utilizada uma fonte de 24V disponvel no laboratrio. Os resultados de exemplo foram conforme o esperado. As Figuras 14 a 18 mostram as vista do Micro-CLP. A Figura 19 mostra a placa de entradas e sadas.

Figura 14 - Vista frontal do Micro-CLP

41

Figura 15 - Vista superior do Micro-CLP

Figura 16 - Vista lateral esquerda do Micro-CLP

Figura 17 - Vista lateral direita do Micro-CLP

42

Figura 18 - Vista traseira do Micro-CLP

Figura 19 - Placa de entradas e sadas

43

CONCLUSES
O estudo sobre os controladores lgicos programveis constatou que estes

esto sendo cada vez mais utilizados devido sua grande flexibilidade de aplicaes. Para aplicaes de complexibilidade reduzida, a alternativa de um Micro-CLP torna-se vantajosa, uma vez que este possui um preo bem menor que um CLP normal. A partir do estudo tambm determinaram-se os requisitos necessrios para o projeto. Dentre estes a determinao da linguagem Ladder ou diagrama de rels, como a utilizada para programar o Micro-CLP. Para realizar este projeto destaca-se a utilizao de conhecimentos de eletrnica digital, microprocessadores e programao em linguagem C. Foram desenvolvidos os circuitos eltricos necessrios para o micro CLP. Foi desenvolvido um programa residente no PIC, responsvel pelo gerenciamento de entradas e sadas, gravao de um programa Ladder e a execuo do mesmo. De acordo com os resultados dos testes, pode-se dizer que o projeto alcanou seu objetivo satisfatoriamente, pois executou com sucesso um programa Ladder desenvolvido no ambiente grfico no computador e enviado pelo mesmo pela porta serial. Existiram algumas dificuldades com a familiarizao da linguagem C adotada pelo CCS PICC, pois este possui vrias funes j implementadas. Faltou implementar as funes analgicas. Este projeto demonstra ter um grande potencial de aplicaes, dessa forma sugere-se como projetos futuros a implementao das funes que manipulam dados analgicos, ou de uma rede de CLPs.

44

APNDICE A CIRCUITO PRINCIPAL

45 APNDICE B CIRCUITO COMPLETO DE ENTRADAS DIGITAIS

46 APNDICE C CIRCUITO COMPLETO DE SADAS DIGITAIS

47

APNDICE D CIRCUITO COMPLETO DE ENTRADAS ANALGICAS

48

APNDICE E CIRCUITO COMPLETO DE SADAS ANALGICAS

49 APNDICE F CDIGO FONTE


#case #include "clp.h" #include "LCD.C" #use delay(clock=20000000)

#org 0x1C00, 0X1FFF {}

char c,dadosp [2]; int entradas=0, indice, device_sai, device_ent, selecao, carrega=0; long int codigo, p1 = 0, p2=0x1C00, i, cod_prog; int num_funcao, pc=0, dados, x=0, teste2=0, i3=0, rodar=0; short int teste;

int pf,temp [10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};

int i2; long value, min, max;

struct botoes { short int b3; short int b2; short int b1; short int b0; } botao;

struct out_porta { short int y0; short int y1; short int y2; short int y3; short int y4;

50
short int y5; short int y6; short int y7; } saida_porta;

// Leitura do estado das entradas int ler_entrada() { int ent; set_tris_d(0xff); output_low(PIN_C0); ent=input_d(); output_high(PIN_C0); return ent; }

// Sada saida(int valor) { output_high(PIN_C0); set_tris_d(0x00); output_d(valor); output_high(PIN_C3); delay_us(1); output_low(PIN_C3); set_tris_d(0xFF); }

// Leitura do estado dos botes int ler_botoes() { int entbot=0; set_tris_e(0xff); set_tris_b(0x01); botao.b0 = input(PIN_B0); botao.b1 = input(PIN_E0);

51
botao.b2 = input(PIN_E1); botao.b3 = input(PIN_E2); entbot = botao; return (entbot); }

// Escrita de variveis do tipo long int na data EEPROM write_long_eeprom(long int n, long int data) { int i1; for (i1 = 0; i1 < 2; i1++) write_eeprom(i1 + n, *(&data + i1) ) ; }

// Leitura de variveis do tipo long int na data EEPROM long int read_long_eeprom(long int n) { int i1; long int data; for (i1 = 0; i1 < 2; i1++) *(&data + i1) = read_eeprom(i1 + n); return(data); }

//Funcoes basicas ladder

//----------LD()

void LD(int endf) { temp[pf] = read_eeprom(0x1C + endf); printf("\n\rTEMP= %u", temp[pf]); ++pf; }

//----------LD_NOT()

void LD_NOT(int endf)

52
{ temp[pf] = ~read_eeprom(0x1C + endf); printf("\n\rTEMP= %u", temp[pf]); ++pf; }

//----------AND()

void AND(int endf) { device_ent = read_eeprom(0x1C + endf); temp[pf-1] = temp[pf-1] & device_ent; printf("\n\rTEMP= %u", temp[pf-1]);

//----------AND_B()

void AND_B() { --pf; temp[pf-1] = temp[pf-1] & temp[pf]; printf("\n\rTEMP= %u", temp[pf-1]); }

//----------AND_NOT()

void AND_NOT(int endf) { device_ent = read_eeprom(0x1C + endf); temp[pf-1] = temp[pf-1] & (~device_ent); printf("\n\rTEMP= %u", temp[pf-1]); }

//----------OR()

53
void OR() { --pf; temp[pf-1] = temp[pf-1] | temp[pf]; printf("\n\rTEMP= %u", temp[pf-1]); }

//----------OUT()

void OUT(int endf) { write_eeprom(0x1C + endf,temp[pf-1]); printf("\n\rTEMP= %u", temp[pf-1]); --pf; }

//----------OUT_NOT()

void OUT_NOT(int endf) { write_eeprom(0x1C + endf,~temp[pf-1]); printf("\n\rTEMP= %u", temp[pf-1]); --pf; }

//----------DISPLAY()

void DISPLAY(int endf) { long int valor; valor = read_long_eeprom(indice); printf(lcd_putc,"\Lu ", valor); printf("\Lu ", valor); }

54
//----------Carregar Ladder

void carregar_ladder() { while (carrega==0) { dados=getc(); if (pc>27) { dadosp[x]=dados; x++; if (x==2) { x=0; cod_prog = dadosp[0]; cod_prog = (cod_prog<<8) +dadosp[1]; write_program_eeprom (0x1c00 + p1,cod_prog); if (cod_prog == 0xffff) { lcd_gotoxy(1,1); printf(lcd_putc,"Ladder Carregado"); carrega=1; teste=0; delay_ms(1000); } p1++; } } else { write_eeprom( pc, dados ); pc++; } }

55

//-----------------zera eeprom void zera_eeprom() { while (i3<=55) { write_eeprom( 0x24+i3 , 0x00 ); i3++; } }

void atualizar_saida() { if (read_eeprom(0x24)==0xff) saida_porta.y0 = 1; else saida_porta.y0 = 0; if (read_eeprom(0x25)==0xff) saida_porta.y1 = 1; else saida_porta.y1 = 0; if (read_eeprom(0x26)==0xff) saida_porta.y2 = 1; else saida_porta.y2 = 0; if (read_eeprom(0x27)==0xff) saida_porta.y3 = 1; else saida_porta.y3 = 0; if (read_eeprom(0x28)==0xff) saida_porta.y4 = 1; else saida_porta.y4 = 0; if (read_eeprom(0x29)==0xff) saida_porta.y5 = 1; else saida_porta.y5 = 0; if (read_eeprom(0x2A)==0xff) saida_porta.y6 = 1; else saida_porta.y6 = 0; if (read_eeprom(0x2B)==0xff) saida_porta.y7 = 1; else saida_porta.y7 = 0; teste2=saida_porta; saida (teste2); printf (" \n\rSaida=%u ", teste2); }

void main() {

56

rs232_errors=0;

set_tris_c(0xb0); set_tris_a(0xFF); set_tris_d(0xff); set_tris_e(0xff);

setup_adc_ports( RA0_RA1_RA3_ANALOG ); setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 0 );

setup_adc(ADC_CLOCK_DIV_2);

setup_psp(PSP_DISABLED); setup_counters(RTCC_INTERNAL,RTCC_DIV_2); setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DIV_BY_1,249,5);

setup_ccp1(CCP_OFF); setup_ccp2(CCP_OFF);

lcd_init(); output_high(PIN_C0); output_low(PIN_C3);

zera_eeprom();

putc(0x0c); printf(lcd_putc,"\fMicroCLP"); printf("\fMicroCLP\n\r");

57
while (TRUE) {

entradas = ler_entrada(); if ( bit_test(entradas,0)) write_eeprom( 0x1C, 0xff); else write_eeprom( 0x1C, 0);

if ( bit_test(entradas,1)) write_eeprom( 0x1D, 0xff); else write_eeprom( 0x1D, 0);

if ( bit_test(entradas,2)) write_eeprom( 0x1E, 0xff); else write_eeprom( 0x1E, 0);

if ( bit_test(entradas,3)) write_eeprom( 0x1F, 0xff); else write_eeprom( 0x1F, 0);

if ( bit_test(entradas,4)) write_eeprom( 0x20, 0xff); else write_eeprom( 0x20, 0);

if ( bit_test(entradas,5)) write_eeprom( 0x21, 0xff); else write_eeprom( 0x21, 0);

if ( bit_test(entradas,6)) write_eeprom( 0x22, 0xff); else write_eeprom( 0x22, 0);

if ( bit_test(entradas,7)) write_eeprom( 0x23, 0xff); else write_eeprom( 0x23, 0);

selecao = ~ler_botoes(); while ((bit_test(selecao,2)==1)) {

teste = bit_test(selecao,1); switch (teste) {

58
break; case 1 : p2 = 0x1c00; p1 = 0; pc = 0; x = 0; carrega=0; lcd_gotoxy(1,1); printf(lcd_putc,"Carregar Ladder "); printf("Carregar Ladder "); carregar_ladder(); break; default : selecao = ~ler_botoes(); teste2 = bit_test(selecao,3); while (teste2==1) { lcd_gotoxy(1,1); printf("\r Aguardando "); ");

printf(lcd_putc," Aguardando delay_ms(200); selecao = ~ler_botoes(); if ((bit_test(selecao,0)==1)) teste2 = 0; }

break; } selecao = ~ler_botoes(); }

codigo = read_program_eeprom(p2); indice= codigo & 0b11111111; num_funcao= codigo >> 8; p2++;

lcd_gotoxy(1,1); printf(lcd_putc,"Executando ");

59
printf("Executando ");

switch (num_funcao) { case 0b000000 : LD(indice); printf(" LD %u", indice); break; case 0b000001 : LD_NOT(indice); printf(" LD_NOT %u", indice); break; case 0b000010 : AND(indice); printf(" AND %u", indice); break; case 0b000011 : AND_NOT(indice); printf(" AND_NOT %u", indice); break; case 0b000100 : AND_B(); printf(" AND_B %u", indice); break; case 0b000101 : OR(); printf(" OR %u", indice); break; case 0b000110 : OUT(indice); printf(" OUT %u", indice); break; case 0b000111 : OUT_NOT(indice); printf(" OUT_NOT %u", indice); break; case 0b001000 : DISPLAY(indice); break; case 0b111111 : printf ("END OF FILE!"); p2 = 0x1c00; atualizar_saida(); break; default : lcd_gotoxy(1,2); printf ("funcao nao implementada");

60
printf (lcd_putc,"funcao nao implementada"); break; }

delay_ms(100);

61 REFERNCIAS BIBLIOGRFICAS

[1] Acessado em 4/02/2007 http://www.engprod.ufjf.br/epd_automacao/EPD030_PLCs.pdf [2] Acessado em 10/09/2006 http://www.lee.eng.uerj.br/downloads/cursos/clp/clp_1.pdf [3] Acessado em 12/01/2006 - http:// www.ccsinfo.com [4] Acessado em 10/09/2006 - http://www.microchip.com [5] Acessado em 5/11/2006 http://www2.brazcubas.br/professores1/arquivos/20_franklin/T7037A/Projeto_PA C_-_Modulo_PIC.pdf [6] Acessado em 5/11/2006 - http://www.plcopen.org/ [7] Acessado em 4/02/2007 - http://www.cadsoft.de/ [8] Acessado em 5/11/2006 - http://www.plcs.net/ [9] Acessado em 11/09/2006 http://en.wikipedia.org/wiki/Programmable_logic_controller [10] - Acessado em 10/09/2006 http://ww1.microchip.com/downloads/en/DeviceDoc/3092c.pdf [11] Webb, John W.; Reis, Ronald A.. Programmable Logic Controllers: Principles and Applications. 4. ed. Rio de Janeiro, 1999.