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

Aus HSHL Mechatronik
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

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 [[Mat als Grundlage 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.


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.

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. Im Folgendem kann man einzelne Funktionen aus dem linken Reiter wählen und in dem rechten Fenster einfügen. Durch einen Doppelklick auf die ausgewählten Funktionen kann man einzelne Parameter, Größen und das Design verändern.

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

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

• Im mittleren Bereich befinden sich zwei Slider 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 der GUI befindet sich ein weiterer Pushbutton, der bei einer 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 der 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 und G02 umzusetzen, da die meisten CAM-Softwares sich auf diese Grundfunktionen beschränken. Im Folgendem werden die 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 empfehlend 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 ist empfohlen, um den Fräser zu schützen, eine maximale Frästiefe von 1mm nicht zu überschreiten. Sollte tiefer gefräst werden muss so ist es ratsam mehrfach diese Stelen zu überfahren. →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

• Die G02-Funktion ist die Funktion um einen Radius im Uhrzeigersinn abzufahren. Es ist empfohlen, um den Fräser zu schützen, eine maximale Frästiefe von 1mm nicht zu überschreiten. Sollte tiefer gefräst werden, so ist es ratsam in mehreren Durchläufen diese Stelen zu überfahren.

→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 ist hier zu beachten, dass bei dieser Funktion die Werte von I und J immer relativ zum aktuellen Fräserstandort angegeben werden müssen.

Systementwurf

Zur Planung mithilfe des im Praktikum verwendeten V-Models gehört die erstellung zweier Systemenwürfe. Diese sollen den Aufbau des Systems darstellen und eine gute unterteilung in Arbeitspakete gewährleisten.

Funktionaler Systementwurf

Abb. 2: Technischer 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 ist hier zu finden: Datei:Funktionaler Systementwurf Steuerungsalgorithmus.pptx

Technischer Systementwurf

Abb. 3: 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. Durch ihnen 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 Position ü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 inhaltenen 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 auftretten, haben wir uns entschieden einen Sortieralgorithmus zu implementieren. Dieser Sortieralgorithmus sortiert innerhalb G01-Befehle alle X-Koordinaten in die zweite Spalte. Die Y- und Z-Koordinaten werden dementsprechend in die dritte und vierte Spalter einsortiert. Zusätzlich werden die Buchstaben X, Y & Z vor den Werten entfernt um nur die nummerische Einheit in der Matrix vorliegen zu haben. In der Abbildung 4 sind die ersten drei Spalten eine Matrix vor und nach der Sortierung zu sehen. Die Originaldatei der Abbildung 4 ist hier zu finden: Datei:Sortieralgorithmus.pptx.

Abbildung 4: Matrix vor und nach Sortierung

Um einen einblick in der 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...     

       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

Zusammenfassung und Ausblick

Abbildung 5: Funktionslose Buttons der GUI

Im laufe des Produktionstechnik Praktikum 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 und so die Kommunikation mit den Achssteuerungen aufzubauen. Die Originaldatei der Abbildung 5 ist hier zu finden: Datei:GUI Ausblick.pptx.

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

Weblinks und Literatur