Newer
Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
It is an error if:
* All axis words are omitted.
* The spindle is not turning when this command is executed
* The requested linear motion exceeds machine velocity limits
due to the spindle speed
[[gcode:g33.1]]
== G33.1 Rigid Tapping
(((G33.1 Rigid Tapping)))
----------------
G33.1 X- Y- Z- K- I- $-
----------------
* 'K' - distance per revolution
* 'I' - optional spindle speed multiplier for faster return move
* '$' - optional spindle selector
[WARNING]
For Z only tapping preposition the XY location prior to calling G33.1 and only
use a Z word in the G33.1. If the coordinates specified are not the current
coordinates when calling G33.1 for tapping the move will not be along the Z axis
but will be a coordinated, spindle-synchronized move from the current location
to the location specified and back.
For rigid tapping (spindle synchronized motion with return),
code 'G33.1 X- Y- Z- K-' where 'K-' gives the distance moved
for each revolution of the spindle.
A rigid tapping move consists of the following sequence:
. A move from the current coordinate to the specified coordinate, synchronized
with the selected spindle at the given ratio and starting from the
current coordinate with a spindle index pulse.
. When reaching the endpoint, a command to reverse the spindle, and speed up
by a factor set by the multiplier (e.g., from clockwise to counterclockwise).
. Continued synchronized motion beyond the specified end coordinate
until the spindle actually stops and reverses.
. Continued synchronized motion back to the original coordinate.
. When reaching the original coordinate,
a command to reverse the spindle a second time
(e.g., from counterclockwise to clockwise).
. Continued synchronized motion beyond the original coordinate
until the spindle actually stops and reverses.
. An *unsynchronized* move back to the original coordinate.
Spindle-synchronized motions wait for spindle index,
so multiple passes line up.'G33.1' moves end at the original coordinate.
All the axis words are optional, except that at least one must be used.
.G33.1 Example
[source,{ngc}]
----
G90 (set absolute mode)
G0 X1.000 Y1.000 Z0.100 (rapid move to starting position)
S100 M3 (turn on the spindle, 100 RPM)
G33.1 Z-0.750 K0.05 (rigid tap a 20 TPI thread 0.750 deep)
M2 (end program)
----
* See <<gcode:g90-g91,G90>> & <<gcode:g0,G0>> & <<mcode:m2-m30,M2>> sections for more information.
It is an error if:
* All axis words are omitted.
* The spindle is not turning when this command is executed
* The requested linear motion exceeds machine velocity limits
due to the spindle speed
[[gcode:g38]]
== G38.n Straight Probe
(((G38.n Probe)))
----
G38.n axes
----
* 'G38.2' - probe toward workpiece, stop on contact, signal error if failure
* 'G38.3' - probe toward workpiece, stop on contact
* 'G38.4' - probe away from workpiece, stop on loss of contact, signal error if failure
* 'G38.5' - probe away from workpiece, stop on loss of contact
[IMPORTANT]
You will not be able to use a probe move until your
machine has been set up to provide a probe input signal.
The probe input signal must be connected to 'motion.probe-input' in a .hal file.
G38.n uses motion.probe-input to determine when the probe has made (or lost) contact.
TRUE for probe contact closed (touching), FALSE for probe contact open.
Program 'G38.n axes' to perform a straight probe operation.
The axis words are optional, except that at least one of them must be used.
The axis words together define the destination point that the probe will move towards,
starting from the current location. If the probe is not tripped before the destination
is reached G38.2 and G38.4 will signal an error.
The tool in the spindle must be a probe or contact a probe switch.
In response to this command, the machine moves the controlled point
(which should be at the center of the probe ball) in a straight line at the
current <<sec:set-feed-rate,feed rate>> toward the programmed point.
In inverse time feed mode, the feed rate is such that the whole motion
from the current point to the programmed point would take the specified time.
The move stops (within machine acceleration limits)
when the programmed point is reached,
or when the requested change in the probe input takes place,
whichever occurs first.
After successful probing, parameters #5061 to #5069 will be set to the
X, Y, Z, A, B, C, U, V, W coordinates of the location of the controlled point
at the time the probe changed state (in the current work coordinate system).
After unsuccessful probing, they are set to the coordinates of the programmed point.
Parameter 5070 is set to 1 if the probe succeeded and 0 if the probe failed.
If the probing operation failed, G38.2 and G38.4 will signal an error
by posting an message on screen if the selected GUI supports that.
And by halting program execution.
A comment of the form '(PROBEOPEN filename.txt)' will open
'filename.txt' and store the 9-number coordinate consisting of
XYZABCUVW of each successful straight probe in it.
The file must be closed with '(PROBECLOSE)'. For more information
see the <<gcode:comments, Comments>> Section.
An example file 'smartprobe.ngc' is included (in the examples directory)
to demonstrate using probe moves to log to a file the coordinates of a part.
The program 'smartprobe.ngc' could be used with 'ngcgui' with minimal changes.
It is an error if:
* the current point is the same as the programmed point.
* no axis word is used
* cutter compensation is enabled
* the feed rate is zero
* the probe is already in the target state
[[gcode:g40]]
== G40 Compensation Off
(((G40 Cutter Compensation Off)))
* 'G40' - turn cutter compensation off. If tool compensation was on the
next move must be a linear move and longer than the tool diameter.
It is OK to turn compensation off when it is already off.
.G40 Example
----
; current location is X1 after finishing cutter compensated move
G40 (turn compensation off)
G0 X1.6 (linear move longer than current cutter diameter)
M2 (end program)
----
See <<gcode:g0,G0>> & <<mcode:m2-m30,M2>> sections for more information.
It is an error if:
* A G2/G3 arc move is programmed next after a G40.
* The linear move after turning compensation off is less than the tool diameter.
[[gcode:g41-g42]]
== G41, G42 Cutter Compensation
(((G41 G42 Cutter Compensation)))
----
G41 <D-> (left of programmed path)
G42 <D-> (right of programmed path)
----
* 'D' - tool number
The D word is optional; if there is no D word the radius of the currently
loaded tool will be used (if no tool is loaded and no D word is given,
a radius of 0 will be used).
If supplied, the D word is the tool number to use. This would normally
be the number of the tool in the spindle (in which case the D word is
redundant and need not be supplied), but it may be any valid tool number.
[NOTE]
'G41/G42 D0' is a little special. Its behavior is different on
random tool changer machines and nonrandom tool changer machines
(see the <<mcode:m6,Tool Change>> section). On nonrandom
tool changer machines, 'G41/G42 D0' applies the TLO of the tool currently
in the spindle, or a TLO of 0 if no tool is in the spindle. On random
tool changer machines, 'G41/G42 D0' applies the TLO of the tool T0 defined
in the tool table file (or causes an error if T0 is not defined in the
tool table).
To start cutter compensation to the left of the part profile, use G41.
G41 starts cutter compensation to the left of the programmed line
as viewed from the positive end of the axis perpendicular to the plane.
To start cutter compensation to the right of the part profile, use G42.
G42 starts cutter compensation to the right of the programmed line
as viewed from the positive end of the axis perpendicular to the plane.
The lead in move must be at least as long as the tool radius.
The lead in move can be a rapid move.
Cutter compensation may be performed if the XY-plane or XZ-plane is active.
User M100-M199 commands are allowed when Cutter Compensation is on.
The behavior of the machining center when cutter compensation
is on is described in the <<sec:cutter-compensation,Cutter Compensation>>
Section along with code examples.
It is an error if:
* The D number is not a valid tool number or 0.
* The YZ plane is active.
* Cutter compensation is commanded to turn on when it is already on.
[[gcode:g41.1-g42.1]]
== G41.1, G42.1 Dynamic Cutter Compensation
(((G41.1 G42.1 Dynamic Compensation)))
----
G41.1 D- <L-> (left of programmed path)
G42.1 D- <L-> (right of programmed path)
----
* 'D' - cutter diameter
* 'L' - tool orientation (see <<lathe-tool-orientation,lathe tool orientation>>)
G41.1 & G42.1 function the same as G41 & G42 with the added scope of being able
to program the tool diameter. The L word defaults to 0 if unspecified.
It is an error if:
* The YZ plane is active.
* The L number is not in the range from 0 to 9 inclusive.
* The L number is used when the XZ plane is not active.
* Cutter compensation is commanded to turn on when it is already on.
[[gcode:g43]]
== G43 Tool Length Offset
(((G43 Tool Length Offset)))
----
G43 <H->
----
* 'H' - tool number (optional)
G43 enables tool length compensation. G43 changes subsequent motions
by offsetting the axis coordinates by the length of the offset. G43
does not cause any motion. The next time a compensated axis is moved,
that axis's endpoint is the compensated location.
'G43' without an H word uses the currently loaded tool from the last
'Tn M6'.
'G43 Hn' uses the offset for tool n.
[NOTE]
'G43 H0' is a little special. Its behavior is different on random
tool changer machines and nonrandom tool changer machines (see the
<<sec:tool-changers,Tool Changers>> section). On nonrandom tool changer
machines, 'G43 H0' applies the TLO of the tool currently in the spindle,
or a TLO of 0 if no tool is in the spindle. On random tool changer
machines, 'G43 H0' applies the TLO of the tool T0 defined in the tool
table file (or causes an error if T0 is not defined in the tool table).
.G43 H- Example Line
----
G43 H1 (set tool offsets using the values from tool 1 in the tool table)
----
It is an error if:
* the H number is not an integer, or
* the H number is negative, or
* the H number is not a valid tool number (though note that 0 is a valid
tool number on nonrandom tool changer machines, it means "the tool
currently in the spindle")
[[gcode:g43.1]]
== G43.1: Dynamic Tool Length Offset
(((G43.1 Dynamic Tool Length Offset)))
----
G43.1 axes
----
* 'G43.1 axes' - change subsequent motions by replacing the current offset(s)
of axes. G43.1 does not cause any motion. The next time a compensated axis
is moved, that axis's endpoint is the compensated location.
.G43.1 Example
----
G90 (set absolute mode)
T1 M6 G43 (load tool 1 and tool length offsets, Z is at machine 0 and DRO shows Z1.500)
G43.1 Z0.250 (offset current tool offset by 0.250, DRO now shows Z1.250)
M2 (end program)
----
* See <<gcode:g90-g91,G90>> & <<sec:select-tool,T>> & <<mcode:m6,M6>>
sections for more information.
It is an error if:
* motion is commanded on the same line as 'G43.1'
NOTE: G43.1 does not write to the tool table.
[[gcode:g43.2]]
== G43.2: Apply additional Tool Length Offset
(((G43.2 Apply additional Tool Length Offset)))
----
G43.2 H-
----
* 'H' - tool number
G43.2 applies an additional simultaneous tool offset.
.G43.2 Example
----
G90 (set absolute mode)
T1 M6 (load tool 1)
G43 (or G43 H1 - replace all tool offsets with T1's offset)
G43.2 H10 (also add in T10's tool offset)
M2 (end program)
----
You can sum together an arbitrary number of offsets by calling G43.2
more times. There are no built-in assumptions about which numbers are geometry
offsets and which are wear offsets, or that you should have only one of each.
Like the other G43 commands, G43.2 does not cause any motion. The next time a
compensated axis is moved, that axis's endpoint is the compensated location.
It is an error if:
* 'H' is unspecified, or
* the given tool number does not exist in the tool table
NOTE: G43.2 does not write to the tool table.
[[gcode:g49]]
== G49: Cancel Tool Length Compensation
(((G49 Cancel Tool Length Offset)))
* 'G49' - cancels tool length compensation
It is OK to program using the same offset already in use. It is also
OK to program using no tool length offset if none is currently being
used.
[[gcode:g53]]
== G53 Move in Machine Coordinates
(((G53 Machine Coordinates)))
----
G53 axes
----
To move in the <<sec.machine-corrdinate-system,machine coordinate system>>,
program 'G53' on the same line as a linear move. 'G53' is not modal and must be
programmed on each line. 'G0' or 'G1' does not have to be programmed on the same
line if one is currently active.
For example 'G53 G0 X0 Y0 Z0' will move the axes to the home position even if
the currently selected coordinate system has offsets in effect.
.G53 Example
----
G53 G0 X0 Y0 Z0 (rapid linear move to the machine origin)
G53 X2 (rapid linear move to absolute coordinate X2)
----
* See <<gcode:g0,G0>> section for more information.
It is an error if:
* G53 is used without G0 or G1 being active,
* or G53 is used while cutter compensation is on.
[[gcode:g54-g59.3]]
== G54-G59.3 Select Coordinate System
(((G54-G59.3 Select Coordinate System)))
* 'G54' - select coordinate system 1
* 'G55' - select coordinate system 2
* 'G56' - select coordinate system 3
* 'G57' - select coordinate system 4
* 'G58' - select coordinate system 5
* 'G59' - select coordinate system 6
* 'G59.1' - select coordinate system 7
* 'G59.2' - select coordinate system 8
* 'G59.3' - select coordinate system 9
The coordinate systems store the axis values and the
XY rotation angle around the Z axis
in the parameters shown in the following table.
.Coordinate System Parameters
[width="80%", options="header", cols="<,11*^"]
|============================================================
|Select|CS|X |Y |Z |A |B |C |U |V |W |R
|G54 |1 |5221|5222|5223|5224|5225|5226|5227|5228|5229|5230
|G55 |2 |5241|5242|5243|5244|5245|5246|5247|5248|5249|5250
|G56 |3 |5261|5262|5263|5264|5265|5266|5267|5268|5269|5270
|G57 |4 |5281|5282|5283|5284|5285|5286|5287|5288|5289|5290
|G58 |5 |5301|5302|5303|5304|5305|5306|5307|5308|5309|5310
|G59 |6 |5321|5322|5323|5324|5325|5326|5327|5328|5329|5330
|G59.1 |7 |5341|5342|5343|5344|5345|5346|5347|5348|5349|5350
|G59.2 |8 |5361|5362|5363|5364|5365|5366|5367|5368|5369|5370
|G59.3 |9 |5381|5382|5383|5384|5385|5386|5387|5388|5389|5390
|============================================================
It is an error if:
* selecting a coordinate system is used while cutter compensation is on.
See the <<cha:coordinate-system,Coordinate System>> Section for an overview of coordinate
systems.
[[gcode:g61-g61.1]]
== G61, G61.1 Exact Path Mode
(((G61 G61.1 G64 Path Mode)))
* 'G61' - Exact path mode, movement exactly as programed. Moves will slow or
stop as needed to reach every programed point. If two sequential moves are
exactly co-linear movement will not stop.
* 'G61.1' - Exact stop mode, movement will stop at the end of each programed
segment.
[[gcode:g64]]
== G64 Path Blending
(((G64 Path Blending)))
----
G64 <P- <Q->>
----
* 'P' - motion blending tolerance
* 'Q' - naive cam tolerance
* 'G64' - best possible speed.
* 'G64 P- <Q- >' blending with tolerance.
* 'G64' - without P means to keep the best speed possible, no matter how
far away from the programmed point you end up.
* 'G64 P- Q-' - is a way to fine tune your system for best compromise
between speed and accuracy. The P- tolerance means that the actual path
will be no more than P- away from the programmed endpoint. The velocity
will be reduced if needed to maintain the path. In addition, when you
activate G64 P- Q- it turns on the 'naive cam detector'; when there are
a series of linear XYZ feed moves at the same <<sec:set-feed-rate,feed rate>>
that are less than Q- away from being collinear, they are collapsed into a
single linear move. On G2/G3 moves in the G17 (XY) plane when the maximum
deviation of an arc from a straight line is less than the G64 P-
tolerance the arc is broken into two lines (from start of arc to
midpoint, and from midpoint to end). those lines are then subject to
the naive cam algorithm for lines. Thus, line-arc, arc-arc, and
arc-line cases as well as line-line benefit from the 'naive cam
detector'. This improves contouring performance by simplifying the
path. It is OK to program for the mode that is already active. See also
the <<sec:trajectory-control,Trajectory Control>> Section for more
information on these modes.
If Q is not specified then it will have the same behavior as before and
use the value of P-.
.G64 P- Example Line
----
G64 P0.015 (set path following to be within 0.015 of the actual path)
----
It is a good idea to include a path control specification in the preamble
of each G code file.
[[gcode:g73]]
== G73 Drilling Cycle with Chip Breaking
(((G73 Drilling Cycle Chip Break)))
----
G73 X- Y- Z- R- Q- <L->
----
* 'R' - retract position along the Z axis.
* 'Q' - delta increment along the Z axis.
* 'L' - repeat
The 'G73' cycle is drilling or milling with chip breaking.
This cycle takes a Q number which represents a 'delta' increment along the Z axis.
. Preliminary motion.
** If the current Z position is below the R position, The Z axis does a
<<gcode:g0,rapid move>> to the R position.
** Move to the X Y coordinates
. Move the Z-axis only at the current <<sec:set-feed-rate,feed rate>> downward
by delta or to the Z position, whichever is less deep.
. Rapid up a bit.
. Repeat steps 2 and 3 until the Z position is reached at step 2.
. The Z axis does a rapid move to the R position.
It is an error if:
* the Q number is negative or zero.
* the R number is not specified
[[gcode:g74]]
== G74 Left-hand Tapping Cycle, Dwell
(((G74 Left-hand Tapping Cycle Dwell)))
----
G74 (X- Y- Z-) or (U- V- W-) R- L- P- $-
----
The 'G74' cycle is intended for tapping with floating chuck and dwell at the bottom of the hole.
1. Preliminary motion, as described in the
<<gcode:preliminary-motion,Preliminary and In-Between Motion>> section.
2. Disable Feed and Speed Overrides.
3. Move the Z-axis at the current feed rate to the Z position.
4. Stop the selected spindle (chosen by the $ parameter)
5. Start spindle rotation clockwise.
6. Dwell for the P number of seconds.
7. Move the Z-axis at the current feed rate to clear Z
8. Restore Feed and Speed override enables to previous state
The length of the dwell is specified by a 'P-' word in the G84 block. Thread pitch is F divided by S.
In example S100 F125 gives pitch of 1.25MM per revolution.
[[gcode:g76]]
== G76 Threading Cycle
(((G76 Threading Cycle)))
----
G76 P- Z- I- J- R- K- Q- H- E- L- $-
----
.G76 Threading
image::images/g76-threads.png[align="center", alt="G76 Threading"]
* 'Drive Line' - A line through the initial X position parallel to the Z.
* 'P-' - The 'thread pitch' in distance per revolution.
* 'Z-' - The final position of threads. At the end of the cycle the tool will
be at this Z position.
[NOTE]
When G7 'Lathe Diameter Mode' is in force the values for 'I', 'J' and 'K' are
diameter measurements. When G8 'Lathe Radius Mode' is in force the values for
'I', 'J' and 'K' are radius measurements.
* 'I-' - The 'thread peak' offset from the 'drive line'. Negative 'I' values
are external threads, and positive 'I' values are internal threads.
Generally the material has been turned to this size before the 'G76' cycle.
* 'J-' - A positive value specifying the 'initial cut depth'. The first
threading cut will be 'J' beyond the 'thread peak' position.
* 'K-' - A positive value specifying the 'full thread depth'. The final
threading cut will be 'K' beyond the 'thread peak' position.
Optional settings
* '$-' - The spindle number to which the motion will be synchronised
(default 0). For example is $1 is programmed then the motion will begin
on the reset od spindle.1.index-enable and proceed in synchrony with the
value of spindle.1.revs
* 'R-' - The 'depth degression'. 'R1.0' selects constant depth on successive
threading passes. 'R2.0' selects constant area. Values between 1.0 and
2.0 select decreasing
depth but increasing area. Values above 2.0 select decreasing area.
Beware that unnecessarily high degression values will cause a large
number of passes to be used. (degression = a descent by stages or
steps.)
* 'Q-' - The 'compound slide angle' is the angle (in degrees) describing to
what extent successive passes should be offset along the drive line.
This is used to cause one side of the tool to remove more material than
the other. A positive 'Q' value causes the leading edge of the tool to
cut more heavily.
Typical values are 29, 29.5 or 30.
* 'H-' - The number of 'spring passes'. Spring passes are additional passes at
full thread depth. If no additional passes are desired, program 'H0'.
* 'E-' - Specifies the distance along the drive line used for the taper. The
angle of the taper will be so the last pass tapers to the thread crest
over the distance specified with E.' E0.2' will give a taper for the
first/last 0.2 length units along the
thread. For a 45 degree taper program E the same as K
* 'L-' - Specifies which ends of the thread get the taper. Program 'L0' for no
taper (the default), 'L1' for entry taper, 'L2' for exit taper, or 'L3'
for both entry and exit tapers. Entry tapers will pause at the drive line to
synchronize with the index pulse then move at the <<sec:set-feed-rate,feed rate>>
in to the beginning of the taper. No entry taper and the tool will rapid to the
cut depth then synchronize and begin the cut.
The tool is moved to the initial X and Z positions prior to issuing
the G76. The X position is the 'drive line' and the Z position is the
start of the threads.
The tool will pause briefly for synchronization before each threading
pass, so a relief groove will be required at the entry unless the
beginning of the thread is past the end of the material or an entry
taper is used.
Unless using an exit taper, the exit move is not synchronized to the spindle
speed and will be a <<gcode:g0,rapid move>>. With a slow spindle, the
exit move might take only a small fraction of a revolution. If the spindle
speed is increased after several passes are complete, subsequent exit
moves will require a larger portion of a revolution, resulting in a
very heavy cut during the exit move. This can be avoided by providing a
relief groove at the exit, or by not changing the spindle speed while
threading.
The final position of the tool will be at the end of the 'drive line'.
A safe Z move will be needed with an internal thread to remove the tool
from the hole.
It is an error if:
* The active plane is not the ZX plane
* Other axis words, such as X- or Y-, are specified
* The 'R-' degression value is less than 1.0.
* All the required words are not specified
* 'P-', 'J-', 'K-' or 'H-' is negative
* 'E-' is greater than half the drive line length
.HAL Connections
The pins 'spindle.N.at-speed' and the 'encoder.n.phase-Z' for the
spindle must be connected in your HAL file before G76 will work.
See the <<sec:motion-pins, spindle>> pins in the Motion section for more
information.
.Technical Info
The G76 canned cycle is based on the G33 Spindle Synchronized Motion. For more
information see the G33 <<gcode:g33-tech-info,Technical Info>>.
The sample program 'g76.ngc' shows the use of the G76 canned cycle,
and can be previewed and
executed on any machine using the 'sim/lathe.ini' configuration.
.G76 Example
[source,{ngc}]
---------------
G0 Z-0.5 X0.2
G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045
---------------
In the figure the tool is in the final position after the G76 cycle
is completed. You can see the entry path on the right from the Q29.5
and the exit path on the left from the L2 E0.045. The white lines
are the cutting moves.
.G76 Example
image::images/g76-01.png[align="center", alt="G76 Example"]
[[gcode:g80-g89]]
== Canned Cycles
(((G80-G89 Canned Cycles)))
The canned cycles 'G81' through 'G89' and the canned cycle stop 'G80'
are described in this section.
All canned cycles are performed with respect to the currently-selected
plane. Any of the nine planes may be selected. Throughout this section,
most of the descriptions assume the XY-plane has been selected. The
behavior is analogous if another plane is selected, and the correct
words must be used. For instance, in the 'G17.1' plane, the action of
the canned cycle is along W, and the locations
or increments are given with U and V. In this case substitute U,V,W for
X,Y,Z in the instructions below.
Rotary axis words are not allowed in canned cycles. When the
active plane is one of the XYZ family, the UVW axis words are not
allowed. Likewise, when the active plane is one of the UVW family, the
XYZ axis words are not allowed.
=== Common Words
All canned cycles use X, Y, Z, or U, V, W groups depending on the
plane selected and R words. The R (usually meaning retract) position is
along the axis perpendicular to the currently selected plane (Z-axis
for XY-plane, etc.) Some canned cycles use additional arguments.
=== Sticky Words
For canned cycles, we will call a number 'sticky' if, when the same
cycle is used on several lines of code in a row, the number must be
used the first time, but is optional on the rest of the lines. Sticky
numbers keep their value on the rest of the lines if they are not
explicitly programmed to be different. The R number is always sticky.
In incremental distance mode X, Y, and R numbers are treated as
increments from the current position and Z as an increment from the
Z-axis position before the move involving Z takes place. In absolute
distance mode, the X, Y, R, and Z numbers are absolute positions in the
current coordinate system.
=== Repeat Cycle
The L number is optional and represents the number of repeats.
L=0 is not allowed. If the repeat feature is used, it is
normally used in incremental distance mode, so that the same sequence
of motions is repeated in several equally spaced places along a
straight line. When L- is greater than 1 in incremental mode with the
XY-plane selected, the X and Y positions are determined by adding the
given X and Y numbers either to the current X and Y positions (on the
first go-around) or to the X and Y positions at the end of the previous
go-around (on the repetitions). Thus, if you program 'L10' , you will
get 10 cycles. The first cycle will be distance X,Y from
the original location. The R and Z positions do not change during the
repeats. The L number is not sticky. In absolute distance mode,
L>1 means 'do the same cycle in the same place several
times', Omitting the L word is equivalent to specifying L=1.
=== Retract Mode
The height of the retract move at the end of each repeat (called
'clear Z' in the descriptions below) is determined by the setting of
the retract mode: either to the original Z position (if that is above
the R position and the retract mode is 'G98', OLD_Z), or otherwise to
the R position. See the <<gcode:g98-g99,G98 G99>> Section.
[[gcode:canned-cycle-errors]]
=== Canned Cycle Errors
It is an error if:
* axis words are all missing during a canned cycle,
* axis words from different groups (XYZ) (UVW) are used together,
* a P number is required and a negative P number is used,
* an L number is used that does not evaluate to a positive integer,
* rotary axis motion is used during a canned cycle,
* inverse time feed rate is active during a canned cycle,
* or cutter compensation is active during a canned cycle.
If the XY plane is active, the Z number is sticky, and it is an error
if:
* the Z number is missing and the same canned cycle was not already
active,
* or the R number is less than the Z number.
If other planes are active, the error conditions are analogous to the
XY conditions above.
[[gcode:preliminary-motion]]
=== Preliminary and In-Between Motion
Preliminary motion is a set of motions that is common to all of the
milling canned cycles. If the current Z position is below the R position,
the Z axis does a <<gcode:g0,rapid move>> to the R position. This happens only
once, regardless of the value of L.
In addition, at the beginning of the first cycle and each repeat, the
following one or two moves are made
. A <<gcode:g0,rapid move>> parallel to the XY-plane to
the given XY-position,
. The Z-axis make a rapid move to the R position, if it is
not already at the R position.
If another plane is active, the preliminary and in-between motions are
analogous.
=== Why use a canned cycle?
There are at least two reasons for using canned cycles. The first is
the economy of code. A single bore would take several lines of code to
execute.
The G81 <<gcode:g81-example,Example 1>> demonstrates how a canned cycle could be
used to produce 8 holes with ten lines of G code within the canned cycle mode.
The program below will produce the same set of 8 holes using five lines
for the canned cycle. It does not follow exactly the same path nor does
it drill in the same order as the earlier example. But the program
writing economy of a good canned cycle should be obvious.
NOTE: Line numbers are not needed but help clarify these examples
.Eight Holes
----
N100 G90 G0 X0 Y0 Z0 (move coordinate home)
N110 G1 F10 X0 G4 P0.1
N120 G91 G81 X1 Y0 Z-1 R1 L4(canned drill cycle)
N130 G90 G0 X0 Y1
N140 Z0
N150 G91 G81 X1 Y0 Z-0.5 R1 L4(canned drill cycle)
N160 G80 (turn off canned cycle)
N170 M2 (program end)
----
The G98 to the second line above means that the return move will be to
the value of Z in the first line since it is higher that the R value
specified.
image::images/eight.png[align="center"]
.Twelve Holes in a Square
This example demonstrates the use of the L word to repeat a set of
incremental drill cycles for successive blocks of code within the same
G81 motion mode. Here we produce 12 holes using five lines of code in
the canned motion mode.
----
N1000 G90 G0 X0 Y0 Z0 (move coordinate home)
N1010 G1 F50 X0 G4 P0.1
N1020 G91 G81 X1 Y0 Z-0.5 R1 L4 (canned drill cycle)
N1030 X0 Y1 R0 L3 (repeat)
N1040 X-1 Y0 L3 (repeat)
N1050 X0 Y-1 L2 (repeat)
N1060 G80 (turn off canned cycle)
N1070 G90 G0 X0 (rapid move home)
N1080 Y0
N1090 Z0
N1100 M2 (program end)
----
image::images/twelve.png[align="center"]
The second reason to use a canned cycle is that they all produce
preliminary moves and returns that you can anticipate and control
regardless of the start point of the canned cycle.
[[gcode:g80]]
== G80 Cancel Canned Cycle
(((G80 Cancel Modal Motion)))
* 'G80' - cancel canned cycle modal motion. 'G80' is part of modal group 1,
so programming any other G code from modal group 1 will also
cancel the canned cycle.
It is an error if:
* Axis words are programmed when G80 is active.
.G80 Example
----
G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)
G80 (turn off canned cycle motion)
G0 X0 Y0 Z0 (rapid move to coordinate home)
----
The following code produces the same final position and machine state as
the previous code.
.G0 Example
----
G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)
G0 X0 Y0 Z0 (rapid move to coordinate home)
----
The advantage of the first set is that, the G80 line clearly turns off the
G81 canned cycle. With the first set of blocks, the programmer must turn
motion back on with G0, as is done in the next line, or any other motion
mode G word.
If a canned cycle is not turned off with G80 or another motion word, the
canned cycle will attempt to repeat itself using the next block of code
that contains an X, Y, or Z word. The following file drills (G81) a set
of eight holes as shown in the following caption.
.G80 Example 1
----
N100 G90 G0 X0 Y0 Z0 (coordinate home)
N110 G1 X0 G4 P0.1
N120 G81 X1 Y0 Z0 R1 (canned drill cycle)
N130 X2
N140 X3
N150 X4
N160 Y1 Z0.5
N170 X3
N180 X2
N190 X1
N200 G80 (turn off canned cycle)
N210 G0 X0 (rapid move home)
N220 Y0
N230 Z0
N240 M2 (program end)
----
[NOTE]
Notice the z position change after the first four holes.
Also, this is one of the few places where line numbers have some value,
being able to point a reader to a specific line of code.
.G80 Cycle
image::images/G81mult.png[align="center", alt="G80 Cycle"]
The use of G80 in line N200 is optional because the G0 on the next
line will turn off the G81 cycle. But using the G80 as shown in
Example 1, will provide for easier to read canned cycle. Without it, it
is not so obvious that all of the blocks between N120 and N200 belong
to the canned cycle.
[[gcode:g81]]
== G81 Drilling Cycle
(((G81 Drilling Cycle)))
----
G81 (X- Y- Z-) or (U- V- W-) R- L-
----
The 'G81' cycle is intended for drilling.
The cycle functions as follows:
. Preliminary motion, as described in the
<<gcode:preliminary-motion,Preliminary and In-Between Motion>> section.
. Move the Z-axis at the current <<sec:set-feed-rate,feed rate>> to the Z
position.
. The Z-axis does a <<gcode:g0,rapid move>> to clear Z.
.Example 1 - Absolute Position G81[[gcode:g81-example]]
Suppose the current position is (X1, Y2, Z3) and the following line of NC
code is interpreted.
[source,{ngc}]
----
G90 G98 G81 X4 Y5 Z1.5 R2.8
----
This calls for absolute distance mode (G90) and OLD_Z retract mode
(G98) and calls for the G81 drilling cycle to be performed once.
The X value and X position are 4.
The Y value and Y position are 5.
The Z value and Z position are 1.5.
The R value and clear Z are 2.8. OLD_Z is 3.
The following moves take place:
. a <<gcode:g0,rapid move>> parallel to the XY plane to (X4, Y5)
. a rapid move move parallel to the Z-axis to (Z2.8).
. move parallel to the Z-axis at the <<sec:set-feed-rate,feed rate>> to (Z1.5)
. a rapid move parallel to the Z-axis to (Z3)
image::images/G81ex1.png[align="center"]
.Example 2 - Relative Position G81
Suppose the current position is (X1, Y2, Z3) and the following line of NC
code is interpreted.
[source,{ngc}]
----
G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3
----
This calls for incremental distance mode (G91) and OLD_Z retract mode
(G98). It also calls for the G81 drilling cycle to be repeated three
times. The X value is 4, the Y value is 5, the Z value is -0.6 and the
R value is 1.8. The initial X position is 5 (=1+4), the initial Y
position is 7 (=2+5), the clear Z position is 4.8 (=1.8+3), and the Z
position is 4.2 (=4.8-0.6). OLD_Z is 3.
The first preliminary move is a maximum rapid move along the Z axis to
(X1,Y2,Z4.8), since OLD_Z < clear Z.
The first repeat consists of 3 moves.
. a <<gcode:g0,rapid move>> parallel to the XY-plane to (X5, Y7)
. move parallel to the Z-axis at the <<sec:set-feed-rate,feed rate>> to (Z4.2)
. a rapid move parallel to the Z-axis to (X5, Y7, Z4.8)
The second repeat consists of 3 moves. The X position is reset to
9 (=5+4) and the Y position to 12 (=7+5).
. a <<gcode:g0,rapid move>> parallel to the XY-plane to (X9, Y12, Z4.8)
. move parallel to the Z-axis at the feed rate to (X9, Y12, Z4.2)
. a rapid move parallel to the Z-axis to (X9, Y12, Z4.8)
The third repeat consists of 3 moves. The X position is reset to
13 (=9+4) and the Y position to 17 (=12+5).