UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO DEPARTAMENTO DE ENGENHARIA ELÉTRICA PROJETO DE GRADUAÇÃO

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

PAULO FRANKLIM MAIA RASKIM FERRUA

VITÓRIA – 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 Graduação do aluno Paulo Franklim Maia Raskim Ferrua, apresentado ao Departamento de Engenharia Elétrica do Centro Tecnológico da Universidade Federal do Espírito Santo, para obtenção do grau de Engenheiro Eletricista.

VITÓRIA – ES 02/2007

PAULO FRANKLIM MAIA RASKIM FERRUA

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

COMISSÃO EXAMINADORA:

___________________________________ Prof. Dr. Paulo Farias Santos Amaral Orientador

___________________________________ Prof. Dra. Raquel FrizeraVassallo Examinadora

___________________________________ Prof. Dr. Alessandro Mattedi Examinador

Vitória - ES, 23, Fevereiro, 2007

i . à minha namorada e aos meus amigos.DEDICATÓRIA À minha família.

que desenvolveu um projeto complementar a este. pela ajuda e por facilitar a comunicação entre os projetos.AGRADECIMENTOS Agradeço ao professor Paulo Amaral pela sua importante ajuda quando já estava sem saber o que fazer. Agradeço a meu companheiro Rogério Costa Pacheco Neto. ii . Agradeço ao professor José Denti por nos apresentar o CLP em sua disciplina de Supervisão e Controle de Processos.

...............................41  Figura 18 .............................................................................Vista superior do Micro-CLP.................Diagrama Ladder do controle do portão eletrônico .........................Circuito elétrico das entradas digitais ......Circuito elétrico das saídas analógicas ......................................14  Figura 3 Diagrama lógico (esquerda) e programa ladder (direita) para o acionamento de um motor...................22  Figura 7 .........Vista lateral esquerda do Micro-CLP ...........26  Figura 11 .........................................................................................................Vista lateral direita do Micro-CLP ...41  Figura 16 ........Fluxograma do programa residente ...............................................................9  Figura 2 Estrutura básica de funcionamento de um CLP ...Vista traseira do Micro-CLP ..........Linguagem intermediária enviada ao Micro-Clp ..40  Figura 14 .......................21  Figura 6 ...........................23  Figura 8 ........................................................................20  Figura 5 ..................Circuito elétrico das saídas digitais........................................................39  Figura 13 .........................................................................24  Figura 9 ...... .................................Circuito elétrico da entrada analógica.............Alocação da memória de programa ........................................................Placa de entradas e saídas ...........41  Figura 17 ......................................................................25  Figura 10 ...............LISTA DE FIGURAS Figura 1 Diagrama esquemático do Micro-CLP...............................Vista frontal do Micro-CLP ............................42  iii .............................17  Figura 4 ....................................29  Figura 12 ...........Alocação da memória de dados EEPROM .......................................Esquema de comunicação serial ......................40  Figura 15 ..................................42  Figura 19 .............................

...............Mapeamento das Variáveis......LISTA DE TABELA Tabela 1 ..Codificação das Instruções ..........................................................................................27  Tabela 2 ..........28  iv ..........................

GLOSSÁRIO CLP Controlador Lógico Programável EEPROM Electrically-Erasable Programmable Read-Only Memory PLC Programmable Logic Controller. PID Proporcional-Integral-Derivativo PWM Pulse Width Modulation ou Modulação por Largura de Pulso

v

SUMÁRIO DEDICATÓRIA........................................................................................................... I  AGRADECIMENTOS .............................................................................................. II  LISTA DE FIGURAS ............................................................................................... III  LISTA DE TABELA ................................................................................................ IV  GLOSSÁRIO ............................................................................................................... V  RESUMO ................................................................................................................ VIII  1  INTRODUÇÃO ................................................................................................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 LÓGICO PROGRAMÁVEL .......................................13  2.1 Funcionamento do CLP ....................................................................................14  2.2 Programação do CLP ........................................................................................15  2.2.1 Linguagem LADDER ou Diagrama de Relés .........................................16  3  DESENVOLVIMENTO DO HARDWARE ................................................18  3.1 Microcontroladores PIC ....................................................................................18  3.1.1 Características do PIC 16F877 ................................................................18  3.2 Definições .........................................................................................................19  3.3 Entradas Digitais ...............................................................................................19  3.4 Saídas Digitais ..................................................................................................20  3.5 Entradas Analógicas..........................................................................................21  3.6 Saídas Analógicas .............................................................................................22  3.7 A Fonte de Alimentação ...................................................................................23  3.8 Display LCD .....................................................................................................23  3.9 Botões................................................................................................................24  3.10 Comunicação Serial ........................................................................................24  4  DESENVOLVIMENTO DO PROGRAMA RESIDENTE ........................25  4.1 Cabeçalho ..........................................................................................................25  vi

4.2 Instruções ..........................................................................................................26  4.3 Variáveis ...........................................................................................................27  4.4 Programação do PIC .........................................................................................29  4.4.1 Entradas e Saídas Digitais .......................................................................29  4.4.2 Entradas Analógicas ................................................................................30  4.4.3 Controle do PWM ...................................................................................31  4.4.4 Interrupções .............................................................................................31  4.4.5 Cronômetros (Timers) .............................................................................32  4.5 Rotinas ..............................................................................................................32  4.5.1 Rotina Principal .......................................................................................33  4.5.2 Carregamento do Ladder .........................................................................35  4.5.3 Função AND() .........................................................................................37  4.6 Monitorando o programa pela porta serial ........................................................37  5  6  TESTES E RESULTADOS ...........................................................................38  CONCLUSÕES ..............................................................................................43 

APÊNDICE A – CIRCUITO PRINCIPAL .............................................................44  APÊNDICE B – CIRCUITO COMPLETO DE ENTRADAS DIGITAIS ...........45  APÊNDICE C – CIRCUITO COMPLETO DE SAÍDAS DIGITAIS ..................46  APÊNDICE D – CIRCUITO COMPLETO DE ENTRADAS ANALÓGICAS ..47  APÊNDICE E – CIRCUITO COMPLETO DE SAÍDAS ANALÓGICAS .........48  REFERÊNCIAS BIBLIOGRÁFICAS.....................................................................61 

vii

escolhido para desempenhar a função de micro PLC. Para tal foi necessário estudar os PLCs do mercado. a fim de adequar as funções a serem implementadas. A seguir estudou-se profundamente as características do PIC 16F877.RESUMO Este trabalho apresenta o estudo e o desenvolvimento de um micro PLC em um microcontrolador da família PIC da empresa Microchip. Para o desenvolvimento desse software nativo no PIC. O micro PLC também é composto por um software capaz de executar um programa específico de controle. As funcionalidades dos Micro-PLCs atuais também foram observadas. viii . algo como um mini-sistema operacional. estudou-se a linguagem de programação C. analisando suas características e aplicações principais. De posse deste conhecimento foi possível projetar a interface de entradas e saídas do Micro-PLC.

