Path: csiph.com!aioe.org!.POSTED.VYr/u1gMygMZk6k+mfwTkQ.user.gioia.aioe.org!not-for-mail From: RobertoA Newsgroups: it.comp.lang.visual-basic Subject: Re: Popolare datagridview da rs232 Date: Wed, 3 Jun 2020 12:51:24 +0200 Organization: Aioe.org NNTP Server Lines: 113 Message-ID: References: <51fb7bce-64e3-4932-a61b-d90f54f8146f@googlegroups.com> <701087e1-f09c-4b35-b4a9-cb063f4c0ae0@googlegroups.com> <1peq5cnjms2fb$.ljcv00sqiioj.dlg@40tude.net> <5e598f4a-26c6-4831-8e78-4e43255bd8b3@googlegroups.com> <4a49b697-09bc-4112-bb2f-71f573e2dab4@googlegroups.com> <5dff9228-de0c-4562-96ff-690d31add42a@googlegroups.com> <937572c5-a043-4091-b7b9-172cacf34b97@googlegroups.com> NNTP-Posting-Host: VYr/u1gMygMZk6k+mfwTkQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.8.1 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: it Xref: csiph.com it.comp.lang.visual-basic:19796 Il 03/06/2020 09:58, Marco75 ha scritto: > Il giorno lunedì 1 giugno 2020 23:28:14 UTC+2, BobM ha scritto: >> Il giorno giovedì 28 maggio 2020 08:17:38 UTC+2, Marco75 ha scritto: >>> Il giorno giovedì 28 maggio 2020 07:51:36 UTC+2, RobertoA ha scritto: >>>> Il 27/05/2020 18:12, Marco75 ha scritto: >>>>> Il giorno mercoledì 27 maggio 2020 18:01:59 UTC+2, Andrea (Work) ha scritto: >>>>>> Il Wed, 27 May 2020 02:46:01 -0700 (PDT), Marco75 ha scritto: >>>>>> >>>>>>> dopo l'apertura della porta COM ho messo questo: >>>>>>> >>>>>>> DgvDati.Select() 'Seleziono il DataGridView With DgvDati >>>>>>> '.Rows(.Rows.Count - 1).Cells(0).Value = >>>>>>> DgvDati.Rows.IndexOf(CounterSample.ToString) .Rows(.Rows.Count - >>>>>>> 1).Cells(1).Value = SerialPort.ReadLine .Rows.Add() End With >>>>>>> >>>>>>> nella prima riga ho tentato di inserire un contatore nella seconda leggo >>>>>>> il dato ma non va a capo e sembra bloccarsi quando invio altri dati >>>>>>> dalla bilancia... grazie >>>>>> >>>>>> Io metterei i dati in una list of MIA CLASSE, che popolerai quando arrivano >>>>>> dati dalla COM. >>>>>> Poi la griglia visualizza questa lista. >>>>>> >>>>>> A quel punto mettere una colonna con un numero, e una con il testo è molto >>>>>> semplice. >>>>> >>>>> grazie, domani e venerdì sono in smart working e non posso connettermi alla bilancia per eseguire test. Lo proverò martedì e ti faccio sapere >>>>> Marco >>>>> >>>> >>>> Ci sono dei programmi che puoi usare per creare una porta com virtuale >>>> Tu ci scrivi con un emulatore terminale e la porta virtuale e' connessa >>>> alla porta com fisica >>>> Il pc vede i dati arrivare sulla com della bilancia >>>> Eltima e' la prima che mi viene in mente ma anche su sourgeforce c'e' >>>> roba utile per questo >>> >>> L'azienda non concede l'installazione di programmi esterni anche free comunque mi sono lasciato tutti gli aspetti grafici per lo smart working poi mercoledì tornerò a concentrarmi sul test dei dati. >>> detto ciò sono riuscito a far funzionare l'acquisizione dati mettendo questo codice sotto timer. il problema è che ricevo i pesi ma si blocca tutto il resto del form ad esempio il pulsante di uscita e quello di disconnessione! >>> >>> Private Sub TimerRicevi_Tick(sender As Object, e As EventArgs) Handles TimerRicevi.Tick >>> >>> DgvDati.Rows.Add(DgvDati.CurrentRow.Index + 1.ToString, SerialPort.ReadLine) >>> DgvDati(0, DgvDati.NewRowIndex).Selected = True >>> >>> End Sub >> >> Ciao, >> com'e' fatto il protocollo della bilancia? Sei sicuro che la stringa di peso sia terminata con un carattere di NewLine? >> Se guardi la documentazione dice che la Readline legge fino a quando non incontra un carattere di NewLine. >> Può essere che alla prima lettura il readline resti appeso e ti blocchi la UI del programma, in attesa del terminatore NewLine che non arriva. >> >> >> https://docs.microsoft.com/it-it/dotnet/api/system.io.ports.serialport.readline?view=netframework-4.8 >> >> Qui trovi un esempio che mi sembra abbastanza corretto, in particolare il metodo 2 citato, ma dovresti cambiare approccio, usando gli eventi del SerialPort: >> https://stackoverflow.com/questions/21688818/net-serialport-readline-vs-datareceived-event-handler/21689420 >> >> Ps: Attenzione che gli eventi arrivano su un thread diverso da quello della UI, >> cerca come va usato il metodo InvokeRequired. > > > ho provato così (SerialPortBil è il nome della mia seriale): > > Public Sub StartListener() > > Try > > '_SerialPort = New Ports.SerialPort > SerialPortBil = New Ports.SerialPort > > With SerialPortBil > .PortName = CbSerialPort.Text > .BaudRate = 9600 > .DataBits = 8 > .Parity = Ports.Parity.None > .StopBits = Ports.StopBits.One > .Handshake = Ports.Handshake.None > AddHandler .DataReceived, AddressOf SerialPortBil_DataReceived 'DataReceivedHandler > End With > > SerialPortBil.Open() > '_SerialPort.Open() > > Catch ex As Exception > > End Try > End Sub > > Private Shared buffer As String = "" > > Private Sub SerialPortBil_DataReceived(sender As Object, e As Ports.SerialDataReceivedEventArgs) Handles SerialPortBil.DataReceived > > DgvDati.Rows.Add(DgvDati.CurrentRow.Index + 1.ToString, SerialPort.ReadLine) > > End Sub > > sul pulsante di apertura COM ho messo > SerialPortBil.Open() > > non vedo arrivare alcun dato... > provando con un hyperterminal vedo che la bilancia invia il dato poi va a capo... > Dovresti provare con altro programma un po' piu' flessibile, tipo RealTerm o simili Ti possono far vedere i dati anche in binario o esadecimale Cosi' vedi esattamente cosa manda a fine riga, se un car 13, un 10, l'accoppiata dei due o altro E da quello che spara fuori la bilancia poi dipende il software che riceve cosa deve attendersi per chiudere una riga in lettura