Ricerca 
it-ITen-US
Register
Login
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Print     


DotNetWork Forums
Oggetto serialport, gestione evento datareceived
Last Post 06 May 2011 17:48 by Xjanxej. 15 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
Topic is locked
Author Messages

Posts:436

--
27 Aug 2007 14:31  
Ciao a tutti. Mi sono un po' perso e avrei bisogno di essere reindirizzato sulla strada giusta.

Sto creando un applicativo che dialoga con uno strumento via seriale.
Tutto (piu' o meno) ok nell'invio dei dati.

Ecco i miei problemi :

1) dovrei sincronizzare invio e ricezione dei dati, ovvero aspettare che lo strumento risponda prima di inviare un nuovo comando. Al momento ho usato un buffer che viene messo false in fase di invio comendi e valorizzato true alla fine della ricezione. La routine che invia i dati ha un loop iniziale da cui esce solo se il flag e' true.

2) Con l'evento datatreceived dovrei attivare una procedura che elabora i dati ricevuti e fa alcune operazioni, tra le quali attivare o cambiare lo stato di alcuni controlli su una form (li trovate commentati nel codice qui sotto)

Per la lettura del buffer uso serialport.readexisting

Dopo aver ricevuto i dati (li salvo per debug su un file di testo e qui tutto ok) il sistema mi genera un errore. Credo sia dovuto al fatto che l'evento datareceived gira in un thread separato dal resto e si debbano usare i delgates, che pero' mi sono totalmente oscuri.

3) ho la sensazione che il buffer (impostato a 4096 bytes) non venga letto correttamente, infatti una lettura che dovrebbe essere almeno 2048 bytes (1024 word + 6 o 7 bytes di controllo) la rilevo lunga "solo" 1009 bytes.

A complicare il tutto c'e' che lo strumento non e' vicino a me, ma collegato ad un pc che posso controllare da remoto, impossibile quindi vedere il debug in reale se non vado fisicamente la'. Ho simulato con un altro pc, ma non e' la stessa cosa...

Grazie mille in anticipo a chiunque voglia darmi una dritta (anche link sono molto ben accetti) o qualunque tipo di suggerimento.

Max.
ecco alcune info sul codice che uso.

Imports system.io.ports
Module Module1
'porte com usate per le comunicazioni
Public WithEvents DeviceCom As New SerialPort
Public WithEvents ModbusCom As New SerialPort
Public Settaggi As New Settings ' classe contenente i settings applicativo
'array di valori per la scelta del voltaggio della lampada.
Public LampVoltages = New Integer() {0, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, _
510, 520, 530, 540, 550, 560, 470, 580, 590, 600}
'contatore uso lampada
Public SparkCount As Integer = Settaggi.Leggi("SparkCount")
'array per la lista di Light Integration Period
Public Integration = New Integer() {100, 200, 300, 400}
'array con i 4 coefficienti di calibrazione strumento
Public Coef = New Double() {0, 0, 0, 0}
Public devicename As String = ""
Public model As String = ""
Public Serialno As String = ""
Public firmware As String = ""
Public fwdate As String = ""
'flag per sincronizzare attesa e ricezione dei dati
Public DatiRicevuti As Boolean = True
'flag per attivare il debug dei dati in arrivo dalla com
Public ComDebug As Boolean = True
Public BufferIN As String
Public TipoCalcolo As String = ""

Public Sub DeviceDatiRicevuti(ByVal sender As Object, _
ByVal e As SerialDataReceivedEventArgs) _
Handles DeviceCom.DataReceived
'evento scatenato alla ricezione dei dati.
BufferIN = DeviceCom.ReadExisting
ElaboraBuffer()
End Sub

Public Sub ElaboraBuffer()
Dim cmd As Byte 'codice del dato in arrivo
Dim lungh As Integer ' lunghezza della stringa dati (NON del buffer)
'genero una stringa per debug con i codici esa dei dati ricevuti
Dim y1 As String = String.Empty
For i As Integer = 1 To BufferIN.Length
y1 += Hex(Asc(BufferIN.Substring(i - 1, 1))) & " "
Next
'Messaggi.Info("Ricevuti dati: " & x.Length & " bytes " + vbCrLf + "Contenuto: " + y1)

