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

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

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. que desenvolveu um projeto complementar a este. Agradeço ao professor José Denti por nos apresentar o CLP em sua disciplina de Supervisão e Controle de Processos. Agradeço a meu companheiro Rogério Costa Pacheco Neto. ii .

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

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

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

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

capacidade de manipular uma grande quantidade de variáveis digitais e analógicas. Esta capacidade possui um preço que inviabiliza sua aplicação para sistemas com menor complexidade. Figura 1 Diagrama esquemático do Micro-CLP . Na Figura 1 observa-se o esquema base do projeto. Os Controladores Lógicos Programáveis disponíveis no mercado possuem um grande poder de processamento. 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. possuindo assim um preço mais acessível.9 1 INTRODUÇÃO A necessidade de automatizar sistemas tem impulsionado o desenvolvimento de novos equipamentos. Surgiu então a alternativa de CLPs mais simples.

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

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

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. O Capítulo 4 mostra o desenvolvimento do hardware. 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. e Capítulo 7 conclui o trabalho.

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. Esses painéis necessitavam de modificações na fiação cada vez que se mudava o projeto.13 2 CONTROLADOR LÓGICO PROGRAMÁVEL Um Controlador Lógico Programável é um computador especializado. ou seja. As entradas e/ou saídas digitais são os elementos discretos. 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). é um equipamento eletrônico digital com hardware e software compatíveis com aplicações industriais. tornando-se mais barato simplesmente substituir todo painel por um novo. Os CLPs permitiram transferir as modificações de hardware em modificações no software [1]. motivo pelo qual substituíram os tradicionais painéis de controle a relés. temporização. controlando. vários tipos de máquinas ou processos [9]. baseado num microprocessador que desempenha funções de controle de diversos tipos e níveis de complexidade. 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). o que muitas vezes era inviável. Um CLP é o controlador indicado para lidar com sistemas caracterizados por eventos de lógica binária. sequenciamento. Controlador Lógico Programável Segundo a ABNT (Associação Brasileira de Normas Técnicas). 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. . é um aparelho eletrônico digital que utiliza uma memória programável para armazenar internamente instruções e para implementar funções específicas. por meio de módulos de entradas e saídas. Podem ainda lidar com variáveis analógicas definidas por intervalos de valores de corrente ou tensão elétrica. tais como: lógica. A grande vantagem dos controladores programáveis é a possibilidade de reprogramação. Segundo a NEMA (National Electrical Manufactures Association).

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

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

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

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.17 Considerando que ambos os botões sejam do tipo pushbutton. .

com recursos de programação por Memória Flash. resultando em uma velocidade de processamento de 5 MIPS. com arquitetura Harvard e conjunto de instruções RISC (conjuntos de 35 instruções a 76 instruções). 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. primeiramente escolheu- se o microcontrolador. 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. 3. o que permite uma velocidade de no máximo 10 MIPS. a comunicação serial. Sua frequência de operação (clock) vai até 20MHz. a fonte. 3.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. 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. Sua pinagem DIP tem 40 pinos. Seu conjunto de instruções RISC se compõe de 35 instruções.1 Microcontroladores PIC Os PIC (PICmicro) são uma família de microcontroladores fabricados pela Microchip Technology. DIP. Os microcontroladores PIC têm famílias com núcleos de processamento de 12 bits. Como periféricos ele possui: • 5 conjuntos de portas de entrada e saída (total de 33 portas) . memória RAM com 368 bytes e memória EEPROM com 256 bytes. Pode funcionar com alimentação de 2V a 5. SOIC. depois os circuitos de entradas e saídas. EEPROM e OTP. etc).18 3 DESENVOLVIMENTO DO HARDWARE Para a determinação do hardware que será montado. o display LCD e os botões. Possui memória flash de programa com 8192 palavras de 14 bits. TQFP. 14 bits e 16 bits e trabalham em velocidades de até 48MHz.5V.1.

