G-code

O κώδικας-G (γνωστός επίσης και σαν RS-274) ο οποίος έχει πολλές παραλλαγές, είναι η συνηθισμένη ονομασία για την  πιο διαδεδομένη γλώσσα προγραμματισμού αριθμητικού ελέγχου (NC). Χρησιμοποιείται κυρίως για την  καθοδήγηση  αυτοματοποιημένων εργαλειομηχανών, σε υποβοηθούμενη  από Η/Υ κατασκευή προϊόντων  (computer-aided manufacturing). Μερικές φορές ονομάζεται  γλώσσα προγραμματισμού G,  αλλά δεν πρέπει να συγχέεται  με τη γλώσσα προγραμματισμού G του LabVIEW.
O κώδικας-G είναι μια γλώσσα με την οποία οι άνθρωποι λένε σε μια ελεγχόμενη από έναν Η/Υ μηχανή, πώς να κάνει κάτι. Το "πώς" καθορίζεται από εντολές  σχετικά με το πού να κινηθεί το εργαλείο κοπής, πόσο γρήγορα να κινηθεί, τι διαδρομή θα ακολουθήσει κ.λ.π. Η πιο συνηθισμένη περίπτωση  είναι  να   κινείται  το εργαλείο κοπής σύμφωνα με τις οδηγίες αυτές ακολουθώντας μία διαδρομή και αφαιρώντας υλικό, ώστε να προκύψει  στο τέλος το τελικό κομμάτι. Η ίδια η έννοια επεκτείνεται επίσης και σε εργαλεία που δεν κόβουν, όπως εργαλεία σχηματισμού ή λείανσης, σε photoplotting, σε προσθετικές μεθόδους, όπως η 3D εκτύπωση,  και τα όργανα μέτρησης.

Υλοποιήσεις

Η πρώτη υλοποίηση μιας  γλώσσας προγραμματισμού  αριθμητικού ελέγχου, έγινε στο Εργαστήριο Σερβομηχανισμών του MIT  στα τέλη της δεκαετίας του 1950. Στις δεκαετίες που ακολούθησαν  από τότε, έχουν αναπτυχθεί πολλές υλοποιήσεις από πολλούς (εμπορικούς και μη) οργανισμούς. Ο κώδικαςG-code έχει συχνά χρησιμοποιηθεί σε αυτές τις υλοποιήσεις. Η κύρια τυποποιημένα έκδοση που χρησιμοποιήθηκε στις Ηνωμένες Πολιτείες, αποφασίστηκε από την Electronic Industries Alliance στις αρχές της δεκαετίας του 1960. Μια τελική αναθεώρηση εγκρίθηκε τον Φεβρουάριο του 1980 ως RS-274-D. Σε άλλες χώρες, το πρότυπο ISO 6983 χρησιμοποιείται συχνά, αλλά πολλές Ευρωπαϊκές χώρες χρησιμοποιούν άλλα πρότυπα. Για παράδειγμα, το  DIN 66025 χρησιμοποιείται στη Γερμανία, και τα PN-73 Μ-55256 και PN-93/M-55251 είχαν  χρησιμοποιηθεί παλαιότερα στην Πολωνία.
Από κατασκευαστές ελεγκτών και εργαλειομηχανών έχουν προστεθεί ανεξάρτητα επεκτάσεις και παραλλαγές  και οι χειριστές ενός συγκεκριμένου ελεγκτή, πρέπει να γνωρίζουν τις διαφορές του προϊόντος που χειρίζονται.
Μία τυποποιημένη έκδοση του G-code, που είναι γνωστή ως BCL, χρησιμοποιείται μόνο σε πολύ λίγα μηχανήματα.
Από τη δεκαετία του  1970 έως το 1990, πολλοί κατασκευαστές εργαλειομηχανών CNC προσπάθησαν να ξεπεράσουν τα προβλήματα συμβατότητας, προσαρμοζόμενοι στους ελεγκτές εργαλειομηχανών που κατασκευάζονταν από τη Fanuc. Η Siemens ήταν ένας άλλος κυρίαρχος της αγοράς στους ελεγκτές  CNC, ειδικά στην Ευρώπη. Πλέον σήμερα (τη δεκαετία του 2010), οι διαφορές και η ασυμβατότητα των ελεγκτών δεν είναι  τόσο μεγάλο πρόβλημα,  επειδή οι μηχανουργικές εργασίες σχεδιάζονται με εφαρμογές CAD/CAM, που εξάγουν τον κατάλληλο G-κώδικα για μία συγκεκριμένη εργαλειομηχανή.
Ορισμένες μηχανές CNC χρησιμοποιούν "διαλογικό" προγραμματισμό, ο οποίος είναι προγραμματισμός με την βοήθεια ενός οδηγού (wizard).  Ο οδηγός, είτε κρύβει τον κώδικα  G-κώδικα ή παρακάμπτει εντελώς τη χρήση του. Μερικά δημοφιλή παραδείγματα είναι το Okuma's Advanced One Touch (AOT), το Southwestern Industries' ProtoTRAK, το Mazak's Mazatrol, το Hurco's Ultimax, τo Haas' Intuitive Programming System (IPS), και το διαλογικό λογισμικό της Mori Seiki's CAPS.
Ο G-κώδικας ξεκίνησε ως μια περιορισμένη γλώσσα που δεν είχε δομές όπως οι βρόχοι, τελεστές συνθηκών και μεταβλητές που να δηλώνονται από τον προγραμματιστή. Δεν ήταν σε θέση να κωδικοποιήσει  λογική, ήταν απλά ένας τρόπος για να "συνδέονται οι τελείες", όπου πολλές από τις θέσεις των τελειών τις καθόριζε ο προγραμματιστής με το χέρι.  Οι τελευταίες όμως  υλοποιήσεις του κώδικα  G-code περιλαμβάνουν τέτοιες δομές, δημιουργώντας μια γλώσσα κάπως πιο κοντά σε μια υψηλού επιπέδου γλώσσα προγραμματισμού. Επιπλέον, όλοι οι μεγάλοι  κατασκευαστές (π.χ. Fanuc, Siemens, Heidenhain) παρέχουν πρόσβαση σε  δεδομένα PLC, όπως την  τοποθέτηση των αξόνων και δεδομένων εργαλείων, μέσω μεταβλητών που μπορούν να χρησιμοποιηθούν από NC προγράμματα. Αυτές οι δομές καθιστούν ευκολότερη την ανάπτυξη  εφαρμογών αυτοματισμού.