If BufferIN.Substring(0, 2) = "SY" Then ' e' una risposta ad un comando
cmd = Asc(BufferIN.Substring(4, 1))
Dim lenbyteH As Integer = Hex(Asc(BufferIN.Substring(2, 1)))
Dim lenbyteL As Integer = Hex(Asc(BufferIN.Substring(3, 1)))
lungh = Convert.ToInt32(lenbyteH + lenbyteL, 16)
End If
ComLog("<--- " + BufferIN.Length.ToString + " Bytes. Hex: " + y1 + " Asc: " + BufferIN)
ComLog("<--- Tipo Dato: &H" + cmd.ToString)
ComLog("<--- Lunghezza: " + lungh.ToString)

Select Case cmd
Case &H4E ' NAK Errore comunicazione
'MainForm.stripinfo.Text = "Errore di comunicazione con il Device"
'MainForm.UpdatePicBox(MainForm.pbAlarm, 2)
ComLog("<--- Errore comunicazione")

Case &H76 'risposta con voltaggio lampada
Dim volt As Integer = Convert.ToInt32(BufferIN.Substring(55, 2), 16)
Settaggi.Update("lampvolt", volt)
'frmSettings.cblampVoltage.SelectedText = Convert.ToInt16(BufferIN.Substring(5, 2), 16)
'MainForm.stripinfo.Text = "Voltaggio lampada: " + volt.ToString
ComLog("<--- Voltaggio lampada: " + volt.ToString)

Case &H43 'coefficiente di calibrazione
Dim i As Byte = Convert.ToInt32(BufferIN.Substring(5, 1), 16)
Dim y As String = ""
For k As Byte = 0 To 15
y += Asc(BufferIN.Substring(6 + i, 1))
Next
ComLog("<--- Coeff(" + i.ToString + ")= " + y.ToString)
Coef(i) = Convert.ToDouble(y)

Settaggi.Update("coef" + (i + 1).ToString, Coef(i).ToString)

'TODO impostare e visualizzare coefficiente di correzione
i = Nothing
y = Nothing

Case &H49 'System Info
Dim dato1 As String = BufferIN.Substring(6, 11)
Dim dato2 As String = BufferIN.Substring(17, 5)
If Convert.ToInt32(BufferIN.Substring(5, 1)) = 0 Then
'pagina 0
'frmSettings.txtDevicename.Text = dato1
'frmSettings.txtdeviceserialno.Text = dato2
model = dato1
Serialno = dato2
ComLog("<--- Modello: " + dato1)
ComLog("<--- S/n : " + dato2)
ElseIf Convert.ToInt32(BufferIN.Substring(5, 1)) = 1 Then
'pagina 1
'frmSettings.txtdevicefw.Text = dato1
'frmSettings.txtdate.Text = dato2
firmware = dato1
fwdate = dato2
ComLog("<--- Firmware: " + dato1)
ComLog("<--- Date code: " + dato2)
End If

Case &H53 'Lettura spettro
ComLog("<--- Ricevuta lettura spettro " + BufferIN)
Select Case frmSettings.cbCalcoli.SelectedText
Case "ASTM 1017/56"
Dim valori(1024) As Integer
For i As Integer = 0 To BufferIN.Length - 1
valori(i) = Convert.ToInt32(BufferIN.Substring(i + 6, 1) + BufferIN.Substring(i + 7, 1), 16)
Next
Calcoli.ASTM1017_56(valori, frmSettings.tbdila.Text, frmSettings.tbspessore.Text)
Case Else
End Select
Case Else
If BufferIN.Substring(0, 2) = "UV" Then
'ho ricevuto una risposta al WhoAreYou
devicename = BufferIN
End If
End Select
DatiRicevuti = True
'frmSettings.CompilaCampi()
cmd = Nothing
lungh = Nothing
y1 = Nothing
End Sub

Public Sub ComLog(ByVal txt As String)
MainForm.UpdatePicBox(MainForm.pbOperation, 0)
If ComDebug = False Then Exit Sub
Dim RcvDataFile As System.IO.StreamWriter = System.IO.File.AppendText("ComLog.txt")
RcvDataFile.WriteLine("{0} - {1}", Now().ToString("dd/MM/yyyy hh.mm.ss"), txt)
RcvDataFile.Close()
RcvDataFile = Nothing
End Sub

Public Function Compensa(ByVal Wave As Integer) As Double
Dim C As Double = 0
C = Coef(3) * Wave ^ 3
C += Coef(2) * Wave ^ 2
C += Coef(1) * Wave
C += Coef(0)
End Function
End Module

