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-κώδικες, που ονομάζονται επίσης προπαρασκευαστικοί (preparatory ) κώδικες, είναι οποιεσδήποτε λέξεις σε ένα πρόγραμμα  CNC, που αρχίζουν με το γράμμα G. Γενικά είναι ένας κώδικας που λέει στην εργαλειομηχανή τι είδους ενέργεια να εκτελέσει, όπως:
* Γρήγορη κίνηση (μεταφορά του εργαλείου όσο το δυνατόν συντομότερα σε ένα σημείο χωρίς κοπή)
* Ελεγχόμενη πρόωση σε  ευθεία γραμμή ή τόξο
* Μια σειρά από ελεγχόμενες κινήσεις που θα έχουν σαν αποτέλεσμα π.χ τη διάτρηση μιας οπής ή την κατασκευή ενός τεμαχίου συγκεκριμένου σχήματος (π.χ. ένα γραναζιού)
* Να δηλώσει πληροφορίες πληροφορίες σχετικές με τα εργαλεία κοπής, όπως απόκλιση
* Αλλαγή συστήματος συντεταγμένων
Υπάρχουν και άλλοι κώδικες,  π.χ οι κώδικες τύπου μπορεί να αντιμετωπιστούν σαν καταχωρητές σε έναν υπολογιστή.

### Διευθύνσεις γραμμάτων
Κάποιες διευθύνσεις γραμμάτων χρησιμοποιούνται ή μόνο σε φρεζάρισμα ή μόνο σε τόρνευση. Οι περισσότερες χρησιμοποιούνται και στα δύο. Παρακάτω με έντονα γράμματα είναι οι διευθύνσεις που συναντώνται  συχνότερα μέσα σε ένα πρόγραμμα.

Πηγές: Green et al. 1996.

### Κατάλογος των εντολών G που συναντώνται  συνήθως στα χειριστήρια της FANUC και σε παρόμοια χειριστήρια
Sources: Smid 2008; Smid 2010; Green et al. 1996.

### Κατάλογος των M-codes που συναντώνται συνήθως στα χειριστήρια FANUC και σε όμοια χειριστήρια

## Παράδειγμα προγράμματος
δεξιά|μικρογραφία|200x200εσ|Tool Path for program
Αυτό είναι ένα γενικό πρόγραμμα το οποίο επιδεικνύει τη χρήση του κώδικα  G-Code για την κατασκευή σε τόρνο  ενός εξαρτήματος  διαμέτρου 1" X 1" μήκος.  Ας υποθέσουμε ότι μία ράβδος υλικού είναι τοποθετημένη στη μηχανή και ότι έιναι λίγο μεγαλύτερη σε μήκος και διάμετρο και εξέχει μία ίντσα από το πρόσωπο του τσοκ.  (Προσοχή: Αυτή είναι μία γενική μορφή κώδικα και μπορεί να  μην λειτουργεί σε μία συγκεκριμένη μηχανή. Δώστε ιδιαίτερη προσοχή από το σημείο 5 και παρακάτω.)

