Commander le port // via dev/port

Bonjour à tous,

J’ai un projet qui consiste à numériser un ancien tour pour réaliser du taillage de roues. Dans ce cas, il n’existe pas de soft sous linux pour ce type d’application.
Je me suis intéressé à Qbasic mais c’est sous dos. En C et en mode console, ça fonctionne.
Je sais commander un moteur pas à pas dans les deux sens et à plusieurs vitesses. Mais c’est pas facile de réaliser une interface graphique alors, je voudrai bien le faire en basic avec Gambas.

J’ai aussi parcouru google pour des recherches approfondies sur la commande du port // et je suis arrivé sur ce forum.
En basic, il n’existe pas les instructions IOPERM.

J’ai aussi des explications complémentaires sur dev/port ici
http://www.unixgarden.com/index.php/embarque/programmation-du-port-parallele

Donc avec gambas et en root, je sais ouvrir dev/port mais j’ai une autre question :

  • En C ou Qbasic, j’envoie par exemple la valeur décimal 2 pour la broche N°2, ensuite la valeur 256 pour mettre à zéro les pins. Le tout est placé dans une boucle avec usleep.
    Sur le fichier dev/port, en basic que fait-il faire ?

Merci d’avance de votre aide.

Pierre

Bonsoir,
J’ai essayé d’envoyer une valeur décimale. Ensuite, j’ai utilisé une carte avec des leds branchée sur le port //. Mais aucune valeur n’est lu par ma carte ?

Avez-vous une idée ?

est tu sur d’avoir les droits?

Salut.
Je ne sais pas si tu utilise un noyau 2.4 ou 2.6 mais en général l’accès direct à /dev/port n’est plus recommandé. C’etait ok avec dos ou avec le 2.4 mais je ne crois pas que ce soit recommandé avec les nouveaux noyaux, même si ca semble effectivement plus facile d’acceder directement au fichier dans /dev
Enfin, c’est une idée, si tu veux un programme propre, il faut que tu regarde la doc du kernel (dans le repertoire Documentation/ )

Malheureusement j’arrive pas à les mettre en attachement sur ce forum (extension .txt interdite!!)
gelato.unsw.edu.au/lxr/sourc … wlevel.txt
gelato.unsw.edu.au/lxr/sourc … arport.txt

Oui, je démarre mon programme en root.

Je viens de trouver la solution, je ne donnais pas l’adresse du port //. Le concepteur de gambas m’a aidé :smiley:

Merci et bon week-end

Bonjour ignatioza,

Je suis sous 2.6 et ça marche maintenant mais je lance le programme en root

Ok tant mieux. Je croyais même que l’accès direct n’etait pas activé dans les noyaux par defaut.
Tant que tu n’as pas 2 programmes qui se partagent le port parallele j’imagine que c’est ok.
Si tu as tres peu de données à transferer, c’est peut etre suffisant.

Les permissions d’accès sont assignées par udev. Bizarrement je n’ai plus de fichier “permissions” dans /etc/udev/rules.d donc au risque de dire une connerie, je te renvoie vers ce lien pour comprendre l’idée. (ca t’eviterai de lancer ton soft en root pour des raisons de sécurité)
bugs.launchpad.net/ubuntu/+sour … bug/235670

edit:
Ok ils ont changés l’endroit (je suis en debian unstable), c’est dans
/lib/udev/rules.d/91-permissions.rules

n’empêche il a raison lancer ton prog en root juste pour ça c’est pas super

edit pense a mettre la coche si tu as résolu

Ok tant mieux. Je croyais même que l’accès direct n’etait pas activé dans les noyaux par defaut.
Tant que tu n’as pas 2 programmes qui se partagent le port parallele j’imagine que c’est ok.
Si tu as tres peu de données à transferer, c’est peut etre suffisant.

Bien en fait c’est pour piloter une peite cnc avec moteur pas à pas.
Pc dédier avec debian de base

dans ce cas tant mieux tu n’aura pas de problème mais c’est il reste vrai que de ne pas passer pas le user root c’est mieux
imagine les dégât si ton prog plante ou autre pendant le débug et le dévéloppement