Posts:666

--
27 Aug 2007 15:42  
Allora, innanzitutto benvenuto tra di noi.
Vediamo di risolvere un problema per volta.

La gestione della seriale non è cosa semplicissima in .NET poichè trattasi di ambiente multithreading, anche l'associare una risposta della seriale su un controllo Label di un form causa errori di Threading. Il mio consiglio è quello di impostare la proprietà CheckForIllegalCrossThreadCalls dell'oggetto principale a False così che (se non usi altre gestioni con delegates o multithreading su quell'oggetto) gli errori non vengono sollevati.
Prova intanto a risolvere così poi ci risentiamo per le successive problematiche, intanto studio un po' il tuo codice...
Saluti,
Alberto De Luca

Posts:666

--
27 Aug 2007 15:54  
Ok, allora risposta n. 2
La gestione dell'evento DataReceived è molto comoda se sai in anticipo quanti byte riceverai prima di dover elaborare la stringa ricevuta. Se il numero di Byte è sempre lo stesso (ovvero se chi ti risponde ti invia un numero di byte fisso) devi impostare la proprietà
DeviceCom.ReceivedBytesThreshold = x dove x è il numero di Byte che devono essere nel Buffer della seriale prima che ti venga scatenato l'evento DataReceived. Nel momento che l'evento è scatenato ciò che leggerai all'interno del buffer della seriale è "almeno" di quelle dimensioni. Chiaramente se il numero di byte risposti è inferiore l'evento non viene scatenato.
Se la stringa di risposta può essere di dimensioni variabili allora il discorso cambia, generalmente si esegue un loop sulla seriale finchè non si trova un carattere di terminazione riga, in questo caso per effettuare i test dovresti avere disponibile l'apparecchiatura. Se hai altri problemi sono qua... ;)

Saluti,
Alberto De Luca

Posts:436

--
27 Aug 2007 15:55  
Innanzitutto grazie per il benvenuto. :D

Provo ad inserire CheckForIllegalCrossThreadCalls= false nella form di cui devo modificare i controlli. Ti faccio sapere se intanto funziona quello. (lo posso provare da remoto).

Domani dovrei poter collegare lo strumento direttamente al pc di sviluppo, cosi posso fare un debug accurato e non per tentativi come faccio ora.

Grazie per la disponibilita' e.. in bocca al lupo per l'analisi del mio codice. Preparati a dei bei mal di stomaco !!!

(sono agli inizi!)

Grazie.
Max

Posts:436

--
27 Aug 2007 16:00  
In merito alla tua risposta n. 2.

Teoricamente so cosa devo ricevere, nel senso che ad un comando corrisponde una risposta di lunghezza definita (o per lo meno prevedibile).

Se chiedo lo stato di un parametro la risposta e' di x bytes (dipende dal tipo di richiesta).

In definitiva posso fare cosi:

imposto il thresold della seriale al n. di bytes che mi aspetto, invio il comando e aspetto che arrivino i dati.

Onestaemente ci avevo pensato, ma mi sembrava un po' debole per il fatto che se un byte si perde sto li ad aspettare come un fesso.

...o no ?

intanto procedo.

Grazie.

Posts:666

--
27 Aug 2007 17:38  
Non preoccuparti per il mal di stomaco, ho il Maalox accanto al mouse... :)
Non è necessario che stai li ad aspettare che ti venga scatenato l'evento di datareceived. Un protocollo serio dovrebbe avere la possibilità di capire a quale richiesta corrisponde una risposta (in genere si usano degli id di messaggio) ma se chi ha sviluppato il firmware del macchinozzo non ha gestito questa evenienza, allora devi impostare tu un timeout per ogni richiesta allo scadere del quale decidi se re-inviare la richiesta oppure generare un'eccezione. Normalmente se la risposta non arriva perchè dall'altra parte nessuno riceve, viene generato un errore di Timeout direttamente dalla seriale, impostandone il valore dalla proprietà WriteTimeout (in fase di scrittura) o ReadTimeout (in fase di lettura). Fai attenzione ad usare questi timeout perchè potrebbero ingannarti. Il ReadTimeout entra in funzione quando richiami un metodo Readxxx non quando invii un comando alla seriale, in quel caso entra in funzione il WriteTimeout che, se entro quel tempo l'operazione di Write non è andata a buon fine ti viene generata un'eccezione.
Spero di esserti stato di aiuto.
Saluti,
Alberto De Luca.

