Sei sulla pagina 1di 92

CAPA

CENTRO ESTADUAL DE EDUCAO TECNOLOGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE SO BERNARDO DO CAMPO ADIB MOISS DIB

BRUNO YUZO LUPPI ARITA FELIPE GOMES DE FREITAS VINICIUS HENRIQUE MORTARI

INTERFACE REMOTA PARA CONTROLE DE PROCESSO (INTERMOTROLE)

So Bernardo do Campo - SP Junho/2013

BRUNO YUZO LUPPI ARITA FELIPE GOMES DE FREITAS VINICIUS HENRIQUE MORTARI

INTERFACE REMOTA PARA CONTROLE DE PROCESSO (INTERMOTROLE)

Trabalho de Concluso de Curso apresentado ao Centro Estadual de Educao Tecnolgica Paula Souza, Faculdade de Tecnologia de So Bernardo do Campo Adib Moises Dib como requisito parcial para a obteno do ttulo de Tecnlogo em Automao Industrial. Orientador: Professor Pedro Adolfo Galani

So Bernardo do Campo - SP Junho/2013

BRUNO YUZO LUPPI ARITA FELIPE GOMES DE FREITAS VINICIUS HENRIQUE MORTARI

INTERFACE REMOTA PARA CONTROLE DE PROCESSO (INTERMOTROLE)

Trabalho de Concluso de Curso apresentado ao Centro Estadual de Educao Tecnolgica Paula Souza, Faculdade de Tecnologia de So Bernardo do Campo Adib Moises Dib como requisito parcial para a obteno do ttulo de Tecnlogo em Automao Industrial. Orientador: Professor Pedro Adolfo Galani

Monografia defendida e aprova da em: 03/06/2013 Banca Examinadora

Prof. Pedro Adolfo Galani, FATEC SBC

Prof. Me. Rmulo de Oliveira Albuquerque, FATEC SBC

Prof. Tales Trocoletto, FATEC SBC

Dedicamos esse trabalho aos nossos pais, responsveis por formarem nosso carter, familiares e a todos os professores que contriburam para nossa formao profissional.

Agradecemos primeiramente a Deus pela concluso do trabalho, aos nossos orientadores pela ajuda durante a elaborao do projeto e aos demais professores que compartilharam o conhecimento conosco.

No sou obrigado a vencer mas tenho o dever de ser verdadeiro. No sou obrigado a ter sucesso mas tenho o dever de corresponder luz que tenho. ABRAHAM LINCOLN

RESUMO

O projeto abordar sobre a utilizao de uma interface microcontrolada denominado InterMotrole, que poder ser monitorada e/ou controlada atravs de um software de superviso, demonstrando a aplicabilidade do arduino, integrado a um software supervisrio comumente utilizado na indstria atravs do protocolo aberto de rede MODBUS que possibilita a integrao do projeto em uma rede j existente, denotando os princpios de conectividade. Podendo ser aplicada em qualquer planta sendo ela do tipo industrial, escolar, comercial ou residencial, visando o custo reduzido e simplicidade. O InterMotrole, tem como funcionamento base fazer aquisio de sinais, executar algoritmos de controle e atuar em relao as rotinas inteligentes pr-programadas no software supervisrio.

Palavras-chave: Software supervisrio. Controle. MODBUS. Conectividade.

ABSTRACT

The project will discuss the use of a microcontrolled interface denominated InterMotrole, which can be monitored and / or controlled through a software supervision, demonstrating the applicability of Arduino, integrated with a supervisory software commonly used in industry through MODBUS an open protocol network that enables the integration of the project into an existing network, denoting the principles of connectivity. That can be applied to any type of plant how industrial, educational, commercial or residential, aiming at the reduced cost and simplicity. The InterMotrole has as working base to get signals, to execute control algorithms and act in relation to pre-programmed intelligent routines in monitoring software.

Keywords: Supervisory software. Control. MODBUS. Connectivity.

SUMRIO INTRODUO ............................................................................................................ 9 1 FUNDAMENTAO TERICA ............................................................................. 11 1.1 Sistemas SCADA............................................................................................ 11 1.2 Protocolo MODBUS ....................................................................................... 16 1.2.1 Histrico das redes de comunicao ......................................................... 16 1.2.2 Comunicao entre dispositivos MODBUS ................................................ 20 1.2.3 Endereo MODBUS ................................................................................... 23 1.2.4 Checagem de erro MODBUS .................................................................... 24 1.3 Microcontroladores ........................................................................................ 25 1.3.1 Histrico dos microcontroladores ............................................................... 25 1.3.2 Definies .................................................................................................. 26 1.3.3 Arquitetura do microcontrolador ................................................................. 26 1.3.4 Aplicaes para microcontroladores .......................................................... 28 2 METODOLOGIA .................................................................................................... 29 3 DESENVOLVIMENTO DO PROJETO ................................................................... 31 3.1 Simulao Virtual ........................................................................................... 32 3.2 Confeco do prottipo ................................................................................. 34 3.3 Hardware ......................................................................................................... 36 3.4 Programao do Arduino .............................................................................. 41 3.5 Configurao do software supervisrio ...................................................... 44 CONSIDERAES FINAIS ...................................................................................... 47 REFERNCIAS ......................................................................................................... 49 GLOSSRIO ............................................................................................................. 51 APNDICE A Fluxograma do descritivo de funcionamento ............................. 53 APNDICE B - Programao do Arduino .............................................................. 54 APNDICE C - Programao do script no Indusoft .............................................. 68 APNDICE D Cronograma do trabalho de concluso de curso ....................... 69 ANEXO A Manual de configurao do driver MODBUS .................................... 70

INTRODUO Atualmente notvel a forte presena da automao na vida moderna, sendo natural encontrar equipamentos eletrnicos que possuam portas de comunicao, apresentando conectividade com outros dispositivos facilitando a interconexo das informaes, denotando o conceito de redes, trazendo ao sistema todas as vantagens que esse tipo de conexo possui.

Visto que a automao industrial est em plena evoluo e que a conexo de equipamentos via rede est consolidada, foi encontrada a necessidade do desenvolvimento de um projeto que tornaria mais vivel o acesso a essa tecnologia a um custo acessvel.

A fim de criar um dispositivo para a integrao da automao com algumas tecnologias presentes no mercado, tais como: Protocolo MODBUS por ser aberto, universal e industrial; Meio fsico industrial RS-485; Software de superviso e controle Indusoft; Arduino sendo uma plataforma de programao microcontrolada.

O objetivo geral do projeto construir uma remota verstil capaz de portar inteligncia embarcada e/ou transcrever sinais de telemedio e telecomandos enviados em rede a partir de um PC.

Aps reunir as tecnologias citadas, e atravs da funcionalidade do projeto foi desenvolvido um produto denominado de InterMotrole - Interface remota de controle de processo que tem como objetivos especficos : Fazer aquisio de sinais digitais UAD (Unidade de Aquisio de Dados); Criar algoritmos simplificados de controle no microcontrolador; Desenvolver rotinas inteligentes no PC atuando atravs do InterMotrole no campo; Oferecer conectividade a outros dispositivos que utilizam protocolo MODBUS.

10

Sendo assim demonstrar a aplicabilidade do arduino, uma plataforma aberta para desenvolvimento de projetos microcontrolados, integrado a um sistema supervisrio comumente utilizado na indstria atravs do protocolo aberto de rede o MODBUS que possibilita a integrao do projeto em uma rede j existente. Enfatizando o custo reduzido e simplicidade em relao as UTRs e os CLPs existentes.

O trabalho delimitado da seguinte maneira:

O primeiro captulo: Fundamentao terica contm uma contextualizao fundamentada em autores altamente qualificados, nacionais e internacionais que versam sobre os temas necessrios para a integrao do InterMotrole.

O segundo capitulo: Metodologia descrita toda a trajetria necessria para construo e elaborao do projeto.

O terceiro captulo: Desenvolvimento do projeto onde se encontra detalhes do desenvolvimento do trabalho: InterMotrole.

E, por ltimo, faz-se as Consideraes finais sobre o trabalho.

11

1 FUNDAMENTAO TERICA

Dentre os vrios estudiosos, educadores, pesquisadores que produzem teorias sobre controle de processos, controladores lgicos programveis, sistemas de superviso e software CLP, neste captulo, pontuamos alguns deles.

CAPELLI (2006) aponta que a indstria eletrnica realizou diversas pesquisas que possibilitaram a criao de novas tecnologias, que possibilitaram a substituio dos controles de processos mecnicos, pelos eletromecnicos e posteriormente, sua substituio pelos controladores programveis, que so computadores dedicados a execuo de programas utilizados no controle de processos industriais.

De acordo com CASTRUCCI (2007), os sistemas SCADA (Supervisory Control and Data Aquisition Sistema de Controle e Aquisio de Dados) utilizam computadores industriais que fazem a superviso, o controle e a aquisio de dados dos processos, alm de exibir as interfaces grficas que permitem a interao com o operador.

1.1 Sistemas SCADA

No inicio do controle de processos, os indicadores, os elementos de controle assim como as vlvulas eram monitorados por um operador que manualmente controlava a abertura ou fechamento das vlvulas para obter a varivel (temperatura, presso, vazo, etc.) desejada.

RIBEIRO (1999) expe que com o surgimento de instrumentos pneumticos na dcada de 1940 de transmisso e controle foi possvel a monitorao e controle de forma automatizada. O operador j no precisava mais abrir ou fechar todas as vlvulas manualmente. Isto reduziu o tempo que os operadores necessitavam para monitorar o processo.

J SILVA (2005) descreve que os primeiros sistemas supervisrios, basicamente telemtricos, permitiam informar periodicamente o estado corrente do processo industrial, monitorando sinais representativos de medidas e estados de

12

dispositivos, atravs de um painel de lmpadas indicadoras e em medidas analgicas que eram designadas pessoas para coletar os dados e levantar grficos, sem que houvesse qualquer interface de fcil visualizao para o operador, conforme ilustra figura 1.1.

Figura 1.1 - Painel de superviso no passado Fonte: <http://www.mecatronicaatual.com.br/secoes/leitura/703>, 2011

Atualmente, os sistemas de automao industrial utilizam tecnologias de computao e comunicao para automatizar a monitorao e controle dos processos industriais, efetuando coleta de dados em ambientes complexos, eventualmente dispersos geograficamente, e a respectiva apresentao de modo fcil e dinmico para o operador, com recursos grficos elaborados (interfaces homem mquina) e contedo multimdia.

