Question

J'ai un modem GSM Wavecom suprême. J'ai écrit une application simple qui communique avec le modem et lit les messages texte qu'il reçoit.

Mon application interroge le modem pour obtenir des informations sur le nombre de messages qu'il stocke dans sa mémoire et si le nombre est supérieur à 0, il lit les messages de les supprimer de la mémoire du modem. Je le modem questionne cette façon toutes les quelques secondes.

Malheureusement, cependant, le modem se bloque toutes les quelques minutes et ne répond pas aux commandes AT j'envoyer. La seule solution que je suis venu avec pour déverrouiller la communication est de fermer le port série et l'ouvrir à nouveau. Ensuite, tout est très bien pour quelques minutes, après quoi le port série doit être rouvert à nouveau lorsque le modem raccroche.

Il peut bien sûr être la faute du modem, mais je me demande si la façon dont je communique avec elle est OK.

Firs de tous, j'ouvre le port série pour les opérations asynchrones du modem. Ensuite, je mets la structure DCB comme suit:

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);

Et puis tout ce que je fais est d'envoyer des commandes AT et attendre la réponse du modem. Je n'utilise aucun contrôle de flux. Tout ce que je fais est d'attendre pour l'événement comm, lire les données de la file d'attente de port série lorsque le modem répond et écrire certaines commandes suivies par le caractère # 13 pour interroger le modem pour les messages.

Je pense que j'ai mis la structure DCB mal, pour que vous pouvez le voir, je ne modifions pas certains de ses champs. Parce que ma connaissance sur le port série ne suffit pas, je ne sais pas comment configurer le RTS et le contrôle DTR (activé / désactivé / poignée de main / bascule).

Si vous avez remarqué des erreurs évidentes dans cette façon de gérer un modem, je serais reconnaissant si vous me l'avez expliqué ce que je l'avais fait mal. Si tout va bien, d'autre part, peut-être vous avez une idée pourquoi le modem raccroche?

Je vous remercie à l'avance.

Était-ce utile?

La solution

En général, les paramètres DCB sont les premières choses que vous devriez vérifier. La documentation du modem doit mentionner les paramètres du port série. Sinon la recherche en ligne avec le numéro de modèle de votre modem.

Autres conseils

Assurez-vous que le contrôle de flux dans le Gestionnaire de périphériques, le modem et le programme sont tous ensemble les mêmes. Je ne sais pas Delphi, mais je pense que le DCB devrait avoir un champ « Flags ». Essayez le mettre à 24 pour le contrôle de flux matériel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top