Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Puerto Serie
Puerto Serie
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
Puerto Serie VB
Puerto Serie VB
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
32
VB6 VB6 PUERTO SERIE PUERTO SERIE
RI (Ring Indicator) ??? 22 9
CTS (Clear To Send) Entrada 5 8
RTS (Request To Send) Salida 4 7
DSR (Data Set Ready) Entrada 6 6
GND --- 7 5
DTR (Data Terminal Ready) Salida 20 4
TX (Transmit Data) Salida 2 3
RX (Receive Data) Entrada 3 2
DCD (Data Carrier Detect) Entrada 8 1
Descripcin Tipo 25-PIN 9-PIN
Puerto Serie Puerto Serie RS232 RS232
33
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie - -Ejercicio Ejercicio
Disear un programa que permita configurar, transmitir y recibir Disear un programa que permita configurar, transmitir y recibir datos datos
por el puerto serie del PC. por el puerto serie del PC.
Cmo insertar el control de puerto serie en VB6? Cmo insertar el control de puerto serie en VB6?
Control de comunicaciones Control de comunicaciones PuertoCom PuertoCom
Puerto que se desea abrir Puerto que se desea abrir
PuertoCom.CommPort PuertoCom.CommPort = 2 COM2 = 2 COM2
Caractersticas comunicacin Caractersticas comunicacin
19200 baudios, Paridad Ninguna, 8 bits 19200 baudios, Paridad Ninguna, 8 bits
por carcter, 1 bit parada por carcter, 1 bit parada
PuertoCom.Settings PuertoCom.Settings = 19200,N,8,1 = 19200,N,8,1
Abrir puerto de comunicaciones Abrir puerto de comunicaciones
PuertoCom.PortOpen PuertoCom.PortOpen = = True True
Cerrar puerto de comunicaciones Cerrar puerto de comunicaciones
PuertoCom.PortOpen PuertoCom.PortOpen = = False False
34
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Insertar barra de estado: Control Insertar barra de estado: Control Common Common Controls Controls
35
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Crear formulario Crear formulario PuertoCom.frm PuertoCom.frm (Formulario (Formulario ppal ppal) )
StatusBar1
1-sbrSimple
Name
Style
Barra de estado
txtTX
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
PuertoCom Name Control MSComm
&Enviar
cmdEnviar
Caption
Name
Boton
txtRX
(nada)
True
2 Vertical
Name
Text
Multiline
ScrollBars
Caja de texto
Texto recibido: Caption Etiqueta
Texto a transmitir: Caption Etiqueta
Valor Propiedad Objeto
36
VB6 VB6 PUERTO SERIE PUERTO SERIE
Puerto Serie Puerto Serie
Insertar un men en el formulario Insertar un men en el formulario PuertoCom.frm PuertoCom.frm
&Parmetros COM
ConfigParams
Caption
Name
Orden Parmetros
COM
&Configuracin
mnuConfig
Caption
Name
Men Configuracin
&Salir
ConexionSalir
Caption
Name
Orden Salir
-
Separador
Caption
Name
Separador
&Cortar
ConexionCortar
Caption
Name
Orden Cortar
&Establecer
ConexionEstablecer
Caption
Name
Orden Establecer
Cone&xin
mnuConexion
Caption
Name
Men Conexin
Valor Prop. Objeto
37
VB6 VB6 PUERTO SERIE PUERTO SERIE
Crear formulario Crear formulario Configuracion.frm Configuracion.frm (Parmetros de configuracin) (Parmetros de configuracin)
Bits de parada: Caption Etiqueta
lstBitsParada
1, 1.5, 2
Name
List
Lista Desplegable
lstControlFlujo
Ninguno, Xon/Xoff,
Hardware
Name
List
Lista Desplegable
Control de flujo: Caption Etiqueta
lstBitsCar
5,6,7,8
Name
List
Lista Desplegable
lstParidad
N-Ninguna, E-Par,
O-Impar
Name
List
Lista Desplegable
lstPuerto
COM1,COM2, .
Name
List
Lista Desplegable
Bits por carcter: Caption Etiqueta
Paridad: Caption Etiqueta
lstBaudios
2400, 4800, 9600,
19200, 38400, 56000
Name
List
Lista Desplegable
Baudios: Caption Etiqueta
Puerto: Caption Etiqueta
Valor Propiedad Objeto
38
VB6 VB6 PUERTO SERIE PUERTO SERIE
Crear un Modulo *. Crear un Modulo *.bas bas para declaraciones globales y pblicas: para declaraciones globales y pblicas:
Parmetros de configuracin predeterminados
Public Const PUERTO_PREDETERMINADO = "COM2"
Public Const BAUDIOS_PREDETEMINADO= 9600
Public Const PARIDAD_PREDETEMINADO= "N - Ninguna" 'Ninguna
Public Const BITSCARACTER_PREDETEMINADO = 8
Public Const BITSPARADA_PREDETEMINADO= 1
Public Const CONTROLFLUJO_PREDETEMINADO= "Ninguno" 'Sin
protocolo
Variables pblicas
Public SPuerto As String
Public sBaudios As String
Public sParidad As String
Public sBitsCar As String
Public sBitsParada As String
Public nControlFlujo As String
'Tamao de las colas de recepcin y de transmisin
Public Const COLARX As Integer = 4096
Public Const COLATX As Integer = 4096
Cdigo Cdigo Mdulo.bas Mdulo.bas
39
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Configuracin Formulario Configuracin
Private Sub cmdPredeterminados_Click()
' Se actualizan los controles desde las variables
lstPuerto.Text = PUERTO_PREDETERMINADO '"COM2"
lstBaudios.Text = BAUDIOS_PREDETEMINADO '9600
lstParidad.Text = PARIDAD_PREDETEMINADO '"None - Ninguna"
lstBitsCar.Text = BITSCARACTER_PREDETEMINADO '8
lstBitsParada.Text = BITSPARADA_PREDETEMINADO '1
lstControlFlujo.Text = CONTROLFLUJO_PREDETEMINADO 'Ninguno Sin protocolo
End Sub
Private Sub Form_Load()
lstPuerto.Text = SPuerto
lstBaudios.Text = sBaudios
lstParidad.Text = sParidad
lstBitsCar.Text = sBitsCar
lstBitsParada.Text = sBitsParada
lstControlFlujo.Text = nControlFlujo
End Sub
Cdigo formulario configuracin Cdigo formulario configuracin
40
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Configuracin Formulario Configuracin
Private Sub cmdAceptar_Click()
sPuerto = lstPuerto.Text
sBaudios = lstBaudios.Text
sParidad = lstParidad.Text
sBitsCar = lstBitsCar.Text
sBitsParada = lstBitsParada.Text
nControlFlujo = lstControlFlujo.Text
Hide
End Sub
Private Sub cmdCancelar_Click()
Hide
End Sub
Cdigo formulario configuracin Cdigo formulario configuracin
41
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Sub Form_Load()
ConexionCortar.Enabled = False ' Habilitar/Inhabilitar controles
StatusBar1.SimpleText = "Preparado"
sPuerto = PUERTO_PREDETERMINADO
sBaudios = BAUDIOS_PREDETEMINADO
sParidad = PARIDAD_PREDETEMINADO
sBitsCar = BITSCARACTER_PREDETEMINADO
sBitsParada = BITSPARADA_PREDETEMINADO
nControlFlujo = CONTROLFLUJO_PREDETEMINADO
End Sub
Private Sub ConfigParams_Click()
If PuertoCom.PortOpen = True Then
MsgBox "Cierre primero la conexin"
Exit Sub
End If
' Visualizar el formulario Configuracin
frmConfiguracin.Show vbModal, Me
' Establecer la conexin con los parmetros establecidos
If EstablecerConexion = True Then
' Habilitar el botn de Enviar
cmdEnviar.Enabled = True
End If
End Sub
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
42
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Sub ConexionEstablecer_Click()
' Si la conexin ya estaba establecida, la orden Establecer est inhabilitada
If EstablecerConexion = True Then
cmdEnviar.Enabled = True
End If
End Sub
Private Sub ConexionCortar_Click()
' Si la conexin est cerrada, la orden Cortar est inhabilitada
CortarConexion
cmdEnviar.Enabled = False
End Sub
Private Sub cmdEnviar_Click()
' Enviar los datos que hay en la caja de transmisin
If txtTX.Text <> "" Then
EscribirCarsPuerto txtTX.Text
txtTX.Text = ""
txtTX.SetFocus
End If
End Sub
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
Private Sub ConexionSalir_Click()
If PuertoCom.PortOpen Then
CortarConexion
Unload frmPpal
End Sub
43
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO
Private Sub PuertoCom_OnComm()
Dim sEvento As String, sError As String, sRecibida As String
' Controlar cada evento o error escribiendo cdigo en cada caso
Select Case PuertoCom.CommEvent ' Eventos
Case comEvCD
sEvento = "Cambio en la lnea CD."
Case comEvCTS
sEvento = "Cambio en la lnea CTS."
Case comEvDSR
sEvento = "Cambio en la lnea DSR."
Case comEvRing
sEvento = "Cambio en el indicador de llamadas."
Case comEvReceive
sEvento = "Recibido(s) " & PuertoCom.RThreshold & " carcter/caracteres."
' Leer caracteres del puerto
If LeerCarsPuerto(sRecibida) > 0 Then
txtRX.Text = txtRX.Text & sRecibida
End If
Case comEvSend
sEvento = "Hay SThreshold = " & PuertoCom.SThreshold & " carcter/caracteres en el bfer de transmisin."
Case comEvEOF
sEvento = "Se ha encontrado un carcter EOF en la entrada."
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
44
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO
' Errores
Case comBreak
sError = "Se ha recibido una interrupcin."
Case comEventFrame
sError = "Error de trama."
Case comEventOverrun
sError = "Datos perdidos."
Case comEventRxOver
sError = "Desbordamiento del bfer de recepcin."
Case comEventRxParity
sError = "Error de paridad."
Case comEventTxFull
sError = "Bfer de transmisin lleno."
Case comEventDCB
sError = "Error inesperado al recuperar el DCB."
End Select
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
If Not IsEmpty(sEvento) Then
StatusBar1.SimpleText = sEvento
ElseIf Not IsEmpty(sError) Then
Dim vr As VbMsgBoxResult
Beep
sError = sError & vbNewLine & "Aceptar para ignorar. "
& _
"Cancelar para salir"
vr = MsgBox(sError, vbOKCancel + vbExclamation,
App.Title)
If vr = vbCancel Then
' Cerrar el puerto
PuertoCom.PortOpen = False
ConexionEstablecer.Enabled = True
ConexionCortar.Enabled = False
End If
End If
End Sub
45
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' INTERFAZ DE COMUNICACIONES
Private Function EstablecerConexion() As Boolean
On Error Resume Next
With PuertoCom
' Cerrar el control si estuviera abierto
If .PortOpen = True Then .PortOpen = False
' Especificar el puerto COM que se desea abrir
Dim Puerto As String
Select Case sPuerto
Case "COM1"
Puerto = 1
Case "COM2"
Puerto = 2
Case "COM3"
Puerto = 3
Case "COM4"
Puerto = 4
End Select
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo a los alumnos de esta funcin*/
.CommPort = Puerto ' nmero del puerto (1, 2, ...)
' Establecer el tamao de las colas de recepcin y
transmisin
.InBufferSize = COLARX ' cola de recepcin
.OutBufferSize = COLATX ' cola de transmisin
' Limpiar las colas Rx y Tx
.InBufferCount = 0
.OutBufferCount = 0
' Establecer los parmetros de la comunicacin
Dim sSettings As String
' Baudios, paridad, nmero de bits de datos y de parada
' Longitud del bit de paro:
sSettings = sBaudios & "," & Left(sParidad, 1) & "," & _
sBitsCar & "," & sBitsParada
.Settings = sSettings
46
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
' INTERFAZ DE COMUNICACIONES
' Establecer el control de flujo
Dim ControlFlujo As HandshakeConstants 'entero
Select Case nControlFlujo
Case "Ninguno"
ControlFlujo = 0
Case "Xon/Xoff"
ControlFlujo = 1
Case "Hardware"
ControlFlujo = 2
End Select
.Handshaking = ControlFlujo
' Cmo se leern los datos del puerto
' Caracteres que puede admitir el buffer de transmisin antes
' de que el control genere el evento OnComm.
' Su valor predeterminado es 0
.SThreshold = 1
' Caracteres que se van recibir antes de que el control genere
' el evento OnComm. Su valor predeterminado es 0.
.RThreshold = 1
' Abrir el puerto de comunicaciones
.PortOpen = True
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo */
If .PortOpen = False Then
' Error al abrir el puerto (verifique la configuracin)
Beep
MsgBox "Error: No se puede abrir el puerto " & _
sPuerto, vbOKOnly + vbCritical, App.Title
If sBitsParada > "1" Then
MsgBox _
"1 bit en cualquier longitud de carcter, o bien " & _
vbCrLf & "1.5 bits en longitud de carcter 5, y " & _
vbCrLf & "2 bits en longitud de carcter 6 a 8", _
vbOKOnly + vbInformation, App.Title
End If
EstablecerConexion = False
Exit Function
End If
End With
' El puerto se abri con xito
EstablecerConexion = True
StatusBar1.SimpleText = "Puerto de comunicaciones
abierto"
' Habilitar/Inhabilitar rdenes de ls mens
ConexionEstablecer.Enabled = False
ConexionCortar.Enabled = True
End Function
47
VB6 VB6 PUERTO SERIE PUERTO SERIE
Formulario Formulario PuertoCom PuertoCom
Private Function LeerCarsPuerto(ByRef sRecibida As String) As Long
sRecibida = PuertoCom.Input
LeerCarsPuerto = Len(sRecibida)
End Function
Private Function EscribirCarsPuerto(str As String) As Boolean
PuertoCom.Output = str
EscribirCarsPuerto = True
End Function
Private Function CortarConexion() As Boolean
If ConexionCortar.Enabled = True Then
Dim bTiempoSobrepasado As Boolean, Tiempo As Long
' Establecer un periodo de 10 segundos a partir de la hora
' actual antes de cerrar el puerto, por seguridad
bTiempoSobrepasado = False
Tiempo = Now
StatusBar1.SimpleText = "Cerrando la conexin..."
While PuertoCom.OutBufferCount > 0
' Permitir procesar mensajes pendientes
DoEvents
Cdigo formulario Cdigo formulario PuertoCom PuertoCom
/**Pasar el cdigo */
If DateDiff("s", Now, Tiempo) > 10 Or _
bTiempoSobrepasado = True Then
Dimvr As VbMsgBoxResult
vr = MsgBox("Datos no enviados", vbAbortRetryIgnore, _
App.Title)
Select Case vr
' Intentar enviar los datos durante otros 10 segundos
Case vbRetry
Tiempo = Now
Case vbIgnore ' Ignorar el tiempo lmite
bTiempoSobrepasado = True
Case vbAbort
StatusBar1.SimpleText = ""
CortarConexion = False
Exit Function
End Select
End If
Wend
' Tx vaco. Cerrar el puerto.
PuertoCom.PortOpen = False
ConexionEstablecer.Enabled = True
ConexionCortar.Enabled = False
End If
StatusBar1.SimpleText = "Conexin concluida"
CortarConexion = True
End Function
Internet: sockets
Internet: sockets
Rafael Barea
Universidad de Alcal. Departamento de Electrnica
55
SOCKETS (I) SOCKETS (I)
Qu es un Qu es un Socket Socket? ?
Un socket es un objeto a travs del cual una aplicacin puede enviar o
recibir paquetes de datos a travs de la red
Qu es una comunicacin orientada a conexin? Qu es una comunicacin orientada a conexin?
Es una comunicacin entre equipos en la que:
Primero se establece la conexin entre dos equipos
Despus se intercambian peticiones y datos
Finalmente se libera la conexin
Caractersticas:
Comunicacin fiable: si se produce un error en la transmisin se vuelve a
enviar la informacin (paquete perdido).
Es necesario un socket en la aplicacin cliente (la que pide la informacin) y
otro en la aplicacin servidor (la que proporciona la informacin)
Normalmente se utiliza el protocolo TCP/IP
56
SOCKETS (II) SOCKETS (II)
Aplicacin cliente Aplicacin cliente- -servidor servidor
Servidor:
Aplicacin que ofrece servicios
Cliente:
Aplicacin que solicita servicios
CLIENTE CLIENTE SERVIDOR SERVIDOR
Esquema Esquema
57
SOCKETS (III) SOCKETS (III)
Sockets Sockets en Visual Basic en Visual Basic P P Control WinSock Control WinSock
VB6 VB6
eVB eVB
58
SOCKETS (IV) SOCKETS (IV)
Sockets Sockets en Visual Basic en Visual Basic P P Control WinSock Control WinSock
Funciones: Funciones:
WinSock.Listen: Escuchar peticiones de conexin y guardarlas en una cola de
conexiones pendientes. (En el servidor)
WinSock.Accept: Extrae la primera conexin pendiente en la cola y la acepta.
WinSock.GetData DatosRecibidos, vbString: Procesa la informacin recibida
/* En eVB debe DatosRecibidos debe ser tipo variant, no tipo string
WinSock.SendData DatosEnviados: Envia la informacin recibida
/* En eVB debe DatosEnviados debe ser tipo variant, no tipo string
WinSock.Close: Libera la conexin
WinSock.State: Informacin sobre la conexin o accin realizada
WinSock.Connect servidor, puerto: Conectar los sockets (En el cliente)
59
SOCKETS (V) SOCKETS (V)
Servidor PC Servidor PC- -VB6 VB6 Cliente PDA Cliente PDA- -eVB eVB
Aplicacin cliente Aplicacin cliente- -servidor utilizando servidor utilizando Sockets Sockets
Objetivo: Objetivo:
Ejercicio Ejercicio
60
SOCKETS (VI) SOCKETS (VI)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6) Ejercicio Ejercicio
1. Crear el siguiente formulario 1. Crear el siguiente formulario
61
SOCKETS (VII) SOCKETS (VII)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6)
Ejercicio Ejercicio
2. Cdigo 2. Cdigo
Private Sub CommandEscuchar_Click()
WinSock1.Listen
TextCodigoConexion.Text = WinSock1.State
If WinSock1.State = 2 Then
TextEstadoServidor.Text = "Esperando conexin"
TextAccion.Text = "Servidor esperando conexin"
TextIP.Text = WinSock1.LocalIP
End If
End Sub
Private Sub Cerrar_Click()
WinSock1.Close
TextCodigoConexion.Text = WinSock1.State
TextEstadoServidor.Text = "Desconectado"
TextAccion.Text = "Socket desconectado por el Servidor"
End Sub
Private Sub Enviar_Click()
DimEnviar As String Mejor si es Dim Enviar As Variant
Enviar = TextDataSent.Text
WinSock1.SendData (Enviar)
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Dato enviado por el Servidor"
End Sub
62
SOCKETS (VIII) SOCKETS (VIII)
Aplicacin Servidor (VB6) Aplicacin Servidor (VB6)
Ejercicio Ejercicio
2. Ms cdigo 2. Ms cdigo
Private Sub IP_Click()
TextIP.Text = WinSock1.LocalIP
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "IP Servidor"
End Sub
Private Sub WinSock1_ConnectionRequest()
WinSock1.Accept
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Cliente conectado"
TextIPCliente.Text = WinSock1.RemoteHostIP
TextEstadoCliente.Text = "Conectado"
TextEstadoServidor.Text = "Conectado"
End Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
Dimdatos as Variant No funciona si ponis Dim datos as String
WinSock1.GetData datos, vbString
TextDataReceived.Text = datos
TextCodigoConexion.Text = WinSock1.State
TextAccion.Text = "Datos recibidos del Cliente"
End Sub
63
SOCKETS (IX) SOCKETS (IX)
Aplicacin cliente ( Aplicacin cliente (eVB eVB) ) Ejercicio Ejercicio
1. Crear el siguiente formulario 1. Crear el siguiente formulario
64
SOCKETS (X) SOCKETS (X)
Aplicacin cliente ( Aplicacin cliente (eVB eVB) )
Ejercicio Ejercicio
Private Sub CommandConectar_Click()
Dimdestino As String
destino = TextIPRemote.Text
WinSock1.RemoteHost = destino
WinSock1.Connect
LabelEstado.Caption = WinSock1.State
End Sub
Private Sub Cerrar_Click()
WinSock1.Close
End Sub
Private Sub CommandEnviar_Click()
Dimenviar As String
enviar = TextTx.Text
WinSock1.SendData (enviar)
LabelEstado.Caption = WinSock1.State
End Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
Dimdatos As String
WinSock1.GetData datos, vbString
LabelEstado.Caption = WinSock1.State
TextRx.Text = datos
End Sub
Private Sub Form_OKClick()
App.End
End Sub