Ich habe ein Wavecom Supreme GSM Modem. Ich schrieb eine einfache Anwendung, die mit dem Modem kommuniziert und Textnachrichten liest, die es empfängt.Modem hängt während der seriellen Kommunikation
Meine Anwendung fragt das Modem nach Informationen über die Anzahl der Nachrichten ab, die es in seinem Speicher speichert, und wenn die Nummer größer als 0 ist, liest es die Nachrichten, die sie aus dem Modemspeicher löschen. Ich frage das Modem alle paar Sekunden auf diese Weise ab.
Leider hängt jedoch das Modem alle paar Minuten und reagiert nicht auf irgendwelche AT-Befehle, die ich an es sende. Die einzige Lösung, um die Kommunikation zu entsperren, ist, die serielle Schnittstelle zu schließen und neu zu öffnen. Dann ist alles in Ordnung für die nächsten Minuten, nach denen die serielle Schnittstelle wieder geöffnet werden muss, wenn das Modem hängt.
Es kann natürlich die Schuld des Modems sein, aber ich frage mich, ob die Art, wie ich damit kommuniziere, in Ordnung ist.
Zunächst öffne ich die serielle Schnittstelle des Modems für asynchrone Operationen. Dann habe ich die Struktur DCB wie folgt:
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);
Und dann alles, was ich tun, ist AT-Befehle senden und für Modem-Antwort warten. Ich verwende keine Flusskontrolle. Ich warte nur auf ein Komm-Ereignis, lese die Daten aus der Warteschlange des seriellen Ports, wenn das Modem antwortet, und schreibe einige AT-Befehle, gefolgt von dem Zeichen # 13, um das Modem nach Nachrichten abzufragen.
Ich denke, ich habe die DCB-Struktur nicht richtig eingestellt, denn wie Sie sehen können, ändere ich einige seiner Felder nicht. Da meine Kenntnisse über die serielle Schnittstelle nicht ausreichen, kann ich die RTS- und DTR-Steuerung (aktiviert/deaktiviert/Handshake/Toggle) nicht einstellen.
Wenn Sie einige offensichtliche Fehler in dieser Art des Umgangs mit Modem bemerkt haben, wäre ich dankbar, wenn Sie mir erklären würden, was ich falsch gemacht habe. Wenn alles in Ordnung ist, haben Sie vielleicht eine Idee, warum das Modem hängt?
Vielen Dank im Voraus.