Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Leggere rs485 su porta seriale

Premetto che so già leggere la porta seriale con carattere per carattere

Però volevo che iniziasse a scrivere su una nuova stringa quando arriva dalla seriale il punto esclamativo e finisce con il tasto invio

per esempio se ricevuto una stringa dalla porta seriale tipo !0334234 invio

volevo che iniziasse a scrivere su una nuova stringa dal punto esclamativo e finisce con il tasto ascii invio

grazie

0 Kudos
Messaggio 1 di 21
7.482Visualizzazioni

Smiley Sorpreso Cerca di essere un po' più chiaro nella domanda...

 

Suppongo che tu in qualche modo riceva un flusso continuo di dati sulla seriale e voglia dividerli: corretto?

Serve però sapere dove vuoi mandare quei messaggi: in un array di stringhe, su un indicatore a video, su un file su disco... e magari anche con che programma intendi lavorare, così ti si può dare qualche esempio mirato.

Ancora meglio se puoi allegare uno scheletro di codice su cui lavorare Smiley Strizza l'occhio non serve tutta l'applicazione, basta il segmento che legge dalla seriale ed elabora i dati.



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 21
7.479Visualizzazioni

codice tipo basic però lo vorrei fatto in labview

li voglio salvare sia su un array che su una stringa che poi bisognerebbe cancellarla dopo averla elaborata che non so come si fa :d

perla stringa deve partire solo con il punto esclamativo e finire con il tasto invio

per esempio

dalla seriale mi arriva ewfrgnrgeirgù!Dfefefef "INVIO"

io parto da ! poi prendo tutta la stringa fine al carattere invio e la mando ad un'altra stringa cancellando la precedente

e poi su un array

grazie


RobertoBozzolo ha scritto:

Smiley Sorpreso Cerca di essere un po' più chiaro nella domanda...

 

Suppongo che tu in qualche modo riceva un flusso continuo di dati sulla seriale e voglia dividerli: corretto?

Serve però sapere dove vuoi mandare quei messaggi: in un array di stringhe, su un indicatore a video, su un file su disco... e magari anche con che programma intendi lavorare, così ti si può dare qualche esempio mirato.

Ancora meglio se puoi allegare uno scheletro di codice su cui lavorare Smiley Strizza l'occhio non serve tutta l'applicazione, basta il segmento che legge dalla seriale ed elabora i dati.




0 Kudos
Messaggio 3 di 21
7.475Visualizzazioni

esempio codice in basic da trasformare in labview

 

receivedatamodem' ricezione singolo carattere

 

if receivedatamodem="!" then

stringa = stringa + receivedatamodem

end if

if receivecedemodem="Invio" then

stringa=nuovastringa

stringa=""

end if

 

0 Kudos
Messaggio 4 di 21
7.478Visualizzazioni

Potresti fare qualcosa del genere:

Estraistringa.png

 

Però potresti anche lavorare diversamente in modo da avere già la stringa corretta senza bisogno di cercarla: invece di leggere dalla seriale carattere per carattere, potresti leggere una stringa fino ad un determinato valore (termination character). In questo modo, se prima leggi fino al punto esclamativo e scarti la stringa, poi leggi fino al ritorno a capo e conservi la stringa hai già il lavoro fatto. Perdi un po' di tempo per riconfigurare la seriale ogni volta (dell'ordine di qualche millisecondo) ma se il traffico sulla linea non è eccessivo non dovresti nemmeno accorgertene.

Per impostare la seriale potresti fare così:

 

VISA teminatore.png



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 5 di 21
7.473Visualizzazioni

preferisco la prima opzione che userò al posto della stringa, carattere per carattere perchè possono arrivare altre tipi di stringhe "che io non so"

al posto della stringa originale vorrei mettere la porta seriale carattere per carattere è possibile?

0 Kudos
Messaggio 6 di 21
7.472Visualizzazioni

vorrei che il programma dopo aver trovato il punto esclamativo iniziasse a scrivere in un'altra stringa ma solo dopo aver trovato il punto esclamativo sempre leggendo la seriale carattere per carattere e terminare la nuova stringa quando arriva il tasto invio 

grazie

0 Kudos
Messaggio 7 di 21
7.472Visualizzazioni

Questa versione:

  • Legge la seriale un carattere alla volta e accumula in un array
  • Cerca il fine messaggio (ritorno a capo)
  • Se lo trova, cerca il punto esclamativo e estrae il messaggio che interessa

A tua cura la gestione del messaggio estratto, la gestione dei messaggi che non rispettano questo pattern (per esempio non c'è il punto esclamativo), la gestione del timeout in lettura sulla seriale.

 

Estraistringa2.png

 

Ripensandoci, il controllo iniziale non è necessario farlo su tutta la stringa, ma solamente sull'ultimo carattere ricevuto: è più rapido.



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 21
7.469Visualizzazioni

Sono arrivato a questo punto provando senza while e mettendo l'avvio in modo continuo

sono riuscito a vedere se premo ! però dopo non so come scrivere i caratteri che vengono dopo

allego un immagine

grazie

0 Kudos
Messaggio 9 di 21
7.459Visualizzazioni

Sto usando Labview

0 Kudos
Messaggio 10 di 21
7.440Visualizzazioni