Make your own free website on Tripod.com

CODIGO EN VISUAL BASIC

 

Private Sub Boton_Abrir_Click()
'Al pulsar aquí abre un puerto serial
On Error GoTo manejar_errores
MSComm1.CommPort = nro_puerto 'Paso 1: elijo el puerto
MSComm1.Settings = Str$(velocidad) + ",N,8,1" 'Paso 2:
' preparo parámetros de comunicación
MSComm1.PortOpen = True ' Paso 3: Intento abrir el
'puerto. Puedo no lograrlo: si no existe, o si otro
'programa lo está usando. Aquí puede ocurrir un error
'y saltaría a la etiqueta " manejar_errores "
MsgBox ("Puerto COM" + Str$(nro_puerto) + ": abierto OK")
Etiq_Puerto.Caption = "COM" + Str$(nro_puerto) + ":"
Etiq_Velocidad.Caption = Str$(velocidad) + " bauds"
Etiq_Estado.ForeColor = &HFF00& 'Color verde
Etiq_Estado.Caption = "Abierto"
GoTo Salir 'Todo Ok, continuar.

manejar_errores:
MsgBox ("Error al intentar abrir COM" + Str$(nro_puerto))
MsgBox ("Error detectado por Visual Basic: " + Err.Description)
Resume Salir ' Resume me permite continuar con el programa.

Salir:
'Aquí puedo poner algo que quiera que se ejecute en
'cualquier situación.
End Sub
---------------------------------------------------------------------------------------------


Private Sub Boton_Ayuda_Click()
'Abre el texto Leeme.txt que se encuentra en el mismo
'directorio que el ejecutable "Ejemplo de uso de MSCOMM.EXE"

Dim ruta_leeme As String
ruta_leeme = " " + App.Path + "\" + "leeme.txt"
On Error GoTo Error_Abriendo
Shell "C:\Windows\notepad.exe" + ruta_leeme, vbNormalFocus
GoTo Seguir

Error_Abriendo:
MsgBox "No se pudo abrir LEEME.TXT en el Bloc de Notas"
MsgBox "Visual Basic detectó: " + Err.Description
Resume Seguir

Seguir:
'Continuar con el programa
End Sub
------------------------------------------------------------------------------------------------
Private Sub Boton_Cerrar_Click()
'Al pulsar aquí cierra un puerto serial
On Error GoTo manejar_errores 'Protejo frente al error.
MSComm1.PortOpen = False 'Puede haber error si
'intento cerrar un puerto que está en uso por otro
'programa, entre otras causas.
MsgBox ("Puerto COM" + Str$(nro_puerto) + ": cerrado OK")
Etiq_Estado.ForeColor = &HFF& 'Rojo
Etiq_Estado = "CERRADO"
GoTo Salir

manejar_errores:
MsgBox ("Error al intentar cerrar COM" + Str$(nro_puerto))
MsgBox ("Visual basic detectó: " + Err.Description)
Resume Salir

Salir:

End Sub
---------------------------------------------------------------------------------------------------
Private Sub Boton_Enviar_Click()
' La propiedad Output requiere un Variant
Dim texto_salida As Variant
texto_salida = Texto_a_Enviar.Text

If incluye_salto_carro = True Then _
texto_salida = texto_salida + Chr$(13) + Chr$(10)

Texto_Mensajes.Text = "Enviando..."

'Al escribir en la propiedad Output, se envian
'los datos desde el puerto al exterior.
'debo proteger frente a errores para que el programa
'no aborte.
On Error GoTo Error_Enviando
MSComm1.Output = texto_salida

GoTo Salir

Error_Enviando:
MsgBox "Ocurrió un error al intentar enviar el texto"
MsgBox "Visual Basic detectó: " + Err.Description
Texto_Mensajes.Text = "Ocurrió error al enviar"
Resume Salir

Salir:

End Sub
------------------------------------------------------------------------------------------------------
Private Sub Check_Salto_Carro_Click()
' Incluye o no el par de caracteres <CR><LF> al fin de
' la cadena a enviar. El caracter <CR> (salto de carro)
' está en la posición 13 de la tabla ASCII (equivale
'a 0x0D en hexadecimal). Provoca la colocación del cursor
'al principio de la línea (hace un "salto de carro").
'El caracter <LF> está en la posición
'10 de la tabla ASCII (0x0A en hexa). Provoca salto a la
'línea siguiente.
incluye_salto_carro = Not (incluye_salto_carro)

End Sub
--------------------------------------------------------------------------------------------------------
Private Sub Combo_Puerto_Click()
'Aquí selecciona el numero del puerto a usar.
Dim viejo_puerto As Integer

viejo_puerto = nro_puerto 'Me fijo si el usuario
'intenta cambiar de puerto.
nro_puerto = Combo_Puerto.ListIndex
nro_puerto = Combo_Puerto.ItemData(nro_puerto)

