Obtener peso de una balanza por medio de un puerto serial Comm1

Problema: Tengo una balanza conectada a mi computadora, por medio del puerto serial Comm1, a la cual le debo capturar el peso para grabarlo en su respectivo registo.
Solución: Verificar que la balanza esté conectada y programar la función que obtenga el peso.

Primero, antes de ponerse a programar, estar totalmente seguros que existe conexión entre la balanza y la computadora, que la balanza esté enviando correctamente los datos, además de que la computadora los esté recibiendo.

Para ello se utiliza el programa Hyper Terminal, que suele venir en Windows XP.

En la pantalla del Hyper Terminal se puede ver que los datos de la balanza no son fijos, al menos en mi caso, sino que constantemente está enviando información si cesar, no solo del peso, sino de muchos datos adicionales.

En mi caso, la información está dividida por comas, que debo tener en cuenta al momento de programar.

Ya entrando de lleno a la programación, al cargar la aplicación, valido que el puerto esté abierto y que se esté recibiendo información de la balanza, ésto lo hago con el siguiente procedimiento.

Private Sub captura_puerto2()
        Dim num_puerto As Integer
        Dim returnStr As String = ""

        On Error GoTo fallo
        num_puerto = 1
 
 'Variable global
        nombre_puerto = "COM" & num_puerto

        Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(nombre_puerto)
            com1.DataBits = 8
            com1.ReadTimeout = 3600
            Dim Incoming As String = com1.ReadLine()
            returnStr = Incoming
            Thread.Sleep(100)
            Incoming = com1.ReadLine()
            com1.Close()
        End Using

        Exit Sub
fallo:
        MsgBox(Err.Description, vbCritical)
End Sub

Luego, para capturar el peso, el cual lo hago desde un grid, cuando presionan Enter, utilizo lo siguiente.

Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles DataGridView1.KeyDown
 If DataGridView1.CurrentCell.ColumnIndex = 1 Then 'Columna que se captura el peso
  DataGridView1.CurrentCell.Value = fp_captura_peso()
 End If
End Sub

Private Function fp_captura_peso() As Double
        Dim lnLen As Long
        Dim lnCRpos As Object
        Dim InBuffer As Object
        Dim InMiddle, InDistinct As Object
        Dim peso_final As Object = 0
        Dim n As Long
        On Error GoTo fallo
        lcEntrada = " "
        fp_captura_peso = 0

        Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(nombre_puerto)
            Dim Incoming As String = com1.ReadLine()
            Thread.Sleep(100)
            Incoming = com1.ReadLine()
            lcEntrada = Incoming
        End Using

        If Len(Trim(lcEntrada)) > 10 Then
            Dim subStrings() As String
            Dim TestArray() As String = Split(lcEntrada, ",")

            For i As Integer = 0 To TestArray.Length - 1
                If TestArray(i) <> "" Then
                    If Char.IsNumber(Trim(TestArray(i))) = True Then
                        peso_final = TestArray(i)
                    End If
                End If
            Next

            If IsNumeric(peso_final) Then
                If peso_final >= 0 Then
                    fp_captura_peso = Format(CDbl(peso_final), "###,##0.0000")
                    Exit Function
                End If
            Else
                fp_captura_peso = 0
            End If
        Else
            MsgBox("No se ha detectado peso, intente nuevamente...", vbCritical)
        End If

        Exit Function

fallo:
        MsgBox(Err.Description)
End Function

Para que funcione correctamente se debe importar la siguiente librería.

Imports MSCommLib