Posts:436

--
28 Aug 2007 08:25  
Troppa grazia Messere...

Ti aggiorno.

Ho fatto delle prove e anche impostando nelle 2 form (main e settaggi) check ecc a false ottengo comunque un'eccezione.

In ogni caso, rispondendo ai tuoi post:

Le risposte del macchinozzo sono (tranne un caso specifico) ben definite, ne senso che, ad esempio:

Invio un comando del tipo

&H53 &H59 &H00 &H03 &H43 &H## &Hxx

sta ad indicare:
53 59 = comando in arrivo (iniziano tutti cosi)
00 03 = lunghezza del pacchetto che ti mando
43 = il cosice del comando vero e proprio
## = in questo caso e' un parametro associato al comando
xx = il checksum per verificare che tutto sia ok.

La risposta che ottengo e':

&H53 &H59 &H00 &H13 &H43 &H## [16 bytes] &Hxx

con la stessa logica indicata sopra.

Quindi facendo un parse so gia' che devo elaborare 16 bytes (&H13) che sono una risposta al comando &H43.

Il sistema di sincronia che ho "escogitato" funziona a dovere, infatti ieri ho ottenuto risultati apprezzabili.

Rimane il problema che, oltre a scrivere su file cio' che ricevo qualunque altra operazione genera eccezioni.

Nelle impostazioni della COM inserisco 2 parametri che non mi sono perfettamente chiari nel loro funzionamento:

handshake = RequestToSend
RTS = true

dovrei forse usare questi per gestire il sincronismo? ma come?

per ora ti ringrazio per la disponibilita'. Oggi pomeriggio o domani dovrei poter debuggare con il macchinozzo in linea, direi di non perdere altro tempo su cose empiriche e aspettare un debug serio.

Ti chiedo solo un'ultimo suggerimento.
L'applicazione e' fatta cosi:

una classe statica "Program" con la funzione Main() che inizializza tutta l'applicazione, una form principale, una form per la gestione dei parametri, alcune classi statiche di supporto (messaggi, comandi per il macchinozzo) ed un modulo (quello postato piu' sopra).
Non sono riucito a fare a meno di inserirlo per definire le variabili pubbliche (tipo la com) e le funzioni di gestione della seriale.

la classe program e' definita cosi:

Public Class Program
<STAThread()> _
Shared Sub Main()
...
End Sub

E' corretto tutto cio' ?

Grazie infinite.
Max.

Posts:666

--
29 Aug 2007 00:41  
>Il sistema di sincronia che ho "escogitato" funziona a dovere, infatti ieri ho ottenuto >risultati apprezzabili. Rimane il problema che, oltre a scrivere su file cio' che ricevo >qualunque altra operazione genera eccezioni.
Bene, quindi il tutto funziona a dovere da un punto di vista di protocollo ed in effetti è un protocollo "serio" :) Il problema di scrivere su file ciò che ricevi è dovuto al fatto che la porta seriale gira su un Thread diverso da quello dove gira il tuo oggetto che istanzia la porta seriale, essendo le stringhe dei tipi per riferimento come passi un riferimento da un thread (quello della seriale) all'altro (quello del form principale) il runtime di VB ti genera l'errore. Non sono molto sicuro che funzioni ma in altri casi del genere si utilizzava l'oggetto System.Text.StringBuilder che faceva da "ponte di stringhe" tra i due thread. Potresti provare a leggere la seriale in questo modo:

Dim MyBridge as New System.Text.StringBuilder
MyBridge.Append(SerialPort.Read....)
MyTextBox.Text = MyBridge.ToString

>handshake = RequestToSend
>RTS = true

Per questi due parametri la guida in linea di Visual Studio ti spiega perfettamente a cosa servono: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.it/cpref8/html/T_System_IO_Ports_Handshake.htm

>L'applicazione e' fatta cosi.....
>...E' corretto tutto cio' ?

In linea di massima è corretto, giusto gestire il Thread Principale come Static Thread, anche se la seriale l'avrei più volentieri istanziata sul form principale. Alcuni oggetti apartment-thread girano meglio se istanziati direttamente su un form. Caso mai potresti istanziare le seriali sul form principale e passarle per riferimento alla classe di gestione e settando a False la proprietà CheckForIllegalCross.... ecc... del Form principale.
Saluti,
Alberto De Luca

Posts:663