MARTINS (2007) aponta que os sistemas de superviso permitem monitorar e supervisionar dados do processo de uma planta conforme figura 1.2, estes dados so coletados podendo ser armazenados ou apenas exibidos de forma simples e amigvel para o operador. As informaes qual o supervisrio monitora podem ser: estado de um equipamento, valores das variveis, alarmes, falhas em equipamentos, relatrios e grficos. Estes sistemas tambm so chamados de SCADA.

13

O SCADA e uma tecnologia inovadora que se destina a cumprir tarefas de gerenciamento e controle para unidades industriais cujos elementos estejam distribudos ao longo de grandes distncias. Caracterizam-se por um processador central que rene os dados coletados pelas unidades remotas RTU (Remote Terminal Unit Unidade de Terminal Remota) e os processa. Por intermdio de quadros sinticos animados, com indicaes instantneas das variveis de processo feita a visualizao das informaes.

Figura 1.2 Tela de superviso Fonte: <http://www.mecatronicaatual.com.br/secoes/leitura/703>, 2011

Outra funo importante a possibilidade do sistema supervisrio executar aes baseadas em parmetros antecipadamente informados, fazendo que o usurio participe do processo de controle apenas quando as aes exijam interveno humana.

GARCIA (2011) afirma que os sistemas SCADA identificam os tags, que so todas as variveis numricas ou alfanumricas envolvidas na aplicao, podendo executar funes computacionais (operaes matemticas, lgicas, com vetores ou strings, etc.) ou representar pontos de entrada/sada de dados do processo que esta sendo controlado. Neste caso, correspondem as variveis do processo real (temperatura, nvel, vazo, velocidade etc.), com base nos valores das tags que os dados coletados so apresentados ao usurio.

14

O SCADA podem verificar condies de alarmes, identificadas quando o valor da tag ultrapassa uma faixa ou condio pr-estabelecida, sendo possvel programar a gravao de registros em Bancos de Dados, ativao de som, mensagem, mudana de cores, envio de mensagens por pager, e-mail, celular. MARTINS (2007) apontam que o sistema SCADA um processo de extrema importncia, pois atravs desta ferramenta possvel obter em grandes nveis de: qualidade, reduo de custos operacionais, maior desempenho de produo e obter uma base de dados de forma automtica dos ndices da produo.

A qualidade alcanada atravs do monitoramento das variveis do processo (presso, temperatura, vazo, velocidade, Corrente, tenso, etc.), determinando nveis timos de trabalho. Se por algum motivo os nveis saiam da faixa estabelecida o sistema SCADA pode gerar alarmes na tela para visualizao do operador para correo do processo, conforme ilustra figura 1.3.

Figura 1.3 Elementos do Sistema SCADA Fonte: Garcia, 2011

No processo produtivo com diversos instrumentos de medio sem o sistema SCADA, demandaria tempo e vrios funcionrios para percorrer todo o processo de

15

produo a fim de realizar leitura e coleta de todos os dados para a criao de planilhas e grficos. Com o sistema de superviso SCADA possvel centralizar toda a leitura dos instrumentos gerar grficos em tempo real sem a probabilidade de erros humanos, levando assim a reduo de custos operacionais.

Devido a rapidez de leitura dos instrumentos de campo, intervenes no processo so mais rpidas reduzindo significativamente tempo de parada de mquinas, devido alarmes de falhas que so indicados na tela de visualizao do supervisrio aumentando assim o desempenho da produo.

Os sistemas de superviso SCADA podem coletar os dados do processo e armazen-los em banco de dados, sendo integrados com sistemas MES, ERP, SAP. Podem tambm fornecer dados em tempo real, para sistemas que realizam clculos de OEE, sistemas SFC, sistema de PCP ou similares, para planejamento e controle de produo.

O objetivo principal da instalao dos sistemas SCADA propiciar uma interface visual de alto nvel do processo com operador , informando-o em tempo real sobre todos os eventos de importncia da planta. Fazendo assim um processo com maior qualidade, agilidade e de baixo custo.

De acordo com GARCIA (2011) as vantagens para implantao do sistema SCADA em uma planta so: Reduo de gastos com painis de controle e projeto; Reduo de custos da aquisio de instrumentos de painel, pois no sistema SCADA so virtuais; Eliminao de custos com peas de reposio dos instrumentos de painel, pois tratam-se de instrumentos virtuais; Reduo de espao necessrio para a sala de controle; Dados disponveis em formato eletrnico, facilitando a gerao de relatrios e integrao com sistemas ERP (Enterprise Resource Planning) ou SIGE (Sistemas Integrados de Gesto Empresarial);

16

Praticidade da operao, pois os instrumentos so apresentados ao operador em um simples clique do dispositivo; Fcil identificao de falhas, reduzindo assim o tempo de parada de mquinas;

H somente duas desvantagens, porm de fcil resoluo sendo elas; Necessidade de mo de obra capacitada para o desenvolvimento da interface homem mquina (IHM); Treinamentos de operao da mquina;

1.2 Protocolo MODBUS

COELHO (2010) descreve que por definio o protocolo MODBUS uma estrutura de mensagem desenvolvida pela Modicon em 1979, usada para estabelecer comunicao entre os dispositivos mestre-escravo / cliente-servidor. Ele de fato um padro, muitos protocolos de rede industriais utilizam este protocolo em seu ambiente. O protocolo MODBUS disponibiliza uma padro de indstria atravs do mtodo MODBUS para trocar mensagens.

1.2.1 Histrico das redes de comunicao

STEMMER (2001) menciona que a tecnologia cada vez mais tem favorecido a obteno de processadores e outros componentes de computadores cada vez menores, com uma potencia mais elevada, mais velozes e com o preo acessvel a populao. Os microprocessadores atualmente so menores que uma caixa de fsforos que substituem e ultrapassam as capacidades dos computadores das dcadas passadas que ocupavam salas inteiras. A complexidade era grande por isso era isoladas e somente operadas por especialistas.

Na dcada de 60 foi construdo a primeira tele impressora onde deu inicio as interaes com os computadores com a tcnica de time-sharing. A tcnica consistia de um conjunto de terminais que eram conectados a um computador central atravs de linhas de comunicao de baixa velocidade. Conforme exemplo na figura 1.5.

17

Figura 1.5 Exemplo de Time-Sharing Fonte: http://dwinta.blog.ugm.ac.id/files/2010/09/Time-Sharing-System.jpg, 2010

STEMMER (2001) afirma, a tcnica de time-sharing permite que um grande conjunto de usurios compartilhe de um nico computador para a resoluo de uma grande diversidade de problemas e as aplicaes desenvolvidas foram cada vez mais se multiplicando e se diversificando de acordo com as necessidades das empresas. Cada vez mais era solicitado atualizaes e incrementos nas capacidades de armazenamento e de calculo de unidade central mas nem sempre era vivel ou possvel j que os computadores do tipo mainframe nem sempre suportava as atualizaes.

A partir dos anos 70, com surgimento dos minicomputadores, era possvel adaptar as capacidades de processamento as reais necessidades de uma dada aplicao. A capacidade de processamento era superior a utilizao de mainframes, tinham a possibilidade de extenso a novas aplicaes que necessitariam de um maior velocidade de processamento, por isso tomaram lugar dos antigos computadores.

Nos dias atuais, evidente a vantagem dos sistemas distribudos e interconectados para as aplicaes mais diversas, desde a automao de escritrios at controle de processo, passando por aplicaes de gerenciamento bancrio, reserva de passagens areas, processamento de texto, correio eletrnico, etc.

Para realar a importncia das redes de comunicao fato que atualmente na indstria h uma quantidade relativamente grande de computadores operando

18

em diversos setores. Por exemplo, uma empresa que contem diversas fabricas cada uma com um computador responsvel pelas atividades de base de fabrica (sistemas de ERP) .Neste exemplo, apesar da possibilidade de operao destes computadores de maneira isolada, vidente que sua operao seria mais eficiente se eles fossem interconectados para, por exemplo, permitir o tratamento das informaes de todas as fabricas da empresa, assim compartilhar os recursos dos dados gerados nas diversas fabricas da empresa.

O compartilhamento de recursos e as redes de comunicao aumentam a confiabilidade do sistema como um todo. Por exemplo, se uma maquina eventualmente venha ter algum defeito outra poder assumir a tarefa sem nenhuma diferena no processo. A continuidade de funcionamento de um sistema um ponto importante para um grande numero de aplicaes como: aplicaes militares, bancarias, o controle de trafego areo, etc.

A reduo de custos vem sendo um aspecto muito importante para evoluo das redes de comunicao, um vez que os computadores de pequeno porte apresentam uma menor relao preo/desempenho que os grandes.

Figura 1.6 Pirmide da Automao Industrial Fonte: http://www.osetoreletrico.com.br/web/images/stories/pirmide%201.jpg

19

MARTINS (2007) demostra como podemos observar na figura 1.6, a chamada pirmide da automao industrial apresenta os diferentes nveis de controle de automao industrial, desde os equipamentos e dispositivos em campo at o gerenciamento corporativo da empresa e cada um deles possui um tipo diferente de rede. Nvel 1 Aquisio de Dados e Controle Manual: O primeiro nvel majoritariamente composto por dispositivos de campo. Atuadores, sensores, transmissores e outros componentes presentes na planta compem este nvel. Nvel 2 Controle Individual: O segundo nvel compreende equipamentos que realizam o controle automatizado das atividades da planta. Aqui se encontram CLPs (Controlador Lgico Programvel), SDCDs (Sistema Digital de Controle Distribudo) e rels. Nvel 3 Controle de Clula, Superviso e Otimizao do Processo: O terceiro nvel destina-se a superviso dos processos executados por uma determinada clula de trabalho em uma planta. Na maioria dos casos, tambm obtm suporte de um banco de dados com todas as informaes relativas ao processo. Nvel 4 Controle Fabril Total, Produo e Programao: O quarto nvel responsvel pela parte de programao e tambm do planejamento da produo. Auxilia tanto no controle quanto tambm na logstica de suprimentos. Podemos encontrar o termo Gerenciamento da Planta para este nvel. Nvel 5 Planejamento Estratgico e Gerenciamento Corporativo: O quinto e ltimo nvel da pirmide da automao industrial se encarrega da administrao dos recursos da empresa. Neste nvel encontram-se softwares para gesto de venda, gesto financeira e BI (Business Intelligence) para ajudar na tomada de decises que afetam a empresa como um todo.

