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