Salve a tutti, premetto che son novello della programmazione e che ho creato un post come questo in un altro forum. Lo posto anche qui per avere diversi punti di vista.
Problema: Devo creare un programma in vb.net che legge la pesata di una bilancia elettronica. Tale peso deve essere letto dal programma ogni volta che viene fatta una pesata.
Situazione: La bilancia si collega al pc tramite un adattatore da COM a USB.
Mia Soluzione: Dopo giorni di ricerche e letture ho trovato la classe IO.Ports.SerialPort che permette di comunicare con una porta seriale. Questo è il codice che ho scritto per comunicare con la bilancia.
codice:
Public Class Form1
Dim WithEvents serialPort As New IO.Ports.SerialPort
'Combobox in cui vengono elencate in apertura di programma le porte COM disponibili
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
cbbCOMPorts.Items.Add(My.Computer.Ports.SerialPortNames(i))
Next
btnDisconnect.Enabled = False
End Sub
'Bottone di connessione alla porta COM
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
If serialPort.IsOpen Then
serialPort.Close()
End If
Try
With serialPort
.PortName = cbbCOMPorts.Text
.BaudRate = 9600
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
End With
serialPort.Open()
lblMessage.Text = cbbCOMPorts.Text & " connected."
btnConnect.Enabled = False
btnDisconnect.Enabled = True
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'Pulsante di disconnessione
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
Try
serialPort.Close()
lblMessage.Text = serialPort.PortName & " disconnected."
btnConnect.Enabled = True
btnDisconnect.Enabled = False
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
'queste sono le sub che permettono la ricezione dei dati dal dispositivo
Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
txtDataReceived.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub
Public Delegate Sub myDelegate()
Public Sub updateTextBox()
With txtDataReceived
.Font = New Font("Arial", 12.0!, FontStyle.Bold)
.SelectionColor = Color.Red
.AppendText(serialPort.ReadExisting)
.ScrollToCaret()
End With
End Sub
Private Sub BbtnEsci_Click(sender As System.Object, e As System.EventArgs) Handles BbtnEsci.Click
Me.Close()
End Sub
End Class
Quello che avviene: La connessione viene accettata, e la textbox riceve stringhe, ma errate. Mi spiego meglio. Dato che con 'serialPort.readExisting' leggo di continuo qualsiasi dato in uscita, ho una continua lettura di stringhe, queste stringhe però non sono il peso che la bilancia sengna nel suo display personale, bensì vengono letti questi caratteri :
$b?jP+ 0,0
P+ 0,0
P+ 0,0
P+ 0,0
P+ 0,0
P+ 0,0
P+ 0,0
Tali caratteri vengono scritti continuamente fino a che non si chiude la connessione o il programma stesso.
Qualcuno ha già avuto a che fare con le bilance elettroniche? come ha risolto?
Questo codice è il giusto modo di approcciarmi al problema?
Sto sbagliando o manca qualcosa a ciò che ho scritto?
Grazie mille