2 Definições A definição de um hardware básico é o ponto principal do projeto. pois a partir desse ponto foi possível determinar as funções de cada pino do PIC16F877 e o fluxo de dados do CLP. possibilitando oito entradas e saídas digitais. 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. . 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. • RC3 recebendo uma transição positiva habilita as saídas. As entradas são de 24V. O sistema possui um GND interno e um GND EXT externo. 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. Captura e PWM) • 3 Timers (1 de 16 bits e 2 de 8 bits) • Watchdog timer 3. isto também é necessário para o isolamento dos circuitos do micro-CLP.

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

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

Para entrada de 4 a 20mA. deve-se colocar o jumper JP2 na posição 1-2 e o jumper JP1 na posição 1-3. .22 • 0 a 5V • 0 a 10V • 4 a 20mA Para entrada de 0 a 10V. deve-se colocar o jumper JP2 na posição 2-3 e o jumper JP1 na posição 6-4. 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.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). Para entrada de 0 a 5V. As saídas de 0 a 5V são obtidas a partir do sinal PWM. Figura 6 .

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

Figura 14. A montagem pode ser vista Figura 8.Esquema de comunicação serial .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).9 Botões Os botões da parte frontal do Micro-CLP.24 3. A comunicação é 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. Figura 8 . 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.

referência do PID1 e do PID2 respectivamente.25 4 DESENVOLVIMENTO DO PROGRAMA RESIDENTE O programa residente é o responsável pela inicialização do micro-CLP.1 Cabeçalho Para a manipulação das funções de controlador Proporcional-IntegralDerivativo (PID). a recepção. a execução do programa Ladder. Figura 9 . O programa Ladder é gravado em um espaço reservado da memória de programa EEPROM a partir do endereço 0x1C00. • KP1 e KP2 – Constantes de proporcionalidade. • KI1 e KI2 – Constantes de integração. a interpretação e a execução do programa Ladder.Alocação da memória de programa 4. temporizadores. 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. . gravação. a leitura das entradas. São elas: • SP1 e SP2 – Set Point. • K1 e K2 – Constantes de comparação.

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. Como a memória de dados EEPROM é formada por palavras de oito bits. Nota-se que este bloco possui um tamanho fixo de 28 bytes.Alocação da memória de dados EEPROM 4. É o primeiro bloco de informações enviado para o micro-CLP. cada constante ocupa dois endereços na memória. A este conjunto de constantes deu-se o nome de cabeçalho. • KC1 e KC2 – Constantes dos contadores. a partir do endereço 0x00 até o endereço 0x1B.26 • KT1 e KT2 – Constantes de temporização. Figura 10 . O cabeçalho é armazenado na memória de dados EEPROM. 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. Para cada constante reservou-se o tamanho de dois bytes. Foram implementadas as seguintes funções de um programa Ladder básico: • LD() • LD_NOT() • AND() .

que é o endereço imediatamente após o cabeçalho de constantes. • Iniciadas com ‘N’ – variáveis digitais de saída do comparador 2. . 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 .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. • Iniciadas com ‘I’ – variáveis digitais internas. • Iniciadas com ‘M’ – variáveis digitais de saída do comparador 1.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. 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.27 • AND_B() • AND_NOT() • OR() • OUT() • OUT_NOT() • DISPLAY() • END Na Tabela 1 encontram-se a codificação de cada instrução.

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

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

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

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

5 Rotinas Nesta seção analisaremos algumas rotinas principais. Timer_2 ou RTCC. Se um valor preciso é requerido. o valor de DIV poderia ser diminuído para reduzir o erro. 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. Como exemplo considerar set_timer0(0) contará 0. 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. Ou nós podemos aproximar a 15 interrupções de cronômetro. o número total de contas requeridos para um segundo de duração é dado por.. 1 segundo.. 4..25 incrementos por segundo ou 256us por incremento. Se fixamos o cronômetro para contar de 0. temos um total de 3906.. Seguindo o anterior exemplo. Os cronômetros consideram valores inteiros na forma set_timer0 ou set_RTCC (valor).4. Na interrupção.25 /256 = 15. Timer_1 e Timer_2 consideram valores de 16 bits.1. Pode-se usar este método para contar um período de tempo pre-especificado. o processador salva o endereço de retorno na pilha e o controle de programa é redirecionado à rotina de serviço de interrupção[5]..0.1.2.255. 4. As operações de cronômetro típicas são Timer_0. 2 segundos e assim por diante. (1x1000000/256) = 3906..25 interrupções de cronômetro.5 Cronômetros (Timers) Cronômetro é uma rotina de interrupção especialmente disponível com PIC. Timer_0 ou RTCC assume um valor inteiro de 8 bits (max 255).32 (0). Timer_1. O PIC tem um número de cronômetros que podem ser usados para executar operações de cronometragem. .25 contas.254.

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

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

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

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