20

1.2.2 Comunicao entre dispositivos MODBUS A aproximao MODBUS ao modelo OSI aparece ao nvel das camadas 1, 2 e 7, respectivamente camada fsica, ligao e aplicao:

Nvel

fsico

(nvel

1):

Par

transado,

mximo

de

19200

Bauds,

RS232/RS485/Anel de corrente.

Ligao de dados (nvel 2): Acesso rede por mecanismo tipo mestre/escravo. Controle de erros por CRC16 (Modo RTU). Num mtodo de acesso tipo mestre/escravo, a iniciativa do envio de mensagens est restringida ao mestre. Se uma resposta for requerida, os escravos respondem solicitao do mestre, ou ento limitam-se a executar as aes pedidas pelo mestre. O mestre pode dirigir-se individualmente aos escravos, ou difundir mensagens dirigidas a todos os escravos (Broadcast), inserindo nas mensagens o endereo 00.

Aplicao (nvel 7): definiram-se neste nvel as funes de leitura e escrita de variveis (bits, Words, E/S), diagnstico e estatsticas de ocorrncia da rede. Trs padres possveis de interface eltrica: RS232; RS485; Anel de corrente.

COELHO (2006) aponta que os dispositivos MODBUS comunicam utilizando a tcnica mestre-escravo no qual permite que somente um dispositivo (o mestre) possa iniciar as transaes. Os outros dispositivos (escravos) respondem de acordo com o pedido do mestre, ou de acordo com a tarefa em questo. Um dispositivo perifrico escravo (vlvula, drive de rede ou outro dispositivo de medio), que processa a informao e envia o dado para o mestre.

O mestre emite uma requisio para um no escravo em dois modos: Unicast o mestre enderea a somente um escravo. Depois de receber e processar a requisio, o escravo retorna uma mensagem de resposta para o mestre. Neste modo, uma transao MODBUS consiste de duas mensagens: uma

21

requisio do mestre e uma resposta do escravo. Cada escravo deve ter um endereo nico (de 1 a 247) de forma a poder ser endereado independentemente de outros nos. Conforme exemplo na figura 1.7.

Figura 1.7 - Modo Unicast Fonte: COELHO, 2010

Broadcast o mestre pode enviar uma mensagem para todos os escravos. Nenhuma resposta deve ser retornada para requisies broadcast enviadas pelo mestre. As requisies broadcast so necessariamente mensagens de escrita. Todos os dispositivos devem aceitar mensagens broadcast para escrita. O endereo zero e reservado para identificar uma mensagem broadcast. Conforme ilustra na figura 1.8.

Figura 1.8 - Modo broadcast Fonte: COELHO, 2010

22

De acordo com COELHO (2006), o modo de transmisso define o contedo de bit da mensagem a ser transmitida na rede e como a informao da mensagem ser empacotada na mensagem e descompactada.

O padro MODBUS emprega os dois modos de transmisso ASCII Mode e RTU Mode.

O modo de transmisso usualmente selecionado com outros parmetros de porta de comunicao serial como baudrate, paridade e etc.

No modo de transmisso ASCII cada byte de caractere em uma mensagem enviado dois caracteres sem gerao de erros.

No modo RTU, cada mensagem de 8 bits contm dois caracteres hexadecimais de 4 bits.

Um quadro de mensagens usado para marcar o incio e o fim da mensagem permitindo que o dispositivo receptor determine qual dispositivo est sendo endereado e saber quando a mensagem est completa.

Uma mensagem MODBUS colocada no quadro e transmitida para o dispositivo. Cada palavra desta mensagem (incluindo o frame) est sendo colocada em um dado de quadro que adiciona um start-bit, stop bit e bit de paridade.

No modo ASCII, a palavra tem o tamanho de 7 bits enquanto no modo RTU a palavra de 8 bits. Todavia, os 8 bits da mensagem RTU so na verdade 11 bits quando adicionado o bit de start, stop e paridade neste quadro.

No confunda o quadro de mensagem com o quadro de dados de um nico byte (Modo RTU) ou 7 bits de caractere (Modo ASCII). A estrutura do quadro de dados depende do modo de transmisso (ASCII ou RTU). Note que alguns tipos de redes, o protocolo de rede e o quadro de mensagens usam delimitadores de incio e fim especficos para a rede.

23

De acordo com DENARDIN (2005) o modo de mensagens ASCII inicia com um caractere : (ASCII 3Ah) e finaliza com um retorno de carro e avano de linha (CR e LF, ASCII 0Dh e 0Ah). Somente so permitidos caracteres para todos os outros campos como os hexadecimais 0-9 & A-F. Lembre que somente 7 bits significantes so usados para representar a tabela ASCII. Alm disso, o modo de dados MODBUS ASCII os caracteres so de somente 7 bits.

Em modo ASCII, todas os dispositivos de rede continuam a monitorar a rede para o incio de uma mensagem (caractere :). Quando ele recebido, tod os os dispositivos de rede decodificam o prximo campo para determinar se o endereo corresponde com o seu.

O modo de mensagens RTU inicia com um intervalo de 3,5 caracteres implementado como um caractere mltiplo do taxa de transmisso utilizada pela rede. O primeiro campo transmitido o endereo do dispositivo. Os caracteres seguintes transmitem todos os campos hexadecimais de 0 9 e A F.

Um dispositivo monitora a rede, incluindo o intervalo de silncio e quando o primeiro campo recebido aps o intervalo de silncio de 3,5 caracteres, o dispositivo decodifica e determina se este endereo do dispositivo. Seguindo o ltimo caractere transmitido, um intervalo de tempo similar de 3,5 caracteres finaliza o fim da mensagem e pode iniciar uma nova mensagem aps o intervalo.

A mensagem inteira deve ser transmitida continuamente. Se o intervalo de silncio demorar mais que 1,5 caracteres antes de completar o quadro, o dispositivo considera a mensagem incompleta e considera o prximo byte como o endereo da nova mensagem.

1.2.3 Endereo MODBUS O endereo do dispositivo mestre especfica o dispositivo escravo colocando 8 bits do endereo escravo no campo de endereo da mensagem ( RTU mode). O endereo de campo da mensagem conter dois caracteres (no modo ASCII), ou 8 bits (no modo RTU). Endereos vlidos so de 1 at 247. Quando o escravo

24

responde, ele coloca o seu prprio endereo no campo de resposta para deixar o mestre saber que o escravo respondeu.

Ainda por definio de DENARDIN (2005), a funo do cdigo de campo da mensagem colocar dois caracteres (no modo ASCII), ou 8 bits (no modo RTU) que digam ao escravo que ao ele deve tomar. Funes vlidas de cdigo valem de 1 at 255, porm nem todos os cdigos sero aplicados para o mdulo e alguns cdigos ficaro reservados para uso futuro.

O campo de dados disponibiliza ao escravo alguma informao necessria pelo escravo para completar a ao especfica pelo cdigo da funo. O dado formado de bytes de caracteres mltiplos (um par de caracteres ASCII no modo ASCII), ou de dois dgitos hexadecimais no modo RTU, na faixa de 00h at FFh. Os dados tipicamente incluem registradores de endereos, contadores de valores e escrita de dados. Se nenhum erro encontrado, o campo de dados da resposta do escravo retornar do pedido de dados. Se alguns erros ocorrem, o campo de dado retorna um cdigo de exceo que a aplicao mestre pode usar para determinar a prxima ao a tomar.

1.2.4 Checagem de erro MODBUS

A rede MODBUS emprega dois mtodos de checagem de erros: Checagem de paridade do caractere do frame (par, impar, ou sem paridade); Checagem de quadro na mensagem de quadro (CRC no modo RTU ou LRC no modo ASCII).

N a checagem de paridade um dispositivo MODBUS pode ser configurado para paridades par ou impar. A soma de todos os bits da mensagem resultar em um resultado 0 ou 1, onde 1 corresponde a paridade configurada. Porem este tipo de paridade no segura devida que se dois bits forem trocados na transferncia no ser acusado erro.

Na checagem de quadro, no modo ASCII de transmisso, o caractere de quadro inclui o campo de LRC como o ltimo campo precedente dos caracteres CR

25

e LF. Este campo contm dois caracteres ASCII que representam o resultado do LRC para todos os campos exceto o incio do caractere e fim com o par CR e LF.

O modo de mensagem RTU inclui um mtodo de checagem de erro que baseado no CRC. O campo de checagem de erro contem um valor de 16 bits (dois de 8 bits) que contem o resultado do calculo de CRC sobre o contedo da mensagem.

1.3 Microcontroladores Segundo SOUZA (2003) por definio, um microcontrolador, ou tambm controlador embutido, pode ser definido como um pequeno componente eletrnico, dotado de uma inteligncia programvel, utilizado no controle de processos lgicos.

1.3.1 Histrico dos microcontroladores FERRAZ (2008) descreve que em 1969, a Nippon Calculating Machine Corporation (fabricante japonesa) solicitou Intel o desenvolvimento de 12 chips personalizados para sua nova calculadora impressora Busicom 141-PF.

Os engenheiros da Intel, em vez de criar uma dzia de chips especficos para a calculadora, decidiram criar uma famlia de apenas 4 chips, sendo um deles programvel, possibilitando o seu uso em outros produtos. Esta famlia era composta de uma unidade de processamento central (CPU), o 4004, dois chips para memria (ROM e RAM) e outro chip para entradas e sadas.

A Intel ofereceu um desconto nos chips em troca dos direitos sobre o projeto do 4004, e o direito de comercializ-lo em outros produtos. A Busicom, com problemas financeiros, aceitou. A apresentao do chip 4004 ao mercado ocorreu em novembro de 1971, quando se tornou o primeiro microprocessador de propsitogeral.

26

1.3.2 Definies Segundo VALDES-PERES (2009) o microcontrolador pode ser comparado a um computador em um nico chip (circuito integrado). E esta a principal diferena entre um microprocessador e um microcontrolador, o microprocessador necessita de outros elementos para funcionar, enquanto que o microcontrolador contm estes outros elementos incorporados.

Os microcontroladores so classificados pelo numero de bits que processam, os mais comuns so os de 8 bits (utilizados na maioria das aplicaes de microprocessadores), mas existem de 16 e 32 bits (mais caros e

superdimensionados para a maioria das aplicaes).

