Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #19780 > unrolled thread

Popolare datagridview da rs232

Started byMarco75 <marcoporzi75@gmail.com>
First post2020-05-26 10:26 -0700
Last post2020-06-04 23:12 -0700
Articles 20 on this page of 25 — 6 participants

Back to article view | Back to it.comp.lang.visual-basic


Contents

  Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-26 10:26 -0700
    Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-05-27 08:04 +0200
      Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-26 23:18 -0700
      Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-26 23:21 -0700
        Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-05-27 08:46 +0200
          Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-27 02:46 -0700
            Re: Popolare datagridview da rs232 "Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid> - 2020-05-27 18:01 +0200
              Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-27 09:12 -0700
                Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-05-28 08:06 +0200
                  Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-05-27 23:17 -0700
                    Re: Popolare datagridview da rs232 "Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid> - 2020-05-30 10:17 +0200
                    Re: Popolare datagridview da rs232 BobM <dbtools@email.it> - 2020-06-01 14:28 -0700
                      Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-03 00:58 -0700
                        Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-06-03 12:51 +0200
                          Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-03 03:49 -0700
                            Re: Popolare datagridview da rs232 logica mente <npaolini_no_spam_@ennepisoft.it> - 2020-06-03 14:25 +0200
                              Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-03 05:57 -0700
                                Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-06-03 16:34 +0200
                                  Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-03 07:21 -0700
                            Re: Popolare datagridview da rs232 RobertoA <amorosik@tiscalinet.it> - 2020-06-03 15:42 +0200
                              Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-03 06:57 -0700
                                Re: Popolare datagridview da rs232 Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2020-06-03 18:57 +0200
                                  Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-04 04:49 -0700
                                    Re: Popolare datagridview da rs232 Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2020-06-04 21:47 +0200
                                      Re: Popolare datagridview da rs232 Marco75 <marcoporzi75@gmail.com> - 2020-06-04 23:12 -0700

Page 1 of 2  [1] 2  Next page →


#19780 — Popolare datagridview da rs232

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-26 10:26 -0700
SubjectPopolare datagridview da rs232
Message-ID<51fb7bce-64e3-4932-a61b-d90f54f8146f@googlegroups.com>
Ciao,
devo sviluppare una raccolta dati da bilancia in visual studio 2017.
Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
nella prima metterei un numero progressivo da 1 a n
nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
grazie
Marco

[toc] | [next] | [standalone]


#19781

FromRobertoA <amorosik@tiscalinet.it>
Date2020-05-27 08:04 +0200
Message-ID<rakv0r$jvq$1@gioia.aioe.org>
In reply to#19780
Il 26/05/2020 19:26, Marco75 ha scritto:
> Ciao,
> devo sviluppare una raccolta dati da bilancia in visual studio 2017.
> Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
> nella prima metterei un numero progressivo da 1 a n
> nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
> alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
> come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
> grazie
> Marco
> 

Se cerci 'c# rs232' vien fuori una marea di roba

[toc] | [prev] | [next] | [standalone]


#19782

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-26 23:18 -0700
Message-ID<2d7a793f-10f4-425c-b963-daed6022a9c1@googlegroups.com>
In reply to#19781
Il giorno mercoledì 27 maggio 2020 07:49:17 UTC+2, RobertoA ha scritto:
> Il 26/05/2020 19:26, Marco75 ha scritto:
> > Ciao,
> > devo sviluppare una raccolta dati da bilancia in visual studio 2017.
> > Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
> > nella prima metterei un numero progressivo da 1 a n
> > nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
> > alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
> > come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
> > grazie
> > Marco
> > 
> 
> Se cerci 'c# rs232' vien fuori una marea di roba

ho già cercato e provato e qualcosa sono riuscito a fare ma mi popola il datagridview in un modo un po' strano e non riesco ad inserire il contatore nella prima colonna... continuo a cercare

[toc] | [prev] | [next] | [standalone]


#19783

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-26 23:21 -0700
Message-ID<c1ad997d-76cf-4239-903f-ece927db3de2@googlegroups.com>
In reply to#19781
Il giorno mercoledì 27 maggio 2020 07:49:17 UTC+2, RobertoA ha scritto:
> Il 26/05/2020 19:26, Marco75 ha scritto:
> > Ciao,
> > devo sviluppare una raccolta dati da bilancia in visual studio 2017.
> > Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
> > nella prima metterei un numero progressivo da 1 a n
> > nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
> > alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
> > come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
> > grazie
> > Marco
> > 
> 
> Se cerci 'c# rs232' vien fuori una marea di roba

