CNC dans un atelier de bricolage (partie 3)



Au départ, je comptais me limiter à deux postes ( un , deux ) sur mes expériences CNC. Mais, le sujet s'est avéré intéressant pour beaucoup, donc je le révèle encore un peu. Dans cet article, nous parlerons de l'écriture de logiciels faits maison pour contrôler la CNC amateur.

Préface


Je ne sais pas si j'ai réussi à motiver quelqu'un avec les premiers messages, mais certains commentaires m'ont donné matière à réflexion. Un merci spécial à @evilruff pour la photo de son laboratoire et pour la vidéo avec un coréen cool . Après avoir regardé les deux, ma boîte à gants au sous-sol ne semblait plus si confortable.

Rassemblant ses forces, le week-end, il a apporté quelque chose qui rappelle vaguement l'ordre et a finalement fait 2 choses qu'il allait faire il y a six mois.

Tout d'abord, il a remplacé un morceau de contreplaqué qui servait de table sacrificielle. J'ai utilisé ce contreplaqué dès l'achat de la machine, en y vissant des ébauches avec des vis et en construisant toutes sortes de designs fous à partir de bâtons et de coins. Le tout pour que la pièce ne passe pas sur un vol imprévisible lors du fraisage.

Peut-être que quelqu'un a besoin d'un hack de vie: ils ont fait une nouvelle table à partir d'une planche de terrasse en plastique (vendue à Castorama):



Il a boulonné les planches directement sur la table native en aluminium. Le bonus était des rainures pratiques pour les pinces de la pièce et l'installation rapide de la table de remplissage. Tout sur tout a pris quelques heures et ~ 1100r.

Et deuxièmement, enfin, il a écrit des logiciels plus ou moins utilisables pour gérer des fonctions CNC non standard. Ce sera l'histoire principale.

Énoncé du problème


Le code G pour les opérations décrites dans la deuxième partie est le plus simple. Cependant, le processus d'installation lui-même ne peut pas être appelé rapidement.

Comment est-ce arrivé?


Par exemple, pour l'additif, c'était nécessaire: connaître la largeur du panneau, calculer le nombre de trous, calculer la distance exacte entre eux, créer un fichier, écrire un code g, le charger dans Mach3. Tout cela prend, au mieux, environ 15 à 20 minutes.Dans cette optique, les avantages d'une machine numérique sont considérablement diminués par rapport à un outil à main, qui peut en même temps faire tout un tas de trous.

Ce que je voulais obtenir


Dans le cas du même additif, je voulais obtenir un programme où, dans une interface très simple, j'entrerais la largeur et l'épaisseur du panneau et appuyez sur le bouton pour démarrer le processus de perçage du nombre souhaité de trous de remplissage à la même distance les uns des autres.

Rechercher une solution


La première chose qui m'est venue à l'esprit était d'écrire un programme autonome qui interagirait directement avec un port parallèle. Une recherche rapide sur Google a montré que la tâche d'écrire sur lpt est assez résoluble, mais le diable, comme vous le savez, se cache en détail. Avec une étude plus approfondie de la question, j'ai réalisé que vous pouvez rester coincé ici sérieusement et pendant longtemps. De plus, une telle solution ne serait pas flexible: pour une autre machine, par exemple avec USB, cela ne fonctionnerait pas.

Il y avait une option pour gérer le SDK Mach3. Dans le processus de collecte d'informations sur la création de mach-plugins, je suis tombé sur une solution intéressante. Il a décrit comment utiliser les mécanismes OLE pour extraire Mach3 d'une application tierce. Je ne suis pas un expert des technologies Microsoft, mais après avoir vu la diagonale d'un manuel sur le SDK Mach3, si j'ai bien compris l'idée principale, il n'y a pas de solution miracle, les plugins utilisent les mêmes méthodes publiques des objets COM Mach3. Je n'allais pas redessiner l'interface Mach3, donc la différence pour l'utilisateur entre le plugin et l'application standalon était seulement que le plugin est accessible depuis le menu Mach3, et l'application via l'icône sur le bureau XP.

