|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 3
|
Tempo acquisizione dati C
Ciao a tutti,
ho bisogno di un chiarimento (programmazione in C). Il mio codice apre e inizializza una porta COM da cui acquisisce dati, che inizia a stamparmia video. La lettura inizia con un Readfile, preceduto da un WaitCommEvent che serve, per quel che so, ad aspettare a leggere finché non arriva un imput (infatti ste disconnetto il cavo tra il pc e la fonte dei dati, il programma si ferma ma non va in crash, appena lo riconnetto ricomincia tutto da dove si era fermato). Il mio problema é: la specifica tecnica dell'apparecchiatura che mi da i dati mi dice che questi ultimi vengono inviati con una frequenza di 1,4 Hz (sto parlando di 23 elementi inviati a 1,4 Hz), ma il mio programma me li stampa a video molto piú lentamente (diciamo che tarda almeno 15 secondi, io li voglio visualizzati in 0,71 secondi...). La domanda é: Come posso ottenere la visualizzazione dei dati a 1,4 Hz? Ancora non ho capito se é un problema di inizializzazione della porta COM...ho provato a giostare con i valori del parametro CommTimeouts..ma sembra che le cose non cambiano... Grazie in anticipo!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
é possibile che sia un banalissimo problema di flush di stdout, che nulla c'entra con la porta COM? prova con la fflush.
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 3
|
grazie fero, ma anche con la fflush la cosa sembra non funzionare...do per scontato che l'apparecchio mi invia realmente dati a 1,4 Hz, quindi non so....
Le informazioni vengono inviate un byte alla volta..quindi ho definito un tipo BYTE chiamata RISPOSTA e gli dico di leggere un byte alla volta e mettere il valore in RISPOSTA. Salvo il contenuto di RISPOSTA[0] in un altro byte DATO[j] che sta in un ciclo che va da 0 a 22 (mi interessa che DATO abbia dimensione 23) e stampo a video, continuamente, finké non batto un tasto, i vari DATO[j].... giá..sicuramente il problema sta nel buffer, perché me ne stampa 5 alla volta, aspetta mezzo secondo e me ne da altri 5 (a volte 4) e cosí via... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Prova a fare un programmino che verifica ogni quanto realmente arrivano i dati.
Poi controlla le tempistiche di reazione del tuo programma, ovviamente devono essere più veloci dell'arrivo dei dati. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 3
|
Immagino che gli diró di stamparmi, vicino al dato, anche un'indicazione di tempo, poi faccio la differenza e vedo cn che frequenza arrivano i dati...bene..mi metteró a cercare come si richiedono i tempi (purtroppo non ho mai studiato programmazione, sono un disegnatore di strutture riciclato x la causa alla programmazione!!!) e vediamo che succede...
a presto e grazie a tutti! |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Quote:
Purtroppo quando si comunica con l'esterno non bisogna fidarsi delle specifiche ma piuttosto di quello che realmente avviene. Il mio consiglio è fare un programmino a parte ottimizzato per la verifica dei tempi, può essere che il programma che hai fatto, essendo te un neofita, non sia ottimizzato e richieda più tempo del necessario, quando si gestiscono le temporizzazioni nei SO bisogna usare accorgimenti stringenti sulle performance piuttosto che avere un algoritmo di ottima qualità formale. Spesso mi è tornato utile acquisire i dati con un thread separato ad alta priorità, meglio se gira a bassissimo livello nel SO, che interagisce poi a parte col thread che gestisce l'interazione con l'utente. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:09.




