Ho già cercato e provato diverso codice ma non sono riuscito a popolare correttamente il datagridview con il contatore nella prima colonna e i dati arrivano ma la griglia non va a capo correttamente così ho provato a chiedere per un codice ad hoc. Continuerò a cercare...

[toc] | [prev] | [next] | [standalone]


#19784

FromRobertoA <amorosik@tiscalinet.it>
Date2020-05-27 08:46 +0200
Message-ID<ral1fm$1i3g$1@gioia.aioe.org>
In reply to#19783
Il 27/05/2020 08:21, Marco75 ha scritto:
> Il giorno mercoledì 27 maggio 2020 07:49:17 UTC+2, RobertoA ha scritto:
>> Il 26/05/2020 19:26, Marco75 ha scritto:
>>> Ciao,
>>> devo sviluppare una raccolta dati da bilancia in visual studio 2017.
>>> Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
>>> nella prima metterei un numero progressivo da 1 a n
>>> nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
>>> alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
>>> come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
>>> grazie
>>> Marco
>>>
>>
>> Se cerci 'c# rs232' vien fuori una marea di roba
> 
> Ho già cercato e provato diverso codice ma non sono riuscito a popolare correttamente il datagridview con il contatore nella prima colonna e i dati arrivano ma la griglia non va a capo correttamente così ho provato a chiedere per un codice ad hoc. Continuerò a cercare...
> 

Allora il problema e' diverso, e circoscrivibile al popolamento della 
griglia
Posta il codice che non funziona come desideri e magari c'e' qualcuno 
che riesce ad aiutarti
Oppure, se hai gia' cercato ma con esito negativo, e hai fretta e 
necessita' di realizzare esattamente quanto richiesto prova a pubblicare 
annuncio, anche qua dentro, di ricerca programmatore disponibile a fare 
questo e quest'altro

[toc] | [prev] | [next] | [standalone]


#19785

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-27 02:46 -0700
Message-ID<701087e1-f09c-4b35-b4a9-cb063f4c0ae0@googlegroups.com>
In reply to#19784
Il giorno mercoledì 27 maggio 2020 08:31:19 UTC+2, RobertoA ha scritto:
> Il 27/05/2020 08:21, Marco75 ha scritto:
> > Il giorno mercoledì 27 maggio 2020 07:49:17 UTC+2, RobertoA ha scritto:
> >> Il 26/05/2020 19:26, Marco75 ha scritto:
> >>> Ciao,
> >>> devo sviluppare una raccolta dati da bilancia in visual studio 2017.
> >>> Se lo trovo ancora dovrei avere il codice per aprire e chiudere la porta COM poi mi servirebbe popolare un datagridview composta da 2 colonne:
> >>> nella prima metterei un numero progressivo da 1 a n
> >>> nella seconda il dato numerico a 2 cifre proveniente dalla bilancia
> >>> alla fine devo esportare tutto in un nuovo file Excel e qui dovrei cavarmela...
> >>> come popolo il datagridview? la COM deve essere sempre aperta, è la bilancia a passare il dato, il software lo prenderebbe in automatico
> >>> grazie
> >>> Marco
> >>>
> >>
> >> Se cerci 'c# rs232' vien fuori una marea di roba
> > 
> > Ho già cercato e provato diverso codice ma non sono riuscito a popolare correttamente il datagridview con il contatore nella prima colonna e i dati arrivano ma la griglia non va a capo correttamente così ho provato a chiedere per un codice ad hoc. Continuerò a cercare...
> > 
> 
> Allora il problema e' diverso, e circoscrivibile al popolamento della 
> griglia
> Posta il codice che non funziona come desideri e magari c'e' qualcuno 
> che riesce ad aiutarti
> Oppure, se hai gia' cercato ma con esito negativo, e hai fretta e 
> necessita' di realizzare esattamente quanto richiesto prova a pubblicare 
> annuncio, anche qua dentro, di ricerca programmatore disponibile a fare 
> questo e quest'altro


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

[toc] | [prev] | [next] | [standalone]


#19787

From"Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid>
Date2020-05-27 18:01 +0200
Message-ID<1peq5cnjms2fb$.ljcv00sqiioj.dlg@40tude.net>
In reply to#19785
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.

[toc] | [prev] | [next] | [standalone]


#19788

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-27 09:12 -0700
Message-ID<5e598f4a-26c6-4831-8e78-4e43255bd8b3@googlegroups.com>
In reply to#19787
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

[toc] | [prev] | [next] | [standalone]


