{"id":17,"date":"2008-12-22T16:26:47","date_gmt":"2008-12-22T19:26:47","guid":{"rendered":"http:\/\/informago.wordpress.com\/2008\/12\/22\/automacao-indutrial-computacao-movel"},"modified":"2022-09-01T15:04:00","modified_gmt":"2022-09-01T18:04:00","slug":"automacao-indutrial-computacao-movel","status":"publish","type":"post","link":"https:\/\/blog.lucianoreis.com\/2008\/12\/22\/automacao-indutrial-computacao-movel\/","title":{"rendered":"Automa\u00e7\u00e3o Indutrial + Computa\u00e7\u00e3o M\u00f3vel"},"content":{"rendered":"\n

Durante os \u00faltimos anos venho ministrando palestras sobre diversos temas, dentre os quais: computa\u00e7\u00e3o m\u00f3vel e automa\u00e7\u00e3o industrial.  Agora, para concluir o curso de gradua\u00e7\u00e3o em Ci\u00eancia da Computa\u00e7\u00e3o na Universidade Veiga de Almeida \u00e9 preciso apresentar uma monografia que, teoricamente, deve ser sobre um tema bem original.  Pensei em um dos dois temas citados anteriormente, mas a oportunidade me levou a algo melhor e completamente original: a soma dos dois.
<\/p>\n\n\n\n

Objetivo<\/strong> <\/h2>\n\n\n\n

O tema da monografia foi “Comparativo de Linguagens de Programa\u00e7\u00e3o para Dispositivos M\u00f3veis”.  Depois de avaliadas as linguagens fiz um experimento com o objetivo de demonstrar o potencial da plataforma .NET para o desenvolvimento de aplica\u00e7\u00f5es m\u00f3veis.  Ao final, o projeto consistiu da constru\u00e7\u00e3o de um elevador que se move a partir de comandos enviados pelos telefones celulares da plat\u00e9ia, integrando computa\u00e7\u00e3o m\u00f3vel e automa\u00e7\u00e3o industrial envolvendo diversas tecnologias como XML Webservices, protocolos de comunica\u00e7\u00e3o, tr\u00e1fego HTTP, conex\u00e3o direta via TCP\/IP, comunica\u00e7\u00e3o serial, troca de mensagens via SMS, envio de e-mails e outras correlatas.
<\/p>\n\n\n\n

O Experimento<\/strong> <\/h2>\n\n\n\n

Para desenvolver e implementar o projeto utilizando duas horas de trabalho por dia, durante dez dias dividimos os esfor\u00e7os em tr\u00eas frentes distintas:


Elevador<\/em><\/strong>

Uma equipe de seis pessoas se dedicou a construir fisicamente o elevador, e fazer toda a instala\u00e7\u00e3o el\u00e9trica e eletr\u00f4nica necess\u00e1ria.  A maquete foi feita em madeira, possuindo 1,6m de altura por 0,7m de largura.  Na parte superior, ou seja, acima do “pr\u00e9dio” estava todo o equipamento necess\u00e1rio para o perfeito funcionamento do experimento:   <\/p>\n\n\n\n

\"\"<\/a><\/figure>\n\n\n\n

– Motor el\u00e9trico: Para efetivamente movimentar o elevador.

– Encoder \u00f3ptico de 100 pulsos por volta: Conectado ao eixo do motor, envia pulsos ao microcontrolador, para que dessa forma este possa ter refer\u00eancia do posicionamento atual do elevador.

– Microcontrolador, que nesse caso far\u00e1 o papel de CLP (Controlador L\u00f3gico Program\u00e1vel).  Optamos pela utiliza\u00e7\u00e3o do microcontrolador pois o mesmo est\u00e1 sendo lan\u00e7ado pela empresa que me cedeu todo o material e pessoal necess\u00e1rio \u00e0 execu\u00e7\u00e3o do projeto.

– Inversor para comandar o motor do elevador, variando dire\u00e7\u00e3o e velocidade.  Vale lembrar que, no experimento, o elevador ir\u00e1 variar a velocidade a cada chamada de andar.

– Modem GSM.  Em processos tradicionais a comunica\u00e7\u00e3o entre CLP e computador \u00e9 feita atrav\u00e9s de cabo serial conectado \u00e0 porta RS-232.  Nesse caso, adotamos um modem que se conecta \u00e0 Internet atrav\u00e9s do canal GPRS padr\u00e3o de qualquer operadora GSM.  Uma vez que tenha um IP v\u00e1lido o modem abre um canal de escuta, no qual todo o tr\u00e1fego enviado \u00e0quela porta \u00e9 direcionado para a sua porta serial que est\u00e1 conectada ao CLP ou microcontrolador.  Para enviar as mensagens, o computador deve faz\u00ea-lo diretamente sobre TCP\/IP para o endere\u00e7o e porta especificados e ent\u00e3o estas chegar\u00e3o ao CLP ou microcontrolador.  Logicamente perde-se no tempo de lat\u00eancia, mas ganha-se na flexibilidade da comunica\u00e7\u00e3o sobre Internet.

– Transformador de voltagem, uma vez que todo o equipamento funciona em 220V.

– IHM (Interface Homem M\u00e1quina), que afixada \u00e0 parte superior da constru\u00e7\u00e3o mostra informa\u00e7\u00f5es do microcontrolador como o IP que o modem ganhou e, na hora da exibi\u00e7\u00e3o, o nome do solicitante, o andar e a velocidade.

Depois de montada a estrutura de madeira foi envernizada.  O elevador \u00e9 um caixote de madeira menor que se movimenta no interior da estrutura correndo pendurado por um cabo de a\u00e7o e alinhado a outros dois cabos fixos que funcionam como trilhos.  O contrapeso do elevador foi feito com uma garrafa de PET cheia de \u00e1gua.  Dentro do pequeno caixote do elevador tamb\u00e9m h\u00e1 um peso, para que o mesmo se movimente eficientemente.   <\/p>\n\n\n\n

\"\"<\/a><\/figure>\n\n\n\n

Software do Hardware de Controle<\/em><\/strong>

O brilhante Bernardo Almeida desenvolveu o software de controle do microcontrolador em linguagem C++, bem como programa\u00e7\u00e3o da EPROM utilizando linguagem Ladder.  O software do microcontrolador faz a discagem pelo modem GSM e assim que est\u00e1 conectado \u00e0 Internet aciona o servi\u00e7o IPService criado exclusivamente para essa aplica\u00e7\u00e3o.

Como a comunica\u00e7\u00e3o do referido dispositivo acontece em n\u00edvel muito baixo, n\u00e3o h\u00e1 como instalar clients de servi\u00e7os como No-IP ou DynDNS.  Tal recurso \u00e9 importante para que o computador descubra qual o endere\u00e7o IP do modem GSM para estabelcer a comunica\u00e7\u00e3o.   Parece simples mas, como disse, a programa\u00e7\u00e3o \u00e9 baix\u00edssimo n\u00edvel.  Foi necess\u00e1rio escrever a camada de comunica\u00e7\u00e3o HTTP para instanciar o servi\u00e7o.  Observe o trecho de c\u00f3digo que faz isso: <\/p>\n\n\n\n

{\n resposta=true;\n output_high(pin_c0);\n buff[pont-2]=0;\n fprintf(ihm,\"%s\\r\",buff);\n delay_ms(500);\n fprintf(gsm,\"at+cipstart=%cTCP%c,%c72.36.176.123%c,%c80%c\\r\",0x22,0x22,0x22,0x22,0x22,0x22);\n ok();\n ok();\n fprintf(gsm,\"at+cipsend\\r\");\n delay_ms(500);\n fprintf(gsm,\"GET http:\/\/ipservice.larsoft.net\/ipset.aspx?id=Becape HTTP\/1.0\\r\\nAccept: *\/*\\r\\nAccept: text\/html\\r\\n\\r\\n%c\",0x1A);\n delay_ms(10500);\n fprintf(gsm,\"at+cipclose\\r\");\n delay_ms(100);\n break;\n}<\/code><\/pre>\n\n\n\n

A comunica\u00e7\u00e3o com o modem \u00e9 feita atrav\u00e9s dos tradicionais comandos “AT”.  No momento da conex\u00e3o n\u00e3o h\u00e1 como resolver endere\u00e7os atrav\u00e9s de DNS, por isso o comando IPStart acessa o servidor diretamente pelo IP.   O microcontrolador envia para a IHM a informa\u00e7\u00e3o do nome da pessoa que est\u00e1 solicitando o andar, o andar selecionado e a velocidade que o elevador se mover\u00e1.     <\/p>\n\n\n\n

\"\"<\/a><\/figure>\n\n\n\n

Tudo isso n\u00e3o esquecendo que, quando o elevador est\u00e1 em movimento o encoder \u00f3ptico est\u00e1 enviando ao microcontrolador pulsos para que, atrav\u00e9s desses pulsos ele saiba a posi\u00e7\u00e3o atual. Durante este processo a CPU monotarefa do equipamento n\u00e3o \u00e9 capaz de receber informa\u00e7\u00f5es do modem, ou pararia de contar o movimento – Mais um importante detalhe que tinha de ser lembrado na confec\u00e7\u00e3o dos softwares.

O desenvolvimento de toda essa camada de baixo n\u00edvel tomou todos os 10 dias de trabalho que dedicamos \u00e0 execu\u00e7\u00e3o do projeto.


Software Cliente e Servidor<\/em><\/strong>

Pronta toda a camada de hardware descrita at\u00e9 agora, dediquei-me \u00e0 cria\u00e7\u00e3o de alguns softwares para preparar o ambiente, todos feitos utilizando plataforma .NET:

– IPService:<\/em>   Lembra que o microcontrolador n\u00e3o possui uma camada de Sistema Operacional para executar aplicativos client como o No-IP ou o DynDNS?  O primeiro software para viabilizar a comunica\u00e7\u00e3o entre computador e modem GSM foi um gerenciador de IP Din\u00e2mico.  O IPService pode ser visto funcionando utilizando os seguintes comandos (trocando pelo nome que voc\u00ea inventar, sem espa\u00e7os:

Para setar o seu IP utilize: http:\/\/ipservice.larsoft.net\/IPSet.aspx?Id=<Seu Nome>

Igualmente, para descobrir qual foi o IP registrado utilize:

http:\/\/ipservice.larsoft.net\/IPGet.aspx?Id=<Seu Nome>

– Cadastra Participantes<\/em>

Programa feito para plataforma Windows para que, um digitador na entrada do evento, cadastre todos os participantes com nome, e-mail e telefone celular.  Importante lembrar que este programa n\u00e3o faz acesso direto ao banco de dados, todas as opera\u00e7\u00f5es s\u00e3o feitas via webservice e o BD est\u00e1 em um servidor web.

– UVA XML Webservice<\/em>

XML Webservice com toda a camada de neg\u00f3cios para manipula\u00e7\u00e3o do cadastro de participantes e mais um m\u00e9todo “MostraIP”, que tem como par\u00e2metro o nome da esta\u00e7\u00e3o que foi setado no IPService.  Desta forma ser\u00e1 necess\u00e1rio instanciar apenas um webservice na aplica\u00e7\u00e3o que comanda o elevador.


Software do Smartphone<\/em><\/strong>

Agora sim chegamos ao software objetivo final deste experimento.  Com a capacidade dos smartphones de rodar Windows Mobile, .NET Framework e acessibilidade \u00e0 Internet, fiz um programa que unifica todas as tecnologias ditas at\u00e9 o momento.  Detalharei aqui as etapas do programa:

1. Utilizando o XML webservice, mostra a lista de participantes do evento.

2. Com o recurso IPService, conecta-se ao microcontrolador do elevador via TCP\/IP.

3. Envia SMS personalizado a todos os participantes do evento.

4. Trata as SMS recebidas, e pesquisa o n\u00famero do telefone remetente na tabela de participantes.

5. Envia comando ao microcontrolador sobre TCP\/IP, informando o primeiro nome da pessoa solicitante, o andar solicitado e a velocidade do elevador.

6. Envia e-mail personalizado a todos os participantes.

Com todas as caracter\u00edsticas acima, o programa lan\u00e7a m\u00e3o das seguintes tecnologias:

– Consumo de XML Webservices
– Conex\u00e3o direta sobre TCP\/IP
– Manipula\u00e7\u00e3o de SMS
– Protocolos propriet\u00e1rios de comunica\u00e7\u00e3o
– Manipula\u00e7\u00e3o de e-mail

Depois de feitos diversos testes em laborat\u00f3rio, est\u00e1vamos com todo o sistema pronto para fazer o show no dia da apresenta\u00e7\u00e3o de monografia.   <\/p>\n\n\n\n

\"\"<\/a><\/figure>\n\n\n\n

A Apresenta\u00e7\u00e3o<\/strong> <\/h2>\n\n\n\n

Agora que toda a tecnologia empregada em minha apresenta\u00e7\u00e3o j\u00e1 foi apresentada, posso descrever sucintamente o que foi a apresenta\u00e7\u00e3o.\u00a0 Infelizmente o \u00fanico v\u00eddeo feito ficou muito\u00a0ruim.

No dia da apresenta\u00e7\u00e3o tamb\u00e9m houveram alguns problemas com a falta de cobertura da operadora TIM no local do evento, o que levou a alguns improvisos.\u00a0 A apresenta\u00e7\u00e3o havia sido ensaiada para acontecer dentro de 15 minutos, que \u00e9 o tempo concedido pela institui\u00e7\u00e3o, ent\u00e3o fiz tudo de forma bem sucinta, para entrar em detalhes depois, no tempo das perguntas.

Mesmo com todos os problemas e imprevistos acontecidos no dia consegui atrasar apenas 5 minutos conseguindo assim a nota m\u00e1xima.\u00a0 Vou detalhar como foi o ensaio:

O p\u00fablico que ia chegando era cadastrado por um recepcionista que estava com um notebook conectado a Internet via rede de telefonia celular.\u00a0 Lembre-se que nosso assunto era computa\u00e7\u00e3o m\u00f3vel, ent\u00e3o tudo remetia a essa id\u00e9ia.

Nos cinco primeiros minutos eu fiz a introdu\u00e7\u00e3o e a conclus\u00e3o da palestra utilizando apenas dois slides de Power Point, nos quais se lia somente “Introdu\u00e7\u00e3o” e “Conclus\u00e3o”.\u00a0 Neste tempo narrei as diversas plataformas de computa\u00e7\u00e3o m\u00f3vel e, na conclus\u00e3o valorizava o Java por sua extrema portabilidade e o .NET por extrair todo o poder computacional de um dispositivo m\u00f3vel.\u00a0 Ainda neste tempo, peguei um telefone dos modelos mais antigos da plat\u00e9ia e mostrei que Java \u00e9 muito port\u00e1vel e que poderia utilizar essa plataforma para desenvolver software para aquele aparelho obsoleto, mas se fizesse um programa em Java que explorasse as sofisticadas capacidades gr\u00e1ficas dos novos dispositivos, ent\u00e3o a portabilidade seria comprometida, visto que aquela aplica\u00e7\u00e3o n\u00e3o rodaria no aparelho antigo.\u00a0 De uma certa forma, mostrei que a plataforma propicia portabilidade, mas que n\u00e3o \u00e9 a solu\u00e7\u00e3o dos problemas da humanidade.

Logo no in\u00edcio do pr\u00f3ximo bloco de 5 minutos eu simplesmente sa\u00eda da sala.\u00a0 Alegando que iria perguntar alguma coisa ao digitador que ficou l\u00e1 na entrada.\u00a0 Detalhe importante: antes de come\u00e7ar a palestra eu pedia que todos deixassem seus celulares ligados e com volume, porque eu iria enviar “uma” mensagem SMS para “algu\u00e9m”.\u00a0 Enquanto sa\u00eda, discretamente dava o comando de disparo de SMS no meu smartphone, que enviava a seguinte mensagem para cada um dos participantes: Vamos aproveitar que o Luciano saiu da sala para fazermos uma brincadeira. Responda com um numero e o elevador se movera ate ele<\/em>. Assim mesmo, sem acentua\u00e7\u00e3o para n\u00e3o acionar a tabela Unicode do sistema SMS.

No filme “O Passageiro do Futuro” (The Lawnomer Man<\/em>), o vil\u00e3o faz uma promessa que, se conseguir penetrar na rede mundial de computadores, ele faria todos os telefones do mundo tocarem \u00e0 meia-noite para comemorar sua vit\u00f3ria.\u00a0 Foi isso que aconteceu naquela sala.\u00a0 Quando eu cheguei do lado de fora, os celulares tocaram todos quase ao mesmo tempo.\u00a0 Foi uma sinfonia da vit\u00f3ria.\u00a0 A can\u00e7\u00e3o ficou completa com o ru\u00eddo do elevador se movendo para cima e para baixo em diferentes velocidades, fruto das respostas das mensagens do participantes.

Com isso eu voltava para a sala e comentava o que estava acontecendo. \u00a0 O \u00faltimo bloco de cinco minutos foi dedicado a mostrar e explicar\u00a0c\u00f3digo fonte do programa, demonstrando a simplicidade com a qual todas aquelas tecnologias foram mescladas, dando \u00eanfase que “um telefone celular” havia aberto um canal de comunica\u00e7\u00e3o TCP\/IP direto com um dispositivo embarcado, e que a comunica\u00e7\u00e3o entre eles estava acontecendo com base em um protocolo propriet\u00e1rio.

Rapidamente demonstrei no c\u00f3digo fonte o uso de Regular Expressions (estava validando os e-mails da lista), o uso da cole\u00e7\u00e3o de “Parameters” de um objeto SQLClient, o uso de For Each para cole\u00e7\u00f5es de objetos e mais algumas gracinhas… \u00a0 Encerrava minha participa\u00e7\u00e3o informando aos participantes que, para ler o material t\u00e9cnico referente a apresenta\u00e7\u00e3o, deveriam baixar do meu site. “Ah! Mas ningu\u00e9m precisa anotar o meu site, porque o smartphone agora vai enviar para todos voc\u00eas um e-mail com todos os meus dados”, e durante essa frase, corria um barra de progresso mostrando o envio de e-mails.

O feedback de aplausos da plat\u00e9ia mostrava que meu dever estava cumprido.\u00a0 Agora, meu pr\u00f3ximo passo, ser\u00e1 publicar artigos referentes ao experimento na MSDN.\u00a0 Abra\u00e7os e at\u00e9 l\u00e1. \u00a0 <\/p>\n\n\n\n

\"\"<\/a><\/figure>\n\n\n\n

<\/p>\n","protected":false},"excerpt":{"rendered":"

Durante os \u00faltimos anos venho ministrando palestras sobre diversos temas, dentre os quais: computa\u00e7\u00e3o m\u00f3vel e automa\u00e7\u00e3o industrial.  Agora, para concluir o curso de gradua\u00e7\u00e3o em Ci\u00eancia da Computa\u00e7\u00e3o na Universidade Veiga de Almeida \u00e9 preciso apresentar uma monografia que, teoricamente, deve ser sobre um tema bem original.  Pensei em<\/p>\n","protected":false},"author":1,"featured_media":2065,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[51],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.lucianoreis.com\/wp-content\/uploads\/2018\/12\/6f4b69d7f0b61b1857b2472c0d12574e.jpg?fit=600%2C450&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pav3ZT-h","_links":{"self":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/17"}],"collection":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":12,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":6154,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/17\/revisions\/6154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/media\/2065"}],"wp:attachment":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}