A estrutura mais simples de um microcontrolador composta por um microprocessador, memria, entradas e sadas. O microprocessador por sua vez composto por uma unidade de processamento central ( CPU) e unidade de controle (UC). A CPU o crebro do microcontrolador, aonde toda parte aritmtica e lgica so executadas. A UC comanda o funcionamento interno do microprocessador, enviando sinais para outras partes do microcontrolador, para a execuo das instrues.

A memria dividida em duas partes, memria de programa e memria de dados. A memria do programa do tipo no-voltil, que significa que os dados no so perdidos ao retirar a energia. nesta parte da memria que o programa escrito pelo programador salvo. A memria de dados do tipo voltil, que significa que ao retirar a energia os dados so perdidos. Esta parte utilizada para salvar dados temporrios do programa. 1.3.3 Arquitetura do microcontrolador A arquitetura Von Neumann utilizada pela maioria dos microcontroladores, utilizando o mesmo barramento para memria, dados e instrues, conforme ilustra figura 1.9.

27

Figura 1.9 Ilustrao da arquitetura de Von Neumann Fonte: <http://pt.wikipedia.org/wiki/Arquitetura_de_von_Neumann>, 2012

Em outra arquitetura, denominada de Harvard, conforme figura 1.10, possuem barramentos diferentes para dados e instrues, possibilitando um acesso simultneo, gerando um maior desempenho.

]
Figura 1.10 Ilustrao da arquitetura de Harvard Fonte: <http://pt.wikipedia.org/wiki/Arquitetura_Harvard>, 2012

Cada fabricante de microcontrolador desenvolve um nmero de instrues e linguagem prprias para cada equipamento, o que inviabiliza a portabilidade de programao entre diferentes fabricantes, denominada os instruction sets.

Os conjuntos de instrues so divididos em dois grupos CISC (instrues computacionais complexas) e RISC (instrues computacionais reduzidas). No conjunto CISC dados e instrues so de 8 bits, o numero de instrues muito grande (na ordem de duas centenas) e existe somente um barramento para dados e instrues, no podem ser utilizados ao mesmo tempo.

28

1.3.4 Aplicaes para microcontroladores VALDES-PERES (2009) ainda afirma que no meio do desenvolvimento dos microprocessadores, os projetistas encontraram aplicaes onde o processamento e a velocidade no era o mais importante para as aplicaes, e sim o controle do processo. Surge ento uma nova linha de microprocessadores onde foram incorporados a memria, pontos de entrada e sada, contadores, foi ento que o termo microcontrolador surgiu e foi se desenvolvendo para as mais diversas aplicaes.

Quase todos os objetos que fazem parte do nosso cotidiano, como refrigeradores, relgios, impressoras, carros, entre outros, possuem um elemento em comum, o dispositivo de controle, o microcontrolador. Ele esta presente em quase todos os equipamentos eletrnicos, dos mais diversos segmentos, como hospitalar, industrial, domestico, militar, etc.

Ele foi aprimorado para trabalhar nas condies, mas severas, (prximo do motor de um carro, ou dentro de uma indstria) com o consumo mnimo de energia, (o controle remoto de uma televiso) e so de tantos os tipos que se aplicam a praticamente a todas as aplicaes que requerem controle (desde um simples brinquedo a um controlador lgico programvel - CLP).

29

2 METODOLOGIA A escolha do tema proposto deu se origem atravs de pesquisas feitas pela internet sobre utilizao de sistemas de superviso e controle atravs de placas microcontroladas.

Durante todo processo de elaborao da monografia foi necessrio pesquisar fontes na biblioteca da faculdade, tais como Trabalhos de Concluso de Curso anteriores com temas relacionados ao projeto proposto, artigos conceituados na internet e referencias propostas pelos docentes da Fatec Adib Moiss Dib.

Para orientao deste projeto ser necessrio professores que dominem a rea de integrao de sistemas. Rotineiramente sero realizadas reunies com o orientador, que auxiliar sobre as decises das prximas etapas e evoluo da monografia.

Para

inicializao

ser

necessrio

treinamentos

em

softwares

de

desenvolvimento, que serviro para simular em um ambiente virtual, tais como: Proteus Isis (Labcenter Electronics), responsvel por simular o hardware necessrio; Arduino Software (Arduino,Inc), atravs deste realizado a programao, compilando a lgica necessria para o funcionamento; Virtual Serial Ports Emulator (Eterlogic), Emulador para criar portas de comunicao virtuais, simulando a conexo fsica de uma COM; Indusoft Web Studio Educational (Indusoft, Inc), Software dedicado ao desenvolvimento de interfaces visuais de fcil compreenso ao homem, responsvel em realizar telemedies e telecomandos;

Aps a simulao em conjunto dos programas acima descritos, ser vivel a compra dos materiais possibilitando sua montagem fsica, conforme capitulo 3.

30

Sero efetuados testes no prottipo tais como: entradas e sadas digitais; comunicao MODBUS RS-485, telas de interface do Indusoft; configurao do driver. Para o controle da velocidade do motor e de acionamentos das entradas e sadas, se faz necessrio desenvolver uma placa de interface eletrnica e posteriormente ser possvel dedicar o projeto a planta designada, visto que a aplicao ter trs ciclos que so descritos abaixo e no APNDICE C.

Ciclo 1: O controle ser realizado pelo arduino, sendo que ele selecionar a pea no metlica para dentro do magazine e a pea metlica prosseguir no processo.

Ciclo 2: O controle ser realizado pelo arduino, sendo que ele selecionar todas as peas para dentro do magazine, utilizando uma velocidade reduzida.

Ciclo 3: O controle ser realizado pelo Indusoft, sendo que ele selecionar a pea metlica para dentro do magazine e a pea no metlica prosseguir no processo.

Vale ressaltar que o ciclo um e dois funcionar independentemente a uma conexo como o supervisrio, simulando um processo local.

A montagem final dar inicio visto que todos os dispositivos do projeto no apresentaram erros nos testes apresentados.

31

3 DESENVOLVIMENTO DO PROJETO Neste captulo desenvolvido o trabalho intitulado Interface remota para controle de processo InterMotrole de forma fsica.

A princpio se faz necessrio a elaborao de testes virtuais, para isso foi realizado montagem em software que simulassem o projeto integrado. A seguir foi confeccionado um prottipo garantindo o funcionamento da comunicao. O projeto final consiste em trs divises: A parte de hardware eletrnico, programao do microcontrolador e a elaborao das telas do software de superviso e controle. A qual est aplicada em uma planta didtica da FESTO, composto por uma esteira motorizada, sensores de presena e classificao e uma solenoide para desvio das peas. Sendo este material disponibilizado pela Faculdade de Tecnologia Adib Moiss Dib.

A parte eletrnica envolve os conversores de padres de transferncia, USB e RS232 para RS485, e a placa de interface de entradas e sadas, responsvel por intermediar o circuito do arduino ao campo, atravs de optoacopladores e rels, o circuito de controle da velocidade do motor da esteira composto por transistor de potncia que realiza o controle de tenso.

A programao do microcontrolador envolve: A elaborao das rotinas internas para execuo do processo de seleo de peas na planta descrita acima; Utilizao de uma biblioteca integrada ao cdigo fonte do arduino para realizar a comunicao atravs do padro universal MODBUS.

A elaborao no software de superviso e controle inicia-se na configurao do driver MODBUS para estabelecer comunicao entre os perifricos, o prximo passo desenvolver as telas de superviso com animaes, indicadores e acionamentos referenciando os endereos das TAGS de entrada e sada.

32

3.1 Simulao Virtual

A primeira etapa da elaborao do trabalho se deu atravs do conjunto de softwares integrados a fim de viabilizar a construo do projeto. O circuito interno de uma plataforma arduino possibilita a visualizao de acionamento e leitura de bits, conforme ilustra figura 3.1.

Figura 3.1 Software Proteus Isis (Labcenter Electronics) Fonte: Autoria Prpria, 2013

Atravs do software Arduino 1.0.1 realiza-se a programao de uma rotina de leitura e escrita de bits utilizando a biblioteca de comunicao MODBUS, explanado na figura 3.2.

33

Figura 3.2 Software Arduino (Arduino,Inc) Fonte: Autoria Prpria, 2013

O Virtual Serial Ports Emulator possibilita a emulao de portas virtuais para a comunicao do arduino virtual ao Indusoft, demonstrado na figura 3.3.

Figura 3.3 Software Virtual Serial Ports Emulator (Eterlogic) Fonte: Autoria Prpria, 2013

34

No Indusoft Web Studio Educational possibilita a criao de telas para visualizao das entradas e sadas dos pinos do arduino simulado no Proteus, conforme figura 3.4.

Figura 3.4 Indusoft Web Studio Educational (Indusoft, Inc) Fonte: Autoria Prpria, 2013

3.2 Confeco do prottipo

Com o funcionamento comprovado atravs da simulao virtual, inicia-se o processo de montagem fsica do prottipo a fim de fazer a primeira construo lgica do projeto. Para isso faz-se necessrio utilizao de materiais como: Arduino UNO, Conversor RS232/RS485, Conversor USB/RS485, que se encontra explicitado na figura 3.5.

Figura 3.5 Conversor USB/RS485 e Arduino conectado ao conversor RS232/RS485 Fonte: Autoria Prpria, 2013

35

A primeira montagem com base no esquema de ligao disponibilizado pelo fabricante no manual do usurio dos conversores, possibilitou realizar teste iniciais de comunicao e acionamentos conforme ilustra a figura 3.6.

Figura 3.6 Esquema de ligao dos conversores ao Arduino e perifricos Fonte: Manual de Usurio KIT Shield RS485 + Conversor USB/RS485, 2013

Consultando o manual do fabricante Laboratrio de Garagem, realizou-se a conexo entre os terminais RS485, configurao dos drivers do Indusoft e compilao do cdigo fonte. Foi estabelecida a comunicao, afirmando a caracterstica universal do protocolo MODBUS, ilustrada na figura 3.7.

Figura 3.7 Conexo de entradas e sadas ao Arduino Fonte: Autoria Prpria, 2013

36

3.3 Hardware Para a confeco da montagem final de forma que proporcione um melhor aproveitamento do aprendizado adquirido nesta instituio, foram separados os circuitos conforme suas caractersticas e posteriormente interligados em uma nica placa.

