Visitantes que leram esse artigo, também visitaram:
  • Mantendo um número serial único
  • Controle do Programa no Visual Basic – Parte 1
  • MOTO W403 traz design arrojado, com funções de foto e música
  • Nextel e Motorola Lançam o i296
  • GPU Quadro FX 4800 da NVIDIA para o Mac


  • Visual Basic e a Comunicação Paralela e Serial

    Postado por Plinio Cruz em 5 de dezembro de 2003 na categoria Programação, Visual Basic | Seja o primeiro a comentar

    1 Estrela2 Estrela3 Estrela4 Estrela5 Estrela (Sem votos, vote agora!)
    Loading ... Loading ...

    Antes de começar quero deixar claro que eu não sou um profundo conhecedor do assunto Comunicação serial. Como nunca precisei fazer nada relacionado ao assunto confesso que não me sinto muito a vontade. Afinal eu não nasci sabendo e tenho muito o que aprender (graças a Deus…) por isso meu objetivo principal neste artigo e lançar as bases e os conceitos envolvidos na comunicação serial , indicando ferramentas e referências onde você vai encontrar muito material de ótima qualidade.

    A comunicação paralela e a serial são muito usadas como forma de controlar uma grande variedade de equipamentos eletromecânicos e eletrônicos e você pode acreditar que não precisa conhecer C ou C++ para criar uma interface que lhe possibilite interagir com estes equipamentos; você pode fazer isto usando o Visual Basic ( e até mesmo o Basic...)

    Existem algumas limitações que VB possui e que você vai ter que aprender a contornar. O Visual Basic não pode acessar diretamente o hardware em um sistema . Toda requisição feita a um hardware precisa passar pelo sistema operacional , no nosso caso o Windows. Por causa disto o mais perto que você vai conseguir chegar quando tentar realizar uma comunicação serial é em um componente do VB que faz a interface com o Sistema Operacional. (Uma forma de contornar isto é usar as chamadas a API diretamente no seu programa VB.)

    Um computador geralmente vem equipado com duas portas seriais e uma porta paralela para comunicação externa. A porta serial envia e recebe dados bit a bit enquanto que a porta paralela faz este serviço usando uma transmissões de múltiplos bits. Uma porta serial pode ser vista então uma interface entre um equipamento que exibe dados (Ex:Monitor ) e um equipamento que transmite dados (Ex:modem). 

    A princípio uma porta serial era usada primariamente para exibir dados em um terminal que eram entrados via teclado , mas com o avanço da tecnologia a utilização da porta serial foi sendo usada nas mais variadas aplicações. (Ex: transferência de dados entre Handhelds como o Palm). Nos tempos do bom e velho DOS (lembra dele) tínhamos a interface da linha de comando que foi substituida por uma interface mais amigável com o advento do Windows e do Visual Basic.

    O Visual Basic utiliza o componente - Microsoft Common Control : MSComm (MSCOMM32.OCX) para realizar a interface serial. Vamos então começar logo com um exemplo (se bem que não muito prático):

    - Objetivo :  Exibir o texto digitado em um terminal conectado na porta serial do computador. (Naturalmente a parte do código referente ao terminal deverá ser implementada para receber e exibir os caracteres)

    1. Inicie um novo projeto do tipo Standard EXE

    2. No formulário padrão – form1 – insira os seguintes controles :  Label , dois CommandButton , uma caixa de texto , um frame e dois botões de opção . Conforme figura abaixo a esquerda:

    O formulário principal da aplicação As propriedades do controle Mscomm

    O código da aplicação é exibido a seguir :

    Private Sub cmdEntra_Click()    ‘Envia o texto para a porta COMM
     
     MSComm1.Output = txtEntra.Text + Chr(13)
    End Sub


    Private Sub OptHabilita_Click()
    ‘Habilita a porta
    MSComm1.PortOpen = True

    ‘Configura Port como saida
    MSComm1.Output = “CPA00000000″ + Chr(13)
    End Sub


    Private Sub OptDesabilita_Click()

      ‘ Desabilita a porta serial
      MSComm1.PortOpen = False
    End Sub


    Private Sub cmdSair_Click()
    End
    End Sub
     
    - O código ao lado é muito simples: Após clicar no botão para habilitar a porta com ( que deve estar configurada conforme figura acima)

    O usuário digita o texto na caixa de texto do formulário e toda a vez que pressionar a tecla ENTER os caracteres digitados serão enviados para a porta serial.

    Você poderia ter configurado o controle MSComm via código. Abaixo um exemplo de configuração inserido no evento Load do formulário: (O nome do controle usado é MSComm1 )

    Private Sub Form_Load()

       MSComm1.CommPort = 1

       MSComm1.Settings = “19200,n,8,1″

       MSComm1.PortOpen = True

       MSComm1.InputLen = 0

    End Sub

    Obs: Ao programar para estas interfaces lembre-se sempre de fazer um tratamento de erro em seu código e de usar o DoEvents no seu código.Ex:

    Private Function PortaSerial()

    Dim timer1

    timer1 = Timer

    Do While ( timer1 – Timer) > 0 And MSComm1.inBufferCount = 0

       DoEvents

    Loop

    If MSComm1.InBufferCount =0 then

       msgbox = “porta COM – tempo esgotado”

    Endif

    PortaSerial = MSComm1.input

    End Function

    O objetivo do código é apenas mostrar como é simples enviar dados para a porta serial.

    Eu sei , eu sei , você ficou decepcionado , esperava mais , algo realmente prático , mas as aplicações práticas envolvendo  a porta serial interagem geralmente com um hardware que deve ser preparado para receber os comandos . Então eu vou dar alguns links onde existem aplicações práticas envolvendo as portas seriais , veja abaixo:

    1. Enviando dados para um Microcontrole – http://www.rentron.com/sending_data/htm

    2. Recebendo dados de um Microcontrole – http://www.rentron.com/receiving_data.htm

    Vamos falar agora da porta paralela. A porta paralela é formada por três secções diferentes:

    1. linhas de dados – Existem 8 linhas de dados e elas são usadas para obter informação da porta.

    2. linhas de controle – A linhas de dados possuem 4 saidas e fornecem o controle de sinais para a impressora ( alimentação de papel ,etc..)

    3. linhas de status. – Há 5 saídas nas linhas de status e elas são padrão e só recebem informações. Permitem a comunicação da impressora com o computador informando erros.

    Cada sessão é acessada pelo seu próprio endereço e atua de forma independente. O endereços são :

    1. Linhas de dados       -    888    378h

    2. LInhas de controle    -    890    37Ah

    3. Linhas de status      -     889   379h

    Um resumo mais detalhado da porta paralela é dado abaixo:

    36 pins 25 pins Nome Endereço Direção

    2
    3
    4
    5
    6
    7
    8
    9

    32
    13
    12
    10
    11

    1
    14
    31
    36

     

    2
    3
    4
    5
    6
    7
    8
    9

    15
    13
    12
    10
    11

    1
    14
    16
    17

     

    Data line 0
    Data line 1
    Data line 2
    Data line 3
    Data line 4
    Data line 5
    Data line 6
    Data line 7

    Error
    Select
    PE
    Ack
    Busy

    Strobe
    Auto Feed
    Init
    SLCT IN

     

    Basic Address , Bit 0
    Basic Address , Bit 1
    Basic Address , Bit 2
    Basic Address , Bit 3
    Basic Address , Bit 4
    Basic Address , Bit 5
    Basic Address , Bit 6
    Basic Address , Bit 7

    Basic Address +1 , Bit 3
    Basic Address +1 , Bit 4
    Basic Address +1 , Bit 5
    Basic Address +1 , Bit 6
    Basic Address +1 , Bit 7

    Basic Address +2 , Bit 0
    Basic Address +2 , Bit 1
    Basic Address +2 , Bit 2
    Basic Address +2 , Bit 3

     

    Out
    Out
    Out
    Out
    Out
    Out
    Out
    Out

    In
    In
    In
    In
    In, Inverted

    In / Out , Inverted
    In / Out , Inverted
    In / Out
    In / Out , Inverted

     

    E o que eu faço com isto , você pode estar perguntando ???  Ora bolas , você não quer usar a porta paralela ???

    Para fazer isto você precisa saber o endereço da porta que você quer usar , o comando para acessar a porta e o número que você quer atribuir na porta. As portas trabalham com números que podem ser expressos em decimais , binários ou hexadecimais. Nos exemplos vou usar a forma decimal , ok !. Você opera a porta enviando um número que representa o padrão binário da saída física na porta. Por exemplo para definir as oito linhas de dados para 11111111 você vai enviar o número 255. Para definí-las para 00000000 será enviado 0. Note que os números são binários de oito dígitos e temos oito saídas.

    Resumindo: Os dados que você obtêm e envia para a porta paralelas ( LPT )  são sempre binários :

    Dec        Binário
     1  =  0000 0001  Linha de dados
     2  =  0000 0010  Linha de dados
     3  =  0000 0011  Linha de dados
     4  =  0000 0100  Linha de dados

    E qual controle você usa para fazer isto ? Não tem !! é… , não tem . Você vai ter que usar algo que alguém desenvolveu para fazer isto. Felizmente existem gente boa por ai . Abaixo temos dois arquivos que você pode usar :( Eu não testei nenhum deles)

    1. VBASML.DLL – para VB 16 bits ( VB3 , VB4 -16)

    2. WIN95IO.DLL – para VB 32 bits ( VB5 , VB6)

    Antes de pode usar qualquer uma das funções contidas nos arquivos DLL você deve declará-las ( lembra…). Você pode fazer isto em um módulo bas do seu programa VB.Assim:

    Para 16bit VB (VBASM.DLL), use:

    Declare Function vbInp Lib "VBASM.DLL" (ByVal nPort As Integer) As Integer
    Declare Sub vbOut Lib "VBASM.DLL" (ByVal nPort As Integer, ByVal nData As Integer)
    

    Para 32bit VB (WIN95IO.DLL), use:

    Declare Sub vbOut Lib "WIN95IO.DLL" (ByVal nPort As Integer, ByVal nData As Integer)
    Declare Sub vbOutw Lib "WIN95IO.DLL" (ByVal nPort As Integer, ByVal nData As Integer)
    Declare Function vbInp Lib "WIN95IO.DLL" (ByVal nPort As Integer) As Integer
    Declare Function vbInpw Lib "WIN95IO.DLL" (ByVal nPort As Integer) As Integer
    

    Após fazer a declaração você terá acesso a dois comandos :

    • vbInp  – usado para enviar um bit para  porta : Sintaxe: vbOut [port],[number]

    • vbOut – usado para obter um valor da porta : Sintaxe : [variable]=vbInp([port])

    Mais detalhes ??? veja em :

    1. http://213.10.73.60/majosoft/vb/body_lpt_port.html

    2. http://www.aaroncake.net/eletronics/vblpt.htm

    Espero que esta pequena introdução básica lhe mostre a luz no fim do túnel.

    Nota: Se quiser algo relacionado para o VB.NET – veja o link : http://www.codeworks.it/net/VBNetRs232.htm

    Até breve…

    José Carlos Macoratti
    http://www.macoratti.net/

    Vídeo não pode ser exibido.

    Deixe seu comentário