Mon logiciel de CNC

P

PCB5

Apprenti
Bonjour,
Je voudrais presenter mon systeme de commande CNC. Il y a quelque temps deja lorsque j'ai commencé avec la CNC, s'est le probleme de trouver un systeme permettant la commande des moteurs depuis mon PC.
La réponse que j'ai trouvé est composé d'une mini carte USB , d'une carte moteur , et d'un logiciel PC avec un language de programmation .
Je voudrais parler plus particulierement du language de commande utilisé.
Ce language que j'appelle GCode amelioré contient les instructions G0 et G1 ordinaires pour commander les deplacements , mais aussi des elements d'un language de programmation avec variables, parametres, constantes, fonctions , boucles etc.
Par example pour usiner une rainure de clavette sur un axe , j'ecrit :

#<dx>=8 (clavette de longueur 12 avec fraise de 4
#<pass>=0.4 (0.4mm de descente par passe
#<z>=0 (surface de la piece en z=0
#<profondeur>=2
g1x0
g1z0
#<i>=0
while [#<z> le #<profondeur>]
#<z>=#<z>-#<pass>
g1z#<z>
if [#<i> eq 0]
g1x#<dx> (passe a droite
#<i>=1
else
g1x0 (passe a gauche
#<i>=0
pause 1
endif
g1z0
g1x0


Je peux aussi mettre ce programme dans une fonction et un fichier separé clavette.txt

!clavette sub
#<dx>=#<1> (dx est passe en premier parametre
#<pass>=#<2> (profondeur de passe 2ieme parametre
#<profondeur>=#<3> (profondeur de la rainure 3ieme parametre
..... (le programme de taille
endsub


et l'appeler à chaque fois que necessaire :

%include "clavette.txt"
!clavette call 8 0.4 2


An autre programme incluant la matrice de transformation des corrdonnées , qui peut changer la taille, l'orientation et la position des objets . De plus , les transformations peuvent êtres combinés à loisir et restaurer la transformation initiale pour le programme suivant.

3 percages 120° autour d'un cercle :

pushmat (empile une copie de la transformation d'axe courante
translate[7,11] (combine une translation le cercle est centré en x=7 et y=11
%xyrot[120] (combine une rotation de 120°
G0x16
execute
%messagebox["percer ici !"]
%xyrot[120]
G0x16
execute
%messagebox["percer ici !"]
%xyrot[120]
G0x16
execute
%messagebox["percer ici !"]
popmap (restitue la matrice à l'etat initilal


Autre example:
Tailler un engrenage sur la fraiseuse avec une fraise à engrenage et une table rotative CNC (branchée sur l'axe z)

#<N>=16 (engrenage 16 dents
#<dx>=21 (largeur de l'engrenage 21mm
#<dx_margin>=3 (espace droite et gauche pour la fraise 3mm
#<depth>=3.2355 (profondeur de coupe
#<pass>=0.2 (profondeur d'une passe 0.2mm
#<dy_far>=-1 (espace devant pour la fraise
#<j>=0 (compteur j
#<k>=1 (compteur k
while [#<k> le #<N>] (pour k<=N donc k compte les dents
#<r>=[[#<k>-1]*360/#<N>] (angle pour la dent No k
G0Y#<dy_far> (la fraise s'eloigne
G0Z#<r> (l'engrenage jusqu'a la dent k
#<y>=0 (la taille commence en y=0
while [#<y> le #<depth>] (tant que la profondeur non atteinte
G1Y#<y> (la fraise va en y
if [#<j> eq 0] (si la fraise est à gauche
#<j>=1 (elle va a droite
G1X[#<dx>+2*#<dx_margin>]
else
#<j>=0 (sinon la fraise va a gauche en 0
G1X0 (la fraise execute un va et vient en x
endif
#<y>=[#<y>+#<pass>] (y augmente de la profondeur de passe
endwhile
#<k>=[#<k>+1] (on passe a la dent suivante
endwhile
G0Y#<dy_far> (c'est la fin la fraise retourne en 0
G0X0

Chaque dent est taillée en plusieurs passes puis on continue sur la dent suivante.

Photo mini carte USB :

carte_usb.JPG


Le logiciel PC :

soft_pc.JPG



Je pense que ce systeme peyt être interessant pour d'autres lecteurs , peut être surtout e usinage conventionnel et 2D . Mais aussi pour des projets plus importants en raison de la possibilité d'ecrire des librairies de fonctions.

Les commentaires sont les bienvenus
 
O

orion-p87

Nouveau
Bonsoir,

Pour savoir quoi en dire, j'aimerai bien connaitre les références de la carte et du soft. Parce que comme ça difficile de juger. Sinon tout ce qui permet l'utilisation "simplifiée" d'une CNC est bon à prendre. Merci de donner plein de détails sur ce matériel.
 
P

PCB5

Apprenti
Oh c'est un materiel que je fabrique moi même à 100% a titre amateur.
La carte USB aussi. La carte USB fonctionne sans driver ni DLL (peripherique USB standard).
Le soft PC est aussi simple , sans installation , il suffit de copier le .exe sur le bureau et de le lancer.
Il supporte plusieurs profils de machine (Un peu comme Mach3), il siffit d'ajouter le nom du fichier de configuration dans le raccourci.
il supporte les axes asservis (plusieurs moteurs sur un même axe), le nombre d'axe maximum et 6. (axe x,y,z et a,b,c du point de vue GCode).

le soft pc integre un planificateur de trajectoire , tres serieux qui calcule les vitesses adaptee pour la trajectoire des moteurs, mais c'est la carte USB qui genere les signaux (impulsions).

Le soft PC a de nombreuses fenetres de configuration : vitesse et acceleration independante sur les 6 axes , Brochage du connecteur de sortie (avec signaux Enable, DIR+STEP, brôche, EStop, et même Clear pour les cartes qui auraient ce signal.

De plus le Jog direct au clavier (fleches pour x,y et PageSuiv/PagePrec pour z) + Jog fin.

Des boutons Home et Clear (remise a zero de la position).

Je dirais que ces fonctions existent dejà dans Mach3, mais ici , ce n'est pas Mach3 et c'est USB directement.
 
P

PCB5

Apprenti
Je voudrais donner un autre example pour montrer la souplesse du systeme . Ci -joint une fonction qui avec mon soft va bouger en x, y suivant une courbe quadratique (courbe arrondie avec un centre de courbure). Mon soft permet de réaliser ce mouvement en effet simplement à partir de son expression mathematique. Le planificateur de trajectoire du soft va cumuler tous les mouvements pour en faire une trajectoire executée avec une bonne vitesse (pas d'erret a chaque segment bien evidemment). Comme a chaque courbe approchée par un nombre fini d'iterations, une precision est necessaire , ici 0.1mm est choisi et placé dans la variable #<precision>



(quadrato)
((1-t)^2 P0 + 2t(1-t )P1 + t^2 P2)
(quadrato xc,yc,xe,ye)
!quadrato sub
#<xc>=#<1>
#<yc>=#<2>
#<xe>=#<3>
#<ye>=#<4>
#<x0>=[curpos[0]]
#<y0>=[curpos[1]]
#<precision>=0.1
#<d1>=sqrt[[#<xc>-#<x0>]*[#<xc>-#<x0>]+[#<yc>-#<y0>]*[#<yc>-#<y0>]]
#<d2>=sqrt[[#<xe>-#<xc>]*[#<xe>-#<xc>]+[#<ye>-#<yc>]*[#<ye>-#<yc>]]
#<N>=fup[[#<d1>+#<d2>]/#<precision>]
#<i>=1
while [#<i> le #<N>]
#<t>=#<i>/#<N>
#<x>=[1-#<t>]*[1-#<t>]*#<x0>+2*#<t>*[1-#<t>]*#<xc>+#<t>*#<t>*#<xe>
#<y>=[1-#<t>]*[1-#<t>]*#<y0>+2*#<t>*[1-#<t>]*#<yc>+#<t>*#<t>*#<ye>
G1X#<x>Y#<y>
#<i>=#<i>+1
endwhile
endsub
 
F

fred250

Compagnon
ça a l'air d’offrir des possibilités qui peuvent être intéressante, mais c'est quand même pas a la porter du premier venu :shock:
 
A

Atch311

Ouvrier
Ca à l'air très intéressant, surtout le fait de pouvoir faire une bibliothèque d'usinage.

Mais, jJe suis d'accord que ça ne doit pas être à la portée du 1er débutant venu.

Avec un petit tuto, qui expliquerait le déroulement du programme et des exemples d'usinage simples détaillés avec, entre autre, enregistrement et recherche de variables, même les débutants y arriveraient.

Un petit post pour l'homme, un grand post pour le CNCiste!
 
P

PCB5

Apprenti
Voila comment cela s'utilise :
1/ Rediger le programme , l'utilisateur a de nombreuse aides pour tester et valider le programme
par example
%MessageBox["La variable i est #<i>"] ou %MessageBox'[la position courante est #curpos[0] #curpos[1]"]
MessageBox_i.jpg

MessageBox_pos.jpg

Aussi les Messages Debug qui s'affichent dans la fenetre debug sans interruption du programme
(Debug La variable i est #<i>
(Debug la position courante est [curpos[0]] [curpos[1]]

2/ Lancer le programme par le bouton "RUN"
bouton_run.jpg

Le programme se compile (il se transforme en fichier machine qui contient les mouvements detaillés , puis le programme se lance .
running.jpg


Il fait savoir que la compilation a toujours lieu moteurs à l'arret apres une instruction "EXECUTE" ou "MESSAGEBOX" ou "PAUSE" ou d'autres instructions similaires qui forment un point d'arret dans le programme. Si aucune des instructions precedentes n'est dans le programme , alors le programme est compilé à 100% avant d'etre executé. Ce que je veux dire, c'est qu'il n'y a pas de limite à la complexité du programme (a part la taille de disque du PC) puisque la compilation n'interfere pas sur l'execution.
 
P

PCB5

Apprenti
Je voudrais aussi montrer que le programme GCode detecte les erreurs du programme (Type d'erreur et No de ligne et fichier source ) ce qui facilite la mise au point du programme
error_message.jpg

error_line.jpg



De plus , le programme integre une fenetre de previsualisation avec zoom, rotation , changement de point de vue en 3D , choix d'axe visualisé etc

Soit le programe suivant qui decoupe un rectangle arrondi de dimension 30 x 40mm centré en 0,0 en une passe à z=0, l'arrondi est de 5mm sur les 4 cotes.

%include "librairie.txt"
(round_rect
(round_rect w,h,r,z
!my_round_rect sub
#<w>=#<1>
#<h>=#<2>
#<r>=#<3>
#<z>=#<4>
g0z[#<z>+1]
g0x[-#<w>/2]y[-#<h>/2+#<r>]
g1z#<z>
g1x[-#<w>/2]y[#<h>/2-#<r>]
!quadrato call [-#<w>/2] [#<h>/2] [-#<w>/2+#<r>] [#<h>/2]
g1x[#<w>/2-#<r>]y[#<h>/2]
!quadrato call [#<w>/2] [#<h>/2] [#<w>/2] [#<h>/2-#<r>]
g1x[#<w>/2]y[-#<h>/2+#<r>]
!quadrato call [#<w>/2] [-#<h>/2] [#<w>/2-#<r>] [-#<h>/2]
g1x[-#<w>/2+#<r>]y[-#<h>/2]
!quadrato call [-#<w>/2] [-#<h>/2] [-#<w>/2] [-#<h>/2+#<r>]
endsub
!my_round_rect call 30 40 5 0

Voici une vue dans la fenetre de visualisation

previsu.jpg
 
F

fredcoach

Compagnon
Intéressant.
Non. Très intéressant.
La définition du langage est-elle publique?
Et les sources?
Je n'aime pas du tout l'USB dans un milieu d'atelier, trop sensible aux parasites.
C'est donc la partie programmation qui m'intéresse.
 
P

PCB5

Apprenti
Oui tout a fait :
-la definition du language est publique , tout est documenté , c'est dans la notice. Voir telechargement de numeridrive plus bas.
-Le protocole USB de la carte USB est publique , pour ceux qui voudraient developper leur propre logiciel autour de la carte USB. (Fichier protocole.rtf tres technique , pour les specialistes desirant developper un software).Ci-joint le protocole.
-La carte USB est compatible Mach3 aussi (Plugins mach3usb.dll) mais je rappelle que tout cela est a titre amateur non professionnel conformement a l'esprit et aux regles du forum.Le plugin est en telechargement plus bas. Voir la pièce jointe protocol.zip
 
S

stanloc

Compagnon
Bonjour,
Voilà une démarche bien rare sur les forums comme celui-ci. Ayant du écrire tous mes programmes d'usinage avec mes fraiseuses numériques, en Basic il y a bien longtemps, selon le protocole HPGL, je trouve qu'ici tous les signes <>][ qui apparaissent dans l'écriture des lignes m'embrouillent et risqueraient d'être oubliés en conséquence. J'utilise actuellement, sporadiquement, du matériel GALIL et là aussi il me faut écrire mes programmes d'usinage mais je m'en sors pour des choses simples car ils ont adopté un langage très proche du HPGL . Le matériel Galil est hors de prix en neuf pour un amateur mais heureusement en occasion aux USA il y a des cartes ou boitiers abordables compte tenu que l'on joue dans la cours des grands. Certains équipements peuvent s'interfacer avec Mach3 mais les gens se jettent dessus et les prix sont élevés.
Stan
 
P

PCB5

Apprenti
Pour la syntaxe, c'est comme ça. Effectivement le #<..> pour les variables est un peu lourd mais avec un copier/coller ca va .
Pour le prix, comme c'est de source amateur , ca reduit considerablement la valeur estimé du produit , et ca reduit encore plus son cout (pas d'employes, pas d'impots, pas de charge). Je peux dire tout de suite que le cout est <=30euro. J'ai developpé cela parce que j'en avais besoin et je ne suit pas obligé de le vendre ou d'en faire profiter quiconque. Malgres tout c'est tout le contraire, j'aimerais trouver des utilisateurs à mon produit autre que moi seulement. Evidemment , je ne peux pas donner la carte USB à mes frais, mais comme je viens de le dire , c'est <=30eur.
 
S

stanloc

Compagnon
Justement puisque vous voulez que d'autres l'utilisent je me suis permis de vous faire ma remarque.
Stan
 
P

PCB5

Apprenti
Voici la realisation de la decoupe du rectangle arrondi.
Le programme fait plusieurs passes de 0.2mm la fraise fait 3mm

#<z>=0 (z est une variable locale , ce n'est pas la meme dans la fonction
while [#<z> ge -3]
#<z>=#<z>-0.2
!my_round_rect call 33 43 5 #<z>
endwhile

DSCF0003.JPG

DSCF0004.JPG

DSCF0008.JPG

DSCF0009.JPG

DSCF0017.JPG

DSCF0023.JPG

DSCF0026.JPG

DSCF0032.JPG
 
P

PCB5

Apprenti
La frequence MAX d'impulsions est 33Khz mais ne depend pas du nombre d'axes (meme frequence et meme charge que 1 axe bouge ou que les 6 axes bougent en meme temps). Le firmware de la carte a ete realise d'abord en "C" puis a ete porte en assembleur pour plus de performances. La carte USB a 2 modules principals : Usinage dans lequel la carte effectue les deplacements précis en pas transmis par le PC et Jog dans lequel la carte gere un movement complet sans intervention. Les 2 ne peuvent avoir lieu en meme temps. Un troisieme volet est la configuration dans lequel la carte recoit les correspondances entre axe (axe 0 à 5) et pin (pin 0 à 17). La carte USB a un prix assez bas en raison de la simplicité et du petit nombre de composants. (Une carte PCI aurait ete plus cher).
Elle peut s'enficher directement sur une carte moteur utilisant le port parallele.
Pour obtenir cette carte , elle est sur Ebay, Leboncoin.fr et ou directement avec moi (en message privé sur le forum). Il y en a 50 de disponibles.
 
P

PCB5

Apprenti
Decoupe de face avant pour la carte USB.

Programme :

!my_circle sub
#<r>=[#<1>/2]
#<precision>=0.1
#<i>=1
#<N>=2.0*3.14*#<r>/#<precision>
while [#<i> le #<N>]
#<theta>=180+360*#<i>/#<N>
#<x>=#<r>+#<r>*cos[#<theta>]
#<y>=#<r>*sin[#<theta>]
g1x#<x>y#<y>
#<i>=#<i>+1
endwhile
endsub

!my_rectangle sub
#<dx>=#<1>
#<dy>=#<2>
g1x#<dx>y0
g1x#<dx>y#<dy>
g1x0y#<dy>
g1x0y0
endsub

#<$d_fraise>=1.5
#<$dx_face>=52.75+#<$d_fraise>
#<$dx_usb>=12.5-#<$d_fraise>
#<$dy_face>=12.3+#<$d_fraise>
#<$dy_usb>=4.7-#<$d_fraise>
#<$diam_led>=4-#<$d_fraise>

!face_avant sub
pushmat
%TRANSLATE[[#<$dx_face>-#<$dx_usb>]/2,[#<$dy_face>-#<$dy_usb>]/2]
g0x0y0
g1z#<$z_work>
!my_rectangle call #<$dx_usb> #<$dy_usb>
g0z#<$z_safe>
popmat

pushmat
%TRANSLATE[#<$dx_face>/2-14-#<$diam_led>/2,#<$dy_face>/2]
g0x0y0
g1z#<$z_work>
!my_circle call #<$diam_led>
g0z#<$z_safe>
popmat

g0x0y0
g1z#<$z_work>
!my_rectangle call #<$dx_face> #<$dy_face>
g0z#<$z_safe>
endsub

#<$z_work>=-3.5
#<$z_safe>=0

#<Nx>=5
#<Ny>=5
#<dx1>=55
#<dy1>=15
#<i>=0
while [#<i> lt #<Nx>]
#<j>=0
while [#<j> lt #<Ny>]
pushmat
%TRANSLATE[#<i>*#<dx1>,#<j>*#<dy1>]
!face_avant call
popmat
#<j>=#<j>+1
endwhile
#<i>=#<i>+1
endwhile


Apercu :

apercu.jpg


Resultat :

DSCF0002.JPG


Monté :

monte.jpg
 
D

djkiller

Nouveau
bonjour,
je viens de recevoir votre carte USB et j'ai ainsi pu effectuer les premiers essai de celle ci.
Premièrement la carte a l'air de bonne qualitée avec des soudures soignées!
Celle ci est reconnu sans aucun problème par Windows (XP dans mon cas) et les déplacements manuels fonctionne parfaitement.
La ou je rencontre un problème c'est avec les entrées home et arrêt d'urgence! Dans la page diagnostique de Mach3 ceux ci sont bien allumé quand j'appuis dessus mais lors de la prise d'origine, les axes repartent dans l'autre sens sans prendre en compte l'origine machine ni même sans s’arrêter et quand j'enclenche l’arrêt d'urgence , rien ne se passe tout continu a bouger.
Peut être est ce une erreur de config de ma part , bien que tout fonctionnait avec le port parallèle ??
Petite indication que j'ai remarqué et qui peut avoir on ne sait jamais une importance, l'axe des X et Y bougeait lors du premier branchement (avant reréglage) a l'inverse de la direction prévu et configuré avec le port parallèle (quand tout marche)
PS:j'utilise une carte Hobbycnc pro
voila sinon une fois que ce problème sera résolut je conseillerai cette carte .
Quel est a votre avis le problème?
 
C

crashray

Apprenti
Impressionnant ce qui est possible de réaliser. Je débute juste dans la programmation de CN et je vais être amener à faire pas mal de programme mais quasiment tous du même type mais avec des côtes différentes et une ou deux passes. Va falloir que je me penche sur ce que tu as fait.
Tu ferais un programme principale que l'on appel avec les côtes particulières et par exemple le nombre de passe ? (A savoir je vais avoir à programmer pour un NUM). Le coup des plusieurs passes est intéressante.
 
P

PCB5

Apprenti
Oui, bien sur, c'est cela qui est interessant , de definir les variables nombre de passe, dimensions etc et soit de definir des variables locales, ou des variables globales ou plus localement des parametres d'appel. En tant qu'informaticien professionnel, je trouve que un vrai language de programmation est super interessant pour rediger son programme d'usinage. Tout est geré dans un seil et unique environnement (redaction du programme, apercu 3D, et "Run" sur la machine.
Je suis en train de realiser de nombreux projets interessants:
-Carte USB avec "double port" pour controller 2 cartes 3 axes (et donc la pleine puissance de 6 moteurs en même temps)
-Carte de puissance 4 axes , pour simplifier dans le cas des machines avec "seulement" 4 axes
 
O

orion-p87

Nouveau
Bonsoir,

Merci d'avoir mis en ligne le programme. Je vais le tester avec cette carte pour voir si elle peut être pilotée via son port USB. A défaut il restera le port // qui est compatible Mach3.
 
P

PCB5

Apprenti
Cette carte a vraiment l'air bien, mais ce n'est pas le sujet de ce post. Neanmoins j'aurais des questions
-Est ce que cela fonctionne bien ? tres bien ?
-Est ce qu'il y a un plugin pour Mach3 ? De bonne qualité ? (avec fonctions Home, Limit, proble etc)
-Est t'elle Chere? Tres Chere?
 
O

orion-p87

Nouveau
Bonsoir,

Cette carte est une évolution de carte de contrôle CNC avec seulement une entrée port //, il doit donc y avoir un plugin Mach3. C'est une fabrication Canadienne par une marque réputée en matière d'automatismes et de robotique. Je n'ai pas encore pu la tester (pour cause de déménagement) mais je l'ai achetée 80€ port compris ( mais sans les radiateurs pour les TB 6560 ) sur la baie. C'est le port USB qui m'intéresse pour pouvoir la piloter via mon netbook basique.
 
P

PCB5

Apprenti
Une photo qui montre ce que le logiciel Numeridrive peut faire. Le fichier de cette realisation "spirale.cnc" est inclus dans le telechargement plus haut "numeridrive.zip"


spiral.jpg


map1.jpg

Un clic sur l'image pour connaitre les coordinnées GCode exactes.
 
P

PCB5

Apprenti
Enfin assemblé mon USB double port dans sa version finale. Avec ceic il est possible d'avoir 6 axes via 2 carte 3 axes, plus 24 sorties digitales et 5 entrees.
DSCF0001.JPG

pin_list.jpg
 

Sujets similaires

J
Réponses
3
Affichages
836
lolo
B
Réponses
8
Affichages
3 740
BRICOLO
B
G
Réponses
1
Affichages
1 310
Greg de Nîmes
G
lolo
Réponses
1
Affichages
843
lolo
lumberjack
Réponses
24
Affichages
2 748
lumberjack
lumberjack
N
Réponses
5
Affichages
637
Nabduf
N
vax
Réponses
6
Affichages
1 257
Dodore
Dodore
M
Réponses
4
Affichages
963
MB Creations
M
Haut