UNICENP – CENTRO UNIVERSITÁRIO POSITIVO NÚCLEO DE CIÊNCIAS EXATAS E DE TECNOLOGIAS CURSO DE ENGENHARIA DA COMPUTAÇÃO PROJETO FINAL CONTROLE PROGRAMADO DE DISPOSITIVOS VIA INTERNET COM COMUNICAÇÃO LOCAL VIA REDE ELÉTRICA Autor: Joarez Baumeier Prof. Orientador: Laerte Davi Cleto Curitiba 2003 1 SUMÁRIO LISTA DE FIGURAS .......................................................................................................iii LISTA DE ABREVIATURAS .......................................................................................... iv 1 INTRODUÇÃO ...........................................................................................................5 2 ESPECIFICAÇÃO.......................................................................................................7 2.1 DESCRIÇÃO ........................................................................................................7 2.2 ESTUDO TEÓRICO .............................................................................................8 2.2.1 ASP – Active Server Pages..............................................................................9 2.2.2 SGBD – Sistema Gerenciador de Banco de Dados ..........................................9 2.2.3 Linguagem C................................................................................................. 10 2.2.4 Filtro Passa Alta ............................................................................................ 10 2.2.5 CI 555 ........................................................................................................... 11 2.2.6 CI LM567 ..................................................................................................... 13 2.2.7 Rede de Distribuição de Energia Elétrica....................................................... 13 2.3 ESPECIFICAÇÃO DO SOFTWARE .................................................................. 14 2.3.1 Descrição da Aplicação Internet.................................................................... 14 2.3.2 Programa de Conexão Local.......................................................................... 15 2.4 ESPECIFICAÇÃO DE HARDWARE ................................................................. 16 2.4.1 Descrição dos Circuitos................................................................................. 17 2.4.1.1 Circuito Emissor ........................................................................................ 17 2.4.1.2 Circuito Receptor....................................................................................... 18 3 PROJETO.................................................................................................................. 19 3.1 DIAGRAMA DE FLUXO DE DADOS............................................................... 19 3.2 APLICAÇÃO ASP .............................................................................................. 21 3.3 BANCO DE DADOS .......................................................................................... 23 3.4 CIRCUITO EMISSOR ........................................................................................ 25 3.5 CIRCUITO RECEPTOR ..................................................................................... 27 3.6 CRONOGRAMA DO PROJETO ........................................................................ 29 3.7 VALIDAÇÃO DO PROJETO ............................................................................. 30 i 3.8 CONSIDERAÇÕES FINAIS............................................................................... 31 4 REFERÊNCIAS BIBLIOGRAFICAS........................................................................ 33 5 ANEXOS................................................................................................................... 35 Anexo 1 – Interfaces das Páginas ASP.............................................................................. 36 Anexo 2 – Listagem do Código Fonte das Páginas ASP.................................................... 42 Anexo 3 – Listagem do Código Fonte do Programa C ...................................................... 54 ii LISTA DE FIGURAS Figura 1. Diagrama de blocos de funcionamento do projeto...............................................8 Figura 2. Pinagem e diagrama do CI 555. ........................................................................ 12 Figura 3. Configuração astável do 555............................................................................. 12 Figura 4. Esquema da aplicação Internet.......................................................................... 15 Figura 5. Diagrama de bloco dos circuitos de hardware.................................................. 17 Figura 6. Diagrama de fluxo de dados – Nível 0. ............................................................. 20 Figura 7. Diagrama de fluxo de dados – Nível 1. ............................................................. 21 Figura 8. Esquemático da estrutura lógica do banco de dados do sistema. ........................ 23 Figura 9. Circuito emissor. .............................................................................................. 25 Figura 10. Circuito receptor............................................................................................. 28 iii LISTA DE ABREVIATURAS ASP - Active Server Pages CI - Circuito Integrado DFD – Diagrama de Fluxo de Dados HTML - HyperText Markup Language ODBC – Open Database Connectivity SGBD - Sistema Gerenciador de Banco de Dados SQL - Structured Query Language iv 1 INTRODUÇÃO Dentre os vários avanços que a informática tem propiciado, um tema que tem crescente desenvolvimento está relacionado com a Internet e sua utilização prática no acesso e controle de dispositivos domésticos. O projeto a ser apresentado visa apresentar um sistema onde a Engenharia da Computação está presente no software a ser desenvolvido, na teleinformática e sistemas distribuídos pela utilização da Web e no hardware que fará a interação da rede elétrica com os dispositivos eletrônicos. O projeto possui um grande potencial para sua utilização no cotidiano da vida moderna visto que pretende dar ao usuário do sistema a possibilidade de interagir com algum equipamento que pode estar virtualmente do lado oposto do planeta utilizando para isto o meio altamente difundido da Internet. O desenvolvimento do sistema utilizando a Internet e página dinâmica dá a oportunidade de implementar o projeto com um componente poderoso de agregação comercial pois torna o sistema amigável ao usuário comum e pode suprir necessidades com este nível de interação. A utilização da rede elétrica residencial para a comunicação de dados é um diferencial significativo do projeto, com grande potencial de crescimento devido a fatores como a existência da rede elétrica em todas as residências, a simplicidade de conexão com todos os cômodos e a economia no custo de instalação dos cabos de rede, que deixam de existir. A aplicação deste sistema tem sua utilização focada em qualquer equipamento elétrico ou eletrônico que possa ter conexão com a rede elétrica da residência, tais como alarmes, lâmpadas, aquecedores, ar condicionado, exaustores, sistema de calefação, televisores, computadores, telefones, etc., evidenciando mais este fator de utilização do sistema. 5 Este projeto representa o passo inicial para a utilização de uma tecnologia que vem sendo pesquisada por empresas de porte como Adaptive Networks, Enekia, Inari e Intellon entre outras [1]. 6 2 ESPECIFICAÇÃO Nesta etapa do projeto será apresentada a especificação do projeto do controle programado de dispositivos via Internet com comunicação local via rede elétrica, que compreende a descrição da dinâmica de funcionamento do sistema, a tecnologia de software e de hardware a ser empregada e a definição dos blocos funcionais envolvidos. 2.1 DESCRIÇÃO O projeto pode ser visualizado em duas partes principais distintas em termos de tecnologia, que são, o desenvolvimento de um sistema de comunicação utilizando a rede elétrica local considerando a rede elétrica local como sendo uma rede elétrica de 110 V e o desenvolvimento de uma aplicação Internet onde o usuário é capaz de controlar os dispositivos de seu ambiente local estando conectado em qualquer lugar na rede mundial. Estas duas interfaces do projeto podem até mesmo operar de forma independente, ou seja, os dispositivos podem ser controlados localmente sem que o acesso seja via Internet, adaptando-se o programa em C para este fim. O sistema Internet, por sua vez, pode ser utilizado para se comunicar com uma interface de comunicação via rádio, por exemplo. O sistema consiste em uma aplicação Internet desenvolvida em código ASP (Active Server Pages ) que tem acesso um banco de dados implementado em Access, ambos hospedadas em um servidor, e um sistema que envolve a comunicação de um computador local com um acoplamento a rede elétrica e dispositivos de recepção responsáveis pelo acionamento direto dos equipamentos com que se pretende interagir, conforme apresentado na Figura 1. O usuário se conecta a Internet, executa o login, recebe uma página de visualização do status atual dos dispositivos e campos para atualização. No caso de atualização, as informações são gravadas no banco de dados. O computador local deve estar constantemente ligado com a respectiva aplicação em execução. O computador local faz uma verificação constante nas informações do banco de dados do servidor, caso algum 7 dispositivo deva sofrer alguma operação, o computador se comunica com a interface de acoplamento à rede elétrica que acessa o dispositivo correspondente no local e executa a operação de ligar ou desligar o dispositivo. Usuário Computador - Acoplamento - Dispositivos Access - ASP Internet Aplicação Internet Comunicação via rede elétrica Figura 1. Diagrama de blocos de funcionamento do projeto. 2.2 ESTUDO TEÓRICO Nesta etapa são descritos os conceitos teóricos necessários para que se obtenha o domínio das tecnologias que serão utilizadas neste projeto. Para o desenvolvimento do sistema relacionado à Internet o foco da pesquisa se concentra em desenvolvimento de páginas dinâmicas com acesso a banco de dados, sendo que grande parte do material inicial de consulta pode ser encontrado em sites relacionados ao assunto. Foram obtidas apostilas e consultados tutoriais on line, que forneceram o material necessário para o desenvolvimento do código ASP. Quanto a comunicação de dados via rede elétrica também foram pesquisados sites sobre o assunto, especialmente para determinar a tecnologia necessária para o desenvolvimento dos circuitos de comunicação. 8 Foram analisados datasheets dos componentes a serem utilizados e livros de eletrônica que auxiliam na configuração e cálculos necessários para estas configurações do projeto. Entidades e empresas que estão desenvolvendo algum sistema relacionado a comunicação de dados via rede elétrica foram pesquisados para minimizar erros de escolha de tecnologia e facilitar o desenvolvimento do projeto. 2.2.1 ASP – Active Server Pages O ASP é um ambiente de programação por scripts que rodam em servidor que tenham o sistema operacional Windows com a solução mínima de acesso a Internet, Microsoft Internet Information Server versão 3.0 no Windows NT Server, Microsoft Peer Web Services versão 3.0 no Windows NT Workstation e Microsoft Personal Web Server no Windows 95 ou Windows 98 [15]. O ASP é usado para criar páginas dinâmicas, interativas e de alto desempenho. Como as páginas ASP, os scripts rodam no servidor e não no cliente. É o próprio servidor que transforma os scripts em HTML padrão, fazendo com que qualquer browser do mercado seja capaz de acessar um site que usa ASP. 2.2.2 SGBD – Sistema Gerenciador de Banco de Dados Um banco de dados pode ser criado e mantido por um conjunto de aplicações desenvolvidas especialmente para esta tarefa ou por um SGBD. Um SGBD permite a criação e manipulação de bancos de dados de propósito geral. O conjunto formado por um banco de dados mais as aplicações que manipulam o mesmo é chamado de Sistema de Banco de Dados [18]. Um SGBD é uma coleção de programas que permitem ao usuário definir, construir e manipular Bases de Dados para as mais diversas finalidades. 9 Neste projeto o sistema de armazenamento de dados pode ser escolhido entre os diversos disponíveis no mercado que tenham compatibilidade com a linguagem SQL, já que os programas em ASP possuem tal linguagem implementada para acesso ao banco de dados. 2.2.3 Linguagem C O C é uma linguagem de programação genérica de nível médio que é utilizada para desenvolvimento de programas em diversas áreas e atividades, como por exemplo, computacional: criação de navegadores, planilhas, processadores de texto, calculadora, etc.; comercial: folha de pagamento, cadastro de pessoas e coisas, controle de vendas, etc.; e na solução de problemas nos mais diversos campos do conhecimento como química, física, matemática, etc [19]. Neste projeto a linguagem C é utilizada para manipulação de arquivos e para comunicação com a porta paralela, tarefas que são executadas com uma implementação totalmente compatível com o compilador escolhido, no caso o Borland C++ Builder. 2.2.4 Filtro Passa Alta Filtros são circuitos que permitem a passagem de sinais para uma faixa de freqüência. Dentro dos filtros passivos, encontramos o filtro passa-baixa e o filtro passa-alta. Para ondas senoidais, de freqüências altas, a reatância capacitiva assume valores baixos em comparação com o valor da resistência, dessa maneira a tensão de saída será praticamente igual a tensão de entrada. Para freqüências baixas, a reatância capacitiva assume valores altos em comparação com o valor da resistência, atenuando a tensão de saída para um valor praticamente nulo. Dessa maneira, o filtro permite a passagem de sinais de freqüências altas, sendo por isso denominado filtro passa-alta [20]. 10 O filtro passa alta é utilizado no projeto para fazer o acoplamento entre os circuitos emissor e receptor com a rede elétrica local pois a tensão com que operam os circuitos do projeto são da ordem de 5V. Como serão emitidas freqüências acima de 1 kHz sobre a rede elétrica, que opera em 60 Hz, o filtro evita uma sobrecarga sobre os circuitos. 2.2.5 CI 555 O 555 é um circuito integrado composto de um Flip-Flop do tipo RS, dois comparadores simples e um transistor de descarga. Projetado para aplicações gerais de temporização, este integrado é de fácil aquisição no mercado especializado de eletrônica [21]. Ele é tão versátil e possui tantas aplicações que se tornou um padrão industrial, podendo trabalhar em dois modos de operação: monoestável (possui um estado estável) e astável (não possui estado estável). Sua tensão de alimentação situa-se entre 5 e 18v, o que o torna compatível com a família TTL de circuitos integrados e ideal para aplicações em circuitos alimentados por baterias. A saída deste C.I. pode fornecer ou drenar correntes de até 200mA ou 0,2A, podendo assim comandar diretamente relês, lâmpadas e outros tipos de carga relativamente grandes [21]. Na figura 2 são mostrados os pinos e o diagrama simplificado do CI 555. 11 Figura 2. Pinagem e diagrama do CI 555. Neste projeto, o 555 é utilizado como oscilador operando em modo astável , isto é a saída ficará variando entre estados alto e baixo numa freqüência que será determinada pela configuração da rede RC como pode ser visto na figura 3. Figura 3. Configuração astável do 555. 12 A freqüência de operação é calculada por: f = 1 / T = 1,44 / (RA + 2RB) x C1. 2.2.6 CI LM567 O CI LM567 é um decodificador de tom de finalidade geral, projetado para atuar como um interruptor de saturação do transistor quando um sinal de entrada está atuando dentro da banda-passante. O circuito consiste em um detetor de entrada e de uma saída controlada por um oscilador com tensão controlada, que determina o centro de freqüência do decodificador. Os componentes externos são usados para ajustar o centro da freqüência independentemente da largura de faixa e do atraso da saída [13]. Ou seja, CI LM567 é um circuito detetor de tom capaz de detectar uma certa freqüência injetada em sua entrada. A fórmula para se detectar freqüência desejada é dada por: FINPUT = 1 / 2,8 x Rt x Ct. 2.2.7 Rede de Distribuição de Energia Elétrica As redes de distribuição foram inicialmente projetadas para transmitir energia elétrica de forma eficiente, assim estas não são adaptadas para fins de comunicação, fazendo com que seja necessário o emprego de técnicas avançadas. Devido as características especiais da rede de distribuição como canal de comunicação, investigações profundas e detalhadas deverão ser feitas para garantir a utilização da mesma de forma eficiente para fins de comunicação de dados [2]. As redes elétricas são usualmente classificadas em três níveis: • Alta Tensão - Utilizado para interligar os centros de geração aos centros de consumo, geralmente percorrendo grandes distâncias, este nível de tensão é marcado principalmente pelas perdas por efeito Joule, pelas descargas oriundas do efeito corona (que também introduzem componentes de alta freqüência na rede) e por capacitâncias e indutâncias parasitas. 13 • Média Tensão - Responsáveis pela interligação das subestações com os centros distribuídos de consumo, este nível de tensão pode também ser utilizado no fornecimento de energia elétrica a consumidores de maior porte como indústrias ou prédios. • Baixa Tensão - Este é o nível de tensão que efetivamente chega a maioria das unidades consumidoras derivando do secundário do transformador de redução. A natureza dinâmica com que as cargas são inseridas e removidas da rede, as emissões conduzidas provenientes dos equipamentos e as interferências de diferentes naturezas fazem deste ambiente o mais hostil, para a transmissão de sinais, dentre os três níveis de tensão apresentados. 2.3 ESPECIFICAÇÃO DO SOFTWARE Neste item estão definidos as ferramentas de software necessárias para o desenvolvimento e implementação do projeto, bem como uma breve descrição de cada uma destas ferramentas. Estão incluídas neste item o funcionamento das interfaces de software, onde tem-se a descrição da aplicação Internet e os programas necessários para sua implementação. 2.3.1 Descrição da Aplicação Internet A aplicação Internet tem como função principal dar ao usuário um alto grau de interação com os dispositivos eletrônicos de sua residência conectados ao sistema. Isto faz com que a utilização do sistema tenha bastante flexibilidade e uma facilidade de acesso muito simples no modo de operação pelo usuário. O sistema de conexão com a Internet utilizará um servidor onde estarão rodando um programa em ASP para atualização dinâmica das páginas e um sistema gerenciador de 14 banco de dados - SGBD, o Microsoft Access que armazenará todas as informações dos clientes cadastrados bem como as informações referentes aos dispositivos das residências. Na Figura 4 pode-se observar o esquema de funcionamento da aplicação Internet. Figura 4. Esquema da aplicação Internet. Para utilização do sistema o usuário deverá se conectar com a Internet e acessar a página de login do sistema, onde entrará com o nome e a senha de acesso. Desta forma terá acesso à página onde são visualizados os dispositivos com seus status atuais e ainda os campos relativos a atualização desejada, ou seja, data, hora e operação de liga ou desliga dispositivo. Esses parâmetros serão enviados para o servidor que atualizará o banco de dados do usuário. O computador na residência do usuário deve permanecer constantemente conectado a Internet, requisita a página inicial do sistema para efetuar a confirmação de nome e senha do usuário, para que possa entrar na página onde estarão atualizados os parâmetros de cada dispositivo, esta página será sistematicamente atualizada pelo programa para que tenha os parâmetros para os dispositivos sempre atualizados. 2.3.2 Programa de Conexão Local O programa de atualização e conexão local será ser desenvolvido em linguagem C e terá a função de fazer a conexão do computador com o circuito de comunicação via rede 15 elétrica pela porta paralela e a manipulação do cookie gerado pela página de refresh local, de forma a extrair a data, a hora, o dispositivo e a operação à ser executada. O Cookie é um arquivo pequeno, normalmente menor que 1Kbyte, que freqüentemente inclui um identificador único, que é enviado para o browser através de uma página da Internet e armazenado no disco rígido. 2.4 ESPECIFICAÇÃO DE HARDWARE Neste tópico são especificados os componentes de hardware que compõe o projeto. Estes componentes estão definidos em forma de módulos de acordo com a função específica de cada módulo, representado na Figura 5. Quando da ativação do sistema de hardware, o computador envia um conjunto de dados para o circuito emissor, que é composto por um módulo seletor, que habilita a chave responsável pela conexão com o oscilador, este por sua vez, envia a freqüência especificada para o acoplador, que se encarrega de transmitir este sinal pela rede elétrica. Na rede elétrica estão conectados os dispositivos que recebem a freqüência e executam a operação de liga/desliga dos equipamentos a eles conectados, os módulos que o compõe são: o filtro, que recebe o sinal da rede elétrica e retira a freqüência de interesse; o detetor de tom, que identifica se a freqüência é direcionada para determinado dispositivo; e o interruptor, que é a chave de liga/desliga que fará o acionamento ou desligamento do equipamento. 16 Rede Elétrica Local Seletor Oscilador Acoplador Filtro Detetor de Tom Interruptor Computador Equipamento Circuito Emissor Circuito Receptor Figura 5. Diagrama de bloco dos circuitos de hardware. 2.4.1 Descrição dos Circuitos Os circuitos que compõe o projeto são descritos neste tópico do projeto, onde são apresentadas as características físicas e funcional básicas do circuito emissor e do circuito receptor. 2.4.1.1 Circuito Emissor O circuito emissor é composto de três blocos funcionais distintos, o bloco seletor, bloco oscilador e bloco acoplador. - Bloco Seletor – O computador se comunica inicialmente com este bloco através da porta paralela. É constituído de resistores, que determinam a freqüência de operação do CI 555. - Bloco Oscilador – O componente principal é o CI 555, possui as várias configurações de entrada necessárias para distinguir os dispositivos de acordo com a freqüência selecionada. Estas configurações são acessadas pela bloco seletor. 17 - Bloco Acoplador – Responsável por enviar a freqüência selecionada para a rede elétrica. É necessário devido ao fato de que a tensão de saída do computador é em torno de 5V e a tensão da rede, aproximadamente 127V. O circuito é constituído de um filtro passa alta que evita que a tensão da rede elétrica danifique o circuito de baixa potência. 2.4.1.2 Circuito Receptor O circuito receptor é composto por três blocos funcionais distintos: filtro, detetor de tom e interruptor, descritos a seguir. - Filtro – O filtro recupera a freqüência enviada pelo emissor. É a implementação de um filtro passa alta que exclui a freqüência da rede elétrica de forma que a freqüência que passa pelo filtro possa ser identificada pelo bloco detetor de tom. - Detetor de Tom – O detetor de tom tem como característica o reconhecimento de determinada freqüência, que é configurada por componentes passivos externos. Cada dispositivo terá um circuito detetor de tom configurado de acordo com a freqüência que for selecionada no bloco seletor do circuito emissor. - Interruptor – O interruptor é a chave de liga e desliga do dispositivo relacionada ao equipamento. Possui um acoplamento do tipo relê que isola a baixa tensão dos blocos funcionais da rede elétrica. 18 3 PROJETO Neste capitulo são descritas em detalhes todas as etapas para a implementação do projeto, levando em conta os tópicos descritos na etapa anterior do projeto. 3.1 DIAGRAMA DE FLUXO DE DADOS O diagrama de fluxo de dados descreve o fluxo de informações e as transformações que são aplicadas à medida que os dados se movimentam da entrada para a saída do sistema. É a representação gráfica da descrição lógica do projeto, onde são apresentados os procedimentos e operações propostos, de forma a permitir uma visualização global do funcionamento do sistema. Na Figura 6, a seguir, é apresentado o DFD de nível zero que apresenta em um único núcleo todas as ações do sistema, de forma resumida, bem como as entidades externas envolvidas, a partir de onde é feita uma expansão que origina o DFD de nível um, apresentado na Figura 7, com um, grau maior de detalhamento das operações do sistema. Com este nível de explosão do diagrama de fluxo de dados já se observa toda a seqüência de operações e entidades externas envolvidas, bem como o banco de dados, que vem a ser um dos principais depósitos do sistema. 19 Usuário Acesso-Local Logon e senha Consultar dados Usuário Acesso-Remoto Logon e senha Atualizar dados Consultar dados Sistema de Controle Programado de Dispositivos Data e Hora Acionar porta paralela Sistema Operacional Circuito Emissor Figura 6. Diagrama de fluxo de dados – Nível 0. 20 Usuário Acesso-Remoto Usuário Senha Efetuar Logon Usuário Acesso-Local Usuário Senha Efetuar Logon Valida usuário Retorna status Envia dados Data Hora Comparar Dados Porta Pino Valida usuário Atualizar Dados Atualizar Dados Sistema Operacional Cookie Retorna status Banco Dados Acionar Porta Paralela Envia bit Circuito Emissor Figura 7. Diagrama de fluxo de dados – Nível 1. 3.2 APLICAÇÃO ASP A aplicação ASP é constituída das páginas que fazem a interação do usuário com o sistema, ou seja, possui as interfaces necessárias para a comunicação com os equipamentos que deseja interagir, estas podem ser vistas no Anexo 1. 21 A aplicação ASP possibilita ao usuário fazer inicialmente o seu login no sistema, isto é necessário para que um determinado usuário acesse exclusivamente as informações a ele pertinentes, este é um fator de segurança importante para acesso ao sistema. Esta página é denominada de “acesso_p.asp”, tem a função de armazenar as variáveis referentes ao nome e senha do usuário, estes dados serão utilizados para acesso ao restante do sistema. Caso o usuário ou senha não estejam corretos será apresentada uma página de erro, denominada “pag_erro.asp”, que retorna para a página de login automaticamente após alguns segundos . Logo após o login é apresentada a tela onde é mostrado o status dos dispositivos, tais como: data, hora e operação a ser executada. Nesta página é feita a atualização dos dados relativos aos dispositivos. No anexo referente às interfaces ASP, observa-se a disposição dos dados relativos ao status e, logo abaixo deste, os campos que devem ser preenchidos para a atualização dos dados desta página que é denominada “valida_p.asp”. Esta página recebe os dados da página de login e os valida através de uma conexão com o banco de dados, em seguida os campos atualizados recebem uma instrução SQL que executa a instrução de atualização. No local onde está a placa de recepção e emissão de dados, um computador deve estar permanentemente conectado com a Internet e, inicialmente, é executado um login com o sistema para se determinar o usuário do sistema e proceder a autenticação do mesmo. A interface desta página, denominada “acesso_local.asp” é equivalente a página de acesso do usuário descrita anteriormente, conta inclusive com a verificação de usuário e senha, caso algo não esteja correto é enviada a página de erro equivalente a “pag_erro.asp” que neste caso é denominada de “erro_local.asp”. Para que o sistema local possa realizar a constante verificação dos dados no servidor é necessário que a sessão do cliente permaneça ativa à cada atualização realizada pela página de refresh. Esta sessão do usuário é especificada na página denominada “session_local.asp” que mantém os dados do usuário que acessou o sistema. 22 Logo depois de executado a sessão no ambiente local, a página que é requisitada é a “refresh_local.asp”, que recebe os dados atualizados do banco de dados, relativos ao cliente, e executa uma atualização a cada 30 segundos. Esta página tem o formato semelhante a página “valida_p.asp”, vista anteriormente, no entanto sem os campos de atualização, apresenta somente o status dos dispositivos. 3.3 BANCO DE DADOS O banco de dados implementado tem a finalidade de armazenar informações relativas ao usuário, e aos dispositivos que atuam no sistema, recebendo e enviando informações para as páginas dinâmicas desenvolvidas em ASP. Na Figura 8 pode-se observar como está implementado o banco de dados em seu nível lógico e de inter-relacionamentos. Figura 8. Esquemático da estrutura lógica do banco de dados do sistema. O banco de dados, implementado em access, possui uma estrutura bastante simples, mas que abrange plenamente as necessidades do sistema. É constituído por três tabelas: Tab_Dispositivos, Tab_Programa e Tab_Usuario, na Tabela1 pode-se observar cada tabela do banco com o nome de cada campo, tipo de dados e, no lado esquerdo da tabela, os caracteres CH significam chave primária. 23 A implementação do banco de dados faz a consistência dos dados à serem incluídos, bem como assegura uma única operação para um determinado dispositivo em determinado horário. Desta forma o funcionamento do projeto como um todo ganha maior confiabilidade quanto a interação com os dispositivos relacionados. Tab_Dispositivo Nome do Campo CH Dispositivo Tipo de Dados Texto Tab_Programa Nome do Campo Tipo de Dados CH Nome Texto CH Dispositivo Texto CH Data Data/Hora CH Hora Data/Hora Operação Texto Tab_Programa Nome do Campo Tipo de Dados CH Nome_Usuario Texto Senha_Usuario Texto Tabela 1. Tabelas do banco de dados com campos. 24 3.4 CIRCUITO EMISSOR O circuito emissor, mostrado na Figura 9 é conectado à porta paralela do computador por onde são enviados os pulsos necessários para a ativação da freqüência do dispositivo envolvido em determinada operação (ligar ou desligar). Este sinal é enviado especificamente para um dos resistores, R1a ou R1b, com valores distintos, isto faz com que o CI 555 oscile em diferentes freqüências. A freqüência selecionada é levado à transistor de potência que fornece o sinal final para aplicação na rede elétrica. Este acoplamento é feito através de duas enroladas com fio de cobre esmaltado em um bastão de ferrite de 0,6 cm de diâmetro e de 10 cm de comprimento e de dois capacitores de poliéster com tensão de isolamento de 400 V. L1 é formada por 80 voltas de fio no bastão e L2 por 240 voltas, o que possibilita um aumento na tensão de saída da bobina. Este conjunto, bobinas e capacitores, fazem a filtragem do sinal de baixa freqüência da rede elétrica, evitando uma sobrecarga no sistema que opera com tensão de 6 volts de corrente contínua. J4 VCC J1 R1a C4 L1 1 J5 1 2 1 ent1 J2 R1b L2 1 C3 Saida ent2 U1 7 R2 5 4 6 2 8 DSCHG R3 OUT 3 Q1 TIP111 CV RST THR TRG VCC LM555 C2 C1 GND J3 1 GND Figura 9. Circuito emissor. O CI 555 é configurado para operar em modo astável, de forma que os componentes à serem considerados para o cálculo da freqüência são R1a, R1b, R2 e C2. 25 Como: R1a = 10 R1b = 47 R2 = 20 C2 = 1nF e utilizando as fórmulas: T1 = 0,7 x (R1a + 2 x R2) x C2 , f 1= 1/T1; T2 = 0,7 x (R1b + 2 x R2) x C2 , f 2= 1/T1; Obtém-se, respectivamente, f1 ≅ 28 kHz e f2 ≅ 16 kHz, que são as freqüências emitidas por este circuito sobre a rede elétrica. A seguir é apresentada a lista de componentes para implementação do circuito emissor: Capacitores: C1 – 0,01 µF, cerâmico; C2 – 100 µF, cerâmico; C3, C4 – 10 nF, poliéster 400V. Resistores: R1a – 10 kΩ; R1b – 47 kΩ; R2 – 20 kΩ; R3 – 1 kΩ. Semicondutores: U1 – LM555; 26 Q1 – TIP111. Diversos: L1, L2 – Bobina. 3.5 CIRCUITO RECEPTOR O circuito receptor, mostrado na figura 10, deve estar conectado a uma das tomadas da rede elétrica local. Este circuito é constituído por um acoplamento com a rede elétrica, que é formado por uma bobina com dois enrolamentos de fio de cobre esmaltado sobre um bastão de ferrite de 0,6 cm de diametro por 6 cm de comprimento e um capacitor de poliéster. Cada bobina, L1 e L2, possui 130 voltas, fazendo com que não ocorra alteração na tensão de entrada do sistema. Este conjunto executa a filtragem das baixas freqüências da rede elétrica. Na seqüência, dois diodos em oposição na entrada evitam que transientes ou surtos de alta tensão da rede elétrica possam causar problemas ao circuito integrado. O CI LM567 tem a sintonia ajustada para uma determinada freqüência do emissor através do trimpot conectado ao pino 5. Enquanto o CI não recebe o sinal correspondente a freqüência configurada, a saída permanece em nível alto. Quando é detectada a freqüência correta da configuração a saída do CI vai à nível baixo, por este motivo as saídas do CI 567 são conectadas ao CI 7404, que invertem o sinal de saída para acionar a lógica dos relês do circuito. Cada configuração do CI 567 deve detectar uma freqüência diferente, um deve detectar 28 kHz e o outro 16 kHz, conforme definido pelo circuito emissor, de forma que cada sinal é reconhecido independentemente do outro. Quando a freqüência é detectada, o sinal faz com um pulso seja enviado para a lógica implementada nos relês. Esta lógica é implementada de forma que se o relê K1 recebe um pulso positivo, o dispositivo é desligado, e assim permanece “travado”, para que o dispositivo seja ligado o relê K2 deve receber um pulso positivo, após o qual este também permanece “travado”, e assim 27 sucessivamente. É importante observar que após o relê K2 ter definido a posição de ligar o dispositivo este assim permanece mesmo que receba novo pulso, o mesmo ocorrendo com o relê K1 no caso de desligar o dispositivo. C5 C1 K1 4 4 3 C3 INPUT J1 D1 D2 OUTPUT OUT FIL 2 8 6 5 3 1 2 5 8 Q1 6 1 7 L FIL L3 1 2 C6 TC TR D3 RELE 1 3 PLUG MACHO R2 3 2 L2 R3 4 U1 C2 LM567C 2 1 R1 C4 C9 K2 R6 T1 5 2 6 4 OUTPUT 6 5 8 3 D6 OUT FIL 2 5 8 Q1 6 1 7 L FIL 1 2 3 1 INPUT C7 8 TC TR C10 D4 1 D5 4 R5 1 3 3 4 U1 4 VCC RELE LM567C PLUG FEMEA 2 C11 2 1 R4 C8 Figura 10. Circuito receptor. A seguir é apresentada a lista de componentes utilizados na implementação do circuito receptor: Capacitores: C1 – 10 nF, poliéster 400V; C2 – 100 nF, cerâmico; C3, C7 – 10 nF, cerâmico; C4, C8 – 4,7 nF, poliester; C5, C9 – 100 nF, cerâmico; C6, C10 – 22 nF, cerâmico; 28 J2 C11 – 1000 µF, eletrolítico. Diodos: D1, D2, D3, D4, D5, D6 – 1N4002. Resistores: R1, R4 – 10kΩ - potenciômetro; R2, R5 – 10kΩ; R3, R6 – 1kΩ. Semicondutores: Q1, Q2 – BC549; U1, U2 – LM567. Diversos: L2, L3 – Bobina; K1, K2 – Relê 5V; T1 – Transformador – primário=127, secundario=6+6 V, 800mA. 3.6 CRONOGRAMA DO PROJETO O cronograma do projeto se baseia no cronograma especificado “Manual de Instrução do Projeto do Final de Curso”, disponibilizado aos alunos para a elaboração do projeto. A Tabela 2 mostra os meses definidos para as etapas do projeto. 29 Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez Proposta Especificação Projeto Implementação Validação Documentação Tabela 2. Cronograma do projeto. 3.7 VALIDAÇÃO DO PROJETO O desenvolvimento dos sistemas independentes serão feitos de maneira paralela, de forma que não fiquem etapas individuais para serem desenvolvidas integralmente após a conclusão das demais etapas que não têm ligação direta. O sistema que envolve o funcionamento de conexão e acesso a banco de dados via Internet deverá ter condições de validação antes do sistema de comunicação de dados via rede elétrica. A validação integral do projeto envolve a conexão de um usuário com a Internet e seu acesso a página via confirmação de nome e senha. Na seqüência o usuário deverá determinar na página, o dispositivo que pretende acionar bem como o horário de acionamento. O servidor recebe as informações e as atualiza no banco de dados. O computador que está na residência deve acessar periodicamente o servidor via Internet e fazer a verificação das informações atualizadas do banco de dados. O programa em C lê os 30 dados atualizados da página local e faz a conexão com o dispositivo que recebe o comando na hora especificada. Para fins de validação do projeto uma lâmpada elétrica que estará conectada a rede elétrica local receberá um comando de liga ou desliga, que deve ser executado na hora especificada pelo usuário conectado à Internet. 3.8 CONSIDERAÇÕES FINAIS Algumas considerações importantes devem ficar registradas para análise de problemas encontrados bem como suas soluções, possíveis soluções ou a inviabilidade de execução. Quanto à utilização da Internet como meio de circulação das informações do sistema chega-se a um impasse no que diz respeito a utilização dos dados que estão chegando para o cliente local, pois apesar dos dados serem apresentados na tela do navegador, o programa em C que manipula os dados, não tem como extraí-los para utilização do sistema. Duas considerações são feitas quanto ao problema exposto: A primeira consideração é a de que é possível para o programa em C manipular os dados diretamente do servidor, isto leva a possibilidade da implementação do sistema de forma que o cliente local seja alterado para servidor local. O que significa manter no computador do cliente tanto a aplicação de banco de dados como o servidor de páginas. Além disso o cliente deve possuir um endereço IP fixo que acarreta um custo considerável a mais na implantação do sistema. A segunda consideração é a de que o único arquivo manipulável que o código ASP pode gerar no cliente são os cookies, arquivos no formato texto com informações que podem ser recuperadas pelo navegador sem intervenção do usuário. Neste caso especifico, estas informações podem ser utilizadas pelo programa C para verificação dos dados e interação com os dispositivos. 31 A primeira consideração possui um lado positivo no que diz respeito a eficiência do sistema em termos técnicos, visto que o acesso direto ao banco de dados no cliente elimina um intermediário de acesso ao banco de dados. Por outro lado adiciona custo para o cliente e elimina a forma mais promissora de exploração do sistema comercialmente, isto é, a prestação de serviço como provedor de acesso e administrador do sistema. Desta forma o programa em C é desenvolvido procurando tratar os cookies no cliente mantendo as características inicias das interfaces de acesso à Internet. Quanto ao hardware, a utilização da rede elétrica se mostrou bastante eficiente em termos de manter a freqüência emitida pela rede, porém a amplitude do sinal é bastante atenuado conforme a distância entre o emissor e o receptor aumenta. Isto requer um aprimoramento na questão de potência a ser enviada para a rede. Ainda como sugestão para melhoria futura do sistema, pode-se implementar um módulo de resposta do dispositivo para o computador, confirmando o status atual do mesmo, dando maior confiabilidade e interação com o sistema. Como o sistema está sujeito a possíveis ruídos gerados por outros equipamentos ligados a rede elétrica, que podem ter freqüência coincidente à configurada no receptor, uma forma de controlar o que é freqüência válida ou não, também é desejável. O projeto, no entanto, como foi proposto, alcançou seus objetivos plenamente, sendo que o protótipo aqui desenvolvido executa sem problemas as tarefas para o qual foi construído. 32 4 REFERÊNCIAS BIBLIOGRAFICAS [1] http://www.bit.pt/revista/especiais/bit21-1.htm, Março/2003. [2] http://www.eel.ufsc.br/gpqcom/vidal/PLC/relat.html, Março/2003. [3] http://www.intellon.com, Março/2003. [4] http://www.powerlinecommunications.net, Março/2003. [5] http://www.homeplug.org/index_basic.html, Março/2003. [6] http://www.geocities.com/SiliconValley/Monitor/4126/indice.html, Março/2003. [7] http://icc.skku.ac.kr/~won/electro/telecom.html, Março/2003. [8] http://www.plexeon.com/access-3.html, Março/2003. [9] http://www.inovanet.com.br, Março/2003. [10] http://www.tutorialweb.hpg.ig.com.br/asp.htm, Março/2003. [11] http:// www.asphelp.com.br, Março/2003. [12] http://www.darkbr.net/asp.php, Março/2003. [13] http://www.fairchildsemi.com, Março/2003. [14] W. Bolton, Análise de Circuitos Elétricos, 2.ed. São Paulo, Makron Books, 1995. [15] Asbury Stephen, RICART,Manuel Alberto, ASP, Guia do Desenvolvedor, Berkeley, 2001. [16] W.Kwan, W.Parker, B.Roberts, J.Tatum - PLCCS : A Power Line Carrier Communications System, submitted to: Joseph Picone. [17] Jeffry Byrne, Microsoft Access 97, Rio de Janeiro, Campus, 1997. 33 [18] Abraham Silberschatz, Sistema de Banco de Dados, 3. ed. São Paulo, Makron Books, 1999. [19] Lars Klander & Kris Jamsa, Programando em C/C++: a Bíblia, 1. ed. São Paulo, Makron Books, 1999. [20] http://www.facens.br, Julho/2003. [21] Parr, E.A.; Projetos Eletronicos com o C.I. 555, 1. ed. Rio de Janeiro, Seleções Eletrônicas, 1979. 34 5 ANEXOS Anexo 1 – Interfaces das Páginas ASP; Anexo 2 – Listagem do Código Fonte das Páginas ASP; Anexo 3 – Listagem do Código Fonte do Programa C. 35 Anexo 1 – Interfaces das Páginas ASP 36 Interface - Página de acesso local - acesso_local.asp. 37 Interface - Página local de verificação de status dos dispositivos - refresh_local.asp. 38 Interface - Página de acesso remoto - acesso_p.asp. 39 Interface - Página de atualização do sistema - valida_p.asp. 40 Interface - Página de erro de logon - pag_erro.asp e erro_local.asp. 41 Anexo 2 – Listagem do Código Fonte das Páginas ASP 42 • Acesso_local.asp <!--pagina inicial de acesso local, onde o usuario deve entrar com nome e senha. A pagina aciona a pagina "session_local.asp"--> <HTML> <HEAD> <TITLE> GERENCIADOR DE DISPOSITIVOS - PÁGINA DE ACESSO - LOCAL</TITLE></HEAD> <BODY> <IMG SRC = "Logotipo.jpg"> <FONT COLOR=GREEN> <FONT FACE=ARIAL> <H2><CENTER><B><U> PÁGINA DE ACESSO - LOCAL</B></U></H2> </FONT> </FONT> <BR> <form action="session_local.asp" method="get"> <B><FONT FACE=Arial> <p>Nome: <input type="text" size="40" name="campo_nome"> </p> <p>Senha: <input type="password" size="40" name="campo_senha"> </p> <BR> <input type="submit" value="Enviar"></CENTER> </form></body></html> 43 • Acesso_p.asp <!--pagina inicial de acesso onde o usuario deve entrar com nome e senha. A pagina aciona a pagina "valida_p.asp"--> <HTML> <HEAD> <TITLE> GERENCIADOR DE DISPOSITIVOS - PÁGINA DE ACESSO</TITLE></HEAD> <BODY> <IMG SRC = "Logotipo.jpg"> <FONT COLOR=GREEN> <FONT FACE=ARIAL> <H2><CENTER><B><U> PÁGINA DE ACESSO</B></U></H2> </FONT> </FONT> <BR> <form action="valida_p.asp" method="POST"> <B><FONT FACE=Arial> <p>Nome: <input type="text" size="40" name="campo_nome"> </p> <p>Senha: <input type="password" size="40" name="campo_senha"> </p> <BR> <input type="submit" value="Enviar"></CENTER> </form></body></html> 44 • Atualiza_p.asp <% ' Página de atualização do banco de dados, recebe dados da página "valida_p.asp" vnome=Request.Form("campo_nome") vdispositivo=Request.Form("listadispositivos") vdata=Request.Form("campo_data") vhora=Request.Form("campo_hora") voperacao=Request.Form("campo_operacao") Set DB = Server.CreateObject("ADODB.Connection") DB.Open "db_powerline","","" SQL="INSERT into Tab_Programa (Nome,Dispositivo,Data,Hora,Operacao) values ('"&vnome&"','"&vdispositivo&"','"&vdata&"','"&vhora&"','"&voperacao&"')" set RS=DB.execute(SQL) %> <META HTTP-EQUIV="REFRESH" CONTENT="3; URL =acesso_p.asp"> <IMG SRC = "Logotipo.jpg"> <FONT COLOR=PURPLE> <FONT FACE=ARIAL> <H1><CENTER><B><U> <BR><BR>ATUALIZAÇÃO EXECUTADA COM SUCESSO !!</B></U></CENTER></H1> </FONT> </FONT> 45 • Erro_local.asp <!--página que é chamada quando o usuário entra com login inválido em "acesso_local.asp"--> <HTML> <HEAD> <BODY BACKGROUND=Erro.jpg> <TITLE> GERENCIADOR DE DISPOSITIVOS - ERRO DE ACESSO</TITLE></HEAD> <META HTTP-EQUIV="REFRESH" CONTENT="3; URL =acesso_local.asp"> </HTML> 46 • Refresh_local.asp <% 'Página que abre o tabela referente ao usuário conectado e verifica os dados para conexão 'Executa a atualização em tempo determinado, grava um arquivo .txt dos dados atualizados e grava no cliente um cookie para leitura do programa em C %> <% path_do_arquivo = "c:/temp/aa.txt" Const forReading = 1, forWriting = 2, forAppending = 8 Const TriDef = -2, TriTrue = -1, TriFalse = 0 'a linha abaixo gera o arquivo arquivo = path_do_arquivo 'a linha abaixo abre a instância com o objeto Scripting. FileSystemObject Set ObjFSO = CreateObject("Scripting.FileSystemObject") 'abaixo, a linha que cria o arquivo TXT especificado objFSO.CreateTextFile(arquivo) %> <% datasist = DATE sisdata = CDATE(datasist) horasist = FormatDateTime(DateAdd("h", -1, Now), 3) Set DB = Server.CreateObject("ADODB.Connection") DB.Open "db_powerline","","" Set RS = Server.CreateObject("ADODB.RecordSet") %> <% campo_nome=(Request.QueryString("campo_nome")) Set DB = Server.CreateObject("ADODB.Connection") DB.Open "db_powerline", "", "" Set RS = DB.execute("SELECT * FROM Tab_Programa where Nome = '"&campo_nome&"' order by data desc") %> <% Do Until RS.eof %> <%gravadata = RS.fields("Data")%> <%gravahora = RS.fields("Hora")%> <%gravaoperacao = RS.fields("operacao")%> <% path_do_arquivo = "c:/temp/aa.txt" hora2 = RS.fields("Hora") diferenca = DateDiff("h",horasist,hora2) 47 'a linha abaixo gera o arquivo arquivo = path_do_arquivo 'a linha abaixo abre a instância com o objeto Scripting. FileSystemObject Set ObjFSO = CreateObject("Scripting.FileSystemObject") If ObjFSO.FileExists(arquivo) = False then 'abaixo, a linha que cria o arquivo TXT especificado objFSO.CreateTextFile(arquivo) End If 'a linha abaixo abre o arquivo desejado. Set ObjFile = objFSO.GetFile(arquivo) 'a linha abaixo diz o tipo de manipulação que será utilizada no arquivo TXT, no caso é para adicionar dados. Set objStream = ObjFile.OpenAsTextStream(forAppending,TriDef) 'o comando WriteLine, abaixo, grava os dados no arquivo TXT especificado. ObjStream.WriteLine gravanome ObjStream.WriteLine gravadata ObjStream.WriteLine gravahora 'abaixo, o objeto ObjStream é fechado ObjStream.close Set ObjStream = nothing %> <% RS.MoveNext Loop %> <%RS.MoveFirst%> <% 'Bloco que gera o cookie no cliente%> <%Response.Cookies("Zip")=gravaoperacao%> <%Response.Cookies("Zip")=gravahora%> <%Response.Cookies("Zip")=gravadata%> <%Response.Cookies("Zip").Expires="Janeiro 1, 2004"%> <%do while not RS.eof %> <option><%=RS(0)%><br> <%=RS(1)%> <br><%=RS(2)%> <br><%=RS(3)%> <br><%=RS(4)%><BR><BR></option> <% RS.movenext loop %> <%response.write"<br>"%> <%response.write horasist%> <%response.write"<br>"%> <%response.write hora2%> 48 <%response.write"<br>"%> <%response.write diferenca%> <% sql = ("DELETE * FROM Tab_Programa WHERE Data < date() ") Set RS = DB.execute(sql) %> <% if diferenca < 0 then sql = ("DELETE * FROM Tab_Programa WHERE Data <= date() ") Set RS = DB.execute(sql) end if %> <IMG SRC = "Logotipo.jpg"> <% DB.close Set DB=Nothing %> <HTML> <HEAD> <TITLE> GERENCIADOR DE DISPOSITIVOS - PÁGINA DE ACESSO</TITLE></HEAD> <META HTTP-EQUIV="REFRESH" CONTENT="10; URL="refresh_local.asp?campo_nome="<%=campo_nome%>"> 49 • Session_local.asp <% 'Pagina que valida login e mantem uma sessao aberta para o usuario 'caso haja erro redireciona para erro_local.asp, senao 'redireciona para refresh_local.asp %> <% Set DB = Server.CreateObject("ADODB.Connection") DB.Open "db_powerline","","" campo_nome=(Request.QueryString("campo_nome")) campo_senha=(Request.QueryString("campo_senha")) Set RS = Server.CreateObject("ADODB.RecordSet") Set RS = DB.execute("SELECT * FROM Tab_Usuario WHERE Nome_Usuario = '"&campo_nome&"' and Senha_Usuario = '"&campo_senha&"'" ) '*****NÃO COLOCAR NENHUMA TAG ANTES DE Response.Redirect********* If RS.EOF then Response.Redirect "erro_local.asp" else session("campo_nome") = campo_nome Response.Redirect"refresh_local.asp?campo_nome="& campo_nome End If DB.close %> 50 • Valida_p.asp <% 'Página de validação de login do usuário, caso haja erro redireciona para pag_erro.asp. É mostrado o status dos dispositivos e, nesta página é programada a operação a ser executada%> <% vnome=Request.Form("campo_nome") vsenha=Request.Form("campo_senha") Set DB = Server.CreateObject("ADODB.Connection") DB.Open "db_powerline","","" Set RS = Server.CreateObject("ADODB.RecordSet") Set RS = DB.execute("SELECT * FROM Tab_Usuario WHERE Nome_Usuario = '"&vnome&"' and Senha_Usuario = '"&vsenha&"'" ) '*****NÃO COLOCAR NENHUMA TAG ANTES DE Response.Redirect********* If RS.EOF then Response.Redirect "pag_erro.asp" End If SET Lista = Server.CreateObject("ADODB.RecordSet") Lista.open "Select * FROM Tab_Programa where Nome = '"&vnome&"' Order By Dispositivo ",DB,3,3 SET Dispositivos = Server.CreateObject("ADODB.RecordSet") Dispositivos.open "Select Dispositivo from Tab_Dispositivo Order By Dispositivo",DB,3,3 %> <IMG SRC = "Logotipo.jpg"> <FONT COLOR=GREEN> <FONT FACE=ARIAL> <H2><CENTER><B><U> PÁGINA DE ATUALIZAÇÃO</B></U></CENTER></H2> </FONT> </FONT> <FONT COLOR=Dark Purple> <FONT FACE=ARIAL> <H3><CENTER><B><U> Usuário <%Response.Write vnome%> </B></U></CENTER></H3> </FONT> </FONT> <HR WIDTH=85%> <FONT COLOR=Green Copper> <FONT FACE=ARIAL> <H4> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;STATUS ATUAL <P></P> <!--cria lista com situaçao atual dos dispositivos--> <% Do Until Lista.eof%> 51 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <%=Lista.Fields("Dispositivo") %> <%=Lista.Fields("Data") %> <%=Lista.Fields("Hora") %> <%=Lista.Fields("Operacao") %> <BR> <% Lista.MoveNext Loop %> </H4> </FONT> </FONT> <P></P> <HR WIDTH=85%> <form action="atualiza_p.asp" method="POST"> <Table> <!--popula combobox com nome dos dispositivos--> Dispositivo: <SELECT id=listadispositivos name=listadispositivos> <% Do While Not Dispositivos.EOF Response.Write"<OPTION value=" &Chr(34) & Dispositivos.Fields("Dispositivo") & Chr(34) & ">" & Dispositivos.Fields("Dispositivo")& " </OPTION>" Dispositivos.MoveNext Loop %> </SELECT> <p></p> <% 'Response.Write "<TR><TD>Dispositivo: </TD><TD><INPUT id=usuarioID maxLength=20 name=campo_dispositivo 'size=15></TD><TD>dd/mm/aaaa</TD></TR>" %> <p></p> <% Response.Write "<TR><TD>Usuário: </TD><TD><INPUT name=campo_nome size=15 value="& Chr(34)& RS.Fields("Nome_Usuario") & Chr(34)&"></TD></TR>" %> <p></p> <% Response.Write "<TR><TD>Data: </TD><TD><INPUT id=usuarioID maxLength=20 name=campo_data size=15 ></TD><TD>dd/mm/aaaa</TD></TR>" %> <p></p> <% 52 Response.Write "<TR><TD>Hora: </TD><TD><INPUT id=usuarioID maxLength=20 name=campo_hora size=15 ></TD><TD>hh:mm</TD></TR>" %> <p></p> </Table> <%Response.Write "Operação:" %> <input type="radio" name="campo_operacao" value="Liga">Ligar <input type="radio" name="campo_operacao" value="Desl">Desligar <P></P> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Atualizar"> <% DB.close Set DB=Nothing %> 53 Anexo 3 – Listagem do Código Fonte do Programa C 54 • Listagem do Código Fonte do Programa C //--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include <condefs.h> #include<iostream> #include<fstream> #include<string> #include<stdio.h> #include<conio.h> #include<io.h> #include<vcl.h> #include<time.h> #include<sys/types.h> #include <locale> #include <sstream> #include "Unit1.h" using namespace std; //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender) { Label1->Caption = TimeToStr(Now()); Label8->Caption = DateToStr(Now()); } //--------------------------------------------------------------------------void __fastcall TForm1::Timer2Timer(TObject *Sender) { TDateTime data; int ndata=1; int nhora=1; int nstatus=1; int espera; char c; char hBuffer[255], hBuffer2[255]; TDateTime tTmp1, tTmp2, tTmp3, tTmp4; string sLine; ifstream *arq; 55 ifstream lecookie("c:/Documents and Settings/joarez/cookies/[email protected][1].txt"); if (lecookie.is_open()==false){ lecookie.open("c:/Documents and Settings/joarez/cookies/[email protected][2].txt"); } ifstream letabela2("C:/Documents and Settings/joarez/Meus documentos/CookieBuider/Tabela2.txt"); FILE *arquivo; arquivo=fopen("Tabela.txt","w"); fclose(arquivo); arquivo=fopen("Tabela.txt","at"); FILE *arquivo2; arquivo2=fopen("Tabela2.txt","w"); while(!lecookie.eof()) { lecookie.getline(hBuffer,255,'='); lecookie.getline(hBuffer,255,'&'); fprintf(arquivo,hBuffer); putc('\n',arquivo); } fclose(arquivo); arquivo=fopen("Tabela.txt","r+"); int b = fseek(arquivo,0,SEEK_SET); c = getc(arquivo); while(ndata < 8) { putc(c,arquivo2); c=getc(arquivo); if(c == '%') { putc('/',arquivo2); c=getc(arquivo); c=getc(arquivo); c=getc(arquivo); } ndata++; } while(nhora < 8) { putc(c,arquivo2); c=getc(arquivo); if(c == '%') { putc(':',arquivo2); c=getc(arquivo); 56 c=getc(arquivo); c=getc(arquivo); } nhora++; } while(nstatus < 6) { putc(c,arquivo2); c=getc(arquivo); nstatus++; } fclose(arquivo); fclose(arquivo2); //*****************Compara Data - Hora e Operacao******************************* _DX = 0x378; _AL = 0; __emit__ (0xEE);//Instrução da CPU letabela2.getline(hBuffer2,255); sLine = hBuffer2; Label9->Caption = sLine.c_str(); tTmp3 = StrToDate(Label8->Caption); tTmp4 = StrToDate(Label9->Caption); if(tTmp3 == tTmp4) { letabela2.getline(hBuffer2,255); sLine = hBuffer2; Label2->Caption = sLine.c_str(); tTmp1 = StrToTime(Label1->Caption); tTmp2 = StrToTime(Label2->Caption); if(tTmp1 == tTmp2) { letabela2.getline(hBuffer2,255); Label11->Caption = hBuffer2; //*******************Aciona Porta Paralela************************************** for(espera=0; espera<4; espera++) { _DX = 0x378; _AL = 0; __emit__ (0xEE);//Instrução da CPU Sleep (3000); if(Label11->Caption == "Liga") { 57 Label12->Caption = "Aciona"; _DX = 0x378; _AL = 1; __emit__ (0xEE);//Instrução da CPU Sleep (3000); } else if(Label11->Caption == "Desl") { Label12->Caption = "Desliga" ; _DX = 0x378; _AL = 2; __emit__ (0xEE);//Instrução da CPU Sleep(3000); } } } } } //--------------------------------------------------------------------------- 58