Mouais c’est pas la mer à boire de faire tourner un moteur pap sur le port parallèle. Je l’ai fait il y a une paire d’année pour orienter des bouteilles.

Quelques petites idées comme ça en passant :

  1. effectivement en root c’est pas top, mieux vaut donner les droit à un user.
  2. je l’avais fait en C avec les ioctls et ça allait vraiment très bien
  3. as-tu réfléchi à comment gérer les accélérations et freinages ? Si non réfléchis y parce que démarrer pleine bille c’est pas bon pour la méca et en plus c’est un coup à sauter des pas, ce qui sur une cn est un peu problématique
  4. penses bien à générer des trains d’impulsions bien réguliers sinon ça va craquer de partout
  5. sauf si c’est dans le cadre d’un projet (école, fac…) c’est un peu idiot de piloter un moteur en direct sur un port du PC. Tu vas t’arracher pour faire un truc bof (voir la dernière question) alors que tu peux acheter un petit automate à 150€ qui sera spécialisé dans la commande de moteur en impulsion/sens, qui gérera les acc/freinages ainsi que la RAZ. Au niveau com tu pourras dialoguer avec sur de la RS232 ou 485 avec un protocole ouvert.

Et pour finir une petite question : as-tu des résultats corrects au delà de 1kHz ?

Bonsoir antalgeek,

Merci de t’intéresser à mon problème. Depuis mon dernier post et grâce à l’aide de son concepteur, j’ai pu le faire en gambas (basic linux ) mais je me pose encore des questions;

1/ Concernant le root, j’ai trouvé une commande qui permet uniquement de lancer uniquement le programme en root :

#chown root nom_du_programme (root devient le propriétaire du prog) #chmod a+s nom_du_programme (suid bit pour tous)

2/ Que veux dire"ioctls", j’ai trouvé peu d’explications claire ?

3/ Je pense réalisé une rampe d’accélération progressive.

4/ Qu’appelles-tu un "trains d’impulsions " je suppose que c’est la commande d’un moteur à la fois ?

5/ Je suis artisan horloger et c’est pour une machine à tailler les engrenages.
On m’a déjà expliqué cette solution mais à tu des références d’automates que tu as déjà utilisé ?

6/ Dans ce cas, c’est pour du fraisage avec une fraise module, j’ai une avance entre 30 et 60 mm/min avec un rapport pignon moteur et pignon machine 1/2. Donc pas de grande rotation pour les moteurs.

Je te remercie de tes conseils.

Bonne soirée

Pierre

viewtopic.php?f=9&t=8973&p=90743#p90743

À croire que c’est en été que vous posez les questions de Hard. Mon post à 23 mois :smiley:
Mais j’ai eu du mal à le retrouver.

[quote=“dmon”]http://forum.debian-fr.org/viewtopic.php?f=9&t=8973&p=90743#p90743

À croire que c’est en été que vous posez les questions de Hard. Mon post à 23 mois :smiley:
Mais j’ai eu du mal à le retrouver.[/quote]

Ah oui j’avais utilisé la RTC comme référence de temps, par contre je n’ai jamais fait le fonctionnement client/démon.

Je vais te mettre mon soft à disposition, je l’ai dans un bout de dique dur au boulot.

C’est ce que je te conseille, ainsi que de faire bien attention au raccordement de la rampe d’acc et de la vitesse constante.

Ouaip c’est ça :smiley:

Pour mes machines j’utilise souvent les automates de la gamme omron, je les trouve vraiment pratiques. Si tu veux je te file mes coordonnées pro par MP et te fais passer de la doc ainsi que des exemples de soft.
Je suis artisan aussi mais dans la construction de machines.

En effet tu ne risques pas de tout casser à ces vitesses là, par contre quand on taille des pignons on a besoin d’un peu de précision, à moins que tu passes en rectif après…mais pour de l’horlogerie ça m’étonnerais.

J’ai retrouvé un bout de code qui marche, je l’ai foutu en ligne là : http://www.deb-indus.org/moteurrtc.tar.gz.
J’ai aussi retrouvé le code d’un module et d’un soft qui l’exploite mais je suis moins sur.

