Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » lun. 29 janv. 2018 10:43 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

DS des commandes du module GSM2 : https://www.quectel.com/UploadImage/Dow ... l_V1.2.pdf

Voila quelques semaines que je me suis remis à essayer de faire quelques choses avec mon module GSM2. Le but étant de pouvoir faire un peu de domotique à la maison. Genre allumer une lumière pour commencer, mais pour cela il faut que j'arrive fiabiliser mon programme et ce n'est pas gagné !

Le bug que je vais tenter de vous expliquer ci dessous, je n'arrive pas à le reproduire à tout les coups, des fois ça fonctionne pendant 20 minutes et 20 SMS envoyés, des fois ça plante assez vite. Je n'ai pas réussis à mettre le doigt sur la cause exact de ce plantage, mais je pense avoir trouvé où il ce situait mais sans l'expliquer .

Je précise que mon programme fonctionne très bien en temps normal, mais à un moment pouffff ça veut plus.

le programme ce compose en 4 fichiers :
- le programme principal
- l’interruption sur réception UART (machine d'état)
- Une fonction analyse du SMS entrant qui renvoie un numéro de réponse approprié
- et une fonction envoi de la réponse par SMS .

Pour ceux qui ont MIKROC vous pouvez décompressez cette archive et ouvrir le programme :
GSM2_V3.zip


Les autres courageux qui veulent jeter un œil devront ouvrir les .C avec un éditeur de texte.

Pour diagnostiquer le problème j'espionne le dialogue entre le PIC et le module GSM avec un cordon et "realterm". Je ne peux espionner qu'un seul tuyau à la fois mais cela reviens au même au final. Que j'espionne le tuyau PIC<->GSM2 ou GSM<->PIC le problème reste le même sans information supplémentaire

Rentrons dans le vif du sujet .

Le fonctionnement de mon programme :
- Toute les secondes je demande au module radio de m'afficher les messages à l'emplacement #1 avec la commande "AT+CMGR=1".
- Si je n'ai pas de message le module me revoit "OK". je reboucle .
- Si j'ai un message, il me le renvoi avec des "mots clés" et fini aussi par "OK".

Pendant qu'il m'envoie son message, je l'examine ( les mots clés) avec la machine d'état et lève certais drapeau en fonction des mots clés recus. J'attends toujours la fin de l'envoi du message indiqué par un "OK". Ainsi je m'assure d’avoir bien tout lu le message. Plutôt que de mettre une pause qui est assez aléatoire.
Si le drapeau "UNREAD" ou "READ" est levé c'est que j'ai un message à l’emplacement #1. Donc je dois l'analyser pour savoir qu'elle réponse envoyée. De la je pars sur ma fonction analyse SMS .
cette fonction indique un numéro de message en retour quelle stocke dans une variable.

Une fois analysé, je vais dans ma fonction ENVOI _SMS :
- Suivant le numéro du message je compose ma réponse.
- J’envoie la commande pour envoyer un message "AT+CMGS= numero de tel".
- J'attends que le module soit prêt a le recevoir. ( la petite flèche)
- Une fois la petite flèche reçue, je lui envoi le texte du message a renvoyé.

Et voila je reviens au programme principal et je fais clignoter ma led pour dire que j'ai reçu un SMS ( chiffre impair pour changer l'état de la LED)

Dans l'idéal tout devrait se passer comme ça !

Le problème maintenant: :furieux: :furieux: :furieux:

A un moment (non défini), je ne reçois plus aucune réponse. Mon module GSM2 reçoit bien un message, car les leds clignotent. Dans la théorie cela signifie aussi qu'il passe par la fonction "analyse " et la fonction "ENVOI".

Dans tous les cas, si mon module reçois un message, correct ou non, il doit me renvoyer une réponse. La fonction analyse met toujours une valeur dans la variable numéro de message. je ne vois pas de "BUG" possible ici.
Ensuite viens l'envoi du SMS . C'est donc ici le départ du BUG.

Pour envoyer un SMS, il faut envoyer une commande au module. cette commande c'est "AT+CMGS = numéro de téléphone" que j'ai remplis lors de l'analyse du SMS.
Lors du BUG ce message ne part jamais! a partir de la déjà je ne comprends pas. Quoi qu'il arrive le PIC devrait envoyé au module cette commande ("AT+CMGS= numero de tel" ). Donc si il ne l'envoi pas, forcement pas d'envoi de SMS. Voila source du problème.

J'essaye donc de remonter le fil du BUG et c'est la mon incompréhension totale. Car il n'y a pas de condition pour envoyer cette commande. j'entends par la , que si on rentre dans la fonction, forcement il doit m'envoyer cette commande ("AT+CMGS= numero de tel") !!! Hors je ne la vois pas à l'espionnage. cette commande n'est pas envoyée .

