No capturo datos del puerto serie
Leo, hace unos días te escribí referente a que pretendo obtener datos de un equipo, a través del puerto serie, y me diste una sugerencia, me enviaste esta sección de prueba:
Private Sub Command1_Click()
If Command1.Caption = "Capturar" Then
Command1.Caption = "Parar"
Text1.Text = ""
MSComm1.PortOpen = True
Else
Command1.Caption = "Capturar"
MSComm1.PortOpen = False
End If
End Sub
Private Sub MSComm1_OnComm()
If CommEvent = 2 Then
text1.Text = Text1.Text = MSComm1.Input
End If
End Sub
Private Sub Form_Load()
Command1.Caption = "Capturar"
End Sub
Luego cuéntame como te fue con las pruebas, cualquier cosa si ves que puedes capturar datos, pero no los interpretas, dime y mandame alguna porción y veo que se puede hacer.
Que pases unas Felices Fiestas.
Saludso, Leo
'-+---------------------------------+-
Bien pues he desarrollado una pequeña aplicación para ver como me arroja esos datos y si se establece la comunicación por el puerto serie y hasta ahorita no he tenido éxito. He configurado todo bien o eso supongo, pero cuando realizo un Input del puerto no me trae nada, no se si tengas oportunidad de darme algunos tips para probar mi programa. Aquí te anexo mi sección de código:
Private Sub LoadSettings()
Dim Settings As String
Dim CommPort As String
Dim Handshaking As String
Dim Offset As Integer
Dim Buffer As Variant
Dim strLOC_ErrorMessage As String
'Establece la configuración Settings = GetSetting("LabWave9000", "Properties", "Settings", "")
If Settings <> "" Then
Me.commLabWave.Settings = Settings
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Settings"
Exit Sub
End If
End If
' En todos los casos, el componente más a la derecha de Settings
' será un solo carácter, excepto cuando haya 1,5 bits de parada.
If InStr(Settings, ".") > 0 Then
Offset = 2
Else
Offset = 0
End If
'-+--------------------------------- ' PROPIEDAD Commport
'-+---------------------------------
CommPort = GetSetting("LabWave9000", "Properties", "CommPort", "")
If CommPort <> "" Then
Me.commLabWave.CommPort = CommPort
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Commport"
Exit Sub
End If
End If
'-+--------------------------------- ' PROTOCOLO DE CONEXION
Handshaking = GetSetting("LabWave9000", "Properties", "Handshaking", "")
If Handshaking <> "" Then
Me.commLabWave.Handshaking = Handshaking
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Handshaking"
Exit Sub
End If
End If
'APERTURA DEL PUERTO
With Me.commLabWave
'Tamaño del Búfer de Recepción
.InBufferSize = GetSetting("LabWave9000", "Properties", "InBufferSize", "") '3072
'Necesario para interceptar el evento comEvReceive
.RThreshold = 1
'Indicar al control que lea todo el buffer al usar Input
.InputLen = 0
'Los datos se recuperan como texto
.InputMode = comInputModeText
'Necesario para recibir los datos
.RTSEnable = True
'Determina si se transfieren caracteres nulos desde el puerto _
Al búfer de recepción
.NullDiscard = True
' Recuperar datos del puerto por el Método de sondeo
If Not .PortOpen Then
.PortOpen = True
End If
Buffer = .Input
'AQUÍ NO ME MANDA NADA DEL BUFFER
Me.lblExito = Me.lblExito & vbCrLf & Buffer
'MsgBox "DATOS TOMADOS DEL BUFFER: " & Buffer, vbInformation, "LW Terminal"
'-+------------------------------+-
Me.lblTesting.Visible = False
Me.lblExito.Visible = True
Me.picImage.Visible = False
Me.picExito.Visible = True
Me.cmdOK.Enabled = True
'-+------------------------------+-
If .PortOpen Then
.PortOpen = False 'Cerrar el puerto de comunicaciones
End If
End With
'-+-----------------------------------+-
Mira leo, este es mi primer programa con puertos serie y no tengo experiencia con la comunicación de dispositivos, pero tengo duda si tengo que instalar un Driver o Controlador del equipo en la computadora para que esta la pueda reconocer.
De hecho los datos que yo utilizo para leer los datos del puerto por default son:
Settings=2400,n,8,1
CommPort=1
HandShaking=0
InBufferZise=1024
Te pido de favor si me pudieras sugerir para resolver algo de lo que he programado mal.
Datos del equipo del que pretendo extraer la información son:
2400 Baud
8 Bits de datos
No paridad
1 Bit de parada
También he contactado a los fabricantes del equipo, y les explique que es lo que pretendo hacer y ellos me dijeron que hiciera una conexión con el Hyperterminal que viene con windows, pero tampoco funciona.
De antemano gracias por leer mi nota.
¿Si me pudieras dar un correo a donde te pueda mandar mi código completo?
Mis correos son:
[email protected]
[email protected]
Private Sub Command1_Click()
If Command1.Caption = "Capturar" Then
Command1.Caption = "Parar"
Text1.Text = ""
MSComm1.PortOpen = True
Else
Command1.Caption = "Capturar"
MSComm1.PortOpen = False
End If
End Sub
Private Sub MSComm1_OnComm()
If CommEvent = 2 Then
text1.Text = Text1.Text = MSComm1.Input
End If
End Sub
Private Sub Form_Load()
Command1.Caption = "Capturar"
End Sub
Luego cuéntame como te fue con las pruebas, cualquier cosa si ves que puedes capturar datos, pero no los interpretas, dime y mandame alguna porción y veo que se puede hacer.
Que pases unas Felices Fiestas.
Saludso, Leo
'-+---------------------------------+-
Bien pues he desarrollado una pequeña aplicación para ver como me arroja esos datos y si se establece la comunicación por el puerto serie y hasta ahorita no he tenido éxito. He configurado todo bien o eso supongo, pero cuando realizo un Input del puerto no me trae nada, no se si tengas oportunidad de darme algunos tips para probar mi programa. Aquí te anexo mi sección de código:
Private Sub LoadSettings()
Dim Settings As String
Dim CommPort As String
Dim Handshaking As String
Dim Offset As Integer
Dim Buffer As Variant
Dim strLOC_ErrorMessage As String
'Establece la configuración Settings = GetSetting("LabWave9000", "Properties", "Settings", "")
If Settings <> "" Then
Me.commLabWave.Settings = Settings
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Settings"
Exit Sub
End If
End If
' En todos los casos, el componente más a la derecha de Settings
' será un solo carácter, excepto cuando haya 1,5 bits de parada.
If InStr(Settings, ".") > 0 Then
Offset = 2
Else
Offset = 0
End If
'-+--------------------------------- ' PROPIEDAD Commport
'-+---------------------------------
CommPort = GetSetting("LabWave9000", "Properties", "CommPort", "")
If CommPort <> "" Then
Me.commLabWave.CommPort = CommPort
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Commport"
Exit Sub
End If
End If
'-+--------------------------------- ' PROTOCOLO DE CONEXION
Handshaking = GetSetting("LabWave9000", "Properties", "Handshaking", "")
If Handshaking <> "" Then
Me.commLabWave.Handshaking = Handshaking
If Err Then
MsgBox "ERROR AL TRATAR DE ASIGNAR LA CONFIGURACION DEL PUERTO." & _
vbCrLf & Err.Number & _
vbCrLf & Err.Source & _
vbCrLf & Err.Description, vbCritical, "Handshaking"
Exit Sub
End If
End If
'APERTURA DEL PUERTO
With Me.commLabWave
'Tamaño del Búfer de Recepción
.InBufferSize = GetSetting("LabWave9000", "Properties", "InBufferSize", "") '3072
'Necesario para interceptar el evento comEvReceive
.RThreshold = 1
'Indicar al control que lea todo el buffer al usar Input
.InputLen = 0
'Los datos se recuperan como texto
.InputMode = comInputModeText
'Necesario para recibir los datos
.RTSEnable = True
'Determina si se transfieren caracteres nulos desde el puerto _
Al búfer de recepción
.NullDiscard = True
' Recuperar datos del puerto por el Método de sondeo
If Not .PortOpen Then
.PortOpen = True
End If
Buffer = .Input
'AQUÍ NO ME MANDA NADA DEL BUFFER
Me.lblExito = Me.lblExito & vbCrLf & Buffer
'MsgBox "DATOS TOMADOS DEL BUFFER: " & Buffer, vbInformation, "LW Terminal"
'-+------------------------------+-
Me.lblTesting.Visible = False
Me.lblExito.Visible = True
Me.picImage.Visible = False
Me.picExito.Visible = True
Me.cmdOK.Enabled = True
'-+------------------------------+-
If .PortOpen Then
.PortOpen = False 'Cerrar el puerto de comunicaciones
End If
End With
'-+-----------------------------------+-
Mira leo, este es mi primer programa con puertos serie y no tengo experiencia con la comunicación de dispositivos, pero tengo duda si tengo que instalar un Driver o Controlador del equipo en la computadora para que esta la pueda reconocer.
De hecho los datos que yo utilizo para leer los datos del puerto por default son:
Settings=2400,n,8,1
CommPort=1
HandShaking=0
InBufferZise=1024
Te pido de favor si me pudieras sugerir para resolver algo de lo que he programado mal.
Datos del equipo del que pretendo extraer la información son:
2400 Baud
8 Bits de datos
No paridad
1 Bit de parada
También he contactado a los fabricantes del equipo, y les explique que es lo que pretendo hacer y ellos me dijeron que hiciera una conexión con el Hyperterminal que viene con windows, pero tampoco funciona.
De antemano gracias por leer mi nota.
¿Si me pudieras dar un correo a donde te pueda mandar mi código completo?
Mis correos son:
[email protected]
[email protected]
1 respuesta
Respuesta de leosoft
1