Domanda

Ho un modem Wavecom Suprema GSM. Ho scritto una semplice applicazione che comunica con il modem e legge i messaggi di testo ricevuti.

La mia applicazione interroga il modem per informazioni sul numero di messaggi memorizza nella sua memoria e se il numero è maggiore di 0, legge i messaggi di cancellarli dalla memoria del modem. Interrogo il modem in questo modo ogni pochi secondi.

Purtroppo, però, il modem si blocca ogni pochi minuti e non risponde ai comandi AT mando ad esso. L'unica soluzione mi è venuta per sbloccare la comunicazione è chiudere la porta seriale e aprirla nuovamente. Poi tutto è andato bene per i prossimi pochi minuti dopo il quale porta seriale deve essere riaperto di nuovo quando il modem si blocca.

Si può naturalmente essere colpa del modem, ma mi chiedo se il mio modo di comunicare con esso è OK.

Firs di tutto, ho aperto la porta seriale del modem per le operazioni asincrone. Poi ho impostato la struttura DCB come segue:

GetCommState(PortHandle, DCB);
DCB.BaudRate := 115200;
DCB.ByteSize := 8;
DCB.Parity := NOPARITY;
DCB.StopBits := ONESTOPBIT;
DCB.EvtChar := #13;
SetCommState(PortHandle, DCB);
SetCommMask(PortHandle, EV_RXFLAG);

//the modem does not respond without setting these:
EscapeCommFunction(PortHandle, SETDTR);
EscapeCommFunction(PortHandle, SETRTS);

E poi non faccio altro che inviare i comandi AT e attendere la risposta del modem. Io non uso alcun controllo di flusso. Tutto quello che faccio è aspettare per l'evento comm, leggere i dati dalla coda della porta seriale quando il modem risponde e scrivere alcuni comandi AT seguito dal carattere # 13 per interrogare il modem per i messaggi.

Credo di aver impostato la struttura DCB impropriamente, per come si può vedere, io non modifico alcuni dei suoi campi. Perché la mia conoscenza sulla porta seriale non è sufficiente, non so come impostare le RTS e DTR (abilitato / disabilitato / handshake / toggle).

Se avete notato alcuni errori evidenti in questo modo di modem manipolazione, sarei grato se mi ha spiegato quello che avevo fatto di sbagliato. Se tutto va bene, d'altra parte, forse avete un idea del perché il modem si blocca?

Grazie in anticipo.

È stato utile?

Soluzione

In genere le impostazioni DCB sono le prime cose che si dovrebbe verificare. La documentazione del modem dovrebbe menzionare le impostazioni della porta seriale. Se non ricerca in linea con il numero di modello del proprio modem.

Altri suggerimenti

Assicurarsi che il controllo del flusso in Gestione periferiche, il modem, e il programma sono tutti impostati lo stesso. Non so Delphi, ma penso che il DCB dovrebbe avere un campo "Flags". Provare a impostarlo su 24 per il controllo di flusso hardware.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top