Problème d'ouverture avec MSComm

Résolu
necsys Messages postés 3 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2006 - 12 nov. 2006 à 13:53
mimine10 Messages postés 22 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 31 octobre 2007 - 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.

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 nov. 2006 à 13:58
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 #
3
necsys Messages postés 3 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2006
12 nov. 2006 à 15:27
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?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 nov. 2006 à 15:32
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 #
0
necsys Messages postés 3 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 12 novembre 2006
12 nov. 2006 à 15:44
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mimine10 Messages postés 22 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 31 octobre 2007
19 avril 2007 à 11:14
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 -->
0
mimine10 Messages postés 22 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 31 octobre 2007
19 avril 2007 à 11:25
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" />
0
Rejoignez-nous