Você está na página 1de 6

RECONHECIMENTO AUTOMTICO DE PORTAS SERIAIS DE COMUNICAO NO WINDOWS

ILTON L. BARBACENA1, FELIPE P. XAVIER2, CLUDIO G. O. Q. LIMA, DANILLO F. E. G. MAIA4


Coordenao de Engenharia Eltrica, Grupo de Inovao da Paraba GYNPA
Instituto Federal de Educao, Cincia e Tecnologia da Paraba IFPB
CEP: 58015-430, TEL: 3208-3000, Joo Pessoa PB, Brasil
E-mails: iltonlb@gmail.com1, felipefpx@gmail.com2,
claudiogaleno1@gmail.com3,danilloestrela@hotmail.com4
Abstract This work implements an alternative routine using Try / Catch block, available in several object-oriented programming languages, in order to recognize the serial communication ports automatically that are added by WINDOWS operating
system when hardware devices are plugged into computer. Thus, the running application avoids the possible exception errors resulting from identification of the erroneous numbering of the ports since that it is only be established by identification of the
same operating system, after connecting the new hardware to the equipment. Its made using this methodology, with results in an
application where the interface controls a hardware device microcontrolled through the serial communication, using a graphical
interface, with automatic identification routine of the ports of communication built, developed in MATLAB environment.
Keywords MATLAB, Serial Port, Recognition of COM Ports, Try/Catch, Exception handling.
Resumo Este trabalho implementa uma rotina alternativa utilizando o bloco Try/Catch, disponvel em diversas linguagens de
programao orientada a objetos, com objetivo de reconhecer automaticamente as portas seriais de comunicao que so adicionadas pelo sistema operacional WINDOWS quando dispositivos de hardware so conectados ao computador. Desta forma, a
aplicao em execuo evita os possveis erros de exceo decorrentes da identificao da numerao errnea destas portas uma
vez que somente ser estabelecida a identificao da mesma pelo sistema operacional, depois de se conectar o novo hardware ao
equipamento. apresentado o uso desta metodologia, com resultados, em uma aplicao onde a interface controla um dispositivo
de hardware microcontrolado atravs da comunicao serial, utilizando-se uma interface grfica, com a rotina de identificao automtica das portas de comunicao embutida, desenvolvida em ambiente MATLAB.
Palavras-chave MATLAB, Porta Serial, Reconhecimento de Portas COM, Try/Catch, Tratamento de Exceo.

Introduo

Quando um programa de computador necessita de resultados de rotinas que por sua vez dependem de algum dispositivo fsico ou do funcionamento direto de componentes de hardware, sempre
pode haver estouro de tempo ou falha do dispositivo.
Isto pode ocorrer na leitura da converso de um sinal
ADC em uma placa de captura ou at mesmo de um
microfone, na leitura ou escrita de um bloco de dados em um setor do HD, no acesso a dados que chegam pela rede ou por uma porta de comunicao
serial, etc.
Este tipo de erro conhecido como um erro
de exceo, uma vez que no esto previstos no cdigo fonte, ou seja, no possuem nenhuma alternativa de bloco elseif, por exemplo, que evitem a interrupo da execuo do programa. Outro exemplo de
uma exceo o erro de atribuio impossvel a um
objeto e diviso por zero. Se ocorrer um desses erros
e no for implementada uma rotina para fazer o tratamento de excees, o programa terminar abruptamente ou poder causar um travamento geral.
Umas das utilidades proporcionadas pela
orientao a objetos, presente na maioria das ferramentas de desenvolvimento de softwares (Java,
C++, MATLAB, Python, Delphi, Eiffel,
etc.) a possibilidade de implementar o mecanismo
responsvel pelo tratamento da ocorrncia de condi-