# Υπάρχει η δυνατότητα διαφορετικών στύλ προγραμματισμού, ακόμη και σε αυτό το μικρό πρόγραμμα. Η ομαδοποίηση των εντολών, όπως  στη γραμμή N06, μπορεί να γίνει με διάφορους τρόπους. Κάνοντάς το αυτό, πολλές φορές κάνει ευκολότερη την παρακολούθηση της εκτέλεσης του προγράμματος.
# Πολλοί κώδικες είναι "παραμένοντες"  "modal", που σημαίνει ότι παραμένουν σε ισχύ μέχρι να ακυρωθούν ή να αντικατασταθούν με έναν αντιτιθέμενο κώδικα. Για παράδειγμα, όταν επιλεγεί ο κώδικας σταθερής επιφανειακής ταχύτητας (CSS- G96), θα παραμείνει σε ισχύ μέχρι το τέλος του προγράμματος. Κατά τη λειτουργία η ταχύτητα της ατράκτου θα αυξάνεται, καθώς το εργαλείο πλησιάζει το κέντρο, ώστε να διατηρηθεί η σταθερή επιφανειακή ταχύτητα. Όμοια μόλις επιλεχθεί ο κώδικας υψηλής ταχύτητας (G00), όλες οι κινήσεις του εργαλείου θα είναι γρήγορες μέχρι να επιλεγεί κάποιος άλλος κώδικας, που να ρυθμίζει διαφορετικά την ταχύτητα  (G01, G02, G03).
#  Στις μηχανές CNC είναι κοινή πρακτική η χρήση ενός επιτηρητή φορτίου. Ο επιτηρητής φορτίου ( load monitor) θα σταματήσει τη μηχαν,ή  εάν το φορτίο της ατράκτου ή της πρόωσης ξεπεράσει μια προτοποθετημένη τιμή, η οποία καθορίζεται κατά τη ρύθμιση της μηχανής. Οι αρμοδιότητες του επιτηρητή φορτίου είναι διάφορες:
## Προλαμβάνει τις ζημιές στη μηχανή σε περίπτωση θραύσης του εργαλείου ή προγραμματιστικού λάθους. 
### Αυτό είναι ιδιαίτερα σημαντικό επειδή επιτρέπει την ασφαλή μηχανούργηση κατά την απουσία μας. Σε αυτήν ο χειριστής ρυθμίζει την εργασία και την ξεκινά κατά τη διάρκεια της ημέρας, στη συνέχεια πηγαίνει στο σπίτι του, αφήνοντας τη μηχανή να λειτουργεί και να κόβει εξαρτήματα κατά τη διάρκεια της νύχτας. Επειδή δεν βρίσκεται γύρω κανένας άνθρωπος να ακούσει, να δεί, να μυρίσει ένα πρόβλημα, όπως για παράδειγμα ένα σπασμένο εργαλείο, ο επιτηρητής φορτίου παίζει το ρόλο του φρουρού. Όταν αντιληφθεί κατάσταση υπερφόρτωσης, η οποία υποδηλώνει ένα αμβλύ ή σπασμένο εργαλείο, διατάζει το σταμάτημα της μηχανής. Σήμερα υπάρχει η τεχνολογική δυνατότητα να σταλεί κάπιο μήνυμα, εάν είναι απαραίτητο, έστε να έρθει να αντιμετωπίσει το πρόβλημα και να  ξαναξεκινήσει την παραγωγή και να φύγει πάλι.  
## Προειδοποιεί για ένα εργαλείο το οποίο έχει αμβλυνθεί και πρέπει να αλλαχθεί ή να ακονιστεί. Έτσι ένας χειριστής που ασχολείται με πολλές μηχανές, ειδοποιείται για το πρόβλημα από τη μηχανή.
# Είναι κοινή πρακτική η γρήγορη μετακίνηση του εργαλείου σε ένα "ασφαλές σημείο" το οποίο είναι κοντά στο εξάρτημα (στο παράδειγμά μας σε απόσταση  0.1" από αυτό) και στη συνέχεια να ξεκινήσει η πρόωση του εργαλείου. Το πόσο κοντά είναι αυτή η "ασφαλής απόσταση" εξαρτάται από τον προγραμματιστή και τον χειριστή, αλλά και από την κατάσταση του ακατέργαστου υλικού. 
# Εάν υπάρχει λάθος στο πρόγραμμα, υπάρχει μέγαλη πιθανότητα να συγκρουστεί η μηχανή ή  το εργαλείο με το εξάρτημα με μεγάλη ταχύτητα. Αυτό μπορεί να κοστίσει πολύ, ιδιαίτερα σε νεότερα κέντρα μηχανούργησης. Είναι δυνατόν να διασπείρουμε στο πρόγραμμα προαιρετικές παύσεις (κώδικας  M01 ), οι οποίες επιτρέπουν στο πρόγραμμα να τρέχει τμηματικά για λόγους ελέγχου. Οι προαιρετικές παύσεις παραμένουν στο πρόγραμμα, αλλά αγνοούνται κατά την κανονική εκτέλεση του προγράμματος. Ευτυχώς τα περισσότερα προγράμματα CAD/CAM συνοδεύονται από εξομοιωτές  CNC, οι οποίοι εμφανίζουν την κίνηση του εργαλείου καθώς εκτελείται το πρόγραμμα. Σήμερα τα γύρω αντικείμενα (chuck, clamps, fixture, tailstock, και άλλα) συμπεριλαμβάνονται στα τρισδιάστατα μοντέλα και η εξομοίωση μοιάζει με βιντεοπαιχνίδι ή περιβάλλον εικονικής πραγματικότητας, καθιστώντας τις απρόσμενες συγκρούσεις απίθανες. Πολλές μοντέρνες μηχανές CNC επιτρέπουν επίσης στους προγραμματιστές να εκτελούν τα προγράμματα σε κατάσταση εξομοίωσης και να παρατηρούν τις παραμέτρους της μηχανής σε ένα συγκεκριμένο σημείο του προγράμματος.    Αυτό δίνει την δυνατότητα στους προγραμματιστές να ανακαλύψουν semantic errors (σε αντίθεση με τα συντακτικά λάθη) προτού να χάσουν υλικό ή εργαλεία λόγω ενός λανθασμένου προγράμματος.  Για λόγους ελέγχου, ανάλογα με το μέγεθος του εξαρτήματος, μπορούν επίσης να χρησιμοποιηθούν μπλοκ κεριού.
# Στο παραπάνω πρόγραμμα έχουν συμπεριληφθεί αριθμοί γραμμών για εκπαιδευτικούς σκοπούς. Συνήθως δεν είναι απαραίτητοι για τη λειτουργία της μηχανής και στη βιομηχανία χρησιμοποιούνται σπάνια. Αν όμως χρησιμοποιούνται εντολές διακλάδωσης ή βρόχων, οι αριθμοί γραμμών χρησιμοποιούνται σαν προορισμοί γι' αυτές τις εντολές. (π.χ  GOTO N99).
# Μερικές μηχανές δεν επιτρέπουν πολλούς κώδικες  M στην ίδια γραμμή.ΣΣ