--
29 Aug 2007 11:01  
Inviato da Max on 28/08/2007 09.25.40

Ho fatto delle prove e anche impostando nelle 2 form (main e settaggi) check ecc a false ottengo comunque un'eccezione.


Per il problema di modificare lo stato di un controllo da un operazione asincrona, vi rimando il codice di un mio vecchio post, che pò aiutarvi.

'VB
Private Delegate Sub InvokeMiaFunzione()
Private mInvokeMiaFunzione As InvokeMiaFunzione

Private Sub MiaFunzione()
If Me.InvokeRequired Then
Me.Invoke(mInvokeMiaFunzione)
Else
'Qui si può modificare lo stato del controllo della form senza incorrere in nessun problema
End If
End Sub

Private Sub CostruttoreDellaClasse()
mInvokeMiaFunzione = AddressOf MiaFunzione
End Sub

'Chiamata da un processo asincrono
Private Sub ProcessoAsincrono()
MiaFunzione()
End Sub

'Chiamata da un processo sincrono
Private Sub ProcessoSincrono()
MiaFunzione()
End Sub
Rudy Azzan

Posts:436

--
29 Aug 2007 12:00  
Grazie Rudy,

Avevo pensato infatti all'uso dei delgates, ma la domanda che mi faccio e' (vediamo se ho cpito):

creo una istanza della mia funzione come delegato della classe (esempio la calsse statica Program)

L'evento che viene attivato alla ricezione dei dati della seriale fa una invoke dele metodo "delegato".

In definitiva:

public static class Program
...
private delegate sub InvokeElaboraInputDaSeriale

private sub ElaboraInputDaSeriale
le operazioni che devo fare
end sub

end class

module1 (la com la definisco public in un modulo)
mInvokeElaboraInputDaSeriale = AddressOf InvokeElaboraInputDaSeriale

private sub EventoDatiRicevuti
InvokeElaboraInputDaSeriale
end sub


E' corretto?

Grazie...
Max

Posts:436

--
29 Aug 2007 12:29  
Per Rudy:

Ho fatto cosi', ma mi sono un po' perso.


nella mia Main Form:

Public Delegate Sub InvokeElaboraBuffer()
Private mInvokeElaboraBuffer As InvokeElaboraBuffer = AddressOf ElaboraBuffer

Public Sub ElaboraBuffer()
If Me.InvokeRequired Then
Me.Invoke(mInvokeElaboraBuffer)
End If
... ilmio codice ...
end sub

nem modulo "generico" che contiene la dichiarazione della seriale e dell'evento DataReceived

Public Sub DeviceDatiRicevuti(ByVal sender As Object, _
ByVal e As SerialDataReceivedEventArgs) _
Handles DeviceCom.DataReceived

BufferIN = DeviceCom.ReadExisting
MainForm.Invoke(MainForm.ElaboraBuffer)
End Sub

ma non e' corretto perche ottengo l'errore che nella riga

MainForm.Invoke(MainForm.ElaboraBuffer)

MainForm.ElaboraBuffer "L'espressione non genera un valore"

da che parte vado ?? :D :crying:

Grazie.

Posts:663

--
29 Aug 2007 13:34  
Inviato da Max on 29/08/2007 13.29.57

Per Rudy:

Ho fatto cosi', ma mi sono un po' perso.


nella mia Main Form:

Public Delegate Sub InvokeElaboraBuffer()
Private mInvokeElaboraBuffer As InvokeElaboraBuffer = AddressOf ElaboraBuffer

Public Sub ElaboraBuffer()
If Me.InvokeRequired Then
Me.Invoke(mInvokeElaboraBuffer)
End If
... ilmio codice ...
end sub

nem modulo "generico" che contiene la dichiarazione della seriale e dell'evento DataReceived

Public Sub DeviceDatiRicevuti(ByVal sender As Object, _
ByVal e As SerialDataReceivedEventArgs) _
Handles DeviceCom.DataReceived

BufferIN = DeviceCom.ReadExisting
MainForm.Invoke(MainForm.ElaboraBuffer)
End Sub

ma non e' corretto perche ottengo l'errore che nella riga

MainForm.Invoke(MainForm.ElaboraBuffer)

MainForm.ElaboraBuffer "L'espressione non genera un valore"

da che parte vado ?? :D :crying:

Grazie.


Forse non ci siamo capiti bene.

L'oggetto "seriale" ti genera un evento DataReceived.
Quando tu intercetti questo DataRecevied se in un thread diverso da quello della form.