Προγραμματιστικά περιβάλλοντα

Τα περιβάλλοντα προγραμματισμού σε κώδικα G έχουν εξελιχθεί παράλληλα με εκείνα του γενικού προγραμματισμού- από τα προγενέστερα περιβάλλοντα (π.χ το γράψιμο προγραμμάτων με το μολύβι, ή δακτυλογράφησή τους σε έναν διατρητή ταινιών) στα τελευταία περιβάλλοντα τα οποία συνδυάζουν  CAD (σχεδιασμό υποβοηθούμενο από Η/Υ. computer-aided design), CAM (παραγωγή υποβοηθούμενη από Η/Υ, computer-aided manufacturing), και επεξεργαστές κώδικα G με πολλά γνωρίσματα. (επεξεργαστές G ανάλογους με επεξεργαστές XML που χρησιμοποιούν χρώματα και εσοχές  [συν επιπλέον χαρακτηριστικά], ώστε να βοηθούν τον χρήστη με τρόπους που οι βασικοί επεξεργαστές δεν μπορούν. Τα πακέτα CAM είναι ανάλογα με τα IDEs στον γενικό προγραμματισμό.)
Έγινα δύο  σημαντικές αλλαγές  (1) εγκατάλειψη του  "χειροκίνητου προγραμματισμού" (που δεν απαιτούσε παρά ένα μολύβι ή έναν επεξεργαστή κειμένου και το ανθρώπινο μυαλό) και χρήση των προγραμμάτων CAM software τα οποία δημιουργούν αυτόματα τον κώδικα  G με χρήση μεταεπεξεργαστών (postprocessors) ανάλογους με την ανάπτυξη οπτικών μεθόδων στον γενικό προγραμματισμό, και (2) εγκατάλειψη των ανελαστικών δομών πρός όφελος παραμέτρικών (analogous to the difference in general programming between hardcoding a constant into an equation versus declaring it a variable and assigning new values to it at will; and to the object-oriented approach in general). Ο Μακροπρογραμματισμός (παραμετρικός προγραμματισμός ) των CNC χρησιμοποιεί ονόματα μεταβλητών φιλικά προς τους ανθρώπους, relational operators, and loop structures much as general programming does, to capture information and logic with machine-readable semantics. Whereas older manual CNC programming could only describe particular instances of parts in numeric form, macro programming describes abstractions which can be flowed with ease into a wide variety of instances. The difference has many analogues, both from before the computing era and from after its advent, such as (1) creating text as bitmaps versus using character encoding with glyphs; (2) the abstraction level of tabulated engineering drawings, with many part dash numbers parametrically defined by the one same drawing and a parameter table; or (3) the way that HTML passed through a phase of using content markup for presentation purposes, then matured toward the CSS model. In all of these cases, a higher layer of abstraction was introduced in order to pursue what was missing semantically.
STEP-NC reflects the same theme, which can be viewed as yet another step along a path that started with the development of machine tools, jigs and fixtures, and numerical control, which all sought to "build the skill into the tool". Recent developments of G-code and STEP-NC aim to build the information and semantics into the tool. The idea itself is not new; from the beginning of numerical control, the concept of an end-to-end CAD/CAM environment was the goal of such early technologies as DAC-1 and APT. Those efforts were fine for huge corporations like GM and Boeing. However, for small and medium enterprises, there had to be an era in which the simpler implementations of NC, with relatively primitive "connect-the-dots" G-code and manual programming, ruled the day until CAD/CAM could improve and disseminate throughout the economy.
Μία εργαλειομηχανή με μεγάλο αριθμό αξόνων, ατράκτων και σταθμούς εργαλείων, είναι δύσκολο να προγραμματιστεί χειροκίνητα. Γινόταν στο παρελθόν, αλλά όχι εύκολα.  This challenge has existed for decades in CNC screw machine and rotary transfer programming, and it now also arises with today's newer machining centers called "turn-mills", "mill-turns", "multitasking machines", and "multifunction machines". Σήμερα που χρησιμοποιούνται πλατιά τα συστήματα CAD/CAM, ο προγραμματισμός των CNC (επίσης  με χρήση του κώδικα G) απαιτεί προγράμματα CAD/CAM (σε αντίθεση με το χειροκίνητο προγραμματισμό) για να είναι εφαρμόσιμος και ανταγωνιστικός στο κομμάτι της αγοράς που εξυπηρετείται από τις μηχανές αυτής της κατηγορίας. As Smid says, "Combine all these axes with some additional features, and the amount of knowledge required to succeed is quite overwhelming, to say the least." At the same time, however, programmers still must thoroughly understand the principles of manual programming and must think critically and second-guess some aspects of the software's decisions.
Από τα μέσα της δεκαετίας του -2000s, δινόταν η εντύπωση ότι έφτασε η εποχή  "του τέλους του χειροκίνητου προγραμματισμού" (δηλ. της συγγραφής κώδικα G-code, χωρίς τη βοήθεια προγραμμάτων CAD/CAM ). Όμως μόνο από κάποιες πλευρές μπορούμε να πούμε ότι ο χειροκίνητος προγραμματισμός είναι ξεπερασμένος. Παρότι είναι αλήθεια  ότι ο προγραμματισμός CAM μπορεί και γίνεται από ανθρώπους που δεν γνωρίζουν καν χειροκίνητο προγραμματισμό CNC, δεν μπορούμε να πούμε ότι αυτό μπορεί να γίνει τόσο καλά και τόσο αποτελεσματικά από ανθρώπου που δεν γνωρίζουν τη γλώσσα προγραμματισμού G.  Το να προσαρμόσουμε και να βελτιστοποιήσουμε ένα πρόγραμμα CNC σε μία συγκεκριμένη μηχανή, είναι μία περιοχή όπου είναι πιο εύκολο και πιο αποτελεσματικό να επεξεργαστούμε απ' ευθείας τον κώδικα  G, από το να επεξεργαστούμε τις διαδρομές του εργαλείου που παράγει το πρόγραμμα  CAM και να επαναπεξεργαστούμε το ίδιο το πρόγραμμα CAM.