Visual Basic 6 e a Comunicação Paralela e Serial
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)
|
|
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 Private Sub OptHabilita_Click() Private Sub OptDesabilita_Click() ' Desabilita a porta serial Private Sub cmdSair_Click() |
- 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:
Vamos falar agora da porta paralela. A porta paralela é formada por três secções diferentes:
Cada sessão é acessada pelo seu próprio endereço e atua de forma independente. O endereços são :
Um resumo mais detalhado da porta paralela é dado abaixo:
36 pins | 25 pins | Nome | Endereço | Direção |
2 32 1
|
2 15 1
|
Data line 0 Error Strobe
|
Basic Address , Bit 0 Basic Address +1 , Bit 3 Basic Address +2 , Bit 0
|
Out In 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)
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 :
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...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: