FACULDADE FARIAS BRITO CIÊNCIA DA COMPUTAÇÃO FELIPE OQUENDO NOGUEIRA PROTÓTIPO DE FERRAMENTA DE INVENTÁRIO EM TEMPO REAL UTILIZANDO RFID Fortaleza, 2008 FELIPE OQUENDO NOGUEIRA PROTÓTIPO DE FERRAMENTA DE INVENTÁRIO EM TEMPO REAL UTILIZANDO RFID Monografia apresentada para obtenção dos créditos da disciplina Trabalho de Conclusão do Curso da Faculdade Farias Brito, como parte das exigências para graduação no Curso de Ciência da Computação. Orientadora: Dra Wietske Ineke Meyering. 2 Fortaleza, 2008 PROTÓTIPO DE FERRAMENTA DE INVENTÁRIO EM TEMPO REAL UTILIZANDO RFID Felipe Oquendo Nogueira PARECER _____________________ Data: ____/____/_________ BANCA EXAMINADORA: ___________________________________ Nome e titulação (Orientador) ___________________________________ Nome e titulação (Examinador) ___________________________________ Nome e titulação (Examinador) 3 Dedico este trabalho a todas as pessoas que eu amo porque com seus conselhos e exemplos de vida me ajudaram a construir o que eu sou no presente. 4 Agradeço a Deus, a minha família e aos meus professores pelo apoio e paciência e à empresa E-NOVAR pelo suporte no processo de desenvolvimento deste trabalho. 5 RESUMO O trabalho “Protótipo de inventário em tempo real utilizando RFID” apresenta uma solução em estágio de protótipo de uma ferramenta de inventário em tempo real utilizando RFID (Radio Frequency identification, do inglês: “Identificação por radiofreqüência”). O protótipo foi desenvolvido desprezando as dificuldades na aplicação da tecnologia, mas apontando os empecilhos que existem e como tem sido o desenvolvimento da tecnologia de identificação por radiofreqüência para superá-los. A fundamentação teórica que dá sustentação à análise parte de conceitos de comunicação utilizando energia refletida concebidos por Stockman (1948) e nas perspectivas da tecnologia apresentadas por Viehland (2007). Para construção do protótipo foi utilizada uma arquitetura de software flexível para permitir futuras extensões e para que o protótipo possa ser utilizado como base para o desenvolvimento de um produto final. Os resultados obtidos comprovam que é viável desenvolver uma ferramenta em estágio final com o propósito apresentado. 6 SUMÁRIO 1 REVISÃO BIBLIOGRÁFICA............................................................................................... 14 1.1 Histórico .............................................................................................................................. 14 1.2 O que é RFID?...................................................................................................................... 15 1.3 Aplicações ............................................................................................................................ 17 1.4 Padronização ........................................................................................................................ 19 1.5 Futuro do RFID .................................................................................................................... 20 2 Metodologia............................................................................................................................ 23 2.1 Model View Controller........................................................................................................ 24 2.10 Plataforma de leitura........................................................................................................... 32 2.11 Outras camadas e bibliotecas.............................................................................................. 33 2.2 Programação Orientada a Objetos ........................................................................................ 24 2.3 Mapeamento Objeto Relacional ........................................................................................... 24 2.4 Plataforma “.Net” ................................................................................................................ 25 2.5 Ferramentas ......................................................................................................................... 25 2.6 Visão da solução................................................................................................................... 26 7 2.7 Common ............................................................................................................................... 27 2.8 DAL..................................................................................................................................... 29 2.9 Business................................................................................................................................ 30 3 Resultados obtidos.................................................................................................................. 35 4 Conclusão ............................................................................................................................... 39 ANEXO I.................................................................................................................................... 44 Diagrama da camada de negócios .............................................................................................. 51 Diagrama de classes concretas da camada de acesso a dados .................................................... 47 Diagrama de classes da camada de comunicação com RFID..................................................... 55 Diagrama de interfaces da camada de acesso a dados................................................................ 45 INTRODUÇÃO.......................................................................................................................... 12 REFERÊNCIAS ......................................................................................................................... 41 8 LISTA DE FIGURAS Figura 1 – Sistema RFID composto de uma leitora, uma antena, um transponder e um sistema de software ................................................................................................................................. 16 Figura 2 – Carrinho de compras inteligente dotado de um sistema de identificação por radiofreqüência. .......................................................................................................................... 17 Figura 3 – Implante de RFID em humanos. ............................................................................... 18 Figura 4 – Utilização de etiquetas inteligentes em animais. ...................................................... 18 Figura 5 – Diagrama de casos de uso da solução. Os casos de uso são “Realizar Login”, “Cadastrar Produto”, “Cadastrar Item de Produto”, “Realizar Inventário” e “Cadastrar Leitora”. .................................................................................................................................................... 26 Figura 6 – Diagrama de pacotes da solução. Apresenta o relacionamento entre componentes da solução........................................................................................................................................ 27 Figura 7 – Diagrama de classes do pacote Common.................................................................. 28 Figura 8 – Interfaces do pacote DAL. ........................................................................................ 29 Figura 9 – Classes concretas do pacote DAL............................................................................. 30 Figura 10 – Interfaces do pacote Business. ................................................................................ 31 Figura 11 – Classes concretas do pacote Business..................................................................... 31 Figura 12 – Diagrama de classes da plataforma......................................................................... 33 9 Figura 13 – Tela de cadastro de leitoras do protótipo. ............................................................... 36 Figura 14 – Tela de cadastro de produtos................................................................................... 37 Figura 15 – Tela de associação de itens a produtos.................................................................... 37 Figura 16 – Tela de execução do inventário............................................................................... 38 Figura 17 – Interfaces do pacote DAL. ...................................................................................... 45 Figura 18 – Classes concretas do pacote DAL........................................................................... 47 Figura 19 – Interfaces do pacote Business. ................................................................................ 51 Figura 20 – Classes concretas do pacote Business..................................................................... 51 Figura 21 – Diagrama de classes da plataforma......................................................................... 55 10 LISTA DE TABELAS Tabela 1 – Padrões de etiqueta inteligente. ................................................................................ 19 11 INTRODUÇÃO Atualmente indústrias e lojas precisam realizar inventário para os mais variados propósitos; de uma simples contagem de produtos para garantir que o estoque suprirá a demanda, até o objetivo de fazer uma contagem de bens por uma empresa de auditoria do mercado de capitais. Para realizar um inventário de bens e materiais as empresas precisam parar a produção, alocar recursos humanos e realizar o inventário várias vezes até que se atinja um grau de confiabilidade adequado. O objetivo deste trabalho é apresentar uma ferramenta em estágio de protótipo de inventário em tempo real utilizando etiqueta inteligente, apontar os empecilhos que existem em sua aplicação e como tem sido seu desenvolvimento para superá-los. Para atingir os objetivos aqui apresentados, foi desenvolvida a revisão bibliográfica discorrendo sobre o histórico da tecnologia, os empecilhos que existem na aplicação desta e o que se espera de seu futuro. Na metodologia são apresentadas as ferramentas utilizadas e a solução técnica adotada para o desenvolvimento do protótipo. 12 Finalmente chegamos à conclusão que é possível construir uma ferramenta em estágio final de inventário em tempo real utilizando a tecnologia. 13 1 REVISÃO BIBLIOGRÁFICA 1.1 Histórico Com a descoberta da onda contínua na primeira década do século 20, iniciou-se uma nova era na comunicação por radiofreqüência moderna. Esta descoberta, que permitiu a criação do radar, foi o passo mais importante para que, em 1948, a tecnologia de RFID (Radio Frequency Identification (do inglês: “identificação por radiofreqüência”) fosse explorada pela primeira vez pelo cientista Harry Stockman em seu artigo “Communication by Means of Reflected Power” (LANDT, 2001). Harry Stockman deixou claro o potencial da tecnologia, mas apontou vários problemas a serem resolvidos até que fosse possível tornar a tecnologia utilizável. Esses desafios fizeram-no concluir: “Evidentemente, muita pesquisa e desenvolvimento serão necessários antes que os problemas básicos que ainda existem na comunicação por energia refletida sejam resolvidos e aplicações para a tecnologia sejam exploradas1” (HARRY, 1948). 1 "Evidently, considerable research and development work has to be done before the remaining basic problems in reflected-power communication are solved, and before the field of useful applications is explored." (Tradução nossa). 14 Aproximadamente trinta anos seriam necessários para que as tecnologias que resolveriam os problemas básicos apontados por Harry fossem desenvolvidas. Circuitos integrados, transistores, microprocessadores e a evolução das redes de comunicação são apenas alguns exemplos (LANDT, 2001). Na década de 60, as primeiras atividades comerciais surgiram com sistemas antifurto composto por transponder colocado nos produtos e antenas posicionadas nas portas dos estabelecimentos que produziam um sinal sonoro quando o produto passava pelas antenas. Era o prelúdio da expansão de sistemas RFID. Na década seguinte, as pesquisas se intensificaram unindo companhias, governo, inventores e instituições acadêmicas no sentido de explorar o potencial da tecnologia com aplicações para o mundo real (LANDT, 2001). Algumas companhias fizeram adoção da tecnologia ainda na década de 70, enquanto estava em processo de desenvolvimento e testes. Isso contribuiu para que estes testes fossem intensificados e para que na década de 80 a tecnologia estivesse madura para ser fortemente explorada comercialmente, inicialmente apenas com sistemas antifurto e identificação de produtos e materiais. A década de 90 foi marcada pela criação de padrões que permitiriam interoperabilidade e portabilidade para as aplicações já existentes. RFID foi largamente difundido nesta época e passou a fazer parte do cotidiano das farmácias, supermercados, indústrias e portos com aplicações de cadeia de suprimentos, sistemas contra falsificação, identificação de produtos e identificação de contêineres. 1.2 O que é RFID? RFID é um sistema composto por uma leitora com uma antena capaz de emitir ondas eletromagnéticas e de uma etiqueta inteligente, comumente denominada “tag”, dotada de um microchip composto por uma antena e uma memória capaz de gravar um identificador. A 15 leitora emite uma onda que é captada pela antena da etiqueta inteligente, a própria energia da onda é utilizada para ler o identificador gravado na memória e para responder o sinal com o valor do identificador. (GLOVER, 2007). Figura 1 – Sistema RFID composto de uma leitora, uma antena, um transponder e um sistema de software A figura 1 do sistema RFID representa um software que utiliza as informações das etiquetas inteligentes, por exemplo, um software de inventário. A leitora é responsável por gerar e interpretar sinais para fazer a comunicação com as etiquetas inteligentes; a antena é responsável por emitir o sinal gerado pela leitora e captar o sinal emitido pela etiqueta inteligente e, por fim, o transponder, que é o principal elemento do circuito de uma etiqueta inteligente, é responsável por receber e retransmitir o sinal recebido de uma leitora. (GLOVER, 2007) Esta tecnologia é apresentada como sucessora do código de barras (VIEHLAND, 2007). A maior limitação da tecnologia de leitura por código de barras foi vencida, pois não é necessário que a leitora esteja alinhada com a etiqueta inteligente. Alguns problemas relacionados a isto serão estudados na sessão “Futuro do RFID”. 16 1.3 Aplicações Inúmeras aplicações podem ser citadas quando se fala de identificação por radiofreqüência. Um dos mais conhecidos exemplos é o carrinho de compras inteligente. Em um carrinho de compras de supermercado é instalada uma leitora RFID e um monitor de cristal líquido. Os produtos devidamente identificados com etiquetas inteligentes são colocados dentro do carrinho de compras e estas etiquetas inteligentes são lidas. Com isso é possível informar em tempo real para o consumidor os produtos que estão na sua cesta de compras, o valor da compra até aquele momento e eventualmente sugerir algum produto que esteja em promoção. Com esta aplicação, a burocracia de um caixa convencional onde uma pessoa é alocada na identificação produto a produto com uma leitora de código de barras foi superada porque a leitura pode ser feita uma única vez dando agilidade ao processo de venda, como exemplificado na figura 2. Figura 2 – Carrinho de compras inteligente dotado de um sistema de identificação por radiofreqüência. Apesar do conflito ético, outra aplicação de RFID que pode ser citada é a de implante de chips em seres humanos e animais. Alguns bares europeus adotaram o sistema de fazer implantes em clientes considerados importantes. A figura 3 ilustra a etiqueta inteligente momentos antes de ser colocada na mão de uma pessoa exatamente na posição onde ficará após a cirurgia. 17 Figura 3 – Implante de RFID em humanos. A etiqueta pode ser utilizada também em animais para diversos propósitos, dentre os quais estão controlar o tempo que cada animal passa em um pasto cercado, detectar fuga e medicações aplicadas. A figura 4 mostra a utilização de etiquetas inteligentes em animais. Figura 4 – Utilização de etiquetas inteligentes em animais. Finalmente, podemos citar a aplicação em estoques para inventário em tempo real. Um protótipo desta ferramenta foi desenvolvido neste trabalho. Atualmente indústrias e lojas despendem recursos para realização de inventário, pois para realizá-lo é necessário interromper movimentações no estoque e alocar recursos humanos para realizar a tarefa. Aplicando a tecnologia de identificação por radiofreqüência, poderíamos ter uma posição do estoque em tempo real sem nenhum custo além do custo de implantação e manutenção da tecnologia. 18 1.4 Padronização A padronização é fundamental para que a tecnologia ganhe escala no mundo. Para que uma cadeia de suprimentos possa ser estabelecida utilizando a tecnologia, seria necessário que todos os parceiros da cadeia utilizassem a mesma padronização (WENG, 2004). Infelizmente existem padrões concorrentes e não há um consenso para que haja um único padrão. Um distribuidor que forneça produtos para duas empresas que adotem padrões distintos terá que produzir com os dois padrões para poder fornecer para ambas as empresas. A padronização dos protocolos e etiquetas inteligentes começou na década de 90. Com o DoD (Department of drugs, do inglês: “Departamento de medicamentos”) dos Estados Unidos e varejistas como Wal-Mart e Tesco exigindo que seus fornecedores implementassem a tecnologia utilizando padrões emergentes houve volume para que os padrões se solidificassem (VIEHLAND, 2007). Padrões para diversos propósitos começaram a emergir, mas apenas dois são relevantes de nota; o EPCIS da EPCGlobal e o ISO/IEC 15961:2004 da ISO. O padrão da EPCIS teve maior aceitação em aplicações de cadeia de suprimento enquanto o padrão da ISO tem sido aplicado para propósitos gerais. A tabela 1 relaciona os diferentes tipos de etiquetas inteligentes. Tabela 1 – Padrões de etiqueta inteligente. (GLOVER, 2007) Identificador SGTIN SSCC GLN GRAI GIAI GID Nome Serial Global de Mercadorias Serial para Contêineres Número Global de Localização Identificador Global de Itens Retornáveis Identificador Global de Item Único Identificador Genérico Uso pretendido Exemplo Rastreamento de itens Pneus individuais Contêineres de envio Um contêiner Localizações Um local estratégico Itens de biblioteca e Um carro de uma aluguel locadora Rastreamento de bens Um computador de um escritório IDs individuais Novos esquemas de identificação 19 O padrão mais difundido é o EPCIS. Desenvolvido pela EPC Global para definir interfaces que tornem possível o compartilhamento de dados entre parceiros de negócios de uma cadeia de suprimentos, conforme citado anteriormente. Este padrão define como sistemas de informática devem interagir com a leitora. O padrão não será objeto de estudo deste trabalho. 1.5 Futuro do RFID “Internet das coisas” é apontada como o futuro da identificação por radiofreqüência. Com a redução do custo das leitoras e etiquetas inteligentes, espera-se que em um futuro não distante todos os objetos sejam identificados, o que possibilitará muitas outras aplicações. Gloover (2007, p. 6) afirma: “Neste período objetos físicos serão conectados à internet através de suas identidades digitais. Da mesma forma que esperamos ser capazes de fazer uma pesquisa rápida pela internet para descobrir a resposta para um a questão obscura de um jogo de perguntas, esperamos ser capazes de passar uma garrafa de refrigerante por um telefone celular e descobrir onde e em que período de tempo específico o refrigerante foi fabricado e, se quisermos, a última localização conhecida de cada outra garrafa desse refrigerante fabricada na mesma hora em uma determinada localização.” (GLOVER, 2007). Entretanto a tecnologia ainda apresenta vários pontos de melhoria dentre eles, alguns serão citados. Anti-Colisão: Ocorre colisão quando os sinais de dois ou mais leitores se sobrepõem. A etiqueta inteligente não é capaz de responder aos dois leitores simultaneamente. 20 (GLOVER, 2007). Aplicações do mundo real lêem várias etiquetas inteligentes ao mesmo tempo. (LEE, 2004). Reengenharia de processos de negócio: O sucesso da tecnologia depende de quão bem ela se adequar aos processos de negócio (HANEBECK, 2004). Hanebeck sugere que ao invés de adequar os processos de negócio atuais da empresa, novos processos sejam definidos, explorando melhor os benefícios do RFID, considerando as limitações que foram vencidas. Por exemplo, se antes era necessário fazer uma leitura do código de barras item a item para dar entrada em estoque, é possível agora dar entrada em todos os itens em uma única leitura. Falta de profissionais qualificados no mercado: Uma pesquisa do CompTIA (Computing Technology Industry Association) apresenta que 80% das empresas que planejam implementar a tecnologia acreditam que não há profissionais suficiente no mercado de RFID (O’CONNOR, 2005). Trata-se de profissionais que estejam realmente capacitados a especificar e executar projetos com a tecnologia. Atualmente a CompTIA fornece programas de capacitação e certificação na tecnologia. Orientação: Apesar da etiqueta inteligente não precisar necessariamente estar na linha de visão da antena, se ela estiver perpendicular em relação à antena, o sinal pode não ser captado pela leitora (WANT, 2004). Desempenho: Leitoras podem falhar na leitura da etiqueta inteligente por várias razões, como por exemplo, o sinal pode ser refletido por estrutura metálica ou meio líquido (JUELS, 2006), pela forma como o produto é manuseado (MICHAEL, 2005), por estar em meio eletromagnético, ou mesmo pelo fato do produto passar rapidamente pela antena (SINGER, 2004). A adoção da tecnologia justificaria modificar a forma como os produtos são embalados, possibilitando a resolução desses problemas (WANT, 2004). Privacidade: Um produto que possua uma etiqueta inteligente com informações sobre o produto, está susceptível ao uso indevido por um indivíduo mal intencionado que capture as informações da etiqueta inteligente. (JUELS, 2006; MICHAEL, 2005). Alcance: Dependendo das condições de ambiente, sistemas de RFID de alta freqüência têm um alcance médio de 11 metros, podendo se estender de acordo com as 21 condições de ambiente (ASIF, 2005). Esta limitação pode inviabilizar a implantação de algumas aplicações, como por exemplo, projetos de inventário em tempo real de baixo custo já que muitas antenas serão necessárias para que o projeto possa ser implantado. Segurança: Pelo fato de ser uma tecnologia sem fio, há riscos de confidencialidade, integridade da informação, garantia de que a informação é fornecida a quem de direito. (JUELS, 2006; RANASINGHE, 2008; SARMA, 2002). Custo: Em 2005 nos Estados Unidos, uma etiqueta inteligente custava de 15 a 75 centavos de dólar o que com o volume pode se tornar montantes significativos e proibitivos à implantação da tecnologia. As leitoras variam no preço de 100 a 2000 dólares (ASIF, 2005). Atualmente uma etiqueta inteligente de baixo custo tem o preço de 5 centavos de dólar. Padronização: O mapeamento de um produto entre parceiros de uma cadeia de suprimentos é fundamental para a adoção da tecnologia (MICHAEL, 2005). A padronização é fundamental para a definição do protocolo, formato da codificação da etiqueta inteligente, estrutura de dados. Atualmente existem padrões que competem no mercado (como ISO e EPCGlobal) o ideal, como vimos, seria que apenas um padrão existisse (WENG, 2004). Integração: Para funcionar corretamente um sistema de etiqueta inteligente deve ser o centro da integração entre as estruturas, equipamentos e sistemas de informação da organização (CLARKE, 2008). No futuro os sistemas de uma organização, de seus fornecedores e de seus clientes estarão integrados o que trará benefícios de planejamento e eficiência (LARSSON, 2004). Segundo Viehland (2007), os três pontos de melhoria mais importantes para os próximos dois anos da tecnologia são (nesta ordem de importância) padronização, custo e integração. 22 2 Metodologia O protótipo de inventário em tempo real desenvolvido neste trabalho foi construído para simular a leitura de todos os itens de um estoque que estão equipados com etiquetas inteligentes previamente cadastradas. A arquitetura proposta para esta solução prevê que seja extensível e poderá ser utilizada da mesma forma que foi concebida em forma de protótipo. Para satisfazer os requisitos não funcionais apontados no parágrafo anterior, a solução técnica foi desenvolvida obedecendo ao padrão MVC (Model-View-Controller do inglês: “Modelo-Visão-Controle”), utilizando o paradigma de programação orientada a objetos, mapeamento objeto relacional e arquitetura modelada em camadas. Para permitir que outras aplicações utilizem o protótipo, foi criada uma camada de serviços e uma biblioteca reutilizável com uma plataforma para tratar exclusivamente da comunicação com leitoras RFID. Finalmente, como plataforma de desenvolvimento foi escolhido o “.Net” Framework. Estes elementos serão melhor detalhados a seguir. 23 2.1 Model View Controller O padrão MVC permite que o sistema esteja dividido de tal forma que seja possível alterar os componentes do software sem que o restante da aplicação sofra impacto. (MICROSOFT, 2008-a). Isso torna o código fonte da aplicação mais fácil de manter e provê baixo acoplamento (REENSKAUG, 2005). O objetivo é separar as regras de negócio da forma como os dados são trazidos de uma camada de persistência de dados, seja ela qual for, e da forma como estes dados são apresentados para o usuário final da aplicação. 2.2 Programação Orientada a Objetos Segundo KÖLLING (2005), a Orientação a Objetos foi uma grande revolução no conceito de desenvolvimento de software no que diz respeito à organização e abstração. A construção de uma aplicação orientada a objetos deve ser feita para permitir fácil manutenção no código, reuso de objetos implementados, alta coesão e baixo acoplamento. 2.3 Mapeamento Objeto Relacional A orientação a objetos trouxe uma nova abordagem mais adequada à forma como os dados são persistidos (KELLER, 2004). Embora a orientação a objetos tenha permitido que a programação estivesse em uma linguagem mais próxima da linguagem humana, o desafio de armazenar estes objetos se tornou um problema. Uma das abordagens para a solução deste problema é o mapeamento objeto relacional. Com o mapeamento objeto relacional, é possível definir a forma que um objeto é armazenado em um banco de dados relacional. A partir desta abstração sobre a persistência, torna-se possível o desenvolvimento de aplicações em camadas (YODER, 1998). 24 2.4 Plataforma “.Net” A plataforma gratuita “.NET” e a IDE (Integrated Development Envirioment, do inglês: “Ambiente de desenvolvimento integrado”) Visual Studio 2005 permitem um desenvolvimento produtivo. A arquitetura é portável, suportando qualquer linguagem implementada sobre a linguagem intermediária que define tipos e operações encontradas na maioria das linguagens. Esta linguagem intermediária é denominada MSIL (Microsoft Intermediate Language, do inglês: “Linguagem Intermediária Microsoft”). Atualmente, aproximadamente 65 linguagens de programação já têm compiladores aderentes às regras da MSIL para dar suporte à plataforma (dentre elas: C#, C++, VB.NET, J#, COBOL, Phyton, Perl, Delphi, Haskel, Smalltalk, Eiffel). A plataforma “.Net” possui ainda um conjunto de classes re-utilizáveis para diversos fins, denominada FCL (Framework Class Library. do inglês: “plataforma comum de biblioteca de classes”). (MICROSOFT, 2008-b) 2.5 Ferramentas Para desenvolver o protótipo de uma aplicação de inventário em tempo real foi utilizada a linguagem de programação C# da plataforma “.Net” da Microsoft, como ambiente de desenvolvimento integrado o Visual Studio 2008 e como sistema de banco de dados o SQL Server 2005 versão Express. Os equipamentos utilizados foram um notebook Vaio VGN-FZ150E, um simulador de leitora com duas antenas, dez etiquetas inteligentes RFID codificadas no padrão SGTIN (Serialized Global Trade Item Number, do inglês: Identificador de Item Global Serializado). O protótipo foi desenvolvido no laboratório da E-NOVAR Soluções Tecnológicas LTDA. 25 2.6 Visão da solução No protótipo, o usuário é capaz de realizar login, cadastrar produto, cadastrar item de produto, realizar inventário e cadastrar leitora conforme diagrama de casos de uso na figura 5. Realizar Login «uses» «uses» Cadastrar Produto «uses» Cadastrar Item de Produto «uses» Usuário Realizar Inventário «uses» Cadastrar Leitora Figura 5 – Diagrama de casos de uso da solução. Os casos de uso são “Realizar Login”, “Cadastrar Produto”, “Cadastrar Item de Produto”, “Realizar Inventário” e “Cadastrar Leitora”. A solução foi desenvolvida utilizando o padrão MVC (Model-View-Controller, do inglês: “Modelo-Visão-Contole). Este padrão separa em três camadas a aplicação. A primeira camada consiste da visão da solução (view). A visão é o meio pelo qual o usuário irá interagir com o sistema. A segunda camada consiste na lógica de negócios da aplicação (controller). Finalmente, a terceira camada trata da persistência da aplicação (model). Outras camadas e bibliotecas serão necessárias para viabilizar o padrão MVC e o desenvolvimento da solução. Chamaremos a camada de apresentação de “WEB”, a camada de negócios de “Business” e a camada de persistência de “DAL”. Na figura 6 se encontra um diagrama com todos os pacotes da solução: 26 «bind» Web «bind» «bind» ServiceHost Service «bind» «bind» «bind» Common «bind» RFIDReaderFramework Business «bind» «bind» DAL Figura 6 – Diagrama de pacotes da solução. Apresenta o relacionamento entre componentes da solução. 2.7 Common O pacote “Common” contém as entidades e as classes utilitárias da solução. O diagrama da figura 7 mostra as entidades que foram definidas para desenvolver a solução. 27 Figura 7 – Diagrama de classes do pacote Common. A classe ProductEntity representa um produto. Para este protótipo, apenas o nome do produto será necessário. A classe ProductItemEntity representa um item de um produto. Para que um item de um produto possa ser cadastrado, é necessário que o produto esteja previamente cadastrado. O usuário faz uma leitura no momento do cadastramento para que seja cadastrada também a etiqueta inteligente que está associada ao produto. A classe UserEntity representa um usuário no sistema. Para realizar login no sistema, é necessário que um usuário esteja previamente cadastrado. Finalmente a classe ReaderEntity representa uma leitora. As leitoras deverão ser cadastradas no sistema para que um inventário possa ser realizado. Para estabelecer comunicação com uma leitora ethernet são necessários o IP da leitora, a porta do serviço, o nome de usuário e a senha. 28 2.8 DAL O pacote “DAL” é a camada responsável pela persistência dos dados da aplicação. O diagrama da figura 8 apresenta as interfaces exportadas por esta camada. Maiores detalhes sobre o diagrama podem ser encontrados no anexo 1. Figura 8 – Interfaces do pacote DAL. Os objetos concretos são criados por uma fábrica abstrata e retornados encapsulados em interfaces para permitir que no futuro o protótipo possa ser estendido e consiga acessar outras fontes de dados que não especificamente a que foi definida na metodologia deste trabalho. As classes concretas e a fábrica abstrata estão representadas na figura 9. Maiores detalhes sobre o diagrama podem ser encontrados no anexo 1. 29 Figura 9 – Classes concretas do pacote DAL. 2.9 Business O pacote “Business” contém as regras de negócio da solução. Assim como a camada “DAL” possui uma interface que encapsula os objetos instanciados pela fábrica abstrata. O objetivo é impedir que os objetos de negócio possam ser instanciados diretamente e permitir que o protótipo possa evoluir para uma aplicação real. A figura 10 apresenta as interfaces de negócio exportadas pela camada de negócio. Maiores detalhes sobre o diagrama podem ser encontrados no anexo 1. 30 Figura 10 – Interfaces do pacote Business. As classes concretas e a fábrica abstrata estão representadas no diagrama da figura 11. Maiores detalhes sobre o diagrama podem ser encontrados no anexo 1. Figura 11 – Classes concretas do pacote Business. 31 2.10 Plataforma de leitura Foi desenvolvida uma plataforma para tratar especificamente da comunicação com a leitora. Esta Plataforma é extensível para suportar outras leitoras, mas para este protótipo admitir-se-á compatibilidade apenas com a leitora definida neste documento. O diagrama da figura 12 mostra como a plataforma foi modelada para ser extensível. As leitoras são instanciadas através da classe ReaderFactory, que implementa o padrão AbstractFactory, enquanto este permite que com uma mesma interface diferentes objetos concretos sejam manipulados. A ReaderFactory instancia o objeto encapsulando-o na interface IReader que exporta os métodos readFirstTag e readTagList. O método readFirstTag retorna a primeira etiqueta inteligente lida pela leitora no formato da classe RFIDTag e o método readTagList retorna uma lista com todas as etiquetas inteligentes que estão sendo lidas pela leitora naquele momento. Estes métodos serão suficientes para o desenvolvimento deste protótipo. Maiores detalhes sobre o diagrama podem ser encontrados no anexo 1. 32 Figura 12 – Diagrama de classes da plataforma. 2.11 Outras camadas e bibliotecas A camada de apresentação (“WEB”) é desenvolvida com a tecnologia ASP.Net. Esta aplicação consome um serviço que é hospedado pelo pacote “ServiceHost”. As bibliotecas de serviço estão definidas no pacote “Service”. 33 Estes serviços utilizam a tecnologia WebService para permitir que qualquer aplicação possa ser escrita futuramente para utilizar os serviços expostos nesta solução visando a interoperabilidade. 34 3 Resultados obtidos Através da revisão bibliográfica deste trabalho foi apresentada a história da tecnologia de identificação por radiofreqüência, alguns desafios atuais para sua aplicação e as diversas perspectivas do futuro da tecnologia. A solução técnica apresentada na metodologia visava a construção de um protótipo funcional que validasse uma arquitetura consistente que pudesse ser utilizada na evolução de um produto final. O protótipo foi construído conforme a arquitetura dividida em camadas apresentada no capítulo referente à metodologia utilizando o ambiente integrado de desenvolvimento Visual Studio 2008 com a linguagem C# da plataforma “.Net”, utilizando o simulador de leitoras RFID conhecido por RIFIDI em sua versão 1.4.2 e utilizando o sistema gerenciador de banco de dados SQL Server 2005 validando a solução técnica apresentada. Apesar de este projeto ter sido desenvolvido utilizando um emulador de leitoras RFID, o protótipo está pronto pra funcionar com a leitora Alien ALR9800, descartando a necessidade do emulador. O emulador citado no parágrafo anterior é um software capaz de reproduzir com fidelidade o protocolo de comunicação da leitora Alien ALR9800 tornando possível a simulação da leitura de etiquetas inteligentes. Através deste software é possível criar leitoras e etiquetas virtuais que podem ser acessadas através do protótipo. 35 A leitora Alien ALR9800 utiliza um protocolo proprietário da Alien de fácil implementação. Foi escolhida neste protótipo pela simplicidade e por ser suficiente para provar o conceito apresentado neste trabalho. Para utilizar o protótipo, primeiramente é necessário cadastrar as leitoras RFID que serão utilizadas, fornecendo ao sistema as informações necessárias para estabelecer conexão com as mesmas. As informações necessárias para esta conexão são: o nome da leitora, seu IP, porta, nome de usuário e senha. A figura 13 mostra a tela de cadastro de leitoras. Figura 13 – Tela de cadastro de leitoras do protótipo. Uma vez que as leitoras estão cadastradas é necessário cadastrar também os produtos que serão monitorados pelo protótipo. Para este protótipo apenas a informação do nome do produto será suficiente uma vez que o propósito deste protótipo é provar conceito. A figura 14 mostra a tela de cadastro de produtos. 36 Figura 14 – Tela de cadastro de produtos. Tendo cadastrados os produtos, será necessário fazer a leitura dos itens de produtos para que o sistema tome conhecimento da existência dos mesmos e possa fazer a associação entre a etiqueta inteligente e o produto. A figura 15 mostra a tela de associação de itens de produtos a produtos. Figura 15 – Tela de associação de itens a produtos. Com as informações cadastradas de leitoras, produtos e itens de produto o protótipo está preparado para realizar o inventário em tempo real. O protótipo mostrará a lista de produtos encontrados, a lista de produtos não encontrados e a lista de etiquetas desconhecidas capturadas pela leitora. A figura 16 mostra a tela do protótipo após a execução do inventário em tempo real. Neste exemplo (meramente ilustrativo), o inventário identificou 2 Paracetamol, 2 37 Valeriane e 2 Ritmoneurin nas prateleiras, percebeu a ausência de 1 Ritmoneurin e 1 Paracetamol e identificou 2 etiquetas inteligentes que não foram associadas a nenhum produto. Figura 16 – Tela de execução do inventário. Em uma farmácia com aproximadamente 100.000 itens de produto o processo de inventário manual completo demora aproximadamente 90 homens-hora. Com este protótipo, o mesmo resultado seria obtido instantaneamente, comprovando a eficácia e a rapidez do protótipo na execução de um inventário. Estas informações foram cedidas por um gerente da farmácia Dose Certa de Fortaleza. 38 4 Conclusão Os resultados obtidos comprovam a viabilidade do desenvolvimento de uma solução em estágio final para realização de inventário em tempo real utilizando RFID e um software com a arquitetura proposta neste trabalho. A tecnologia está sendo desenvolvida no sentido de superar os empecilhos de sua implantação, porém estes não impedem a aplicação da mesma em ambiente de produção. Trata-se de uma plataforma consistente que quando transformada em produto final reduzirá custos e permitirá processos mais eficientes nos diversos seguimentos de mercado que fazem inventário. Para que este protótipo possa ser utilizado como produto final será necessário desenvolver mecanismos para integração com outros sistemas que facilite a implantação da solução. Será necessário também codificar a comunicação com outros protocolos além do protocolo proprietário da Alien para a leitora ALR 9800 para que a solução possa abranger o maior número possível de leitoras. Para garantir a confiabilidade da solução é importante que uma bateria de testes com leitoras reais utilizando várias etiquetas inteligentes seja feita com sucesso. Resultados adversos não estudados neste trabalho podem ser apontados com este tipo de teste. 39 Os próximos passos estão também intimamente ligados à evolução da tecnologia de identificação por radiofreqüência. À medida que os problemas da tecnologia apontados neste documento forem solucionados, novas perspectivas para esta solução podem ser desenvolvidas. 40 REFERÊNCIAS ASIF, Z; Mandviwalla, M. Integrating the supply chain with RFID: A technical and business analysis. Communications of the Association for Information Systems, vol. 15, pp. 393-427, 2005. GLOVER, Bill; BHATT, Himanshu. Fundamentos de RFID: teoria e prática. Rio de Janeiro: Alta Books. 2007. HANEBECK, Hanns-Christian. Processes management and RFID. Disponível em: <http://www.globeranger.com/pdfs/futureoftheedge/ProcessManagementandRFID.pdf>. Acesso em 07 mar. 2008. Publicado em 2004. HARRY, Stockman. Communication by means of reflected power. In Proceedings of the IRE, vol. 36 no.10, pp.1196-204. 1948. JUELS, Ari. RFID security and privacy: A research survey. IEEE Journal on Selected Areas in Communications, vol. 24, no. 2, pp. 381-394. Fevereiro, 2006. LANDT, Heremy. Shrounds of Time The History of RFID. Disponível em: <http://www.transcore.com/pdf/AIM%20shrouds_of_time.pdf>. Acesso em 01 mar. 2008. Publicado em 2001. LEE, Jeongkeun et. al. Analysis of RFID anti-collision algorithms using smart antennas. in Proceedings of the 2nd International Conference on Embedded Network Sensor Systems. pp. 265-266. Baltimore. 2004. MICHAEL, Katiana; MCCATHIE, Luke. The pros and cons of RFID in supply chain management. In proceedings of the 4th International Conference on Mobile Business. pp. 623-629. Sydney, Australia, 2005. O’CONNOR, M. Survey warns of low RFID talent pool. Disponível em: <http://www.rfidjournal.com/article/articleview/1450/1/1/>. Acessado em 08 mar. 2008. publicado em 2005. 41 RANASINGHE C. D.; ENGELS D. W.; COLE P. H. Low-cost RFID systems: Confronting security and privacy. Disponível em: <http://www.m-lab.ch/autoid/SwissReWorkshop/papers/LowCostRFIDConfrontingSecurityAndPrivacy.pdf>. Acesso em 12 abr. 2008. SARMA, S; WEIS, S; ENGELS, D. RFID systems, security and privacy implications. Disponível em: <http://saweis.net/pdfs/ches-rfid.pdf>. Acessado em 15 abr. 2008. Publicado em 2002. SINGER, Tom. Understanding RFID: a pratical guide for supply chain professionals. Disponível em: <http://www.usingrfid.com/features/read.asp?id=17>. Acesso em 09 abr. 2008. VIEHLAND, Dennis; WONG. Aaron. The future of radio frequency identification. Nova Zelândia. 2007. WANT, Roy. The magic of RFID, ACM Queue, vol. 2, no. 7. Outubro, 2004. WENG, J. RFID standardization in China. Disponível em: <http://www.scholarlyexchange.org/journals/journalindex.php?action=dumpfile&binarytable= Articlepdfs&file_id=13&journal_id=18&dumpfile=1>. Acesso em 12 abr. 2008. Publicado em 2004. MICROSOFT. Microsoft Pattern Share, Model View Controler, <Disponível em: http://msdn.microsoft.com/en-us/library/ms998572.aspx >. Acessado em 25 de Agosto de 2008-a. MICROSOFT; MSDN, <Disponível em: http://www.microsoft.com/brasil/msdn>. Acessado em 25 de Agosto de 2008-a. REENKSAUG, Trygve MVC Pattern. Disponível em: <http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/MVC_pattern.pdf> Trygve Reenskaug KÖLLING, Michael; KOCH, Bett; ROSEMBERG, John. Requirements for a first year objectoriented teaching language. In Proceedings of the twenty-sixth SIGCSE technical symposium on Computer science education. pp. 173 - 177.Nashville, Tennessee, United States. 1995. KELLER, Wolfgang, Persistence Options for Object-Oriented Programs. Disponível em: <http://www.objectarchitects.de/ObjectArchitects/events/OOP2004/PersistenceOptionsOOP20 04e.pdf>, Acessado em 28 de Agosto de 2008. YODER, Joseph; JOHNSON, Ralph; WILSON, Quince. Connecting Business Objects to Relational Databases. Disponível em: <http://www.joeyoder.com/Research/objectmappings/Persista.pdf>, Acessado em 28 de Agosto de 2008. CLARKE, Robert. Radio frequency identification: Will it work in your supply chain?. Disponível em <http://www.packmgmt.com/education/msu/clarke.pdf>, Acessado em 21 de setembro de 2008. 42 LARSSON Björn; QVIBERG Ola. Evalution and justification of an RFID implementation. Disponível em <http://www.diva-portal.org/diva/getDocument?urn_nbn_se_liu_diva-27341__fulltext.pdf>, Acessado em 28 de Agosto de 2008. 43 ANEXO I 44 O objetivo deste anexo é detalhar as funções apresentadas nos diagramas mostrados na metodologia deste trabalho. Diagrama de interfaces da camada de acesso a dados. Figura 17 – Interfaces do pacote DAL. A figura acima é um diagrama de classes que apresenta as interfaces exportadas pelo sistema na camada de acesso a dados. Todas as interfaces da camada de dados devem realizar a interface “IDAO” que contém a assinatura dos métodos mais básicos: Insert: Insere um novo objeto no banco de dados. Assim como as demais operações desta interface, o tipo do objeto dependerá da classe concreta que será apresentada no próximo diagrama. Update: Persiste as alterações feitas no objeto na base de dados. Delete: Remove o objeto da base de dados. GetAll: Solicita ao banco de dados todos os objetos do tipo da classe concreta. GetByID: Retorna o objeto filtrando pelo identificador. 45 A interface IProductDAO exporta a assinatura getProductsByName e retorna todos os produtos que possuem o nome especificado na entidade passada por parâmetro. A interface IProductItemDAO exporta a assinatura getByProductName que retorna todos os itens de produto que referenciam um produto com o nome especificado na entidade passada por parâmetro. A interface IUserDAO exporta a assinatura getByUsername que filtra os usuários por um nome de usuário especificado na entidade passada por parâmetro. 46 Diagrama de classes concretas da camada de acesso a dados Figura 18 – Classes concretas do pacote DAL. O diagrama acima apresenta as classes concretas da camada de acesso a dados. As assinaturas exportadas pela classe AbstractSQLDAO, AbstractDAO e DAOFactory. Os métodos exportados pelas classes ReaderDAO, UserDAO, ProductDAO e ProductItemDAO possuem propósito idêntico ao apresentado no capítulo anterior e não serão detalhados. A classe AbstractSQLDAO abstrai a comunicação com o Microsoft SQL Server e provê funções recorrentes em sistemas.. AssignConnection: Associa uma conexão a um SqlCommand. O SqlCommand é a classe da plataforma .Net que representa um comando que pode ser disparado contra um banco de dados. 47 BeginTransaction: Inicia uma transação no objeto de conexão associado ao AbstractSQLDAO. CloseConnection: Fecha uma conexão aberta com o banco dados finalizando abruptamente eventuais transações que não foram terminadas normalmente. CommitTransaction: Quando uma transação é iniciada, todas as operações associadas àquela conexão não são efetivamente aplicadas no banco de dados. Este comando é responsável por efetivar a transação. CreateConnection: Cria uma nova conexão a partir do pool de conxões inicializado no método InitConnectionPool. Init: Cria as instâncias dos membros privados para que o objeto possa ser utilizado. Este método é invocado pelo construtor da classe. InitConnectionPool: Inicializa um pool de conexões baseado nas configurações feitas em arquivo XML. OpenConnection: Abre a conexão da SQLConnection definida para este objeto pela função Init. RollBack: Desfaz a transação corrente perdendo eventuais alterações feitas. UpdateConnectionPool: Lê novamente o arquivo XML para atualizar o pool de conexões. A classe AbstractDAO tem o objetivo abstrair a implementação concreta dos métodos mais recorrentes de acesso a dados. Abaixo o detalhamento de cada um deles. AddParameters: É um método abstrato e que portanto precisa ser sobrescrito na classe que estende esta classe. Tem o objetivo de informar para o SqlCommand os valores dos parâmetros baseado na entidade trafegada para a camada de acesso a dados. É através deste método que é possível informar para o banco de dados os valores de um registro a partir de uma entidade. 48 Delete: Invoca o generic execute passando o commando de excluir um registro no banco de dados. FactoryEntity: É um método abstrato e que portanto precisa ser sobrescrito na classe que extende esta classe. Este método prepara uma entidade a partir de um registro. É através deste método que é possível criar um objeto através de um registro no banco de dados. FactoryEntityList: Fabrica uma lista de entidades a partir de um DataSet. GenericExecute: Executa um método que não precisa retornar resultados. GenericGet: Operação genérica para retornar um registro do banco de dados na forma de objeto. GenericGetList: Operação genérica para retornar uma lista de registro do banco de dados na forma de lista encadeada. GenericGetScalar: Operação genérica para retornar um escalar a partir de uma consulta. GetAll: Retorna todos os registros do banco de dados da classe que extende esta classe na forma de lista encadeada. GetByID: Retorna um objeto do banco de dados filtrado a partir de um identificador único. GetGeneratedID: Retorna o identificador gerado automaticamente após uma inserção. GetNextUniqueIdentifier: Descobre o próximo identificador único do objeto fazendo uma consulta ao banco de dados. Insert: Invoca o genericExecute para incluir um novo registro no banco de dados a partir dos valores informados na entidade passada por parâmetro. Update: Invoca o genericExecute para atualizar os valores de uma entidade no banco de dados. 49 A classe DAOFactory tem o objetivo esconder a construção das classes concretas para permitir que o comportamento de criação possa ser alterado caso necessário. Factory: Fabrica uma classe concreta a partir de uma interface passada por parâmetro. GetInstance: Retorna a única instância da classe. O construtor da classe DAOFactory é privado de forma que só é possível retornar uma instância desta classe através deste método. 50 Diagrama da camada de negócios Figura 19 – Interfaces do pacote Business. Os métodos das interfaces de negócio apresentados no diagrama acima têm bastante similaridade com os métodos da classe de acesso a dados. A diferença é no comportamento, pois nesta camada estão codificadas as regras de negócio da aplicação. Figura 20 – Classes concretas do pacote Business. 51 O diagrama acima mostra as classes concretas da camada de negócio. A classe abstrata AbstractBusiness contém implementações comuns a todas as classes de negócio. Delete: Implementação genérica para a operação de exclusão de uma entidade. Deve ser sobrescrito para que as regras de negócio específicas sejam codificadas. GetAll: Implementação genérica para a operação de selecionar todas as entidades cadastradas na base de dados. Deve ser sobrescrito para que as regras de negócio específicas sejam codificadas. GetByID: Implementação generic para a operação de selecionar uma única entidade filtrada pelo identificador da mesma. Deve ser sobrescrito para que as regras de negócio específicas sejam codificadas. GetDAO: Este método abstrato deve ser sobrescrito para permitir as implementações genéricas detalhadas aqui. A classe concreta que implementa esta classe abstrata tratará da construção da classe de acesso a dados que será utilizada pelos métodos genéricos. Insert: Implementação genérica para a operação de incluir uma nova entidade. Deve ser sobrescrito para que as regras de negócio específicas sejam codificadas. Update: Implementação genérica para a operação de atualizar uma entidade. Deve ser sobrescrito para que as regras de negócio específicas sejam codificadas. A classe BusinessFactory tem o objetivo esconder a construção das classes concretas para permitir que o comportamento de criação possa ser alterado caso necessário. Factory: Cria uma nova instância da classe concreta encapsulada na interface passada por parâmetro. GetInstance: Retorna a única instância da classe BusinessFactory. A classe UserBusiness contém as regras de negócio específicas da entidade usuário. 52 GetByUsername: Retorna o usuário passado cujo nome de usuário coincida com a propriedade username da entidade passada por parâmetro. GetDAO: Cria uma instância da classe UserDAO que será utilizada pela classe abstrata nos métodos genéricos. Insert: Sobrescreve o comportamento da classe abstrata para implementar as regras de negócio específicas da inserção de um usuário. Update: Sobrescreve o comportamento da classe abstrata para implementar as regras de negócio específicas da atualização de um usuário. A classe ProductBusiness contém as regras de negócio específicas da entidade produto. GetDAO: Cria uma instância da classe ProductDAO que será utilizada pela classe abstrata nos métodos genéricos. GetProductByName: Retorna uma lista de produtos cujo nome de usuário se aproxime com a propriedade Name da entidade passada por parâmetro. Insert: Sobrescreve o comportamento da classe abstrata para implementar as regras de negócio específicas da inserção de um produto. Update: Sobrescreve o comportamento da classe abstrata para implementar as regras de negócio específicas da atualização de um produto. A classe ProductItemBusiness contém as regras de negócio específicas da entidade item de produto. GetDAO: Cria uma instância da classe ProductItemDAO que será utilizada pela classe abstrata nos métodos genéricos. GetByProductName: Retorna uma lista de itens de produto filtrados pelo nome do produto. 53 A classe ReaderBusiness contém as regras de negócio específicas da entidade leitora. A entidade leitora representa uma leitora RFID. GetDAO: Cria uma instância da classe ReaderDAO que será utilizada pela classe abstrata nos métodos genéricos. GetReaderByName: Retorna a leitora cadastrada que contenha o mesmo nome da entidade passada por parâmetro. 54 Diagrama de classes da camada de comunicação com RFID Figura 21 – Diagrama de classes da plataforma. O diagrama acima apresenta o conjunto de classes que compoem a camada de comunicação com as leitoras RFID. A classe abstrata AbstractReader deve ser extendida por classes abstratas que implementem um meio de comunicação. A plataforma já implementa comunicação ethernet TCP/IP. 55 UseAuthentication: Especifica se a leitora usa autenticação antes de trocar informações. Password: Se a leitora utilizar autenticação, esta propriedade representará o password que deverá ser enviado para a leitora no momento da autenticação. UserName: Se a leitora utilizar autenticação, esta propriedade representará o nome de usuário que deverá ser enviado para a leitora no momento da autenticação. Connect: Este método abstrato tem o propósito de estabelecer comunicação com uma leitora. Disconnect: Este método abstrato tem o objetivo de finalizar a comunicação com uma leitora. A classe abstrata AbstractEthernetReader deve ser extendida para implementar o protocolo de uma leitora ethernet compatível com a plataforma. Door: Propriedade que especifica a porta da leitora em uma rede ethernet. IP: IP da leitora em uma rede ethernet. A classe RFIDTag representa uma tag RFID. A leitora envia os dados para a plataforma que cria instâncias desta classe para retornar para a aplicação. Antena: Número da antena que encontrou a tag. Count: Contagem da tag na lista de tags que estão no pool de leitura da leitora. Discovery: Data e hora que a tag foi descoberta. Last: Data e hora da última identificação da tag. Tag: Valor bruto lido do protocolo. TagGen: Geração da tag. A classe Alien é uma classe concreta que implementa o protocolo de comunicação proprietário da Alien ALR-9800. 56 Connect: Estabelece a conexão com uma leitora ALR-9800. Disconnect: Finaliza a conexão com uma leitora ALR-9800. GetTag: Cria uma tag a partir do dado bruto lido. GetTags: Cria uma lista de tags a partir do dado bruto lido. Read: Lê o pool de dados da leitora. ReadFirstTag: Retorna a primeira tag da lista de tags coletadas pela leitora. ReadTagList: Retorna a lista de tags coletadas pela leitora. Send: Envia uma mensagem para a leitora. A interface IReader possui propriedades e métodos que devem ser implementados por todas as classes de leitora RFID. UseAuthentication: Especifica se a leitora usa autenticação antes de trocar informações. Password: Se a leitora utilizar autenticação, esta propriedade representará o password que deverá ser enviado para a leitora no momento da autenticação. UserName: Se a leitora utilizar autenticação, esta propriedade representará o nome de usuário que deverá ser enviado para a leitora no momento da autenticação. Connect: Este método abstrato tem o propósito de estabelecer comunicação com uma leitora. Disconnect: Este método abstrato tem o objetivo de finalizar a comunicação com uma leitora. A classe ReaderFactory tem o objetivo esconder a construção das classes concretas para permitir que o comportamento de criação possa ser alterado caso necessário. Factory: Cria uma nova instância da classe concreta encapsulada na interface passada por parâmetro. 57 GetInstance: Retorna a única instância da classe ReaderFactory. 58