Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème d'envoi d'sms. [ Réseaux & Internet / Client - Serveur ] (zakaria616)

samedi 31 mai 2008 à 16:59:05 | Problème d'envoi d'sms.

zakaria616

Bonjour tout le monde,

j'utilise un modem gsm pour envoyer les sms.
Je dois envoyer l'ensemble des message contenu dans ma MSFlexGrid(2 colonnes : Numéro et message).
Je dois faire une boucle..
j'ai fais une fonction send_sms :
Code :
 
PrivateFunction send_sms(num, body)
 
ModemGSM.InBufferCount = 0'vider le buffer du modem
Text2.text = ""'Text2 contient les réponse du modem
 
ModemGSM.Output = "AT" & Chr$(13)
PauseGetTickCount (1000)'permet d'attendre 1s(le temp pour que le modme répond)
 
ModemGSM.Output = "AT+CMGF=1" & Chr$(13)'Format text
PauseGetTickCount (1000)
 
ModemGSM.Output = "AT+CMGS=" & Chr$(34) & num & Chr$(34) & Chr$(13)'Numéro destinataire
PauseGetTickCount (1000)
 
 
ModemGSM.Output = body + Chr$(26)'Message + (CTRL+Z)
PauseGetTickCount (4000)'Attente 4s(Estimation)
 
EndFunction
Voilà le bouton envoyer :
Code :
PrivateSub Envoyer_Click()
 
'nombre de lignes de la grille :
lignes = grille.Rows - 1
 
ModemGSM.Output = "AT+CFUN=1" & Chr(13)'selects the level of functionality(1=Full functionality)
PauseGetTickCount (150)
 
ModemGSM.Output = "AT+CMEE=2" & Chr(13)'Format des erreurs(2=text)
PauseGetTickCount (150)
 
For CRow = 1To lignes
Call send_sms(grille.TextMatrix(CRow, 0), grille.TextMatrix(CRow, 1))
Next CRow
 
EndSub
voilà comment je récupère les réponses du modem :

Code :
PrivateSub Timer1_Timer()'interval = 100
 
If ModemGSM.InBufferCount <> 0Then
Text2.text = Text2.text + ModemGSM.Input'Récupération des infos de communication avec le modem
 
EndIf

EndSub
quand je teste avec les même commandes AT dans l'hyperTerminal de windows ça marche impécable, le message s'envoi sans problème.

Mais avec mon programme, le modem renvoi l'erreur suivante :
Code :
 
AT
 
OK
AT+CMGF=1
 
OK
AT+CMGS="067******"
 
> Mon message!
 
+CMS ERROR: SIM busy 'Voilà ce que je comprend pas!!!!! pourquoi busy???occupée?? par quoi???
 
Si qq1 pourra m'aider j'en serai vraiment très reconnaissant...

Merci.

lundi 2 juin 2008 à 11:27:49 | Re : Problème d'envoi d'sms.

alligo

Salut,

Es-tu bien sur que ton modem est bien libre quand tu envoies ton message ?

essaye d'envoyer uniquement ton message, sans envoyer les commandes CFUN, CMGF et CMEE.

Ces commandes ne sont utiles que pour l'initialisation tu n'as pas besoin de lui repeter a chaque envoi. enfin je parle pour un modem siemens mc35i



dimanche 8 juin 2008 à 19:50:00 | Re : Problème d'envoi d'sms.

philippe laschweng 1

Bonjour,

J'ai eu un peu le même genre de problème en utilisant un modem GSM. C'était intermittent et j'ai remarqué que mon modem n'aimait pas trop quand j'envoyais les commandes les unes derrière les autres sans TEMPO. Hé oui c'est un dialogue, si il comprends pas la commande précédente, pas la peine de lui renvoyer une nouvelle commande.

C'est pourquoi j'ai utilisé un Select Case pour temporiser le tout. J'envoie une commande, j'attends que le modem la reçoive et l'assimile puis je continu. c'est un peu plus lourd à gérer mais plus propre à mon avis. J'ai analysé ton code et ça me paraît tout bon.
Ci-dessous tu verras l'exemple de mon séquencement, mais tu peux essayer de lui intercaler une tempo entre le moment où tu balances ton numéro et le message du SMS pour voir si c'est bien ça.

'Ce Timer permet de voir la communication avec le modem. On recopie dans T_Rx.text
'ce que répond le modem. C'est obligatoire car on envoie une commande AT et pour pouvoir
'continuer, il faut attendre que le modem réponde
'Ce Timer ne se préocupe donc que de 'voir' ce que l'on fait

Private Sub Timer1_Timer()
If MSComm.InBufferCount > 0 Then
    MSComm.InputLen = MSComm.InBufferCount
    T_Rx.Text = T_Rx.Text + MSComm.Input
  End If
End Sub


