Newsgroup: it.comp.lang.visual-basic
Titolo: Ricezione su porta seriale con MSComm

Ciao, vi espongo il mio problema:
Devo ricevere dei dati di telemetria da un modem gsm che riceve degli sms.
Ho utilizzato VB6 e precisamente l'evento .oncomm() per rilevare i dati
sulla porta seriale.
Ho notato che in .input ci vanno al max 8 caratteri dopo di che viene
generato un nuovo evento oncomm e la cosa è molto scomoda, ecco perchè:
Io per rilevare il messaggio ricevuto aspetto sulla seriale la stringa
"+CGMI" e fin qui tutto ok... poi il modem invia il numero della cella (n)
del messaggio ed io con il comando AT+CMGR=n leggo il contenuto della
stessa.
A questo punto sorge il problema... io non so quanto sarà lungo il messaggio
di risposta, e lo stesso viene inviato in circa 13, 14 eventi .oncomm, non
viene restituito tutto intero come una sola stringa.
Esempio:
Se io scrivo questo codice:
mscomm1.oncomm()
rx$=mscomm1.input
text1.text = text1.text + rx$
a video appare tutta la risposta del modem per intero, ma contando gli
eventi vedo che è stato letto in 12 13 cicli e non riesco ad ottenere una
variabile x as string che contenga per intero quello che il modem ha
detto...
Il problema è determinare la fine del messaggio... il modem dice OK alla
fine del testo, ma potrebbe accadere che il penultimo evento contenga "...O"
e l'ultimo "K<cr><lf>" e poi è poco elegante determinare la fine del flusso
dati monitornando l'OK... basta che nel testo ci sia scritto OK e la lettura
verrebbe interrotta prematuramente.
Aiutooooooooooooooo... il buon vecchio qbasic era stupido... ma efficace per
queste cose.
Chiedo aiuto a chi ne sa più di me... sono sicuro che si tratta di una cosa
semplice, ma ora mi sfugge !!
Ho letto e cercato tutti i siti e tutte le f.a.q. ma riguardo questa
benedetta porta seriale c'è ben poco in rete... gli esempi sono tutti
uguali, scrivono a video e basta. Io voglio la mia stringa !!
Ciao e grazie a chi avrà la pazienza di aiutarmi !!!

 wrote in message
OxPQ5.15631$wW2.5...@news1.giganews.com...


per il risolvere il problema particolare bisognerebbe avere il codice e fare
delle prove.
Il controllo MSComm e' a mio parere abbastanza efficiente a patto di settare
correttamente (e poi gestire) le varie prop disponibili. L'evento oncomm in
particolare e' condizionato per l'input dalla prop RThreshold che stabilisce
ogni quanti caratteri ricevuti generare l'evento, se impostata a 0 l'evento
non viene generato se imposti a 1 viene generato alla ricezione di ogni
carattere ecc.
ad ogni buon conto invece che text1.text=text1.text +rx$ potresti usare una
variabile stringa dichiarata a livello di modulo
la gestione di messaggi ignoti e' sempre complessa occorre scandire il
messaggio e interpretarlo sarebbe bene creare un codice di messaggi, un
protocollo, per lo scambio delle informazioni cose tipo carattere inizio
messaggio, carattere fine messaggio chksum di controllo ecc.
cuiao stefano

 messaggio, carattere fine messaggio chksum di controllo ecc.
Ho risolto... il fatto è che ho scoperto che in .input ci sono sempre 8
caratteri, anche quando ne vedi uno ce ne sono 7 null....
Ora il protocollo lo sto facendo.... la comunicazione è con un modem gsm
quindi devo stare ai suoi codici... ma ora che ho la stringa completa rx$ è
un'attimo.
Grazie, ciaooooo