Zentraler Steuerungsalgorithmus für ein 3-Achs-CNC-Bearbeitungszentrum mit Matlab/GUIDE

Aus HSHL Mechatronik
Version vom 7. Februar 2020, 16:52 Uhr von Philipp Heer (Diskussion | Beiträge) (→‎Zusammenfassung und Ausblick)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Zurück zum übergeordneten Projekt: 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)

Kategorie: 2019/ 2020_WS_MTR7_Praktikum_GPE

Autoren: Yannik Schäfer, Philipp Heer

Originaldatei: Datei:Zentraler-Steuerungsalgorithmus mithilfe MatLab- GUIDE.pptx

Einleitung


Das Praktikum Produktionstechnik ist Teil des Studienschwerpunktes Globale Production Enginieering im Studiengang Mechatronik an der Hochschule Hamm-Lippstadt. Diese Veranstaltung wird im siebten Semester durchgeführt und steht unter der Leitung von Professor Dr.-Ing. Mirek Göbel. In diesem Modul sollen die Studierenden durch einzelne Projekte das Ziel verfolgen, eine Ansteuerung für eine 3D- Bearbeitungsmaschine zu entwickeln. Die Thematik des hier vorliegenden Artikels befasst sich mit der Erstellung eines zentralen Steuerungsalgorithmus mithilfe von MatLab, als Grundlage für unterschiedlicher Ansteuerungsvarianten. Das Projekt des Steuerungsalgorithmus wurde von Yannik Schäfer und Philipp Heer (WS 19/20) bearbeitet und baut auf die Inhalte des Projektes „Zentraler Steuerungsalgorithmus für ein 3-Achs-CNC-Bearbeitungszentrum" der Studierenden Domenik Greune (WS16/17) und Robin Lehmann (WS16/17) auf.

Aufgabenstellung


Die Aufgabe des Steuerungsalgorithmus soll es sein, aus dem G-Code einer CAM-Textdatei die benötigten Informationen zu lesen, um damit die Sollbahnen des Fräsers zu generieren. Die erhaltenen Daten sollen in einen String eingetragen und über die RS232-Schnittstelle übergeben werden. Zur besseren Übersicht der Funktionen wurde die Aufgabenstellung in drei konkrete Projektanforderungen eingeteilt und in dem in Abbildung 3 zu sehenden funktionalen Systementwurf in einem Blockschaltbild veranschaulicht.


1) Einlesen der Cam-Textdatei

In der Aufgabe des Einlesens soll zunächst die txt. Datei in MatLab eingelesen werden. Danach wird der G-Code in die einzelnen Bestandteile (G;X;Y;Z) unterteilt und in eine Matrix geschrieben. Hierbei sollen nur notwendigen G-Befehle berücksichtigt werden. Wie z.B.:G01 bis G03 zum Verfahren und G94 Vorschubangabe.

2) Umwandeln der Daten in Koordinaten

Diese Aufgabe beschäftigt sich damit, dass die in der Matrix eingetragenen Daten und Befehle ausgelesen und die Verfahrenskoordinaten berechnet werden. Aus diesen soll danach ein String generiert werden.

3) Koordinaten über Schnittstelle ausgeben

Die letzte Teilaufgabe befasst sich mit der Ausgabe der Strings über die zuvor initialisierte RS232 Schnittstelle.

MATLAB


MatLab ist ein Softwareprogramm des Unternehmens MathWorks, das numerische Lösungen für wissenschaftliche Problemstellungen findet. Mithilfe dieser Software können unterschiedliche Anwendungen wie Programmierungen oder numerische Berechnungen durchgeführt werden. Im Weiteren dient MatLab zur Simulierung, Modellierung und auch Visualisierung. Durch das Einbinden zugehöriger Toolboxen ist der Funktionsumfang schnell erweiterbar und es besteht ein Zugriff auf eine große Anzahl an Programmbibliotheken.

Grafische Benutzeroberfläche mit MATLAB-Guide