es que alteram o fluxo normal da execuo de programas de computadores, conhecido como tratamento de excees.
Em automao, em sistemas de controle em
rede e em sistemas embarcados, muito comum utilizar-se uma mquina ou computador para gerenciar
o processo de controle de um conjunto de dispositivos microcontrolados, estes, com funo sensorial e
de atuao em cada ponto da rede.
Quando se conecta algum dispositivo na interface serial do computador, em ambiente Windows, automaticamente reconhecido o dispositivo (se no, na primeira vez, solicitado o driver correspondente) e atribudo um endereo correspondente ao dispositivo, que ser responsvel pela comunicao do computador com o dispositivo adicionado
atravs da interface serial. Se em rede, ser reservado
um socket formado pelo IP da mquina, um protocolo e o nmero da porta do protocolo.
No cdigo da interface necessrio conhecer exatamente qual a numerao atribuda para a
porta COM, para fazer a comunicao do dispositivo
de maneira correta. Este trabalho apresenta uma rotina de tratamento de excees com objetivo de identificar e atribuir a porta escolhida pelo sistema operacional Windows, de forma automtica, para ser
utilizada na ferramenta de interface.
A implementao e os resultados foram obtidos durante o desenvolvimento de uma interface de
acionamento de dispositivos atravs de uma placa
com microcontrolador PIC-18F4550 conectada no

computador atravs de comunicao serial utilizando


um software desenvolvido em MATLAB.
2 Erros de Exceo
2.1 Tratamento de erros de exceo
Os erros de exceo esto associados s falhas de execuo inesperadas ao programa, ou seja,
que no possuem nenhum tipo de rotina que permita
evitar o congelamento da execuo do programa por
causas que podem estar relacionadas a diversas
aes, como por exemplo, uma conexo mal configurada ou um dado incompatvel.
O tratamento de erros de exceo est associado capacidade de fazer em um programa o tratamento de erros operacionais, que ocorrem no devido a falhas de lgica de programao, mas devido
ao prprio uso do programa pelos usurios ou muitas
vezes por operaes internas da linguagem que precisam ser devidamente controladas (Manzano, 2011).
medida que os programas tornam-se mais
complexos e maiores cresce a necessidade de se preocupar com o tratamento de possveis erros de excees que venham ocorrer (Deitel, 2001).
2.2 Try/Catch
Existem vrias maneiras de fazer tratamento
de exceo, mas a principal que ser abordada nesse
trabalho a estrutura Try/Catch que est disponvel
em diversas linguagens de programao orientadas a
objetos.
A estrutura Try/Catch, mesmo estando disponveis em diversas linguagens de programao,
apresentam estruturas similares e funes idnticas.
Como exemplo, podemos tirar o uso do
Try/Catch na linguagem Java, comentado abaixo por
(Manzano, 2011):
Para o tratamento de excees na linguagem
Java, por exemplo, ela utiliza como comando de
tratamento a clusula try (testar) que pode usar um
conjunto subsequente de excees tratadas pela
clusula catch (capturar). O trecho do cdigo de
programa que necessita ser testado (para saber se
valido) definido aps a instruo try e antes da
instruo catch como se fosse uma ao vlida. Se
nenhum erro for constatado, o teste foi bem-sucedido
e o programa continua seu processamento normalmente aps o final do bloco catch. No entanto, se
algum erro ocorrer na operao, o bloco catch
ento executado dando a possibilidade de fazer o
tratamento da exceo.
2.3 Bloco Try/Catch em MATLAB
Em (Chapman, 2006) o bloco try/catch,
descrito como se segue:

A construo try/catch uma construo de


ramificao especial para capturar erros. Normalmente, quando um programa MATLAB encontra
um erro durante a execuo, o programa aborta. A
construo try/catch modifica esse comportamentopadro. Se ocorrer um erro em uma declarao no
bloco try desta construo, em vez de abortar o programa executar o cdigo dentro do bloco catch e
continuar a execuo. Com isso, o programador
pode manipular erros dentro do programa sem provocar a parada do programa.
De maneira similar ao Java, o
MATLAB tambm permite o uso do bloco
Try/Catch com sintaxe semelhante. Para implementar um bloco Try/Catch em MATLAB, necessrio
apenas iniciar o bloco try, e os comandos que fizerem parte deste bloco sero verificados e executados,
caso no aja nenhum erro.
Abaixo do try, temos o bloco catch onde os
cdigos que estiverem presentes nesse bloco s sero
executados caso seja encontrado algum erro na execuo do bloco try, evitando ento um possvel erro
de exceo que poderia at mesmo forar o fim da
execuo do programa em questo.
3 Portas seriais (COM) e o Windows
Antes de falar sobre as portas COM, importante citar o conceito de interrupes, uma descrio deste apresentada abaixo segundo (Stallings,
2010):
As interrupes so fornecidas primeiramente
como um modo de melhorar a eficincia do processamento. Por exemplo, a maioria dos dispositivos
externos muito mais lenta do que o processador.
Aps cada operao de escrita, o processador deve
parar e permanecer ocioso at que o dispositivo o
alcance. A extenso dessa pausa pode estar na ordem de muitas centenas ou mesmo milhares de ciclos
de instruo que no envolvem memria. Claramente, esse um grande desperdcio de uso do processador.
As Solicitaes de Interrupo (Interrupt Request ou "IRQs") so o modo que os dispositivos
utilizam para avisar ao processador que precisam de
ateno. Na poca dos micros baseados no Z80
(TK90X, TK 82 e outros) a CPU ficava sempre consultando cada perifrico para ver se havia algum dado a ser processado. Isso consumia um tempo precioso do processador e em determinados programas
precisava ser desabilitado pelos programadores com
o uso de instrues especiais para acelerar o processamento.
Dois dispositivos no devem usar a mesma
interrupo, pelo menos no ao mesmo tempo, isso
pode confundir o programa que espera pela interrupo. E um programa "confuso" geralmente trava o