Para alimentao foi utilizado uma fonte 24VDC/2A e um circuito para rebaixar a tenso para 5V, utilizando um regulador de tenso LM7805.

Figura 3.8 Circuito regulador de tenso. Fonte: Autoria Prpria, 2013

Para a seleo fsica dos ciclos, foram utilizados 2 botes em configurao pull-down, alimentados com 5V.

Figura 3.9 Botes de seleo de ciclo. Fonte: Autoria Prpria, 2013

37

A interface de entrada foi confeccionada com optoaclopadores, provendo isolao eltrica entre a entrada digital do arduino e os sensores de campo, conforme ilustra figura 3.10.

Figura 3.10 Circuito regulador de tenso. Fonte: Autoria Prpria, 2013

O funcionamento da interface de sada do desviador consiste em um sinal de 5V proveniente da sada OUT12 do arduino que faz o transistor BC548 NPN chavear a alimentao da bobina do rele 24V, que por sua vez aciona a solenoide do desviador, conforme ilustrao da figura 3.11.

Figura 3.11 Interface de sada do desviador. Fonte: Autoria Prpria, 2013

38

Para o driver de controle de velocidade reduzida do motor se fez necessrio utilizar a sada digital OUT11 do arduino que atua sobre um transistor BC 548 NPN para amplificar a corrente para controlar o grau de saturao do transistor de potncia de forma que reduza a tenso aplicada ao motor. J para a velocidade nominal do motor a sada OUT13 do arduino aciona o transistor para chavear o rele fornecendo a tenso total da fonte, conforme ilustra a figura 3.12.

Figura 3.12 Driver do motor. Fonte: Autoria Prpria, 2013

Aps a anlise independente de cada circuito possvel a interligao entre eles, formando uma nica placa de interface de entradas e sadas entre o arduino e o campo, conforme ilustra a figura 3.13

Figura 3.13 Interface de Entradas e Sadas Fonte: Autoria Prpria, 2013

39

A montagem final se deu com todos os componentes a locados em uma placa de acrlico, juntamente com a fonte de sada 24VDC/2A e entrada 100- 240VAC , logo expandindo seus locais de aplicao como: industrial, escolar e residencial, conforme demonstra na figura 3.14.

Figura 3.14 Montagem final. Fonte: Autoria Prpria, 2013

A aplicao modelo utilizada ser embasada em uma planta didtica que faz a classificao entre peas metlicas e no metlicas, para a funcionalidade do projeto foram feitos pequenos reparos estruturais, voltando as suas caractersticas iniciais conforme o fabricante FESTO, ilustrada na figura 3.15.

Figura 3.15 Planta didtica Fonte: Autoria Prpria, 2013

40

Para comprovar a caracterstica universal de comunicao do protocolo MODBUS com outros dispositivos usuais no meio industrial, possvel integrar uma UAD (Unidade de Aquisio de Dados) disponibilizada pelo professor orientador, sendo sua funo retransmitir medies efetuadas no campo, equipamento demostrado na figura 3.16.

Figura 3.16 UAD NOVUS Fonte: Autoria Prpria, 2013

Para a configurao da UAD do fabricante NOVUS, faz-se necessrio parametrizar os valores da comunicao serial, conforme figura 3.17.

Figura 3.17 Configurador Field Logger NOVUS da UAD Fonte: Autoria Prpria, 2013

O tipo de medio do campo escolhida foi de temperatura por uma termoresistncia do tipo PT-100, devido que possvel exemplificar uma variao em curto espao de tempo, conforme figura 3.18.

41

Figura 3.18 Termoresistncia do tipo PT-100 Fonte: Autoria Prpria, 2013

A Integrao final entre todos os dispositivos como: PC - Indusoft, conversores USB RS485, conversor RS485 RS232, arduino, placa de interface de entradas e sadas, UAD (Unidade de Aquisio de Dados) e a planta, comprovou a veracidade de funcionamento do projeto, ilustrado na figura 3.19.

Figura 3.19 Projeto final Fonte: Autoria Prpria, 2013

3.4 Programao do Arduino O cdigo fonte desenvolvido para o arduino foi realizado com base na biblioteca de Juan Pablo Zometa o MODBUS Slave. A bilblioteca utilizada contm 3 comandos do protocolo MODBUS que possibilida a comunicao entre o master e o slave:

Read holding registers (cdigo de funo 3): Este comando utilizado para requisitar um ou mais registros de 16 bits contidos no dispositivo slave.

42

Preset single register (cdigo de funo 6): Este comando utilizado para escrever um dado de 16bits no dispositivo slave.

Preset multiple registers (cdigo de funo 16): Este comando utilizado para escrever um pacote de dados de 16bits no dispositivo slave.

necessrio configurar os parmetros de uma comunicao RS485, para que haja comunicao, o mestre e o escravo devem usar os mesmos parmetros.
/* Parmetros MODBUS RTU de comunicao */ enum { COMM_BPS = 19200, /* baud rate */ MB_SLAVE = 1, /* endereo do escravo MODBUS */ PARITY = 'n', /* paridade */ TXEN = 6 /* pino usado para colocar em modo de transmisso */ };

