PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Table WMI  et port USB/Série
Table WMI et port USB/Série
Débuté par titioun, 29 avr. 2017 12:20 - 4 réponses
Membre enregistré
92 messages
Popularité : +2 (2 votes)
Posté le 29 avril 2017 - 12:20
bonjour,

Je dispose d'une série de capteurs environnementaux (ATLAS SCIENTIFIC USB) équipés d'un composant USB/série FTDI

Je voudrais pouvoir reconnaître le type de capteur connecté au hub USB

Dans un premier temps, j'ai trouvé un bout de code pour extraire la liste de ports connectés au démarrage du PC mais je voudrais pouvoir identifier le type de capteur raccordé.
Savez-vous si la table WMI contient ce type d'information ?

si oui, quel paramètre interroger ?


Merci de vos conseils.

cordialement
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 29 avril 2017 - 15:10
hello,
qu'entends-tu par "la table WMI" ? parce qu'avec le WMI cela m'étonnerait fortement que tu puisses déterminer les capteurs raccordés. D'après ce que tu dis ils sont de type liaison série par USB (chip FTDI) donc le seul moyen de savoir quel est le capteur raccordé sur un port , c'est de scruter ce qu'envoie le capteur ou si il est intelligent de dialoguer avec lui.

--
Ami calmant, J.P
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 01 mai 2017 - 07:15
Bonjour,

+1 avec JP, seul ton capteur peut te dire qui il est (si toutefois il en est capable) ou alors il faut scruter les infos qu'il envoie effectivement. A moins que tu mettes une tables de paramétrage qui dise que tel capteur est lié à tel port, mais avec l'usb il y a une possibilité que le port change après une mise à jour ou un redémarrage et là c'est pas de bol.

Ca m'est déjà arrivé avec des tpe branché en usb ou encore avec des affichages client pour les caisses.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
92 messages
Popularité : +2 (2 votes)
Posté le 30 mai 2017 - 15:34
Bonjour,

En fait je peux interroger les port série bêtement.

J'ai la possibilité de donner un nom différent à chaque capteur. Au lancement du logiciel, j'utilise le code ci-dessous qui remplis ma table de comport.

Ensuite pour chaque port je fais un test en envoyant une commande sur le port série et je l'attribue au capteur. (Pour éviter cette moulinette à chaque démarrage, je sauve le comport dans un fichier ini dans lequel je retrouve un comport pour chaque capteur)

J'ai remarqué que sur le même Pc le numéro de port attribué par Windows était toujours le même pour un capteur donné y compris quand je le change de port. J'en ai déduit que windows mémorisait quelque part un identifiant provenant certainement du composant FTDI.

C'est cette information que je voulais récupérer.

Dites moi si c'est possible.

Cordialement



//Exemple pour retrouver la liste des ports série "Hardware",
// de type USB série ( de chip prolific ou ftdi),
objLocator est un objet automation "WbemScripting.SWbemLocator"
objService est un objet automation dynamique
Resultats est un objet automation dynamique
TabResWMI est un tableau de chaînes
x est un entier
UnRésultat est une chaîne
portCom est une chaîne
// on cherche tout d'abord les ports série "Hardware"
QUAND EXCEPTIONEXCEPTION DANS
objService = objLocator>>ConnectServer(".", "\root\cimv2")
objService>>Security_>>ImpersonationLevel = 3
Resultats = objService>>ExecQuery("SELECT DeviceID FROM Win32_SerialPort")

POUR x = 0 _A_ Resultats>>Count -1

UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("DeviceID")>>Value
SI UnRésultat <> "" ALORS
TableauAjoute(TabResWMI,UnRésultat)

FIN
FIN
// on cherche ensuite les ports série de type USB-Série
// attention ici c'est limité à certains fabricants (prolific et ftdi)
Resultats = objService>>ExecQuery("SELECT Name,Service FROM Win32_PnPEntity WHERE " +
"Service='SER2PL' OR Service='FTSER2K' ")
POUR x = 0 _A_ Resultats>>Count -1
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value

SI UnRésultat <> "" ALORS
// on cherche dans le nom, la chaine COMxx
SI VérifieExpressionRégulière( UnRésultat,".*(COM[0-9]{1,2}).*",portCom) ALORS
// On reçoit la chaine par exemple COM5, il faut extraire le numéro de port
portCom = ChaîneSupprime(portCom,1,3)
//TableauAjoute(TabResWMI,portCom)
TableauAjoute(Tab_portCom,Val(portCom))


FIN
FIN
FIN
FAIRE
Erreur("Erreur WMI : " + ExceptionInfo())
FIN
Membre enregistré
92 messages
Popularité : +2 (2 votes)
Posté le 02 août 2017 - 13:48
Bonjour

Je remonte de post car j'ai aujourd'hui besoin d'intégrer dans mon application un autre composant mais qui cette fois possède unVendorID et un product ID

Du coup je peux trouver le numéro de port attribué par Windows dans la base de registre en lisant la clé :
RegistreLit("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_2A3C&PID_0100\TMCSTEP\Device Parameters", "PortName",

Cependant cette clé n'est présente que sous Windows 10 (je n'ai accès qu'à du 64 bit mais je pense que c'est pareil en 32 bit)

Dans Windows 7, j'ai vu qu'en 64 bit seule la clé FriendlyName contenait l'information du port attribué.

Pourriez vous me dire si cette clé est également présente en Windows 8 car je n'ai aucun PC sous cet OS ?

Merci D'avance