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.
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 :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
$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

Rispondi quotando