Je me dis que si cette commande n'est pas envoyée c'est que je n’exécute pas cette fonction. Donc je continue à remonter le bug

Cette fonction n'a qu'une seule condition d’exécution, pour s’exécuter il faut qu'il y ai un nouveau SMS. Hors le PIC à bien reçu un nouveau SMS car les leds clignotent donc je suis bien obligé d’exécuter cette fonction. La je suis perdu ! La fonction est obligé de s’exécuter, l'envoi de la commande est obligé de ce faire et pourtant rien ne se fait !

J'ai fais en sorte que rien ne reste bloquant indéfiniment. dans tout les cas, si un bug survient au bout d'un moment , on revient en position claire.

POURQUOI donc , cette commande n'est pas envoyée ? alors que je suis sûr que le PIC exécute la fonction ? telle est la question ?

J'ai remarqué qu'avant ce problème ci, il s'en produit un autre. Même si cet autre problème ne devrait en rien interférer dans le second. Et vous savez quoi ? je ne comprends pas non plus le premier bug et pourquoi il est a l'origine du deuxième bug.

A un moment donné, comme d'habitude je demande à lire les messages, il m'affiche un message un non lu, puis dans la foulée il m'affiche un message lu ! alors que dans la théorie je ne lui demande pas. Si j'ai un message non lu, il devrait le traiter puis l'effacer dans la foulée. Hors la, non !!!

La je comprends pas comment c'est possible, sauf un problème avec le module GSM2.

Et même si ce bug se produit, pourquoi ensuite, je ne n'arriverai pas a envoyer d'autre message !

Voici en image l'espionnage fait au moment du bug . Je précise qu'avant cela tout a fonctionner sur de nombreux SMS. C'est à ce moment précis que ca bug.
Sans titre.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

BUG introuvable sur module GSM2-Click
satinas
Passioné
Passioné
Messages : 438
Enregistré en : novembre 2015

#2 Message par satinas » mar. 30 janv. 2018 08:37 lien vers la Data-Sheet : Cliquez ici

Bonjour Jeremy,

Avant d'envoyer un sms, es-tu sur d'avoir un numéro de teléphone et un numéro de message valide ?
Pourquoi envoyer plusieurs fois les commandes dans une boucle do, je préfère les envoyer une seule fois et attendre la réponse, avec un time-out à déterminer pour chaque type de commande.

Pour debugger, il te faut un 2ème port série vers un terminal PC. Tu te fais une fonction d'affichage debug qui indique tout ce qu'il se passe (avec un sprintf(s, ...) et UART_Write_Text(s)):
- Envoi au module "xxx""
- Reçu du module "yyy"
- exec fonction d'envoi sms, message numéro n vers +336nnnnnnnnn
- etc ...

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » mar. 30 janv. 2018 08:47 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

Bon j'ai bien conscience que je ne vais pas avoir une foule de réponse vue la complexité du problème. Surtout quand on a pas la platine sous les yeux, comprendre mon code et ma logique, avec toutes ces variables ..... n'ai pas une chose aisée !

J'ai beau retourné le problème de tout les sens, rien n'y fait . De temps en temps il y a des erreurs et je ne comprends pas pourquoi:

Peut être un problème HARD sur ma platine, pourtant j'ai respectée la DS
Peut être un module défaillant, ou pas assez fiable
Peut être quelques choses qui m'échappe mais trop complexe pour moi

Je suis frustré car je suis conscient qu'en utilisant l'UART il peut y avoir des erreurs, mais j'aurais aimé pouvoir faire en sorte, que quand une erreur se produit, soit on la corrige, soit on le sait et on effectue pas d'action.

Bref je suis déçu encore une fois !

J'y reviendrais peut être plus tard, avec plus d’expérience ! Je me tâte à essayer un autre module LE GSM 3 - click que je possède dans mes tiroirs . :cry:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

BUG introuvable sur module GSM2-Click
satinas
Passioné
Passioné
Messages : 438
Enregistré en : novembre 2015

#4 Message par satinas » mar. 30 janv. 2018 08:53 lien vers la Data-Sheet : Cliquez ici

La fonction interruption est trop complexe, elle doit juste stocker la réponse en ajoutant les caractères reçus, ensuite tu analyses la chaîne réponse.

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » mar. 30 janv. 2018 08:59 lien vers la Data-Sheet : Cliquez ici

Bonjour satinas,

Avant d'envoyer un sms, es-tu sur d'avoir un numéro de teléphone et un numéro de message valide ?