'Dans ce Timer, on utilise un séquencement avec le Select Case.
'Je le répéte, mais le principe est simple :
'   --> D'abord on envoie une commande AT au modem
'   --> Pour continuer, on va attendre que le modem ai compris la commande et qu'il nous réponde
'On ne peut pas tout lui balancer à la suite !!!

Private Sub Timer2_Timer()
Select Case Etp_Seq
    Case 0
      T_Rx.Text = ""
      MSComm.Output = "AT" & Chr$(13) 'On vérifie que le modem est connecté (il doit répondre OK)
      Etp_Seq = 1 'On passe à l'étape suivante ou l'on va attendre que le modem réponde (fait rien si pas le cas car ca ne sert à rien de continuer)
      
    Case 1
      'UCase permet d'obtenir systèmatiquement des majuscules
      '10 ==> saut de ligne
      '13 ==> retour charriot (CR)
      
      'Attende que le modem réponde AT et OK
      'La syntaxe est peut être un peu lourde mais le Chr$(13) & Chr$(10) veut juste dire que l'on saute à la ligne
      If UCase$(T_Rx.Text) = "AT" & Chr$(13) & Chr$(13) & Chr$(10) & "OK" & Chr$(13) & Chr$(10) Then
          T_Rx.Text = ""
          Etp_Seq = 2 'Modem à répondu OK on continu (étape 2)
     Else: mess = MsgBox("Communication avec le terminal Impossible ! Revérifiez les branchements !", vbCritical, "Erreur") 'Si modem réponds pas OK, il n'est pas branché et message d'erreur
          If (mess = vbOK) Then
              Etp_Seq = -1
              TxtNuméro.Text = ""
              TxtMessage.Text = ""
          End If
     End If
    
    Case 2
      T_Rx.Text = ""
      'Chr$(34) --> caractère ASCII de (")
      'On envoi au terminal le numéro de téléphone (pour bien faire les choses j'ai géré l'indicatif pays qui est +33 pour la France)
      MSComm.Output = "at+cmgs=" & Chr$(34) & "+33" & Right(TxtNuméro, 9) & Chr$(34) & Chr$(13)
      Etp_Seq = 3 'On continue à l'étape 3
    
    Case 3
    'Pareil : on attend que le message est compris la commande précédente (numéro) en nous répondant à la fin le symbole >
      If UCase$(T_Rx.Text) = "AT+CMGS=" & Chr$(34) & "+33" & Right(TxtNuméro, 9) & Chr$(34) & Chr$(13) & Chr$(13) & Chr$(10) & "> " Then
        T_Rx.Text = ""
        Etp_Seq = 4 'On continu (étape 4)
      End If
      
    Case 4
      T_Rx.Text = ""
      'Chr$(26) --> caractère ASCII de la combinaison de touches CTRL+Z (permet
      'de valider l'envoi du SMS aprés y avoir entré le texte du message => propre
      'au terminal)
      MSComm.Output = TxtMessage & Chr$(26) 'On rentre le message du SMS et on envoi
      Etp_Seq = 5 'Etape 5
    
    Case 5
      TxtMessage.Text = ""
      TxtNuméro.Text = ""
      T_Rx.Text = ""
      Etp_Seq = -1 'Dévalide l'envoi du SMS (Select Case inactif)
  
  End Select

End Sub





C'est peut être autre chose mais si tu me dis que c'est OK avec l'hyperterminal je vois pas !!!

Bon courage,
Philippe

lundi 9 juin 2008 à 12:38:36 | Re : Problème d'envoi d'sms.

alligo

@Philippe

j'ai procédé de la meme maniere avec mon modem.

tout fonctionne tres bien et j'ai ajouté un truc : en cas d'erreur je lui renvoie la derinere commande effectuée

un autre problem avec lequel j'ai du me battre : c'est la suppression automatique des messages. mon modem recoit un message, le traite, mais je n'ai pas besoin de le regarder. et j'ai eu des problemes avec la sequence, donc la pas le choix il fallait faire une pause relativement longue.



lundi 9 juin 2008 à 20:17:44 | Re : Problème d'envoi d'sms.

philippe laschweng 1

Ok bah c'est tout bon si ça fonctionne !!
C'est souvent une histoire de temporisation quand on communique avec un périphérique plus ou moins lent à assimiler les commandes...

Bonne continuation !
Bien à toi,
Phil

lundi 9 juin 2008 à 20:27:17 | Re : Problème d'envoi d'sms.

zakaria616