computador. Quando dois dispositivos esto usando


o mesmo recurso (no caso, uma mesma interrupo),
dizemos que esto em conflito.
Das 16 interrupes disponveis (que j so
poucas) existem algumas que so sempre utilizadas e
sobre cuja atribuio no tem escolha, conforme tabela 1:
Tabela 1. Solicitaes de Interrupo.

Interrupo
IRQ 0
IRQ 1
IRQ 2
IRQ 6
IRQ 8
IRQ 9
IRQ 13
IRQ 14

Descrio
Cronmetro do Sistema
Teclado (quando o buffer est cheio)
O prprio controlador de interrupes
Controladora de disco flexvel
CMOS do sistema/relgio de tempo
real
Usada pelo sistema
Processador de dados numrico
Controlador primrio de disco rgido

Obs: No possvel haver conflito nessas interrupes, porque os


"fios" correspondentes a elas no esto disponveis no barramento.

3.1 Portas Seriais


Segundo (Vasconcelos, 2002):
As interfaces seriais so muito antigas, existem nos PCs desde o incio dos anos 80. Sua principal caracterstica que podem transmitir ou receber
um bit de cada vez. As interfaces seriais existentes
nos PCs atuais podem operar com taxas de at
115.200 bits por segundo, o que uma velocidade
bastante lenta. Mesmo sendo lenta, este tipo de interface adequada para alguns dispositivos que no
necessitam de alta velocidade.
As portas seriais (COM) so um caso especial, pois, normalmente quando um programa procura por um dispositivo ele utiliza seu endereo absoluto, mas quando ele procura por uma porta COM ele
deve consultar antes uma tabela para saber qual o
endereo atual da porta. No caso, COM apenas
"apelido" para as posies na tabela onde se encontram os verdadeiros endereos. Os endereos padres
para as portas COM so apresentados na Tabela 2:
Tabela 2. Porta Com e seus endereos

Porta
COM1
COM2
COM3
COM4

End. Interrupo
3F8
2F8
3E8
2E8

No projeto original do computador, havia


duas portas de comunicao: COM1 e COM2 e a elas
foram atribudas as IRQs 4 e 3, respectivamente.
Mais tarde chegou-se concluso que mais duas
portas seriam teis e ento foram criadas as portas
COM3 e COM4. Mas no havia interrupes de so-

bra para atribuir a essas portas, por isso o projeto


