PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD17] Lecture port USB
[WD17] Lecture port USB
Débuté par Avi, 20 juil. 2012 15:46 - 8 réponses
Posté le 20 juillet 2012 - 15:46
Salut à tous,

Je dois développer un petit module capable de lire des données qui arrivent sur un port USB.

Je m'explique : un boitier envoi des informations (sur 12 octets) à mon PC par l'intermédiaire d'un câble convertisseur SERIE / USB (le coté Série est banché sur le boitier, le coté USB sur le PC).
Apres installation d'un driver spécifique le PC reconnait le câble et le boitier. Je sais que le PC dialogue avec le boitier car il existe un programme qui peut lire et écrire des informations sur le boitier. Ce programme fonctionne correctement et d'après lui le port utilisé est COM3.

Le problème c'est qu'avec WinDev je n'arrive même pas à ouvrir le port com 3 (avec souvre) et donc ne peut pas récupérer les données qui arrivent.

Peut-être faut-il plutôt être à l'écoute du port USB ? Pour cela d'après l'aide WinDev il faut que j'utilise le driver. ??? Comment faire ???

En bref ce dont j'aurai besoin c'est de récupérer les données reçues par le port USB pour après les stocker (un peu comme quand on utilise un lecteur de code barre relié à un port USB)

Merci de votre aide
Bon dev
Avi
Posté le 20 juillet 2012 - 17:37
Bonjour Avi,

Pour répondre à ta question, c'est bien le port COM qu'il faut surveiller, par contre il est difficile de surveiller le port com qui est utilisé, je te conseillerais d'utiliser un logiciel de redirection de ports tels que com0com afin de pouvoir capter les données sur un l'un des ports de redirecion.

Cdlt

Avi a écrit dans le message de news <a3f96567539b9e8b1777fa711a001cca@news.pcsoft> :
Salut à tous,

Je dois développer un petit module capable de lire des données qui arrivent sur un port USB.

Je m'explique : un boitier envoi des informations (sur 12 octets) à mon PC par l'intermédiaire d'un câble convertisseur SERIE / USB (le coté Série est banché sur le boitier, le coté USB sur le PC).
Apres installation d'un driver spécifique le PC reconnait le câble et le boitier. Je sais que le PC dialogue avec le boitier car il existe un programme qui peut lire et écrire des informations sur le boitier. Ce programme fonctionne correctement et d'après lui le port utilisé est COM3.

Le problème c'est qu'avec WinDev je n'arrive même pas à ouvrir le port com 3 (avec souvre) et donc ne peut pas récupérer les données qui arrivent.

Peut-être faut-il plutôt être à l'écoute du port USB ? Pour cela d'après l'aide WinDev il faut que j'utilise le driver. ??? Comment faire ???

En bref ce dont j'aurai besoin c'est de récupérer les données reçues par le port USB pour après les stocker (un peu comme quand on utilise un lecteur de code barre relié à un port USB)

Merci de votre aide
Bon dev
Avi
Posté le 20 juillet 2012 - 18:26
Salut Nicolas,

merci pour ta reponse.
pourrais tu detailler un peu plus ?
Une fois la création du port virtuel il sera plus facile avec windev de lire les données sur ce port plutot que sur le port usb ?

encore merci
Avi

Nicolas a écrit dans le message de news <cc578048e5cdeb1c2624abeccd96c355@news.pcsoft> :
Bonjour Avi,

Pour répondre à ta question, c'est bien le port COM qu'il faut surveiller, par contre il est difficile de surveiller le port com qui est utilisé, je te conseillerais d'utiliser un logiciel de redirection de ports tels que com0com afin de pouvoir capter les données sur un l'un des ports de redirecion.

Cdlt

Avi a écrit dans le message de news <a3f96567539b9e8b1777fa711a001cca@news.pcsoft> :
Salut à tous,

Je dois développer un petit module capable de lire des données qui arrivent sur un port USB.

Je m'explique : un boitier envoi des informations (sur 12 octets) à mon PC par l'intermédiaire d'un câble convertisseur SERIE / USB (le coté Série est banché sur le boitier, le coté USB sur le PC).
Apres installation d'un driver spécifique le PC reconnait le câble et le boitier. Je sais que le PC dialogue avec le boitier car il existe un programme qui peut lire et écrire des informations sur le boitier. Ce programme fonctionne correctement et d'après lui le port utilisé est COM3.

Le problème c'est qu'avec WinDev je n'arrive même pas à ouvrir le port com 3 (avec souvre) et donc ne peut pas récupérer les données qui arrivent.

