Manual Vb6 Evb Pda
-
Upload
salvamextab -
Category
Documents
-
view
74 -
download
6
Transcript of Manual Vb6 Evb Pda
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Introducción al Visual Basic 6.0Introducción al Visual Basic 6.0
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
3
VB6VB6
Ejecutar visual Ejecutar visual basicbasic 6.0 y seleccionar aplicación EXE 6.0 y seleccionar aplicación EXE estandarestandar
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Introducción al Visual Basic 6.0: Introducción al Visual Basic 6.0: MenúsMenús
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
5
VB6 VB6 -- MENU (I)MENU (I)
Diseño del menú Diseño del menú ÷÷ Editor de menús (Herramientas/Editor de menus)Editor de menús (Herramientas/Editor de menus)
CaptionCaption: : TTíítulo del mentulo del menúúNameName: Nombre utilizado en el c: Nombre utilizado en el cóódigo para referirse al mendigo para referirse al menúú&: Acceso directo al men&: Acceso directo al menúú ((AltAlt + tecla subrayada)+ tecla subrayada)þ³þ³: Sangrar: insertar elementos del submenu.: Sangrar: insertar elementos del submenu.↑↓↑↓: Subir y bajar por el men: Subir y bajar por el menúú para insertar nuevos comandospara insertar nuevos comandos-- (gui(guióón): Separadorn): Separador
6
VB6 VB6 –– MENU (II)MENU (II)
Ejercicio 1. Ejercicio 1. Construir el siguiente menúConstruir el siguiente menú
7
VB6 VB6 –– MENU (III)MENU (III)
-Separador
CaptionName
Separador
En blancoPais0Sin marcar
CaptionNameIndexVisible
Orden Pais(0)
&BorrarBorrarPais
CaptionName
Orden Borrar
&AñadirAñadirPais
CaptionName
Orden Añadir
&PaisMenuPais
CaptionName
Menu Pais
&CerrarCerrar
CaptionName
Orden Cerrar
&DespertadorNoDespertadorSiNo
CaptionName
Orden Despertar No
&DespertadorMenuDespertador
CaptionName
Menú DespertadorValorPropiedadObjeto
Ejercicio 2. Reloj despertadorEjercicio 2. Reloj despertador
1. Crear el siguiente formulario (1. Crear el siguiente formulario (Reloj.frmReloj.frm))
2. Editar el menú siguiente2. Editar el menú siguiente
8
VB6 VB6 –– MENU (IV)MENU (IV)
(ninguno)OtraHora
CaptionName
Etiqueta
Timer11000
NameInterval
Temporizador
???EtiquetaPais
CaptionName
Etiqueta
Hora en:Label3
CaptionName
Etiqueta
Despertador(nada)
NameText
Caja de texto
Despertador:Label2
CaptionName
Etiqueta
(ninguno)Hora
CaptionName
Etiqueta
Hora:Label1
CaptionName
EtiquetaValorPropiedadObjeto
3. Añadir temporizador, etiquetas y cajas de texto3. Añadir temporizador, etiquetas y cajas de texto
9
VB6 VB6 –– MENU (V)MENU (V)
4. Añadir código en el formulario Reloj.frm
4.1. Presentar la hora actual mediante el Temporizador
Private Sub Timer1_Timer()Hora.Caption = Time
End Sub
Time devuelve un valor (Tipo Date) de la forma”hh:mm:ss”.
4.2. Detectar errores al introducir datos en la hora del despertador: sólo se pueden introducir carácters 0-9 y :
Private Sub Despertador_KeyPress(KeyAscii As Integer)Dim Car As String * 1Car = Chr(KeyAscii)If (Car < "0" Or Car > "9") And Car <> ":" Then
Beep 'aviso acústicoKeyAscii = 0 'borrar carácterEnd If
End Sub
10
VB6 VB6 –– MENU (VI)MENU (VI)
4.3. Activar o desactivar el despertador
a) Definir variable global
Private DespertadorSi As Boolean
b) Acciones a realizar al arrancar la aplicación
Private Sub Form_Load()DespertadorSi = FalseDespertador.Text = "00:00:00“
End Sub
c) Modificar el timer
Private Sub Timer1_Timer()If (Despertador.Text < CStr(Time) And DespertadorSi) Then
Beep: Beep: BeepEnd IfHora.Caption = Time
End Sub
11
VB6 VB6 –– MENU (VII)MENU (VII)
4.3. Activar o desactivar el despertador
d) Cambiar una orden del menú durante la ejecución
Private Sub DespertadorSiNo_Click()If (DespertadorSi) Then
DespertadorSi = FalseDespertadorSiNo.Caption = "Despertador No"
ElseDespertadorSi = TrueDespertadorSiNo.Caption = "Despertador Si"
End IfEnd Sub
4.4. Menú Cerrar
Private Sub Cerrar_Click()End
End Sub
12
VB6 VB6 –– MENU (VIII)MENU (VIII)
5. Añadir un nuevo formulario (5. Añadir un nuevo formulario (DatosEnt.frmDatosEnt.frm))
PaisEnt(nada)
NameText
Caja de texto
CancelarCancelar
CaptionName
Boton
AceptarAceptarTrue
CaptionNameDefault
Boton
DifHora(nada)
NameText
Caja de texto
Diferencia horaria:Label2
CaptionName
Etiqueta
Pais:Label1
CaptionName
EtiquetaValorPropiedadObjeto
13
VB6 VB6 –– MENU (IX)MENU (IX)
6. Añadir un módulo (6. Añadir un módulo (reloj.basreloj.bas) para almacenar la declaración de la estructura ) para almacenar la declaración de la estructura PaisHoraPaisHora
Type TipoPaísHoraPaís As String * 20DifH As Integer
End TypePublic PaísHora() As TipoPaísHora 'matriz dinámicaPublic NumPaíses As Integer
7. Añadir órdenes a un menú durante la ejecución (Cuando se puls7. Añadir órdenes a un menú durante la ejecución (Cuando se pulsa a PaisPais/Añadir) en /Añadir) en el formulario el formulario Reloj.frmReloj.frm
Private Sub AñadirPaís_Click()DatosEnt.Show vbModalIf DatosEnt.bCancelar Then Exit SubLoad País(NumPaíses)País(NumPaíses).Caption = PaísHora(NumPaíses).PaísPaís(NumPaíses).Visible = True
End Sub
14
VB6 VB6 –– MENU (X)MENU (X)
8. Añadir código en el formulario 8. Añadir código en el formulario DatosEntDatosEnt
8.1. Variables globales8.1. Variables globales
Public bCancelar As Boolean
8.2. ¿Qué hacer cuando se pulsa Aceptar?8.2. ¿Qué hacer cuando se pulsa Aceptar?
Private Sub Aceptar_Click()bCancelar = False 'se pulsó el botón AceptarNumPaíses = NumPaíses + 1'Asignar memoria para un registro másReDim Preserve PaísHora(NumPaíses)PaísHora(NumPaíses).País = PaísEnt.TextPaísHora(NumPaíses).DifH = Val(DifHora.Text)PaísEnt.SetFocusDatosEnt.Hide
End Sub
8.3. ¿Qué hacer cuando se pulsa Cancelar?8.3. ¿Qué hacer cuando se pulsa Cancelar?
Private Sub Cancelar_Click()bCancelar = TrueDatosEnt.Hide
End Sub
15
VB6 VB6 –– MENU (XI)MENU (XI)
8. Añadir código en el formulario 8. Añadir código en el formulario DatosEntDatosEnt
8.4. Borrar las cajas de texto al perder el 8.4. Borrar las cajas de texto al perder el focusfocus
Private Sub Aceptar_LostFocus()PaísEnt.Text = ""DifHora.Text = ""
End Sub
9. Visualizar la hora en el país seleccionado. Procedimiento com9. Visualizar la hora en el país seleccionado. Procedimiento común para órdenes ún para órdenes añadidasañadidas
Private Sub País_Click(Index As Integer)Dim Horas As IntegerEtiquetaPaís.Caption = País(Index).CaptionHoras = Val(Hora.Caption) + PaísHora(Index).DifHIf Horas > 24 Then Horas = Horas - 24If Horas < 0 Then Horas = 24 + HorasOtraHora.Caption = Horas & Right(Hora.Caption, 6)If Len(OtraHora.Caption) < 8 Then
OtraHora.Caption = "0" & OtraHora.CaptionEnd If
End Sub
16
VB6 VB6 –– MENU (XII)MENU (XII)
10. Borrar órdenes de un menú10. Borrar órdenes de un menú
Private Sub BorrarPaís_Click()Dim NumOrden As Integer, N As IntegerDim Mensaje As StringMensaje = "Número del país a borrar entre 1 y " & NumPaísesNumOrden = Val(InputBox(Mensaje))If NumOrden > NumPaíses Or NumOrden < 1 ThenMsgBox "Número fuera de rango"Exit Sub
End IfFor N = NumOrden To NumPaíses - 1País(N).Caption = País(N + 1).CaptionPaísHora(N) = PaísHora(N + 1)
Next NUnload País(NumPaíses)NumPaíses = NumPaíses - 1'Asignar memoria para un registro menosReDim Preserve PaísHora(NumPaíses)
End Sub
17
VB6 VB6 –– MENU (XIII)MENU (XIII)
11. Menús emergentes11. Menús emergentes
Private Sub Form_Click()PopupMenu MenuPais
End Sub
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Introducción al Visual Basic 6.0: Introducción al Visual Basic 6.0: Imágenes, gráficos y eventos del Imágenes, gráficos y eventos del
ratónratón
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
19
VB6 VB6 –– IMÁGENES (I)IMÁGENES (I)
1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario
EtiquetaEtiqueta
ComboBoxComboBox
ImagenImagen
Image.PictureImage.Picture = = LoadPictureLoadPicture(“imagen.bmp")(“imagen.bmp")Combo1.Combo1.AddItemAddItem “Comando", Index“Comando", Index
3. Funciones interesantes3. Funciones interesantes
Mostrar imágenes de un ficheroMostrar imágenes de un fichero
20
VB6 VB6 –– IMÁGENES (II)IMÁGENES (II)
3. Código3. CódigoPrivatePrivate SubSub Combo1_Combo1_ClickClick()()SelectSelect Case Combo1.Case Combo1.TextText
Case "Rafa"Case "Rafa"Image1.Picture = Image1.Picture = LoadPictureLoadPicture("D:("D:\\.......... .......... \\rafa.bmprafa.bmp")")
Case "Pepe"Case "Pepe"Image1.Picture = Image1.Picture = LoadPictureLoadPicture("D:("D:\\......................\\pepe.bmppepe.bmp")")
EndEnd SelectSelectEndEnd SubSub
PrivatePrivate SubSub Form_LoadForm_Load()()Combo1.Combo1.AddItemAddItem "Rafa", 0"Rafa", 0Combo1.Combo1.AddItemAddItem "Pepe", 1"Pepe", 1
EndEnd SubSub
Mostrar imágenes de un ficheroMostrar imágenes de un fichero
21
VB6 VB6 –– IMÁGENES (III)IMÁGENES (III)
4. Ejercicio4. Ejercicio
•• Adquirir con la Adquirir con la WebCamWebCam las imágenes de vuestros compañeros y las imágenes de vuestros compañeros y almacenarlas *.almacenarlas *.bmpbmp
•• Realizar un programa que permita visualizar la imagen del usuariRealizar un programa que permita visualizar la imagen del usuario o seleccionado. seleccionado.
Mostrar imágenes de un ficheroMostrar imágenes de un fichero
22
VB6 VB6 –– IMÁGENES (IV)IMÁGENES (IV)
[Objeto.][Objeto.]PSetPSet ((x,yx,y) [,color]) [,color] // RGB( // RGB( rojo,verde,azulrojo,verde,azul))
Dibujar puntosDibujar puntos
1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario
ImagenImagen
23
VB6 VB6 –– IMÁGENES (V)IMÁGENES (V)
Dibujar puntosDibujar puntosPrivatePrivate SubSub Form_PaintForm_Paint()()
DimDim CX As Single, CY As SingleCX As Single, CY As SingleDimDim MsgMsg As As StringStringDimDim x As Single, x As Single, ycyc As Single, As Single, ysys As SingleAs SingleClsCls' Escala del sistema de coordenadas' Escala del sistema de coordenadasScaleLeftScaleLeft = 0= 0ScaleTopScaleTop = 1= 1ScaleWidthScaleWidth = 6.3= 6.3ScaleHeightScaleHeight = = --22' Ancho de la traza y tamaño de los caracteres' Ancho de la traza y tamaño de los caracteresDrawWidthDrawWidth = 2= 2Font.SizeFont.Size = 18= 18' Coordenadas del punto central del formulario' Coordenadas del punto central del formularioCX = CX = ScaleWidthScaleWidth / 2 + / 2 + ScaleLeftScaleLeftCY = CY = ScaleHeightScaleHeight / 2 + / 2 + ScaleTopScaleTop' Coordenadas para escribir ' Coordenadas para escribir MsgMsg centradocentradoMsgMsg = "Curvas"= "Curvas"CurrentXCurrentX = CX = CX -- TextWidth(MsgTextWidth(Msg) / 2) / 2CurrentYCurrentY = CY = CY -- TextHeight(MsgTextHeight(Msg) / 2) / 2' Visualizar el literal "Curvas"' Visualizar el literal "Curvas"ForeColorForeColor = RGB(0, 192, 0) ' color verde= RGB(0, 192, 0) ' color verdePrintPrint MsgMsgForeColorForeColor = RGB(0, 0, 0) ' restablecer el color negro= RGB(0, 0, 0) ' restablecer el color negro
(0,(0,--1)1)
(0,0)(0,0)6,36,3
22
24
VB6 VB6 –– IMÁGENES (VI)IMÁGENES (VI)
Dibujar puntosDibujar puntos
' Análogamente, establecemos los parámetros para la imagen' Análogamente, establecemos los parámetros para la imagenImagen1.Imagen1.ClsClsImagen1.Imagen1.ScaleScale (0, 1)(0, 1)--(6.3, (6.3, --1)1)Imagen1.Imagen1.CurrentXCurrentX = CX = CX -- Imagen1.Imagen1.TextWidth(MsgTextWidth(Msg) / 2) / 2Imagen1.Imagen1.CurrentYCurrentY = CY = CY -- Imagen1.Imagen1.TextHeight(MsgTextHeight(Msg) / 2) / 2Imagen1.Imagen1.ForeColorForeColor = RGB(0, 192, 0)= RGB(0, 192, 0)Imagen1.Imagen1.PrintPrint MsgMsgImagen1.Imagen1.ForeColorForeColor = RGB(0, 0, 0)= RGB(0, 0, 0)
'Dibujar curvas'Dibujar curvasForFor x = 0 x = 0 ToTo 6.3 6.3 StepStep 0.050.05ycyc = = Cos(xCos(x): ): ysys = = Sin(xSin(x))PSetPSet (x, (x, ycyc): Imagen1.): Imagen1.PSetPSet (x, (x, ycyc) ' coseno) ' cosenoPSetPSet (x, (x, ysys): Imagen1.): Imagen1.PSetPSet (x, (x, ysys) ' seno) ' seno
NextNext xxEndEnd SubSub
25
VB6 VB6 –– IMÁGENES (VII)IMÁGENES (VII)
Dibujar puntosDibujar puntos
Ojo:Ojo: en en eVBeVB hay que utilizar hay que utilizar DrawPointDrawPoint
26
VB6 VB6 –– RATÓN (I)RATÓN (I)
Eventos del ratónEventos del ratón
••MouseDownMouseDown:: Se pulsó un botón del ratón
••MouseUpMouseUp:: Cuando se suelta el botón
••MouseMoveMouseMove:: Cuando se mueve el ratón
••MousePointerMousePointer:: Tipo de puntero 1-Arrow 2-Cross
27
VB6 VB6 –– RATÓN (II)RATÓN (II)
Eventos del ratónEventos del ratón
•• EjercicioEjercicio
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Text1.Text = "Se ha pulsado el botón izquierdo"If Button = 2 Then Text1.Text = "Se ha pulsado el botón derecho"If Button = 4 Then Text1.Text = "Se ha pulsado el botón del medio“
ValorX.Text = Format(X, "###0.00")ValorY.Text = Format(Y, "###0.00")
End Sub
1. Constrúyase el siguiente formulario1. Constrúyase el siguiente formulario
2. Código2. Código
28
VB6 VB6 –– RATÓN (III)RATÓN (III)
Eventos del ratónEventos del ratón•• CódigoCódigoPrivatePrivate SubSub Form_MouseMove(ButtonForm_MouseMove(Button As As IntegerInteger, , ShiftShift As As IntegerInteger, X As Single, Y As Single), X As Single, Y As Single)
IfIf ButtonButton = 0 = 0 ThenThen ExitExit SubSubIfIf ButtonButton = 1 = 1 OrOr ButtonButton = 2 = 2 OrOr ButtonButton = 4 = 4 ThenThen
IfIf ((ButtonButton = 1) = 1) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón izquierdo"= "Se pulsó sólo el botón izquierdo"IfIf ((ButtonButton = 2) = 2) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón derecho"= "Se pulsó sólo el botón derecho"IfIf ((ButtonButton = 4) = 4) ThenThen Text1.Text1.TextText = "Se pulsó sólo el botón medio"= "Se pulsó sólo el botón medio"
ElseElseIfIf ((ButtonButton AndAnd 1) 1) ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo y ?"y ?"IfIf ((ButtonButton AndAnd 2) 2) ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones dchodcho y ?"y ?"IfIf ((ButtonButton AndAnd 4) 4) ThenThen Text1.Text1.TextText = "Se pulsaron los botones medio y ?"= "Se pulsaron los botones medio y ?"IfIf ((ButtonButton AndAnd 3) = 3 3) = 3 ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo y y dchodcho""IfIf ((ButtonButton AndAnd 7) = 7 7) = 7 ThenThen Text1.Text1.TextText = "Se pulsaron los botones = "Se pulsaron los botones izdoizdo, , dchodcho y medio"y medio"
EndEnd IfIf
ValorX.TextValorX.Text = = Format(XFormat(X, "###0.00"), "###0.00")ValorY.TextValorY.Text = = Format(YFormat(Y, "###0.00"), "###0.00")
EndEnd SubSub
PrivatePrivate SubSub Form_MouseUp(ButtonForm_MouseUp(Button As As IntegerInteger, , ShiftShift As As IntegerInteger, X As Single, Y As Single), X As Single, Y As Single)
IfIf ButtonButton = 1 = 1 ThenThen Text1.Text1.TextText = "Se ha soltado el botón izquierdo"= "Se ha soltado el botón izquierdo"IfIf ButtonButton = 2 = 2 ThenThen Text1.Text1.TextText = "Se ha soltado el botón derecho"= "Se ha soltado el botón derecho"IfIf ButtonButton = 4 = 4 ThenThen Text1.Text1.TextText = "Se ha soltado el botón del medio“= "Se ha soltado el botón del medio“
ValorX.TextValorX.Text = = Format(XFormat(X, "###0.00"), "###0.00")ValorY.TextValorY.Text = = Format(YFormat(Y, "###0.00"), "###0.00")
EndEnd SubSub
29
VB6 VB6 –– RATÓN (IV)RATÓN (IV)
Eventos del ratónEventos del ratón•• CódigoCódigo
Private Sub Option1_Click()Private Sub Option1_Click()MousePointerMousePointer = 1= 1
End SubEnd Sub
Private Sub Option2_Click()Private Sub Option2_Click()MousePointerMousePointer = 2= 2
End SubEnd Sub
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Comunicaciones Comunicaciones –– Puerto SeriePuerto Serie
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Comunicaciones Comunicaciones –– Puerto Serie VBPuerto Serie VB
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
32
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
RI (Ring Indicator)???229
CTS (Clear To Send)Entrada58
RTS (Request To Send)Salida47
DSR (Data Set Ready)Entrada66
GND---75
DTR (Data Terminal Ready)Salida204
TX (Transmit Data)Salida23
RX (Receive Data)Entrada32
DCD (Data Carrier Detect)Entrada81
DescripciónTipo25-PIN9-PIN
Puerto Serie Puerto Serie ––RS232RS232
33
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Puerto Serie Puerto Serie --EjercicioEjercicio
Diseñar un programa que permita configurar, transmitir y recibirDiseñar un programa que permita configurar, transmitir y recibir datos datos por el puerto serie del PC.por el puerto serie del PC.
•• ¿Cómo insertar el control de puerto serie en VB6?¿Cómo insertar el control de puerto serie en VB6?
Control de comunicaciones Control de comunicaciones PuertoComPuertoCom
‘Puerto que se desea abrir‘Puerto que se desea abrirPuertoCom.CommPortPuertoCom.CommPort = 2 ‘COM2= 2 ‘COM2‘Características comunicación ‘Características comunicación ‘19200 baudios, Paridad Ninguna, 8 bits ‘19200 baudios, Paridad Ninguna, 8 bits ‘ por carácter, 1 bit parada‘ por carácter, 1 bit paradaPuertoCom.SettingsPuertoCom.Settings = “19200,N,8,1”= “19200,N,8,1”‘Abrir puerto de comunicaciones‘Abrir puerto de comunicacionesPuertoCom.PortOpenPuertoCom.PortOpen = = TrueTrue‘Cerrar puerto de comunicaciones‘Cerrar puerto de comunicacionesPuertoCom.PortOpenPuertoCom.PortOpen = = FalseFalse
34
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Puerto SeriePuerto Serie
•• Insertar barra de estado: Control Insertar barra de estado: Control CommonCommon ControlsControls
35
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Puerto SeriePuerto Serie
•• Crear formulario Crear formulario PuertoCom.frmPuertoCom.frm (Formulario (Formulario ppalppal))
StatusBar11-sbrSimple
NameStyle
Barra de estado
txtTX(nada)True2 – Vertical
NameTextMultilineScrollBars
Caja de texto
PuertoComNameControl MSComm
&EnviarcmdEnviar
CaptionName
Boton
txtRX(nada)True2 – Vertical
NameTextMultilineScrollBars
Caja de textoTexto recibido:CaptionEtiqueta
Texto a transmitir:CaptionEtiquetaValorPropiedadObjeto
36
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Puerto SeriePuerto Serie
•• Insertar un menú en el formulario Insertar un menú en el formulario PuertoCom.frmPuertoCom.frm
&Parámetros COMConfigParams
CaptionName
Orden Parámetros COM
&ConfiguraciónmnuConfig
CaptionName
Menú Configuración
&SalirConexionSalir
CaptionName
Orden Salir
-Separador
CaptionName
Separador
&CortarConexionCortar
CaptionName
Orden Cortar
&EstablecerConexionEstablecer
CaptionName
Orden Establecer
Cone&xiónmnuConexion
CaptionName
Menú ConexiónValorProp.Objeto
37
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
•• Crear formulario Crear formulario Configuracion.frmConfiguracion.frm (Parámetros de configuración)(Parámetros de configuración)
Bits de parada:CaptionEtiqueta
lstBitsParada1, 1.5, 2
NameList
Lista Desplegable
lstControlFlujoNinguno, Xon/Xoff, Hardware
NameList
Lista Desplegable
Control de flujo:CaptionEtiqueta
lstBitsCar5,6,7,8
NameList
Lista Desplegable
lstParidadN-Ninguna, E-Par, O-Impar
NameList
Lista Desplegable
lstPuertoCOM1,COM2, ….
NameList
Lista Desplegable
Bits por carácter:CaptionEtiqueta
Paridad:CaptionEtiqueta
lstBaudios2400, 4800, 9600, 19200, 38400, 56000
NameList
Lista Desplegable
Baudios:CaptionEtiqueta
Puerto:CaptionEtiqueta
ValorPropiedadObjeto
38
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
•• Crear un Modulo *.Crear un Modulo *.basbas para declaraciones globales y públicas:para declaraciones globales y públicas:
‘Parámetros de configuración predeterminadosPublic Const PUERTO_PREDETERMINADO = "COM2"Public Const BAUDIOS_PREDETEMINADO = 9600Public Const PARIDAD_PREDETEMINADO = "N - Ninguna" 'NingunaPublic Const BITSCARACTER_PREDETEMINADO = 8Public Const BITSPARADA_PREDETEMINADO = 1Public Const CONTROLFLUJO_PREDETEMINADO = "Ninguno" 'Sin
protocolo‘Variables públicasPublic SPuerto As StringPublic sBaudios As StringPublic sParidad As StringPublic sBitsCar As StringPublic sBitsParada As StringPublic nControlFlujo As String
'Tamaño de las colas de recepción y de transmisiónPublic Const COLARX As Integer = 4096Public Const COLATX As Integer = 4096
Código Código Módulo.basMódulo.bas
39
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
•• Formulario ConfiguraciónFormulario Configuración
Private Sub cmdPredeterminados_Click()' Se actualizan los controles desde las variableslstPuerto.Text = PUERTO_PREDETERMINADO '"COM2"lstBaudios.Text = BAUDIOS_PREDETEMINADO '9600lstParidad.Text = PARIDAD_PREDETEMINADO '"None - Ninguna"lstBitsCar.Text = BITSCARACTER_PREDETEMINADO '8lstBitsParada.Text = BITSPARADA_PREDETEMINADO '1lstControlFlujo.Text = CONTROLFLUJO_PREDETEMINADO 'Ninguno Sin protocolo
End Sub
Private Sub Form_Load()lstPuerto.Text = SPuertolstBaudios.Text = sBaudioslstParidad.Text = sParidadlstBitsCar.Text = sBitsCarlstBitsParada.Text = sBitsParadalstControlFlujo.Text = nControlFlujo
End Sub
Código formulario configuraciónCódigo formulario configuración
40
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
•• Formulario ConfiguraciónFormulario Configuración
Private Sub cmdAceptar_Click()sPuerto = lstPuerto.TextsBaudios = lstBaudios.TextsParidad = lstParidad.TextsBitsCar = lstBitsCar.TextsBitsParada = lstBitsParada.TextnControlFlujo = lstControlFlujo.TextHide
End Sub
Private Sub cmdCancelar_Click()Hide
End Sub
Código formulario configuraciónCódigo formulario configuración
41
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom
Private Sub Form_Load()ConexionCortar.Enabled = False ' Habilitar/Inhabilitar controlesStatusBar1.SimpleText = "Preparado"sPuerto = PUERTO_PREDETERMINADOsBaudios = BAUDIOS_PREDETEMINADOsParidad = PARIDAD_PREDETEMINADOsBitsCar = BITSCARACTER_PREDETEMINADOsBitsParada = BITSPARADA_PREDETEMINADOnControlFlujo = CONTROLFLUJO_PREDETEMINADO
End Sub
Private Sub ConfigParams_Click()If PuertoCom.PortOpen = True Then
MsgBox "Cierre primero la conexión"Exit Sub
End If' Visualizar el formulario ConfiguraciónfrmConfiguración.Show vbModal, Me' Establecer la conexión con los parámetros establecidosIf EstablecerConexion = True Then
' Habilitar el botón de EnviarcmdEnviar.Enabled = True
End IfEnd Sub
Código formulario Código formulario PuertoComPuertoCom
42
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom
Private Sub ConexionEstablecer_Click()' Si la conexión ya estaba establecida, la orden Establecer está inhabilitadaIf EstablecerConexion = True Then
cmdEnviar.Enabled = TrueEnd If
End Sub
Private Sub ConexionCortar_Click()' Si la conexión está cerrada, la orden Cortar está inhabilitadaCortarConexioncmdEnviar.Enabled = False
End Sub
Private Sub cmdEnviar_Click()' Enviar los datos que hay en la caja de transmisiónIf txtTX.Text <> "" Then
EscribirCarsPuerto txtTX.TexttxtTX.Text = ""txtTX.SetFocus
End IfEnd Sub
Código formulario Código formulario PuertoComPuertoCom
Private Sub ConexionSalir_Click()If PuertoCom.PortOpen ThenCortarConexionUnload frmPpal
End Sub
43
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom' 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 código en cada casoSelect Case PuertoCom.CommEvent ' Eventos
Case comEvCDsEvento = "Cambio en la línea CD."
Case comEvCTSsEvento = "Cambio en la línea CTS."
Case comEvDSRsEvento = "Cambio en la línea DSR."
Case comEvRingsEvento = "Cambio en el indicador de llamadas."
Case comEvReceivesEvento = "Recibido(s) " & PuertoCom.RThreshold & " carácter/caracteres."' Leer caracteres del puertoIf LeerCarsPuerto(sRecibida) > 0 Then
txtRX.Text = txtRX.Text & sRecibidaEnd If
Case comEvSendsEvento = "Hay SThreshold = " & PuertoCom.SThreshold & " carácter/caracteres en el búfer de transmisión."
Case comEvEOFsEvento = "Se ha encontrado un carácter EOF en la entrada."
Código formulario Código formulario PuertoComPuertoCom
/**Pasar el código a los alumnos de esta función*/
44
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom' RESPONDER A LOS EVENTOS GENERADOS EN EL PUERTO
' ErroresCase comBreak
sError = "Se ha recibido una interrupción."Case comEventFrame
sError = "Error de trama."Case comEventOverrun
sError = "Datos perdidos."Case comEventRxOver
sError = "Desbordamiento del búfer de recepción."Case comEventRxParity
sError = "Error de paridad."Case comEventTxFull
sError = "Búfer de transmisión lleno."Case comEventDCB
sError = "Error inesperado al recuperar el DCB."End Select
Código formulario Código formulario PuertoComPuertoCom
/**Pasar el código a los alumnos de esta función*/
If Not IsEmpty(sEvento) ThenStatusBar1.SimpleText = sEvento
ElseIf Not IsEmpty(sError) ThenDim vr As VbMsgBoxResultBeepsError = sError & vbNewLine & "Aceptar para ignorar. "
& _"Cancelar para salir"
vr = MsgBox(sError, vbOKCancel + vbExclamation, App.Title)
If vr = vbCancel Then' Cerrar el puertoPuertoCom.PortOpen = FalseConexionEstablecer.Enabled = TrueConexionCortar.Enabled = False
End IfEnd If
End Sub
45
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom' INTERFAZ DE COMUNICACIONES
Private Function EstablecerConexion() As BooleanOn Error Resume NextWith PuertoCom
' Cerrar el control si estuviera abiertoIf .PortOpen = True Then .PortOpen = False
' Especificar el puerto COM que se desea abrirDim Puerto As StringSelect Case sPuerto
Case "COM1"Puerto = 1
Case "COM2"Puerto = 2
Case "COM3"Puerto = 3
Case "COM4"Puerto = 4
End Select
Código formulario Código formulario PuertoComPuertoCom
/**Pasar el código a los alumnos de esta función*/
.CommPort = Puerto ' número del puerto (1, 2, ...)' Establecer el tamaño de las colas de recepción y
transmisión.InBufferSize = COLARX ' cola de recepción.OutBufferSize = COLATX ' cola de transmisión' Limpiar las colas Rx y Tx.InBufferCount = 0.OutBufferCount = 0
' Establecer los parámetros de la comunicaciónDim sSettings As String' Baudios, paridad, número 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 SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom' INTERFAZ DE COMUNICACIONES
' Establecer el control de flujoDim ControlFlujo As HandshakeConstants 'entero
Select Case nControlFlujoCase "Ninguno"
ControlFlujo = 0Case "Xon/Xoff"
ControlFlujo = 1Case "Hardware"
ControlFlujo = 2End Select
.Handshaking = ControlFlujo
' Cómo se leerán los datos del puerto' Caracteres que puede admitir el buffer de transmisión 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
Código formulario Código formulario PuertoComPuertoCom/**Pasar el código */
If .PortOpen = False Then' Error al abrir el puerto (verifique la configuración)BeepMsgBox "Error: No se puede abrir el puerto " & _
sPuerto, vbOKOnly + vbCritical, App.TitleIf sBitsParada > "1" Then
MsgBox _"1 bit en cualquier longitud de carácter, o bien " & _vbCrLf & "1.5 bits en longitud de carácter 5, y " & _vbCrLf & "2 bits en longitud de carácter 6 a 8", _vbOKOnly + vbInformation, App.Title
End IfEstablecerConexion = FalseExit Function
End IfEnd With' El puerto se abrió con éxitoEstablecerConexion = TrueStatusBar1.SimpleText = "Puerto de comunicaciones
abierto"' Habilitar/Inhabilitar órdenes de ls menúsConexionEstablecer.Enabled = FalseConexionCortar.Enabled = True
End Function
47
VB6 VB6 –– PUERTO SERIEPUERTO SERIE
Formulario Formulario PuertoComPuertoCom
Private Function LeerCarsPuerto(ByRef sRecibida As String) As LongsRecibida = PuertoCom.InputLeerCarsPuerto = Len(sRecibida)
End Function
Private Function EscribirCarsPuerto(str As String) As BooleanPuertoCom.Output = strEscribirCarsPuerto = True
End Function
Private Function CortarConexion() As BooleanIf 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 seguridadbTiempoSobrepasado = FalseTiempo = Now
StatusBar1.SimpleText = "Cerrando la conexión..."While PuertoCom.OutBufferCount > 0
' Permitir procesar mensajes pendientesDoEvents
Código formulario Código formulario PuertoComPuertoCom/**Pasar el código */
If DateDiff("s", Now, Tiempo) > 10 Or _bTiempoSobrepasado = True ThenDim vr As VbMsgBoxResultvr = MsgBox("Datos no enviados", vbAbortRetryIgnore, _
App.Title)Select Case vr
' Intentar enviar los datos durante otros 10 segundosCase vbRetry
Tiempo = NowCase vbIgnore ' Ignorar el tiempo límite
bTiempoSobrepasado = TrueCase vbAbortStatusBar1.SimpleText = ""CortarConexion = FalseExit Function
End SelectEnd If
Wend' Tx vacío. Cerrar el puerto.PuertoCom.PortOpen = FalseConexionEstablecer.Enabled = TrueConexionCortar.Enabled = False
End IfStatusBar1.SimpleText = "Conexión concluida"CortarConexion = True
End Function
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Comunicaciones Comunicaciones –– Puerto Serie eVBPuerto Serie eVB
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
49
PUERTO SERIE PUERTO SERIE eVBeVB (I)(I)
•• ¿Cómo insertar el control de puerto serie en ¿Cómo insertar el control de puerto serie en eVBeVB 3.0?3.0?
Diseñar un programa que Diseñar un programa que permitarpermitar transmitir y recibir datos por el transmitir y recibir datos por el puerto serie de la PDApuerto serie de la PDA
50
PUERTO SERIE PUERTO SERIE eVBeVB (II)(II)
•• Crear formulario Crear formulario PuertoSerie.frmPuertoSerie.frm (Formulario (Formulario ppalppal))
ReceivedDataTextBox(nada)True2 – Vertical
NameTextMultilineScrollBars
Caja de texto
Comm1NameControl MSComm
&EnviarCommand1
CaptionName
Boton
DataToTransmitTextBox(nada)True2 – Vertical
NameTextMultilineScrollBars
Caja de textoDatos a transmitir:CaptionEtiqueta
Datos recibidos:CaptionEtiquetaValorPropiedadObjeto
51
PUERTO SERIE PUERTO SERIE eVBeVB (III)(III)
•• Propiedades del control Propiedades del control CommComm
CommPort: Número del puerto
InputLen: Longitud cadena de datos recibidos para lectura. (0-Leer cada vez que le llega un dato)
Settings: Configuración del puerto
Rthreshold = 1: Provoca un OnComm event cada vez que se recibe un carácter
52
PUERTO SERIE PUERTO SERIE eVBeVB (IV)(IV)
•• Código en el formulario Código en el formulario PuertoSerie.frmPuertoSerie.frm
PrivatePrivate SubSub Form_LoadForm_Load()()Comm1.Comm1.PortOpenPortOpen = = TrueTrue
EndEnd SubSub
PrivatePrivate SubSub Command1_Command1_ClickClick()()Comm1.Output = Comm1.Output = DataToTransmitTextBox.TextDataToTransmitTextBox.Text
EndEnd SubSub
PrivatePrivate SubSub Form_OKClickForm_OKClick()()App.EndApp.End
EndEnd SubSub
PrivatePrivate SubSub Comm1_Comm1_OnCommOnComm()()SelectSelect Case Comm1.Case Comm1.CommEventCommEvent
Case Case comEvReceivecomEvReceiveReceivedDataTextBox.TextReceivedDataTextBox.Text = = ReceivedDataTextBox.TextReceivedDataTextBox.Text + Comm1.+ Comm1.InputInput
Case Case comEvSendcomEvSend' do ' do nothingnothing herehere forfor nownow
EndEnd SelectSelectEndEnd SubSub
53
PUERTO SERIE PUERTO SERIE eVBeVB (V)(V)
1.1. Comunicar la PDA con el PC utilizando el Comunicar la PDA con el PC utilizando el HyperterminalHyperterminal
2.2. Comunicar la PDA con el PC utilizando el Programa “PuertoSerie” Comunicar la PDA con el PC utilizando el Programa “PuertoSerie” implementado en VB6implementado en VB6
PruebasPruebas
““Curso Programación de PDAs con Curso Programación de PDAs con Visual Basic”Visual Basic”
Comunicaciones Comunicaciones –– Internet: socketsInternet: sockets
Rafael Barea
Universidad de Alcalá. Departamento de Electrónica
55
SOCKETS (I)SOCKETS (I)
¿Qué es un ¿Qué es un SocketSocket??
Un socket es un objeto a través del cual una aplicación puede enviar o recibir paquetes de datos a través de la red
¿Qué es una comunicación orientada a conexión?¿Qué es una comunicación orientada a conexión?
Es una comunicación entre equipos en la que:•Primero se establece la conexión entre dos equipos•Después se intercambian peticiones y datos•Finalmente se libera la conexión
Características:• Comunicación fiable: si se produce un error en la transmisión se vuelve a enviar la información (paquete perdido).• Es necesario un socket en la aplicación cliente (la que pide la información) y otro en la aplicación servidor (la que proporciona la información)• Normalmente se utiliza el protocolo TCP/IP
56
SOCKETS (II)SOCKETS (II)
Aplicación clienteAplicación cliente--servidorservidor
• Servidor: Aplicación que ofrece servicios
• Cliente: Aplicación que solicita servicios
CLIENTECLIENTE SERVIDORSERVIDOR
EsquemaEsquema
57
SOCKETS (III)SOCKETS (III)
SocketsSockets en Visual Basic en Visual Basic PP Control WinSockControl WinSock
VB6VB6 eVBeVB
58
SOCKETS (IV)SOCKETS (IV)
SocketsSockets en Visual Basic en Visual Basic PP Control WinSockControl WinSock
Funciones:Funciones:
WinSock.Listen: Escuchar peticiones de conexión y guardarlas en una cola de conexiones pendientes. (En el servidor)
• WinSock.Accept: Extrae la primera conexión pendiente en la cola y la acepta.
• WinSock.GetData DatosRecibidos, vbString: Procesa la información recibida/* En eVB debe DatosRecibidos debe ser tipo variant, no tipo string
• WinSock.SendData DatosEnviados: Envia la información recibida/* En eVB debe DatosEnviados debe ser tipo variant, no tipo string
• WinSock.Close: Libera la conexión
• WinSock.State: Información sobre la conexión o acción realizada
• WinSock.Connect servidor, puerto: Conectar los sockets (En el cliente)
59
SOCKETS (V)SOCKETS (V)
Servidor PCServidor PC--VB6 VB6 Cliente PDACliente PDA--eVBeVB
Aplicación clienteAplicación cliente--servidor utilizando servidor utilizando SocketsSockets
Objetivo:Objetivo:
EjercicioEjercicio
60
SOCKETS (VI)SOCKETS (VI)
Aplicación Servidor (VB6)Aplicación Servidor (VB6) EjercicioEjercicio
1. Crear el siguiente formulario1. Crear el siguiente formulario
61
SOCKETS (VII)SOCKETS (VII)
Aplicación Servidor (VB6)Aplicación Servidor (VB6)EjercicioEjercicio
2. Código2. Código
Private Sub CommandEscuchar_Click()WinSock1.ListenTextCodigoConexion.Text = WinSock1.StateIf WinSock1.State = 2 Then
TextEstadoServidor.Text = "Esperando conexión"TextAccion.Text = "Servidor esperando conexión"TextIP.Text = WinSock1.LocalIP
End IfEnd Sub
Private Sub Cerrar_Click()WinSock1.CloseTextCodigoConexion.Text = WinSock1.StateTextEstadoServidor.Text = "Desconectado"TextAccion.Text = "Socket desconectado por el Servidor"
End Sub
Private Sub Enviar_Click()Dim Enviar As String ‘ Mejor si es Dim Enviar As VariantEnviar = TextDataSent.TextWinSock1.SendData (Enviar)TextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Dato enviado por el Servidor"
End Sub
62
SOCKETS (VIII)SOCKETS (VIII)
Aplicación Servidor (VB6)Aplicación Servidor (VB6)EjercicioEjercicio
2. Más código2. Más código
Private Sub IP_Click()TextIP.Text = WinSock1.LocalIPTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "IP Servidor"
End Sub
Private Sub WinSock1_ConnectionRequest()WinSock1.AcceptTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Cliente conectado"TextIPCliente.Text = WinSock1.RemoteHostIPTextEstadoCliente.Text = "Conectado"TextEstadoServidor.Text = "Conectado"
End Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)Dim datos as Variant ‘ No funciona si ponéis Dim datos as StringWinSock1.GetData datos, vbStringTextDataReceived.Text = datosTextCodigoConexion.Text = WinSock1.StateTextAccion.Text = "Datos recibidos del Cliente"
End Sub
63
SOCKETS (IX)SOCKETS (IX)
Aplicación cliente (Aplicación cliente (eVBeVB)) EjercicioEjercicio
1. Crear el siguiente formulario1. Crear el siguiente formulario
64
SOCKETS (X)SOCKETS (X)
Aplicación cliente (Aplicación cliente (eVBeVB)) EjercicioEjercicioPrivate Sub CommandConectar_Click()Dim destino As Stringdestino = TextIPRemote.TextWinSock1.RemoteHost = destinoWinSock1.ConnectLabelEstado.Caption = WinSock1.StateEnd Sub
Private Sub Cerrar_Click()WinSock1.CloseEnd Sub
Private Sub CommandEnviar_Click()Dim enviar As Stringenviar = TextTx.TextWinSock1.SendData (enviar)LabelEstado.Caption = WinSock1.StateEnd Sub
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)Dim datos As StringWinSock1.GetData datos, vbStringLabelEstado.Caption = WinSock1.StateTextRx.Text = datosEnd Sub
Private Sub Form_OKClick()App.End
End Sub