prev que as novas portas devem "dividir" interrupes com as portas originais. Por fim, at hoje so
utilizadas as seguintes divises:
COM1 e COM3 dividem a IRQ4;
COM2 e COM4 dividem a IRQ3;
Em teoria, voc pode perfeitamente utilizar
as 4 portas ao mesmo tempo, desde que as 4 portas
no precisem usar as interrupes, ao mesmo tempo.
Como regra geral para evitar problemas, se voc utilizar a COM1, no deve utilizar COM3, o mesmo
vale entre a COM2 e a COM4 que no devem ser
utilizadas simultaneamente.
Quando o computador inicializado, o programa armazenado na BIOS procura em sequncia
pela existncia de portas nos endereos padro. A
cada porta encontrada atribudo um apelido, tambm em sequncia.
Essa atribuio sequencial de apelidos gera
um problema: Se voc optar, por exemplo, por instalar um dispositivo cujo endereo, tecnicamente, seria
atribudo a COM4, essa placa vai receber um apelido que depender das portas j instaladas no sistema. Se no existir uma porta COM2, a BIOS vai atribuir o apelido COM2 ao dispositivo em questo. Os
endereos devem ser utilizados de maneira sequencial.
3.2 Plug-and-Play
Segundo (Shanley, 1995):
Drivers de dispositivos Plug and play devem suportar os seguintes recursos:
No caso de um dispositivo ser adicionado
ou removido durante seu tempo de execuo, o driver deve ser capaz de carrega-lo ou descarrega-lo
da memria atravs do gerenciador de configurao.
O driver deve ser capaz de trabalhar com
seu dispositivo associado independentemente de qual
sistema bus ele estiver. Em outras palavras, o mesmo
driver deve trabalhar com o dispositivo se ele estiver
no processador, PCI, EISA, MCA, ISA bus ou instalado em um slot PCMCIA . A Microsoft refere-se a
isso como um drive classe, porque trabalha com
uma classe de dispositivos, em vez de uma implementao especifica do mesmo.
O driver deve ser capaz de trocar mensagens com o SO(Sistema Operacional) e as aplicaes
dos programas se seu dispositivo associado est
instalado ou removido enquanto a mquina estiver
em execuo(ento as aplicaes dos programas que
requerem a presena do dispositivo so avisados de
sua presena ou ausncia).
A especificao Plug-and-Play (PnP), que
significa "encaixe e use", teve como proposta de
acabar com as dores de cabea decorrente de conflitos de interrupo no computador. Segundo a especi-

ficao, o computador pode se comunicar com os


dispositivos, saber dos recursos que necessitam e
configur-los automaticamente para que no entrem
em conflito uns com os outros.
Isso parece muito bom primeira vista, mas
no nada fcil ser implementado. necessrio saber que para ter um sistema verdadeiramente PnP
deve-se cumprir trs condies:
1. O sistema Operacional precisa ser compatvel;
2. A BIOS da placa-me deve ser compatvel;
3. Todas os dispositivos que voc utiliza no computador precisam ser PnP.
Se as condies 1 e 2 no forem satisfeitas,
no adianta fazer uso de dispositivos PnP que isso
no ir ajudar. O usurio ainda ir precisar escolher
os endereos e interrupes para evitar conflitos de
maneira manual. Talvez ele no precise ficar alterando jumpers nos dispositivos, mas ser necessrio
utilizar softwares que acompanham estes dispositivos.
4 Reconhecimento de portas serial COM de forma automtica utilizando ambiente MATLAB
4.1 Descrio da Rotina
A proposta inicial dessa rotina era resolver
um problema identificado durante o desenvolvimento
de uma aplicao MATLAB para controle de componentes presentes em um kit didtico de microcontroladores utilizando comunicao serial, onde este
ao ser conectado em um computador com Windows recebia um endereo de porta de comunicao serial (Porta COM) automaticamente. Ao iniciar
a aplicao em desenvolvimento, por padro a porta
utilizada era a COM1, porm, certo dia o kit didtico
foi reconhecido como COM9 (este era utilizado fazendo uso de um adaptador USB-to-Serial) dando
origem ento a um erro de execuo da aplicao no
MATLAB.
Com isso passou-se a buscar uma forma de
solucionar esse problema. Optou-se, ento fazer uso
do bloco try/catch para fazer uma busca a todas as
portas de comunicao serial (Portas COM) existentes no computador na ferramenta de interface, em
tempo de execuo.
4.2 Funcionalidades da Rotina
Ao iniciar a aplicao, o usurio se depara
com uma tela que pergunta se ele quer fazer uso da
rotina de localizao automtica das portas de comunicao serial ou se ele deseja configurar manualmente qual porta COM ele deseja utilizar. Caso o
usurio escolha configurar manualmente, a aplicao
solicita apenas o nmero k referente ao endereo

COMk, configurando ento a porta serial a ser utilizada pela aplicao.