'Gracias a la variable mensajes_cambios puedo suprimir
'el mensaje cuando arranca el programa.
If (nro_puerto <> viejo_puerto) And (mensajes_cambios = True) _
Then MsgBox "Debe abrir este puerto antes de usarlo"

End Sub
---------------------------------------------------------------------------------------------------
Private Sub Combo_Velocidad_Click()
Dim vieja_velocidad As Integer
vieja_velocidad = velocidad

velocidad = Combo_Velocidad.ListIndex
velocidad = Combo_Velocidad.ItemData(velocidad)

'Me fijo si el usuario intenta cambiar la velocidad.
'Este mensaje no lo muestro cuando recién arranca
'el programa.
If (vieja_velocidad <> velocidad) And (mensajes_cambios = True) _
Then MsgBox "Cambió la velocidad. Si el puerto ya estaba abierto," _
+ Chr$(13) + " debe cerrarlo y luego abrirlo antes de usarlo"

End Sub
--------------------------------------------------------------------------------------------------
Private Sub Command1_Click()

End Sub

------------------------------------------------------------------------------------------------

Private Sub Form_Load()
'**** Programa de demostración del control MSCOMM ****
' Se usa el MSCOMM en su forma más simple:
' 1) Sólo en modo "texto" (no "binario")
' 2) Sólo se manejan los eventos de recepción y
' transmisión (ignora errores de datos, ring del
' modem, etc.)

' Variables globales, definidas en Module1:
' mensajes_cambios as boolean Suprime mensajes al iniciar programa.
' velocidad As Integer Bauds
' nro_puerto As Integer Cual puerto uso
' incluye_salto_carro As Boolean Enviar o no CR+LF (0x0D y 0x0A)
' cadena_entrada As Variant Recibe el texto del control.

mensajes_cambios = False

velocidad = 1200
nro_puerto = 9600
Combo_Puerto.ListIndex = 0
Combo_Velocidad.ListIndex = 0

Check_Salto_Carro.Value = 1
incluye_salto_carro = True

mensajes_cambios = True

'*** Preparación del objeto MSCOMM1 para recibir *******
'*** y transmitir *******
MSComm1.InputLen = 0 ' El valor 0 hace que se lea todo
' el contenido del buffer de recepcion que posee
' el control MSComm.
' Si InputLen valiera 6, se recibirian los primeros 6
'caracteres de ese buffer, ignorando el resto.
MSComm1.RThreshold = 1 ' al recibir uno o mas caracteres
'se generará el evento OnComm y la propiedad
'CommEvent contendrá el valor comEvReceive.
'La constante comEvReceive vale 2 .

MSComm1.SThreshold = 1 ' al enviar uno o mas caracteres
'se generará el evento OnComm y la propiedad
'ComEvent contendrá el valor comEvSend
'La constante comEvSend vale 1.
'*** Para trabajar con MSCOMM, faltan los siguientes pasos:
' 1) Especificar cual port va a usar:
' MSComm1.CommPort = 1
' 2) Establecer parámetros de la comunicación:
' MSComm1.Settings = "9600,N,8,1"
' velocidad=9600, paridad=No usada,
' cantidad de bits=8,
' cantidad de bits de parada (stop bits) = 1
' 9600 baudios, sin paridad, 8 bits de datos y 1 bit de parada.
' 3) Abrir el puerto:
' MSComm1.PortOpen = True
' Estos 3 pasos se llevan a cabo en el botón llamado
' Boton_Abrir
'
MsgBox "Recuerde, debe abrir un puerto antes de empezar a usarlo"
Etiq_Estado.ForeColor = &HFF& 'Rojo
Etiq_Estado.Caption = "CERRADO"
'Boton_Ayuda_Oculto.SetFocus

End Sub

-----------------------------------------------------------------------------------

Private Sub MSComm1_OnComm()
'Aqui se interceptan los eventos que se producen
'durante la comunicación RS232.
'Cada vez que pasa algo relativo al puerto COM
'en uso, cambia el valor de la propiedad CommEvent
'Ejemplo: Si suena el telefono, y el modem
'está conectado a la linea, y se está utilizando el
'puerto COM correspondiente al modem, se generará el
' evento OnComm y la propiedad CommEvent valdrá 6 .
' (6 es el valor de la constante commEvRing, ya definida
' internamente por Visual Basic).
Dim envio As Boolean
envio = False

If MSComm1.CommEvent = comEvReceive Then
Texto_Recibido.Text = Texto_Recibido.Text + MSComm1.Input
End If

If MSComm1.CommEvent = comEvSend Then
Texto_Mensajes = "Se envió texto"
End If

End Sub

----------------------------------------------------------------------------------------------


                                                                    ATRAS