Option Explicit
'-------------------Definición de variables-------------------
Dim entrada As String 'variable usada para los datos de entrada
Dim salida As String 'variable usada para los datos de salida
Dim n As Double 'variable contador de entrada
'-------------------Fin definición de variables-------------------
'-------------------Se carga la ventana---------------------------
Private Sub form_load()
salida = 0 'inicializo variables
entrada = 0 'inicializo variables
lblEstado.Caption = "Bienvenido" 'mensaje de bienvenida
End Sub
'-------------------Fin carga de ventana--------------------------
'-------------------Cierro la ventana-----------------------------
Private Sub Form_Unload(Cancel As Integer)
puerto.PortOpen = False 'cierro el puerto cuando cierro la ventana
End Sub
'------------------fin cierro la ventana---------------------------
'-------------------Botón conectar--------------------------------
Private Sub cmdcon_Click()
If cmdCon.Caption = "Conectar" Then 'si el botón conectar dice conectar
puerto.CommPort = txtCom 'utilizo el número de com escrito en la caja de texto
puerto.PortOpen = True 'abro el puerto de comunicaciones
cmdCon.Caption = "Desconectar" 'cambio la escritura del botón conectar a Desconectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " abierto" 'etiqueta estado con el mensaje del com abierto
Else
puerto.PortOpen = False 'cierro el puerto de comunicaciones
cmdCon.Caption = "Conectar" 'Cambio la escritura del botón a conectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " cerrado" 'etiqueta estado con el mensaje del com cerrado
End If
End Sub
'------------------Fin botón conectar------------------------------
'------------------botón recibir------------------------------------
Private Sub cmdRecibir_Click()
n = 0
If cmdCon.Caption = "Desconectar" Then 'si el botón conectar dice desconectar, entonces..
puerto.Output = salida + Chr(13) 'salida lo mándo por el puerto más el caracter ASCII 13
Else
MsgBox ("Primero elija el puerto COM y luego presiones conectar") 'si no me conecte me salta éste cartel
End If
End Sub
'-----------------fin Botón enviar---------------------------------
Private Sub puerto_OnComm() 'procedimiento que se ejecuta cada vez que hay un evento en el puerto serie
If puerto.CommEvent = comEvReceive Then 'verifica si el evento fue generado por la recepción de datos
n = n + 1 'incremento n para contar los datos que me llegan
entrada = puerto.Input 'cargo entrada con lo que me llega
lstRecibido.AddItem n & " - " & entrada, 0 'agrego los datos a la lista con el número del contador al principio
End If
End Sub
lstRecibido.AddItem n & " - " & entrada, 0
lstRecibido.AddItem n & " - " & Replace(Replace(entrada, vbCR,""),vbLF,""), 0Vamos, reemplazando el LF y CR por una cadena vacia, precece una chapucilla, pero a lo mejor te funciona bien.
Option Explicit '
'-------------------Definición de variables-------------------
Dim entrada As String 'variable usada para los datos de entrada
Dim salida As String 'variable usada para los datos de salida
Dim n As Double 'variable contador de entrada
'-------------------Fin definición de variables-------------------
'-------------------Se carga la ventana---------------------------
Private Sub form_load()
salida = 0 'inicializo variables
entrada = 0 'inicializo variables
n = 0 'inicializo variables
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "Bienvenido" 'mensaje de bienvenida
End Sub
'-------------------Fin carga de ventana--------------------------
'-------------------Cierro la ventana-----------------------------
Private Sub Form_Unload(Cancel As Integer)
tmrTimer.Enabled = False 'deshabilito el timer
If cmdCon.Caption = "Desconectar" Then
puerto.PortOpen = False 'cierro el puerto cuando cierro la ventana
End If
End Sub
'------------------fin cierro la ventana---------------------------
'-------------------Botón conectar--------------------------------
Private Sub cmdcon_Click()
If cmdCon.Caption = "Conectar" Then 'si el botón conectar dice conectar
puerto.CommPort = txtCom 'utilizo el número de com escrito en la caja de texto
puerto.PortOpen = True 'abro el puerto de comunicaciónes
cmdCon.Caption = "Desconectar" 'cambio la escritura del botón conectar a Desconectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " abierto" 'etiqueta estado con el mensaje del com abierto
Else
tmrTimer.Enabled = False 'deshabilito el timer
puerto.PortOpen = False 'cierro el puerto de comunicaciones
cmdCon.Caption = "Conectar" 'Cambio la escritura del botón a conectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " cerrado" 'etiqueta estado con el mensaje del com cerrado
End If
End Sub
'------------------Fin botón conectar------------------------------
'------------------botón recibir------------------------------------
Private Sub cmdRecibir_Click()
n = 0
If cmdCon.Caption = "Desconectar" Then 'si el botón conectar dice desconectar, entonces...
entrada = 0 'fuerzo entrada a 0 para que se envíe la solicitud de datos
tmrTimer.Enabled = True 'habilito el timer de envio de solicitud de datos
Else
MsgBox ("Primero elija el puerto COM y luego presiones conectar") 'si no me conecte me salta éste cartel
End If
End Sub
'-----------------fin Botón enviar---------------------------------
'-----------------Temporizador---------------------------------
Private Sub tmrTimer_Timer()
entrada = puerto.Input 'cargo en entrada los datos que llegan
If entrada = "1" & vbCr Then 'la variable entrada es 1<CR>....
lblEstado.Caption = "confirmación OK" 'el label me indica que recibio la confirmación
puerto.Output = "recibido" 'para pruebas con el docklight
tmrTimer.Enabled = False 'deshabilito el timer
Else 'si entradadistinto de 1...
lblEstado.Caption = "Enviando pedido" 'label indica que se está enviando el pedido
puerto.Output = "1" + Chr(13) 'mándo 1 por el puerto más el caracter ASCII 13 <CR>
End If
End Sub
'-----------------Fin Temporizador---------------------------------
'-----------------Botón Borrar-----------------------------------
Private Sub cmdReset_Click()
n = 0 'inicializo n
lstRecibido.Clear 'limpio la lista, queda en blanco
End Sub
'-----------------Fin botón borrar--------------------------------
'-----------------Procedimiento al recibir datos---------------------------------
Private Sub puerto_OnComm() 'procedimiento que se ejecuta cada vez que hay un evento en el puerto serie
entrada = puerto.Input 'lo que llega lo mando a la variable entrada
If tmrTimer.Enabled = True And entrada = "1" & vbCr Then 'la variable entrada es 1<CR>....
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "confirmación OK" 'el label me indica que recibió la confirmación
Else
n = n + 1 'incremento n para contar los datos que me llegan
'lstRecibido.AddItem n & " - " & Replace(Replace(entrada, vbCr, ""), vbLf, ""), 0 'agrego los datos a la lista con el número del contador al principio y elimino los caracteres lf y cr.
AnalizeAsyncBuffer (entrada) 'enviar trama a ser analizada...
End If
End Sub
'-----------------Fin Procedimiento al recibir datos---------------------------------
'-----------------Procedimiento que analiza los datos de entrada---------------------------------
Public Sub AnalizeAsyncBuffer(ByVal inpBuff As String)
Static step As Integer
Static msgTmp As String
Dim i As Integer
For i = 1 To Len(inpBuff) 'desde 1 hasta el número de caracteres que contenga entrada
Select Case Mid(inpBuff, i, 1) 'revisa cada caracter recibido
Case "0" To "9" 'casos en el que el caracter es un valor de 0 al 9
If step < 3 Then
msgTmp = msgTmp & Mid(inpBuff, i, 1)
step = step + 1
Else 'trama invalida. reiniciar...
msgTmp = vbNullString
step = 0
End If
Case vbLf
If step = 3 Then
step = step + 1
Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case vbCr
If step = 4 Then
AddIncomingData (msgTmp)
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End Select
Next
End Sub
'-----------------Fin del procedimiento que analiza los datos de entrada---------------------------------
'-----------------Procedimiento que agrega los datos a la lista---------------------------------
Private Sub AddIncomingData(ByVal dataStr As String)
'MsgBox dataStr
lstRecibido.AddItem n & " - " & dataStr, 0 'agrego los datos a la lista
End Sub
'-----------------Fin del Procedimiento que agrega los datos a la lista---------------------------------
Option Explicit '
'-------------------Definición de variables-------------------
Dim entrada As String 'variable usada para los datos de entrada
Dim salida As String 'variable usada para los datos de salida
Dim n As Double 'variable contador de entrada
'-------------------Fin definición de variables-------------------
'-------------------Se carga la ventana---------------------------
Private Sub form_load()
salida = 0 'inicializo variables
entrada = 0 'inicializo variables
n = 0 'inicializo variables
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "Bienvenido" 'mensaje de bienvenida
End Sub
'-------------------Fin carga de ventana--------------------------
'-------------------Cierro la ventana-----------------------------
Private Sub Form_Unload(Cancelar As Integer)
If MsgBox("¿Realmente desea salir?", vbYesNo Or _
vbQuestion Or vbDefaultButton1, "Confirmación") = vbNo Then 'msgbox con botónes si-no, con foco en no e icono de pregunta
If cmdCon.Caption = "Desconectar" Then 'si cerramos, mira si el puerto esta conectado para desconectarlo
puerto.PortOpen = False
Cancelar = True
Else
Cancelar = True
End If
Else
Cancelar = False 'si no cerramos el programa
End If
End Sub
'------------------fin cierro la ventana---------------------------
'-------------------Botón conectar--------------------------------
Private Sub cmdCon_Click()
On Error GoTo msgError 'sí hay un error llama a la etiqueta msgError
If cmdCon.Caption = "Conectar" Then 'si el botón conectar dice conectar
puerto.CommPort = txtCom 'utilizo el número de com escrito en la caja de texto
puerto.PortOpen = True 'abro el puerto de comunicaciónes
cmdCon.Caption = "Desconectar" 'cambio la escritura del botón conectar a Desconectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " abierto" 'etiqueta estado con el mensaje del com abierto
Else
tmrTimer.Enabled = False 'deshabilito el timer
puerto.PortOpen = False 'cierro el puerto de comunicaciones
cmdCon.Caption = "Conectar" 'Cambio la escritura del botón a conectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " cerrado" 'etiqueta estado con el mensaje del com cerrado
End If
Exit Sub
msgError: 'Etiqueta error
If Err.Number <> 0 Then
MsgBox "Se ha producido el siguiente error:" & vbCrLf & _
Err.Number & ", " & Err.Description, 48, "Oops! Falló...." 'msgbox que indica el error con el icono 48 (crítico)
End If
End Sub
'------------------Fin botón conectar------------------------------
'------------------botón recibir------------------------------------
Private Sub cmdRecibir_Click()
n = 0
If cmdCon.Caption = "Desconectar" Then 'si el botón conectar dice desconectar, entonces...
entrada = 0 'fuerzo entrada a 0 para que se envíe la solicitud de datos
tmrTimer.Enabled = True 'habilito el timer de envio de solicitud de datos
Else
MsgBox "Primero elija el puerto COM y luego presione conectar", 48, "No se ha conectado un puerto COM" 'si no me conecte me salta éste cartel
End If
End Sub
'-----------------fin Botón enviar---------------------------------
'-----------------Temporizador---------------------------------
Private Sub tmrTimer_Timer()
lblEstado.Caption = "Enviando pedido" 'label indica que se está enviando el pedido
puerto.Output = "1" + Chr(13) 'mándo 1 por el puerto más el caracter ASCII 13 <CR>
End Sub
'-----------------Fin Temporizador---------------------------------
'-----------------Botón Borrar-----------------------------------
Private Sub cmdReset_Click()
n = 0 'inicializo n
lstRecibido.Clear 'limpio la lista, queda en blanco
End Sub
'-----------------Fin botón borrar--------------------------------
'-----------------Procedimiento al recibir datos---------------------------------
Private Sub puerto_OnComm() 'procedimiento que se ejecuta cada vez que hay un evento en el puerto serie
If puerto.CommEvent = comEvReceive Then
entrada = puerto.Input 'lo que llega lo mando a la variable entrada
If entrada = "1" & vbCr Then 'la variable entrada es 1<CR>....
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "confirmación OK" 'el label me indica que recibio la confirmación
Else
AnalizeAsyncBuffer (entrada) 'enviar trama a ser analizada...
End If
End If
End Sub
'-----------------Fin Procedimiento al recibir datos---------------------------------
'-----------------Procedimiento que analiza los datos de entrada---------------------------------
Public Sub AnalizeAsyncBuffer(ByVal inpBuff As String)
Static step As Integer
Static msgTmp As String
Dim i As Integer
For i = 1 To Len(inpBuff) 'desde 1 hasta el número de caracteres que contenga entrada
Select Case Mid(inpBuff, i, 1) 'revisa cada caracter recibido
Case "0" To "9" 'casos en el que el caracter es un valor de 0 al 9
If step < 3 Then
msgTmp = msgTmp & Mid(inpBuff, i, 1)
step = step + 1
Else 'trama invalida. reiniciar...
msgTmp = vbNullString
step = 0
End If
Case vbLf
If step = 3 Then
step = step + 1
Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case vbCr
If step = 4 Then
AddIncomingData (msgTmp)
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End Select
Next
End Sub
Private Sub AddIncomingData(ByVal dataStr As String)
n = n + 1 'incremento n para contar los datos que me llegan
lstRecibido.AddItem n & " - " & dataStr, 0 'agrego los datos a la lista
End Sub