Ao selecionar o reconhecimento automtico,
a rotina iniciada, funcionando da seguinte forma:
em um bloco for feito um teste com as portas
COM1 COM10 onde este consiste em configurar os
parmetros para cada porta tentando abrir a comunicao com a mesma logo em seguida, utilizando a
funo fopen do MATLAB. No trecho de cdigo
que se segue apresentada a rotina.
function trySer()
loadVars; % variveis pblicas do sistema
l = 1;
for k = 1:10
COMTXT = strcat('COM',int2str(k));
try
delete(instrfind);
% limpa objetos COM
SerPIC = serial(COMTXT);
set(SerPIC,'BaudRate',serBaudRate);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);
% tenta abrir a serial
portSer(l) = k; % Array que armazena os nmeros
% das portas COM disponveis
l = l + 1;
catch
end
% try
end
% for
l = l - 1;
if l == 0
fprintf('No foram localizadas portas COM).\n');
else if l == 1
serPort = strcat('COM',int2str(portSer(1)))
fprintf('Configurada a porta de comunicao COM%i.\n',portSer(1));
serInit;
valuePortDefault = portSer(1);
serPortDefault = serPort;
else
fprintf('Foram localizadas %i portas COM. So elas:\n',l);
for k = 1:l
fprintf(' COM%i',portSer(k));
end
porta=input('\nQual o nmero da COM que voc deseja usar:\n');
serPort = strcat('COM',int2str(porta));
serInit;
valuePortDefault = porta;
serPortDefault = serPort;
end
% if l == 0
end

Caso o programa no apresente erro ao executar os comandos contidos no bloco try, o nmero k
referente porta de comunicao em questo armazenado em uma coluna de uma matriz de uma linha.
Se a rotina encontrar mais de uma porta
COM disponvel no computador, ela ir perguntar ao
usurio qual porta COM ele deseja utilizar. Se o programa no detectar nenhuma porta COM disponvel,
o usurio receber a recomendao de verificar se as
portas de comunicao serial (Portas COM) esto
sendo utilizadas por outra aplicao ou se o equipamento possui algum problema na comunicao com
o novo dispositivo em uso.
4.2 Resultados obtidos pela utilizao da rotina

A interface utilizada para testar a rotina de


reconhecimento automtico de portas seriais de comunicao faz parte de um projeto de iniciao tecnolgica do CNPq, que utiliza uma interface grfica
desenvolvida utilizando cdigos da linguagem orientada a objetos MATLAB para controlar diversos
componentes de um kit didtico microcontrolado. Na
figura 1 encontra-se ilustrada a tela principal da interface.
O kit didtico faz uso do microcontrolador
PIC 18F4550, que faz uso de um firmware desenvolvido em Linguagem C, para diversos controles, e
que se comunica com o computador atravs de um
adaptador USB-serial, utilizando uma interface desenvolvida em ambiente MATLAB.

guardando o nmero referente a cada porta COM


disponvel no computador.
Ao final dos testes, se houver apenas uma
porta COM, o programa automaticamente configura
a porta encontrada para a aplicao, se houverem
vrias portas encontradas o programa exibe uma
mensagem exibindo todas as portas COM encontradas para o usurio escolher qual ele deseja fazer uso,
conforme o texto a seguir:
Inicializando

componentes...

Deseja localizar a porta serial utilizada automaticamente? (Digite 1 para sim e 0 para no)
1
Localizando Porta Serial...
As seguintes portas de comunicao serial (Portas
COM) foram localizadas:
COM1 COM2 COM3
Digite o nmero da COM que voc deseja utilizar:

Figura 1. Tela inicial da aplicao em desenvolvimento.

Para realizar os testes da rotina, utilizamos


um adaptador USB-to-Serial, pois, o notebook utilizado no possui portas seriais fsicas. A rotina tambm foi testada tambm em computadores que possuem portas seriais fsicas, e o resultado obtido foi o
mesmo.
Ao conectar o kit didtico de microcontroladores ao computador, o Windows automaticamente
identifica um novo dispositivo conectado a suposta
porta serial do adaptador USB-to-Serial, atribuindo
ento um endereo no formato COMk, onde k representa um nmero inteiro.
Na aplicao foi implementado a rotina appInit que inicializa o software a qualquer momento
pelo usurio para atualizao das portas seriais. No
cdigo da appInit solicitado ao usurio se o mesmo
deseja a localizao e configurao automtica de
porta serial, ou se configurao manual, texto a seguir:
Inicializando componentes...
Deseja localizar a porta serial utilizada automaticamente? (Digite 1 para sim e 0 para no)
Ao selecionar o uso da rotina de reconhecimento automtico de porta serial, o usurio se depara
ento com o aviso Localizando porta serial..., onde
a rotina inicia os testes desde a COM1 at a COM10

