LinuxCNC

**LinuxCNC** (προηγούμενο όνομα **Βελτιωμένος ελεγκτής μηχανής** or **EMC2**) αποτελεί ελεύθερο, ανοικτού κώδικα λογισμικό που προσθέτει τη δυνατότητα σε γενικού τύπου ηλεκτρονικούς υπολογιστές να ελέγχουν με ψηφιακή καθοδήγηση εργαλειομηχανές.

Το λογισμικό λειτουργεί σε συστήματα PC AMD τεχνολογίας x86-64. Έχει σχεδιαστεί από εθελοντές στο linuxcnc.org, διατίθεται σαν ISO file, στηρίζεται σε τροποποιημένη έκδοση του λειτουργικού συστήματος Debian Linux ώστε να περιλαμβάνει έλεγχο σε πραγματικό χρόνο real time kernel.

Σε ηλεκτρονικό υπολογιστή χωρίς πυρήνα λογισμικού με υποστήριξη εντολών σε πραγματικό χρόνο, λόγω κυρίως των απαιτήσεων σε άμεση εκτέλεση των εντολών κίνησης,  δε λειτουργεί το τμήμα του λογισμικού απευθείας σύνδεσης με την κάρτα ελεγκτή της εργαλειομηχανής.

## Σκοπός
Το LinuxCNC αποτελεί λογισμικό για τον ψηφιακό έλεγχο εργαλειομηχανών όπως φραίζες, τόρνοι, μηχανές κοπής πλάσματος, ρούτερ ξύλου και βιομηχανικά ρομπότ. Μπορεί να ελέγξει έως και 9 άξονες και αρθρώσεις χρησιμοποιώντας κώδικα τύπου G-code σύμφωνα με το πρότυπο RS-274G. Περιλαμβάνεται γραφικό περιβάλλον έλεγχου GUI και υποστήριξη επιπλέον συσκευών όπως οθόνες αφής, πληκτρολόγια και χειριστήρια.

Επί του παρόντος, χρησιμοποιείται σχεδόν αποκλειστικά σε x86 πλατφόρμες υπολογιστών, αλλά έχει μεταφερθεί σε άλλες αρχιτεκτονικές. Η αρχή λειτουργίας βασίζεται στην επικοινωνία υπολογιστή και μηχανής σε πραγματικό χρόνοrealtime kernel. Οι κινητήρες που υποστηρίζονται είναι συνήθως βηματικοί κινητήρες και σερβοκινητήρες. Επίσης υποστηρίζεται η σύνδεση με ρυθμιστές στροφών https://wiki.printnc.info/en/controllers/linuxcnc/vfd, ρελέ και διακόπτες.

## Ιστορικό
Το σύστημα λογισμικού EMC Public Domain αναπτύχθηκε αρχικά από τον NIST, ως το επόμενο βήμα πέρα από το National Center for Manufacturing Sciences / Προγράμματα Ελεγκτών Επόμενης Γενιάς που χρηματοδοτείται από την Πολεμική Αεροπορία[NGC 1989] / Προδιαγραφές για μια Αρχιτεκτονική Ανοικτών Συστημάτων [SOSAS]. Ονομάστηκε EMC [Enhanced Machine Controller Architecture 1993]. Τα συστήματα λογισμικού Δημόσιου Τομέα που χρηματοδοτούνται από την κυβέρνηση για τον έλεγχο των μηχανών φραιζαρίσματος ήταν από τα πρώτα έργα που αναπτύχθηκαν με τον ψηφιακό υπολογιστή στη δεκαετία του 1950. Επρόκειτο να είναι μια εφαρμογή αναφοράς "ουδέτερη από τον προμηθευτή" της βιομηχανικής τυπικής γλώσσας για τον αριθμητικό έλεγχο των εργασιών μηχανικής κατεργασίας, RS-274D (G-code).

Το λογισμικό περιλάμβανε τον διερμηνέα RS274 που οδηγεί τον σχεδιαστή τροχιών κίνησης, προγράμματα οδήγησης κινητήρα/ενεργοποιητή σε πραγματικό χρόνο και μια διεπαφή χρήστη. Απέδειξε τη σκοπιμότητα ενός προηγμένου συστήματος αριθμητικού ελέγχου με χρήση γενικού τύπου ηλεκτρονικό υπολογιστή που τρέχει FreeBSD ή Linux και διασύνδεση με διάφορα συστήματα ελέγχου κίνησης υλικού. Η ανάπτυξη σήμερα συνεχίζεται χρησιμοποιώντας τρέχουσες και πρόσθετες αρχιτεκτονικές (π.χ. συσκευές ARM αρχιτεκτονική).