## Προγραμματιστικά περιβάλλοντα
Τα περιβάλλοντα προγραμματισμού σε κώδικα 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.

## Συντομογραφίες που χρησιμοποιούνται από τους προγραμματιστές και χειριστές
Αυτή η λίστα είναι μόνο μια επιλογή και, εκτός από μερικούς βασικούς όρους, ως επί το πλείστον αποφεύγει την επανάληψη των πολλών συντομογραφιών που αναφέρονται στο  συντομογραφίες και σύμβολα μηχανολογικών σχεδίων (βλέπε επίσης).

## Κοιτάξτε επίσης
* 3D printing
* Canned cycle
* LinuxCNC - a free CNC software with many resources for G-code documentation

### Extended developments
* Direct Numerical Control (DNC)
* STEP-NC
* MTConnect

### Ανάλογες έννοιες
* Αρχεία Gerber

### Σημεία προσοχής κατά την εφαρμογή
* Cutter location, cutter compensation, offset parameters
* Coordinate systems

## Αναφορές

## Βιβλιογραφία

## Εξωτερικοί σύνδεσμοι
* CNC G-Code and M-Code Programming
* Tutorial for G-code
* 
* http://museum.mit.edu/150/86  Has several links (including history of MIT Servo Lab)
* Complete list of G-code used by most 3D printers
* Fanuc and Haas G-code Reference
* Fanuc and Haas G-code Tutorial

Κατηγορία:Κωδικοποιήσεις
Κατηγορία:Γλώσσες προγραμματισμού ειδικού σκοπού