Figura 1 Diagrama esquemático do Micro-CLP . capacidade de manipular uma grande quantidade de variáveis digitais e analógicas. Na Figura 1 observa-se o esquema base do projeto. Surgiu então a alternativa de CLPs mais simples.9 1 INTRODUÇÃO A necessidade de automatizar sistemas tem impulsionado o desenvolvimento de novos equipamentos. Os Controladores Lógicos Programáveis disponíveis no mercado possuem um grande poder de processamento. possuindo assim um preço mais acessível. Este projeto visa a pesquisa e o desenvolvimento de um CLP com poucas entradas e saídas em um microcontrolador PIC garantindo assim um baixo custo e boa funcionalidade. Esta capacidade possui um preço que inviabiliza sua aplicação para sistemas com menor complexidade.

Felizmente compiladores de linguagem de alto nível estão disponíveis e nos permitem programar o PIC a um nível mais amigável. Na programação do PIC este arquivo compilado aparecerá como um arquivo '. Estudo dos micro PLCs 2. Normalmente o software é escrito e compilado em um PC e então carregado na ROM como código de máquina. Definição das especificações do projeto 3. . O compilador inclui muitas funções em forma de bibliotecas para acessar o hardware de PIC.1 Ferramentas Utilizadas O código a ser desenvolvido deve ser escrito. e se necessário. Para microcontroladores PIC a programação é realizada mediante o aplicativo MPLAB.1 Compilador C CCS O compilador C CCS inclui uma biblioteca de programas de exemplo para muitas aplicações comuns. Se o programa é escrito em linguagem assembler. testado. 1. Implementação da placa de interface entradas/saídas 4. Programar um PIC utilizando linguagem assembler pode ser no princípio muito difícil e poderia resultar em um extenso procedimento de depuração. Este software está disponível para download grátis na internet (www.hex'. as instruções de instalação elétrica para conectar dispositivos externos [3].com). e armazenado na ROM do microcontrolador. Estudo e definição do programa base executado pelo PIC 1.10 Este projeto foi elaborado a partir das seguintes etapas: 1.1. Neste projeto é utilizado um compilador C chamado CCS. Cada programa de exemplo contém um cabeçalho com instruções de como rodar o exemplo.microchip. o PC tem que ter um compilador para gerar o código de máquina para o microcontrolador.

fabricante dos PICs. O Simulador é o programa que simula o funcionamento da CPU (PIC). qual o layout das janelas etc. 1.3 Eagle Este software é utilizado para desenhar circuitos impressos e esquemas eletrônicos. conforme o programa fonte que está sendo desenvolvido. O MPLAB integra num único ambiente o editor de programa fonte. O Compilador é o programa que converte o fonte em códigos de máquina. É distribuído gratuitamente pela Microchip.2 MPLAB O MPLAB é um programa que tem a função de um gerenciador. isto ajuda a encontrar uma colocação que permita a disposição mais eficiente das trilhas [7]. ou simplesmente fonte do programa é uma seqüência em texto. Enfim o projeto é o nosso trabalho de uma forma global.1. O Programa fonte. para o desenvolvimento de projetos com a família PIC de microcontroladores. com a ajuda das linhas coloridas que mostram as conexões eventuais entre os pinos que são requeridos pelo diagrama esquemático. Os componentes são arranjados manualmente na placa. sem se preocupar em fechar todas as janelas abertas no ambiente integrado [4]. E para ele guardar todas essas informações basta salvar e fechar só o projeto. qual a linguagem de programação usada. de textos de um aplicativo para outro de uma forma bem simplificada.1.11 1. O Projeto no MPLAB é um conjunto de arquivos e informações que diz ao ambiente integrado qual o PIC que estamos usando. permitindo cópia de arquivos. . Eagle é a sigla para Easily Applicable Graphical Layout Editor. qual freqüência de clock. o simulador e quando conectado às ferramentas da Microchip também integra o gravador do PIC. o emulador etc. É importante lembrar que o MPLAB se integra ao ambiente Windows. o compilador. escrita numa linguagem de programação que será convertida em códigos de máquina para ser gravado no PIC.

O Capítulo 3 apresenta o PIC16F877. assim como seus resultados. O Capítulo 6 apresenta os resultado obtidos. O Capítulo 5 mostra o desenvolvimento do programa residente. . No Capítulo 2 será apresentado o controlador lógico programável.12 Este relatório apresenta os conceitos necessários para a elaboração do projeto. O Capítulo 4 mostra o desenvolvimento do hardware. e Capítulo 7 conclui o trabalho.

vários tipos de máquinas ou processos [9]. motivo pelo qual substituíram os tradicionais painéis de controle a relés. Segundo a NEMA (National Electrical Manufactures Association). A grande vantagem dos controladores programáveis é a possibilidade de reprogramação. Geralmente as famílias de Controladores Lógicos Programáveis são definidas pela capacidade de processamento de um determinado número de pontos de Entradas e/ou Saídas (E/S). ou seja. controlando. tornando-se mais barato simplesmente substituir todo painel por um novo. com processos em que as variáveis assumem valores zero ou um (ou variáveis ditas digitais. que só assumem valores dentro de um conjunto finito). Podem ainda lidar com variáveis analógicas definidas por intervalos de valores de corrente ou tensão elétrica. As entradas e/ou saídas digitais são os elementos discretos. é um equipamento eletrônico digital com hardware e software compatíveis com aplicações industriais. tais como: lógica. Controlador Lógico Programável Segundo a ABNT (Associação Brasileira de Normas Técnicas). sequenciamento. ou seja. as entradas e/ou saídas analógicas são os elementos variáveis entre valores conhecidos de tensão ou corrente [2]. contagem e aritmética. Os CLPs permitiram transferir as modificações de hardware em modificações no software [1]. . é um aparelho eletrônico digital que utiliza uma memória programável para armazenar internamente instruções e para implementar funções específicas. temporização. Esses painéis necessitavam de modificações na fiação cada vez que se mudava o projeto. baseado num microprocessador que desempenha funções de controle de diversos tipos e níveis de complexidade. por meio de módulos de entradas e saídas.13 2 CONTROLADOR LÓGICO PROGRAMÁVEL Um Controlador Lógico Programável é um computador especializado. O CLP começou a ser usado no ambiente industrial desde 1960 embora ainda existam muitas empresas do ramo da indústria de automação que possuem pouca experiência com eles. o que muitas vezes era inviável. Um CLP é o controlador indicado para lidar com sistemas caracterizados por eventos de lógica binária.