Το έργο ήταν πολύ επιτυχημένο και δημιούργησε μια κοινότητα χρηστών και εθελοντών. Γύρω στον Ιούνιο του 2000, ο NIST μετέφερε τον πηγαίο κώδικα στο SourceForge υπό την άδεια Public Domain προκειμένου να επιτρέψει σε εξωτερικούς συνεργάτες να κάνουν αλλαγές. Το 2003, η κοινότητα ξαναέγραψε ορισμένα μέρη του, αναδιοργάνωσε και απλοποίησε άλλα μέρη και στη συνέχεια του έδωσε το νέο όνομα, EMC2. Το EMC2 εξακολουθεί να αναπτύσσεται ενεργά. Η αδειοδότηση είναι πλέον υπό την GNU General Public License.

Η υιοθέτηση του νέου ονόματος EMC2 προκλήθηκε από πολλές σημαντικές αλλαγές. Κατά κύριο λόγο, ένα νέο επίπεδο γνωστό ως HAL (Επίπεδο υλικού) εισήχθη για τη διασύνδεση των λειτουργιών εύκολα χωρίς αλλαγή του κώδικα C ή επαναμεταγλώττιση. Αυτός ο διαχωρισμός του κώδικα που ελέγχει την τροχιά και της κινηματική και του κώδικα που ελέγχει τα εξαρτήματα και τον εξοπλισμό, καθιστά ευκολότερη τη δημιουργία προγραμμάτων ελέγχου για την υποστήριξη περισσότερων εργαλειομηχανών και εξαρτημάτων. Οι εργαλειομηχανές που οδηγούνται από το πρόγραμμα ελέγχου απόκτούν επιπλέον εξιδικευμένες κινήσεις που δε θα ήταν δυνατές με άλλο τρόπο όπως δημιοργία σπειρωμάτων σε τόρνο και φραίζα και ειδικές κινήσεις σε ρομποτικούς μηχανισμούς. Το HAL συνοδεύεται από εικονικό παλμογράφο για την εξέταση σημάτων σε πραγματικό χρόνο και την δυνατότητα προσθήκης/αφαίρεσης επιπλέον εξοπλισμού στην εργαλειομηχνή . Μια άλλη αλλαγή με το EMC2 είναι το Classic Ladder, (μια εφαρμογή ladder logic ανοιχτού κώδικα) προσαρμοσμένη για περιβάλλον σε πραγματικό χρόνο για τη διαμόρφωση σύνθετων βοηθητικών συσκευών όπως αυτόματους εναλλάκτες εργαλείων ή προσθήκη λογικής με βάση πιθανά σενάρια.

## Πλατφόρμες

Λόγω της ανάγκης για λεπτομερή, ακριβή έλεγχο μηχανών σε πραγματικό χρόνο, το LinuxCNC απαιτεί μια πλατφόρμα με δυνατότητες realtime. Οι πρώτες εκδόσεις του EMC εκτελούνταν με μια έκδοση σε πραγματικό χρόνο του Windows NT, αλλά η νεότερη έκδοση των Windows δεν είχε καλή υποστήριξη σε πραγματικό χρόνο, επομένως το Linux με επεκτάσεις σε πραγματικό χρόνο έγινε η προτιμώμενη πλατφόρμα. Επί του παρόντος, το LinuxCNC χρησιμοποιεί τον πυρήνα RTAI ή τον PREEMPT-RT με τη γεύση «uspace» του LinuxCNC του RTAPI.

Η εγκατάσταση του LinuxCNC και των υποκείμενων ενημερώσεων κώδικα του πυρήνα σε πραγματικό χρόνο σε ένα βασικό σύστημα Linux μπορεί να είναι μια αποθαρρυντική εργασία. Ο Paul Corner ήρθε στη διάσωση με το BDI (Brain Dead Install) το οποίο ήταν ένα CD από το οποίο μπορούσε να εγκατασταθεί ένα πλήρες σύστημα εργασίας (Linux, ενημερώσεις κώδικα σε πραγματικό χρόνο και LinuxCNC). Αυτό έκανε το LinuxCNC προσβάσιμο σε μια πολύ μεγαλύτερη κοινότητα χρηστών. Σήμερα, το Paul's BDI έχει εξελιχθεί σε ένα εκκινήσιμο (ζωντανό) ISO που μπορεί να εγγραφεί σε CD ή USB και να εκτελεστεί στους περισσότερους οποιονδήποτε υπολογιστή τύπου PC για να δοκιμάσει το LinuxCNC χωρίς να χρειάζεται να εγκαταστήσετε το σύστημα. Τα ISO με δυνατότητα εκκίνησης LinuxCNC είναι διαθέσιμα για Debian wheezy (πυρήνας RTAI) και Debian stretch (πυρήνας RT-PREEMPT).

