Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.lang.visual-basic > #19780 > unrolled thread
| Started by | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| First post | 2020-05-26 10:26 -0700 |
| Last post | 2020-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
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 →
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-05-26 10:26 -0700 |
| Subject | Popolare 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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | "Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | "Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid> |
|---|---|
| Date | 2020-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]
| From | BobM <dbtools@email.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | logica mente <npaolini_no_spam_@ennepisoft.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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]
| From | Marco75 <marcoporzi75@gmail.com> |
|---|---|
| Date | 2020-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]
| From | RobertoA <amorosik@tiscalinet.it> |
|---|---|
| Date | 2020-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