as quais são: fonte de alimentação. no outro caso a aplicação se dá nas áreas relacionadas com a produção em linhas de montagem. Softwares de supervisão controlam redes de Controladores Lógicos Programáveis. Num sistema típico. e interfaces de entrada e saídas ou I/O. por exemplo na indústria do automóvel. 2. materiais gasosos e outros produtos.14 Os CLPs estão muito difundidos nas áreas de controle de processos e de automação industrial. CPU (Unidade Central de Processamento). Com isto podem ser supervisionados por computadores formando sistemas de controle integrados. Os CLPs têm capacidade de comunicação de dados via canais seriais. Cada unidade que compõe um CLP é responsável pelo seu funcionamento. Com essa finalidade o CLP possui uma arquitetura bastante conhecida baseada em microcontroladores e microprocessadores.1 Funcionamento do CLP O funcionamento de um CLP corresponde a três etapas distintas. processamento e saídas. as quais são: entradas. Essas etapas são ilustradas na Figura 2. . toda a informação dos sensores é concentrada no controlador (CLP) que de acordo com o programa em memória define o estado dos pontos de saída conectados a atuadores. produtoras de líquidos. Figura 2 Estrutura básica de funcionamento de um CLP O hardware de um CLP é formado por três unidades distintas. No primeiro caso a aplicação se dá nas indústrias com processos do tipo contínuo.