Bonjour dmon,

Je vois qu’il n’y a pas que que moi qui sèche sur le problème :wink:

Je suis bien moins avancé que toi en programmation. Mais ça fonctionne en root avec dev/port. A part le root y at-il des inconvénients à cette méthode ?

Concernant le noyau en temps réel j’ai sur d’autre machine une version de ubuntu 8.04 réalisée spécialement pour le logiciel cnc emc2 avec directement le noyau réel. Peut-être utiliser cette installation pour des applications avec moteurs pas à pas.

Pierre

Bonjour antalgeek,

[quote]Pour mes machines j’utilise souvent les automates de la gamme omron, je les trouve vraiment pratiques. Si tu veux je te file mes coordonnées pro par MP et te fais passer de la doc ainsi que des exemples de soft.
Je suis artisan aussi mais dans la construction de machines.
[/quote]

Merci, cela m’intéresse fortement. Les automate sont peut-être une autre solution. Pas besoin de carte de commande. Par contre la programmation est peut être + difficile ?

C’est pour du taillage de roue de entre 30 et 80 mm de diamètre et des pignon de 6 à 10 mm.
Actuellement, je travail à la pièce uniquement pour de la restauration avec une machine avec division direct (projet de fin d’étude en 1991).

[quote]Je suis artisan aussi mais dans la construction de machines.
[/quote]
Que fais tu comme machines ?

[quote]
J’ai retrouvé un bout de code qui marche, je l’ai foutu en ligne là : deb-indus.org/moteurrtc.tar.gz.[/quote]

Merci, je vais examiner cela attentivement ce weekend

Je te le confirme : la commande par automate ça va bien. Avant j’avais tendance à faire de la mécanique maintenant je met des moteurs brushless partout avec de la commande en impulsion/sens par automate. J’ai même tendance à mettre un automate par mouvement plus un chef de grappe. C’est le bordel au niveau de la prog mais ça me permet d’avoir des sous-ensembles fonctionnels. Bon par contre au niveau des défaillances tu rajoutes un niveau communication…et quelqu’un qui a ses 3 bacs pour faire la maintenance.
Fini le régleur qui connaît sa machine sur le bout des doigts…gros inconvénient.
Par ailleurs la programmation sur automate est un peu déroutante quand tu viens des langages comme le C mais on s’y fait assez vite.

[quote]C’est pour du taillage de roue de entre 30 et 80 mm de diamètre et des pignon de 6 à 10 mm.
Actuellement, je travail à la pièce uniquement pour de la restauration avec une machine avec division direct (projet de fin d’étude en 1991).[/quote]
Il y a une boite pas loin de chez moi qui taille de la dent avec un parc de machines spé…impressionnant. Des machines à 15 axes numériques qui embarquent la rectif. Bon d’accord c’est pour des pignons diamètres 1200.

De la machine spéciale en général (de la menuiserie à la cosmétique, c’est très large) et de la machine de conditionnement en particulier.

N’hésite pas à me contacter si tu as besoin de tuyaux sur ton affaire de reconstruction (car tu reconstruis bien une machine non ?) je suis toujours friand de techniques horlogères.

Oups j’ai répondu une bêtise plus haut.

[quote]

[quote=“lapenduledargent”]
4/ Qu’appelles-tu un "trains d’impulsions " je suppose que c’est la commande d’un moteur à la fois ?
[/quote][/quote]
Ouaip c’est ça :smiley:

[quote]

Non c’est pas ça, c’est la méthode une impulsion = un pas moteur.
Pardon pour la coquille.

On utilise ioctls quand on utilise un driver. Un ioctls est spécfique à un driver donné. Pour moi c’est tout qui est différent des primitives read et write d’un driver.

Programmation du port parallèle
7.1. Talking to Device Files (writes and IOCTLs)
Pilotes de périphériques PCI : Configuration du périphérique: méthode ioctl
Programmation noyau sous Linux Partie 1 : API des modules Linux
Pilotes de périphériques orientés caractères pour Linux 2.6
Conception d’OS : Pilotes de périphériques caractère