Aps configurar a porta serial, se no existir


nenhum impedimento no uso da porta serial de comunicao selecionada, a tela inicial da aplicao
exibida e o usurio pode fazer uso normalmente da
mesma. Se existir algum erro ao configurar a porta
serial utilizada, o usurio notificado para verificar
se a porta COM escolhida est sendo utilizada por
outra aplicao ou se existe algum problema na comunicao.

Figura 2. Tela de configurao da aplicao de controle do kit


didtico, que est sendo desenvolvida.

Figura 3. Tela de configurao da aplicao de controle do kit


didtico, que est sendo desenvolvida.

Na aba de opes da interface do aplicativo,


permitido ao usurio alterar a porta configurada
COM configurada para comunicao com o kit didtico plugado na porta, conforme exibidos nas figuras
2 e 3.
Na hiptese do usurio alterar a porta COM
na aba de opes da interface grfica e selecionar
uma porta no existente ou ocupada, a aplicao
apenas reabre a tela de configurao exibindo a porta
serial default que foi configurada na inicializao da
aplicao, com uso da rotina de localizao automtica ou configurao manual do usurio.
4 Concluso
Os erros de exceo acontecem com muita
frequncia nos sistemas atuais, e quando no tratados
causam instabilidade no sistema.
A implementao desta rotina de reconhecimento automtico de portas seriais mostrou-se eficaz e automatizou o processo de comunicao com
equipamentos microcontrolados. O uso dessa rotina
pode se dar em diversas aplicaes de vrias linguagens de programao que tambm possuem a estrutura Try/Catch ou similares, sendo necessria apenas a
adaptao do programa conforme a sintaxe da ferramenta em uso.
5 Marcas Registradas
Windows marca registrada de Microsoft Corporation; Java marca registrada de
Sun Microsystems Inc.; PIC marca registrada de Microchip; MATLAB marca registrada
de MathWorks; C++ foi desenvolvido originalmente pela Bell Labs; Phyton marca registrada de Python Software Foundation; Delphi
marca registrada de Delphi Automotive LLP; Eiffel
marca registrada de Eiffel Software; Z80
marca registrada de Zilog;Todos os demais nomes,
marcas registradas, propriedades ou direitos de uso
citados neste artigo pertencem aos seus devidos proprietrios e foram utilizados neste trabalho apenas
com contexto didtico, no existindo relao comercial entre este artigo e seus devidos autores com os
fabricantes e desenvolvedores dos produtos citados;
Agradecimentos
Os autores agradecem a todos que contriburam como desenvolvimento do trabalho. Em particular, os autores deste trabalho agradecem aos membros Grupo de Inovao da Paraba (GYNPA), pelo
espao oferecido para a realizao dos trabalhos, ao

Instituto Federal de Educao, Cincia e Tecnologia


da Paraba (IFPB) e ao CNPq, pelo apoio financeiro.
Referncias Bibliogrficas
Manzano, Jos Augusto N. G. (2011) - Java 7:
Programao de computadores: guia prtico de
introduo, orientao e desenvolvimento
1.ed. So Paulo: rica, 2011.
Deitel, H. M.; Deitel, P. J. (2001) - Java: Como
programar. 3.ed. Porto Alegre: Bookman, 2001.
Chapman, S. J. (2006)Programao em MATLAB
para engenheiros. So Paulo: Thomson, 2006.
Stallings, Willian (2010) - Arquitetura e organizao
de computadores, 8. ed. So Paulo: Pearson
Pratice Hall, 2010.
Vasconcelos, Laercio (2002) Hardware Total 1.
ed. So Paulo. Makron Books, 2002.
Shanley,Tom (1995) - PLUG and PLAY SYSTEM
ARCHITECTURE 1. ed. Estados Unidos da
Amrica. MindShare, 1995.