Questo comporta che se tu tenti di scrivere su un controllo della form i dati dal SerialDataReceivedEventArgs, ricevi un errore di CrossThread.

Quindi l'oggetto, il controllo che riceverà i dati dal evento, richiede di essere Invoke.

Questo può essere fatto chiamando la funzione:

Dim ControlloInCuiVuoiScrivere as TextBox

Public Sub ElaboraBuffer()
If ControlloInCuiVuoiScrivere.InvokeRequired Then
ControlloInCuiVuoiScrivere Invoke(mInvokeElaboraBuffer)
End If
'Qui puoi scrivere il codice che legge dal buffer senza incorrere in errori di CrossThread
ControlloInCuiVuoiScrivere.Text = DatiDalBuffer
end sub

Spero di avere reso il concetto. Comunque continua a seguirci che fra un pò di tempo pubblicherò un articolo che parla di come interagire fra un Nokia 6630 (con installato l'interprete Python) e un applicazione C# tramite Bluetooth ed userò proprio la seriale. Io in questo caso ho creato una classe che si occupa di ricevere i dati dalla seiale e li trasforma in una stringa. Quando ha ricevuto tutti i dati, genera un evento che è intercettato da una form, e traimte Invoke scrive la stringa in una textbox.
Rudy Azzan

Posts:436

--
29 Aug 2007 13:43  
Ok, credo che adesso sia piu' chiaro (per me :D)
Il concetto del thread mi e' chiaro, non avevo capito bene cosa invocare (e come farlo).

Io pensavo di poter chiamare con Invoke l'intero metodo della form e fargli fare tranquillamente le operazioni che deve fare.

Mi ci scorno ancora un po', prima o poi ne esco :D

Grazie mille

Max.

Posts:3

--
06 May 2011 17:11  
Ciao a tutti sono nuovo...

scusami, so che la discussione a cui mi riferisco è molto vecchia... ma ho problemi simili, gestione con .net, di uno strumento tramite seriale...


Io non ho lo strumento con me, e ne ho realizzato un simulatore, tramite un altro programmino su VB. net

Passo i dati da un programma ad un altro con  una write

Li leggo tramite evento data received e poi un readexisting o un readbyte.

Il problema è che spesso mi capita che, anche se invio una stringa di 20 caratteri, l'evento data received di attiva alla ricezione di un numero minore di caratteri, ad esempio 5, o 6 o 15, è del tutto casuale... non riesco a gestire questo problema...

Purtroppo mi serve che tutti i dati arrivino insieme in un unico evento datareceived perchè devo poi fare una serie di if e select case, che si attiverebbero alla ricezione dei primi dati, generandomi tanti errori se la stringa non è completa...

Avete idea di come io possa risolvere?

Posts:3

--
06 May 2011 17:48  
Forse il problema è che uso una velocità di trasmissione molto elevata, 115200

E usando un adattatore seriale - usb, questo può essere più lento.... e quindi non riuscire a vedere sempre tutti i caratteri, dico male?

Posts:3

--
06 May 2011 17:48  
?
Topic is locked

Active Forums 4.1
       
Articoli
Inheritance in pills (Part 1)
How to create a personalized TreeView
2008/03/22 | Author: Alberto De Luca
DatagridView Formatting
How to manage the Visual behaviour of a DataGridView
2008/07/27 | Author: Andrea Zingoni
Starting from Scratch with WPF (Part 3)
Rows, deities, brushes and refrigerators (first part)
2007/11/22 | Author: Sabrina Cosolo
Iniziare da zero con WPF (Parte 2)
Iniziamo a scoprire gli oggetti Application e Window
2007/09/30 | Author: Sabrina Cosolo
Breadcrumbs of Inheritance
Adding new features to an already modified TreevView control
2009/06/05 | Author: Francesca Mazzoni
Getting started with WPF
A first look to the template base of a WPF project
2007/08/16 | Author: Sabrina Cosolo
Miniguida alla OOP con il .NET Framework- Parte I
Come prendere per mano un tipico programmatore VB6
2008/07/27 | Author: Alberto De Luca
ASP.NET immagini dinamiche con HttpHandler
Costruiamo un HttpHandler per la creazione di immagini dinamiche
2007/10/24 | Author: Rudy Azzan
    Print     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Terms Of Use  .:.  Privacy Statement  .:.  Login  .:.