@Philippe
votre méthode de séquancement dois marcher trés bien si on veux envoyer un seul sms.
le problème se pose lorqu'on veut envoyer plusieurs sms succèssivement l'un après l'autre.
Mon tableau(Msflexgrid) contient un ensemble d'sms à envoyer...donc je dois utiliser une boucle pour parcourir tout le tableau. j'ai testé celà avec votre méthode et ça marche pas..la boucle FOR pose beaucoup de problème pour moi à l'intérieur d'un Timer.
J'ai essayé de remplacé le role du timer par la fonction PauseGetTickCount (), qui permet d'attendre le nombre passé en paramère en milliseconde...mais ça donne ce que vous voyez tout au dessus.
Y'a t il moyen d'utiliser la boucle FOR à l'intérieur du timer??!!

lundi 9 juin 2008 à 20:36:05 | Re : Problème d'envoi d'sms.

philippe laschweng 1

Ma méthode fonctionne aussi pour envoyer plusieurs SMS mais faut les envoyer un après l'autre. C'est sûrement plus long mais je n'ai jamais eu de plantage !!! J'ai installé ça sur une machine de supervision en Afrique vers la France et jamais loupé un SMS
Il suffit de détecter le numéro de séquencement pour savoir quand il a finit d'envoyer le SMS.
Là ooù c'est plus embêtant je l'admets, c'est quand tu reçois un SMS quand est entrain d'en envoyer un autre...

lundi 9 juin 2008 à 20:44:12 | Re : Problème d'envoi d'sms.

zakaria616

Mais comment?? aidez moi svp, je vois pas comment je peux envoyer plusieurs messages l'un après lautre...c pas grave si c long.. je vous ai expliquer mon cas... j'espère que vous me mettrez du code : comment utiliser votre méthode avec une boucle FOR??
merci d'avance.

lundi 9 juin 2008 à 20:47:28 | Re : Problème d'envoi d'sms.

philippe laschweng 1

L'indice de séquencement correspond à la variable Etp_Seq.
Au démarrage du projet, dans le Form Load je mets cette variable à -1.

Dés que tu veux envoyer un SMS, tu passes la variable à 0, et ça démarre tout seul vu que tu as un Timer qui tourne en boucle. A toit de t'en faire une fonction !!
Ensuite tu scrutes, tant que Etp_Seq n'est pas égal à -1 c'est que ton appli est en train d'envoyer un SMS. Dés que Etp_Seq passe à -1, tu peux balancer le deuxiéme SMS, et ainsi de suite !!!

lundi 9 juin 2008 à 20:53:37 | Re : Problème d'envoi d'sms.

zakaria616

Oui apparement c ça, logique :) je vais essayer ça et vous dire ce que ça donnera.
merci bcp ;)


1 2

Cette discussion est classé dans : sms, output, at, chr, modemgsm


Répondre à ce message

Sujets en rapport avec ce message

impression codebar + prix a coter [ par petiflamand ] voici mon codeMSComm1.PortOpen = TrueOn Error Resume Next titre = Text1If Text2 "" Then    prix = Text2 'Text2 + " F / " + Format((Text2 / 6.55957) GSM USSD [ par khouja_mustapha ] Bonjour j'ai connecté mon gsm à mon PC via un port COM j'utilise les commandes AT pour communiquer par exp : MSComm1.Output = "AT+CUSD=1," & Chr(34) envoi SMS [ par khouja_mustapha ] Bonjour, J'essai d'envoyer des SMS par une appli. VB, j'utilise les commandes AT. Ma question est ce que AT+CMGS="N° du destinataire" ou bien AT+CMG Comment envoyer des SMS [ par khouja_mustapha ] Salut tout le monde, Je cherche un code pour envoyer des SMS à partir de VB, j'en ai trouvé plusieurs sur internet mais ils sont des Demos et des Shar Problème avec l'évenement OnComm de l'objet MSComm [ par politorichard ] Voila je vous explique brievement mon problème :J'ai un capteur qui envoie en continu des données sur un port série, ce sont des strings de 6 caractèr biblio introuvable [ par mannanaesc ] bj à tous. svp g un probleme avec la biblio et jarrive pa à le resoudre. en fait à chake foi g le msg derreur "projet ou bibliotheque introuvable". vo envoi de sms via modem d'un mobile [ par sysye ] Bonjour a tousje dévéloppe une application qui envoi des sms à partir d'un PC via un modem à un telephone mobile.Pour le moment j'utilise un Nokia 520 Envoyer SMS via le VB6.0 [ par erriyadimounir ] Bonjour,j'ai un projet dont lequel je dois envoyer un sms à un numéro portable entré,si qlq'un a des idées merci de me les envoyer,Merci d'avanceCordi aide:envoie sms entre pc et telephone en java [ par gadbil ] Bonjour,je suis en train de faire un stage.on m'a demendé de faire un pg  qui permettra ,parmis d'autres, d'envoyer des sms d'un ordinateur vers un te Help !! bin2hex avec multi-threading !! Urgent !! [ par XelectroX ] Bonjour,Je cherche quelqu'un qui serait capable de me faire fonctionner cela correctement (problème décrit à la fin) :Public Class bin2hex    <font co


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.