Um die Steuerungssoftware übersichtlich und einfach bedienbar zu machen, wurde eine grafische Benutzeroberfläche (GUI) in MatLab verwendet. Diese wurde mithilfe eines Tools Namens „Graphical User Interface Development Environment“ oder kurz „guide“in MatLab erstellt. Geöffnet wird dieses indem man in dem Command Window den Befehl „guide“ eingibt und die Option „Blank GUI“ auswählt. In Folgendem können einzelne Funktionen aus dem linken Reiter gewählt und in dem rechten Fenster eingefügt werden. Durch einen Doppelklick auf die ausgewählten Funktionen können einzelne Parameter, Größen und das Design verändert werden.

Abbildung 1: GUI Oberfläche - Originaldatei:Datei:GUI Oberfläche.pptx

Die grafische Benutzeroberfläche öffnet sich nach dem Aufruf der Datei. Die GUI ist in drei Bereiche unterteilt.

• Im oberen Bereich (1) der Abbildung 1 (Kommunikation und Schnittstelle) befinden sich zwei Pushbutton zum Starten und Stoppen der seriellen Kommunikation.

• Im mittleren Bereich (2) befinden sich zwei Bedienpanel für das Öffnen der Text-Datei und die Bearbeitung der Maschine. Bei dieser kann man zwischen dem Start einer Simulation, dem Start der Fräse oder auch einem Not-Aus wählen.

• Im unteren Bereich (3) der GUI befindet sich ein weiterer Pushbutton, der bei Betätigung durch einen Mausklick die eingegebenen Referenzkoordinaten an die Achsen der Maschine sendet.

Bevor eine Koordinate eingestellt und zur Maschine geschickt werden kann, muss die serielle Kommunikation gestartet werden. Dazu genügt ein Mausklick auf die grüne Schaltfläche mit der Aufschrift „Start“. Nachdem die Koordinaten eingestellt sind, können mit einem Mausklick auf die blauen Schaltfläche mit der Aufschrift „Senden“ die Koordinaten an die Maschine verschickt werden.

Nach Erstellen der GUI erstellt das Matlab Tool den entsprechenden Code zum Interface. Hier als Beispiel ein Code-Ausschnitt in dem die Funktion des "Öffnen" Buttons implementiert wird.

% --- Executes on button press in Oeffnen.
function Oeffnen_Callback(hObject, eventdata, handles)
% hObject    handle to Oeffnen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Display surf plot of the currently selected data.
global Daten;                                                                 % "Daten" als global definieren
[Daten.Probe.Dateiname, Daten.Probe.Dateipfad] = uigetfile('*.txt; *.ngc');   % Öffne Dialog zur Dateiauswahl
if  Daten.Probe.Dateiname ~= 0                                                % Überprüfung, ob Dateiname = 0 (wenn Benutzer auf Abbrechen drückt)
        Daten.Dateiname = Daten.Probe.Dateiname;                              % auf "Probe" überschreiben
        Daten.Dateipfad = Daten.Probe.Dateipfad;                              % auf "Probe" überschreiben
        Daten.Matrix = Auslesen (Daten.Dateiname);                            % Matrix mit Daten aus ausgelesen Dateiname beschreiben
        
        Daten.l = length(Daten.Matrix);                                       % Länge der Matrix speichern
end

G-Code


Der im CAM-Programm erstellte G-Code ist eine allgemeine Programmiersprache für numerische Steuerungen und wird primär für die computergestützte Steuerung von automatisierten Werkzeugmaschinen verwendet. Die verschiedenen Befehle der Maschinensprache sind bei der Verwendung für CNC-Maschine größtenteils identisch. Der G-Code besteht aus Funktionsbefehlen, der der Maschine die als nächstes zu bearbeitenden Schritten übermittelt. Es gibt G-Funktionen und M-Funktionen. Die G-Funktionen sind beispielsweise für die Verfahrwege, die Zyklen, Bahnkorrekturen, oder zur Ebenenauswahl zuständig. Die M- Funktionen regeln beispielsweise, das An- und Abschalten des Kühlwassers, werden aber auch für Werkzeugwechselfunktionen benötigt. Für das durchgeführte Projekt wurde entschieden, zuerst nur die Funktionen G00, G01, G02 und G03 umzusetzen, da die CAM-Software sich i.d.R. auf diese Grundfunktionen beschränkt. Im Folgenden werden diese G-Befehle erläutert:

G00

• Die G00-Funktion ist die Funktion für das reine Verfahren der Werkzeugspindel, um schnell von einem zum anderen Punkt zu gelangen. Da diese Verfahrensweise im Eilgang vollzogen wird, ist es zu empfehlen diese Funktion nur zum Positionieren und nicht zum Fräsen zu benutzen. →Benutzung: G00(X,Y,Z); Beispiel: G00(5,5,0.5) Die Übergabeparameter sind die Absolutkoordinaten in X-Richtung, Y-Richtung und Z-Richtung. Diese Parameter werden aus der Matrix gelesen.

G01

• Die G01-Funktion ist die Funktion, um die Spindel im gewünschten Vorschub (F) von einem zum anderen Punkt zu fahren. Diese Funktion ist zum Fräsen gedacht, wo der Fräser gerade Strecken abfahren soll. Es wird empfohlen, um den Fräser zu schützen, eine maximale Frästiefe von 1mm nicht zu überschreiten. Sollte tiefer gefräst werden, sollten diese Stellen mehrfach überfahren werden. →Benutzung: G01(X,Y,Z,F); Beispiel: G01(5,5,0.5,30) Die Übergabeparameter sind die Absolutkoordinaten in X-Richtung, Y-Richtung und Z-Richtung. Zusätzlich wird jetzt aber noch der Vorschubwert in mm/min angegeben. (F = 1000 entspräche dem Eilgang). Diese Parameter werden aus der Matrix gelesen.

G02

Abbildung 2: Verfahrweise G02

• Die G02-Funktion ist die Funktion, um einen Radius im Uhrzeigersinn abzufahren. Es wird empfohlen, um den Fräser zu schützen, eine maximale Frästiefe von 1mm nicht zu überschreiten. Sollte tiefer gefräst werden, sollten diese Stellen mehrfach überfahren werden.

→Benutzung G02 (X,Y,Z,I,J); Beispiel: G02(5,3,0.5,3,-2.5) Die Übergabeparameter sind die Absolutkoordinaten in X-Richtung, Y-Richtung und Z-Richtung. Zusätzlich werden jetzt in I und J die Koordinaten des Mittelpunktes des Kreises festgelegt. Wichtig zu beachten ist, dass bei dieser Funktion die Werte von I und J immer relativ zum aktuellen Fräserstandort angegeben werden müssen.

G03

• Die G03-Funktion ist ebenso wie die G02-Funktion für die Kreisinterpolation zuständig. Bei dieser Funktion wird der Radius in die andere Richtung d.h. gegen den Uhrzeigersinn abgefahren. Die Einstellungen und Empfehlungen für das Fräsen, wie auch die Benutzung des Codes ist identisch wie bei dem G02-Code.


Systementwurf

Zur Planung mithilfe V-Modells gehört die Erstellung zweier Systementwürfe. Diese sollen den Aufbau des Systems darstellen und eine gute Unterteilung in Arbeitspakete gewährleisten.

Funktionaler Systementwurf

Abbildung 3: Funktionaler Systementwurf

Der funktionale Systementwurf beschäftigt sich mit den Nutzungsanforderungen des Systems. Er gibt eine wesentliche Beschreibung über den Ablauf des Programms und die vorhandenen Schnittstellen der Komponenten. Es soll eine vereinfachte und übersichtliche Darstellung zur Lösung der Aufgabe verdeutlicht werden.

Die Originaldateien des funktionalen Systementwurfs sind hier zu finden: Datei:Funktionaler Systementwurf Steuerungsalgorithmus.pptx

Technischer Systementwurf

Abbildung 4: Technischer Systementwurf

Der technische Systementwurf beschäftigt sich mit einer präzisen Darstellung, wie das genaue Vorgehen zur Lösung des Systems aussieht und welche Technologien und Funktionen verwendet wurden. Dadurch sollen auch Dritte die Architektur des Programmes erkennen und ggf. auf die erhaltenen Ergebnisse aufbauen.