Aps isso necessrio ordenar todos os registros de entradas, sadas e memrias, responsveis pela comunicao entre mestre (Indusoft) e escravo (Arduino).
/* registros do escravo (holding registers) */ enum { MB_PINO_4, MB_PINO_5, MB_PINO_7, MB_PINO_8, MB_PINO_11, MB_PINO_12, MB_PINO_13, MB_MEM1, // Memria de ciclo atual MB_MEM2, // Memria do tempo MB_MEM3, // Memria que diferencia pea MB_MEM4, // Memria que indica processo em funcionamento MB_REGS /* nmero total de registros do escravo */ };

43

Para que o supervisrio Indusoft leia as entradas a partir do campo conectadas ao arduino, o microcontrolador deve verificar a mudana de estado dos pinos de entrada e enviar para os registros a serem lidos pelo Indusoft, realizado atravs do cdigo de funo 3:
buttonState1 = digitalRead(inPin4); regs[MB_PINO_4] = buttonState1; buttonState2 = digitalRead(inPin5); regs[MB_PINO_5] = buttonState2; buttonState3 = digitalRead(inPin7); regs[MB_PINO_7] = buttonState3; buttonState4 = digitalRead(inPin8); regs[MB_PINO_8] = buttonState4;

O acionamento das sadas realizado conforme a programao feita no script do Indusoft, logo quando o arduino ler esses registros ativa ou desativa uma sada.
switch(regs[MB_PINO_11]) { case 1: digitalWrite(outPin11, HIGH); break; default: /* apagado */ digitalWrite(outPin11, LOW); } switch(regs[MB_PINO_12]) { case 1: digitalWrite(outPin12, HIGH); break; default: /* apagado */ digitalWrite(outPin12, LOW); } switch(regs[MB_PINO_13]) { case 1: digitalWrite(outPin13, HIGH); break; default: /* apagado */ digitalWrite(outPin13, LOW); }

44

Os cdigos descritos acima so para configurar uma conexo com protocolo MODBUS, j o cdigo das rotinas internas do arduino encontra-se disponvel no APNDICE A.

3.5 Configurao do software supervisrio Para que software supervisrio realize a troca de dados com o mdulo slave, necessrio configurar os parmetros da comunicao serial de forma que o mestre e o escravo estejam configurados com os mesmos valores, ilustrado na figura 3.20.

Figura 3.20 Configurao da comunicao serial Fonte: Autoria Prpria, 2013

Aps isso, para melhorar o desempenho do sistema, foi configurado uma folha de driver para cada tela, sendo elas planta e UAD. Na folha de driver da planta, includo todos os registradores de entrada, sada e memria, conforme declarados na programao arduino, demonstrado na figura 3.21.

45

Figura 3.21 Folha do driver da planta Fonte: Autoria Prpria, 2013

J na folha de driver da UAD configurado somente a entrada analgica do sensor de temperatura (PT-100), ilustrado na figura 3.22.

Figura 3.22 Folha do driver da UAD Fonte: Autoria Prpria, 2013

Com as definies das tags declaradas, realizada a elaborao da tela de monitorao da planta utilizada, portando uma chave seletora de ciclos, um boto com link para tela de monitorao da UAD e uma interface visual do sistema conforme figura 3.23.

46

Figura 3.23 Tela de monitorao da planta Fonte: Autoria Prpria, 2013

Para monitorao da UAD elaborado uma tela que utiliza um objeto de grfico de tendncia possibilitando a visualizao da variao de temperatura em funo do tempo, conforme figura 3.24.

Figura 3.24 Tela de monitorao da planta Fonte: Autoria Prpria, 2013

Para realizar o controle e animao da planta no Indusoft, foi utilizado um script conforme disponvel no APNDICE C.

47

CONSIDERAES FINAIS Durante toda fase de pesquisas para a obteno das referncias primordiais na confeco e o perfeito funcionamento do projeto, o principal objetivo era demostrar que possvel comunicao por um protocolo universal MODBUS, atravs da conectividade entre um microcontrolador e um software supervisrio, sendo utilizado neste projeto o Arduino e o Indusoft Web Studio respectivamente. Atualmente, devido grande necessidade de inovao visando sempre relao custo/benefcio, nota-se a possibilidade de utilizar o projeto descrito para interagir cada dia mais o homem com a mquina atravs de uma interface de fcil visualizao, posto que qualquer equipamento que possua entradas e sadas ou conectividade com o MODBUS possa empregar o InterMotrole.

Atravs da realizao dos mtodos planejados comprovou-se a eficcia de realizar o projeto sobre um ciclo PDCA (Plan Do Check and Act - Planejar Fazer Checar e Atuar), sendo que a partir da data inicial foi planejado, simulado e preparado todas as tecnologias e recursos necessrios confeco do projeto. Aps o planejamento foi necessrio adquirir conhecimentos nas ferramentas utilizadas tais como: Indusoft Web Studio, Arduino 1.0.1, Proteus ISIS. Capacitando a realizao da montagem do projeto, que por sua vez apresentou complexidade como: configurao e programao do software Indusoft, estabilizar e configurar a comunicao MODBUS, logo apresentando melhorias que foram implementadas perfazendo assim a construo final do projeto atingindo todos os objetivos desejados.

Para atingir os resultados foi essencial a interdisciplinaridade no contedo necessrio para a composio ideal do projeto, nos temas: Redes indstrias, Informtica Industrial, Lgica de Programao, Eletrnica digital, Eletrnica analgica, Microcontroladores, Metodologia de pesquisa cientfica e tecnolgica, Fundamentos da gesto da qualidade.

Como ideia futura, possvel aprimorar o projeto utilizando o protocolo MODBUS TCP/IP atravs de um meio fsico ethernet otimizando a sua velocidade, agregar a um Embedded Web Server, para que possa ser acessado suas variveis a

48

partir de qualquer dispositivo que possua um navegador, e tambm desenvolver um supervisrio a partir de uma plataforma Android por sua versatilidade em desenvolvimento, tendo uma melhor relao custo/benefcio por ser um software de cdigo aberto.

Por fim, toda a coleta de informaes, com referncias bibliogrficas e com profissionais altamente qualificados, do princpio at a finalizao do projeto, serviu como um grande aprendizado, aprimorando os conhecimentos adquiridos em sala de aula, servindo como experincia para vida profissional e pessoal de cada envolvido, deixando evidente que para conquistar melhores resultados de suma importncia o trabalho em equipe.

49

REFERNCIAS BOYER, S.A. SCADA: Supervisory Control and Data Acquisition, ISA, 2004. CAPELLI, Alexandre. Automao Industrial. Controle de Movimento e

Processos Contnuo. 1 edio. So Paulo: Editora rica. 2006.

CASTRUCCI, Plnio de Lauro; MORAES, C. Ccero. Engenharia de Automao Industrial. 2 edio. Rio de Janeiro: Ed. LTC. 2007. COELHO, MARCELO Apostila de redes de comunicao industrial padres industriais, 2010. <http://www.adjutojunior.com.br/redes_industriais/redes_industriais_cefet_sp.pdf> Acesso em 07/09/12. DENARDIN, Gustavo Weber, Apostila Protocolo Modbus em Linha Serial UTFPR, 2002. Disponvel em: <http://pessoal.utfpr.edu.br/gustavo/Modbus_apostila.pdf>. Acesso em 07/10/2012. EMPRESA Laboratrio de Garagem, Manual do usurio KIT Shield RS485 + Conversor USB/RS485. Disponivel em: <http://www.labdegaragem.com.br/loja/ManualdoUsu%C3%A1rio.2RS485.pdf> Acesso em 15/03/2013 FERRAZ, Rodolfo Cesar de Avelar, Intel 4004 Primeiro Microprocessador, 2008. Disponvel em : <http://www.cin.ufpe.br/~rcaf/ihs/intel4004.html> Acesso em 05/11/2012. GARCIA, Ervaldo Jnior, Apostila de Sistema SCADA Superviso controle e aquisio de dados, 2011.

GOMI,

Edson

Satoshi.

Gesto

de

Projetos.

Disponvel

em:

<http://www.lps.usp.br/lps/arquivos/conteudo/grad/dwnld/ApostilaGestao.pdf> Acesso em 20/07/2012.

MARTINS, GEOMAR M, Apostila Princpios de Automao Industrial, 2007. Disponvel em: <http://www.ufsm.br/desp/geomar/automacao/Apostila_032012.pdf> Acesso em 05/11/2012.

50

MECATRONICA ATUAL, Supervisrios e IHMs Critrios de seleo para projetos de mquinas, 2011. Disponvel em: <http://www.mecatronicaatual.com.br/secoes/leitura/703> Acesso em 05/11/2012. RIBEIRO, Marco Antnio, Instrumentao,8 edio, 1999 SEVERINO, Antonio Joaquim. Metodologia do trabalho cientifico. 23. ed. So Paulo: Cortez,2011.

SILVA, Ana Paula, SALVADOR, Marcelo, Apostila se sistemas de superviso SCADA, 2005. Disponvel em: <http://www.wectrus.com.br/artigos/sist_superv.pdf> Acesso em 05/11/2012.

SOUZA, David Jos de, Desbravando o PIC: ampliado e atualizado para PIC 16F628A, 6.ed. So Paulo: rica, 2003.

STEMMER,

MARCELO

RICARDO,

Sistemas

Distribudos

Redes

de

Computadores para Controle e Automao Industrial, UFSC, 2001. VALDES-PERES, Fernando E. PALLAS-AREN, Ramon. Microcontrollers Fundamentals and Applications with PIC, 2009. ZOMETA, Juan Pablo, Biblioteca ModbusSlave, Disponvel em:

https://sites.google.com/site/jpmzometa/arduino-mbrt/arduino-modbus-slave. Acesso em 20/07/2012.

51

GLOSSRIO ASCII (American Standard Code for Information Interchange ) "Cdigo Padro Americano para o Intercmbio de Informao" uma codificao de caracteres de sete bits baseada no alfabeto ingls. Baudrate Uma medida de velocidade de trfego eletrnico de dados que mede o nmero de sinais eltricos transmitidos por unidade de tempo. CLP (Controlador Lgico Programvel) Computador especializado baseado em um microprocessador que desempenha funes de controle atravs de programas desenvolvidos pelo usurio de diversos tipos e nveis de complexidade. CPU (Central Processing Unit) A Unidade Central de Processamento ou processador a parte de um sistema computacional que realiza as instrues de um programa de computador, para executar a aritmtica bsica, lgica, e a entradas e sada de dados. Driver Circuitos ou programas que fazem a comunicao entre o sistema operacional de sua mquina e o hardware. Fotoacoplador Componente com a funo de transferir uma informao eltrica entre dois circuitos atravs de luz, ou seja, sem contato eltrico entre eles. Hardware a parte fsica do processo ou sistema. o conjunto de componentes eltricos, eletrnicos, placas e circuitos integrados, sensores, atuadores, rels, entre outros, que se comunicam dentro do processo. IHM (Interface Homem Mquina) o canal de comunicao entre o homem e o computador, atravs do qual interagem, com vista atingir um objetivo comum. MODBUS Protocolo de comunicao de dados utilizado em sistemas de automao industrial. utilizado em redes de controladores lgicos programveis para aquisio de sinais de instrumentos e comandar atuadores.

52

Protocolo Padro que controla e possibilita a conexo, comunicao e transferncia de dados entre dois sistemas. RS232 Padro para troca serial de dados binrios entre um terminal de dados e um comunicador de dados. RTU (Remote Terminal Unit) No modo RTU, cada mensagem de 8 bits contm dois caracteres hexadecimais de 4 bits. SCADA (Supervisory Control and Data Aquisition) Sistema de Controle e Aquisio de Dados Um SCADA permite aos seus usurios coletar dados de instalaes distantes e/ou enviar, para estas, um limitado nmero e tipos de instrues de controle. Script Conjunto de funes e cdigos utilizados para realizar uma programao. Software Programa ou grupo de programas que instrui o hardware sobre a maneira como ele deve executar uma tarefa.

UAD (Unidade de Aquisio de Dados) - So os dispositivos que realizam de fato a interface com o processo (instrumentao), que faz aquisio de dados na grandeza eltrica e retransmite em pacote de dados. USB (Universal Serial Bus) tipo de conexo que permite a conexo de perifricos sem a necessidade de desligar o computador.

53

APNDICE A Fluxograma do descritivo de funcionamento

54

APNDICE B - Programao do Arduino /*


Modbus serial - RTU Slave Arduino Sketch Este exemplo de domnio pblico Testado na IDE 1.0.1 Baseado na biblioteca de Juan Pablo Zometa : jpmzometa@gmail.com http://sites.google.com/site/jpmzometa/ and Samuel Marco: sammarcoarmengol@gmail.com and Andras Tucsni. As funes do protocolo MODBUS implementadas nestecdigo: 3 - Read holding registers; 6 - Preset single register; 16 - Preset multiple registers. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the impliedwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU GeneralPublic License along with this program; if not, write to the FreeSoftware Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. The functions included here have been derived fromthe Modicon Modbus Protocol Reference Guide which can be obtained from Schneider at www.schneiderautomation.com. This code has its origins with paul@pmcrae.freeserve.co.uk (http://www.pmcrae.freeserve.co.uk) who wrote a small program to read 100 registers from a modbus slave. */ /* * configure_mb_slave(baud, parity, tx_en_pin) * * configurao dos parametros da porta serial. * * baud: taxa de transmisso em bps (valores tpicos entre 9600, 19200... * parity: seta o modo de paridade: * 'n' sem paridade (8N1); 'e' paridede impar (8E1), 'o' paridade par (8O1 * tx_en_pin: pino do arduino que controla a transmisso/recepo em uma l * 0 or 1 desliga esta funo (para rede RS232) * >2 para uma rede multiponto. */ void configure_mb_slave(long baud, char parity, char txenpin); /* * update_mb_slave(slave_id, holding_regs_array, number_of_regs) * * verifica se h qualquer pedido vlido do mestre modbus. Se houver, * executa a ao solicitada * * slave: endereo do escravo (arduino) (1 to 127) * regs: uma matriz com os holding registers. Eles comeam no endereo 1 ( vista) * Regs_size: nmero total de holding registers. * Retorna: 0 se no houver pedido do mestre, * NO_REPLY (-1) se nenhuma resposta enviada parao mestre * Caso um cdigo de exceo (1 a 4) em algumas excees de modbus * O nmero de bytes enviados como resposta (> 4) se OK. */

55

intupdate_mb_slave(unsigned char slave, int*regs, unsigned intregs_size); /* Parmetros Modbus RTU de comunicao, o Mestre eos escravos devem usar parmetros */ enum { COMM_BPS = 19200, /* baud rate */ MB_SLAVE = 1, /* endereo do escravo modbus */ /* cada escravo modbus deve ter um */ /* endereo nico na rede modbus */ PARITY = 'n', /* paridade */ TXEN = 6 /*Definir o pino usado para colocar o driver RS485 em modo de transmisso, utilizado somente em redes RS485 quando colocar em 0 ou 1 para redes RS232 */ }; /* registros do escravo (holding registers) * * Aqui ficam ordenados todos os registros de leitura e escrita * da comunicao entre o mestre e o escravo (SCADAe arduino) * */ enum { MB_PINO_4, MB_PINO_5, MB_PINO_7, MB_PINO_8, MB_PINO_11, MB_PINO_12, MB_PINO_13, MB_MEM1, // Memria do Ciclo MB_MEM2, // Memria do timer MB_MEM3, // Memria que diferencia pea MB_MEM4, // Memria que indica start da esteira MB_REGS /* nmero total de registros do escravo */ }; intregs[MB_REGS]; intinPin4 = 4; intinPin5 = 5; intinPin7 = 7; intinPin8 = 8; intoutPin11 = 11; intoutPin12 = 12; intoutPin13 = 13; intbuttonState1 = 0; intbuttonState2 = 0; intbuttonState3 = 0; intbuttonState4 = 0; intmem1 = 0; intTemp=0; intword1=0; intword2=0; intword3=0; intword4=0; intword5=0; intind=0; // Variables will change: intblinkState = 0; long previousMillis = 0; // will store last time LED was updated // the follow variables is a long because the time,measured in milisecond // will quickly become a bigger number than can be stored in an int.

56

long interval = 200; // interval at which to blink (milliseconds) void setup () { /* configura cominicao modbus * 19200 bps, 8N1, RS485 network */ configure_mb_slave(COMM_BPS, PARITY, TXEN); pinMode (inPin4, INPUT ); pinMode (inPin5, INPUT ); pinMode (inPin7, INPUT ); pinMode (inPin8, INPUT ); pinMode (outPin11, OUTPUT ); pinMode (outPin12, OUTPUT ); pinMode (outPin13, OUTPUT ); } void loop () { /* verifica se h solicitaes do mestre */ if(update_mb_slave(MB_SLAVE, regs, MB_REGS)) { } buttonState1 = digitalRead (inPin4); regs[MB_PINO_4] = buttonState1; buttonState2 = digitalRead (inPin5); regs[MB_PINO_5] = buttonState2; buttonState3 = digitalRead (inPin7); regs[MB_PINO_7] = buttonState3; buttonState4 = digitalRead (inPin8); regs[MB_PINO_8] = buttonState4; if(regs[MB_MEM1] == 0) {mem1=0;} if((regs[MB_MEM1] == 1)||(buttonState3==true )) {mem1=1; regs[MB_MEM1] =1; } if((regs[MB_MEM1] == 2)||(buttonState4==true )) {mem1=2; regs[MB_MEM1] =2; } if(regs[MB_MEM1] == 3) {mem1=3;} unsigned long currentMillis = millis (); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; if(blinkState == 0) { blinkState = 1;} else { blinkState = 0;} } if(mem1== 1) //CICLO 1 { if(buttonState2==0) { if((blinkState == 1)&&(word5 ==0)) { word4 = word4+1; word5 =1; } if(blinkState == 0) {word5 = 0; }

57

if(word4 ==4) { word4 = 0; digitalWrite (outPin13, HIGH ); regs[MB_PINO_13] = 1; Temp = 1; } } else { word4=0; } if(Temp==1) { if((blinkState ==1)&&(word2 ==0)) { word1 = word1+1; word2 =1; } if(blinkState == 0) {word2 = 0; } if(buttonState1==0) {ind =1; } if((ind==0)&&(word1>3)) { digitalWrite (outPin12, HIGH ); regs[MB_PINO_12] = 1; } if(word1>6) { digitalWrite (outPin12, LOW); digitalWrite (outPin13, LOW); regs[MB_PINO_12] = 0; regs[MB_PINO_13] = 0; word1=0; Temp=0; ind=0; } } else { word1=0; } } if(mem1 == 2) //CICLO 2 { if(buttonState2==0) { if((blinkState == 1)&&(word5 ==0)) { word4 = word4+1; word5 =1; } if(blinkState == 0) {word5 = 0; } if(word4 ==4) {

