Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB.Net] - Ricevere peso da bilancia elettronica

    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

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    ma se pesi qualcosa, ottieni il peso?
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Non hai delle specifiche o un manuale che descriva il protocollo impiegato?
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.