Newsgroup: it.comp.programmare.win32
Titolo: Problemi con la seriale

Salve gente,
sto cercando di comunicare tramite la seriale con un sensore di pH ma ho
problemi di programmazione:
Ho aperto il canale con un Createfile
ho impostato il protocollo con il DCB
Ora pero' dovrei leggere e scrivere .
Le funzioni dedicate , writefile e readfile pero' mi chiedono oltre alla
"maniglia" anche un puntatore ad una struttura per contenere i dati :
siccome posso leggere un valore alla volta , mi basta usare un puntatore
ad una variabile?
... poi cosa leggo, interi o caratteri?
mi conviene generare un altro thread o si puo farne a meno?
grazie a tutti
fil

 mi conviene generare un altro thread o si puo farne a meno?
Conviene sempre disaccopiare l'interfaccia utente dal trasferimento
dati (specie se sincrono). Tieni presente che in caso di problemi
di trasmissione rischi attese pari "almeno" ai timeouts (vedi 
SetCommTimeouts() e GetCommTimeouts()).
Ciao.
Il Michett@
--
-- 
Posted from 
relay2.inwind.it
 [212.141.53.73] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 mi conviene generare un altro thread o si puo farne a meno?
Conviene sempre disaccopiare l'interfaccia utente dal trasferimento
dati (specie se sincrono). Tieni presente che rischi attese come
minimo pari ai timeouts (vedi SetCommTimeouts() e GetCommTimeouts()).
Ciao.
Il Michett@
--

 mi conviene generare un altro thread o si puo farne a meno?
Conviene sempre disaccopiare l'interfaccia utente dal trasferimento


>
Grazie mille per i consigli, come vedi non sono un esperto.
Vediamo se ho capito:
inizializzo una variabile BYTE che conterra' il dato letto dalla porta,
inizializzo una variabile int che conterra' il numero di caratteri da
leggere alla volta (cioe' 1),
fornisco i puntatori a queste variabili nella chiamata a readfile();
e..... come per magia dovrei trovare nella variabile char
il dato che proviene dalla seriale ?
ovvero il codice e':
....
HANDLE miofile;
BOOL TuttoOK;
TuttoOK=createfile( miofile, ..... ); //apri NONOVERLAPPED
// gestisce errore in apertura
....
BYTE DatoLetto;
DWORD NumeroCaratteriDaLeggere=1;
DWORD NumeroCaratteriLetti;
TuttoOK=ReadFile(miofile,&DatoLetto,NumeroCaratteriDaLeggere,
&NumeroCaratteriLetti,NULL);
// gestisce errore in lettura
....
ok ?????
Rinnovo i ringraziamenti ....        fil

 ha scritto nel messaggio
news:39E798B8...@tin.it...

No. CreateFile restituisce l'handle della periferica e non un boolean!
 HANDLE hCom1;
 hCom1 = CreateFile("\\\\.\\COM1",.......
Altra notazione importante e' che prima di ricevere qualcosa dalla seriale
credo tu debba mandare un comando al dispositivo collegato.
Per esempio se invio il codice ATI1[CR] ad un modem questo mi risponde
con una stringa di dati contenente delle informazioni generiche. Ora
non so' se il tuo e' un dispositivo intelligente che ha gia predefinito
un set di istruzioni alla quale lui risponde di conseguenza o cos'altro.
Potrebbe non essere cosi' semplice dialogare con questo se si aspetta
un protocollo particolare di collegamento. Dovresti costruirti un vero e
proprio stack di comunicazione e ReadFile/WriteFile sono solo il
culmine di una struttura ben piu' complessa. Inoltre se prevedi l'utilizzo
di un thread worker per l'interscambio dei dati (generalmente un loop
scrittura-lettura nei collegamenti sincroni) devi pensare anche alla
protezione dei dati globali con gli strumenti tipici di sincronizzazione
dei processi (Critical Section, Mutex, Event ecc ecc).
Ciao.
Il Michett@
--