Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

lettura dati seriali continui

Risolto!
Vai alla soluzione

Ciao a tutti ragazzi,

 

Ho un dispositivo collegato alla porta seriale che trasmette i dati in modo continuo da cui devo leggere 6 byte in questo formato:

 

STX n1 n2 n3 n4 n5

 

STX (Start stringa) 0xFF.

 

Il problema è che il dispositivo mi manda i dati in modo continuo quindi quando con il visa vado a leggere il buffer l'ordine degli elementi raramente è ordinato!

 

Chi sà consigliarmi una soluzione?

Grazie in anticipo a tutti quanti!

Tiziano

0 Kudos
Messaggio 1 di 6
6.208Visualizzazioni
Se non ti aspetti di ricevere un FF fra i dati (n1-n5), potresti usare quello come terminatore della lettura e elaborare la stringa solo se di almeno 6 bytes. A parte la prima lettura che potrebbe essere incompleta dovresti avere un sincronismo perfetto.


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 2 di 6
6.202Visualizzazioni

Grazie per la risposta Roberto,

 

si in effetti ci avevo pensato.. ho anche impostato nella configurazione come terminatore di stringa 0xFF ma ricevevo successivamente un errore dal reader visa.

In che modo il terminatore agisce nella comunicazione?

E successivamente il terminatore viene incluso in lettura? e se si in prima o ultima posizione?

 

Comunque saresti così gentile da allegarmi un piccolo sceenshot  su come imposteresti il tutto?

Saluti, Tiziano.

0 Kudos
Messaggio 3 di 6
6.198Visualizzazioni

Stiamo parlando di LabVIEW, vero?

Avevi abilitato il termination character?

Prova a dare un'occhiata a questo documento.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 4 di 6
6.192Visualizzazioni

Si Roberto si tratta di labview e il campo è abilitato.

 

Diciamo che secondo quello che mi stai dicendo una cosa del genere potrebbe andare bene?

 

Schermata 2014-05-21 alle 00.44.44.png

 

Grazie per l'aiuto!

 

Tiziano.

0 Kudos
Messaggio 5 di 6
6.183Visualizzazioni
Soluzione
Accettato da autore argomento tizianoz93

Io toglierei il bytes at port: se hai sicuramente il terminatore non hai bisogno di dire quanto leggere; piuttosto cabla una costante pari al numero totale di caratteri fra due terminatori successivi. (Visto che il loop è molto veloce, se inserisci un bytes at port è praticamente certo che andrai a leggere quando il messaggio non è terminato, quindi non riesci a interpretarlo. Dovresti accumularlo in un buffer e poi leggere il buffer a blocchi, scaricando i messaggi completi... una complicazione inutile visto che la tua comunicazione è a formato fisso).

E poi porta fuori dal loop l'inizializzazione della seriale!

 

Qualcosa di questo genere:

 

Seriale continuo.png

 

(Poi bisogna aggiungere il settaggio dei parametri di comunicazione, la verifica delle condizioni di errore, ecc ecc...)

 

Dovrebbe funzionare, però considera che io non uso LV per queste cose quindi potrebbe esserci qualche particolare da aggiustare.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 6 di 6
6.171Visualizzazioni