Frage

Ich habe ein Wavecom Supreme GSM-Modem bekommt. Ich schrieb eine einfache Anwendung, die mit dem Modem kommuniziert und liest Textnachrichten es empfängt.

Meine Anwendung fragt das Modem für Informationen über die Anzahl der Nachrichten, die es in seinem Speicher speichert, und wenn die Zahl größer als 0 ist, liest er die Nachrichten sie vom Modem Speicher zu löschen. Ich Abfrage das Modem auf diese Weise alle paar Sekunden.

Leider jedoch legt das Modem alle paar Minuten und reagiert nicht auf jede AT-Befehle ich es schicken. Die einzige Lösung, die ich kam mit der Kommunikation zu entsperren ist die serielle Schnittstelle zu schließen und neu zu öffnen. Dann ist alles in Ordnung für die nächsten paar Minuten nach der seriellen Anschluss hat wieder geöffnet werden, wenn das Modem hängt.

Es kann natürlich das Modem Fehler sein, aber ich frage mich, ob die Art, wie ich mit ihm kommunizieren ist OK.

Firs alles, ich öffne das 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 tue, ist AT-Befehle senden und für Modem-Antwort warten. Ich benutze keine Flusskontrolle. Alles, was ich tue, ist für comm Ereignis warten, um die Daten von der seriellen Schnittstelle des Warteschlange lesen, wenn das Modem reagiert und einige AT-Befehle, gefolgt von der # 13 Zeichen schreiben das Modem für Nachrichten abzufragen.

ich glaube, ich die DCB-Struktur falsch eingestellt haben, für wie Sie sehen können, habe ich nicht einen Teil seiner Felder ändern. Weil mein Wissen über serielle Schnittstelle nicht genug ist, weiß ich nicht, wie die RTS gesetzt und DTR-Steuerung (aktiviert / deaktiviert / Händedruck / Makel).

Wenn Sie einige offensichtliche Fehler in dieser Art und Weise der Handhabung Modem bemerkt, wäre ich Ihnen dankbar, wenn Sie mir erklären, was ich falsch gemacht hatte. Wenn alles in Ordnung ist, auf der anderen Seite, vielleicht haben Sie eine Idee, warum legt das Modem?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Normalerweise sind die DCB-Einstellungen die ersten Dinge, die Sie überprüfen sollten. Die Modem-Dokumentation sollten die Einstellungen der seriellen Schnittstelle erwähnen. Wenn nicht online mit der Modellnummer Ihres Modems suchen.

Andere Tipps

Achten Sie darauf, die Flusssteuerung im Geräte-Manager, das Modem und das Programm gesetzt sind alle gleich. Ich weiß nicht, Delphi, aber ich denke, das DCB sollte ein „Flags“ Feld hat. Versuchen Sie es zu 24 für die Hardware-Flusssteuerung zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top