Nuances entre VB5 et VB sous Win98 et Win XP

Signaler
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013
-
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013
-
Bonjour,

J'ai chargé un programme en VB sur ce site (programme de pilotage de moteurs pas à pas par le port //).

Je n'arrive pas à faire tourner ce programme et, c'est également l'avis de l'auteur de la source, je rencontre des difficultés peut-être dues aux différences de version.

Voici donc les questions que je me pose et des réponses pourraient beaucoup m'aider:

- sous Win XP, il semble nécessaire d'utiliser une dll d'entrée sortie par le port // (inpout.dll par exemple)
- le programme est fait dans VB6 et je n'ai que VB5. Dans VB6, le programme fonctionne (chez l'auteur) en déclarant inpout.dll en sortie comme SUB et en entrée comme Function. Ces déclarations sont écrites dans le code de la feuille VB. Dans VB5, cela ne marche pas. Ne faut il pas déclarer les SUB et Function (externes) dans un module plutôt que dans la feuille? Si oui, est-ce la même syntaxe?
- dans VB6, il ne semble plus nécessaire de déclarer des SUB et Function internes (le code de la sub ou de la function est écrit dans la feuille). Faut-il les déclarer sous VB5? Si oui, où?

Mille merci d'avance pour l'aide....car je suis bloqué...

A bientôt

66 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je me doute que c'est sur le port //, mais sur quelle broche ?

Le port // comporte
- 8 broches de données par défaut en écritures mais qui peuvent etre mise en lecture aussi
- 4 broches de controle en écriture uniquement
- 5 broches d'état en lecture uniquement

Certaines de ces broches étant en logique inversée

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Ca c'est une question à 100 francs (Suisses de surcroit)...

Je dois chercher mais je ne souviens pas d'avoir vu ces infos dans la doc.

Je te donne le suivi

A+

Roland
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

J'ai trouvé des infos.

C'est en regardant les schémas de l'électronique (car rien n'est donné en "clair") que je déduis ceci:

de 18 à 25:    masse
11:                signal d'horloge (lecture)
1 et 14:          rien (pas raccordé)
2 et 3:             envoi des données au moteur 4 (sans doute une borne pour un pas et une borne pour le sens de marche?) (écriture)
4 et 5:             idem moteur 3 (écriture)
6 et 7:             idem moteur 2 (écriture)
8 et 9             idem moteur 1 (écriture)
10, 12, 13 et 15: envoi d'impulsion de la carte vers le PC: en effet, il y a possibilité de donner une impulsion lorsqu'un fin de course est activé par exemple afin que le PC arrête un moteur, par exemple.(lecture)

Je peux t'envoyer les schémas par E-mail si cela peut aider

Bonne cogitation.

Roland
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Ok, donc j'en déduis :

Moteur 1 --> Bit 6 et 7 du port de données
Moteur 2 --> Bit 4 et 5 du port de données
Moteur 3 --> Bit 2 et 3 du port de données
Moteur 4 --> Bit 0 et 1 du port de données

Le signal d'horloge sera lu sur le bit 7 du port d'état

Les entrées d'implusions seront lues respectivement sur les bits 6, 5, 4 et 3 du port d'état

Le port de données est accessible en sortie à l'adresse &h378 (pour LPT1)
Le port d'état est accessible en entrée à l'adresse &h379 (pour LPT1)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

C'est effectivement à ces adresses que l'on envoie et reçoit des données.

La valeur envoyé pour faire bouger les moteurs est un nombre de 0 à 255 (8 bits : un bit pour le sens de rotation, un bit pour faire tourner le moteur d'un pas, et cela pour les 4 moteurs = 8bits).

Si nécessaire, je peux retrouver ce que signifie 10100100.
Plus simple: 00000000: tous les moteurs sont à l'arrêt
01010101 un pas pour chaque moteur dans un sens
11111111 un pas pour chaque moteur dans l'autre sens

On peut pas faire plus simple dans la théorie...mais dans la pratique, c'est autre chose...Mes problèmes en sont la preuve...

A tantôt

Roland
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Bonjour à tous!

Si j'ai bien compris, VB ne rale plus lorsque l'on met leurs déclarations à la place des miennes, pourtant elles sont identiques (hormis le fait que j'ai plusieurs private au lieu d'un public), donc je sèche...
En effet la dll fait planter VB si elle ne recoit pas son signale correctement, donc est-tu sur de ton montage nicrolfi? Tu peux tester avec les prog fournis pour voir si tu le recoit.

VBGenesis
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Bonjour à tous et à VBGénésis en particulier,

Mon montage fonctionne sur un PC Win 98, avec le soft compilé fourni avec les cartes.

Pour passer au second PC (sous Win XP) je ne fais que changer la prise coté PC du port //, ton programme et même le programme très simple fourni en source avec les cartes ne fonctionne pas.

J'ai placé des instructions "Print" à des endroits ad hoc et voici ce que j'observe:
1) si je supprime les lignes et même les boucles complètes faisant appel à inp et  out, le programme tourne normalement et s'il arrive à une instruction "Print", il écrit ce qui est demandé.
2) si je ne supprime que waitclockup, cela marche toujours et le programme passe (j'en ai la certitude car j'ai placé des "Print"), dans les boucles subsistantes. Les valeurs de n reçues sont systématiquement zéro. Donc il sort de la boucle, va en fain de programme et terminé.
3) quand je ne supprime pas waitclockup: les valeurs détectées sont sans doute toujours zéro et il tourne en rond, puisqu'il ne peut sortir de la boucle que si n est différent de zéro. Je pourrais essayer de placer un compteur et après 100 inp, faire sortir le programme de la boucle (je vais essayer).