Une demande séparée m'a semblé préférable. Dans ce cas, théoriquement, je pourrais immédiatement lancer mon programme après avoir chargé l'ordinateur, ce qui chargerait Mach3 avec une locomotive à vapeur (au lieu de charger Mach3 d'abord, puis de creuser dans son menu pour lancer le plug-in).

Ramassez un sabre


La dernière fois que j'ai dû écrire une application de bureau native pour Windows, c'était en un an, en 2006, et c'était en Delphi. Depuis lors, les technologies web avec leur Linux m'ont complètement consommé. Par conséquent, je n'avais plus de préférences particulières dans la langue pour sculpter un programme Windows. L'exemple simple trouvé a été écrit en C #, ce langage a été choisi comme lapin expérimental.

Je ne publierai pas tout le code de l'application résultante ici (si vous le souhaitez, vous pouvez le trouver sur github en utilisant le lien en bas de l'article). Je vais expliquer les choses de base. Toutes les expériences que j'ai faites sur une machine virtuelle avec WinXP SP3, VS 2003 et Mach3 Version R3.043.062. Pour ceux qui croient qu'il vaut mieux voir une fois le lien vers la vidéo sur Youtube , ce que j'ai compris. Voici une transcription des faits saillants.

La préparation


  1. Pour que Visual Studio récupère correctement le composant Mach3, il doit être correctement enregistré dans le Registre. Pour ce faire, téléchargez le fichier Mach3Registry.reg
  2. Lancez Mach3Registry.reg
  3. On démarre VS, on crée le projet d'une application fenêtre en C #
  4. Dans le bloc Explorateur de solutions, cliquez avec le bouton droit sur Références, sélectionnez Ajouter une référence dans le menu. Dans la fenêtre qui s'ouvre, cliquez sur Parcourir et recherchez Mach3.exe



    Si tout est correct, une ligne devrait apparaître dans la liste des références, qui aurait pensé Mach4 ...
  5. 5. Ensuite, dessinez l'interface utilisateur, raccrochez les gestionnaires, implémentez les algorithmes ...

Interaction avec Mach3


Nous connectons les bibliothèques nécessaires, déclarons les variables (Form1.cs)

... using System.Runtime.InteropServices; using Mach4; //   Mach namespace Cnc { public class Form1 : System.Windows.Forms.Form { private IMach4 _mach; private IMyScriptObject _mInst; ... //      Mach3 private void GetMachInstance() { try { _mach = (IMach4) Marshal.GetActiveObject("Mach4.Document"); _mInst = (IMyScriptObject) _mach.GetScriptDispatch(); } catch { _mach = null; _mInst = null; } } ... 

Utilisation:

 GetMachInstance(); // if(_mInst != null) { _mInst.DoOEMButton(1003); //    Stop  Mach3 _mInst.Code("G00 X100"); //  G-code _mInst.GetOEMDRO(800); //     X } 