Peut-être faut-il plutôt être à l'écoute du port USB ? Pour cela d'après l'aide WinDev il faut que j'utilise le driver. ??? Comment faire ???

En bref ce dont j'aurai besoin c'est de récupérer les données reçues par le port USB pour après les stocker (un peu comme quand on utilise un lecteur de code barre relié à un port USB)

Merci de votre aide
Bon dev
Avi
Posté le 23 juillet 2012 - 11:13
Bonjour,

il n'y as pas besoin d'utiliser un redirecteur de port !!!!

La fonction Souvre permet d'ouvrir le port série et d'y affecter une procédure en cas de réception de trame.
Cependant pour que cela fonctionne, il faut connaitre les parametres de communication de ton boitier et l'accorder à ton ouverture.
A savoir la vitesse en baud : 9600, la parite, ....

du genre 9600,8,N,1 qui sont souvent les paramètres par défaut.
le dernier paramètre de Souvre est le nom de la procédure qui effectue le traitement en cas de réception de trame.
tu ouvre ton port avec cette fonction quand tu le souhaite. Attention a bien faire des Sferme à la fin de ton soft pour éviter de vérouiller le port quand tu sort.
Réfère toi aux exemple d'aide très bien documenté.

je l'utilise tout les jours sur des prog qui tourne 24 sur 24 sans pb.
Posté le 27 juillet 2012 - 18:17
Bonjour,

j'utilise régulièrement des interface usb /série (a base de composants FTDI) et l'acquistion sur ces ports marchent parfaitement.
donc si ça peut vous aider n'hésitez pas.


De mon coté j'aimerais savoir si on peut détecter le branchement d'un périphérique c'est à dire capter l'évenemeent windows et donc attibuer le bon numéro de port pour le device raccordé.

j'ai déjà fait une prcédure "Port détecte" qui passe en revue stupidement les port com de 1 à 100 et qui interroge le device jusqu'à obtenir une réponse.

Ca marche mais ce n'est pas très pro.
Je sais qu'on peut lire la base de registre pour connaitre les port com utilisés mais le problème reste le meme.

Si vous avez une solution. je suis preneur

Merci
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 28 juillet 2012 - 13:28
bonjour,
voici ce que je te propose pour énumérer les ports série présents sur ta machine en utilisant WMI :
// J.P 07/2012 - WMI en utilisant l'objet COM "WbemScripting.SWbemLocator"
// 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 EXCEPTION 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)
Trace(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
TableauAjoute(TabResWMI,portCom)
Trace(portCom)
FIN
FIN
FIN
FAIRE
Erreur("Erreur WMI : " + ExceptionInfo())
FIN


Ce bout de code permet de récupérer les ports COM utilisables sur la machine. Pour étendre la recherche des ports séries de type USB-Série à d'autres fabricants il faut connaître le service qu'ils utilisent. Si on ne cherche que les ports de type USB-Série ce n'est pas la peine de mettre la première partie de la recherche.

Ami calmant, J.P ;-)
Membre enregistré
1 message
Posté le 09 février 2013 - 19:09
Bonjour Titioun,

J'aimerai faire appel à tes connaissances en cette matière. n'ayant pas ton email...pourrais-ton se recontacter : chapeau_m arobase hotmail point com

BAT et merci d'avance !

"Bonjour,

j'utilise régulièrement des interface usb /série (a base de composants FTDI) et l'acquistion sur ces ports marchent parfaitement.
donc si ça peut vous aider n'hésitez pas."
Posté le 10 février 2013 - 19:51
I'm sorry to have to inform you that your message could not be delivered to one or more recipients.chapeau_m arobase hotmail point com


Mais peut etre le reste du forum pourrait profiter de nos échanges ?

cordialement
Titioun

Chapeau_melon wrote in news message <168593de25452d47e77bcf5c0b2dac63@news.pcsoft>:
Bonjour Titioun,

J'aimerai faire appel à tes connaissances en cette matière. n'ayant pas ton email...pourrais-ton se recontacter :

BAT et merci d'avance !

"Bonjour,

j'utilise régulièrement des interface usb /série (a base de composants FTDI) et l'acquistion sur ces ports marchent parfaitement.
donc si ça peut vous aider n'hésitez pas."
Posté le 09 mars 2015 - 14:59
Bonjour,

Le code source fournit par J.P fonctionne très bien.

Depuis la version 20, il est possible de générer des éxécutables avec le framework intégré. Dans cette configuration l'objet automation n'est plus fonctionnel :
"L'objet automation 'WbemScripting.SWbemLocator' n'est pas installé sur votre système."

Avez-vous eu le même problème ?