Ciao a tutti,
non è la prma volta che uso la libreria javax.comm per acquisire/scrivere dati da/su porta seriale, però è la prima volta che mi interessa acquisire in modo continuo un flusso di stringhe ad una certa velocità (fino ad ora avevo sempre acquisito una singola risposta).
Lo strumento collegato alla seriale trasmette 20 stringhe ogni secondo, io al più avrò bisogno di 10 valori per ogni secondo (posso permettermi di perderne uno ogni 2).
Per poter far partire e fermare l'acquisizione ho utilizzato la classe Thread e fin qui non pare ci siano problemi, ma veniamo al dunque.
1. problemacodice:..... public synchronized void run () { String temp = new String(); while ( run ){ System.out.println ( "start thread"); byte[] buffer = new byte[15]; int len = -1; try { while ( ( len = this.in.read(buffer)) > -1 ) { int segno = contatore ++; String data = data(); temp = segno + "\t" + new String(buffer) + "\t" + data; JFrame01.datiLetti.add(temp); WriteTxtFile(temp); if (!run) break; if (!JFrame01.inLettura) attendi(); } } catch ( IOException e ) { e.printStackTrace(); } } } .....
I dati letti dalla porta seriale li salvo su un ArrayList (e per ora in fase di sviluppo in un file di testo) con annesso il tempo in cui il dato è stato ricevuto:
Non mi spiego come mai ottengo in output diversi valori con lo stesso tempo :master:codice:public static String data() { System.out.println ( " Nuova data "); GregorianCalendar gc = new GregorianCalendar(); SimpleDateFormat sdf =new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss:SSS"); return sdf.format( gc.getTime() ) ; }
codice:contatore \t StringaRx (che finisce con un a capo) \t Tempoil contatore viene incrementato, ma il tempo no!codice:362 $11 40 13/10/2009 - 14:13:19:803 363 $11 40 13/10/2009 - 14:13:19:803 364 $11 40 13/10/2009 - 14:13:19:803 365 $11 40 13/10/2009 - 14:13:19:803 366 $11 40 13/10/2009 - 14:13:19:803 367 $11 40 13/10/2009 - 14:13:19:803 368 $11 40 13/10/2009 - 14:13:19:803 369 $11 40 13/10/2009 - 14:13:19:803 370 $11 40 13/10/2009 - 14:13:20:006 371 $11 40 13/10/2009 - 14:13:20:006 372 $11 40 13/10/2009 - 14:13:20:006 373 $11 40 13/10/2009 - 14:13:20:006 374 $11 40 13/10/2009 - 14:13:20:006 375 $11 40 13/10/2009 - 14:13:20:006 376 $11 40 13/10/2009 - 14:13:20:006 377 $11 40 13/10/2009 - 14:13:20:006 378 $11 40 13/10/2009 - 14:13:20:006
2. problema
A volte memorizzo delle risposte strane che sembrano violare il protocollo.... ma in realtà sembrano delle buone stringhe di risposta ma spezzate ( notate l'assenza dei caratteri a capo o la loro posizione sbagliata)
con 2 $ e senza il /r
codice:273 $$11 40 13/10/2009 - 14:13:17:57codice:339 0 $11 4 13/10/2009 - 14:04:56:030Se utilizzo un monitor di porte seriale questi pastrocchi non ci sono e vi chiedo: è colpa del mio codice? Dovrei acquisire meglio considerando il CR (/r) il fine stringa?codice:273 $0 $11 1 13/10/2009 - 13:57:36:917 274 40 $11 1 13/10/2009 - 13:57:36:917
Qualcuno riesce a darmi qualche dritta?
Grazie![]()

Rispondi quotando