Para exibir os dados. Configurações: 1. A função AND(argumento) tem como argumento o índice que somado ao endereço 0x1C aponta para a variável desejada. Dados. Flow Control to None. Bits Per Second para 9600.37 } 4. } 4. configurar o PIC como usuário do COM1. como leituras de sensor. 2. 4.3 Função AND() Cita-se a função AND() como exemplo das funções Ladder implementadas. temp[pf-1] = temp[pf-1] & device_ent.5.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. 3. void AND(int endf) { device_ent = read_EEPROM(0x1C + endf). 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. . Data Bits para 8. podem ser transferidos ao computador em tempo real e facilmente podem ser usados para serem exibidos enquanto a aplicação PIC está rodando. ir para o menu start e selecionar accessories/communications/hyperterminal para estabelecer uma conexão nova. Stopbits para 1. um hyperterminal é utilizado via porta serial COM1.

Caso o botão pressionado seja o de fechar o portão (X1). e o sensor de portão aberto (X2) não estando ativado. e sensor de portão fechado (X3) não estando ativado. . fechar o portão Y1. • Sensor de fim de curso portão aberto. • Saída para motor. porta X1. ou o botão de abrir (X0) seja acionado. • Saída para motor. as seguintes considerações: • Botão de comando para abrir o portão. vai acionar a saída interna I01. Analisando o ladder temos.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. porta X0. • Sensor de fim de curso portão fechado. na porta X2. abrir o portão Y0. apertando o botão para abrir o portão (X0). A aplicação utilizada foi o exemplo do controle de um portão eletrônico. vai acionar a saída interna I00. • Botão de comando para fechar o portão. Para este exemplo utilizou-se. 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. que também será utilizada como selo para que só seja desligada quando ocorrer o fim de curso de portão fechado. 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. que é utilizada como selo para que ela só seja desligada quando ocorrer o fim de curso de portão aberto. na porta X3. Os testes foram realizados em conjunto. ou o botão de fechar (X1) seja acionado.

Neste ponto envia-se o programa Ladder gerado no ambiente gráfico.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. .39 Figura 12 . Ao ligar o Micro-CLP aparece a mensagem “MicroCLP”. A linguagem intermediária enviada é mostrada na Figura 13. Ao apertar o botão B3. a mensagem que aparece é “Ladder Carregado”. Quando todo o código é enviado. o Micro-CLP vai para o estado de aguardar o carregamento do programa e escreve a mensagem “Carregar Ladder”.

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

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

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

Faltou implementar as funções analógicas. Para aplicações de complexibilidade reduzida. Foram desenvolvidos os circuitos elétricos necessários para o micro CLP. Este projeto demonstra ter um grande potencial de aplicações. Foi desenvolvido um programa residente no PIC. pois este possui várias funções já implementadas. De acordo com os resultados dos testes. microprocessadores e programação em linguagem C. Para realizar este projeto destaca-se a utilização de conhecimentos de eletrônica digital. a alternativa de um Micro-CLP torna-se vantajosa.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. A partir do estudo também determinaram-se os requisitos necessários para o projeto. pois executou com sucesso um programa Ladder desenvolvido no ambiente gráfico no computador e enviado pelo mesmo pela porta serial. pode-se dizer que o projeto alcançou seu objetivo satisfatoriamente. 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. . gravação de um programa Ladder e a execução do mesmo. responsável pelo gerenciamento de entradas e saídas. ou de uma rede de CLPs. dessa forma sugere-se como projetos futuros a implementação das funções que manipulam dados analógicos. Dentre estes a determinação da linguagem Ladder ou diagrama de relés. como a utilizada para programar o Micro-CLP.

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful