necsys
Messages postés3Date d'inscriptiondimanche 12 novembre 2006StatutMembreDernière intervention12 novembre 2006
-
12 nov. 2006 à 13:53
mimine10
Messages postés22Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention31 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
necsys
Messages postés3Date d'inscriptiondimanche 12 novembre 2006StatutMembreDernière intervention12 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?
mimine10
Messages postés22Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention31 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 -->
mimine10
Messages postés22Date d'inscriptionvendredi 11 juin 2004StatutMembreDernière intervention31 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