Il y aurait donc un problème de signal d'horloge ou de réception de signal d'horloge.

Il y a encore quatre autres pistes auxquelles j'ai pensé:
1) ma carte Comio est alimentée par une pile plate de 4.5V (ce qui est inférieur aux 5V préconisés et en plus la pile doit petit à petit s'user...) J'ai acquis une alimentation V DC en 1 A avec laquelle je vais alimenter la carte. Peut-être n'y a-t-il pas assez de tension? Mais alors pourquoi cela marche-t-il sous Win 98.
2)un électronicien dont le métier est la réception par satellite doit parfois piloter des éléments par PC via un port //.
Il m'a dit que l'adresse 278 (au lieu de 378) est plus efficace (meilleure tension...). Il préconise d'aller préciser dans le BIOS que le LTP1 a cette adresse et de l'utiliser dans le soft.
3)j'ai vu sur un autre forum qu'il y a possibilité d'améliorer le signal d'horloge en modifiant la résistance R11 du circuit. Mais je n'en suis pas encore là.
4) j'ai aussi lu quelque part (je devrais noter où pour retrouver...) que il est bon de faire tourner le PC avant de mettre les cartes sous tension: le port // détecte quelque chose qu'il ne connait pas et se couperait...?!? J'aurait cru l'inverse: s'il n'y a rien au bout du fil, le port n'est pas nécessaire et il se met hors service?!?

On n'est pas encore au bout de nos peines (tout ça, juste pour le plaisir: on doit être maso)!

J'ai aussi appris qu'il y avait moyen, par le soft ne faire faire de demi, quart... de pas par les moteurs . Es-tu au courant?

A tout à l'heure

Roland
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Première Surprise: la carte comio fonctionne bien avec une pile plate sous 4.2V, par contre avec une alimentation secteur>>> 5.15V DC ,plus rien!

Pour moi, c'est un mystère...J'ai une autre alimentation 5V DC réglable et je vais vérifier.

Mettre le Pc en marche avant ou après la pise sous tension des cartes n'a pas l'air d'avoir d'effet...

Voilà pour le moment

Roland
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Petit conseil: coupe une rallonge d'alim de pc pour avoir ton 5V comme ceci (bien que ca ne marche pas pour les portables):
http://www.servimg.com/image_preview.php?i=1&u=11305934

Sinon tu dis que le waitclockdown marche mais pas le up????

J'ai fais une mise à jour de ma source, la dll est maintenant déclarée une seule fois dans un module. Si ca peut aider...

A+

VBGenesis
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

C'est plus logique de mettre les appel à la dll dans le module. Ne pas oublier en "Public".
 
Je n'ai rien compris à ton histoire de cable. Explications? Ou prends-tu tes 5V DC?

Ce semble effectivement marcher c'est waitclockdown car la boucle teste sur  n  = 0, et comme je ne reçoit rien...

Merci à toi et aux autres

Roland

 
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Chers tous,

J'arrête les essais pour ce soir...
J'ai même réinstallé QB45 pour faire un essai avec le programme en source fourni avec les moteurs: rien.
C'est râlant parce que avec la même configuration : même PC, même raccordement, mêmes cartes et tout et tout, le même programme compilé fonctionne...!!!!!

Il y a pourtant une solution...

A+

Roland
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Bonjour
Pour le cable, excuse moi, regarde cette image:
http://i16.servimg.com/u/f16/11/30/59/34/dsc00010.jpg
En fait j'ai couper une rallonge d'alim pour PC (qui fournit du 5V aux disques dur, lecteurs...) pour séparer les fils rouge et noir: +5 et masse, et je les ai raccordé au connecteur SK2. Ainsi, vu que la carte doit rester près du pc, elle se fournit directement dedans. Bien entendu, celà ne marche pas sur des portables, car on ne peut pas les ourvir pour connecter à l'alim.

