Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 2008
-
12 mai 2006 à 17:31
cs_herault -
29 nov. 2007 à 22:58
Bonjour
Je souhaite piloter deux moteurs pas à pas branchés sur des cartes reliées au port imprimante pour gérer les déplacement en x et y d'une table de fraiseuse numérique.
Il s'agit de kit COMIO vendus chez Conrad. Le logiciel fourni permet de piloter ces moteurs, cela fonctionne, mais la programmation est fastidieuse et les possibilités très limitées (en plus le programme est plein de bugs...).
Je souhaite donc pouvoir créer mon propre logiciel en VB pour piloter directement ces moteurs. Mon problème est : est-il possible de communiquer directement avec le port LPT1 en VB (sous XP) afin d'envoyer des infos aux cartes de commandes des moteurs ? L'objectif étant de communiquer directement avec les moteurs depuis Visual Basic.
J'ai cherché dans l'aide de VB mais je n'ai rien trouvé à ce sujet.
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 23 août 2006 à 00:03
Salut
En fait ce n'est pas l'ordre dans lequel tu envoies les valeurs qui compte, mais bien les valeurs...
Envoie-moi ton mail perso, je t'enverrai un fichier Excel avec les tables de vérité des entrée / sorties de la carte que j'ai retrouvé par tatonnement et par déduction... Pour résumer il y a une valeur "centrale", "neutre" pour chaque moteur (la valeur à laquelle tu reviens entre deux états hauts pour faire bouger le moteur). Par exemple, pour le moteur 1 la valeur centrale est 128, pour le faire tourner dans un sens tu envoie sur le port &H378 des séquences 128 / 64 / 128 / 64 etc., et pour le faire tourner dans l'autre sens la séquence est 128 / 192 / 128 / 192. En fait 128 +/- 64. Je sais pas si c'est très clair, mais je peux pas mieux t'expliquer !
pour le moteur 2, la valeur centrale est 32, et tu ajoute ou retire 16 pour le faire tourner dans un sens ou dans l'autre... pour le moteur 3 la valeur centrale est 8 (+/-4) et pour le moteur 4 c'est 2 (+/-1).
Après tu peux combiner pour faire tourner plusieurs moteurs en même temps en aditionnant les différentes valeurs : par exemple, 80 (64 + 16) permet de faire tourner les moteurs 1 et 2 dans le même sens.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 mai 2006 à 18:18
Salut
Déjà, il faudrait regarder dans le manuel technique du Kit pour connaitre le protocole d'échange entre le PC et le Kit.
(quel sont les ordres, quelles valeurs envoyer, sous quelle forme ...)
Côté matériel, je sais que XP spoole le port imprimante et qu'il est difficile d'y accéder directement (ce qui est plus facile sur des versions style 95, 98, Me).
Peut-être qu'il existe une DLL permettant de faire ces accès en écriture/lecture.
Il faudrait chercher sur le moteur de recherche MSDN de Microsoft.
Bien sûr, il faut aussi que tu fasses des recherches dans ce forum de gens qui posent des questions sur le port parallèle et qui auront reçu des réponses ... + les sources aussi
La prochaine fois, précise aussi sous quel langage tu veux faire ça (VB6 ou Net)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
yoh6900
Messages postés2Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention12 mai 2006 12 mai 2006 à 18:37
nonjour,
Pour lire/écrire sur le port parallèle il te faut une DLL.
J'utilise inpout32.dll , tu la trouvera facilement sur le net
ensuite c très simple:
pour écrire ---> Out (adresse_du_port), Val(valeur)
Une autre piste, la iodll (freeware, spécial pour 95/98/NT/2000/XP, et oui la dll même pour tous), ses sources (1000$ US) et ses headers (C++, Delphi, VB) sont à :
http://geekhideout.com/iodll.shtml
D'ailleurs, ce site vaut aussi le détour.
à tester donc.
à+
rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</SUP>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 16 mai 2006 à 20:06
Bonjour et merci à tous
Il se trouve justement que la io.dll est utilisé par le logiciel fourni par le kit COMIO de chez Conrad... Je vais donc essayer de me débrouiller avec ça !
Pour l'instant je galère un peu, sachant que je connais seulement le VBA utilisé sous Excell... mais bon, la logique de programmation reste la même !
Le pote pour qui je vais faire ce développement vas me faire une petite platine d'essais avec un moteur pas à pas et les cartes dont il dispose, le pb c'est qu'apparemment ça ne fonctionne pas avec n'importe quel PC, mais seulement avec les cartes mère ABIT... à suivre...
Reste à connaitre le protocole utilisé par le programme, et pour ça je crois que je vais devoir y aller par tatonnement... quelques heures de bonheur en perspective... On a rien sans rien, mais après, quelle satisfaction ;)
Encore merci, et je ne manquerais pas de vous tenir informé de la suite des évènements, car je sens que le chemin sera semé d'embuches...
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 22 juin 2006 à 03:02
Bonjour tout le monde
Le projet avance à grands pas (enfin à petits pas pour le moteur, mais à grands pas pour moi !!!). Grace à InpOut32.dll, j'arrive à faire bouger les moteurs (merci yoh6900 pour le tuyau). En ce qui concerne le protocole de communication, je me suis débrouiller pour le déduire en lisant les valeurs envoyées sur l'adresse &H378 par le logiciel (de daube) fourni avec le kit et en tatonnant...
Ca a pris un peu de temps mais ça marche.
Maintenant un autre problème se pose : je voudrais faire une bouton d'arrêt d'urgence dans mon userform (je l'ai développé sous Excel puis exporté vers Visual Studio pour en faire un .exe autonome). Seul soucis, je n'arrive pas à interrompre "proprement" (c'est à dire sans Ctrl+Break) la sub en cours car l'userform ne réagis plus aux clics souris ni aux frappes clavier.
Quel technique utiliser pour intercepter une frappe clavier ou un clic de souris pendant l'exécution d'une routine ?
il n'y pas vraiment de technique (au sens canonique du terme), cela dépend de l'implémentation de ton code.
Le fait que le formulaire ne réagisse pas aux clics et aux frappes indique, peut-être, un problème de boucles trop serrées. Essayes d'ajouter quelques DoEvents bien placés.
Ensuite, le principe reste simple :
- tu déclares un flag (booléen), dans ton formulaire.
- sur Click() du bouton, tu lèves le flag.
- à chaque itération, tu vérifies la valeur du flag, et s'il le dit, tu peux itérer, sinon, tu sors de l'itération, et tu remets le contexte en place.
Ensuite, je ne sais pas pour les autres, mais pour moi, un "arrêt d'urgence" n'est pas viable logiciellement (ton problème en est la preuve, et il en existe d'autre, panne de souris, de clavier...), mais l'est électriquement (à envisager sérieusement selon le coût de l'installation que tu mets en oeuvre).
Enfin, je suis ravi pour toi que ça tourne enfin (même à petits pas).
à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mais jamais avant la page 4 des derniers échanges</sup>
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 23 juin 2006 à 00:36
Merci Rvblog
En fait je viens de retrouver cette fameuse instruction, DoEvents... juste ce qu'il me fallait ! Il ne s'agit pas à proprement parler d'un arrêt d'urgence, plutôt d'un simple bouton "STOP". Il est clair qu'un A.U. doit couper la puissance des moteurs (c'est prévu aussi). Le soucis avec le DoEvent c'est qu'il n'y a pas que le bouton "STOP" qui soit intercepté, je peux continuer à faire d'autres opérations en même temps sur mon userform (ce qui fut plutôt une bonne surprise !!!). M'enfin je vais me débrouiller avec ça, faudra juste que je prévienne mon pote de ne pas faire n'importe quoi sous prétexte que c'est possible (ou alors que je désactive tous les boutons sauf "STOP" en début de routine de fraisage...)
Le projet avance bien, je passe beaucoup de temps dessus mais cette fois je vois la lumière au bout du tunnel. J'aurais appris plein de trucs en bossant là-dessus, et quelle satisfaction de voir que ça marche.
En tout cas, merci pour ton aide et la rapidité de ta réponse.
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 13 août 2006 à 22:58
Salut Mi444 (et les autres!)
Tu pourrais m'indiquer comment tu as fais pour piloter tes moteurs stp? J'ai moi aussi une carte COMIO achetée chez Conrad que je n'arrive pas à piloter, il me faudrait donc savoir:
-comment déclarer l'API
-comment envoyer l'instruction sur la LPT1
-quelle valeur envoyer
Moi c'est un tour à bois à commande numérique que j'essaye de faire, alors merci d'avance, ca m'aidera beaucoup!
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 21 août 2006 à 03:45
Salut
Pour envoyer les infos sur le port LPT1, utilise la dll InpOut32.dll
L'adresse où il faut envoyer les infos est &H378.
Il faut envoyer deux impulsion pour faire bouger le moteur : pour les valeurs à envoyer (entre 0 et 255) ça dépend de comment tu as branché tes cartes et tes moteurs... Pour ma part j'ai fait une table de vérité sous Excel pour m'y retrouver...
Pour déclarer l'API, je voudrais bien t'aider, mais je ne sais pas ce que ça veux dire (je suis autodidacte en info, et ma façon de programmer n'est pas toujours très "propre"...). Si c'est faire le lien entre la dll et ton appli, alors je te conseille de regarder dans le rép de la dll, y'a une petite application en vb, c++, etc. qui permet de lire ou d'envoyer une valeur sur le port LPT1, regarde dedans et tu trouveras bonheur ;)
Sache aussi que ce kit ne fonctionne pas avec toutes les cartes mère, mon pote a galéré pour en trouver une qui va bien...
Enfin, mon pote va adapter un tour sur sa fraiseuse, je vais donc lui développer le soft qui va bien, si jamais ça t'intéresse (je vais m'y coller cet hivers)...
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 22 août 2006 à 19:48
Salut
Tout d'abord merci pour ta réponse!
J'ai réussi à faire marcher un moteur grace à la dll que tu m'a indiqué sans problemes mais j'ai encore des questions (si ce n'ai pas trop demander bien sur )
-J'aimerais pouvoir inverser le sens de rotation du moteur (j'ai essayé d'inverser les valeurs envoyées, de les changer...) Faut-il changer l'adresse?
-Je voudrais aussi savoir les adresses des autres moteurs (j'en ai 2) et celles des entrées prévues pour les interrupteurs de fin de course
Sur le site où j'ai téléchargé la dll, il était indiqué sa déclaration mais il n'y avait pas d'exemples, dommage!
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 29 août 2006 à 18:11
Salut!
Je t'ai mis mon mail perso en message privé, merci de m'envoyer ta table de vérité qui m'aidera certainement à y voir plus claire en ce qui concerne les valeurs à envoyer! En tout cas merci beaucoup pour toute l'aide que tu m'a apporté ;)
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 7 sept. 2006 à 20:02
Bonjour!
Merci pour la table de vérité! Par contre je n'ai pas tout compris, donc j'aimerais te poser quelques question (oui je sais, encore ):
-quelle est la difference entre "sortie on" et une case vide dans la collone "résultats"?
-à quoi servent les cases action?
-Y-a t-il besoin des scripts? (Exel me les bloque pour une question de sécurité)
Mi444
Messages postés11Date d'inscriptionvendredi 12 mai 2006StatutMembreDernière intervention16 janvier 20081 8 sept. 2006 à 12:46
Salut
-quelle est la difference entre "sortie on" et une case vide dans la collone "résultats"? :
En plus de la commande des moteurs, tu as, de part et d'autre des prises pour les moteurs, des petits trous repérés de 1 à 8. Entre les trous 1 et 2, 3 et 4, 5 et 6, 7 et 8, tu peux obtenir une tension de 0 ou 3V selon l'état de la sortie.
Si la case est vide la sortie est sur "off" (à vérifier toutefois, je n'ai pas encore trop bricolé de ce coté là... mais d'après les quelques expériences que j'ai fait, y'a moyen de se débrouiller. Mais la tension est insuffisante pour actionner un relai... Il faudra donc probablement passer par un transistor pour exploiter ces sorties.)
-à quoi servent les cases action?
Les cases action ne serve pas à grand-chose, j'avais fait ça au début de la construction de la table.
-Y-a t-il besoin des scripts? (Exel me les bloque pour une question de sécurité)
Pas besoin d'activer les scripts (ils ne sont pas terminés de toutes façons). Pour les activer, il faut (sous Excel) aller dans "Outils -> Macro - > Sécrité" et dans l'onglet "Niveau de sécurité" choisir "Moyen". A l'ouverture du fichier, choisir "Activer les macros".
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 5 juin 2007 à 09:48
Bonjour,
Comme je ne parviens pas à transmettre par le port // en VB5 sous Win XP, avec la dll inpout.dll:
J'envisage d'utiliser la dll io.dll
Qui connait les instructions de "déclaration" à faire en début de programme pour faire appel à io.dll et l'utilisation des instructions portin et portout?
.
Qui peut corriger ce qui suit:
Je place io.dll dans c:\windows\system32
Je fais appel à io.dll en plaçant en tete de code:
Private Declare SUB Portout Lib "io.dll" (Byval Port As Integer, Byval Data as Byte)
Private Declare Function Portin Lib "io.dll" (Byval Port as Integer) as Byte
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 5 juin 2007 à 16:08
Chers vous tous en particulier Casy qui m'aide depuis plusieurs jours...
Vous voyez au ton que les nouvelles sont bonnes...
Un moteur a tourné (comme désiré) sur le port //, dans VB5, sous win XP, avec la dll io.dll
Ce que j'ai fait :
J'ai démarré le PC en mode administrateur (ainsi j'ai tous les droits).
J'ai placé io.dll dans c:\windows\system32\
Quand on veut l'enregistrer sur regsvr32, cela ne va pas (Message: pas trouvé le point d'entrée)
Dans le programme j'ai déclaré très simplement:
Private Declare Sub PortOut Lib "c:\windows\system32\io.dll" (ByVal Port as Integer, Byval Data as Byte)
Je n'avais pas besoin de PortIn pour mon essai.
Attention la majuscule de Out dans PortOut est nécessaire!!!!!
L'instruction est
PortOut &H378, &H (valeur) avec valeur en hexadécimal
C'est tout. Avec inpout .dll ça ne marche pas (mais sans doute que je fais quelque chose de pas OK)
Je ne pense pas que tout ce que j'ai fait soit nécessaire
- passage en mode administrateur
- essai d'enregistrement de la dll: pas necessaire
- écrire tout le chemin d'accès de la dll dans la déclaration: pas nécessaire si placée dans system32
Je suis heu-reux!! Merci à tous et à ceux qui organisent ce site dans lequel il y a une ambiance chaleureuse et une grande disponibilité à aider. C'est magique. Je reviendrai...
Je ne sais pas quelle réponse il faut "accepter", elles m'ont toutes aidé à avancer à (petits) pas
merinsa
Messages postés4Date d'inscriptionvendredi 28 septembre 2007StatutMembreDernière intervention 6 novembre 2007 18 oct. 2007 à 14:12
comment set-ce que je peux commander trois moteurs pas a pas bipolaire suivant trois axes X Y et Z a travers une interface vb, je suis null en programmation
merci pour votre aide
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 18 oct. 2007 à 15:59
Bonjour...de Belgique!
Je vous aiderai volontiers...
Pouvez-vous préciser les moteurs, les cartes interface et moteurs, application souhaitées, etc...?
Je ne pourrai vous répondre que courant de la semaine prochaine car je n'aurai pas accès à internet pendant quelques jours.
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 février 2009 18 oct. 2007 à 18:49
En attendant le retour de Nicrolfi, si c'est un ensemble COMIO / EASY-STEP (clique sur le lien pour plus d'infos sur ces cartes), je te conseille cette page C'est ici qu'on a discuté avec lui de ce type de carte.
@micalement
VBGenesis
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 18 oct. 2007 à 19:32
Bonjour VBGenesis,
Cela faisait longtemps...
J'ai assez peu évolué...sauf que je suis passé sur Excell (VBA) pour commander les moteurs...Excell est plus universel et plus facile à exporter.
Pour automatiser ma fraiseuse, je pense passer par l'étape d'une petite table traçante pour simuler et faire des tests sans casse.
Pour le moment, je récupère un (très) vieux PC pour mettre dans mon atelier...
Il est déjà équipé d'un CDrom...mais celui-ci ne semble plus fonctionner...d'où difficulté d'installer Win98 (sur CD)...pour le moment j'ai réussi (après avoir "trouvé" un clavier à grosse broche DIN, une souris sur port com) à installer Win 3.11...mais le programme Comio ne marche pas sous ce système d'exploitation...Un ami a heureusement une version Win98 sur disquettes...je vais essayer de l'installer...c'est dommage qu'on ne trouve pas les vieilles version de Win sur le net...
J'espère que tes études vont bien...car le dernier message parlait de résusltats de fin d'année.
Encore merci pour l'aide que tu m'as apportée et j'espère la poursuite de la collaboration.