PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Problème commande AT
Problème commande AT
Iniciado por Robert, ago., 02 2018 9:43 AM - 6 respostas
Membro registado
6 mensagems
Publicado em agosto, 02 2018 - 9:43 AM
Bonjour à tous.
Je souhaiterais avoir vos conseils car j'utilise windev 20 et j'ai du mal à piloter un modem via le port série.
Le modem est un générique avec contrôleur SIM900 . Il attends des commandes AT.
Le but est d'envoyer un SMS lorsqu'on clique sur un bouton . Pour cella j'utilise la commande AT :
AT+CMGS = "Num_mobile" [enter]
A ce moment le modem fait apparaitre le caractère > et attend le message
Pour valider le contenu il faut lui envoyer le caractère substitute [ CTRL + Z ]
Pour finir le modem renvoi la réponse :
+CMGS: 40 ( ou 40 correspond à sa fille d'attente il me semble bref rien d'important )
[ retour ligne]
OK

Avec un terminal ça fonctionne parfaitement on peut enchainer les SMS .
Mon problème dans Windev est que lors du lancement du programme, après remplissage des valeurs le SMS est bien envoyé. Cependant si on recommence plus rien ne se passe coté modem . Pourtant lorsque je me connecte avec un terminal externe sur mon PC, le programme renvoie bien les commandes AT .
Quelqu'un pourrait-il m'expliquer ce qui va pas dans ma méthode ? J'ai fait 2 boucles car il faut faire une petite pause (500ms à 1 sec) entre les 2 chaines autrement le modem n'avait pas le temps le tout traiter . J'ai un niveau windev très faible également ;)
D'avance Merci

Voici le code que j'ai mis sur : Clic sur BTN_EnvSMS :