Pour le prog, tu recoit quelquechose, car sinon "inp" planterait, mais c'est toujours 0, ce qui me fait penser à un problème de carte.
-Es-tu sur de toutes tes connections?
-As-tu bien mis tes cartes en mode PC et non manuel (1:Off ; 2:On ; 3:Off ; 4:On ; 5:Off)?
-As-tu bien mis le cavalier sur le switch J1 (au milieu de la cartes, contre le gros composant bleu)?
-As-tu essayé de bouger la résistance réglable du clock sur la carte pendant que la boucle waitclockup fonctionnait?
-As-tu bien mis la première carte Step sur le connecteur 1 de la ComIo? C'est celui à coté du gros condensateur bleu.

Je vais essayé de trouver d'autres causes de pannes si tout est Ok sur ce que je viens de te demander

VBGenesis
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Salut VBGenesis,

Je viens de me lever, et déjà des nouvelles...super.

Je suis toujours étonné que cela marche mieux avec une pile plate de 4.5V qu'avec une alim V DC!

Je vais essayer ton truc, j'ai justement une alim de PC qui ne sert (encore) à rien.

En fait j'ai une certitude presque absolue que tout est OK du point de vue montage car je ne modifie rien au montage entre les programmes (compilé) fournis avec les cartes et celui fait en VB (même en Win98).Avec les programmes compilés fournis, cela marche. Il y a d'ailleurs un programme de test de signal d'horloge qui donne un résultat qui varie quand on tourne le petit rhéostat.

A quoi cette fréquence d'horloge? Comment fonctionne-t-elle? Ne peut-on pas la remplacer par autre chose?

Merci pour ta réflexion

Roland
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Salut

Au début, j'ai pensé que le programme qui fonctionne fournissait peut-etre sa propre horloge parcequ'il ne trouvait pas celle des cartes, mais tu dis "Il y a d'ailleurs un programme de test de signal d'horloge qui donne un résultat qui varie quand on tourne le petit rhéostat." Ce qui met ma théorie par-terre!

Explications: ce signal est en fait un simple timer qui bascule entre 0 et 1 à interval de temps donné par la valeur du rhéostat. Il peut être utilisé par le programme pour limiter la vitesse de la boucle, mais il n'est pas obligatoire et peut être remplacé par n'importe quel autre timer, celui de VB notamment. Néanmoins il est utile car il est entièrement indépendant de l'ordi et ne peut pas "ramer", ansi le signal sera (en théorie) parfaitement stable quelque-soit la disposition des ressources processeur.

Mainenant, le problème doit venir de inpout32 si l'autre programme marche. Je vais me renseigner sur la dll qu'il utilise.

Amicalement

VBGenesis
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Merci de la réponse,

C'est sur que le programme fourni a besoin du signal d'horloge: quand tu tourne à fond la petite résistance variable (dans le bon sens), on obtient une fréquence d'horloge de zéro et cela ne marche plus.

Même si on utilise autre chose pour limiter la vitesse de la boucle, le problème risque de subsister car il faut que le code OUT fonctionne pour faire tourner le moteur.

J'ai essayé de supprimer les boucles relative à la fréquence d'horloge et de ralentir la boucle en incluant une boucle For k= 0 to 100000 Next k . Cela ralenti (je vérifie par une instruction Print "test" bien placée).

Pourquoi inpout32 ne marcherait-il pas chez moi?. Je l'ai chargé par deux sources de téléchargement différentes!

Il doit y avoir un "truc" mais quoi?

A tout à l'heure

Roland
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Tiens, à propos, sais-tu comment faire tourner le ventilateur d'une alim PC quand il n'y a pas de PC branché?

Mes moteurs sont en 24V unipolaires. Et les tiens? Comment les alimentes-tu?

Dans le programme sais-tu à quoi sert clockmask?

Avec tes cartes, tu as du recevoir le code d'un petit programme en basic faisant tourner le moteur de 100 pas. Il a du t'inspirer pour ton propre programme.
As-tu essayé de faire fonctionner ce programme en le transposant en VB sous XP? Si oui peux-tu m'envoyer le fichier par E-mail?
J'essaierais de le faire tourner chez moi, mais sans succès.
Si cela marche chez toi et pas chez moi, cela concentrera nos recherche car ce programme est hyper simple. Je ne sais pas s'il a besoin d'une dll (sans doute pas sous dos et en qbasic)ni forcément laquelle.