## Σχεδιασμός

Το LinuxCNC χρησιμοποιεί το μοντέλο του 'sense, plan, act' στις αλληλεπιδράσεις του με το υλικό. Για παράδειγμα, διαβάζει την τρέχουσα θέση του άξονα, υπολογίζει μια νέα θέση/τάση στόχο και, στη συνέχεια, το γράφει στο υλικό. Δεν υπάρχει προσωρινή αποθήκευση εντολών ούτε επιτρέπονται οι εξωτερικές εκκινήσεις ανάγνωσης ή εγγραφής. Αυτή η προσέγγιση χωρίς προσωρινή αποθήκευση δίνει τη μεγαλύτερη ελευθερία στην προσθήκη ή αλλαγή των δυνατοτήτων του LinuxCNC. Χρησιμοποιώντας σχετικά «χαζό» εξωτερικό υλικό και προγραμματίζοντας τις δυνατότητες στον κεντρικό υπολογιστή, το LinuxCNC δεν είναι κλειδωμένο σε κανένα κομμάτι υλικού. Επιτρέπει επίσης σε έναν ενδιαφερόμενο χρήστη να αλλάξει εύκολα συμπεριφορά/δυνατότητες/υλισμικό.

Αυτό το μοντέλο τείνει να προσφέρεται σε συγκεκριμένους τύπους εξωτερικών διεπαφών --- PCI, PCIE, Παράλληλη θύρα (σε λειτουργία SPP ή EPP), ISA και Ethernet έχουν χρησιμοποιηθεί για έλεγχο κινητήρα. Η σειρά USB και RS232 δεν είναι καλοί υποψήφιοι. Το USB έχει κακές δυνατότητες σε πραγματικό χρόνο και το RS232 είναι πολύ αργό για έλεγχο κινητήρα.

Το LinuxCNC έχει βασικές απαιτήσεις "σε πραγματικό χρόνο" λόγω αυτού του μοντέλου. Το διάστημα μεταξύ ανάγνωσης και γραφής πρέπει να είναι σταθερό και αρκετά γρήγορο. Ένα τυπικό μηχάνημα κάνει υπολογισμούς σε πραγματικό χρόνο σε ένα επαναλαμβανόμενο νήμα 1 χιλιοστού του δευτερολέπτου. Η ανάγνωση και η εγγραφή στο υλικό πρέπει να είναι ένα μικρό μέρος αυτού του χρόνου, π.χ. 200ms, διαφορετικά η μετατόπιση φάσης κάνει τον συντονισμό πιο δύσκολο και υπάρχει λιγότερος διαθέσιμος χρόνος για τα προγράμματα μη πραγματικού χρόνου, γεγονός που μπορεί να κάνει τα χειριστήρια της οθόνης να έχουν λιγότερο απόκριση.

Το LinuxCNC "χρησιμοποιεί μια γεννήτρια προφίλ τραπεζοειδούς ταχύτητας."

## Ρύθμιση

Το LinuxCNC χρησιμοποιεί ένα επίπεδο λογισμικού που ονομάζεται HAL (Hardware Abstraction Layer).

Το HAL επιτρέπει τη δημιουργία πολλών διαμορφώσεων  ενώ είναι ευέλικτο: μπορεί κανείς να συνδυάσει και να ταιριάξει διάφορες πλακέτες ελέγχου υλικού, σήματα ελέγχου εξόδου μέσω της παράλληλης θύρας ή της σειριακής θύρας - ενώ οδηγείτε stepper ή σερβοκινητήρες, σωληνοειδέςs και άλλοι ενεργοποιητής.

Το LinuxCNC περιλαμβάνει επίσης ένα λογισμικό προγραμματιζόμενος λογικός ελεγκτής (PLC) που χρησιμοποιείται συνήθως σε εκτεταμένες διαμορφώσεις (όπως σύνθετα κέντρα μηχανικής κατεργασίας). Το λογισμικό PLC βασίζεται στο έργο ανοιχτού κώδικα Classicladder, και εκτελείται σε περιβάλλον πραγματικού χρόνου.

## Παραπομπές


## Εξωτερικοί σύνδεσμοι
*LinuxCNC project wiki
*The NIST RS274NGC Standard - Version 3 Aug 2000 also available as a PDF
*The Enhanced Machine Controller homepage at NIST
*Machinekit, an open source project to port and extend  EMC2/LinuxCNC to run efficiently on the BeagleBone and related hardware.