Les codes des boutons et les valeurs des paramètres peuvent être consultés sur le wiki: OEM_DROs et OEM_Buttons (ils n'ont pas de wiki, les valeurs des paramètres ne sont pas affichées dans le tableau, j'ai regardé l'onglet «View source»).

La première version du programme fonctionnait comme ceci: selon les paramètres définis, un code g a été généré qui était image par image (c'est-à-dire ligne par ligne) exécuté par la méthode _mInst.Code . Et c'était mon erreur. Dans un environnement de débogage sur une machine virtuelle, tout fonctionnait bien. Dans Mach3, les nombres corrects dans les coordonnées ont couru. Mais il y a eu des problèmes lors du transfert vers un ordinateur. Le chariot s'est déplacé correctement, mais la broche ne s'est pas allumée.

Il semble que la gestion du routeur et de la broche dans Mach fonctionne dans différents threads. Il s'est avéré que les commandes de mouvement (G ...) ont été exécutées séquentiellement lorsqu'elles ont entré la méthode _mInst.Code dans un thread, et les commandes de contrôle de la broche (M3, M5), quelle que soit la première, ont été exécutées dans un autre thread. En conséquence, la broche s'est allumée (M3) et s'est immédiatement éteinte (M5), tandis que le déplacement du chariot a suivi son cours normal.

J'ai essayé différentes options, connecté des retards, essayé de conduire l'ensemble du contrôle g-code sur une seule ligne et de l'envoyer en une seule pièce à _mInst.Code. En conséquence, je me suis installé sur la solution «sur le front»: je conduis simplement le code généré dans un fichier, ouvre ce fichier par programme dans Mach3 et appuie par programme sur le bouton «Démarrer». Extrait de code de travail:

 _mInst.LoadFile("C:\\tmp\\gcode.txt"); System.Threading.Thread.Sleep(2000); _mInst.DoOEMButton(1000); 

Une pause entre le téléchargement d'un fichier et la pression d'un bouton est nécessaire pour que Mach ouvre le fichier. Il y a peut-être une façon plus élégante. Si quelqu'un le sait, écrivez dans les commentaires.

Un avantage supplémentaire de cette solution est que vous pouvez maintenant observer la visualisation du processus de traitement dans l'interface Mach.

Que s'est-il finalement passé?


De plus, en bref sur l'application résultante. Séparément, je parlerai de l'interface utilisateur pour chaque opération.

Couper




Tout est assez transparent ici. Le paramètre S est nécessaire pour compenser la taille L si la pièce n'est pas fixée au point zéro le long de X (ou le long de Y lors de la coupe le long).

Additif


Pour l'additif, 2 configurations d'accrochage sont possibles. Le premier avec une meuleuse pour percer des trous d'extrémité. Et le second avec la broche habituelle pour percer dans le plan du bouclier (pour une raison quelconque, je l'ai appelé «additif frontal»).

Visage additif




Avec l'additif d'extrémité, il est important de régler précisément zéro dans le coin inférieur droit de la pièce (j'ai l'angle de la butée latérale et la table). Avec une perceuse à bois, ce n'est pas difficile à faire - il y a une pointe pointue que vous devez entrer dans ce coin. Fixant la pièce sur la table, je la pose juste dans la perceuse.


Sans changer l'équipement de la même manière, je réalise des trous réciproques en fixant la pièce à la verticale:


Le paramètre X est nécessaire pour connecter des panneaux de différentes largeurs (par exemple, lorsque les panneaux inférieur et supérieur de l'armoire sont plus larges que les panneaux latéraux par l'épaisseur des portes).

Additif frontal




L'équipement pour l'avant est une broche régulière. Ce type d'additif est utilisé lorsque vous devez percer des trous dans une surface horizontale, non seulement le long des bords mais également quelque part au milieu. Par exemple, s'il y a plusieurs compartiments dans l'armoire et en plus des parois latérales, il y en a des internes. Si le panneau est plus long que la longueur de la machine, l'additif peut être fabriqué en 2 jeux avec un tour de 180 degrés de la pièce. Dans ce cas, le paramètre X est également utile.

Tournant




Pour moi, la principale difficulté à préparer un g-code avec un chemin de rotation n'était pas d'en faire trop avec la profondeur d'immersion maximale du disque. Le fait est qu'à la sortie d'Inkscape une ligne est obtenue et le retournement se produit en un seul passage. Pour cette raison, j'ai dû créer un code distinct pour le cylindre de la pièce et ce n'est qu'après que le passage principal créant le formulaire a été lancé. Et il y avait quelques restrictions sur ce formulaire. Il fallait notamment veiller à ce que la trajectoire ne soit pas trop profonde. J'ai essayé de ne pas dépasser 10 à 15 mm du niveau du cylindre d'origine.

Tous ces problèmes ont été résolus dans le nouveau programme. Cela fonctionne comme ceci: chargez le g-code "brut" obtenu à partir d'Inkscape, définissez la taille latérale de la barre de la pièce et indiquez la profondeur de traitement maximale en 1 passage (plus le bois est dur, moins cette profondeur). Sur la base du code g source et des paramètres, le programme calculera un chemin sûr et l'enverra à la CNC.

Plans futurs


Le programme a grandement simplifié la routine, mais il est encore loin d'être parfait. Tout d'abord, il sera nécessaire d'optimiser l'algorithme pour percer des trous profonds (le foret est bouché par des copeaux et des surchauffes, vous devez basculer d'avant en arrière). Deuxièmement, l'idée est venue de créer une bibliothèque de formes tournantes. C'est-à-dire plusieurs formes standard (comme un cylindre, un cône, un rouleau à pâtisserie, etc.) avec la possibilité d'ajuster les dimensions sans avoir besoin de créer des trajectoires dans des programmes tiers.

Les références


Mach3Registry.reg
Mach3 SDK et autres programmes
→ Dépôt de projet sur Github (je m'excuse auprès des sharpoviks pour les montants architecturaux à l'avance - c'est mon premier programme en C #).

Source: https://habr.com/ru/post/fr439022/


All Articles