valide ou non la fonction devrait quand même écrire la commande

satinas a écrit :Source du message Pourquoi envoyer plusieurs fois les commandes dans une boucle do,

Je fais ceci seulement dans l’initialisation ud module . Car Ici il ne faut pas de loupé, si le module est mal paramétré , rien ne fonctionne. Le timeout est donc impossible.
Par contre je fais ce que tu dis après ! pour éviter le plantage justement ( rester bloquer dans une boucle) .

satinas a écrit :Source du message Pour debugger, il te faut un 2ème port série vers un terminal PC. Tu te fais une fonction d'affichage debug qui indique tout ce qu'il se passe (avec un sprintf(s, ...) et UART_Write_Text(s)):

Oui c'est une bonne idée, mais cela implique une modif HARD que je ne peut pas faire sur cette platine. Par contre pour ma prochaine j'y songerai
Mais en fait c'est pas tellement le probléme, car j'ai réussis à englober le probléme. En changeant la lecture des tuyaux . le probléme se n'est pas savoir ce qui part bien ou non.
Le problème c'est pourquoi le module à ce comportement !
Sans titre2.jpg

POURQUOI est ce qu'il m"'envoie deux fois de suite ce message ? alors que je ne lui demande pas ? ou alors il se passe un truc inexplicable pour moi

Et pire , OK, il m'envoie les deux lignes du dessus . JE l'ai fais 10 fois au pas à pas. Il devrait m’indique deux fois un SMS reçu, sachant qu'il s'écrase. Donc il ne devrait même pas y avoir de problème. En recevant ces deux lignes incompréhensible, il ne devrait pas bugger, et pourtant ensuite impossible d'envoyer un SMS ...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mar. 30 janv. 2018 09:02 lien vers la Data-Sheet : Cliquez ici

satinas a écrit :Source du message La fonction interruption est trop complexe, elle doit juste stocker la réponse en ajoutant les caractères reçus, ensuite tu analyses la chaîne réponse.


Je ne suis pas tout a fait d'accord avec toi , mais je peux me tromper. Elle n'est pas complexe, elle est juste LONGUE, car chaque caractère reçu et examiner.
J'ai penser a changer de stratégie mais cela me faisait tout refaire. et manipuler des chaines de caractères avec lequel je ne suis pas très à l'aise.

Crois tu que mon problème puisse venir de ma machine d'état ? je ne suis qu'a 9600Bauds
C'est en faisant des erreurs, que l'on apprend le mieux !!!

BUG introuvable sur module GSM2-Click
satinas
Passioné
Passioné
Messages : 438
Enregistré en : novembre 2015

#7 Message par satinas » mar. 30 janv. 2018 09:20 lien vers la Data-Sheet : Cliquez ici

Difficile de répondre, tu reçois et tu analyses dans l'interruption, cela t'amène à créer des tas de flags globaux difficiles à suivre. Il faut le faire en 2 temps.
Pour installer une console série, il suffit d'un fil, au pire souder directement sur la pin du pic.

BUG introuvable sur module GSM2-Click
satinas
Passioné
Passioné
Messages : 438
Enregistré en : novembre 2015

#8 Message par satinas » mer. 31 janv. 2018 11:00 lien vers la Data-Sheet : Cliquez ici

Bonjour,
il faut déclarer en volatile toutes les variables utilisées dans l'interruption. Elles sont modifiées à la fois dans le programme et dans la routine d'interruption.
Avec le terme volatile, on dit au compilateur de ne faire aucune supposition sur le contenu des variables, et donc chaque fois qu'elles apparaissent dans le code, de les lire systématiquement avant d'utiliser leur contenu.

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » mer. 31 janv. 2018 13:47 lien vers la Data-Sheet : Cliquez ici

Bonjour satinas et à tous,

Franchement déjà merci de te pencher sur mon problème. Il faut être courageux :bravo:

Ton idée de volatile n'est du tout farfelue bien au contraire. De ce que j'ai compris, cela pourrait effectivement joué un rôle. Surtout sur le coté "Aléatoire" du bug. Car entre deux interruptions il se peut qu'une valeur change, voir même pendant l'interruption.

Je vais essayer ceci, d etoute facon je ne pense pas que cela puisse nuire à quoi que ce soit !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

BUG introuvable sur module GSM2-Click
Jérémy
Administrateur du site
Administrateur du site
Messages : 2384
Âge : 40
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#10 Message par Jérémy » mer. 31 janv. 2018 20:34 lien vers la Data-Sheet : Cliquez ici

35 SMS envoyés aucune erreur !!!

Je continue mes tests !! Je ne préfère pas crier victoire trop vite !!
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités