Si está desarrollando un programa en Visual Basic 6, y desea tener acceso a los puertos serie y paralelo , debe insertar los códigos de programación de Visual Basic específicos en el programa de archivo " . VB " . Puede editar este archivo directamente en el entorno de programación Visual Basic, pero el código para agregar el acceso a los puertos serie y paralelo es muy larga y específica. Instrucciones
1
doble clic en el " Studio. NET Microsoft Visual " icono del programa para iniciar el programa. Haga clic en el menú " Archivo" , mueva el cursor del ratón sobre la opción "Nuevo " y seleccione la opción "Proyecto" .
2
clic la opción " Proyectos de Visual Basic " por debajo de la " , tipos de proyectos "la partida. Haga clic en la opción " Aplicación de consola " bajo las "Plantillas " la partida .
3 Escriba un nombre para la aplicación en el espacio correspondiente y haga clic en el botón " OK" para crear el proyecto . El archivo " Module1.vb " se abre automáticamente
4
Pega el siguiente código en el archivo " Module1.vb " del proyecto antes de la línea de código que lee " Módulo 1 Módulo ": . < Br > Opción
Strict On
'Define una clase CommException que hereda de la clase ApplicationException ', y luego tirar un objeto de tipo CommException cuando se recibe un error message.Class CommExceptionInherits ApplicationExceptionSub Nuevo (Razón ByVal As String ) MyBase.New (Razón ) End Class SubEnd
5
Pega el siguiente código en el archivo del proyecto " Module1.vb " después de la línea de código que dice " Módulo 1 Módulo ":
'Declarar Estructura structures.Public DCBlength DCBPublic Como BaudRate Int32Public Como fBitFields Int32Public Como Int32 ' Ver comentarios en Win32API.TxtPublic wReserved Como Int16Public XonLim Como XoffLim Int16Public Como ByteSize Int16Public Como BytePublic Paridad Como StopBits BytePublic Como BytePublic XonChar Como BytePublic XoffChar Como BytePublic ErrorChar Como BytePublic EofChar Como BytePublic EvtChar Como BytePublic wReserved1 Como Int16 ' Reservado , no lo UseEnd Estructura
Public Structure ReadIntervalTimeout COMMTIMEOUTSPublic Como ReadTotalTimeoutMultiplier Int32Public Como Int32Public ReadTotalTimeoutConstant Como WriteTotalTimeoutMultiplier Int32Public Como Int32Public WriteTotalTimeoutConstant Como Estructura Int32End
'Declarar GENERIC_READ Const constants.Public Como Int32 = & H80000000Public GENERIC_WRITE Const Como Int32 = & Const H40000000Public OPEN_EXISTING Como Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL Como Int32 = & H80Public NOPARITY Const Como Int32 = 0Public Const ONESTOPBIT Como Int32 = 0
'Declarar referencias a functions.Public Declarar Auto función CreateFile Lib " kernel32.dll " _ ( lpFileName ByVal As String , ByVal dwDesiredAccess como Int32, _ByVal dwShareMode Como Int32 , lpSecurityAttributes ByVal As IntPtr , dwCreationDisposition _ByVal como Int32, ByVal externa dwFlagsAndAttributes como Int32, _ByVal hTemplateFile Como IntPtr ) como IntPtr
Public Declare Auto Función GetCommState Lib " kernel32.dll " ( ByVal NCID Como IntPtr , _ByRef lpDCB Como DCB ) As Boolean
Public Declare Función Auto SetCommState Lib " kernel32.dll " ( ByVal NCID Como IntPtr , _ByRef lpDCB Como DCB ) As Boolean
Public Declare Function GetCommTimeouts Auto Lib " kernel32.dll " ( ByVal hFile Como IntPtr , lpCommTimeouts _ByRef Como COMMTIMEOUTS ) As Boolean
Public Declare Function SetCommTimeouts Auto Lib " kernel32.dll " ( ByVal hFile Como IntPtr , lpCommTimeouts _ByRef Como COMMTIMEOUTS ) As Boolean
Public Declare Auto función WriteFile Lib " kernel32 . dll " ( ByVal hFile Como IntPtr , _ByVal lpBuffer As Byte (), ByVal nNumberOfBytesToWrite como Int32, _ByRef lpNumberOfBytesWritten como Int32, ByVal lpOverlapped Como IntPtr ) As Boolean
Public Declare Auto función ReadFile Lib" kernel32.dll " ; ( ByVal hFile Como IntPtr , lpBuffer _ByVal As Byte (), ByVal nNumberOfBytesToRead como Int32, _ByRef lpNumberOfBytesRead como Int32, ByVal lpOverlapped Como IntPtr ) As Boolean
Public Declare Function Auto CloseHandle Lib " kernel32.dll " ( ByVal hObject Como IntPtr ) As Boolean
6
Pega el siguiente código en el archivo del proyecto " Module1.vb " después de la línea de código que dice " Sub Main ":
'Declarar las variables locales que se utilizarán en el code.Dim hSerialPort , hParallelPort Como IntPtrDim éxito Como BooleanDim MyDCB Como MyCommTimeouts DCBDim Como COMMTIMEOUTSDim BytesWritten , BytesRead Como Int32Dim Buffer ( ) As Byte
' Declara las variables a utilizar para encoding.Dim oEncoder As New System.Text.ASCIIEncodingDim oEnc Como System.Text.Encoding = oEncoder.GetEncoding ( 1252 )
' Convertir String Byte (). Buffer = oEnc.GetBytes ( "Test" ) Try ' Accede al port.Console.WriteLine serie ( "Acceso al puerto serie COM1" ) ' Obtener un identificador para el serial COM1 port.hSerialPort = CreateFile ( "COM1 " , GENERIC_READ O GENERIC_WRITE , 0, IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Comprobar que el identificador obtenido es valid.If hSerialPort.ToInt32 = -1 ThenThrow Nueva CommException ( "No se puede obtener un identificador para el puerto COM1 ") End If' Recuperar la configuración de control actual . éxito = GetCommState ( hSerialPort , MyDCB ) Si Success = False ThenThrow Nueva CommException ( " No se puede recuperar la configuración de control actual ") End If 'Modificar las propiedades de la estructura DCB recuperada de forma adecuada . ADVERTENCIA : asegúrese de modificar las propiedades según su values.MyDCB.BaudRate apoyada = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits ONESTOPBIT = ' COM1 Vuelva a configurar en base a las propiedades de la modificación DCB structure.Success = SetCommState ( hSerialPort , MyDCB ) Si Success = False ThenThrow Nueva CommException ( "No se puede volver a configurar COM1 ") End If ' recuperar el actual tiempo de espera settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) Si Success = False ThenThrow Nueva CommException ( "No se puede recuperar configuración de tiempo de espera actual ") End If ' Modificar las propiedades de la estructura COMMTIMEOUTS recuperada de forma adecuada . ADVERTENCIA : asegúrese de modificar las propiedades según su values.MyCommTimeouts.ReadIntervalTimeout apoyada = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Volver a configurar los ajustes de tiempo de espera , en base a las propiedades de la modificación COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) Si Success = False ThenThrow Nueva CommException ( "No se puede volver a configurar los ajustes de tiempo de espera ") End If ' Escribir datos en COM1.Console.WriteLine ( "Escribir los siguientes datos para COM1 : Prueba " ) éxito = WriteFile ( hSerialPort , Buffer , buffer.length , BytesWritten , IntPtr.Zero ) Si Success = False ThenThrow Nueva CommException ( " No se puede escribir en COM1 " ) End If 'Leer datos de COM1.Success = ReadFile ( hSerialPort , Buffer , BytesWritten , BytesRead , IntPtr.Zero ) Si Success = False ThenThrow Nueva CommException ( " No se puede leer COM1 ") End IfCatch ex As ExceptionConsole.WriteLine ( ex. Mensaje ) Finally ' Suelte la palanca para COM1 . éxito = CloseHandle ( hSerialPort ) Si Success = False ThenConsole.WriteLine ( "No se puede liberar el mango para COM1 ") End Try IfEnd
7
Pegue el código siguiente inmediatamente después del código que ha insertado en el archivo " Module1.vb " en el paso 6 :
Prueba ' port.Console.WriteLine paralelo ( "Acceso al puerto paralelo LPT1 ") ' Obtener un identificador para el LPT1 paralelo port.hParallelPort = CreateFile ( " ; LPT1 " , GENERIC_READ O GENERIC_WRITE , 0, IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Comprobar que el identificador obtenido es valid.If hParallelPort.ToInt32 = -1 ThenThrow Nueva CommException ( " No se puede obtener un identificador para el puerto LPT1 ") End If ' recuperar el control actual settings.Success = GetCommState ( hParallelPort , MyDCB ) Si Success = False ThenThrow Nueva CommException ( " No se puede recuperar la configuración de control actual ") End If ' Modificar las propiedades de la recuperada estructura DCB en su caso ». ADVERTENCIA : asegúrese de modificar las propiedades según su values.MyDCB.BaudRate apoyada = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' LPT1 Reconfigurar basado en las propiedades de la modificación DCB structure.Success = SetCommState ( hParallelPort , MyDCB ) Si Success = False ThenThrow Nueva CommException ( "No se puede volver a configurar LPT1 ") End If ' recuperar el actual tiempo de espera settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) Si Success = False ThenThrow Nueva CommException ( "No se puede recuperar configuración de tiempo de espera actual ") End If ' Modificar las propiedades de la estructura COMMTIMEOUTS recuperada de forma adecuada . ADVERTENCIA : asegúrese de modificar las propiedades según su values.MyCommTimeouts.ReadIntervalTimeout apoyada = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Volver a configurar los ajustes de tiempo de espera , en base a las propiedades de la modificación COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) Si Success = False ThenThrow Nueva CommException ( "No se puede volver a configurar los ajustes de tiempo de espera ") End If ' Escribir datos en LPT1 . ' Nota : No se pueden leer los datos de un puerto paralelo llamando al ReadFile function.Console.WriteLine ( "Escribiendo los datos siguientes en LPT1: Prueba" ) Éxito = WriteFile ( hParallelPort , Buffer , buffer.length , BytesWritten , IntPtr.Zero ) Si Success = False ThenThrow Nueva CommException ( "No se puede escribir en LPT1 ") End IfCatch ex As ExceptionConsole.WriteLine ( ex. Mensaje ) Finally ' Suelte la palanca para LPT1.Success = CloseHandle ( hParallelPort ) Si Success = False ThenConsole . WriteLine ( "No se puede liberar mango en LPT1 ") End Try IfEnd
Console.WriteLine ( "Presione ENTRAR para salir ") Console.ReadLine ()
8
Haga clic en el "Build " y seleccione la opción " Generar solución " . Haga clic en el menú " Debug" y seleccione la opción "Start" . La aplicación tiene acceso a los puertos serie y paralelo.