Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Comporre una stringa utilizzando le code (queue)?

Ciao a tutti, chiedo se è possibile ricomporre una stringa che arriva spezzettata in 2 o 3 pezzi dalla seriale in una stringa completa che poi possa venire elaborata dal resto del vi.

Spiego meglio, ho uno strumento che ogni secondo invia a seriale una stringa composta di tre valori numerici intervallati da #numero canale e virgola. Ogni stringa completa è separata da CR, però le stringhe non arrivano mai tutte intere ma spezzettate in 1, 2, o tre parti in maniera random.

Vorrei sapere se è possibile utilizzando le code ricostruire ogni stringa al suo completamento.

Ringrazio.

 

0 Kudos
Messaggio 1 di 13
6.211Visualizzazioni

Più semplice delle code è utilizzare il concatenate string. Però mi sembra strano che la stringa "arrivi spezzettata": più probabilmente stai leggendo prima che sia arrivata tutta: prova a impostare correttamente il terminatore nella VISA Configure Serial Port (il default è 0x10 che è LF, per CR devi impostare 0xA) e lasciare un tempo più lungo (guarda la documentazione dello strumento per sapere il tempo di risposta tipico e massimo). Guarda l'esempio Advanced Serial Write and Read



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 13
6.210Visualizzazioni

Ti ringrazio voglio provare come dici tu...però non ho capito come fare ad impostare 0xA nel visa configure, creando una costante mi fa solo inserire un numero intero.

0 Kudos
Messaggio 3 di 13
6.205Visualizzazioni

0xA vuol dire 10 in formato esadecimale; corrisponde a LF - Line feed. Nel tuo caso devi scrivere 13 (corrisponde a 0xD, indicato come CR - carriage return).

Hai visto l'help in linea? Elenca i valori in esadecimale.



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 13
6.204Visualizzazioni

Ciao si ho cercato nell'help in linea ma non ho trovato quello che mi serviva, ho immaginato corrispondesse all'esadecimale ma non trovavo il valore da inserire. Grazie. Domani provo.

0 Kudos
Messaggio 5 di 13
6.202Visualizzazioni

Si, lo '0x' è tipico in linguaggi testuali tipo C ma ci sono numerosi altri modi per evidenziare che si parla di numeri esadecimali, prova per esempio a dare un'occhiata qui Smiley Sorpreso

L'importante alla fine è capirsi. Smiley Strizza l'occhio



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 13
6.198Visualizzazioni

Ecco perchè non mi tornava la dicitura "0x" non la conoscevo 🙂

comunque non funziona, siccome oltre all'acquisizione di quel dato, dalla seriale posso ricevere altri dati come temperatura, dati dal "data logger" ecc ecc, se metto come paletto che deve esserci un CR alla seriale può capitare che in caso di lettura errata non arrivi mai il CR per cui il vi mi rimane impallinato.

Per ricorstuire quella stringa dovrò provare altri modi, ad esempio se gliela faccio leggere con un intervallo maggiore può essere comunque che non sia sincronizzato con l'invio dei dati e quindi che venga comunque spezzettata random lo stesso...ti torna?

0 Kudos
Messaggio 7 di 13
6.191Visualizzazioni

'momento: il termination character deve funzionare insieme ad un adeguato timeout, da stabilire sulla base dei dispositivi che ci sono sulla linea. Il VISA Read dove terminare per il primo evento fra CR e/o timeout (è già cos' a meno che non forzi nessun timeout: leggi la documentazione). Alla fine del read devi sempre monitorare l'error out e ignorare il timeout (salvo eventualmente marcare quel particolare dispositivo come assente), mentre gli altri errori devono essere gestiti (fermare l'applicazione, informare l'utente... quello che ti sembra più opportuno).

Immagino che la modalità di trasmissione sia sempre un polling diretto (richiesta del programma - risposta del dispositivo), quindi puoi sempre identificare il dispositivo che non risponde e assegnare il relativo stato di funzionamento.



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 8 di 13
6.187Visualizzazioni

Il problema sta proprio che per alcune istruzioni il flusso dati viene richiesto con un polling, mentre per altre come l'invio della lettura istantanea ogni secondo viene attivato con una istruzione ed interrotto con un'altra, per cui per leggere quel flusso dati bisogna mantenere aperta la lettura da seriale.

Invece l'istruzione che richiede i dati dal "data logger" fa un polling ma siccome in memoria ci possono essere i dati di una settimana intera lo scarico dell'intero buffer può richiedere anche 20 minuti, ed è per questo che non posso introdurre un timeout.

(a meno di non riuscire a settare parametro time out e carattere di fine riga per ogni istruzione che si manda con un property node, ci ho guardato ma credo non si possa perchè alcuni paramentri vanno settati alla configurazione della seriale in apertura).

 

 

0 Kudos
Messaggio 9 di 13
6.185Visualizzazioni

Ma mentre scarichi dal data logger non stai anche chiedendo gli altri dati, no? Quindi potresti isolare quel task e gestirlo a parte, eventualmente modificando i parametri della seriale tanto su un task di 20 minuti perdere anche mezzo secondo di configurazione è trascurabile.

 

Escludendo il data logger, quali altri messaggi scambi con l'esterno? Non puoi avere un dispositivo che manda messaggi in modo indipendente mescolato con uno interrogato in polling, altrimenti come distingui le risposte? E se si sovrappongono?



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 10 di 13
6.183Visualizzazioni