58

word4 = 0; digitalWrite (outPin11, HIGH ); regs[MB_PINO_11] = 1; Temp = 1; } } else { word4=0; } if(Temp==1) { if((blinkState ==1)&&(word2 ==0)) { word1 = word1+1; word2 =1; } if(blinkState == 0) {word2 = 0; } if(buttonState1==0) {ind =1; } if(word1>6) { digitalWrite (outPin12, HIGH ); regs[MB_PINO_12] = 1; } if(word1>10) { digitalWrite (outPin12, LOW); digitalWrite (outPin11, LOW); regs[MB_PINO_11] = 0; regs[MB_PINO_12] = 0; word1=0; Temp=0; ind=0; } } else { word1=0; } } if(mem1 == 3) //CICLO 3 { switch (regs[MB_PINO_11]) { case 1: digitalWrite (outPin11, HIGH ); break ; default : /* apagado */ digitalWrite (outPin11, LOW); } switch (regs[MB_PINO_12]) { case 1: digitalWrite (outPin12, HIGH ); break ; default : /* apagado */ digitalWrite (outPin12, LOW); }

59

switch (regs[MB_PINO_13]) { case 1: digitalWrite (outPin13, HIGH ); break ; default : /* apagado */ digitalWrite (outPin13, LOW); } } else { regs[MB_MEM2] = word1; regs[MB_MEM3] = ind; regs[MB_MEM4] = Temp; } } /*************************************************************************** * INICIO DAS FUNES ESCRAVO Modbus RTU ************************************************************************* /* variaveis globais */ unsigned intTxenpin = TXEN; /*Definir o pino usado para colocar o driver RS485 em modo de transmisso, utilizado somente em redes RS485 quando colocar em 0 ou 1 para redes RS232 */ /* Lista de cdigos de funo modbus suportados. Sevoc implementar um no cdigo de funo aqui! */ enum { FC_READ_REGS = 0x03, //Read contiguous block of holding register (Ler um FC_WRITE_REG = 0x06, //Write single holding register (Escrever em um ni FC_WRITE_REGS = 0x10 //Write block of contiguous registers (Escrever em }; /* Funes suportadas. Se voc implementar um novo,colocar seu cdigo em matriz! */ const unsigned char fsupported[] = { FC_READ_REGS, FC_WRITE_REG, FC_WRITE_REGS }; /* constantes */ enum { MAX_READ_REGS = 0x7D, MAX_WRITE_REGS = 0x7B, MAX_MESSAGE_LENGTH = 256 }; enum { RESPONSE_SIZE = 6, EXCEPTION_SIZE = 3, CHECKSUM_SIZE = 2 }; /* cdigo de excees */ enum { NO_REPLY = -1, EXC_FUNC_CODE = 1, EXC_ADDR_RANGE = 2, EXC_REGS_QUANT = 3, EXC_EXECUTE = 4 }; /* posies dentro da matriz de consulta / resposta*/ enum { SLAVE = 0, FUNC, START_H, START_L, REGS_H,

60

REGS_L, BYTE_CNT }; /* CRC INPUTS: buf -> Matriz contendo a mensagem a ser enviada para o controlador mestre start -> Incio do loop no crc do contador, normalmente 0. cnt -> Quantidade de bytes na mensagem a ser enviada para o controlador m OUTPUTS: temp -> Retorna byte crc para a mensagem. COMMENTRIOS: Esta rotina calcula o byte crc alto e baixo de umamensagem. Note que este CRC usado somente para Modbus, noem Modbus PLUS ou TCP. ************************************************************************* unsigned intcrc(unsigned char *buf, unsigned char start, unsigned char cnt) { unsigned char i, j; unsigned temp, temp2, flag; temp = 0xFFFF; for(i = start; i < cnt; i++) { temp = temp ^ buf[i]; for(j = 1; j <= 8; j++) { flag = temp & 0x0001; temp = temp >> 1; if(flag) temp = temp ^ 0xA001; } } /* Inverter a ordem dos bytes. */ temp2 = temp >> 8; temp = (temp << 8) | temp2; temp &= 0xFFFF; return (temp); } /*********************************************************************** * * As seguintes funes constroem o frame de * um pacote de consulta modbus. * ***********************************************************************/ /* * Incio do pacote de uma resposta read_holding_register */ void build_read_packet(unsigned char slave, unsigned char function, unsigned char count, unsigned char *packet) { packet[SLAVE] = slave; packet[FUNC] = function; packet[2] = count * 2; } /* * Incio do pacote de uma resposta preset_multiple_register */ void build_write_packet(unsigned char slave, unsigned char function, unsigned intstart_addr, unsigned char count, unsigned char *packet) {

61

packet[SLAVE] = slave; packet[FUNC] = function; packet[START_H] = start_addr >> 8; packet[START_L] = start_addr & 0x00ff; packet[REGS_H] = 0x00; packet[REGS_L] = count; } /* * Incio do pacote de uma resposta write_single_register */ void build_write_single_packet(unsigned char slave, unsigned char function unsigned intwrite_addr, unsigned intreg_val, unsigned char * packet) { packet[SLAVE] = slave; packet[FUNC] = function; packet[START_H] = write_addr >> 8; packet[START_L] = write_addr & 0x00ff; packet[REGS_H] = reg_val >> 8; packet[REGS_L] = reg_val & 0x00ff; } /* * Incio do pacote de uma resposta excepo */ void build_error_packet(unsigned char slave, unsigned char function, unsigned char exception, unsigned char *packet) { packet[SLAVE] = slave; packet[FUNC] = function + 0x80; packet[2] = exception; } /************************************************************************* * * modbus_query( packet, length) * * Funo para adicionar uma soma de verificao para o fim de um pacote. * Por favor, note que a matriz pacote deve ser de pelo menos 2 campos mai * String_length. ************************************************************************* void modbus_reply(unsigned char *packet, unsigned char string_length) { inttemp_crc; temp_crc = crc(packet, 0, string_length); packet[string_length] = temp_crc >> 8; string_length++; packet[string_length] = temp_crc & 0x00FF; } /*********************************************************************** * * send_reply( query_string, query_length ) * * Funo para enviar uma resposta a um mestre Modbus. * Retorna: o nmero total de caracteres enviados ************************************************************************/ intsend_reply(unsigned char *query, unsigned char string_length) { unsigned char i; if(Txenpin > 1) { // coloca o MAX485 no modo de transmisso UCSR0A=UCSR0A |(1 << TXC0); digitalWrite ( Txenpin, HIGH ); delayMicroseconds (3640); // aguarda silencio de 3.5 caracteres em 9600

62

} modbus_reply(query, string_length); string_length += 2; for(i = 0; i < string_length; i++) { Serial .write (byte (query[i])); } if(Txenpin > 1) {// coloca o MAX485 no modo de recepo while (!(UCSR0A & (1 << TXC0))); digitalWrite ( Txenpin, LOW); } return i; /* isso no significa que a gravao foi bem sucedida */ } /*********************************************************************** * * receive_request( array_for_data ) * * Funo para monitorar um pedido do mestre modbus. * * Retorna: Nmero total de caracteres recebidos seOK * 0 se no houver nenhum pedido * Um cdigo de erro negativo em caso de falha ***********************************************************************/ intreceive_request(unsigned char *received_string) { intbytes_received = 0; /* FIXME: no Serial.available esperar 1.5T ou 3.5Tantes de sair do loo while (Serial .available ()) { received_string[bytes_received] = Serial .read (); bytes_received++; if(bytes_received >= MAX_MESSAGE_LENGTH) return NO_REPLY; /* erro de porta */ } return (bytes_received); } /********************************************************************* * * modbus_request(slave_id, request_data_array) * * Funo que retornada quando o pedido est correto * e a soma de verificao est correto. * Retorna: string_length se OK * 0 se no * Menos de 0 para erros de exceo * * Nota: Todas as funes usadas para enviar ou receber dados via * Modbus devolver esses valores de retorno. * **********************************************************************/ intmodbus_request(unsigned char slave, unsigned char *data) { intresponse_length; unsigned intcrc_calc = 0; unsigned intcrc_received = 0; unsigned char recv_crc_hi; unsigned char recv_crc_lo; response_length = receive_request(data); if(response_length > 0) { crc_calc = crc(data, 0, response_length - 2); recv_crc_hi = (unsigned ) data[response_length - 2]; recv_crc_lo = (unsigned ) data[response_length - 1];

63

crc_received = data[response_length - 2]; crc_received = (unsigned ) crc_received << 8; crc_received = crc_received | (unsigned ) data[response_length - 1]; /*********** verificar CRC da resposta ************/ if(crc_calc != crc_received) { return NO_REPLY; } /* verificar a ID do escravo */ if(slave != data[SLAVE]) { return NO_REPLY; } } return (response_length); } /********************************************************************* * * validate_request(request_data_array, request_length, available_regs) * * Funo para verificar se o pedido pode ser processado pelo escravo. * * Retorna: 0 se OK * Um cdigo de exceo negativa em caso de erro * **********************************************************************/ intvalidate_request(unsigned char *data, unsigned char length, unsigned intregs_size) { inti, fcnt = 0; unsigned intregs_num = 0; unsigned intstart_addr = 0; unsigned char max_regs_num; /* verificar o cdigo de funo */ for(i = 0; i < sizeof(fsupported); i++) { if(fsupported[i] == data[FUNC]) { fcnt = 1; break ; } } if(0 == fcnt) return EXC_FUNC_CODE; if(FC_WRITE_REG == data[FUNC]) { /* Para a funo de escrever um reg nico, este oregistro alvo.*/ regs_num = ((int) data[START_H] << 8) + (int) data[START_L]; if(regs_num >= regs_size) return EXC_ADDR_RANGE; return 0; } /* Para as funes de leitura / escrita de registros, este o intervalo regs_num = ((int) data[REGS_H] << 8) + (int) data[REGS_L]; /* verifica a quantidade de registros */ if(FC_READ_REGS == data[FUNC]) max_regs_num = MAX_READ_REGS; else if(FC_WRITE_REGS == data[FUNC]) max_regs_num = MAX_WRITE_REGS; if((regs_num < 1) || (regs_num > max_regs_num)) return EXC_REGS_QUANT; /* verificar a quantidade de registros, endereo inicial 0 */ start_addr = ((int) data[START_H] << 8) + (int) data[START_L]; if((start_addr + regs_num) > regs_size)

64

return EXC_ADDR_RANGE; return 0; /* OK, sem exceo */ } /************************************************************************ * * write_regs(first_register, data_array, registers_array) * * escreve nos registradores do escravo os dados emconsulta, * A partir de start_addr. * * Retorna: o nmero de registros escritos ************************************************************************/ intwrite_regs(unsigned intstart_addr, unsigned char *query, int*regs) { inttemp; unsigned inti; for(i = 0; i < query[REGS_L]; i++) { /* mudar reg hi_byte para temp */ temp = (int) query[(BYTE_CNT + 1) + i * 2] << 8; /* OR com lo_byte */ temp = temp | (int) query[(BYTE_CNT + 2) + i * 2]; regs[start_addr + i] = temp; } return i; } /************************************************************************ * * preset_multiple_registers(slave_id, first_register, number_of_registers * data_array, registers_array) * * Escreva os dados na matriz dos registos do escravo. * ************************************************************************* intpreset_multiple_registers(unsigned char slave, unsigned intstart_addr, unsigned char count, unsigned char *query, int*regs) { unsigned char function = FC_WRITE_REGS; /* Escrever em mltiplos registr int status = 0; unsigned char packet[RESPONSE_SIZE + CHECKSUM_SIZE]; build_write_packet(slave, function, start_addr, count, packet); if(write_regs(start_addr, query, regs)) { status = send_reply(packet, RESPONSE_SIZE); } return (status ); } /************************************************************************ * * write_single_register(slave_id, write_addr, data_array, registers_array * * Escrever um nico valor inteiro em um nico registo do escravo. * ************************************************************************* intwrite_single_register(unsigned char slave, unsigned intwrite_addr, unsigned char *query, int*regs) { unsigned char function = FC_WRITE_REG; /* Funo: Write Single Register int status = 0;

65

unsigned intreg_val; unsigned char packet[RESPONSE_SIZE + CHECKSUM_SIZE]; reg_val = query[REGS_H] << 8 | query[REGS_L]; build_write_single_packet(slave, function, write_addr, reg_val, packet); regs[write_addr] = (int) reg_val; /* written.start_addr=write_addr; written.num_regs=1; */ status = send_reply(packet, RESPONSE_SIZE); return (status ); } /************************************************************************ * * read_holding_registers(slave_id, first_register,number_of_registers, * registers_array) * * l os registros do escravo e envia para o mestreModbus * ************************************************************************* intread_holding_registers(unsigned char slave, unsigned intstart_addr, unsigned char reg_count, int*regs) { unsigned char function = 0x03; /* Funo 03: Read Holding Registers */ intpacket_size = 3; int status ; unsigned inti; unsigned char packet[MAX_MESSAGE_LENGTH]; build_read_packet(slave, function, reg_count, packet); for(i = start_addr; i < (start_addr + (unsigned int) reg_count); i++) { packet[packet_size] = regs[i] >> 8; packet_size++; packet[packet_size] = regs[i] & 0x00FF; packet_size++; } status = send_reply(packet, packet_size); return (status ); } void configure_mb_slave(long baud, char parity, char txenpin) { Serial .begin (baud); switch (parity) { case 'e': // 8E1 UCSR0C |= ((1<<UPM01) | (1<<UCSZ01) | (1<<UCSZ00)); // UCSR0C &= ~((1<<UPM00) | (1<<UCSZ02) | (1<<USBS0)); break ; case 'o': // 8O1 UCSR0C |= ((1<<UPM01) | (1<<UPM00) | (1<<UCSZ01) | (1<<UCSZ00)); // UCSR0C &= ~((1<<UCSZ02) | (1<<USBS0)); break ; case 'n': // 8N1 UCSR0C |= ((1<<UCSZ01) | (1<<UCSZ00)); // UCSR0C &= ~((1<<UPM01) | (1<<UPM00) | (1<<UCSZ02) | (1<<USBS0)); break ; default : break ; } if(txenpin > 1) { // pino 0 & pino 1 so reservados para RX/TX Txenpin = txenpin; /* definir varivel global */

66

pinMode (Txenpin, OUTPUT ); digitalWrite (Txenpin, LOW); } return ; } /* * update_mb_slave(slave_id, holding_regs_array, number_of_regs) * * verifica se h qualquer pedido vlido do mestre modbus. Se houver, * executa a ao solicitada */ unsigned long Nowdt = 0; unsigned intlastBytesReceived; const unsigned long T35 = 5; intupdate_mb_slave(unsigned char slave, int*regs, unsigned intregs_size) { unsigned char query[MAX_MESSAGE_LENGTH]; unsigned char errpacket[EXCEPTION_SIZE + CHECKSUM_SIZE]; unsigned intstart_addr; intexception; intlength = Serial .available (); unsigned long now = millis (); if(length == 0) { lastBytesReceived = 0; return 0; } if(lastBytesReceived != length) { lastBytesReceived = length; Nowdt = now + T35; return 0; } if(now < Nowdt) return 0; lastBytesReceived = 0; length = modbus_request(slave, query); if(length < 1) return length; exception = validate_request(query, length, regs_size); if(exception) { build_error_packet(slave, query[FUNC], exception, errpacket); send_reply(errpacket, EXCEPTION_SIZE); return (exception); } start_addr = ((int) query[START_H] << 8) + (int) query[START_L]; switch (query[FUNC]) { case FC_READ_REGS: return read_holding_registers(slave, start_addr, query[REGS_L], regs); break ; case FC_WRITE_REGS: return preset_multiple_registers(slave, start_addr, query[REGS_L], query, regs);

67

break ; case FC_WRITE_REG: write_single_register(slave, start_addr, query, regs); break ; } }