#19789

FromRobertoA <amorosik@tiscalinet.it>
Date2020-05-28 08:06 +0200
Message-ID<ranjh5$ql3$1@gioia.aioe.org>
In reply to#19788
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

[toc] | [prev] | [next] | [standalone]


#19790

FromMarco75 <marcoporzi75@gmail.com>
Date2020-05-27 23:17 -0700
Message-ID<4a49b697-09bc-4112-bb2f-71f573e2dab4@googlegroups.com>
In reply to#19789
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

[toc] | [prev] | [next] | [standalone]


#19793

From"Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid>
Date2020-05-30 10:17 +0200
Message-ID<xcvwq1rv1ngl$.183asy2l27zte.dlg@40tude.net>
In reply to#19790
Il Wed, 27 May 2020 23:17:36 -0700 (PDT), Marco75 ha scritto:

> 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!

Probabilmente puoi provare a gestire la ricezione su un thread separato, ma
a questo punto non puoi usare i controlli grafici, ma usare un sistema
diverso non proprio banale.

[toc] | [prev] | [next] | [standalone]


#19794

FromBobM <dbtools@email.it>
Date2020-06-01 14:28 -0700
Message-ID<5dff9228-de0c-4562-96ff-690d31add42a@googlegroups.com>
In reply to#19790
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.

[toc] | [prev] | [next] | [standalone]


#19795

FromMarco75 <marcoporzi75@gmail.com>
Date2020-06-03 00:58 -0700
Message-ID<937572c5-a043-4091-b7b9-172cacf34b97@googlegroups.com>
In reply to#19794
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...

[toc] | [prev] | [next] | [standalone]


#19796

FromRobertoA <amorosik@tiscalinet.it>
Date2020-06-03 12:51 +0200
Message-ID<rb7ufh$16rt$1@gioia.aioe.org>
In reply to#19795
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

[toc] | [prev] | [next] | [standalone]


#19797

FromMarco75 <marcoporzi75@gmail.com>
Date2020-06-03 03:49 -0700
Message-ID<e6aca18e-af41-4e2d-a698-62290e43c795@googlegroups.com>
In reply to#19796
Il giorno mercoledì 3 giugno 2020 12:36:36 UTC+2, RobertoA ha scritto:
> 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

io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì

[toc] | [prev] | [next] | [standalone]


#19798

Fromlogica mente <npaolini_no_spam_@ennepisoft.it>
Date2020-06-03 14:25 +0200
Message-ID<rb84sl$g18$1@gioia.aioe.org>
In reply to#19797
Il 03/06/2020 12:49, Marco75 ha scritto:

> 
> io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì
> 

Puoi provare il programmino che trovi qui: 
https://www.ennepisoft.it/test/testConn.7z
è fatto in C++. Nello zip trovi anche un include e una classe per 
facilitare l'uso della dll (che è il vero motore).

La dll è possibile utilizzarla anche in vb6.
In https://www.ennepisoft.it/test/commsample.7z trovi un esempio, 
trovato in rete, poi convertito per usare la mia dll.
Il form non fa altro che preparare i dati per la connessione (primo 
pulsante), poi aprirla, inviare la stringa 'READ' e aspettare i dati di 
ritorno (era giusto una prova per un amico).
Nel tuo caso potresti mettere la routine in un timer e verificare se ci 
sono dati col comando 'cGetAvail' che ne ritorna il numero di disponibili.
Saluti

[toc] | [prev] | [next] | [standalone]


#19799

FromMarco75 <marcoporzi75@gmail.com>
Date2020-06-03 05:57 -0700
Message-ID<fa40e828-aa2a-49dc-82dc-69a5323dbfcc@googlegroups.com>
In reply to#19798
Il giorno mercoledì 3 giugno 2020 14:26:00 UTC+2, logica mente ha scritto:
> Il 03/06/2020 12:49, Marco75 ha scritto:
> 
> > 
> > io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì
> > 
> 
> Puoi provare il programmino che trovi qui: 
> https://www.ennepisoft.it/test/testConn.7z
> è fatto in C++. Nello zip trovi anche un include e una classe per 
> facilitare l'uso della dll (che è il vero motore).
> 
> La dll è possibile utilizzarla anche in vb6.
> In https://www.ennepisoft.it/test/commsample.7z trovi un esempio, 
> trovato in rete, poi convertito per usare la mia dll.
> Il form non fa altro che preparare i dati per la connessione (primo 
> pulsante), poi aprirla, inviare la stringa 'READ' e aspettare i dati di 
> ritorno (era giusto una prova per un amico).
> Nel tuo caso potresti mettere la routine in un timer e verificare se ci 
> sono dati col comando 'cGetAvail' che ne ritorna il numero di disponibili.
> Saluti

