= Code de référence G(((Code G))) Conventions utilisées dans cette section Dans une commande type, le tiret (`-`) signifie une valeur réelle. Comme décrite précédemment, une valeur réelle peut être: - un nombre explicite, `4` par exemple. - une expression, `[2+2]` par exemple. - une valeur de paramètre, `#88` par exemple. - une fonction unaire de la valeur, `acos[0]` par exemple. Dans la plupart des cas, si des mots d'axes sont donnés parmi `XYZABCUVW`, ils spécifient le point de destination. Les axes sont donnés dans le système de coordonnées courant, à moins qu'explicitement décrit comme étant dans le système de coordonnées absolues (machine). Où les axes sont optionnels, tout axe omis gardera sa valeur courante. Tout item dans une commande non explicitement décrit comme optionnel sera requis. Une erreur sera signalée si un item requis est omis. Dans les commandes, les valeurs suivant les lettres sont souvent données comme des nombres explicites. Sauf indication contraire, les nombres explicites peuvent être des valeurs réelles. Par exemple, G10 L2 pourrait aussi bien être écrite `G [2*5] L[1+1]`. Si la valeur du paramètre 100 étaient 2, G10 L#100 signifierait également la même chose. L'utilisation de valeurs réelles qui ne sont pas des nombres explicites, comme indiqué dans les exemples sont rarement utiles. Si `L-` est écrit dans une commande le “`-`” fera référence à “L nombre”. De la même manière, le “`-`” dans `H-` peut être appelé le “H nombre” et ainsi de suite pour les autres lettres. == Coordonnées polaires (((coordonnées polaires))) Coordonnées polaires peuvent être utilisés pour spécifier les coordonnées XY d'un déménagement. Le @n est la distance et ^n est l'angle. L'avantage de cela est pour des choses comme les cercles de trou de boulon qui peut être fait très simplement en passer à un point situé au centre du cercle, réglage de la compensation et puis en déplaçant vers le premier trou, puis de lancer le cycle de forage. Polar Coordonnées sont toujours à partir du courant XY position zéro. Pour déplacer le Coordonnées polaires de la machine à zéro utiliser un décalage ou sélectionnez un système de coordonnées. Dans l'absolu, le mode de l'angle et la distance est de la position zéro XY et l'angle commence à 0 sur l'axe X positif et augmente dans une CCW direction autour de l'axe Z. Le code G1 @1 ^90 est la même que G1 Y1. En mode relatif de la distance et l'angle est également de la XY zéro position, mais il est cumulatif. Cela peut être déroutant au premier abord comment cette fonctionne en mode incrémental. Par exemple, si vous avez le programme suivant vous vous y attendez être un motif carré. F100 G1 @.5 ^90 G91 @.5 ^90 @.5 ^90 @.5 ^90 @.5 ^90 G90 G0 X0 Y0 M2 Vous pouvez le voir sur la figure suivante que la sortie n'est pas ce que vous pourrait s'y attendre. Parce que nous avons ajouté 0.5 à la distance chaque fois que le la distance de la position zéro XY a augmenté avec chaque ligne. .Polar Spiral[[fig:Polar-Spiral]] image::images/polar01.png[] Le code suivant va produire notre modèle carré. F100 G1 @.5 ^90 G91 ^90 ^90 ^90 ^90 G90 G0 X0 Y0 M2 Comme vous pouvez le voir en ajoutant seulement à l'angle de 90 degrés chaque fois que le distance de point final est le même pour chaque ligne. .Polar Square[[fig:Polar-Square]] image::images/polar02.png[] C'est une erreur si: - Un mouvement incrémental est lancé à l'origine - Un mélange de Polar et X et Y sont ou les mots utilisés == Table résumée du G-code (((Table du G Code))) [width="100%", options="header"] |============================================================================== |Codes | Descriptions | Sections |G0 | Interpolation linéaire en vitesse rapide | <> |G1 | Interpolation linéaire en vitesse travail | <> |G2, G3 | Interpolation circ. sens horaire/anti-horaire | <> |G4 | Tempo | <> |G5.1 | Quadratic B-Spline | <> |G5.2, G5.3 | NURBs Block | <> |G7 | Mode diamètre (sur les tours) | <> |G8 | Mode rayon (sur les tours) | <> |G10 L1 | Tableau Jeu d'outils, directement | <> |G10 L10 | Tableau Jeu d'outils, calculé, pièce | <> |G10 L11 | Tableau Jeu d'outils, calculé, Luminaire | <> |G10 L2 | Etablissement du système de coord. pièce (1 à 9) | <> |G10 L20 | Coordinate System Origin Setting Calculated | <> |G17 - G19.1 | Choix du plan de travail | <> |G20, G21 | Unité machine | <> |G28 - G28.1 | Aller à une position prédéfinie | <> |G30 - G30.1 | Aller à une position prédéfinie | <> |G33 | Mouvement synchronisé avec la broche | <> |G33.1 | Taraudage rigide | <> |G38.2 - G38.5 | Mesures au palpeur | <> |G40 | Annulation de la compensation de longueur d'outil | <> |G41, G42 | Compensation de rayon d'outil | <> |G41.1, G42.1 | Comp. dynamique de rayon d'outil à gauche, à droite | <> |G43, G43.1 | Comp. de longueur d'outil depuis la table d'outils | <> |G49 | Annulation de la compensation de longueur d'outil | <> |G53 | Déplacements en coordonnées machine | <> |G54 - G59 | Choix du système de coordonnées (1 a 6) | <> |G59.1 - G59.3 | Choix du système de coordonnées (7 a 9) | <> |G61, G61.1 | Mode trajectoire exacte, mode arrêt exact | <> |G64 | Mode trajectoire continue avec tolérance optionnelle | <> |G73 | Cycle de perçage avec brise copeau | <> |G76 | Cycle de filetage multipasses préprogrammé (tour) | <> |G80 | Révocation des codes modaux | <> |G81 | Cycle de perçage | <> |G82 | Autres cycles preprogrammes | <> |G83 | Percage avec debourrage | <> |G84 | Taraudage-a-droite *(unimplemented)* | <> |G85 | Alésage, retrait en vitesse travail | <> |G86 | Alesage, retrait en vitesse rapide | <> |G87 | Back-Boring Cycle *(unimplemented)* | <> |G88 | Boring Cycle, Stop, Manl Out *(unimplemented)* | <> |G89 | Boring Cycle, Dwell, Feed Out | <> |G90, G91 | Types de déplacements | <> |G90.1, G91.1 | Arc Distance Mode | <> |G92 | Décalages d'origines avec mise à jour des paramètres | <> |G92.1 | Annulation des décalages d'origine | <> |G92.2 | Annulation des décalages d'origine | <> |G92.3 | Appliquer contenu des paramètres aux déc. d'origine | <> |G93, G94, G95 | Modes de vitesses | <> |G96 | Vitesse de coupe constante (IPM ou m/mn) | <> |G97 | Vitesse en tours par minute | <> |G98, G99 | Options de retrait des cycles preprogrammes | <> |============================================================================== [width="100%", options="header"] |============================================================================== |Code | Description | Parameters | Section |M0, M1, M2 | Contrôle du programme | n/a | <> |M3, M4, M5 | Contrôle de la broche | S | <> |M6 | Appel d'outil Tn n=numéro d'outil | T | <> |M7, M8, M9 | Contrôle arrosage | n/a | <> |M30, M60 | Pallet Shuttle | n/a | <> |M48 | Correcteur de vitesse de deux | | <> |M49 | Correcteur de vitesse de ni | | <> |M50 | Correcteur de vitesse d'avance travail | P | <> |M51 | Correcteur de vitesse de broche | P | <> |M52 | Correcteur dynamique de vitesse d'avance | P | <> |M53 | Vitesse constante | P | <> |M61 | Numéro de l'outil courant | Q | <> |M62 à M65 | Output control | P | <> |M66 | Input control | P, E, L, Q | <> |M67 | Analog Output Control | | <> |M68 | Analog Output Control | | <> |M100-M199 | M-Codes définis par l'utilisateur | P Q | <> |O | O Codes | n/a | <> |F | F=réglage vitesse travail | n/a | <> |S | S=réglage vitesse broche | n/a | <> |T | Sélectionnez-Tool | | <> |============================================================================== == G0 Interpolation linéaire en vitesse rapide[[sec:G0-Interpolation-rapide]] (((G0 Interpolation lineaire rapide))) G0 axes Pour un mouvement linéaire en vitesse rapide, programmer `G0` `axes`, au moins un mot d'axe doit être présent, les autres sont optionnels. Le `G0` est optionnel si le mode mouvement courant est déjà `G0`. Cela produira un mouvement linéaire vers le point de destination à la vitesse rapide courante (ou moins vite si la machine n'atteint pas cette vitesse). Il n'est pas prévu d'usiner la matière quand une commande G0 est exécutée. C'est une erreur si: - tous les axes sont omis. Si la compensation de rayon d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir la section <>. Si `G53` est programmé sur la même ligne, le mouvement sera également différent, voir la section <>. Si un mouvement `G0` déplace seulement des axes rotatifs et que la position de la cible pour ces axes est dans une échelle de -360 à 360 degrés, le mouvement sera organisé pour que chaque axe rotatif fasse moins d'un tour complet. Exemple: N1 G0 X1 A[20*360] N2 G0 A0 Après la ligne `N1`, la position de l'axe A sera 7200 degrés. 7200 degrés est égal à zéro degré sur un axe rotatif, de sorte que le mouvement linéaire rapide spécifié en ligne `N2` ne produira aucun mouvement. == G1 Interpolation linéaire en vitesse travail[[sec:G1-Interpolation-travail]] (((G1 Interpolation lineaire travail))) G1 axes Pour un mouvement linéaire en vitesse travail, programmer `G1` `axes` , au moins un mot d'axe doit être présent, les autres sont optionnels. Le `G1` est optionnel si le mode mouvement courant est déjà `G` 1. Cela produira un mouvement linéaire vers le point de destination à la vitesse de travail courante (ou moins vite si la machine n'atteint pas cette vitesse). C'est une erreur si: - tous les axes sont omis. Si la compensation de rayon d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir la section <>. Si `G53` est programmé sur la même ligne, le mouvement sera également différent, voir la section <>. == G2, G3 Interpolation circulaire en vitesse travail[[sec:G2-G3-Arc]] (((G2 Interpolation circulaire sens horaire)))(((G3 Interpolation circulaire anti-horaire))) Un mouvement circulaire ou hélicoïdal est spécifié en sens horaire avec `G2` ou en sens anti-horaire avec `G3`. Les axes du cercle ou de l'hélicoïde, doivent être parallèles aux axes X, Y, ou Z du système de coordonnées machine. Les axes (ou, leurs équivalents, les plans perpendiculaires aux axes) sont sélectionnés avec `G17` (axe Z, plan XY), `G18` (axe Y, plan XZ), ou `G19` (axe X, plan YZ). Plans `17,1`, `18,1` et `19,1` ne sont pas actuellement pris en charge. Si l'arc est circulaire, il se trouve dans un plan parallèle au plan sélectionné. To program a helix, include the axis word perpendicular to the arc plane: for example, if in the `G17` plane, include a `Z` word. This will cause the `Z` axis to move to the programmed value during the circular `XY` motion. To program an arc that gives more than one full turn, use a `P` word specifying the number of full or partial turns of arc. If `P` is unspecified, the behavior is as if `P1` was given: that is, only one full or partial turn will result, giving an arc less than or equal to one full circle. For example, if an arc is programmed with P2, the resulting motion will be more than one full circle and up to two full circles (depending on the programmed endpoint.) Multiturn helical arcs are supported and give motion useful for milling holes or threads. Si une ligne de code (RS274/NGC) forme un arc et inclu le mouvement d'un axe rotatif, l'axe rotatif tournera à vitesse constante, de sorte que le mouvement de l'axe rotatif commence et se termine en même temps que les autres axes XYZ. De telles lignes ne sont pratiquement jamais programmées. Si la compensation de rayon d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir la sections <> et <>. Deux formats sont autorisés pour spécifier un arc: le format centre et le format rayon. It is an error if: - No feed rate has been set. === Arc au format centre (format recommandé) Dans le format centre, les coordonnées du point final de l'arc, dans le plan choisi, sont spécifiées par décalage du centre de l'arc depuis le point courant. Dans ce format, il est permis d'avoir le point final de l'arc identique au point courant. C'est une erreur si: - Lorsque l'arc est projeté sur le plan choisi, la distance entre le point courant et le centre diffèrent de la distance entre le point d'arrivée et le centre de plus de 0,0002 pouce (si les pouces sont utilisés), soit 0,002 millimètre (si les millimètres sont utilisés). Lorsque le plan XY est sélectionné, programmer: G2 ou G3 axes I- J- The axis words are all optional except that at least one of X and Y must be used to program an arc of less than 360 degrees. I and J are the offsets from the current location (in the X and Y directions, respectively) of the center of the circle. I and J are optional except that at least one of the two must be used. If only one is specified, the value of the other is taken as 0. If you include the Z word it will helix. C'est une erreur si: - I et J sont tous les deux omis . Lorsque le plan XZ est sélectionné, programmer: G2 ou G3 axes I- K- The axis words are all optional except that at least one of X and Z must be used to program an arc of less than 360 degrees. I and K are the offsets from the current location (in the X and Z directions, respectively) of the center of the circle. I and K are optional except that at least one of the two must be used. If only one is specified, the value of the other is taken as 0. In Diameter Mode G7 I & K are still radius dimensions. C'est une erreur si: - I et K sont tous les deux omis . Lorsque le plan YZ est sélectionné, programmer: G2 ou G3 axes J- K- The axis words are all optional except that at least one of Y and Z must be used to program an arc of less than 360 degrees. J and K are the offsets from the current location (in the Y and Z directions, respectively) of the center of the circle. J and K are optional except that at least one of the two must be used. If only one is specified, the value of the other is taken as 0. C'est une erreur si: - J et K sont tous les deux omis . === Examples Calculating arcs by hand can be difficult at times. One option is to draw the arc with a cad program to get the coordinates and offsets. Keep in mind the tolerance mentioned above, you may have to change the precision of your cad program to get the desired results. Another option is to calculate the coordinates and offset using formulas. As you can see in the following figures a triangle can be formed from the current position the end position and the arc center. In the following figure you can see the start position is X0 Y0, the end position is X1 Y1. The arc center position is at X1 Y0. This gives us an offset from the start position of 1 in the X axis and 0 in the Y axis. In this case only an I offset is needed. The code for the example: G2 X1 Y1 I1 F10 .G2 Example[[fig:G2-Example]] image::images/g2.png[] In the next example we see the difference between the offsets for Y if we are doing a G2 or a G3 move. For the G2 move the start position is X0 Y0, for the G3 move it is X0 Y1. The arc center is at X1 Y0.5 for both moves. The G2 move the J offset is 0.5 and the G3 move the J offset is -0.5. The g code for the following example: G2 X0 Y1 I1 J0.5 F25 G3 X0 Y0 I1 J-0.5 F25 .G2-G3 Example[[fig:G2/3-Example]] image::images/g2-3.png[] Here is an example of a center format command to mill a helix: G17 G2 X10 Y16 I3 J4 Z9 That means to make a clockwise (as viewed from the positive z-axis) circular or helical arc whose axis is parallel to the Z-axis, ending where X=10, Y=16, and Z=9, with its center offset in the X direction by 3 units from the current X location and offset in the Y direction by 4 units from the current Y location. If the current location has X=7, Y=7 at the outset, the center will be at X=10, Y=11. If the starting value of Z is 9, this is a circular arc; otherwise it is a helical arc. The radius of this arc would be 5. In the center format, the radius of the arc is not specified, but it may be found easily as the distance from the center of the circle to either the current point or the end point of the arc. === Full Circles G2 or G3 I- J- K- To do a full 360 circle from the current location only program the I, J or K offset from the current location for the G2/G3. To program a 360 degree helix in the XY plane just include the Z word. It is an error if: - The K offset is used in the XY plane - The J offset is used in the XZ plane - the I offset is used in the YZ plane === Arcs au format rayon (format non recommandé) Dans le format rayon, les coordonnées du point final de l'arc, dans le plan choisi, sont spécifiées en même temps que le rayon de l'arc. Programmer G2 axes R- (ou utiliser `G3` au lieu de `G2` ). R est le rayon. Les mots d'axes sont facultatifs sauf au moins un des deux du plan choisi, qui doit être utilisé. Un rayon positif indique que l'arc fait moins de 180 degrés, alors qu'un rayon négatif indique un arc supérieur à 180 degrés. Si l'arc est hélicoïdal, la valeur du point d'arrivée de l'arc dans les coordonnées de l'axe perpendiculaire au plan choisi sera également spécifiée. C'est une erreur si: - Les deux mots d'axes pour le plan choisi sont omis. - Le point d'arrivée de l'arc est identique au point courant. Ce n'est pas une bonne pratique de programmer au format rayon, des arcs qui sont presque des cercles entiers ou des demi-cercles, car un changement minime dans l'emplacement du point d'arrivée va produire un changement beaucoup plus grand dans l'emplacement du centre du cercle (et donc, du milieu de l'arc). L'effet de grossissement est tellement important, qu'une erreur d'arrondi peut facilement produire un usinage hors tolérance. Par exemple, 1% de déplacement de l'extrémité d'un arc de 180 degrés produit 7% de déplacement du point situé à 90 degrés le long de l'arc. Les cercles presque complets sont encore pires. Autrement l'usinage d'arcs dans une gamme de petits à 165 degrés ou de 195 à 345 degrés sera bon. Voici un exemple de commande pour usiner un arc au format rayon: G17 G2 X10 Y15 R20 Z5 Cela signifie faire un mouvement en arc ou hélicoïdal en sens horaire (vu du côté positif de l'axe Z), se terminant en X=10, Y=15 et Z=5, avec un rayon de 20. Si la valeur de départ de Z est 5, Ce sera un arc de cercle parallèle au plan XY sinon, ce sera un arc hélicoïdal. == G4 Tempo[[sec:G4-Tempo]](((G4 Temporisation))) G4 P[secondes] Pour une tempo, programmer G4 P- . Les axes s'immobiliseront pour une durée de P secondes. C'est une erreur si: - Le nombre P est négatif. == G5.1 Quadratic B-spline[[sec:G5.1-B-spline]](((G5.1 Quadratic B-spline))) G5.1 Xn Yn I[X offset] J[Y offset] G5.1 creates a quadratic B-spline in the XY plane with the X and Y axis only. It is an error if: - I and J offset is not specified - An axis other than X or Y is specified - The active plane is not G17 == G5.2 G5.3 NURBs Block[[sec:G5.2-G5.3-NURBs]](((G5.2 G5.3 NURBs Block))) Warning: G5.2, G5.3 is experimental and not fully tested. G5.2 is for opening the data block defining a NURBs and G5.3 for closing the data block. In the lines between these two codes the curve control points are defined with both their related "weights" (P) and their parameter (L) which determines the order of the curve (k) and subsequently its degree (k-1). Using this curve definition the knots of the NURBs curve are not defined by the user they are calculated by the inside algorithm, in the same way as it happens in a great number of graphic applications, where the curve shape can be modified only acting on either control points or weights. Sample NURBs Code ------------------------------------------------- G0 X0 Y0 F10 G5.2 X0 Y1 P1 L3 X2 Y2 P1 X2 Y0 P1 X0 Y0 P2 G5.3 / The rapid moves show the same path without the NURBs Block G0 X0 Y1 X2 Y2 X2 Y0 X0 Y0 M2 ------------------------------------------------- .Sample NURBs Output image:images/nurbs01.png[] More information on NURBs can be found here: http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?NURBS[http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?NURBS] == G7 Mode diamètre[[sec:G7-Mode-diametre]](((G7 Mode diametre))) Sur un tour, programmer G7 pour passer l'axe X en mode diamètre. En mode diamètre, les mouvements de l'axe X font la moitié de la cote programmée. Par exemple, X10 placera l'outil à 5 unités du centre, ce qui produira bien une pièce d'un diamètre de 10 unités. == G8 Mode rayon[[sec:G8-Mode-rayon]](((G8 Mode rayon))) Sur un tour, programmer G8 pour passer l'axe X en mode rayon. En mode rayon, les mouvements de l'axe X sont égaux à la cote programmée. Ce qui signifie que X10 placera l'outil à 10 unités du centre et aura pour résultat une pièce d'un diamètre de 20 unités. G8 est le mode par défaut à la mise sous tension. == G10 L1 Entrée dans la table d'outils[[sec:G10-L1_]] (((G10 L1 Entree dans la table d'outils))) G10 L1 P[numéro d'outil] R[rayon] X[correcteur] Y[correcteur] Z[correcteur] A[correcteur] B[correcteur] C[correcteur] U[correcteur] V[correcteur] W[correcteur] I[angle avant] J[angle du dos] Q[de l'orientation] Programmer un G10 L1 pour ajuster une entrée dans la table d'outils depuis un programme ou depuis la fenêtre d'entrées manuelles (MDI). Un valables G10 L1 réécrit la table d'outils. C'est une erreur si: - Rémunération Cutter est sur - Le nombre P est indéterminée Pour connaître l'orientation des outils, se référer à la figure <> == G10 L2 Établissement du système de coordonnées pièce[[sec:G10-L2_]] (((G10 L1 Etablissement coordonnees piece))) G10 L1 P[système de coordonnées] R[XY rotation autour de Z] X[correcteur] Y[correcteur] Z[correcteur] A[correcteur] B[correcteur] C[correcteur] U[correcteur] V[correcteur] W[correcteur] Le langage RS274/NGC utilise les systèmes de coordonnées décrits à la section <>. Pour définir l'origine d'un système de coordonnées, le programme «G10 L2 P- R- axes», où le nombre P est dans la plage 0 à 9. Pour le moment active coordonner P0 programme du système. Pour spécifier un système de coordonnées programme 1 à 9 correspondant à «G54» à «G59.3». R programme à option indiquer la rotation de l'axe XY autour l'axe Z. Tous les mots axe sont facultatifs. L'origine de la coordonnée système spécifié par le nombre P est fixé aux valeurs indiquées (en termes de la machine compensent pas le système de coordonnées). Seules les coordonnées pour lequel un mot axe est inclus sur la ligne sera fixée. Etre dans supplémentaires mode distance («G91») n'a aucun effet sur «L2 G10». L' sens de rotation est CCW vu de la vue du dessus. Concepts importants: - G10 L2 Pn ne change pas de l'actuel système de coordonnées à l' celui spécifié par P, vous devez utiliser G54-59.3 pour sélectionner un système de coordonnées système. - Quand une rotation est en effet un axe de jogging ne propose que l'axe dans un sens positif ou négatif et non pas le long de la rotation de l'axe. C'est une erreur si: - Le nombre P n'évalue pas à un nombre entier compris entre 0 à 9. - Un axe est programmé qui n'est pas défini dans la configuration. Si un décalage d'origine créé avec `G92` est actif avant la commande `G10 L2`, il reste actif après. Le système de coordonnées dont l'origine est définie par la commande G10 peut être actif ou non au moment de l'exécution de `G10`. Si il est actif à ce moment là, les nouvelles coordonnées prennent effet immédiatement. Exemple: G10 L2 P1 X3.5 Y17.2:: Place l'origine du premier système de coordonnées (celui selectionné par G54) au point où X=3.5 et Y=17.2 (en coordonnées absolues). La coordonnée Z de l'origine, ainsi que les coordonnées de tous les autres axes, restent inchangées puisque seuls X et Y étaient spécifiés. G10 L2 P1 X0 Y0 Z0:: Fixe les coordonnées XYZ de l'origine G54 à l'origine unoffset. .Set Coordinate System[[cap:Set-Coordinate-System]] [width="80%", options="header"] |======================================== |P Value | Coordinate System | G Code |0 | Currently Active | n/a |1 | 1 | 54 |2 | 2 | 55 |3 | 3 | 56 |4 | 4 | 57 |5 | 5 | 58 |6 | 6 | 59 |7 | 7 | 59.1 |8 | 8 | 59.2 |9 | 9 | 59.3 |======================================== == G10 L10 Set Tool Table[[sec:G10-L10]] (((G10 L10 Set Tool Table))) G10 L10 P[tool number] R[radius] X[set_curr_sys_to] Y[set_curr_sys_to] Z[set_curr_sys_to] A[set_curr_sys_to] B[set_curr_sys_to] C[set_curr_sys_to] U[set_curr_sys_to] V[set_curr_sys_to] W[set_curr_sys_to] I[frontangle] J[backangle] Q[orientation] G10 L10 changes the tool table entry for tool P so that if the tool offset is reloaded, with the machine in its current position and with the current G5x and G92 offsets active, the current coordinates for the given axes will become the given values. The axes that are not specified in the G10 L10 command will not be changed. It is an error if: - Cutter Compensation is on == G10 L11 Set Tool Table[[sec:G10-L11]] (((G10 L11 Set Tool Table))) G10 L11 P[tool number] R[radius] X[set_curr_loc_to] Y[set_curr_loc_to] Z[set_curr_loc_to] A[set_curr_loc_to] B[set_curr_loc_to] C[set_curr_loc_to] U[set_curr_loc_to] V[set_curr_loc_to] W[set_curr_loc_to] I[frontangle] J[backangle] Q[orientation] G10 L11 is just like G10 L10 except that instead of setting the entry according to the current offsets, it is set so that the current coordinates would become the given value if the new tool offset is reloaded and the machine is placed in the G59.3 coordinate system without any G92 offset active. This allows the user to set the G59.3 coordinate system according to a fixed point on the machine, and then use that fixture to measure tools without regard to other currently-active offsets. It is an error if: - Cutter Compensation is on == G10 L20 Set Coordinate System[[sec:G10-L20]] (((G10 L20 Set Coordinate System))) G10 L20 P[coordinate system] R[rotation about Z] X[set_curr_loc_to] Y[set_curr_loc_to] Z[set_curr_loc_to] A[set_curr_loc_to] B[set_curr_loc_to] C[set_curr_loc_to] U[set_curr_loc_to] V[set_curr_loc_to] W[set_curr_loc_to] G10 L20 is similar to G10 L2 except that instead of setting the offset/entry to the given value, it is set to a calculated value that makes the current coordinates become the given value. It is an error if: - The P number does not evaluate to an integer in the range 0 to 9. - An axis is programmed that is not defined in the configuration. == G17, G18, G19, G17.1, G18.1, G19.1 Choix du plan de travail[[sec:G17-G18-G19]] (((G17 Plan XY)))(((G18 Plan XZ)))(((G19 Plan YZ))) Ces codes sélectionnent le plan courant comme ci-dessous: [width="60%", options="header"] |======================================== |G17 | XY (par défault) |G18 | ZX |G19 | YZ |G17.1 | UV |G18.1 | WU |G19.1 | VW |======================================== Les différents effets provoqués selon la sélection du plan de travail, sont expliqués dans les sections <> et <> == G20, G21 Choix des unités machine[[sec:G20-G21-Unites]] (((G20 Pouce)))(((G21 Millimetre))) Programmer G20 pour utiliser le pouce comme unité de longueur. + Programmer G21 pour utiliser le millimètre comme unité de longueur. C'est toujours une bonne pratique de programmer soit G20, soit G21, au début d'un programme, avant tout mouvement et de ne plus en changer ailleurs dans le programme. C'est la responsabilité de l'opérateur d'être sûr que toutes les longueurs sont appropriées pour l'utilisation des unités actuelles. == G28, G28.1 Aller à une position prédéfinie[[sec:G28-G28.1]](((G28)))(((G28.1))) La commande G28 utilise les valeurs stockées dans les paramètres 5161 à 5166 comme valeurs absolues pour effectuer un mouvement en vitesse rapide de la position courante à la position définie dans les paramètres. Les valeurs stockées dans les paramètres font référence au système de coordonnées absolues qui est le système de coordonnées machine. La commande `G28 axes` effectue un déplacement en vitesse rapide depuis la position courante jusqu'à la position spécifiée par `axes`, suivi d'un mouvement rapide à la position prédéfinie dans les paramètres 5161 à 5166. G28.1 enregistre la position absolue courante dans les paramètres 5161 à 5166. C'est une erreur si: - La compensation de rayon d'outil est active. == G30, G30.1 Aller à une position prédéfinie[[sec:G30-G30.1]](((G30)))(((G30.1))) La commande G30 utilise les valeurs stockées dans les paramètres 5181 à 5186 comme valeurs absolues pour effectuer un mouvement en vitesse rapide de la position courante à la position définie dans les paramètres. Les valeurs stockées dans les paramètres font référence au système de coordonnées absolues qui est le système de coordonnées machine. La commande G30 `axes` effectue un déplacement en vitesse rapide depuis la position courante jusqu'à la position spécifiée par `axes`, suivi d'un mouvement rapide à la position prédéfinie dans les paramètres 5181-5186. G30.1 enregistre la position absolue courante dans les paramètres 5181-5186. Les paramètres de G30 peuvent être utilisés pour déplacer l'outil quand un M6 est programmé et que la variable [TOOL_CHANGE_AT_G30]=1 dans la section [EMCIO] du fichier ini. C'est une erreur si: - La compensation de rayon d'outil est active. == G33 Mouvement avec broche synchronisée[[sec:G33-Broche-sync]] (((G33 MVT avec broche synchronisee))) G33 X- Y- Z- K- Pour un mouvement avec broche synchronisée dans une direction, programmer `G33 X- Y- Z- K-` où K donne la longueur du mouvement en XYZ pour chaque tour de broche. Par exemple, il commence à `Z=0`, `G33 Z-1 K.0625` produira un mouvement d'un pouce de long en Z, et en même temps 16 tours de broche. Cette commande pourrait être la base d'un programme pour faire un filetage de 16 filets par pouce. Un autre exemple en métrique, `G33 Z-15 K1.5` produira un mouvement de 15mm de long pendant que la broche fera 10 tours soit un pas de 1.5mm. Remarque: K suit la ligne d'entraînement décrit par `X- Y- Z-` et n'est pas parallèle à l'axe Z. Broche synchronisée mouvements d'attendre pour l'indice de la broche, donc plusieurs ligne passe haut. Un mouvement avec `G33` se termine au point final programmé, Les mots d'axes sont facultatifs, sauf au moins un qui doit être utilisé. C'est une erreur si: - Tous les axes sont omis. - La broche ne tourne pas quand cette commande est exécutée. - Le mouvement linéaire requis excède les limites de vitesse machine en raison de la vitesse de broche. == G33.1 Taraudage Rigide[[sec:G33.1-Taraudage-rigide]] (((G33.1 Taraudage rigide))) G33.1 X- Y- Z- K- Pour un taraudage rigide avec broche synchronisée et mouvement de retour, programmer `G33.1 X- Y- Z- K-` où `K-` donne la longueur du mouvement pour chaque tour de broche. Un mouvement de taraudage rigide suit cette séquence: - Un mouvement aux coordonnées spécifiées, synchronisé avec la rotation de la broche, avec un ratio donné et débutant sur l'impulsion d'index du codeur de la broche. - Quand le point final est atteint, la commande inverse le sens de rotation de la broche (ex: de 300 tours/mn en sens horaire à 300 tours/mn en sens anti-horaire) - Le mouvement reste synchronisé en continu avec la broche même *au delà* de la coordonnée du point final spécifiée pendant l'arrêt de la broche et son inversion. - Le mouvement synchronisé se poursuit pour revenir aux coordonnées initiales. - Quand les coordonnées d'origines sont atteintes, la commande inverse la broche une seconde fois (ex: de 300tr/mn sens anti-horaire à 300tr/mn sens horaire) - Le mouvement reste synchronisé même *au delà* des coordonnées d'origine pendant que la broche s'arrête et s'inverse. - Un mouvement *non synchronisé* ramène le mobile en arrière, aux coordonnées d'origine. Tous les mouvements avec broche synchronisée ont besoin d'un index de broche, pour conserver la trajectoire prévue. Un mouvement avec `G33.1` se termine aux coordonnées initiales. Les mots d'axes sont facultatifs, sauf au moins un qui doit être utilisé. C'est une erreur si: - Tous les axes sont omis. - La broche ne tourne pas quand cette commande est exécutée. - Le mouvement linéaire requis excède les limites de vitesse machine en raison de la vitesse de broche. Example: ;déplacer vers la position de départ G0 X1.000 Y1.000 Z0.100 ;rigides tapant un fil 20 TPI G33.1 Z-0.750 K0.05 == G38.x Mesure au palpeur[[sec:G38.x-Palpeur]] (((G38.2 Palpeur)))(((G38.3 Palpeur)))(((G38.4 Palpeur)))(((G38.5 Palpeur))) IMPORTANT: Vous ne serez pas réussi à utiliser cette commande jusqu'à ce que votre machine a été mis en place pour fournir un signal de la sonde via HAL à EMC2. Le signal de la sonde doit être entrée via un bit d'entrée HAL, et ensuite transmis à `motion.probe-entrée (bit, In)`. G38.x utilise la valeur sur cette broche pour déterminer quand la sonde a fait (ou perdu) de contact. TRUE pour sonde de contact fermé (toucher), FALSE pour sonde de contact ouvert. Programmer `G38.2 'axes'`, `G38.3 'axes'`, `G38.4 'axes'`, ou `G38.5 'axes'` pour effectuer une mesure au palpeur. Au moins un mot d'axe est obligatoire, les autres sont optionnels. Les mots axes définissent ensemble le point de destination que la sonde se déplace vers, à partir de l'emplacement actuel. L'outil dans la broche doit être un palpeur. C'est une erreur si: - Le point programmé est le même que le point courant. - Aucun mot d'axe n'est utilisé. - La compensation de rayon d'outil est active. - La vitesse travail est à zéro. - Le palpeur est déjà au contact de la cible. En réponse à cette commande, la machine déplace le point contrôlé (qui est la pointe ou la boule du palpeur) en ligne droite à la vitesse actuelle, vers le point programmé. En mode vitesse inverse du temps; la vitesse est telle que le mouvement depuis le point courant jusqu'au point programmé, prendra le temps spécifié. Le mouvement s'arrête (dans les limites d'accélération de la machine) lorsque le point programmé est atteint, ou quand l'entrée du palpeur bascule dans l'état attendu, selon la première éventualité. Le tableau <> montre la signification des différents codes de mesure. .Codes de mesure[[cap:Codes-de-mesure]] [width="90%", options="header"] |========================================================== |Code | Etat ciblé | Destiné direction. | Signal d'erreur |G38.2 | Contact | Vers la pièce | Oui |G38.3 | Contact | Vers la pièce | Non |G38.4 | Pas de contact | Depuis la pièce | Oui |G38.5 | Pas de contact | Depuis la pièce | Non |========================================================== Après une mesure réussie, les paramètres 5061 à 5069 contiendront les coordonnées de XYZABCUVW de l'emplacement du point contrôlé lors du changement d'état du palpeur. Après une mesure manquée, ils contiendront les coordonnées du point programmé. Le paramètre 5070 est mis à 1 si la mesure est réussie et à 0 si elle est manquée. Si la mesure n'a pas réussi, G38.2 et G38.4 signaleront une erreur en affichant un message à l'écran si l'interface graphique choisie soutient que l'. (Et en stopper l'exécution du programme? * FIXME * TODO). Un commentaire de la forme `(PROBEOPEN filename.txt)` ouvrira le ficher 'filename.txt' et y enregistrera les 9 coordonnées de XYZABCUVW de chaque mesure réussie. Le fichier doit être fermé avec le commentaire `(PROBECLOSE)`. == G40 Compensation de rayon d'outil[[sec:G40]] (((G40 Revocation compensation rayon))) Pour désactiver la compensation de rayon d'outil, programmer `G40`. Le mouvement suivant doit être une droite. Ce n'est pas une erreur de désactiver la compensation quand elle est déjà inactive. C'est une C'est une erreur si: - Un mouvement en arc avec G2 ou G3 derrière un G40. == G41, G42 Compensation de rayon d'outil[[sec:G41-G42]] (((G41 Compensation de rayon)))(((G42 Compensation de rayon))) G41 ou G42 D[outil] Pour activer la compensation de rayon d'outil à gauche du profil, programmer G41. G41 correction de rayon démarrage cutter à la gauche de la ligne programmée vu de l'extrémité positive de l'axe perpendiculaire au plan. Pour activer la compensation de rayon d'outil à droite du profil, programmer G42. G42 correction de rayon démarrage cutter vers la droite de la ligne programmée vu de l'extrémité positive de l'axe perpendiculaire au plan. Le mouvement d'entrée doit être au moins aussi long que le rayon de l'outil. Le mouvement d'entrée peut être effectué en vitesse rapide. La compensation de rayon Cutter peut être effectuée que si le plan XY ou plan XZ est actif. M100-M199 Utilisateur commandes sont autorisés lorsque la compensation Cutter est allumé. Le comportement du centre d'usinage quand la compensation de rayon d'outil est active est décrit dans la section <> === Compensation de rayon d'outil depuis une table d'outils Pour activer la compensation de rayon d'outil à gauche du profil, c'est à dire, la fraise reste à gauche de la trajectoire programmée quand le rayon d'outil est positif, programmer `G41 D-`. Pour activer la compensation de rayon d'outil à droite du profil, c'est à dire, la fraise reste à droite de la trajectoire programmée quand le rayon d'outil est positif, programmer `G42 D-`. Le mot D est optionnel, si il n'y a pas de mot D, le rayon de l'outil monté actuellement dans la broche est utilisé. Si D est utilisé, sa valeur devrait être le numéro de l'outil monté dans la broche, cependant, ce n'est pas obligatoire. Ce n'est pas une erreur d'avoir D à zéro, le rayon utilisé sera de zéro. C'est une erreur si: - La valeur de D n'est pas un entier, il est négatif, ou supérieur au nombre d'emplacements dans le carrousel. - Le plan de travail n'est pas YZ. - La compensation de rayon d'outil est activée alors qu'elle est déjà active. == G41.1, G42.1 Compensation dynamique de rayon d'outil[[sec:G41.1-G42.1]] (((G41.1 Compensation dynamique de rayon)))(((G42.1 Compensation dynamique de rayon))) G41.1 or G42.1 D[diamètre] Pour activer la compensation dynamique de rayon d'outil à gauche du profil, programmer `G41.1 D- L-`. Pour activer la compensation dynamique de rayon d'outil à droite du profil, programmer `G42.1 D- L-`. Le mot D spécifie le diamètre de l'outil. Le mot L spécifie l'orientation des arêtes de l'outil, et par défaut 0 si non spécifié. C'est une erreur si: - Le plan yz est le plan de travail actif. - La valeur de L n'est pas comprise entre 0 et 9 inclus. - Le nombre L est utilisée lorsque le plan XZ n'est pas actif.. - La compensation de rayon d'outil est activée alors qu'elle est déjà active. Pour plus d'informations sur l'orientation cutter voir le <> et <> et <> diagrammes. == G43, G43.1, G49 Compensation de longueur d'outil[[sec:G43-G43.1-Outils]] (((G43 Compensation de longueur)))(((G43.1 Compensation dynamique de longueur)))(((G49 Revocation compensation longueur))) === G43 , G43.1 Activation de la compensation de longueur d'outil G43 et G43.1 modifient les mouvements ultérieurs en décalant, de la longueur de l'outil, les coordonnées de Z et/ou de X. G43 et G43.1 ne provoquent aucun mouvement. L'effet de la compensation ne se produira qu'au prochain mouvement de l'axe compensé. ==== G43 Compensation de longueur d'outil depuis une table d'outils Pour utiliser la compensation de longueur d'outil depuis une table d'outils, programmer `G43 H-`, où la valeur de H est l'index souhaîté dans la table d'outils. La valeur de H n'est pas obligatoirement la même que celle du numéro d'outil monté dans la broche. Ce n'est pas une erreur d'avoir la valeur de H à zéro, une compensation de zéro sera utilisée. C'est une erreur si: - La valeur de H n'est pas un entier, il est négatif, ou il est supérieur au nombre d'outils dans le carrousel. ==== G43.1 Compensation dynamique de longueur d'outil Pour utiliser la compensation dynamique de longueur d'outil depuis un programme, utiliser `G43.1 I- K-`, où `I-` donne la compensation de longueur d'outil en X (pour les tours) et `K-` donne la compensation de longueur en Z (pour les tours et les fraiseuses). C'est une erreur si: - Une commande de mouvement est sur la même ligne que `G43.1` === G49 Annulation de la compensation de longueur d'outil[[sub:G49-Outils]](((G49 Revocation compensation longueur))) Pour annuler la compensation de longueur d'outil, programmer G49. Ce n'est pas une erreur de programmer une compensation qui est déjà utilisée. Ce n'est pas non plus une erreur d'annuler la compensation de longueur d'outil alors qu'aucune n'est couramment utilisée. == G53 Mouvement en coordonnées absolues[[sec:G53-Move-in]] (((G53 Mouvements en absolu))) Pour un déplacement à un point exprimé en coordonnées absolues, programmer `G1 G53 X- Y- Z- A- B- C-` (ou utiliser `G0` à la place de `G1`), au moins un mot d'axe est obligatoire, les autres sont optionnels. Le `G0` ou le `G1` est optionnel si il est déjà le mode de mouvement courant. `G53` n'est pas modal, il doit être programmé sur chaque ligne où il doit être actif. Il produit un mouvement linéaire coordonné au point programmé. Si `G1` est actif, la vitesse travail courante est utilisée si la machine est assez rapide. Si `G0` est actif, la vitesse rapide courante sera utilisée si la machine est assez rapide. C'est une erreur si: - G53 est utilisé sans que G0 ou G1 ne soit actif. - G53 est utilisé alors que la compensation de rayon d'outil est active. Voir la section <> pour une vue complète des systèmes de coordonnées. == G54-G59.3 Choix du système de coordonnées[[sec:G54-a-G59.3]] (((G54 Origine piece 1)))(((G55 Origine piece 2)))(((G56 Origine piece 3))) (((G57 Origine piece 4)))(((G58 Origine piece 5)))(((G59 Origine piece 6))) (((G59.1 Origine piece 7)))(((G59.2 Origine piece 8)))(((G59.3 Origine piece 9))) Le code G54 est apparié avec le système de coordonnées pièce N°1, pour le choisir programmer G54 et ainsi de suite pour les autres systèmes. Les systèmes de coordonnées appariés à un G-code sont les suivants: (1 avec `G54`), (2 avec `G55`), (3 `avec G56`), (4 avec `G57`), (5 avec `G58`), (6 avec `G59`), (7 avec `G59.1`), (8 avec `G59.2`), et (9 avec `G59.3`). Les systèmes de coordonnées stocker les valeurs pour chaque système dans le variables indiquées dans le tableau suivant. .Coordinate Systems[[cap:Coordinate-Systems]] [width="90%", options="header"] |==================================================================== |Select | CS | X | Y | Z | A | B | C | U | V | W |G54 | 1 | 5221 | 5222 | 5223 | 5224 | 5225 | 5226 | 5227 | 5228 | 5229 |G55 | 2 | 5241 | 5242 | 5243 | 5244 | 5245 | 5246 | 5247 | 5248 | 5249 |G56 | 3 | 5261 | 5262 | 5263 | 5264 | 5265 | 5266 | 5267 | 5268 | 5269 |G57 | 4 | 5281 | 5282 | 5283 | 5284 | 5285 | 5286 | 5287 | 5288 | 5289 |G58 | 5 | 5301 | 5302 | 5303 | 5304 | 5305 | 5306 | 5307 | 5308 | 5309 |G59 | 6 | 5321 | 5322 | 5323 | 5324 | 5325 | 5326 | 5327 | 5328 | 5329 |G59.1 | 7 | 5341 | 5342 | 5343 | 5344 | 5345 | 5346 | 5347 | 5348 | 5349 |G59.2 | 8 | 5361 | 5362 | 5363 | 5364 | 5365 | 5366 | 5367 | 5368 | 5369 |G59.3 | 9 | 5381 | 5382 | 5383 | 5384 | 5385 | 5386 | 5387 | 5388 | 5389 |==================================================================== C'est une erreur si: - Un de ces G-codes est utilisé alors que la compensation de rayon d'outil est active. Voir la section <> pour une vue complète des systèmes de coordonnées. == G61, G61.1, G64 Types de contrôle de trajectoire[[sec:G61-G61.1-G64]] (((G61 Trajectoire exacte)))(((G61.1 Arret exact)))(((G64 Trajectoire continue))) (((Path Control)))(((Controle-trajectoire))) Programmer `G61` pour passer la machine en mode de trajectoire exacte, `G61.1` pour la passer en mode arrêt exact, ou `G64 P-` pour le mode trajectoire continue avec tolérance optionnelle. Ce n'est pas une erreur de programmer un mode déjà actif. Voir la section <> pour une discussion de ces modes. G61 Mode chemin exact G61.1 Mode arrêt précis G64 Meilleure vitesse possible G64 P- (tolérance de mélange de mouvement) Q- (tolérance de CAM naïve) G61 visites le point programmé exactement, même si cela signifie viennent temporairement à l'arrêt complet. G64 sans P moyen de maintenir la meilleure vitesse possible, peu importe comment loin du point programmé vous vous retrouvez. G64 P- Q- est un moyen d'affiner votre système pour obtenir les meilleurs compromis entre vitesse et précision. Le P- tolérance signifie que le chemin réel aura pas plus de P- loin de l'extrémité programmé. La vitesse sera réduite si nécessaire pour maintenir la trajectoire. De plus, lorsque vous activer G64 P- Q- il tourne sur la «détecteur de CAM naïve», quand il ya des une série d'équations linéaires XYZ nourrissent se déplace à la même avance qui sont moins que Q- être loin de colinéaires, ils sont regroupées en une seule mouvement linéaire. Sur déplace G2/G3 dans le G17 (XY) plane lorsque le maximum déviation d'un arc à partir d'une ligne droite est inférieure à la classe P- G64 la tolérance de l'arc est divisé en deux lignes (depuis le début de l'arc au milieu, et de milieu à la fin). ces lignes sont ensuite soumis à l'algorithme «détecteur de CAM naïve» pour les lignes. Ainsi, la ligne-arc, arc-arc, et Arc-Line cas ainsi que la ligne en ligne bénéficient de la «détecteur de CAM naïve». Cela améliore les performances en simplifiant les contours chemin. Il est OK pour le programme de la mode qui est déjà actif. Voir aussi Section <> pour une discussion de ces modes. Si Q n'est pas spécifié alors il aura le même comportement comme avant et utiliser la valeur de P-. == G73 Cycle de perçage avec brise copeaux[[sec:G73-Percage-avec-brise-copeaux]](((G73 Cycle percage brise copeaux))) G73 X- Y- Z- A- B- C- R- L- Q- Le cycle `G73` est destiné au perçage profond ou au fraisage avec brise-copeaux. Les retraits, au cours de ce cycle, fragmentent les copeaux longs (qui sont fréquents lors du perçage dans l'aluminum). Ce cycle utilise la valeur Q qui représente un incrément “delta” (quantité de changement) le long de l'axe Z. . Un mouvement préliminaire, Comme décrit ici. <> . Un mouvement de l'axe Z seul, en vitesse travail, sur la position la moins profonde entre, un incrément delta, ou la position de Z programmée. . Une petite remontée en vitesse rapide. . Répétition des étapes 2 et 3 jusqu'à ce que la position programmée de Z soit atteinte à l'étape 2. . Un mouvement de l'axe Z en vitesse rapide vers le plan de retrait. C'est une erreur si: - La valeur de Q est négative ou égale à zéro. == G76 Cycle de filetage préprogrammé[[sec:G76-Filetage]](((G76 Cycle filetage multipasses))) G76 P- Z- I- J- R- K- Q- H- E- L- C'est une erreur si: - Le plan de travail actif n'est pas ZX. - D'autres mots d'axes comme X- ou Y-, sont spécifiés. - La dégressivité `R-` est inférieure à 1.0. - Certains mots requis ne sont pas spécifiés. - `P-`, `J-`, `K-` ou `H-` est négatif. - `E-` est supérieure à la moitié de la longueur de la ligne pilote. La ligne pilote (drive line) est une ligne imaginaire, parallèle à l'axe de la broche, située en sécurité à l'extérieur du matériau à fileter. La ligne pilote va du point initial en Z jusqu'à la fin du filetage donnée par la valeur de `Z-` dans la commande. Le pas du filet, ou la longueur du déplacement par tour est donné par la valeur de `P-`. La crête du filet est donnée par la valeur de `I-` , c'est une cote entre la ligne pilote et la surface de la pièce. Une valeur négative de `I-,` indique un filetage externe et une valeur positive, indique un filetage interne. C'est généralement à ce diamètre nominal que le matériau est cylindré avant de commencer le cycle `G76`. La profondeur de la passe initiale est donnée par la valeur de `J-`. La première passe sera à `J-` au delà de la crête du filet. `J-` est positif, même quand `I-` est négatif. La profondeur du filet est donnée par la valeur de `K-`. La dernière passe du filetage sera à `K- au delà` de la crête du filet. `K-` est positif, même quand I`-` est négatif. La dégressivité de la profondeur de passe est donnée par la valeur de `R-`. `R1.0` sélectionne une profondeur de passe constante pour les passes successives du filetage. `R2.0` sélectionne une surface constante. Les valeurs comprises entre 1.0 et 2.0 sélectionnent une profondeur décroîssante mais une surface croîssante. Enfin, les valeurs supérieures à 2.0 sélectionnent une surface décroîssante. Attention: les valeurs inutilement hautes de dégression, demanderont un nombre inutilement important de passes. L'angle de pénétration oblique est donné par la valeur de `Q-` c'est l'angle (en degrés) décrivant de combien les passes successives doivent être décalées le long de l'axe. C'est utilisé pour faire enlever plus de matériau d'un côté de l'outil que de l'autre. Une valeur positive de `Q` fait couper d'avantage le bord principal de l'outil. Typiquement, les valeurs sont 29, 29.5 ou 30 degrés. Le nombre de passes de finition est donné par la valeur de `H-` . Les passes de finition sont des passes additionnelles en fond de filet. Pour ne pas faire de passe de finition, programmer `H0`. Les entrées et sorties de filetage peuvent être programmées côniques avec les valeurs de `E-` et `L-`. `E-` donne la longueur de la partie cônique le long de l'axe. `E0.2` donnera un cône pour le premier et le dernier filet, de 0.2 unités dans le sens du filetage. `L-` est utilisé pour spécifier quelles extrémités du filetage doivent être côniques. Programmer `L0` pour aucune (par défaut), `L1` pour une entrée cônique, `L2` pour une sortie cônique, ou `L3` pour l'entrée et la sortie côniques. L'outil fera une brève pause pour la synchronisation avant chaque passe de filetage, ainsi une gorge de dégagement sera requise à l'entrée, à moins que le début du filetage ne soit après l'extrémité de la pièce ou qu'un cône d'entrée soit utilisé. À moins d'utiliser un cône de sortie, le mouvement de sortie (retour rapide sur X d'origine) n'est pas synchronisé sur la vitesse de broche. Avec une broche lente, la sortie pourrait se faire sur une petite fraction de tour. Si la vitesse de broche est augmentée après qu'un certain nombre de passes ne soient déjà faites, la sortie va prendre une plus grande fraction de tour, il en résultera un usinage très brutal pendant ce nouveau mouvement de sortie. Ceci peut être évité en prévoyant une gorge de sortie, ou en ne changeant pas la vitesse de broche pendant le filetage. Un exemple de programme, `g76.ngc` montre l'utilisation d'un cycle de filetage G76, il peut être visualisé et exécuté sur n'importe quelle machine utilisant la configuration `sim/lathe.ini`. .G76 cycle de filetage[[fig:G76-cycle-de-filetage]] image::images/g76-01.png[] == G80 Révocation des codes modaux[[sec:G80-Revocation-modaux]](((G80 Revocation codes modaux))) Programmer `G80` pour s'assurer qu'aucun mouvement d'axe ne surviendra sans G-code modal. C'est une erreur si: - Des mots d'axes sont programmés quand G80 est actif, sans qu'un G-code modal du groupe 0 ne soit programmé avec les mots d'axes. == Les cycles préprogrammés[[sub:G81-a-G89]](((Cycles preprogrammes))) Les cycles préprogrammés `de G81` à `G89` sont décrit dans cette section. Deux exemples sont donnés plus bas avec la description de `G81.` Tous les cycles préprogrammés sont effectués dans le respect du plan de travail courant. N'importe lequel des six plans de travail peut être choisi. Dans cette section, la plupart des descriptions supposeront que le plan de travail XY est le plan courant. Le comportement reste analogue pour les autres plans de travail et les mots corrects doivent être utilisés. Les mots d'axes rotatifs sont autorisés dans les cycles préprogrammés, mais il est préférable de les omettre. Si les mots d'axes rotatifs sont utilisés, leurs valeurs doivent rester les mêmes que celles de la position courante, de sorte qu'ils ne tournent pas. === Mots communs Tous les cycles préprogrammés utilisent les mots X-, Y-, R-, et Z-. La position de R- (signifiant rétraction) est perpendiculaire au plan de travail courant (axe Z pour le plan XY, axe X pour le plan YZ, axe Y pour le plan XZ, etc.). Quelques cycles préprogrammés utilisent des arguments supplémentaires. === Mots "sticky" Dans les cycles préprogrammés, un nombre est appelé «sticky» (persistante, collant) si, quand le même cycle est répété sur plusieurs lignes de code en colonne, le nombre doit être indiqué la première fois, mais qu'il devient optionnel pour le reste des lignes suivantes. Les nombres «sticky» conservent leur valeur tant qu'ils ne sont pas explicitement programmés avec une nouvelle valeur. La valeur de R est toujours «sticky». En mode de déplacements incrémentaux (G91), les valeurs X-, Y-, est R- sont traitées comme des incréments depuis la position courante, Z est un incrément depuis la position de l'axe Z avant le mouvement impliquant l'axe Z. En mode de déplacements absolus, les valeurs de X-, Y-, R-, et Z- sont des positions absolues dans le système de coordonnées courant. La valeur L- est optionnelle, elle représente le nombre de répétitions. L=0 n'est pas permis. Si les répétitions sont utilisées, elles le sont normalement en mode incrémental, de sorte que la même séquence de mouvements puisse être répétée à plusieurs endroits, égalements espacés, le long d'un ligne droite. En mode de déplacements absolus, L>1 signifie “faire le même cycle au même endroit, plusieurs fois”. L'omission du mot L revient à spécifier L=1. La valeur de L n'est pas “sticky”. === Répétition de cycle Quand L>1 en mode incrémental et XY comme plan courant, les positions X et Y sont déterminées en ajoutant les valeurs X et Y de la commande à celles de la position courante, pour le premier trajet ou ensuite, à celles de la position finale du précédent trajet, pour les répétitions. Ainsi, si vous programmez L10, vous obtiendrez 10 cycles. Le premier cycle sera la distance X, Y depuis la position d'origine. Les positions de R- et Z- ne changent pas durant toutes les répétitions. === Mode de retrait La hauteur du mouvement de retrait à la fin de chaque répétition (appellée “plan de retrait” dans les descriptions suivantes) est déterminée par le mode de retrait: retrait sur la position initiale de Z, si elle est au dessus de la valeur de R- et que le mode de retrait est `G9` 8, OLD_Z, sinon, à la position de R-. Voir la section <> === Erreurs des cycles préprogrammés C'est une erreur si: - Tous les mots X, Y et Z sont manquants durant un cycle préprogrammé. - Un nombre P est requis mais un nombre P négatif est utilisé. - Un nombre L est utilisé mais n'est pas un entier positif. - Un mouvement d'axe rotatif est utilisé durant un cycle préprogrammé. - Une vitesse inverse du temps est activée durant un cycle préprogrammé. - La correction de rayon d'outil est activée durant un cycle préprogrammé. Quand le plan XY est actif, la valeur de Z est “sticky”, et c'est une erreur si: - La valeur de Z est manquante alors qu'un même cycle préprogrammé n'a pas encore été activé. - La valeur de R est inférieure à celle de Z. Si un autre plan est actif, les conditions d'erreur sont analogues à celles du plan XY décrites ci-dessus. === Mouvement préliminaire et Intermédiaire [[sub:Mouvement-preliminaire]] Tout au début de l'exécution d'un cycle préprogrammé, avec le plan courant XY, si la position actuelle de Z est en dessous de la position de retrait R, l'axe Z va à la position R. Ceci n'arrive qu'une fois, sans tenir compte de la valeur de L. En plus, au début du premier cycle et à chaque répétition, un ou deux des mouvements suivants sont faits: . Un déplacement en ligne droite, parallèle au plan XY, vers le position programmée. . Un déplacement en ligne droite, de l'axe Z seul vers la position de retrait R, si il n'est pas déjà à cette position R. Si un autre plan est actif, le mouvement préliminaire et intermédiaire est analogue. === G81 Cycle de perçage[[sub:G81-Cycle-de-percage]](((G81 Cycle de percage))) G81 (X- Y- Z- ) or (U- V- W- ) R- L- Le cycle `G81` est destiné au perçage. . Un mouvement préliminaire, comme décrit ici. <> . Un déplacement de l'axe Z seul à la vitesse programmée, vers la position Z programmée. . Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. *Exemple 1.* Supposons que la position courante soit, X1, Y2, Z3 dans le plan XY, la ligne de codes suivante est interprétée: G90 G81 G98 X4 Y5 Z1.5 R2.8 Le mode de déplacements absolus est appelé (`G90`), le plan de retrait est positionné sur OLD_Z (`G98`), l'appel du cycle de perçage `G81` va lancer ce cycle une fois. La position X deviendra celle demandée, X4. La position de Y deviendra celle demandée, Y5. La position de Z deviendra celle demandée, Z1.5. La valeur de R fixe le plan de retrait de Z à 2.8. La valeur de OLD_Z est 3. Les mouvements suivants vont se produire. . Un mouvement en vitesse rapide, parallèle au plan XY vers X4, Y5, Z3 . Un mouvement en vitesse rapide, parallèle à l'axe Z vers X4, Y5, Z2.8 . Un mouvement en vitesse travail, parallèle à l'axe Z vers X4, Y5, Z1.5 . Un mouvement en vitesse rapide, parallèle à l'axe Z vers X4, Y5, Z3 *Exemple 2.* Supposons que la position courante soit, X1, Y2, Z3 dans le plan XY, la ligne de codes suivante est interprétée: G91 G81 G98 X4 Y5 Z-0.6 R1.8 L3 Le mode de déplacements incrémentaux est appelé (`G91`), le plan de retrait est positionné sur OLD_Z (`G98`), l'appel du cycle de perçage `G81` demande 3 répétitions du cycle. La valeur demandée de X est 4, la valeur demandée de Y est 5, la valeur demandée de Z est -0.6 et le retrait R est à 1.8. La position initiale de X sera 5 (1+4), la position initiale de Y sera 7 (2+5), le plan de retrait sera positionné sur 4.8 (1.8+3) et Z positionné sur 4.2 (4.8-0.6). OLD_Z est à 3. Le premier mouvement en vitesse rapide le long de l'axe Z vers X1, Y2, Z4.8), puisque OLD_Z est inférieur au plan de retrait. La première répétition produira 3 mouvements. . Un déplacement en vitesse rapide, parallèle au plan XY vers X5, Y7, Z4.8 . Un déplacement en vitesse travail, parallèle à l'axe Z vers X5, Y7, Z4.2 . Un déplacement en vitesse rapide, parallèle à l'axe Z vers X5, Y7, Z4.8 La deuxième répétition produira 3 mouvements. La position de X est augmentée de 4 et passe à 9, la position de Y est augmentée de 5 et passe à 12. . Un déplacement en vitesse rapide, parallèle au plan XY vers X9, Y12, Z4.8 . Un déplacement en vitesse travail, parallèle à l'axe Z vers X9, Y12, Z4.2 . Un déplacement en vitesse rapide, parallèle à l'axe Z vers X9, Y12, Z4.8 La troisième répétition produira 3 mouvements. La position de X est augmentée de 4 et passe à 13, la position de Y est augmentée de 5 et passe à 17. . Un déplacement en vitesse rapide, parallèle au plan XY vers X13, Y17, Z4.8 . Un déplacement en vitesse travail, parallèle à l'axe Z vers X13, Y17, Z4.2 . Un déplacement en vitesse rapide, parallèle à l'axe Z vers X13, Y17, Z4.8 === G82 Cycle de perçage avec temporisation[[sub:G82-Cycle-de-percage]](((G82 Cycle de percage avec tempo))) G82 (X- Y- Z- ) or (U- V- W- ) R- L- P- Le cycle `G82` est destiné au perçage. . Un mouvement préliminaire. Comme décrit ici <> . Un déplacement de l'axe Z seul en vitesse programmée, vers la position Z programmée. . Une temporisation de P secondes. . Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. === G83 Cycle de perçage avec débourrage[[sub:G83-Percage-avec-debourrage]](((G83 Cycle de percage avec debourrage))) G83 (X- Y- Z-) or (U- V- W-) R- L- Q- Le cycle `G83` est destiné au perçage profond ou au fraisage avec brise-copeaux. Les retraits, au cours de ce cycle, dégagent les copeaux du trou et fragmentent les copeaux longs (qui sont fréquents lors du perçage dans l'aluminum). Ce cycle utilise la valeur Q qui représente un incrément “delta” le long de l'axe Z. donnera: . Un mouvement préliminaire, comme décrit ici. <> . Un mouvement de l'axe Z seul, en vitesse travail, sur la position la moins profonde entre, un incrément delta, ou la position de Z programmée. . Un mouvement en vitesse rapide au plan de retrait. . Une plongée en vitesse rapide dans le même trou, presque jusqu'au fond. . Répétition des étapes 2, 3 et 4 jusqu'à ce que la position programmée de Z soit atteinte à l'étape 2. . Un mouvement de l'axe Z en vitesse rapide vers le plan de retrait. C'est une erreur si: - La valeur de Q est négative ou égale à zéro. === G84 Cycle de taraudage à droite[[sub:G84-Taraudage-a-droite]](((G84 Cycle de taraudage))) Ce code n'est pas encore implémenté dans EMC2. Il est accepté mais son comportement n'est pas défini. Voir `G33.1` === G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail[[sub:G85-Alesage-retrait-travail]](((G85 Cycle d'alesage))) G85 (X- Y- Z-) or (U- V- W-) R- L- Le cycle `G85` est destiné à l'alésage, mais peut être utilisé pour le perçage ou le fraisage. . Un mouvement préliminaire, comme décrit ici. <> . Un déplacement de l'axe Z seul en vitesse travail, vers la position Z programmée. . Retrait de l'axe Z en vitesse travail vers le plan de retrait. === G86 Cycle d'alésage, arrêt de broche, retrait en vitesse rapide[[sub:G86-Alesage-retrait-rapide]](((G86 Cycle d'alesage))) G86 (X- Y- Z-) or (U- V- W-) R- L- P- Le cycle `G86` est destiné à l'alésage. Ce cycle utilise la valeur P pour une temporisation en secondes. . Un mouvement préliminaire, comme décrit ici. <> . Un déplacement de l'axe Z seul en vitesse travail, vers la position Z programmée. . Une temporisation de P secondes. . L'arrêt de rotation de la broche. . Retrait de l'axe Z en vitesse rapide vers le plan de retrait. . Reprise de la rotation de la broche dans la même direction que précédemment. La broche doit tourner avant le lancement de ce cycle. C'est une erreur si: - La broche ne tourne pas avant que ce cycle ne soit éxécuté. === G87 Alésage inverse[[sub:G87-Back-Boring]](((G87 Alesage inverse))) Ce code n'est pas encore implémenté dans EMC2. Il est accepté mais son comportement n'est pas défini. === G88 Alésage, arrêt de broche, retrait en manuel[[sub:G88-Boring-retrait-manuel]](((G88 Cycle d'alesage))) Ce code n'est pas encore implémenté dans EMC2. Il est accepté mais son comportement n'est pas défini. === G89 Cycle d'alésage, temporisation, retrait en vitesse travail[[sub:G89-Alesage-temporisation]](((G89 Cycle d'alesage))) G89 (X- Y- Z-) or (U- V- W-) R- L- P- Le cycle `G89` est destiné à l'alésage. Il utilise la valeur de P pour une temporisation en secondes. . Un mouvement préliminaire, comme décrit ici. <> . Un déplacement de l'axe Z seul en vitesse travail, vers la position Z programmée. . Temporisation de P secondes. . Retrait de l'axe Z en vitesse travail vers le plan de retrait. == G90, G91: Modes de déplacement[[sec:G90-G91-Set]](((G90 Mode deplacements absolus)))(((G91 Mode deplacements incrementaux))) G90 est le mode Distance Absolu + G91 est le mode Distance Incrémentale L'interprétation du code RS274/NGC peut se faire dans deux modes de déplacements: absolu ou incrémental. Pour se déplacer en mode absolu, programmer `G90`. En mode absolu, les valeurs d'axes X, Y, Z, A, B, C, U, V, W représentent les positions dans le système de coordonnées courant. Les exceptions à cette règle sont décrites dans la section <>. Pour se déplacer en mode incrémental, programmer `G91` . En mode incrémental, les valeurs d'axes représentent un incrément depuis la position courante. == G90.1, G91.1: Mode distance (I, J et K)[[sec:G90.1-G91.1]] Note: Cette fonctionnalité est en cours de développement, elle n'est peut être pas totalement implémentée. G90.1 Mode distance absolute pour les offsets I, J et K. - I et J doivent tous les deux être spécifiés ou une erreur se produira. G91.1 Mode distance incrémentale pour les offsets I, J et K. - Renvoie I, J et K à leur fonctionnement normal. == G92, G92.1, G92.2, G92.3: Décalage d'origine des systèmes de coordonnées[[sec:G92-G92.1-G92.2-G92.3]](((G92)))(((G92.1)))(((G92.2)))(((G92.3))) G92 X- Y- Z- A- B- C- U- V- W- Voir la section <> pour une vision générale des systèmes de coordonnées. Pour donner au point actuel de nouvelles valeurs de coordonnées (sans faire de mouvement), programmer `G92 X- Y- Z- A- B- C- U-, V-, W-`, où les mots d'axes contiennent les valeurs souhaîtées. Au moins un mot d'axe est obligatoire, les autres sont optionnels. Si il n'y a pas de mot d'axe pour un axe donné, les coordonnées de cet axe resteront inchangées. C'est une erreur si: - Tous les mots d'axes sont omis. Quand `G92` est exécuté, les origines de tout les systèmes de coordonnées sont déplacées. Elles sont déplacées de la même valeur que le point contrôlé courant l'est, dans le système de coordonnées courant, pour prendre les valeurs spécifiées dans la ligne du G92. Les origines de tous les systèmes de coordonnées sont décalées de la même valeur. Un exemple: supposons que le point courant soit à X=4 et qu'aucun décalage G92 ne soit actif. La ligne G92 X7 est programmée, toutes les origines seront décalées de -3 en X, ce qui fera que le point courant deviendra X=7. Ce -3 est sauvegardé dans le paramètre 5211. Le fait d'être en mode de déplacement incrémental est sans effet sur l'action de `G92`. Des décalages G92 peuvent déjà être actifs quand `G92` est appelé. Si c'est le cas, ils sont remplacés par le nouveau décalage, de sorte que le point courant prenne la valeur spécifiée. Pour repasser un décalage d'axe à zéro, programmer `G92.1` ou `G92.2`. `G92.1` positionne les paramètres 5211 à 5219 à zéro, tandis que `G92.2` conserve leurs valeurs courantes inchangées. Pour positionner des valeurs de décalage d'axes aux valeurs données dans les paramètres 5211 à 5219, programmer `G92.3`. Vous pouvez positionner les décalages d'axes dans un programme et ré-utiliser les mêmes dans un autre programme. Programmer `G92` dans le premier programme, ce qui positionnera les paramètres 5211 à 5219. Ne pas utiliser G92.1 dans la suite du premier programme. Les valeurs des paramètres seront enregistrées lors de la sortie du premier programme et rétablies au chargement du second programme. Utiliser `G92.3` vers le début du deuxième programme, ce qui restaurera les décalages d'axes enregistrés par le premier. EMC2 enregistre les décalages G92 et les réutilise au lancement du programme suivant. Il y a deux moyens de contourner celà, il est possible de programmer G92.1 pour effacer les décalages, ou de programmer G92.2 pour que les décalages enregistrés ne soient pas appliqués. == G93, G94, G95: Choix des modes de vitesse[[sec:G93-G94-G95-Set]](((G93 Mode de vitesse)))(((G94 Mode de vitesse)))(((G95 Mode de vitesse))) G93 est le mode à Temps Inverse G94 est Unités par Minute en mode G95 est Unités par mode Révolution. Trois modes de vitesse sont reconnus: unités par minute, inverse du temps et unités par tour. Programmer G94 pour passer en mode unités par minute. Programmer G93 pour passer en mode inverse du temps. Programmer G95 pour passer en mode unités par tour. Dans le mode vitesse en unités par minute, le mot F est interprété pour indiquer que le point contrôlé doit se déplacer à un certain nombre de pouces par minute, de millimètres par minute, ou de degrés par minute, selon l'unité de longueur choisie pour les axes et quels types d'axes doivent se déplacer. Dans le mode vitesse en unités par tour, le mot F est interprété pour indiquer que le point contrôlé doit se déplacer à un certain nombre de pouces par tour de broche, de millimètres par tour, selon l'unité de longueur utilisée et quels axes doivent être déplacés. Dans le mode vitesse inverse du temps, le mot F signifie que le mouvement doit être terminé en [1 divisé par la valeur de F] minutes. Par exemple, si la valeur de F est 2.0, les mouvements doivent être terminés en 1/2 minute. Quand le mode vitesse inverse du temps est actif, le mot F doit apparaître sur chaque ligne contenant un mouvement G1, G2, ou G3. Les mots F qui sont sur des lignes sans G1, G2, ou G3 sont ignorés. Être en mode vitesse inverse du temps est sans effet sur les mouvements G0 (vitesse rapide). C'est une erreur si: - Le mode vitesse inverse du temps est actif et qu'une ligne avec G1, G2, ou G3 (explicitement ou implicitement) n'a pas de mot F. - Une nouvelle vitesse n'a pas été spécifiée après un passage en G94 ou G95. == G96, G97: Modes de contrôle de la broche(((mode)))[[sec:G96-G97-Broche]](((G96 Vitesse de coupe constante)))(((G97 Vitesse de coupe en tr/mn))) G96 D[vitesse de broche max] S[unités par minute] est constante Speed Mode Surface + G97 est le mode RPM Deux modes de contrôle de la broche sont reconnus: tours par minute, et vitesse de coupe constante. Programmer G96 D- S- pour valider une vitesse de coupe constante de S pieds par minute si G20 est actif, ou mètres par minute si G21 est actif. La vitesse de rotation maximale est indiquée par la valeur de D- en tours par minute. Lorsque vous utilisez G96, s'assurer que x0 dans le système de coordonnées en cours (y compris les compensations et les longueurs d'outils) est le centre de rotation ou EMC ne donnera pas la vitesse de broche désirée. G96 n'est pas affectée par rayon ou diamètre de mode. Programmer G97 pour activer le mode vitesse en tours par minute. C'est une erreur si: - S n'est pas spécifié avec G96. - Une vitesse est spécifiée en mode G96 et la broche ne tourne pas. == G98, G99: Options du plan de retrait[[sec:G98-G99-Set]](((G98 Retrait sur R)))(((G99 Retrait position initiale))) G98 Retract à la position de cet axe se trouvait juste avant cette série d'un ou plusieurs cycles contigus en conserve a été commencé. + G99 Retract à la position spécifiée par le mot R du cycle fixe. Quand la broche se rétracte pendant les cycles préprogrammés, il existe deux options pour indiquer comment elle se rétracte: (1) Retrait perpendiculaire au plan de travail courant jusqu'à la position indiquée par le mot R, ou (2) Retrait perpendiculaire au plan de travail courant jusqu'à la position qui était celle de cet axe juste avant le début du cycle préprogrammé (à moins que cette position ne soit inférieure à celle indiquée par le mot R, auquel cas, c'est cette dernière qui serait utilisée. Pour utiliser l'option (1), programmer `G99`. Pour utiliser l'option (2), programmer `G98` . Ne pas oublier que le mot R a différentes significations en mode de déplacement absolu et en mode de déplacement incrémental. La "première" (G98) plan est remis à zéro tous les modes de mouvement temps de cycle est abandonné, que ce soit explicitement (G80) ou implicitement (aucun code de mouvement ce n'est pas un cycle). Commutation entre les modes du cycle (disons G81 au G83) ne réinitialise pas le «initiale» d'avion. Il est possible de basculer entre le G98 et G99 au cours d'une série de cycles. = M Codes == M0, M1, M2, M30, M60 Arrêts de programme[[sec:M0-M1-M2]] (((M0 Arret de programme)))(((M1 Arret optionnel de programme))) (((M2 Fin de programme)))(((M30 Fin de programme)))(((M60 Fin de programme))) Pour stopper temporairement un programme en cours (quelle que soit la position du bouton d'arrêt facultatif), programmer M0. EMC2 reste en mode automatique afin de MDI et d'autres actions manuelles ne sont pas activés. Pour stopper temporairement un programme en cours (mais seulement si le bouton d'arrêt optionnel est activé), programmer M1. EMC2 reste en mode automatique afin de MDI et d'autres actions manuelles ne sont pas activés. Il est permis de programmer `M0` et `M1` en mode données manuelles (MDI), mais l'effet ne sera probablement pas perceptible, puisque le comportement normal en mode MDI est de s'arrêter, de toute façon, à la fin de chaque ligne. Pour procéder à l'échange de porte-pièce avec le chargeur de pièces et stopper temporairement un programme en cours (quel que soit le réglage du bouton d'arrêt facultatif), programmer M60. Si un programme est stoppé par M0, M1, ou M60, en appuyant sur le bouton de départ cycle, le programme reprend à la ligne suivante. Pour finir un programme, programmer `M2`. Pour changer le porte-pièce du chargeur et finir un programme, programmer `M30`. Ces deux commandes produisent les effets suivants: . Changement du mode automatique au mode MDI. . Les décalages d'axes sont mis à zéro (comme avec `G92.2` ) et les décalages d'origine sont mis aux valeurs par défaut (comme avec `G54`). . Le plan de travail actif devient XY (comme avec `G17`). . Le mode de déplacement devient absolu (comme avec `G90`). . La vitesse travail passe en unités par minute (comme avec `G94`). . Les correcteurs de vitesse sont activés (comme avec `M48`). . Les compensations d'outil sont désactivées (comme avec `G40`). . La broche est arrêtée (comme avec `M5`). . Le mode mouvement courant devient G1 (comme avec `G1`). . L'arrosage est arrêté (comme avec `M9`). Plus aucune ligne de code RS274/NGC ne sera exécutée après exécution de la commande M2 ou M30. Presser le départ cycle relance le programme au début du fichier. == M3, M4, M5 Contrôle de broche[[sec:M3-M4-M5]] (((M3 Broche sens horaire)))(((M4 Broche sens anti-horaire)))(((M5 Arret de broche))) Pour démarrer la broche en sens horaire à la vitesse "S", programmer `M3`. + Pour démarrer la broche en sens anti-horaire à la vitesse "S", programmer `M4`. + Pour arrêter la rotation de la broche, programmer `M5`. Il est permis d'utiliser `M3` ou `M4` si la vitesse de broche est à zéro. Si cela est fait (ou si le bouton de correction de vitesse est activé mais mis à zéro), la broche ne tournera pas. Si, plus tard la vitesse de broche est augmentée (ou que le correcteur de vitesse est augmenté), la broche va se mettre en rotation. Il est permis d'utiliser `M3` ou `M4` quand la broche est déjà en rotation ou d'utiliser `M5` quand la broche est déjà arrêtée. == M6 Appel d'outil[[sec:M6-Appel-d-outil]](((M6 Appel d'outil))) === Changement D'Outil Manuel Si le hal_manualtoolchange composant HAL est chargé, M6 va arrêter la broche et invite l'utilisateur à changer l'outil. Pour plus d'informations sur hal_manualtoolchange voir la section (<>) === Changeur D'Outil Pour changer l'outil actuellement dans la broche par un autre, nouvellement sélectionné en utilisant le mot T, voir la section (<>), programmer `M6`. Un changement d'outil complet donnera: - La rotation de la broche est arrêtée. - L'outil qui a été sélectionné (par le mot T sur la même ligne ou sur n'importe quelle ligne après le changement d'outil précédent), sera placé dans la broche. Le mot T est un nombre entier indiquant le numéro du slot d'outil dans le carrousel (non son index). - Si l'outil sélectionné n'est pas déjà dans la broche avant le changement d'outil, l'outil qui était dans la broche (s'il y en avait un) va être replacé dans son emplacement dans le chargeur. - Les coordonnées des axes seront arrêtées dans les mêmes positions absolues qu'elles avaient avant le changement d'outil (mais la broche devra peut-être être réorientée). - Aucune autre modification ne sera apportée. Par exemple, l'arrosage continue à couler durant le changement d'outil à moins qu'il ne soit arrêté par `M9`. - La longueur d'outil n'est pas modifié, utilisez G43 pour changer la longueur d'outil. Le changement d'outil peut inclure des mouvements d'axes pendant son exécution. Il est permis (mais pas utile) de programmer un changement d'outil avec le même outil que celui qui est déjà dans la broche. Il est permis également, si il n'y a pas d'outil dans le slot sélectionné, dans ce cas, la broche sera vide après le changement d'outil. Si le slot zéro a été le dernier sélectionné, il n'y aura pas d'outil dans la broche après le changement. == M7, M8, M9 Contrôle d'arrosage[[sec:M7-M8-M9]] (((M7 Goutelettes)))(((M8 Arrosage)))(((M9 Arret d'arrosages))) Pour activer l'arrosage par brouillard (gouttelettes), programmer `M7`. + Pour activer l'arrosage fluide, programmer `M8`. + Pour arrêter tous les arrosages, programmer `M9`. Il est toujours permis d'utiliser une de ces commandes, que les arrosages soient arrêtés ou non. == M48, M49 Contrôle des correcteurs de vitesse[[sec:M48-Deux-Correcteur]][[sec:M49-Ni-Correcteur]] (((M48, M49 Controle correcteur de vitesse de deux autoriser/inhiber))) Pour autoriser les potentiomètres de corrections de vitesses de broche et celui de vitesse travail, programmer `M48`. Pour les inhiber tous les deux, programmer `M49`. Voir la section <> pour plus de détails. Il est permis d'autoriser ou d'inhiber ces potentiomètres quand ils sont déjà autorisés ou inhibés. Ces potentiomètres peuvent aussi être activés individuellement en utilisant les commandes M50 et M51 comme décrit dans les sections <> et <>. == M50 Contrôle du correcteur de vitesse travail[[sec:M50-Avance-Correcteur]](((M50 Controle correcteur travail))) Pour autoriser le potentiomètre de correction de vitesse travail, programmer `M50` ou `M50 P1`. Pour inhiber ce potentiomètre, programmer `M50 P0`. Quand il est inhibé, le potentiomètre de correction de vitesse n'a plus aucune influence et les mouvements seront exécutés à la vitesse de travail programmée. (à moins que ne soit actif un correcteur de vitesse adaptative). == M51 Contrôle du correcteur de vitesse broche[[sec:M51-Broche-Correcteur]](((M51 Controle correcteur broche))) Pour autoriser le potentiomètre de correction de vitesse de la broche, programmer `M51` ou `M51 P1`. Pour inhiber ce potentiomètre programmer `M51 P0`. Quand il est inhibé, le potentiomètre de correction de vitesse de broche n'a plus aucune influence, et la broche tournera à la vitesse programmée, (en utilisant le mot S comme décrit dans la section <>). == M52 Contrôle de vitesse adaptative[[sec:M52-Controle-vitesse-adaptative]](((M52 Controle vitesse adaptative))) Pour utiliser une vitesse adaptative, programmer `M52` ou `M52 P1`. Pour stopper l'utilisation d'une vitesse adaptative, programmer `M52 P0`. Quand la vitesse adaptative est utilisée, certaines valeurs externes sont utilisées avec les correcteurs de vitesse de l'interface utilisateur et les vitesses programmées pour obtenir la vitesse travail. Dans EMC2, la HAL pin `motion.adaptive-feed` est utilisée dans ce but. Les valeurs de `motion.adaptive-feed` doivent être dans une échelle comprise entre 0 (pas de vitesse) et 1 (pleine vitesse). == M53 Contrôle de coupure de vitesse[[sec:M53-Controle-coupure-vitesse]](((M53 Controle coupure vitesse))) Pour autoriser le bouton de coupure de vitesse, programmer `M53` ou `M53 P1`. Pour inhiber ce bouton programmer `M53 P0` . Autoriser la coupure de vitesse permet d'interrompre les mouvements par le biais d'une coupure de vitesse. Dans EMC2, la HAL pin `motion.feed-hold` est utilisée pour cette fonctionnalité. Une valeur de 1 provoque un arrêt des mouvements (si `M53` est actif). == M61 Ajuste le numéro de l'outil courant[[sec:M61-Ajuste-numero-outil]](((M61 Ajuste numero outil))) Pour corriger le numéro de l'outil courant, en mode MDI ou après un changement manuel d'outil programmer M61 Qxx dans la fenêtre de données manuelles. Au démarrage d'EMC2 avec un outil dans la broche, il est possible ainsi d'ajuster le numéro de l'outil courant sans faire de changement d'outil. C'est une erreur si: - Qxx n'est pas égal où supérieur à 0 == M62 à M65 Contrôle de sorties numériques[[sec:M62-a-M65-Controle-sorties-num]](((M62 Controle sorties num))) Pour contrôler un bit de sortie digitale, programmer `M- P-` , où le mot M doit être compris entre 62 et 65, et le mot P compris entre 0 à une valeur par défaut de 3. Si nécessaire, le nombre des I/O peut être augmentée en utilisant le paramètre num_dio lors du chargement du contrôleur de mouvement. Voir le manuel de l'intégrateur de configuration Section EMC et la section de HAL pour plus d'informations. - Le P-parole précise le nombre de sortie numérique. M62::(((M62))) Activer la sortie digitale synchronisée avec un mouvement. M63::(((M63))) Désactiver la sortie digitale synchronisée avec un mouvement. M64::(((M64))) Activer immédiatement la sortie digitale. M65::(((M65))) Désactiver immédiatement la sortie digitale. Le M62 M63 & commandes seront mises en attente. Commandes ultérieures se référant au nombre de sortie sera de même remplacer les paramètres âgées. Plus d'un changement de sortie peut être spécifiée par l'émission de plus d'un M62/M63 commande. Le changement réel des sorties spécifiées qui va se passer au début de la commande prochaine motion. S'il n'ya pas de commande de mouvement ultérieur, la sortie change en attente n'aura pas lieu. Il est préférable de toujours programmer un mouvement g-code (G0, G1, etc) juste après le M62/63. M64 M65 et produire immédiatement, car ils sont reçus par le contrôleur de mouvement. Ils ne sont pas synchronisés avec le mouvement, et ils vont casser le mélange. == M66 Contrôle d'entrée digitale[[sec:M66-Controle-entrees-num]](((M66 Controle entrees num))) Pour contrôler un bit d'entrée digitale, programmer `M66 P- E- L- Q-`, où le P-parole et les gammes E-parole de 0 à 3. Si nécessaire, le nombre des I/O peut être augmentée en utilisant le paramètre num_dio ou lors num_aio de charger le contrôleur de mouvement. Voir le manuel de l'intégrateur, Section de configuration, EMC et HAL paragraphe, pour plus d'informations. Un seul des mots P ou E doit être présent. C'est une erreur si ils sont présents tous les deux. M66::(((M66))) Attente d'une entrée - Le mot P spécifie le numéro d'une entrée digitale. - Le mot E spécifie le numéro d'une entrée analogique. - Le mot L spécifie le type d'attente: 0:: WAIT_MODE_IMMEDIATE - pas d'attente, retour immédiat. La valeur courante de l'entrée est stockée dans le paramètre #5399 1:: WAIT_MODE_RISE - attente d'un front montant sur l'entrée. 2:: WAIT_MODE_FALL - attente d'un front descendant sur l'entrée. 3:: WAIT_MODE_HIGH - attente d'un état logique HIGH sur l'entrée. 4:: WAIT_MODE_LOW - attente d'un état logique LOW sur l'entrée. - Le mot Q spécifie le timeout pour l'attente. Si le timeout est dépassé, l'attente est interrompue et la variable #5399 positionnée à -1. - Le type 0 est le seul autorisé pour une entrée analogique. M66 attends un nouvel événement sur l'entrée ou l'arrêt de l'exécution du programme, jusqu'à ce que l'événement sélectionné (ou le timeout programmé) ne survienne. C'est une erreur de programmer une valeur de timeout à 0 dans tous les types, sauf le type 0. C'est également une erreur de programmer M66 avec les deux mots, un mot P et un mot E (ce qui reviendrait à sélectionner à la fois une entrée analogique et une digitale). == M67 Analog Output[[sec:M67-Analog-Output]](((M67 Analog Motion Output Control))) To control an analog output synchronized with motion, program `M67 E- Q-`, where the E word ranges from 0 to the default maximum of 3 and Q is the value to set. The number of I/O can be increased by using the num_aio parameter when loading the motion controller. See the "EMC2 and HAL" chapter in the Configuration Section of the Integrator Manual for more information on the Motion Controller. M67 functions the same as M62-63. See the M62-65 section for information about queuing output commands synchronized with motion. == M68 Analog Output[[sec:M68-Analog-Output]](((M68 Analog Aux Output Control))) To control an analog output immediately, program `M68 E- Q-, ` where the E word ranges from 0 to the default maximum of 3 and Q is the value to set. The number of I/O can be increased by using the num_aio parameter when loading the motion controller. See the "EMC2 and HAL" chapter in the Configuration Section of the Integrator's Manual for more information on the Motion Controller. M68 functions the same as M64-65. See the M62-65 section for information about immediate output commands. == M100 à M199 Commandes définies par l'utilisateur[[sec:M100-a-M199]](((M100..199 Mcodes utilisateur))) Pour invoquer une commande définie par l'utilisateur, programmer M1xx P- Q- où P et Q sont facultatifs. Le programme externe `` M1nn'', qui doit se trouver dans le répertoire pointé par la variable [DISPLAY] PROGRAM_PREFIX du fichier ini, est exécuté avec les valeurs P et Q comme étant ses deux arguments. L'exécution du fichier G-code courant passe en pause jusqu'à ce que le programme invoqué soit terminé. Le message d'erreur «M code inconnu» signifie que: - La commande spécifiée n'existe pas. - Le fichier n'est pas exécutable. Exemple: dans un programme g-code, on doit ouvrir et fermer un mandrin automatique via une broche du port parallèle, on appellera respectivement M101 pour ouvrir le mandrin et M102 pour le fermer. Les deux scripts bash correspondants, appelés M101 et M102 seront créés avant le lancement d'EMC2 puis rendus exécutables, par exemple par un click droit puis propriétés -> permissions -> Exécution. M101 (nom de fichier) #!/bin/bash # ce fichier met la broche 14 du port à 1 pour ouvrir le mandrin automatique halcmd setp parport.0.pin-14-out True exit 0 M102 (nom de fichier) #!/bin/bash # ce fichier met la broche 14 du port à 0 pour fermer le mandrin automatique halcmd setp parport.0.pin-14-out False exit 0 To pass a variable to a M1nn file you use the P and Q option like this: M100 P123.456 Q321.654 In your M100 file it might look like this: #!/bin/sh voltage=$1 feedrate=$2 halcmd setp thc.voltage $voltage halcmd setp thc.feedrate $feedrate exit 0 = O Codes [[cha:O-Codes]](((O Codes))) Les O-codes permettent le contrôle de flux dans les programmes NC. Chaque block est associé à une adresse, qui est la valeur utilisée après le O. Il faut prendre soin de bien faire correspondre les adresses des codes O. Le comportement est indéfini si: - D'autres mots sont utilisés sur une ligne contenant un mot O. - Un commentaire est utilisé sur une ligne contenant un code O. == Sous-programmes: "sub", "endsub", "return", "call"(((sub)))(((endsub)))(((return)))(((call))) Les sous-programmes s'étendent d'un `O- sub` à un `O- endsub`. Les lignes, à l'intérieur du sous-programme (le corps du sous-programme), ne sont pas exécutées dans l'ordre, mais elles sont exécutées à chaque fois que le sous-programme est appelé avec un `O-call`. O100 sub (subroutine to move to machine home) G0 X0 Y0 Z0 O100 endsub (many intervening lines) O100 call À l'intérieur d'un sous-programme, `O- return` peut être exécuté, pour retourner immédiatement au code appelant, comme si `O- endsub` avait été rencontré. `O- call` peut prendre jusqu'à 30 arguments optionnels, qui sont passés au sous-programme comme `#1`, `#2` , ..., #N. Les paramètres de #N+1 à #30 ont la même valeur dans le contexte de l'appel. Au retour du sous-programme, les valeurs des paramètres #1 jusqu'à #30 (quel que soit le nombre d'arguments) sont restaurés aux valeurs qu'ils avaient avant l'appel. Parce que «`1 2 3`» est analysé comme le nombre 123, les paramètres doivent être placés entre crochets. L'appel de sous-programme suivant, s'effectue avec 3 arguments: O200 call [1] [2] [3] Les corps de sous-programme ne peuvent pas être imbriqués. Ils ne peuvent être appelés qu'après avoit été définis. Ils peuvent être appelés depuis d'autres fonctions et peuvent s'appeler eux même récursivement, s'il est judicieux de le faire. Le niveau maximum d'imbrication des sous-programmes est de 10. Les sous-programmes n'ont pas de “valeur de retour”, mais ils peuvent changer la valeur des paramètres au dessus de #30 et ces changements sont visibles depuis le code appelant. Les sous-programmes peuvent aussi changer la valeur des paramètres nommés globaux. == Boucles: "do", "while", "endwhile", "break", "continue"(((Looping: do, while, endwhile, break, continue))) La boucle «while» a deux structures possibles: while/endwhile et do/while. Dans chaque cas, la boucle est quittée quand la condition du «while» devient fausse. (dessine la forme d'une dent de scie) F100 #1 = 0 O101 while [#1 lt 10] G1 X0 G1 Y[#1/10] X1 #1 = [#1+1] O101 endwhile À l'intérieur d'une boucle while, `O- break`, quitte immédiatement la boucle et `O- continue`, saute immédiatement à la prochaine évaluation de la condition du `while`. Si elle est vraie, la boucle recommence au début. Si elle est fausse, la boucle est quittée. == Conditionnel: "if", "else", "endif"(((Conditional: if, else, endif))) Le `if` conditionnel exécute un groupe d'instructions si sa condition est vraie et un autre groupe si elle est fausse. (Ajuste la vitesse travail en fonction d'une variable) O102 if [#2 GT 5] F100 O102 else F200 O102 endif == Répétition: "Repeat"(((Repeat))) La répétition «repeat», exécutera les blocs contenus entre «repeat» et «endrepeat» le nombre de fois spécifié entre crochets. L'exemple suivant montre comment usiner une séries de 5 formes diagonales commençant à la position courante. (Usine 5 formes diagonales) G91 (Incremental mode) O103 repeat [5] ... (insert milling code here) G0 X1 Y1 (diagonal move to next position) O103 endrepeat G90 (Absolute mode) == Indirection L'adresse de O- peut être donnée par un paramètre ou un calcul. O[#101+2] call == Calcul des valeurs dans les mots O Dans les mots O-, les paramètres (section <>), les expressions (section <>), les opérateurs binaires (section <>), et les fonctions (tableau <>), sont particulièrement intéressants. == Appel de fichiers (((Appel de fichiers))) Pour appeler un fichier par son nom, celui-ci doit contenir un «sub» et un «endsub». Le fichier appelé doit se trouver dans le répertoire pointé par la variable PROGRAM_PREFIX du fichier ini. o call (a named file) or o123 call (a number file) Dans le fichier appelé doit se touver le «sub» et le «endsub» correspondant à l'appel. Le fichier doit être un fichier valide. Exemple: myfile.ngc o sub ... o endsub M2 = Autres Codes == F: Réglage de la vitesse travail[[sec:F-vitesse]] Pour régler la vitesse d'avance, programmer `F-`. L'application de la vitesse est telle que décrite dans la section <>, à moins que le mode vitesse inverse du temps ne soit actif, dans ce cas, la vitesse est telle que décrite dans la section <>. == S: Réglage de la vitesse de rotation de la broche[[sec:S-broche]] Pour régler la vitesse en tours par minute (tr/mn) de la broche, programmer `S-`. La broche va tourner à cette vitesse quand elle sera programmée pour tourner. Il est permis de programmer un mot S que la broche tourne ou non. Si le potentiomètre de correction de vitesse broche est autorisé et n'est pas positionné sur 100%, la vitesse de broche sera différente de celle programmée. Il est permis de programmer S0, la broche ne tournera pas. C'est une erreur si: - La valeur de S est négative. Comme décrit dans la section <>, si un `cycle préprogrammé G84` (taraudage) est actif et que les potentiomètres de vitesse et d'avance sont autorisés, celui qui a le réglage le plus bas sera utilisé. La vitesse de rotation et d'avance resterons synchronisées. Dans ce cas, la vitesse peut différer de celle programmée, même si le potentiomètre de correction de vitesse travail est sur 100%. == T: Choix de l'outil[[sec:T-Selectionnez-Tool]] Pour sélectionner un outil, programmer `T-`, où la valeur de T correspond au numéro du slot d'outil dans le carrousel. L'outil ne sera appelé et changé que quand un `M6` sera programmé (voir la section <>). Le mot T peut apparaitre sur la même ligne que le `M6` ou sur une ligne précédente. Il est permis, mais normalement inutile, qu'un mot T apparaisse à plus de deux lignes avant, sans changement d'outil. Le carrousel peut bouger, seulement le plus récent mot T ne prendra effet qu'au prochain changement d'outil. Il est permis de programmer `T0`, aucun outil ne sera sélectionné. C'est utile pour avoir la broche vide. C'est une erreur si: - Un valeur négative de T est utilisée. - Une valeur de T supérieure au nombre de slot d'outils dans le carrousel est utilisée. Sur certaines machines, le carrousel se déplace lorsque le mot T est programmé, avec l'usinage en cours. Sur ces machines, programmer T plusieurs lignes de texte avant le changement d'outil permet de gagner du temps. Une pratique de programmation courante pour ces types de machines, consiste à placer le mot T pour le prochain outil sur la ligne suivant le changement d'outil. Cela laisse au carrousel tout le temps pour se positionner. Se déplace rapide après une T ne sera pas diffusée sur le preview AXIS qu'après un mouvement d'alimentation. Il s'agit pour les machines qui Voyage de longues distances pour le changement l'outil comme un tour. Cela peut être très déroutant au premier abord. Pour activer cette fonction pour le programme de changement d'outil en cours un G1 sans bouger après l'T. == Commentaires[[sec:Commentaires]](((commentaires))) Un ensemble de caractères et espaces blancs entre parenthèses est un commentaire. Une parenthèse ouvrante débute toujours un commentaire. Le commentaire se termine à la première parenthèse fermante trouvée. Si une parenthèse ouvrante est trouvée sur une ligne, une parenthèse fermante doit être également rencontrée avant la fin de la ligne. Les commentaires ne peuvent pas être imbriqués, une erreur sera signalée si une parenthèse ouvrante est rencontrée après le début d'un commentaire et avant la fin d'un commentaire. Voici un exemple de ligne de commentaire: `G80 M5 (arret du mouvement)` Les commentaires sont seulement informatifs, ils n'ont aucune influence sur la machine. === Messages[[sub:Messages]] Un commentaire contient un message si `MSG` apparaît après la parenthèse ouvrante, et avant tout autre caractère. Les variantes de `MSG` qui incluent un espace blanc et des minuscules sont autorisées. Le reste du texte avant la parenthèse fermante est considéré comme le message. Les messages sont affichés sur la visu de l'interface utilisateur. Les commentaires ne contenant pas de message ne sont pas affichés. === Enregistrement des mesures[[sub:Log-des-mesures]] Un commentaire peut aussi être utilisé pour spécifier le fichier de log des résultats des mesures faites au palpeur avec G38.x . Voir la section <>. === Log général[[sub:Log-general]] ==== (LOGOPEN,filename) Ouvre le fichier de log “filename”. Si le fichier existe déjà, il sera tronqué. ==== (LOGAPPEND,filename) Ouvre le fichier de log “filename”. Si le fichier existe déjà, il sera ajoutées. ==== (LOGCLOSE) Si le fichier est ouvert, il sera fermé. ==== (LOG,…) Le message “…” est étendu comme décrit plus loin, il est écrit dans le fichier de log si il est ouvert. === Messages de déboguage [[sec:Messages-deboguage]] Les commentaires comme: `(debug, reste du commentaire)` sont traités de la même façon que ceux avec `(msg, reste du commentaire)` avec l'ajout de possibilités spéciales pour les paramètres. Les commentaires comme: `(print, reste du commentaire)` vont directement sur la sortie stderr avec des possibilités spéciales pour les paramètres. === Paramètres dans les commentaires Dans les commentaires avec DEBUG, PRINT et LOG, les valeurs des paramètres dans le message sont étendues. Par exemple: pour afficher une variable nommée globale sur la sortie stderr (la fenêtre de la console par défaut) ajouter une ligne au g-code comme: (print,diamètre fraise 3 dents = #<_troisdents_dia>) À l'intérieur de ces types de commentaires, les séquences comme `#123` sont remplacées par la valeur du paramètre 123. Les séquences comme `#` sont remplacées par la valeur du paramètre nommé. Rappelez vous que les espaces dans les noms des paramètres nommés sont supprimés, `#` est équivalent à `#`.