Nach dem Start des Programmes und dem Konfigurieren der Schnittstelle, wird die übertragene txt. Datei eingelesen. Die vorhandenen Befehle und Koordinatendaten werden getrennt und in einer Matrix ergänzt. Nach dem Ablaufen aller Zeilen der txt. Datei, werden die einzelnen Zeilen der Matrix von oben nach unten durchlaufen und ausgelesen. Nach Erhalt der Information über den Fahrbefehl werden die X, Y und Z Koordinaten betrachtet. In Fällen mit Kreisbahnen werden auch die I und J Daten berücksichtigt. Sobald eine Zeile durchlaufen wurde und die Funktion der Simulation gewählt ist, werden die errechneten Positionen über ein Plot veranschaulicht. Wurde keine Simulation gewählt, werden die Koordinaten in einen String geschrieben und über die RS232-Schnittstelle übergeben.

Die Originaldatei des technischen Systementwurfs ist hier zu finden: Datei:Technischer Systementwurf Steuerungsalgorhytmus.pptx

Programmierung

Um einen Einblick in den Code zu geben, werden Teile der einzelnen Funktionen aufgeführt und erläutert.

Einlesen von G-Code

Um die Verfahrwege zu berechnen wird die vorliegende Text-Datei(.txt) mit dem G-Code eingelesen. Die Befehle sind in der Text-Datei zeilenweise vorhanden und werden in eine Matrix eingetragen.

G01-Befehl X-Wert Y-Wert Z-Wert
G02-Befehl X-Wert Y-Wert I-Wert J-Wert
G01-Befehl X-Wert Y-Wert Z-Wert
G01-Befehl X-Wert Y-Wert Z-Wert

Sortieralgorithmus

Da es möglich ist, dass die X- Y- und Z-Koordinaten nicht immer in der selben Spalte der Matrix auftreten, wurde entschieden einen Sortieralgorithmus zu implementieren. Dieser Sortieralgorithmus sortiert innerhalb der G01-Befehle alle X-Koordinaten in die zweite Spalte. Die Y- und Z-Koordinaten werden dementsprechend in die dritte und vierte Spalte einsortiert. Zusätzlich werden die Buchstaben X, Y & Z vor den Werten entfernt, um nur die nummerische Einheiten in der Matrix vorliegen zu haben. Da G02/G03 Befehle noch nicht verarbeitet werden können, identifiziert der Algorithmus diese Zeilen des G-Codes und trägt für X, Y, I und J Leerstellen in die Matrix ein. In der Abbildung 5 sind die ersten drei Spalten einer Matrix vor und nach der Sortierung zu sehen. Die Originaldatei der Abbildung 5 ist hier zu finden: Datei:Sortieralgorithmus.pptx.

Abbildung 5: Matrix vor und nach Sortierung

Um einen Einblick in den entsprechenden Matlab-Code zu gewähren, ist hier der Ausschnitt mit der Umsetzung des Sortieralgorithmus gegeben. Anhand der Kommentare sind Erläuterung zu den jeweiligen Zeilen gegeben.

function Sortiere_Matrix ()

global Daten;       
i = 1;                                                                     %Variabeln initialisieren
j = 1;
OM={};
NM={};                                                                     
pattern = ['X','Y','Z'];                                                   