Je vais faire un prochain essai en le transposant en qbasic sous dos (mais il faut recharger qbasic que je n'emploie plus. En fait je doit remonter le temps et fonctionner comme au siècle dernier (1999)!

A+

Roland
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Un petit pas pour le moteur mais un grand pas pour l'homme...


Entre le nettoyage des routes de salades, le soin des poussins...malgré une bonne météo (il y a longtemps) je n'ai pu résister à la tentation de faire des essais.
Première découverte: si tu alimentes la carte comio avec une tension supérieure à 5V et même approchante de 5V, la carte refuse de fonctionner. Elle est pourtant prévue pour 5V. Mon alimntation qui donne 5.15V n'est donc pas OK. Un achat inutile de plus...Rien de tel que la bonne vieille pile de 4.5V. Cela fait des heures qu'elle me sert et j'ai toujours de bons résultats.
Deuxième étape: je remonte dans le temps et je m'installe comme au siècle dernier (avec moins de confort qu'aujourd'hui): pas de Windows, mais du DOS, pas de VB mais Qbasic...De plus j'ai fait un programme hyperhypersimple: j'ai supprimé toutes les sub, j'ai supprimé tout ce qui a trait avec l'horloge, je temporise avec For k= 0 to 100000 next k . Je sors tout simplement out &H378 , &H0, puis out &h378, &h55 et oh miracolo, le moteur fait ses 100 pas (j'ai pas compté mais ça devait être ça).

C'est le premier programme qui me permet de faire ce que je veux de mon moteur.

Prochaines étapes: repasser progressivement vers le but.

Prochain essais: après un tour au grand air.

Merci à tous pour cette formidable machine que sont ces forums et surtout à toi VBGenesis qui m'a tou
jours soutenu, ...même quand je n'avais vraiment pas l'air d'être compétant!

Je vous tiens au courant

Roland
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Super!! Félicitations!


Au moins maintenant tu es sûr que l'électronique fonctionne!!!!
Si le moteur a tourné alors il a bien fais ses 100 pas, ne t'inquiète pas. Il faut maintenant réussir à aller progressivement au but, mais le plus gros est fait. Quel DLL as-tu utilisé?

Il faudrait peut-être continuer sur le forum de ma source maintenant que l'on est quasiment ssûr que VB5 n'est pas en cause. Encore merci à tous ceux qui ont répondu ici (jmfmarques, casy, rienfield...) !!

En tout cas Bravo, cette fois tu ne les rangeras plus dans l'armoire pour quelques années! (de toute façon ça n'avancerais à rien car d'ici là on ne saura plus ce qu'était Windows 98 )

VBGenesis
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Ben oui, tout arrive,

C'est une bonne idée de repasse sur le forum de ton code.

Encore merci à tous...et à la prochaine difficulté...

Ah, oui déjà deux difficultés: ma mémoire est défaillante:
1)comment fait-on pour avoir la souris dans qb45, sous dos...
Si c'est plus facile, je peux employer quickbasic...

2) je n'arrive pas sur l'écran fichier ouvrir, faire défiler toute l'arborescence de c:
Il me semble qu'au bon vieux temps où on employait que dos, c'était possible.

Un PC sous DOS, avec Qbasic, c'est comme les voitures avec manivelle: c'est jamais en panne et ça ne te laisse jamais tomber!!!
Vive le progrès
Messages postés
138
Date d'inscription
samedi 10 mars 2007
Statut
Membre
Dernière intervention
16 avril 2013

Je reviens à ce forum pour faire part de mes avances et d'un nouveau blocage:


- après avoir fait fonctionner le programme simplifié sous Dos en Qbasic, je l'ai transposé en VB5 sous Win 98, après quelques tatonnements habituels (pour moi), cela marche parfaitement.


Donc plus de problème de communication par le port // avec la dll inpout.dll  et l'instruction out (pas encore essayé inp).

- ensuite, fort de ce succès, j'ai tenté de le faire tourner sous Win XP. Là, plantage: "Le programme a rencontré un problème...et doit quitter". Rapport: concerne inpout.dll!!! Ca bloque quand on rencontre la première fois l'instruction out.

Je soumets cela à votre perspicacité.

J'ai déjà de quoi fonctionner... Mais il faudra bien un jour passer à Win XP au lieu de Win98.

Merci d'avance pour vos suggestions, qui même quand elles ne résolvent pas tout le problème, sont un bon encouragement et mettent souvent sur la bonne piste.

Je me demande s'il ne faut pas poser une autre question (autre forum) : "Ecrire par le port //: passer de Win 98 à Win XP"...

LA nuit portera certainement conseiL

A+

Roland