Se você está desenvolvendo um programa usando o Visual Basic 6, e você quer ser capaz de acessar as portas seriais e paralelas , você deve inserir os códigos de programação Visual Basic específicos para o programa de . " VB " do arquivo. Você pode editar esse arquivo diretamente no ambiente de programação Visual Basic , mas o código para adicionar o acesso às portas seriais e paralelas é muito longo e específico. Instruções
1
Clique duas vezes no "Microsoft Visual Studio NET . " Ícone do programa para iniciar o programa . Clique no menu "File" , mova o cursor do mouse sobre a opção " Novo" e selecione a opção "Projeto" .
2
Clique na opção " Projetos do Visual Basic " abaixo da " , Tipos de Projeto " título . Clique na opção " Console Application " sob os "Modelos " título.
3
Digite um nome para a aplicação no espaço fornecido e clique no botão "OK" para criar o projeto. O arquivo " Module1.vb " abre automaticamente
4
Cole o seguinte código no arquivo " Module1.vb " do projeto antes da linha de código que lê " Module Module1 " : . < Br > Opção
Strict On
' Definir uma classe CommException que herda da classe ApplicationException ', e em seguida, atirar um objeto do tipo CommException quando você recebe um erro message.Class CommExceptionInherits ApplicationExceptionSub New (ByVal Reason as String ) MyBase.New (Razão ) Fim SubEnd Classe
5
cole o seguinte código no arquivo " Module1.vb " do projeto após a linha de código que lê " Module Module1 " :
'Declare structures.Public Estrutura DCBPublic DCBlength Como Int32Public BaudRate Como Int32Public fBitFields Como Int32 ' Ver Comentários em Win32API.TxtPublic wReserved Como Int16Public XonLim Como Int16Public XoffLim Como Int16Public ByteSize Como Paridade BytePublic Como BytePublic StopBits Como BytePublic XonChar Como BytePublic XoffChar Como BytePublic ErrorChar Como BytePublic EofChar Como BytePublic EvtChar Como BytePublic wReserved1 Como Int16 ' reservado, não UseEnd Estrutura
Estrutura Pública COMMTIMEOUTSPublic ReadIntervalTimeout Como Int32Public ReadTotalTimeoutMultiplier Como Int32Public ReadTotalTimeoutConstant Como Int32Public WriteTotalTimeoutMultiplier Como Int32Public WriteTotalTimeoutConstant Como Int32End Estrutura
'Declare constants.Public Const GENERIC_READ Como Int32 = & H80000000Public Const GRAVAÇÃO_GENÉRICA Como Int32 = & H40000000Public Const OPEN_EXISTING Como Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL Como Int32 = & H80Public Const NOPARITY Como Int32 = 0Public Const ONESTOPBIT Como Int32 = 0
'Declare referências a functions.Public externo Declare Function Auto CreateFile Lib " kernel32.dll " _ (ByVal lpFileName As String , ByVal dwDesiredAccess Como Int32, _ByVal dwShareMode Como Int32, ByVal lpSecurityAttributes Como IntPtr, _ByVal dwCreationDisposition Como Int32, ByVal dwFlagsAndAttributes Como Int32, _ByVal hTemplateFile Como IntPtr) Como Declarar IntPtr
Pública Auto Função GetCommState Lib " kernel32.dll " ( NCID ByVal como IntPtr, _ByRef lpDCB Como DCB ) As Boolean
Public Declare Função Auto SetCommState Lib " kernel32.dll " ( NCID ByVal como IntPtr, _ByRef lpDCB Como DCB ) Como Declarar booleano
Pública GetCommTimeouts Função Auto Lib " kernel32.dll " (ByVal hFile Como IntPtr, _ByRef lpCommTimeouts Como COMMTIMEOUTS ) Como Declarar booleano
Pública SetCommTimeouts Função Auto Lib " kernel32.dll " (ByVal hFile Como IntPtr, _ByRef lpCommTimeouts Como COMMTIMEOUTS ) Como Declarar booleano
Pública Função Auto WriteFile Lib " kernel32 . dll " (ByVal hFile Como IntPtr, _ByVal lpBuffer As Byte () , ByVal nNumberOfBytesToWrite Como Int32, _ByRef lpNumberOfBytesWritten Como Int32, ByVal lpOverlapped Como IntPtr) Como Declarar booleano
Pública Função Auto ReadFile Lib" kernel32.dll " , ( ByVal hFile Como IntPtr, _ByVal lpBuffer As Byte () , ByVal nNumberOfBytesToRead Como Int32, _ByRef lpNumberOfBytesRead Como Int32, ByVal lpOverlapped Como IntPtr) Como Declarar booleano
Pública Função Auto CloseHandle Lib " kernel32.dll " ( ByVal hObject Como IntPtr) as Boolean
6
cole o seguinte código no arquivo " Module1.vb " do projeto após a linha de código que lê " Sub Main " :
'Declare as variáveis locais que você irá usar no code.Dim hSerialPort , hParallelPort Como IntPtrDim Sucesso Como BooleanDim myDCB Como DCBDim MyCommTimeouts Como COMMTIMEOUTSDim BytesWritten , BytesRead Como Int32Dim buffer ( ) as Byte
' Declare as variáveis para usar para encoding.Dim oEncoder As New System.Text.ASCIIEncodingDim oEnc Como System.Text.Encoding = oEncoder.GetEncoding ( 1252)
'Converter string para Byte (). buffer = oEnc.GetBytes ( "Teste" ) Try ' Acesse o port.Console.WriteLine série ( "Acessando a porta serial COM1 ")' obter um identificador para a COM1 série port.hSerialPort = CreateFile ( "COM1 " , GENERIC_READ Ou GRAVAÇÃO_GENÉRICA , 0, IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Verifique se o identificador obtido é valid.If hSerialPort.ToInt32 = -1 ThenThrow New CommException ( "Não foi possível obter um identificador para a porta COM1 " ) End If ' Recuperar as configurações de controle atuais. Sucesso = GetCommState ( hSerialPort , myDCB ) Se Sucesso = False ThenThrow New CommException ( " Não é possível recuperar as configurações atuais de controle " ) End If 'Modificar as propriedades da estrutura DCB recuperado conforme o caso. " AVISO: Certifique-se de modificar as propriedades de acordo com sua apoiado values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Reconfigurar COM1 com base nas propriedades da DCB modificado structure.Success = SetCommState ( hSerialPort , myDCB ) Se Sucesso = False ThenThrow New CommException ( "Não é possível reconfigurar COM1 " ) End If ' recupere os atuais de tempo limite settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) Se Sucesso = False ThenThrow New CommException ( " Não foi possível recuperar atuais configurações de tempo limite " ) End If 'Modificar as propriedades da estrutura COMMTIMEOUTS recuperado conforme o caso. " AVISO: Certifique-se de modificar as propriedades de acordo com sua apoiado values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Reconfigurar as configurações de tempo limite , com base nas propriedades da modificação COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) Se Sucesso = False ThenThrow New CommException ( "Não é possível reconfigurar as configurações de tempo limite " ) End If ' Escreve dados para COM1.Console.WriteLine ( "Escrevendo os seguintes dados para COM1: Test ") Sucesso = WriteFile ( hSerialPort , buffer, buffer.Length , BytesWritten , IntPtr.Zero ) Se Sucesso = False ThenThrow New CommException ( " Não foi possível gravar a COM1 " ) End If 'Ler dados de COM1.Success = ReadFile ( hSerialPort , buffer, BytesWritten , BytesRead , IntPtr.Zero ) Se Sucesso = False ThenThrow New CommException ( " Não é possível ler COM1 ") End IfCatch ex Como ExceptionConsole.WriteLine ( ex.Message ) Finally ' Solte a alça para COM1 . Sucesso = CloseHandle ( hSerialPort ) Se Sucesso = ThenConsole.WriteLine Falso ( "Não é possível liberar alça para COM1 " ) Try End IfEnd
7
cole o seguinte código imediatamente após o código inserido no arquivo " Module1.vb " no Passo 6:
Try ' port.Console.WriteLine paralela ( "Acessando a porta paralela LPT1 ")' obter um identificador para a LPT1 paralelo port.hParallelPort = CreateFile ( " ; LPT1 " , GENERIC_READ Ou GRAVAÇÃO_GENÉRICA , 0, IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Verifique se o identificador obtido é valid.If hParallelPort.ToInt32 = -1 ThenThrow New CommException ( " Não foi possível obter um identificador para a porta LPT1 " ) End If ' recuperar o controle atual settings.Success = GetCommState ( hParallelPort , myDCB ) Se Sucesso = False ThenThrow New CommException ( " Não é possível recuperar as configurações atuais de controle " ) End If ' Modificar as propriedades do recuperados DCB estrutura conforme o caso. " AVISO: Certifique-se de modificar as propriedades de acordo com sua apoiado values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Reconfigurar LPT1 com base nas propriedades da DCB modificado structure.Success = SetCommState ( hParallelPort , myDCB ) Se Sucesso = False ThenThrow New CommException ( "Não é possível reconfigurar LPT1 " ) End If ' recupere os atuais de tempo limite settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) Se Sucesso = False ThenThrow New CommException ( " Não foi possível recuperar atuais configurações de tempo limite " ) End If 'Modificar as propriedades da estrutura COMMTIMEOUTS recuperado conforme o caso. " AVISO: Certifique-se de modificar as propriedades de acordo com sua apoiado values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Reconfigurar as configurações de tempo limite , com base nas propriedades da modificação COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) Se Sucesso = False ThenThrow New CommException ( "Não é possível reconfigurar as configurações de tempo limite " ) End If ' Escreve dados para LPT1. 'Nota: Você não pode ler dados de uma porta paralela , chamando o ReadFile function.Console.WriteLine ( "Escrevendo os seguintes dados para LPT1: Test") Sucesso = WriteFile ( hParallelPort , Buffer, buffer.Length , BytesWritten , IntPtr.Zero ) Se Sucesso = False ThenThrow New CommException ( "Não é possível escrever em LPT1 ") End IfCatch ex Como ExceptionConsole.WriteLine ( ex.Message ) Finally ' Solte a alça para LPT1.Success = CloseHandle ( hParallelPort ) Se Sucesso = False ThenConsole . WriteLine ( "Não é possível liberar alça para LPT1 ") End IfEnd Experimente em
Console.WriteLine (" Pressione ENTER para sair" ) Console.ReadLine ()
8
Clique na "Build " no menu e selecione a opção " Build Solution " . Clique no menu " Debug " e selecione a opção " Start". O aplicativo agora tem acesso às portas seriais e paralelas .