NumPort est un entier = 9 // Numéro du port
// Chaîne à écrire sur le port
TailleEcrite est un entier // Taille de la chaîne qui a pu être écrite
TailleBufferEntrée est un entier = 500 // Taille du buffer des lectures
TailleBufferSortie est un entier = 500 // Taille du buffer des écritures
// Temps d'attente des fonctions sLit/sEcrit entre deux caractères (en ms)
TempsAttentePort est un entier = 100
ChaîneAEcrire est une chaîne = "AT+CMGS=""" + SAI_Numero_Tel + """" + RC
Monmessage est une chaîne = SAI_Message + SAI_RefDemande + Charact(26) // ctrl + z = ascii 26

// Ouverture du port
SI sOuvre(NumPort, TailleBufferEntrée, TailleBufferSortie, TempsAttentePort) = Faux ALORS
// Traitement de l'erreur d'ouverture
Erreur("Erreur d'ouverture de COM" + NumPort)
SINON
// Paramétrage du port
SI sFixeParamètre(NumPort, 9600, 1, 8, 0,Faux,Faux,Vrai) = Faux ALORS
// Traitement de l'erreur de paramétrage
Erreur("Erreur de paramétrage de COM" + NumPort)
SINON
BOUCLE
// Ecriture sur le port
TailleEcrite = sEcrit(NumPort, ChaîneAEcrire)
// On teste ce qui a pu être écrit
SI TailleEcrite = 0 ET ChaîneAEcrire <> "" ALORS
// Rien n'a été écrit alors que la chaîne à écrire n'est pas vide
// Vérification du buffer de sortie
SI sDansFileSortie(NumPort) < TailleBufferSortie ALORS
// Le buffer de sortie n'est pas plein : problème de périphérique
SI OuiNon("Impossible d'écrire sur le port" + ...
"COM" + NumPort,...
"Vérifier qu'un périphérique est prêt" + ...
"et correctement connecté.", ...
"Voulez-vous ré-essayer ?") = Faux ALORS
SORTIR // Abandon de l'écriture
FIN
SINON
// Le buffer de sortie est plein
// Temporisation pour que le buffer de sortie puisse se vider
Multitâche(200)
// Re-vérification du buffer de sortie
SI sDansFileSortie(NumPort) >= TailleBufferSortie ALORS
// Le buffer de sortie est plein
SI OuiNon("Impossible d'écrire sur le port" + ...
"COM" + NumPort, ...
"Vérifier qu'un périphérique est prêt" + ...
"et correctement connecté.", ...
"Voulez-vous ré-essayer ?") = Faux ALORS
SORTIR // Abandon de l'écriture
FIN
FIN
FIN
SINON
SI TailleEcrite = Taille(ChaîneAEcrire) ALORS
// Tout a été écrit
SORTIR
// Sinon, seule une partie a été écrite
// Mais on a écrit, donc on continue d'essayer
FIN
FIN
FIN
FIN

// Fermeture de COM1
sFerme(NumPort)
FIN

Multitâche(100)

// Ouverture du port
SI sOuvre(NumPort, TailleBufferEntrée, TailleBufferSortie, TempsAttentePort) = Faux ALORS
// Traitement de l'erreur d'ouverture
Erreur("Erreur d'ouverture de COM" + NumPort)
SINON
// Paramétrage du port
SI sFixeParamètre(NumPort, 9600, 1, 8, 0, Faux,Faux,Vrai) = Faux ALORS
// Traitement de l'erreur de paramétrage
Erreur("Erreur de paramétrage de COM" + NumPort)
SINON
BOUCLE
// Ecriture sur le port
TailleEcrite = sEcrit(NumPort, Monmessage)
// On teste ce qui a pu être écrit
SI TailleEcrite = 0 ET Monmessage <> "" ALORS
// Rien n'a été écrit alors que la chaîne à écrire n'est pas vide
// Vérification du buffer de sortie
SI sDansFileSortie(NumPort) < TailleBufferSortie ALORS
// Le buffer de sortie n'est pas plein : problème de périphérique
SI OuiNon("Impossible d'écrire sur le port" + ...
"COM" + NumPort,...
"Vérifier qu'un périphérique est prêt" + ...
"et correctement connecté.", ...
"Voulez-vous ré-essayer ?") = Faux ALORS
SORTIR // Abandon de l'écriture
FIN
SINON
// Le buffer de sortie est plein
// Temporisation pour que le buffer de sortie puisse se vider
Multitâche(200)
// Re-vérification du buffer de sortie
SI sDansFileSortie(NumPort) >= TailleBufferSortie ALORS
// Le buffer de sortie est plein
SI OuiNon("Impossible d'écrire sur le port" + ...
"COM" + NumPort, ...
"Vérifier qu'un périphérique est prêt" + ...
"et correctement connecté.", ...
"Voulez-vous ré-essayer ?") = Faux ALORS
SORTIR // Abandon de l'écriture
FIN
FIN
FIN
SINON
SI TailleEcrite = Taille(Monmessage) ALORS
// Tout a été écrit
SORTIR
// Sinon, seule une partie a été écrite
// Mais on a écrit, donc on continue d'essayer
FIN
FIN
FIN
FIN




// Fermeture de COM1
sFerme(NumPort)
FIN
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em agosto, 02 2018 - 6:43 PM
Coucou,

1) Tu compiles ton project en 32bits ou 64bits ?
2) Charact(26) // ctrl + z = ascii 26 C pas un EOF plutôt ?
3) Il faut que tu place tes multitaches en valeur négative

--
In üs we trust - #92i
Mensagem modificada, agosto, 02 2018 - 6:43 PM
Membro registado
6 mensagems
Publicado em agosto, 02 2018 - 8:08 PM
Bonjour,
Merci pour votre réponse . Compilation 32bits et la validation se fait bien par CTRL+Z (ascii 26)
Après des centaines de combinaisons dans Windev sans succès j'ai remarqué que le paramétrage de la vitesse du port du modem SIM900 était en automatique. Elle se calait automatiquement après la chaine AT et comme mon Putty était un 9600 par défaut et que manuellement ça marchait j'ai utilisé la même valeur dans Windev . Bref j'ai résolu le problème en utilisant le paramétrage suivant :
AT+IPR=115200 // Set baud rate to 115200 bps
Le plus important étant de fixer la vitesse du port à une vitesse fixe .
Au moins ça pour servir de "cas d'école" pour les autres utilisateurs :p
Merci à tous
Publicado em agosto, 05 2018 - 12:10 AM
Robert a écrit :
Bonjour,
Merci pour votre réponse . Compilation 32bits et la validation se fait bien par CTRL+Z (ascii 26)
Après des centaines de combinaisons dans Windev sans succès j'ai remarqué que le paramétrage de la vitesse du port du modem SIM900 était en automatique. Elle se calait automatiquement après la chaine AT et comme mon Putty était un 9600 par défaut et que manuellement ça marchait j'ai utilisé la même valeur dans Windev . Bref j'ai résolu le problème en utilisant le paramétrage suivant :
AT+IPR=115200 // Set baud rate to 115200 bps
Le plus important étant de fixer la vitesse du port à une vitesse fixe .
Au moins ça pour servir de "cas d'école" pour les autres utilisateurs :p
Merci à tous


Bonjour.
Est ce que le message envoyer contient des caractères accentués ou des chiffres.
Merci
Membro registado
6 mensagems
Publicado em agosto, 28 2018 - 3:22 PM
Aeh a écrit :

Bonjour.
Est ce que le message envoyer contient des caractères accentués ou des chiffres.
Merci


Bonjour,
Oui le message contenait bien des caractères accentués mais dans mon cas le problème venait principalement du mode vitesse connexion auto sur le SIM900 . Une fois le vitesse fixée à 115200 le modem à fonctionné parfaitement
Publicado em abril, 02 2024 - 9:32 PM
Bonjour à tous.

Je voudrais savoir pourquoi le code est en double ?. A moi j'ai mal lue.

Il me semble le code posté comprend deux mêmes blocs qui font la même chose'
Membro registado
3.353 mensagems
Popularité : +93 (137 votes)
Publicado em abril, 03 2024 - 9:07 AM
Salut Guillaume
Non car il faut tenir compte de tous les si sinon