68

APNDICE C - Programao do script no Indusoft


Sub Graphics_OnStart() End Sub 'Este procedimento executado continuamente enquanto o mdulo grfico est rodando. Sub Graphics_WhileRunning() If $MEM1 = 3 Then If $IN5=False Then If (($BlinkFast=True) And ($word5=0)) Then $word4= $word4+1 $word5=1 End If If ($BlinkFast=False) Then $word5 = 0 End If If $word4 = 4 Then $OUT13 = 1 $Temp = 1 $word4 = 0 End If Else $word4=0 End If If $Temp=True Then If (($BlinkFast=True) And ($word2=0)) Then $word1= $word1+1 $word2=1 End If If ($BlinkFast=False) Then $word2 = 0 End If If $IN4 =False Then $ind = 1 End If If (($ind =1) And ($word1>3)) Then $OUT12=1 End If If $word1>6 Then $OUT13 = 0 $word1= 0 $Temp = 0 $OUT12 = 0 $ind = 0 End If Else $word1= 0 End If End If $Temperatura2 = $Temperatura/10 End Sub 'Este procedimento executado somente uma vez quando o mdulo grfico fechado. Sub Graphics_OnEnd() End Sub

69

APNDICE D Cronograma do trabalho de concluso de curso

70

ANEXO A Manual de configurao do driver MODBUS

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

Potrebbero piacerti anche