credo di esserci....

Private Sub SerialPortBil_DataReceived(sender As Object, e As Ports.SerialDataReceivedEventArgs) Handles SerialPortBil.DataReceived

        Try
            If SerialPortBil.IsOpen Then
                spDrLine = spDrLine & SerialPortBil.ReadExisting()

                If InStr(1, spDrLine, vbCr) > 0 Or InStr(1, spDrLine, vbLf) > 0 Then
                    spBuffer = spDrLine
                    spDrLine = ""
                    Me.Invoke(New EventHandler(AddressOf DoProcess))
                Else
                    Exit Sub

                End If
            End If
        Catch ex As Exception

        End Try

    End Sub

Private Sub DoProcess()

        Dim f As Integer

        f = DgvDati.Rows.Count

        Dim n As Integer = DgvDati.Rows.Add()
        DgvDati.Rows.Item(n).Cells(0).Value = f '+ 1
        DgvDati.Rows.Item(n).Cells(1).Value = spBuffer 

End Sub

Spero che così funzioni tutto, per ora sembra andare

l'unica cosa è che ora ricevo il dato tipo 8.75 g mentre vorrei ricevere 8,75 senza la g
ci lavoro un po' e vedo se riesco così quando esporto in Excel i dati sono in formato numerico

[toc] | [prev] | [next] | [standalone]


#19802

FromRobertoA <amorosik@tiscalinet.it>
Date2020-06-03 16:34 +0200
Message-ID<rb8bh0$1tf5$1@gioia.aioe.org>
In reply to#19799
Il 03/06/2020 14:57, Marco75 ha scritto:
> Il giorno mercoledì 3 giugno 2020 14:26:00 UTC+2, logica mente ha scritto:
>> Il 03/06/2020 12:49, Marco75 ha scritto:
>>
>>>
>>> io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì
>>>
>>
>> Puoi provare il programmino che trovi qui:
>> https://www.ennepisoft.it/test/testConn.7z
>> è fatto in C++. Nello zip trovi anche un include e una classe per
>> facilitare l'uso della dll (che è il vero motore).
>>
>> La dll è possibile utilizzarla anche in vb6.
>> In https://www.ennepisoft.it/test/commsample.7z trovi un esempio,
>> trovato in rete, poi convertito per usare la mia dll.
>> Il form non fa altro che preparare i dati per la connessione (primo
>> pulsante), poi aprirla, inviare la stringa 'READ' e aspettare i dati di
>> ritorno (era giusto una prova per un amico).
>> Nel tuo caso potresti mettere la routine in un timer e verificare se ci
>> sono dati col comando 'cGetAvail' che ne ritorna il numero di disponibili.
>> Saluti
> 
> credo di esserci....
> 
> Private Sub SerialPortBil_DataReceived(sender As Object, e As Ports.SerialDataReceivedEventArgs) Handles SerialPortBil.DataReceived
> 
>          Try
>              If SerialPortBil.IsOpen Then
>                  spDrLine = spDrLine & SerialPortBil.ReadExisting()
> 
>                  If InStr(1, spDrLine, vbCr) > 0 Or InStr(1, spDrLine, vbLf) > 0 Then
>                      spBuffer = spDrLine
>                      spDrLine = ""
>                      Me.Invoke(New EventHandler(AddressOf DoProcess))
>                  Else
>                      Exit Sub
> 
>                  End If
>              End If
>          Catch ex As Exception
> 
>          End Try
> 
>      End Sub
> 
> Private Sub DoProcess()
> 
>          Dim f As Integer
> 
>          f = DgvDati.Rows.Count
> 
>          Dim n As Integer = DgvDati.Rows.Add()
>          DgvDati.Rows.Item(n).Cells(0).Value = f '+ 1
>          DgvDati.Rows.Item(n).Cells(1).Value = spBuffer
> 
> End Sub
> 
> Spero che così funzioni tutto, per ora sembra andare
> 
> l'unica cosa è che ora ricevo il dato tipo 8.75 g mentre vorrei ricevere 8,75 senza la g
> ci lavoro un po' e vedo se riesco così quando esporto in Excel i dati sono in formato numerico
> 

Cos'e', non sai come tirare via " g" da una stringa?

https://www.youtube.com/watch?v=53iRWY6kf6o