while i < Daten.l+1                                                        %Schleife zum Sortieren von Matrix
    
    OM = Daten.Matrix;                                                     %Alten Werte aus Matrix speichern
    NM = Daten.Matrix;                                                     %Neue Werte initalisieren

   if contains(Daten.Matrix(i,1),'G01')                                    %Wenn G01 Code in Zeile dann stehr dann fahre fort     

       if iscellstr(Daten.Matrix(i,2))&& contains(Daten.Matrix(i,2),'Y')   %Wenn in Zelle ein String(also Zelle nicht leer) und in Zelle Buchstabe Y vorhanden
       
           NM(i,3)=erase (OM(i,2),pattern);                                %Umsortieren der Matrix Zeile
           NM(i,2)=OM(i,5);
       end 
       if iscellstr(Daten.Matrix(i,2))&& contains(Daten.Matrix(i,2),'Z')   %Wenn in Zelle ein String(also Zelle nicht leer) und in Zelle Buchstabe Z vorhanden dann...

           NM(i,4)=erase (OM(i,2),pattern);                                %Umsortieren der Matrix Zeile
           NM(i,2)=OM(i,5);    
       end
       if iscellstr(Daten.Matrix(i,3))&& contains(Daten.Matrix(i,3),'Z')   %Wenn in Zelle ein String(also Zelle nicht leer) und in Zelle Buchstabe Z vorhanden dann...

           NM(i,4)=erase (OM(i,3),pattern);                                %Umsortieren der Matrix Zeile
           
           if contains(Daten.Matrix(i,2),'X')                              %Wenn in Zelle ein String(also Zelle nicht leer) und in Zelle Buchstabe X vorhanden dann...
               NM(i,3)=OM(i,5);                                            % if funktion gewährleistet, dass keine Zellen überschrieben werden
           end
       end
     Daten.MatrixN(i,1)=NM(i,1);                                           %Neue Werte in Matrix eintragen
     Daten.MatrixN(i,2)=NM(i,2);               
     Daten.MatrixN(i,3)=NM(i,3);                
     Daten.MatrixN(i,4)=NM(i,4);               
     Daten.MatrixN(i,5)=NM(i,5);
             
   else
     Daten.MatrixN(i,1)=NM(i-1,5);                                         %Wenn keine G01 Funktion dann Zeile leer initialisieren
     Daten.MatrixN(i,2)=NM(i-1,5);               
     Daten.MatrixN(i,3)=NM(i-1,5);                
     Daten.MatrixN(i,4)=NM(i-1,5);               
     Daten.MatrixN(i,5)=NM(i-1,5);
       
   end 
   i=i+1;                                                                  %Zeilenzähler
end

while j < Daten.l+1                                                        %Schleife durchläuft Matrix und enfernt die Buchstaben X, Y und Z

 for c = 1:5
    if iscellstr(Daten.MatrixN(j,c))                                       %Wenn in Zelle(j,c) ein string ist dannwird folgende Zeile ausgeführt
    Daten.MatrixN(j,c)=erase(Daten.MatrixN(j,c),pattern);                  %Lösche pattern(X,Y,Z) aus Zelle
    end
 end
 j=j+1;                                                                    %Zeilenzähler
end   
end

Anleitung Programmnutzung

Abbildung 6: Struckturbild der Frunktionsaufrufe. Originaldatei:Datei:Programmstruktur.pptx

Um das Programm funktionsfähig zu Starten muss die MatLab Datei (Main.m) ausgeführt werden. Nach dem initialisieren von einigen globalen Variabeln ruft diese die GUI.m auf und somit erscheint das GUI. Mit der GUI ist hat der Benutzer dann die Möglichkeiten verschiedene Pushbuttons zu betätigen. Als erstes sollte der Öffnen Button betätigt werden und eine Text-Datei mit G-Code ausgewählt werden. Ist dies geschehen können die anderen Buttons in beliebiger Reihenfolge betätigt werden. Beispiel: 1 Ausführen von Main.m 2 GUI - Pushbutton Öffnen betätigen und Datei auswählen 3 GUI - Referenzpunkt eintragen und Pushbutton Referez senden betätigen 4 GUI- Pushbutton Simulation betätigen



Zusammenfassung und Ausblick

Abbildung 7: Funktionslose Buttons der GUI

Im Laufe des Produktionstechnik Praktikums WS(19/20) ist die Grundlage für den zentralen Steueralgorithmus erarbeitet worden. Die Bedienung durch die implementierte GUI ist bis zu einem gewissen Grad möglich. Die Verarbeitung von G-Code erfolgt für G01 Befehle und durch die Simulation ist dies auch grafisch erkennbar. In der Weiterführung des Projekts steht die Umsetzung des Verarbeitungsprozess für G02-Befehle an erster Stelle. Des Weiteren ist die Verbindung über die RS232 Schnittstelle herzustellen, um so die Kommunikation mit den Achssteuerungen aufzubauen. Die Originaldatei der Abbildung 7 ist hier zu finden: Datei:GUI Ausblick.pptx.

Ausserdem sind die Buttons der GUI mit den weiteren Funktionen zu verknüpfen. In Abbilgund 7 sind die funktionslosen Buttons markiert.

Weblinks und Literatur

Matlab

G-Code

Matlab GUIDE

V-Model