Outro ponto destacável. Com exceção dos CLPs de pequeno porte. a CPU era constituída por um microcontrolador. • IL – Instructions List ou Lista de Instruções. . Esse valor já é utilizado com a finalidade de alimentar os módulos de entrada e saída de dados e a CPU ao mesmo tempo. Outra característica importante é que normalmente as máquinas industriais. e este foi o escolhido para a programação do micro-CLP. endereço e controle). 2. é que essa tensão já é compatível com o sistema de comunicação RS-232. funcionam com essa tensão por ser bem menos suscetível a ruídos. Inicialmente com a 2ª geração de CLP (barramento de dados.Sequential Function Chart ou diagramas de funções seqüenciais.15 • Fonte de Alimentação: A alimentação de energia do CLP utiliza uma fonte chaveada e uma única tensão de saída de 24 V.2 Programação do CLP Atualmente o IEC 61131-3 define cinco modos de programação para os controladores lógicos programáveis. • Interfaces de I/O: As entradas e saídas de um CLP podem ser divididas em duas categorias: as analógicas e digitais. os CLPs apresentam um microprocessador na forma de um CI (Circuito Integrado) dedicado [6]. • Texto estruturado. • SFC . Dentre estes o mais amplamente utilizado é o Ladder. • CPU: É responsável pela execução do programa do usuário. São eles: • LADDER ou Diagrama de Relés. • Linguagens de blocos funcionais. atualização da memória de dados e memória-imagem das entradas e saídas. A opção por microcontroladores baseava-se pelo custo-benefício. facilidade de manuseio. geralmente. e também pela baixa complexidade dos softwares.

cujo símbolo é –|/|–. por exemplo. Como exemplo de um programa em ladder. o comportamento real do contato elétrico de um relé. imaginemos um motor que é controlado por dois botões independentes. todo diagrama ladder pode ser traduzido para uma diagrama lógico e vice-versa.16 O desenvolvimento de um ambiente de programação Ladder não é contemplado por este projeto. capaz de ativar um dispositivo externo.1 Linguagem LADDER ou Diagrama de Relés Relés são pequenos dispositivos eletromecânicos que. logicamente. Num diagrama ladder.2. cujo símbolo é –( )–. Contudo. que então é atribuído a uma saída. As bobinas modificam o estado lógico do operando na memória do Controlador Programável. no programa aplicativo. Estes elementos refletem. . A passagem ou não de corrente elétrica pelo contato pode ser associada aos estados lógicos “verdadeiro” e “falso” respectivamente. de uma forma bem similar à lógica de relés empregada até então. • Saídas: São usualmente representadas pela bobina simples. e pelos contatos normalmente fechados (NF). a notação gráfica e mais compacta dos diagramas lógicos faz com que os mesmos sejam essenciais na documentação de projetos de automação e controle. representados pelo símbolo –||–. fecham (no caso dos relés “normalmente abertos”) ou abrem (no caso dos “normalmente fechados”) um contato elétrico. por técnicos e engenheiros eletricistas. mas é o tema do projeto de graduação do aluno Rogério Costa Pacheco Neto. um de LIGA e outro de DESLIGA. A chamada linguagem ladder surgiu para possibilitar a programação dos CLPs. como um motor. quando energizados. 2. elementos de entrada combinam-se de forma a produzir um resultado lógico booleano. Por lidarem com objetos booleanos. A representação destes elementos é feita da seguinte forma: • Entradas: São na maioria das vezes representadas por contatos normalmente abertos (NA).

.17 Considerando que ambos os botões sejam do tipo pushbutton. a Figura 3 apresenta uma lógica simples para o acionamento do motor com base nos estados dos botões: Figura 3 Diagrama lógico (esquerda) e programa ladder (direita) para o acionamento de um motor.

Sua pinagem DIP tem 40 pinos. etc).5V. usando ciclo de instrução mínimo de 4 períodos de clock. Há o reconhecimento de interrupções tanto externas como de periféricos internos. primeiramente escolheu- se o microcontrolador. Os microcontroladores PIC têm famílias com núcleos de processamento de 12 bits. SOIC. 14 bits e 16 bits e trabalham em velocidades de até 48MHz. Pode funcionar com alimentação de 2V a 5. 3. resultando em uma velocidade de processamento de 5 MIPS. Sua frequência de operação (clock) vai até 20MHz. Funcionam com tensões de alimentação de 2 a 6V e os modelos possuem encapsulamento de 6 a 100 pinos em diversos formatos (SOT23. Seu conjunto de instruções RISC se compõe de 35 instruções. Como periféricos ele possui: • 5 conjuntos de portas de entrada e saída (total de 33 portas) .1 Microcontroladores PIC Os PIC (PICmicro) são uma família de microcontroladores fabricados pela Microchip Technology. 3. DIP. memória RAM com 368 bytes e memória EEPROM com 256 bytes. que processam dados de 8 bits (recentemente foi lançada uma família de 16 bits com prefixo 24F) com extensa variedade de modelos e periféricos internos. EEPROM e OTP. com arquitetura Harvard e conjunto de instruções RISC (conjuntos de 35 instruções a 76 instruções).18 3 DESENVOLVIMENTO DO HARDWARE Para a determinação do hardware que será montado. a comunicação serial. TQFP. depois os circuitos de entradas e saídas. a fonte. o que permite uma velocidade de no máximo 10 MIPS. o display LCD e os botões. Possui memória flash de programa com 8192 palavras de 14 bits.1 Características do PIC 16F877 O PIC 16F877 é um microcontrolador da família de 8 bits e núcleo de 14 bits fabricado pela Microchip Technology. com recursos de programação por Memória Flash.1.

• RC3 recebendo uma transição positiva habilita as saídas. O circuito de entradas digitais é isolado de interferências externas por meio de opto acopladores.3 Entradas Digitais Para o barramento de dados definiu-se a porta D do microcontrolador PIC16F877. As entradas são de 24V. isto também é necessário para o isolamento dos circuitos do micro-CLP. pois a partir desse ponto foi possível determinar as funções de cada pino do PIC16F877 e o fluxo de dados do CLP. Características: • 8 entradas digitais • 8 saídas digitais • 3 entradas analógicas • 2 saídas PWM • 1 display LCD com 2 linhas e 16 colunas • 4 botões 3. O sistema possui um GND interno e um GND EXT externo. O sentido do fluxo de dados neste barramento é determinado pelos pinos: • RC0 em nível baixo habilita as entradas.19 • Conversor analógico-digital de 10 bits de resolução e 8 canais de entrada • Periférico de comunicação paralela e serial (USART e MSSP) • 2 Módulos CCP (Comparação.2 Definições A definição de um hardware básico é o ponto principal do projeto. possibilitando oito entradas e saídas digitais. Captura e PWM) • 3 Timers (1 de 16 bits e 2 de 8 bits) • Watchdog timer 3. .

demonstrando que a entrada está ativa. com o barramento habilitado para entrada. logo o pino RD0 recebe um nível alto. 2. logo este circuito possui um GND (interno) e um GND EXT (externo).Circuito elétrico das entradas digitais 3. O LED1 conduz. pode-se observar O circuito funciona da seguinte forma quando alimentamos um pino de entrada: 1. que drena a corrente. O Sinal é invertido na saída do chip. Por conseguinte o LED do opto acoplador também é ativado. 4.4 Saídas Digitais O circuito de saídas digitais a transistor é isolado de interferências externas por meio de opto acopladores. 5.20 Tomando como exemplo a entrada IN_0 da Figura 4. Dessa forma um nível baixo chega à porta A1 do chip 74HC240N. Figura 4 . Ocorre a saturação do transistor do opto acoplador. A separação dos terras também é necessária para manter o isolamento dos circuitos. 3. .

Adotou-se três tipos entradas analógicas para cada canal selecionáveis por meio de jumpers. RA1 e RA3. ocorre o seguinte: • O LED do opto acoplador pára de emitir. indicando saída ativa. São estes: .5 Entradas Analógicas As entradas analógicas são tratadas por conversão AD realizada pelo próprio microcontrolador PIC. • Consequentemente o transistor do opto acoplador é cortado.Circuito elétrico das saídas digitais 3. Estas se encontram nos pinos RA0. quando chega ao pino RD0 um nível alto. • Com isso o LED1conduz.21 Analisando o circuito de saída do pino OUT_0 da Figura 5. • Finalmente OUT_0 recebe nível baixo. Figura 5 . com o barramento habilitado para saída.

Para entrada de 0 a 5V. deve-se colocar o jumper JP2 na posição 1-2 e o jumper JP1 na posição 5-3.Circuito elétrico da entrada analógica 3. . Para entrada de 4 a 20mA.6 Saídas Analógicas As saídas analógicas são de dois tipos: • Sinal PWM • 0 a 5V O sinal PWM é obtido diretamente do PIC16F877 nos pinos RC1 (CCP2) e RC2 (CCP1). deve-se colocar o jumper JP2 na posição 2-3 e o jumper JP1 na posição 6-4.22 • 0 a 5V • 0 a 10V • 4 a 20mA Para entrada de 0 a 10V. As saídas de 0 a 5V são obtidas a partir do sinal PWM. deve-se colocar o jumper JP2 na posição 1-2 e o jumper JP1 na posição 1-3. Figura 6 .

Quando está em nível alto. A linha Read. será escrita uma instrução no LCD.Write (R/W). . A linha Enable (E). 3. Quando (E) está em nível alto. o LCD interpreta o tipo de dados presentes nas linhas de dados.Circuito elétrico das saídas analógicas 3. RB5. Quando está em nível baixo. determina o sentido dos dados entre o microcontrolador e o LCD. ligada no pino RB3.8 Display LCD A placa está provida de um LCD alfanumérico padrão de 16 colunas por 2 linhas. caracter será escrito no LCD. o LCD fica inibido e ignora os sinais R/W e RS. RB6 e RB7 do microcontrolador para enviar dados. Com a ajuda da linha de Selecção de registo (RS). Também é necessário uma alimentação de 24V. São utilizados os pinos RB4. os dados serão escritos no LCD.7 A Fonte de Alimentação Este projeto não contempla a construção de uma fonte de alimentação. Quando está em nível baixo. o LCD verifica os estados das duas linhas de controle e reage de acordo com estes. os dados serão lidos do LCD. O Micro-CLP necessita de uma alimentação de 5V e 12V fornecidas por uma fonte AT de computador. Quando está em nível alto. ligada no pino RB2. Quando a linha de habilitar (Enable) está em nível baixo. esta fornecida por uma fonte do laboratório de Microprocessadores 1.23 Figura 7 . permite a ativação do display e a utilização das linhas R/W e RS.

Figura 8 . Figura 14. estão ligados da seguinte forma: • Botão B1 ligado ao pino RE2 • Botão B3 ligado ao pino RE1 • Botão B5 ligado ao pino RE0 • Botão B8 ligado ao pino RB0 3. A comunicação é feita com 2 vias.9 Botões Os botões da parte frontal do Micro-CLP. A montagem pode ser vista Figura 8.24 3. a via de TX está ligada ao pino RC6 e a via de RX está ligada ao pino RC7 do microcontrolador.10 Comunicação Serial A placa possui um driver RS232 para adequar os níveis de tensão do microcontrolador (TTL) ao padrão RS232C (+12V e – 12V).Esquema de comunicação serial .

referência do PID1 e do PID2 respectivamente. • K1 e K2 – Constantes de comparação. temporizadores. a recepção. a leitura das entradas. • KP1 e KP2 – Constantes de proporcionalidade.25 4 DESENVOLVIMENTO DO PROGRAMA RESIDENTE O programa residente é o responsável pela inicialização do micro-CLP. Figura 9 . contadores e comparadores é necessário o envio de algumas constantes específicas para cada função. • KD1 e KD2 – Constantes de derivação. a atualização das saídas.1 Cabeçalho Para a manipulação das funções de controlador Proporcional-IntegralDerivativo (PID). a interpretação e a execução do programa Ladder. a execução do programa Ladder. . • KI1 e KI2 – Constantes de integração. O programa Ladder é gravado em um espaço reservado da memória de programa EEPROM a partir do endereço 0x1C00. gravação. São elas: • SP1 e SP2 – Set Point.Alocação da memória de programa 4.

a partir do endereço 0x00 até o endereço 0x1B. Nota-se que este bloco possui um tamanho fixo de 28 bytes. Figura 10 . Como a memória de dados EEPROM é formada por palavras de oito bits.Alocação da memória de dados EEPROM 4.26 • KT1 e KT2 – Constantes de temporização. • KC1 e KC2 – Constantes dos contadores. Foram implementadas as seguintes funções de um programa Ladder básico: • LD() • LD_NOT() • AND() . cada constante ocupa dois endereços na memória. A este conjunto de constantes deu-se o nome de cabeçalho. O cabeçalho é armazenado na memória de dados EEPROM.2 Instruções Para definir a possível quantidade de instruções é necessário determinar o formato das instruções na palavra de 14 bits da memória de programa EEPROM. Para cada constante reservou-se o tamanho de dois bytes. É o primeiro bloco de informações enviado para o micro-CLP. O padrão escolhido é o seguinte: Instruções Digitais Bits de 13 a 8 – Código da instrução Bits 7 a 0 – Índice das variáveis Logo é possível um conjunto de 64 instruções com os seis bits do campo de instruções.

Codificação das Instruções Instrução LD() LD_NOT() AND() AND_NOT() AND_B() Codificação 000000 000001 000010 000011 000100 Instrução OR() OUT() OUT_NOT() DISPLAY() END Codificação 000101 000110 000111 001000 111111 4.3 Variáveis De posse da quantidade de entradas e saídas passa-se a definir as variáveis digitais e analógicas possíveis. • Iniciadas com ‘Y’ – variáveis digitais de saída física. A denominação das variáveis evidencia a separação dos tipos da seguinte maneira: • Iniciadas com ‘X’ – variáveis digitais de entrada física. Tabela 1 . A Tabela 2 mostra o mapeamento das variáveis que serão gravadas na memória de dados EEPROM a partir do endereço 0x1C. • Iniciadas com ‘N’ – variáveis digitais de saída do comparador 2. que é o endereço imediatamente após o cabeçalho de constantes.27 • AND_B() • AND_NOT() • OR() • OUT() • OUT_NOT() • DISPLAY() • END Na Tabela 1 encontram-se a codificação de cada instrução. • Iniciadas com ‘I’ – variáveis digitais internas. . • Iniciadas com ‘M’ – variáveis digitais de saída do comparador 1.

• Iniciadas com ‘IN’ – variáveis analógicas internas.Mapeamento das Variáveis Denominação 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 Denominação M 0 M 1 M 2 N 0 N 1 N 2 A N 0 A N 0 A N 1 A N 1 A N 2 A N 2 S A 0 S A 0 S A 1 S A 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 . Tabela 2 . O campo ‘Índice’ da Tabela 2 é usado para apontar o endereço das variáveis na memória. • Iniciadas com ‘SA’ – variáveis analógicas de saída física.28 • Iniciadas com ‘AN’ – variáveis analógicas de entrada física.

a leitura das entradas.29 4. Caso o botão B8 seja pressionado segue-se ao processo “Aguardando” que é um estado parado.4. pressionando-se o botão B5 volta-se ao estado de execução do programa principal. dos tipos.1 Entradas e Saídas Digitais Os pinos que têm a notação R podem ser utilizados como entradas ou saídas digitais.Fluxograma do programa residente Ao ligar o Micro-CLP. saídas. ocorre: a inicialização do PIC. passa-se à definição do programa residente. Início Inicialização Leitura das entradas. das instruções e das configurações de hardware.4 Programação do PIC De posse das definições de número de entradas. cujo fluxograma é mostrado na Figura 11. durante este processo ao apertar-se os botões B1 e B3 entra-se no processo de Carregamento de um novo programa Ladder. Execução do Programa Ladder Atualização das saídas Carregamento do Programa Ladder Aguardando Ladder Carregado Figura 11 . RD[0-7] configuram oito bits de I/O bidirecional (porta D). De forma . a execução do programa Ladder e a atualização das saídas. volta-se para o processo de execução do programa principal. 4. terminando-se o carregamento.

É possível fixar todos os canais A ou E como analógicos ou pode-se definir canais específicos para serem analógicos[5].4. Observa-se a utilização desta função no trecho de código a seguir. Exemplo: // Todos os pinos são analógicos setup_adc_ports (ALL_ANALOG).2 Entradas Analógicas Os pinos identificados como AN podem ser usados como entradas analógicas. Neste caso AN[0-4] (pinos 2. 5 & 7). A1 e A3 são analógicos e todos os outros são digitais. O bit menos significativo se refere ao pino 0 de A. ocorre para as outras portas. // Pinos A0. 3. +5v é utilizado como referência de entrada analógica. O valor binário 1 indica que o pino é configurado como entrada e o valor 0 indica que o pino é configurado como saída. . setup_adc_ports (RA0_RA1_RA3_ANALOG). } Os valores output de todos os pinos digitais podem ser mudados usando os comandos seguintes simultaneamente: output_b(0xFF). A função em CCS para setar a direção estas portas é set_tris_d() para a porta D. output_high(PIN_C0). O PIC16F877 tem um ADC interno (conversor analógico digital) que nos permite introduzir valores analógicos mediante as portas A e E. ent=input_d(). 4. set_tris_d(0xff).30 semelhante. C. B. D ou E. // Leitura do estado das entradas int ler_entrada() { int ent. // fixa todos os pinos de saída de B em 1 4. return ent. output_low(PIN_C0).

Na realidade quando o diagrama de pinos é analisado. Também podem ser usados para ler um pulso de uma entrada. O PIC pode ter dois drivers com controle de PWM.3 Controle do PWM Os pinos relativos à Modulação por Largura de Pulso (PWM) são CCP1 e CCP2. Para ativar o controle de PWM primeiro a porta CCP deve ser configurada como saída. Neste caso é necessário setar pino C1 como uma saída utilizando o comando set_tris_c () .4 Interrupções Uma interrupção é um evento que força uma chamada a uma seqüência de dados que normalmente é definida como rotina ou serviço de interrupção. setup_adc_ports (A0_RA1_ANALOGRA3_REF). //esta demora é um imperativo para o PIC trabalhar delay_us(10). Como um exemplo.31 // Pinos A0 e A1 são analógicos. Utiliza-se o comando: setup_ccp1(CCP_PWM) / / configura CCP1 como um PWM 4. // leia o valor digital do sinal analógico value = read adc(). uma mudança em quaisquer das entradas RB4 .RB7 ou a saturação (overflow) de algum contador ou timer na mudança de valor de 0xFF(255) para 0x00 . os pinos CPP são RC1 e RC2[5]. Fontes típicas de interrupções no PIC incluem uma transição positiva ou negativa na entrada de RB. 4. Pino RA3 é usado para a voltagem de referência e todos os outros pinos são digitais. assumir que nós queremos usar CCP1 como um PWM para acionar um motor.4. //lendo um valor analógico //isto fixará a porta AN2 como analógica set_adc_channel(2). Na maioria dos casos o algoritmo PWM é utilizado para acionamento de motores.4.0/INT.

Se fixamos o cronômetro para contar de 0. Como exemplo considerar set_timer0(0) contará 0.2. (1x1000000/256) = 3906... Timer_1 e Timer_2 consideram valores de 16 bits.5 Cronômetros (Timers) Cronômetro é uma rotina de interrupção especialmente disponível com PIC.25 interrupções de cronômetro.1. Todas as contas dos cronômetros são incrementais e quando um cronômetro alcança o valor de máximo deverá retornar ao seu valor inicial..1. 1 segundo.0. o processador salva o endereço de retorno na pilha e o controle de programa é redirecionado à rotina de serviço de interrupção[5]. .4.32 (0).25 incrementos por segundo ou 256us por incremento. 4.254. Na interrupção. Pode-se usar este método para contar um período de tempo pre-especificado. As operações de cronômetro típicas são Timer_0.5 Rotinas Nesta seção analisaremos algumas rotinas principais. Se um valor preciso é requerido. o número total de contas requeridos para um segundo de duração é dado por. Se a velocidade do clock é 4MHz e se fixássemos o RTCC_DIV a 256 (valor máximo) o contador incrementará a uma taxa (4000000/4)/256 vezes por segundo que é 3906. Timer_0 ou RTCC assume um valor inteiro de 8 bits (max 255). O PIC tem um número de cronômetros que podem ser usados para executar operações de cronometragem.. Ou nós podemos aproximar a 15 interrupções de cronômetro.25 contas. o valor de DIV poderia ser diminuído para reduzir o erro. temos um total de 3906.255. 4.. Timer_2 ou RTCC. 2 segundos e assim por diante.25 /256 = 15.. Seguindo o anterior exemplo. Os cronômetros consideram valores inteiros na forma set_timer0 ou set_RTCC (valor). Timer_1.

"Carregar Ladder "). x = 0. carregar_ladder(). else write_EEPROM( 0x1C. O trecho de código abaixo mostra a leitura da entrada X0.1). case 1 : p2 = 0x1c00.2)==1)) { teste = bit_test(selecao. while ((bit_test(selecao. lcd_gotoxy(1. da seguinte forma: carrega o estado das variáveis de entrada para suas respectivas posições de memória.0)) write_EEPROM( 0x1C. 0xff). . teste2 = bit_test(selecao. selecao = ~ler_botoes().1 Rotina Principal A rotina principal inicializa e lê as entradas.1).33 4. break.1). segue-se para o trecho em que escolhe-se: carregar um novo programa Ladder ou ficar parado. pc = 0. default : selecao = ~ler_botoes().5. if ( bit_test(entradas. while (teste2==1) { lcd_gotoxy(1. 0). printf(lcd_putc. switch (teste) { break. printf("Carregar Ladder "). p1 = 0. carrega=0. Depois de ler todas as entradas (X0 a X7). entradas = ler_entrada().3).

break. } A seguir o programa é executado. } selecao = ~ler_botoes(). printf(" AND %u". selecao = ~ler_botoes(). printf(lcd_putc. indice). printf(" LD %u".1). lcd_gotoxy(1. switch (num_funcao) { case 0b000000 : LD(indice).34 printf("\r Aguardando "). case 0b000001 : LD_NOT(indice). "). case 0b000010 : AND(indice). p2++. printf(lcd_putc. break. ").0)==1)) teste2 = 0. E sua saída é atualizada ao final de cada ciclo do programa Ladder. . num_funcao= codigo >> 8. indice). indice)." Aguardando delay_ms(200). indice= codigo & 0b11111111. printf(" LD_NOT %u". } break. if ((bit_test(selecao. quando é encontrada a função END. codigo = read_program_eeprom(p2)."Executando printf("Executando ").

2). break. } 4. A função getc() espera um byte chegar. printf(" OUT %u". break. printf(" OUT_NOT %u". case 0b000110 : OUT(indice). indice). break. atualizar_saida().35 break. break."funcao nao implementada"). indice). printf(" OR %u". case 0b111111 : printf ("END OF FILE!"). case 0b000011 : AND_NOT(indice). Enquanto o contador pc for menor do . indice). indice). default : lcd_gotoxy(1. printf(" AND_B %u". case 0b000101 : OR(). case 0b001000 : DISPLAY(indice). break. break. case 0b000100 : AND_B(). printf ("funcao nao implementada"). } delay_ms(100). p2 = 0x1c00.5.2 Carregamento do Ladder A rotina abaixo recebe os dados enviados pelo programa através da porta serial. case 0b000111 : OUT_NOT(indice). break. printf(" AND_NOT %u". indice). printf (lcd_putc. break.

} } . x++. } p1++. cod_prog = (cod_prog<<8) +dadosp[1]. write_program_EEPROM (0x1c00 + p1. if (x==2) { x=0. cod_prog = dadosp[0]. logo são armazenados na memória de programa EEPROM. Quando pc atinge 28.cod_prog).1).36 que ou igual 27 significa que os dados que estão chegando pertencem ao cabeçalho. a cada dois bytes formam-se uma palavra que é gravada na memória de programa. carrega=1. estas são as instruções Ladder . void carregar_ladder() { while (carrega==0) { dados=getc(). printf(lcd_putc."Ladder Carregado"). if (pc>27) { dadosp[x]=dados. if (cod_prog == 0xffff) { lcd_gotoxy(1. dados ). pc++. } } else { write_EEPROM( pc.

void AND(int endf) { device_ent = read_EEPROM(0x1C + endf). 3. Dados. podem ser transferidos ao computador em tempo real e facilmente podem ser usados para serem exibidos enquanto a aplicação PIC está rodando. 4. Para exibir os dados.37 } 4. ir para o menu start e selecionar accessories/communications/hyperterminal para estabelecer uma conexão nova. temp[pf-1] = temp[pf-1] & device_ent. Bits Per Second para 9600. Flow Control to None. um hyperterminal é utilizado via porta serial COM1. A função AND(argumento) tem como argumento o índice que somado ao endereço 0x1C aponta para a variável desejada.5. Configurações: 1. Data Bits para 8. Para habilitar o hyperterminal. A variável temporária recebe o resultado da operação AND entre um valor na variável temporária e o conteúdo da variável apontada pelo endereço.3 Função AND() Cita-se a função AND() como exemplo das funções Ladder implementadas. 2. . configurar o PIC como usuário do COM1. } 4. como leituras de sensor.6 Monitorando o programa pela porta serial A conexão serial RS232 também pode ser usada para transferir e apresentar dados da placa PCB. Stopbits para 1.

vai acionar a saída interna I01. Os testes foram realizados em conjunto. • Saída para motor. abrir o portão Y0. Para este exemplo utilizou-se. vai acionar a saída interna I00. • Botão de comando para fechar o portão. • Saída para motor. Gerando o diagrama Ladder visto na Figura 12. A saída interna I00 é passada para a saída física Y0 que indica que o motor deve ser ligado para abrir o portão.38 5 TESTES E RESULTADOS Os testes feitos no Micro-CLP foram essenciais não apenas para este projeto mas também para o projeto de desenvolvimento do ambiente de programação Ladder elaborado pelo aluno Rogério Costa Pacheco Neto. A aplicação utilizada foi o exemplo do controle de um portão eletrônico. apertando o botão para abrir o portão (X0). e o sensor de portão aberto (X2) não estando ativado. na porta X3. na porta X2. • Sensor de fim de curso portão fechado. as seguintes considerações: • Botão de comando para abrir o portão. e sensor de portão fechado (X3) não estando ativado. que também será utilizada como selo para que só seja desligada quando ocorrer o fim de curso de portão fechado. porta X0. A saída interna I01 é passada para a saída física Y1 que indica que o motor deve ser ligado para fechar o portão. porta X1. • Sensor de fim de curso portão aberto. Caso o botão pressionado seja o de fechar o portão (X1). Analisando o ladder temos. ou o botão de abrir (X0) seja acionado. . ou o botão de fechar (X1) seja acionado. fechar o portão Y1. que é utilizada como selo para que ela só seja desligada quando ocorrer o fim de curso de portão aberto.

Ao apertar o botão B3. o Micro-CLP vai para o estado de aguardar o carregamento do programa e escreve a mensagem “Carregar Ladder”.39 Figura 12 . A linguagem intermediária enviada é mostrada na Figura 13.Diagrama Ladder do controle do portão eletrônico Após preparar o programa devemos ligar o Micro-CLP e prepará-lo para receber o diagrama Ladder. a mensagem que aparece é “Ladder Carregado”. . Neste ponto envia-se o programa Ladder gerado no ambiente gráfico. Ao ligar o Micro-CLP aparece a mensagem “MicroCLP”. Quando todo o código é enviado.

através dos LEDs que são ativados pelas entradas e saídas. o programa é executado.Linguagem intermediária enviada ao Micro-Clp Ao apertar o botão B1. Para setar as entradas foi utilizada uma fonte de 24V disponível no laboratório.Vista frontal do Micro-CLP .40 Figura 13 . Os resultados de exemplo foram conforme o esperado. Pode-se ver então o programa em funcionamento no Micro-CLP. Figura 14 . As Figuras 14 a 18 mostram as vista do Micro-CLP. A Figura 19 mostra a placa de entradas e saídas.

Vista lateral direita do Micro-CLP .Vista lateral esquerda do Micro-CLP Figura 17 .41 Figura 15 .Vista superior do Micro-CLP Figura 16 .

Vista traseira do Micro-CLP Figura 19 .Placa de entradas e saídas .42 Figura 18 .

43 6 CONCLUSÕES O estudo sobre os controladores lógicos programáveis constatou que estes estão sendo cada vez mais utilizados devido à sua grande flexibilidade de aplicações. dessa forma sugere-se como projetos futuros a implementação das funções que manipulam dados analógicos. A partir do estudo também determinaram-se os requisitos necessários para o projeto. como a utilizada para programar o Micro-CLP. uma vez que este possui um preço bem menor que um CLP normal. Existiram algumas dificuldades com a familiarização da linguagem C adotada pelo CCS PICC. Dentre estes a determinação da linguagem Ladder ou diagrama de relés. a alternativa de um Micro-CLP torna-se vantajosa. microprocessadores e programação em linguagem C. Para aplicações de complexibilidade reduzida. Este projeto demonstra ter um grande potencial de aplicações. pode-se dizer que o projeto alcançou seu objetivo satisfatoriamente. pois este possui várias funções já implementadas. ou de uma rede de CLPs. Foram desenvolvidos os circuitos elétricos necessários para o micro CLP. pois executou com sucesso um programa Ladder desenvolvido no ambiente gráfico no computador e enviado pelo mesmo pela porta serial. Para realizar este projeto destaca-se a utilização de conhecimentos de eletrônica digital. gravação de um programa Ladder e a execução do mesmo. Faltou implementar as funções analógicas. . Foi desenvolvido um programa residente no PIC. responsável pelo gerenciamento de entradas e saídas. De acordo com os resultados dos testes.

44 APÊNDICE A – CIRCUITO PRINCIPAL .

45 APÊNDICE B – CIRCUITO COMPLETO DE ENTRADAS DIGITAIS .

46 APÊNDICE C – CIRCUITO COMPLETO DE SAÍDAS DIGITAIS .

47 APÊNDICE D – CIRCUITO COMPLETO DE ENTRADAS ANALÓGICAS .

48 APÊNDICE E – CIRCUITO COMPLETO DE SAÍDAS ANALÓGICAS .

short int y1. teste2=0. short int b1.}.temp [10] = {0. cod_prog. selecao. short int b0. long int codigo. 0. int entradas=0. p1 = 0. int num_funcao. device_sai. 0. dados. carrega=0. . 0. 0X1FFF {} char c. x=0. i3=0. struct botoes { short int b3. indice.dadosp [2]. long value. p2=0x1C00. max. 0. rodar=0. min. 0. short int y3.h" #include "LCD. short int b2. 0. short int y4. struct out_porta { short int y0. int pf. int i2.49 APÊNDICE F – CÓDIGO FONTE #case #include "clp. device_ent. i. } botao.C" #use delay(clock=20000000) #org 0x1C00. pc=0. 0. short int teste. 0. 0. short int y2.

} // Saída saida(int valor) { output_high(PIN_C0). short int y6. set_tris_e(0xff). set_tris_b(0x01). } saida_porta. set_tris_d(0x00). botao. } // Leitura do estado dos botões int ler_botoes() { int entbot=0. return ent.b0 = input(PIN_B0).b1 = input(PIN_E0). short int y7. ent=input_d(). delay_us(1). output_low(PIN_C0). . // Leitura do estado das entradas int ler_entrada() { int ent. output_d(valor). set_tris_d(0xff). botao. output_high(PIN_C0).50 short int y5. output_low(PIN_C3). set_tris_d(0xFF). output_high(PIN_C3).

b2 = input(PIN_E1).b3 = input(PIN_E2). for (i1 = 0. *(&data + i1) ) . temp[pf]). i1 < 2. ++pf. i1 < 2. botao. } //----------LD_NOT() void LD_NOT(int endf) . i1++) *(&data + i1) = read_eeprom(i1 + n). } // Escrita de variáveis do tipo long int na data EEPROM write_long_eeprom(long int n.51 botao. long int data) { int i1. return (entbot). entbot = botao. long int data. i1++) write_eeprom(i1 + n. } // Leitura de variáveis do tipo long int na data EEPROM long int read_long_eeprom(long int n) { int i1. return(data). } //Funcoes basicas ladder //----------LD() void LD(int endf) { temp[pf] = read_eeprom(0x1C + endf). printf("\n\rTEMP= %u". for (i1 = 0.

52 { temp[pf] = ~read_eeprom(0x1C + endf). } //----------OR() . ++pf. temp[pf-1]). printf("\n\rTEMP= %u". printf("\n\rTEMP= %u". } //----------AND_B() void AND_B() { --pf. temp[pf-1] = temp[pf-1] & device_ent. } //----------AND() void AND(int endf) { device_ent = read_eeprom(0x1C + endf). } //----------AND_NOT() void AND_NOT(int endf) { device_ent = read_eeprom(0x1C + endf). temp[pf-1]). temp[pf]). temp[pf-1]). temp[pf-1] = temp[pf-1] & (~device_ent). temp[pf-1] = temp[pf-1] & temp[pf]. printf("\n\rTEMP= %u". printf("\n\rTEMP= %u".

printf("\Lu ".temp[pf-1]). --pf. printf("\n\rTEMP= %u". } //----------OUT() void OUT(int endf) { write_eeprom(0x1C + endf. } //----------OUT_NOT() void OUT_NOT(int endf) { write_eeprom(0x1C + endf. } //----------DISPLAY() void DISPLAY(int endf) { long int valor. --pf. temp[pf-1]). printf("\n\rTEMP= %u".~temp[pf-1]).53 void OR() { --pf. temp[pf-1] = temp[pf-1] | temp[pf]. valor). valor)."\Lu ". valor = read_long_eeprom(indice). printf(lcd_putc. printf("\n\rTEMP= %u". } . temp[pf-1]). temp[pf-1]).

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

} } void atualizar_saida() { if (read_eeprom(0x24)==0xff) saida_porta.55 //-----------------zera eeprom void zera_eeprom() { while (i3<=55) { write_eeprom( 0x24+i3 . } void main() { . if (read_eeprom(0x28)==0xff) saida_porta. teste2=saida_porta.y0 = 1. teste2). else saida_porta. else saida_porta. if (read_eeprom(0x25)==0xff) saida_porta.y7 = 0. else saida_porta.y4 = 0. if (read_eeprom(0x26)==0xff) saida_porta.y1 = 0.y3 = 1. if (read_eeprom(0x2B)==0xff) saida_porta.y5 = 1. else saida_porta.y5 = 0. saida (teste2). if (read_eeprom(0x27)==0xff) saida_porta.y7 = 1.y1 = 1. else saida_porta. else saida_porta.y4 = 1.y2 = 1. 0x00 ). else saida_porta. if (read_eeprom(0x29)==0xff) saida_porta.y0 = 0. else saida_porta.y6 = 1. if (read_eeprom(0x2A)==0xff) saida_porta.y2 = 0. printf (" \n\rSaida=%u ". i3++.y6 = 0.y3 = 0.

249. output_low(PIN_C3). setup_adc( ADC_CLOCK_INTERNAL ). setup_ccp2(CCP_OFF).5). printf("\fMicroCLP\n\r"). setup_adc_ports( RA0_RA1_RA3_ANALOG ). .RTCC_DIV_2). putc(0x0c)."\fMicroCLP").56 rs232_errors=0. setup_timer_1(T1_DISABLED). setup_ccp1(CCP_OFF). set_tris_c(0xb0). printf(lcd_putc. setup_adc(ADC_CLOCK_DIV_2). lcd_init(). setup_timer_2(T2_DIV_BY_1. set_adc_channel( 0 ). output_high(PIN_C0). set_tris_e(0xff). setup_counters(RTCC_INTERNAL. set_tris_a(0xFF). zera_eeprom(). set_tris_d(0xff). setup_psp(PSP_DISABLED).

2)) write_eeprom( 0x1E. switch (teste) { . selecao = ~ler_botoes(). 0). if ( bit_test(entradas. 0).57 while (TRUE) { entradas = ler_entrada(). else write_eeprom( 0x1F.3)) write_eeprom( 0x1F. else write_eeprom( 0x23. 0xff). 0). else write_eeprom( 0x20.7)) write_eeprom( 0x23. if ( bit_test(entradas. else write_eeprom( 0x1E. 0xff).5)) write_eeprom( 0x21. 0xff). else write_eeprom( 0x21.1)) write_eeprom( 0x1D. 0). 0).2)==1)) { teste = bit_test(selecao.6)) write_eeprom( 0x22. else write_eeprom( 0x1D. 0xff). if ( bit_test(entradas. 0xff). if ( bit_test(entradas.0)) write_eeprom( 0x1C. 0). 0xff). if ( bit_test(entradas. if ( bit_test(entradas. else write_eeprom( 0x22.1). if ( bit_test(entradas. else write_eeprom( 0x1C. 0xff). 0). if ( bit_test(entradas. 0).4)) write_eeprom( 0x20. while ((bit_test(selecao. 0xff).

lcd_gotoxy(1. teste2 = bit_test(selecao. p2++. lcd_gotoxy(1. printf("\r Aguardando ")."Carregar Ladder ").58 break. x = 0.1).0)==1)) teste2 = 0. } break. printf(lcd_putc. while (teste2==1) { lcd_gotoxy(1. break. case 1 : p2 = 0x1c00. carrega=0.1). carregar_ladder(). } selecao = ~ler_botoes(). pc = 0. default : selecao = ~ler_botoes(). printf(lcd_putc."Executando "). selecao = ~ler_botoes(). if ((bit_test(selecao.1). p1 = 0. printf("Carregar Ladder "). "). indice= codigo & 0b11111111.3)." Aguardando delay_ms(200). num_funcao= codigo >> 8. } codigo = read_program_eeprom(p2). . printf(lcd_putc.

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

"funcao nao implementada").60 printf (lcd_putc. } } . } delay_ms(100). break.

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

Sign up to vote on this title
UsefulNot useful