[toc] | [prev] | [next] | [standalone]


#19803

FromMarco75 <marcoporzi75@gmail.com>
Date2020-06-03 07:21 -0700
Message-ID<0466db67-7430-4c7b-9b4f-9810112b729b@googlegroups.com>
In reply to#19802
Il giorno mercoledì 3 giugno 2020 16:19:16 UTC+2, RobertoA ha scritto:
> Il 03/06/2020 14:57, Marco75 ha scritto:
> > Il giorno mercoledì 3 giugno 2020 14:26:00 UTC+2, logica mente ha scritto:
> >> Il 03/06/2020 12:49, Marco75 ha scritto:
> >>
> >>>
> >>> io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì
> >>>
> >>
> >> Puoi provare il programmino che trovi qui:
> >> https://www.ennepisoft.it/test/testConn.7z
> >> è fatto in C++. Nello zip trovi anche un include e una classe per
> >> facilitare l'uso della dll (che è il vero motore).
> >>
> >> La dll è possibile utilizzarla anche in vb6.
> >> In https://www.ennepisoft.it/test/commsample.7z trovi un esempio,
> >> trovato in rete, poi convertito per usare la mia dll.
> >> Il form non fa altro che preparare i dati per la connessione (primo
> >> pulsante), poi aprirla, inviare la stringa 'READ' e aspettare i dati di
> >> ritorno (era giusto una prova per un amico).
> >> Nel tuo caso potresti mettere la routine in un timer e verificare se ci
> >> sono dati col comando 'cGetAvail' che ne ritorna il numero di disponibili.
> >> Saluti
> > 
> > credo di esserci....
> > 
> > Private Sub SerialPortBil_DataReceived(sender As Object, e As Ports.SerialDataReceivedEventArgs) Handles SerialPortBil.DataReceived
> > 
> >          Try
> >              If SerialPortBil.IsOpen Then
> >                  spDrLine = spDrLine & SerialPortBil.ReadExisting()
> > 
> >                  If InStr(1, spDrLine, vbCr) > 0 Or InStr(1, spDrLine, vbLf) > 0 Then
> >                      spBuffer = spDrLine
> >                      spDrLine = ""
> >                      Me.Invoke(New EventHandler(AddressOf DoProcess))
> >                  Else
> >                      Exit Sub
> > 
> >                  End If
> >              End If
> >          Catch ex As Exception
> > 
> >          End Try
> > 
> >      End Sub
> > 
> > Private Sub DoProcess()
> > 
> >          Dim f As Integer
> > 
> >          f = DgvDati.Rows.Count
> > 
> >          Dim n As Integer = DgvDati.Rows.Add()
> >          DgvDati.Rows.Item(n).Cells(0).Value = f '+ 1
> >          DgvDati.Rows.Item(n).Cells(1).Value = spBuffer
> > 
> > End Sub
> > 
> > Spero che così funzioni tutto, per ora sembra andare
> > 
> > l'unica cosa è che ora ricevo il dato tipo 8.75 g mentre vorrei ricevere 8,75 senza la g
> > ci lavoro un po' e vedo se riesco così quando esporto in Excel i dati sono in formato numerico
> > 
> 
> Cos'e', non sai come tirare via " g" da una stringa?
> 
> https://www.youtube.com/watch?v=53iRWY6kf6o

Fatto, l'ho tirata via ed ho sistemato tutto

[toc] | [prev] | [next] | [standalone]


#19800

FromRobertoA <amorosik@tiscalinet.it>
Date2020-06-03 15:42 +0200
Message-ID<rb88h3$bq5$1@gioia.aioe.org>
In reply to#19797
Il 03/06/2020 12:49, Marco75 ha scritto:
> Il giorno mercoledì 3 giugno 2020 12:36:36 UTC+2, RobertoA ha scritto:
>> 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
> 
> io ho a disposizione Hyperterminal Putty non so se può fare le stesse cose... L'azienda non mi permette l'uso di software anche free che si installano sui PC, se ce n'è uno che non va installato ma lanciato direttamente posso provare... in ogni caso io i dati li ricevo, credo sia solo una questione di modificare il codice che li riceve, ora uso un timer, magari sbaglio lì
> 

L'azienda qui e l'azienda la, oiii ma siamo schrezando???
Se c'e' una cosa che ti serve per finire il lavoro, te la fai prendere
Ed in fretta anche
Cerca di tirar giu' qualche santo ogni tanto

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | it.comp.lang.visual-basic


csiph-web