Probleme de reception de données avec MSComm

cs_bumbo Messages postés 26 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 10 février 2010 - 3 janv. 2007 à 15:14
cs_bumbo Messages postés 26 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 10 février 2010 - 5 janv. 2007 à 13:48
Bonjour a tous,
D'habitude quand je rencontre un problème, j'essai de me débrouiller en fouillant le net et ca marche mais cette fois, je suis tombé sur plus fort que moi...

Donc je souhaite réaliser une classe pour communiquer avec un modem gsm, ça fonctionne très bien sous hyper terminal mais j'ai quelques soucis avec MScomm, je ne reçois pas les données provenant du mobile



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Je m’explique :


J’ai réalisé un programme simple pour commencer, dans lequel je demande le numéro IMEI au mobile (connecté soit en usb, soit en lien série, ça marche dans les deux cas.) avec l’objet MSComm créé en statique. Ce bout de programme fonctionne très bien, j’arrive a récupérer les données que renvoi le mobile :



 




MScomm étant « com » configuré sur le port 4 (usb) settings :115200,n,8,1 et le reste configuré par défaut.



 





Private

Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click






       
Dim a AsString






       
Dim tampon AsString = ""






        com.PortOpen = True






        com.Output = Encoding.ASCII.GetBytes("AT+CGSN" & Chr(13))






       
Do







            Application.DoEvents()






            tampon$ = tampon$ & com.Input






       
Loop
Until InStr(tampon$, "OK" & vbCrLf)






        com.PortOpen = False






   
End
Sub







 





Dans ce programme, j’envoi bien les données et le mobile répond c’est parfais.


Quand je passe ce bout de code dans une classe, je ne recois plus de réponse du mobile :
Seule différence: MSComm créé en dynamique



 






 
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click






       
Dim sms AsNew commandgsm






        sms.Constructeur()








   
End
Sub








Public

Class commandgsm





Public

Function Constructeur() AsString






       
Dim _connection AsNew MSCommLib.MSComm






       
Dim tampon AsString = ""






       
With _connection






            .CommPort = "4"






            .Settings = "115200,n,8,1"






       
End
With







        _connection.PortOpen = True






        _connection.Output = Encoding.ASCII.GetBytes("AT+CGSN" & Chr(13))






       
Do







            Application.DoEvents()






            tampon$ = tampon$ & _connection.Input






       
Loop
Until InStr(tampon$, "OK" & vbCrLf)






        _connection.PortOpen = False






  
 
End
Function







 





Dans ce cas la, je ne reçois plus de données, je suis coincé dans la boucle loop, alors que le gros du programme est le même.


Donc si quelqu’un peu m’aider sur mon problème, ça serai super cool car je commence a m’arracher les cheveux.



 




Merci


Mathieu

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 janv. 2007 à 17:11
Salut
Je n'ai pas testé ton code, mais peut-être faudrait-il faire souffler la machine entre la commande de connexion .PortOpen = True et l'envoie de la requète .Output
Le composant Comm qui s'adresse au matériel à peut-être besoin d'au moins un cycle pour réaliser vraiment l'ouverture.
Donc :
- insère un DoEvents entre ces deux instructions
- Regarde si, après une commande PortOpen, il ne faudrait pas s'assurer que le composant est réellement ouvert (a t-il une propriété State par exemple ?) avant d'envoyer les infos : Une boucle Do-Loop serait la beinvenue en attendant que l'objet soit réellement ouvert ... ou refuse la connexion.

Remarque : Bien que cela fonctionne dans ton 1er exemple, il n'est pas judicieux d'utiliser des noms de variables ressemblant à des mots réservés au système, comme "com" (futurs problèmes)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_bumbo Messages postés 26 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 10 février 2010
5 janv. 2007 à 13:48
J'avais déja essayé de mettre une tempo entre l'ouverture du port et la première commande (d'ailleur j'ai essayé de mettre des tempos un peu partout...), mais ca n'y fait rien. Par exemple si je remplace ma trame at qui demande le numero IMEI par une trame qui envoi un sms, le sms est correctement envoyé mais je n'arrive pas a recevoir la réponse "OK" du mobile, donc ce qui veut dire que le port est bien ouvert et que le mobile a bien recu la première commande...

N'existe-t-il pas un sniffer de port com? pour savoir ce qui se passe sur le port pendant que mon programme et mon mobile communiquent?

Merci déjà pour tes premières réponses JACK et ok pour ta remarque, j'en tiendrais compte la prochaine fois

Mathieu
0
Rejoignez-nous