Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
De la forma en como estás seleccionando el puerto en el ComboBox, no estás seleccionando el número correcto.
Al puerto 1 si lo seleccionas bien: Ver el archivo adjunto 127756
Pero del puerto COM2 en adelante, ya no es el número de puerto correcto: Ver el archivo adjunto 127757 [/URL]
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
Private Sub Command_CONECTAR_Click()
If Not MSComm_Puerto_Serie.PortOpen Then
[B] MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex) [/B]
MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = False
Command_Led_8_ON.Enabled = True ' Activar botón ON.
Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
Else
MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = True
Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
End If
End Sub
Usa esta función para obtener el número del puerto eleccionado en el ComboBox:
El valor de retorno es el número encontrado en la cadena del primer "COMX"Código:[COLOR=Blue]Private Function[/COLOR] Get_CommPort(ComboPuertos [COLOR=Blue]As[/COLOR] ComboBox) [COLOR=Blue]As Integer[/COLOR] [COLOR=Green] ' Obtener y retornar únicamente el número del puerto seleccionado.[/COLOR] [COLOR=Blue]Dim[/COLOR] StrPos% [COLOR=Blue]Dim[/COLOR] Cadena$ StrPos = InStr(1, ComboPuertos.Text, "(") [COLOR=Blue] If [/COLOR]StrPos [COLOR=Blue]Then[/COLOR] Cadena = [COLOR=Blue]CStr([/COLOR]Mid(ComboPuertos.Text, StrPos, 6)[COLOR=Blue])[/COLOR] Get_CommPort = [COLOR=Blue]CStr([/COLOR]Val(Mid(Cadena, 5, 2))[COLOR=Blue])[/COLOR] [COLOR=Blue]Else[/COLOR] Get_CommPort = 0 [COLOR=Blue]End If[/COLOR] [COLOR=Blue]End Function[/COLOR]
Y así llamas a la función:
Si retorna un número diferente a 0, todo bien y sigues, si retorna 0, algo va mal y das aviso.Código:Variable = Get_CommPort(El_ComboBox)
Saludos.
Function CommPort(cadena As String) As Integer
Dim matrix() As String
matrix = Split(cadena, "(COM")
If UBound(matrix) > 0 Then
CommPort= Replace(matrix(1), ")", "")
Else: CommPort= 0
End If
End Function
Claro, pero para que lo entiendas mejor, adjunto un ejemplo.¿Puedes poner el código completo con ese trozo de código?
Esa es la forma en como Meta lo está haciendo, yo uso otra forma.Pero se supone que el número del puerto se guarda en el ItemData,
en esta línea:
por eso despues cuando Conecta usa esto para sacar el número de puerto.Código:ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
Adjunté unas fotos al respecto para demostrar que no siempre se obtiene el puerto correcto de esa forma.Lo probé con puertos COM superiores a 10 y funciona bien.
No es que sea más fácil así, es sólo otra forma de hacerlo.Usando matrices sale más fácil.
MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'Option Explicit
Private Sub Form_Load()
Dim nCom% ' Buscamos el número del puerto:
With Me.ComboBoxCOM
Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
For Each wmiobject In WMIObjectSet
If InStr(wmiobject.Name, "COM") Then
ComboBoxCOM.AddItem wmiobject.Name
nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
nCom = Val(Mid(wmiobject.Name, nCom + 3))
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
End If
Next
Set WMIObjectSet = Nothing
'###########################################################################
If ComboBoxCOM.ListCount = 0 Then
'MsgBox "No se encontraron puertos COM."
Me.ComboBoxCOM.Clear
Me.Command_CONECTAR.Enabled = False
Me.ComboBoxCOM.Enabled = False
' Me.Text_Mensajes.Enabled = False
Me.Text_Mensajes.FontBold = True
Me.Text_Mensajes.FontSize = 15
Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
' Me.Enabled = False
Exit Sub
End If
'###########################################################################
' Para seleccionar el primer puerto encontrado:
ComboBoxCOM.ListIndex = 0
End With
End Sub
Private Sub ComboBoxCOM_Click()
' Configurar MSComm
With Me.ComboBoxCOM
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
End With
' D@rkbytes ###########################################################################
Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'###########################################################################
End Sub
' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
If Not MSComm_Puerto_Serie.PortOpen Then
' analogico ###########################################################################
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
'###########################################################################
MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = False
Command_Led_8_ON.Enabled = True ' Activar botón ON.
Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
Else
MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = True
Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
End If
End Sub
Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub
Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
Option Explicit
'Option Explicit
Buenas:
Me estoy liando...
Dejo el códig que aparentemente funciona bien. He modificado como dice analógico algo y en vez de usar Led_8_ON y Led_8_OFF esos 8 lo he cambiado por : Led_13_ON y Led_13_OFF ya que tengo conectado Arduino UNO y Arduino Micro.
He cambiado.
porCódigo:MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Le he puesto abajo un label nuevo para que no me salga en pantalla los mensajes y tenga que pulsar Aceptar, así no lo veo tan incómodo.Código:Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
El código compelto que tengo hecho por ahora es este.
Me funciona bien, he comprobado los dos Arduinos y funcioina bien.
Ver el archivo adjunto 127866
El único problema que le veo que que cuando dejo este código desde el principio.Código:'Option Explicit Private Sub Form_Load() Dim nCom% ' Buscamos el número del puerto: With Me.ComboBoxCOM Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity") For Each wmiobject In WMIObjectSet If InStr(wmiobject.Name, "COM") Then ComboBoxCOM.AddItem wmiobject.Name nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare) nCom = Val(Mid(wmiobject.Name, nCom + 3)) ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom End If Next Set WMIObjectSet = Nothing '########################################################################### If ComboBoxCOM.ListCount = 0 Then 'MsgBox "No se encontraron puertos COM." Me.ComboBoxCOM.Clear Me.Command_CONECTAR.Enabled = False Me.ComboBoxCOM.Enabled = False ' Me.Text_Mensajes.Enabled = False Me.Text_Mensajes.FontBold = True Me.Text_Mensajes.FontSize = 15 Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM." ' Me.Enabled = False Exit Sub End If '########################################################################### ' Para seleccionar el primer puerto encontrado: ComboBoxCOM.ListIndex = 0 End With End Sub Private Sub ComboBoxCOM_Click() ' Configurar MSComm With Me.ComboBoxCOM MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex) End With ' D@rkbytes ########################################################################### Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort 'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort '########################################################################### End Sub ' Si ya has seleccionado un puerto en el comboBox ' Si pulsas conectar abre el puerto y si no lo cierra. Private Sub Command_CONECTAR_Click() If Not MSComm_Puerto_Serie.PortOpen Then ' analogico ########################################################################### MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex) '########################################################################### MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie. Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón. ComboBoxCOM.Enabled = False Command_Led_8_ON.Enabled = True ' Activar botón ON. Command_Led_8_OFF.Enabled = True ' Activar botón OFF. Else MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie. Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón. ComboBoxCOM.Enabled = True Command_Led_8_ON.Enabled = False ' Desactivar botón ON. Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF. End If End Sub Private Sub Command_Led_8_OFF_Click() ' Envía este cadena de carácter por el puerto serie. MSComm_Puerto_Serie.Output = "Led_13_OFF" End Sub Private Sub Command_Led_8_ON_Click() ' Envía este cadena de carácter por el puerto serie. MSComm_Puerto_Serie.Output = "Led_13_ON" End Sub
Al ejecutar me sale este error.Código:Option Explicit
Ver el archivo adjunto 127867
Me señala aquí siempre.
Ver el archivo adjunto 127868
¿A ustedes les pasa?
Si dejo documentado así:
Código:'Option Explicit
Funciona de maravilla.
Por lo que veo en el código general, funciona bien y lo he comprobado. Ahora solo falta, bajo mi punto devista, quitar el label que puse nuevo para saber si realmente selecciona los puertos, cosa que haré al final de todo cuando esté al 100 % seguro de que funciona y, la entradas de datos del puerto serie, cuando Arduino envías tramas de bytes que dice: "Led 13 a sido apagado". Solo recibe mensajes.
Les dejo el proyecto para que lo descarguen, analicen más a fondo y cómodo..
Dim WMIObjectSet As Object
Dim wmiobject As Object
###########################################################################
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
'###############################################################
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Me.Text_Mensajes.Text="Conectado al : COM" & MSComm_Puerto_Serie.CommPort & vbnewline
Me.Text_Mensajes.Text=""
' Variables del evento load.
Dim WMIObjectSet As Object
Dim wmiobject As Object
Option Explicit
' Variables del evento load.
Dim WMIObjectSet As Object
Dim wmiobject As Object
Private Sub Form_Load()
Dim nCom% ' Buscamos el número del puerto:
With Me.ComboBoxCOM
Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
For Each wmiobject In WMIObjectSet
If InStr(wmiobject.Name, "COM") Then
ComboBoxCOM.AddItem wmiobject.Name
nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
nCom = Val(Mid(wmiobject.Name, nCom + 3))
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
End If
Next
Set WMIObjectSet = Nothing
'###########################################################################
If ComboBoxCOM.ListCount = 0 Then
'MsgBox "No se encontraron puertos COM."
Me.ComboBoxCOM.Clear
Me.Command_CONECTAR.Enabled = False
Me.ComboBoxCOM.Enabled = False
' Me.Text_Mensajes.Enabled = False
Me.Text_Mensajes.FontBold = True
Me.Text_Mensajes.FontSize = 15
Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
' Me.Enabled = False
Exit Sub
End If
'###########################################################################
' Para seleccionar el primer puerto encontrado:
ComboBoxCOM.ListIndex = 0
End With
End Sub
Private Sub ComboBoxCOM_Click()
' Configurar MSComm
With Me.ComboBoxCOM
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
End With
' D@rkbytes ###########################################################################
Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'###########################################################################
End Sub
' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
If Not MSComm_Puerto_Serie.PortOpen Then
' analogico ###########################################################################
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
'###########################################################################
MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = False
Command_Led_8_ON.Enabled = True ' Activar botón ON.
Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
Else
MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = True
Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
End If
End Sub
Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub
Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
Option Explicit
Private Sub Form_Load()
Dim WMIObjectSet As Object ' Variables del evento load.
Dim wmiobject As Object
Dim nCom% ' Buscamos el número del puerto:
With Me.ComboBoxCOM
Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
For Each wmiobject In WMIObjectSet
If InStr(wmiobject.Name, "COM") Then
ComboBoxCOM.AddItem wmiobject.Name
nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
nCom = Val(Mid(wmiobject.Name, nCom + 3))
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
End If
Next
Set WMIObjectSet = Nothing
'###########################################################################
If ComboBoxCOM.ListCount = 0 Then
'MsgBox "No se encontraron puertos COM."
Me.ComboBoxCOM.Clear
Me.Command_CONECTAR.Enabled = False
Me.ComboBoxCOM.Enabled = False
' Me.Text_Mensajes.Enabled = False
Me.Text_Mensajes.FontBold = True
Me.Text_Mensajes.FontSize = 15
Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
' Me.Enabled = False
Exit Sub
End If
'###########################################################################
' Para seleccionar el primer puerto encontrado:
ComboBoxCOM.ListIndex = 0
End With
End Sub
Private Sub ComboBoxCOM_Click()
' Configurar MSComm
With Me.ComboBoxCOM
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
End With
' D@rkbytes ###########################################################################
Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
Label_Mensaje_Puerto_Seleccionado.Caption = "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'###########################################################################
End Sub
' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
If Not MSComm_Puerto_Serie.PortOpen Then
' analogico ###########################################################################
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
'###########################################################################
MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = False
Command_Led_8_ON.Enabled = True ' Activar botón ON.
Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
Else
MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = True
Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
End If
End Sub
Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_OFF"
End Sub
Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_13_ON"
End Sub
¿Ya se puede urgar en los datos de entrada del puerto serie?
Espero que no sea tan complicado como todo esto.
Saludos.
Private Sub RS232_OnComm()
' Recibir los datos del puerto serie
Dim szData$
Dim sNum As Byte
Dim x%
Select Case RS232.CommEvent
' Evento de recepción de datos
Case comEvReceive
' Leer datos del puerto
szData = RS232.Input
If mnuExtras(2).Checked = True Then
szData = RemoveChar(szData, Chr(13))
szData = RemoveChar(szData, Chr(10))
End If
On Error GoTo ErrDep
If optRxOptions(0) Then
' Mostrar los datos de entrada con valor binario de 8 bits.
txtRX.Text = txtRX.Text & DecToBin(Asc(szData), 8) & " "
End If
If optRxOptions(1) Then
' Si se checa la opción Decimal, mostrar el número ASCII.
txtRX.Text = txtRX.Text & Asc(szData) & " "
End If
If optRxOptions(2) Then
' Si se checa la opción Hexadecimal, mostrar el número Hex.
txtRX.Text = txtRX.Text & Hex(Asc(szData)) & " "
End If
If optRxOptions(3) Then
' Mostrar lo que se ingresa.
txtRX.Text = txtRX.Text & szData
End If
If optRxOptions(4) Then
' Convertir los datos recibidos a bytes para mostrarlos en los LED's.
sNum = Asc(szData)
For x = 7 To 0 Step -1
If sNum And 2 ^ x Then
chkSW(x).Value = 1
Else
chkSW(x).Value = 0
End If
chkSW(x).Refresh
Next x
End If
Case comEvEOF
txtRX.Text = txtRX.Text & _
"Se produjo una detección de fin de archivo." & vbCrLf
End Select
txtRX.SelStart = Len(txtRX.Text)
ErrDep: ' Depuración de errores
If Err.Number <> 0 Then
txtRX.Text = "Ocurrio un error durante la recepción de datos." & vbCrLf & _
"Descripción: " & Err.Description
Err.Clear
Exit Sub
End If
End Sub
Private Sub MSComm_Puerto_Serie()
MSComm_Puerto_Serie.Input = Text_Mensajes.Text
End Sub
Hola:
Private Sub RS232_OnComm()
En VB 6 pesco mucho. jejejejejeje. Quiero decir que no me entero. Me falta poner una variable que almacene los datos de entrada, luego esa variable donde tiene los datos o mensajes almacenados, lo deposita en el Text_Mensajes.Text.
¿Cómo se hace en VB?
Saludos.
analogico dijo:No te entiendo pero la recepcion se hace en el evento OnComm del componente serial
if RS232.CommEvent =comEvReceive then
szData = RS232.Input
end if
Private Sub MSComm1_OnComm()
Dim Dato_Recibido As String
Dato_Recibido = MSComm1.Input
Text1.Text = Text1.Text & Dato_Recibido
End Sub
Private Sub MSComm_Puerto_Serie_OnComm()
Dim Dato_Recibido As String ' Variable para almacenar datos.
Dato_Recibido = MSComm_Puerto_Serie.Input ' Los datos recibidos lo almacena en la variable.
Text_Mensajes.Text = Text_Mensajes.Text & Dato_Recibido ' Los datos de la varible lo muestra en el Text.
End Sub
' Procesador los datos recibidos en el buffer y extraer tramas copletas.
Private Sub Actualizar(ByVal s As Object, ByVal e As EventArgs)
' Asignar el valor de la trama textBox.
RichTextBox_Mensajes.Text = Recibidos
' Selecciona la posición final para leer los mensajes entrantes.
RichTextBox_Mensajes.SelectionStart = RichTextBox_Mensajes.Text.Length
' Mantiene el scroll en la entrada de cada mensaje.
RichTextBox_Mensajes.ScrollToCaret()
End Sub
Eso está en el fragmento de código que colocaste anteriormente sobre mi programa:Si te fijas bien, al llegarle muchos mensajes se activa la barra vertical, pero no se ven los datos al macenados, tienes que tocar la barra vertical hacia abajo para ver lo que está entrando.
¿Cómo se pone en la posición abajo por cada actualización de datos?
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_SCROLL = &HB5
Private Const SB_PAGEDOWN = 3
Private Const SB_PAGEUP = 2
Private Const SB_LINEUP = 0
Private Const SB_LINEDOWN = 1
Private Const SB_BOTTOM = 7
Private Const SB_TOP = 6
DoEvents
SendMessage Text_Mensajes.hWnd, EM_SCROLL, SB_BOTTOM, 0
DoEvents
Option Explicit
Private Sub Form_Load()
Dim WMIObjectSet As Object ' Variables del evento load.
Dim wmiobject As Object
Dim nCom% ' Buscamos el número del puerto:
With Me.ComboBoxCOM
Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity")
For Each wmiobject In WMIObjectSet
If InStr(wmiobject.Name, "COM") Then
ComboBoxCOM.AddItem wmiobject.Name
nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare)
nCom = Val(Mid(wmiobject.Name, nCom + 3))
ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom
End If
Next
Set WMIObjectSet = Nothing
If ComboBoxCOM.ListCount = 0 Then
'MsgBox "No se encontraron puertos COM."
Me.ComboBoxCOM.Clear
Me.Command_CONECTAR.Enabled = False
Me.ComboBoxCOM.Enabled = False
' Me.Text_Mensajes.Enabled = False
Me.Text_Mensajes.FontBold = True
Me.Text_Mensajes.FontSize = 15
Me.Text_Mensajes.Text = "ERROR " & vbNewLine & "No se encontraron puertos COM."
' Me.Enabled = False
Exit Sub
End If
' Para seleccionar el primer puerto encontrado:
ComboBoxCOM.ListIndex = 0
End With
End Sub
Private Sub ComboBoxCOM_Click()
' Configurar MSComm
With Me.ComboBoxCOM
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
End With
Debug.Print "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
'MsgBox "Puerto seleccionado: COM" & MSComm_Puerto_Serie.CommPort
End Sub
' Si ya has seleccionado un puerto en el comboBox
' Si pulsas conectar abre el puerto y si no lo cierra.
Private Sub Command_CONECTAR_Click()
If Not MSComm_Puerto_Serie.PortOpen Then
MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex)
MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie.
Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = False
Command_Led_8_ON.Enabled = True ' Activar botón ON.
Command_Led_8_OFF.Enabled = True ' Activar botón OFF.
Else
MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie.
Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón.
ComboBoxCOM.Enabled = True
Command_Led_8_ON.Enabled = False ' Desactivar botón ON.
Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF.
End If
End Sub
Private Sub Command_Led_8_OFF_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_8_OFF"
End Sub
Private Sub Command_Led_8_ON_Click()
' Envía este cadena de carácter por el puerto serie.
MSComm_Puerto_Serie.Output = "Led_8_ON"
End Sub
Private Sub MSComm_Puerto_Serie_OnComm()
Dim Dato_Recibido As String ' Variable para almacenar datos.
Dato_Recibido = MSComm_Puerto_Serie.Input ' Los datos recibidos lo almacena en la variable.
Text_Mensajes.Text = Text_Mensajes.Text & Dato_Recibido ' Los datos de la varible lo muestra en el Text.
Text_Mensajes.SelStart = Len(Text_Mensajes.Text) ' Mantiene el scroll en la entrada de cada mensaje.
End Sub