Problème d'ouverture avec MSComm [Résolu]

necsys 3 Messages postés dimanche 12 novembre 2006Date d'inscription 12 novembre 2006 Dernière intervention - 12 nov. 2006 à 13:53 - Dernière réponse : mimine10 24 Messages postés vendredi 11 juin 2004Date d'inscription 31 octobre 2007 Dernière intervention
- 19 avril 2007 à 11:25
J'ai un truc de fou.

J'ai 4 ports com dispo (1-4) sur mon PC (windows 2000) . 2 de bases + 2 via carte PCI spécialisée

les 4 ports sont reconnus et visibles via la gestion de périphériques.


J'essaye d'ouvrir via l'objet MSComm l'un ou l'autre com configué dans un simple programme VB6

exemple: controle MSComm1 de type MSComm


J'essaye de l'ouvrir comme suit:


If NOT MSComm1.PortOpen then

    MSComm1.PortOpen=true

End If


J'ai une erreur 8005: port déjà ouvert alors que le test sur MSComm1.PortOpen me répondait False


Pour essai, j'ai essayé de faire  MSComm1.PortOpen=false ; et il
me répond logiquement erreur 8012: le périphérique n'est pas ouvert


Donc, quand j'essaie de l'ouvrir il me dit qu'il est déjà ouvert et
quand je veux le fermer, il me dit qu'il n'est pas ouvert.  Késaco


Celà est valable pour les 4 ports existants ; j'ajoute que ce genre de
programme a été appliqué sur des machines NT ou WIN95, WIN98 ss prblm.


Merci si vous avez la réponse à l'énigme.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 12 nov. 2006 à 13:58
3
Merci
Vérifie que la propriété Port de tes MsComm pointe bien sur un des ports valides.

Si tu as un plantage du logiciel en mode debug avec le port ouvert, il se peut que le port soit rester ouvert. Enregistre ton travail, ferme completement VB6, puis réouvre VB et ton projet.

En dernier recours, vérifie avec un terminal (style HyperTerminal) si tes ports sont bien utilisables.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de cs_casy
necsys 3 Messages postés dimanche 12 novembre 2006Date d'inscription 12 novembre 2006 Dernière intervention - 12 nov. 2006 à 15:27
0
Merci
Merci de la réponse.

J'ai déjà essayé mais çà ne marche pas ; j'ai même enlevé la carte PCI avec les 2 ports supplémentaires (3 et 4).  Je vois toujours correctement com1 et com2 mais j'ai le même soucis et la même erreur lors de l'ouverture.

J'ai fait l'essai sur une autre machine avec XP et là pas de problème ; je ne comprends pas ce qui peut bloquer ainsi les 2 com

J'ai essayé par Hyperterminal et, de fait, il ne peut ouvrir com1 ou com2  pourquoi?   ils sont bien vus dans la gestion de périphérique.  Par quel process peuvent-ils être utilisés alors?
Commenter la réponse de necsys
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 12 nov. 2006 à 15:32
0
Merci
Sont-ils des ports réels ??? ne serait-ce pas les ports d'une connexions Bluetooth par exemple ???

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
necsys 3 Messages postés dimanche 12 novembre 2006Date d'inscription 12 novembre 2006 Dernière intervention - 12 nov. 2006 à 15:44
0
Merci
J'ai trouvé ; j'ai un driverqui gère un écran tactile qui, pour une raison que je dois éclaircir, utilisait ou monopolisait tous les ports com!

J'ai supprimé ce driver et, depuis, je peux communiquer.

Merci encore
Commenter la réponse de necsys
mimine10 24 Messages postés vendredi 11 juin 2004Date d'inscription 31 octobre 2007 Dernière intervention - 19 avril 2007 à 11:14
0
Merci
J'ai également un problème de ce genre. J'ai besoin de communiquer avec plusieurs appareil via ethernet, pour cela je crée des paires de port com virtuel avec virtual serial port driver.
J'ai rajouté la vspdtcl dans mon projet VB et copier ces différentes fonctions de création et suppression de port com dans un module de mon projet. Donc quand je veux communiquer avec un appareil en particulier je choisis de créer la paire de port com désirée, j'ouvre un des port com virtuel dans mon interface de communication et l'autre dans mon interface d'exploitation. Quand je veux stopper cette communication je supprime la paire de port com créée. Mon pb, c'est qu'il y a des moments où ça marche très bien et d'autre VB me dit que le port que j'ouvre dans mon interface d'exploitation est déjà ouvert (erreur 8005), alors que je viens de lancer mes programmes..C'est un peu la confusion avec mes ports com virtuels. Dans la bibliothèque vspdctl.dll, j'utilise juste "Createpair", "Deletepair", et "Deleteall" à la fermeture de mon interface de communication. Est-ce que quelqu'un à déjà fait ce genre de chose et pourrai me conseiller sur l'utilisation des ports com virtuels?
J'envoie une partie de mon code dans un prochain message.<!-- / message -->
Commenter la réponse de mimine10
mimine10 24 Messages postés vendredi 11 juin 2004Date d'inscription 31 octobre 2007 Dernière intervention - 19 avril 2007 à 11:25
0
Merci
Voici donc une partie de mon code qui gère la création, la suppression et l'ouverture d'un des port com de la paire.
L'autre port com étant ouvert dans l'interface d'exploitation de l'appareil en question

If UNIT(Index).communication = False Then  'si ports ouverts, fermeture  
    Port1 = Trim(Str(UNIT(Index).portcom)) 
    Port2 = Trim(Str(UNIT(Index).portvirt))
    Port1 = "COM" + Port1  'mise en forme  
    Port2 = "COM" + Port2
    Call CreatePair(Port1, Port2)  'création de la paire de port com    
    otimer = Timer                 'attente de création   
While (CreatePair(Port1, Port2) = False) And (Abs(otimer - Timer) < 1)
    do events
   Wend
   
    Open App.Path + "\Portcom" For Output As #1 'écriture port com pour récupération par l'exploitation
        Print #1, Trim(Str(UNIT(Index).portcom))   'valeur de portcom avec lequel le logiciel d'exploitation doit s'ouvrir       
        Print #1, Trim(UNIT(Index).ident)  'identifiant que le logiciel doit reconnaître
Close #1
   
     Call CONNEXION_com2(Index)  'connexion au port virtuel correspondant au num du matériel
   Command3(Index).Picture = LoadPicture(App.Path + "\connexion_ok1.bmp")
    UNIT(Index).communication = True 'indicateur de communication à true
    
'Lancement du prog d'exploitation correspondant au système   
    chemin = App.Path + "" + UNIT(Index).exploitation 'chemin de l'executable
    retval = Shell(chemin, 1)       
Else
    UNIT(Index).communication = False 'si la paire était ouverte on la ferme
    Command3(Index).Picture = LoadPicture(App.Path + "\connexion_no1.bmp")
    Port1 = Trim(Str(UNIT(Index).portcom))  'récupération de la paire de ports
    Port2 = Trim(Str(UNIT(Index).portvirt))
    Port1 = "COM" + Port1   'mise en forme
    Port2 = "COM" + Port2
    MSComm2(Index).PortOpen = False
    Call DeletePair(Port1)
    otimer = Timer     'attente de suppression
    While (DeletePair(Port1) = False) And (Abs(otimer - Timer) < 1)
   Do events
    Wend
   
End If




<hr style="COLOR: #d1d1e1" size="1" />
Commenter la réponse de mimine10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.