Computer Aided Manufacturing (CAM): Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(253 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Autor:''' [[Benutzer: Steffen_SchulzeMiddendorf| Steffen Schulze Middendorf]]<br/>
[[Datei:Hshl-cam.jpg|mini|450px|Ein Beispiel für ein über CAM gefrästes Bauteil]]
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]
= Einleitung =
Projekt aus [[3D-CNC-Bearbeitungsmaschine|3D-CNC-Bearbeitungsmaschine (Produktionstechnik Praktikum im Modul Global Production Engineering 3)]].


[[Datei:HSHL.JPG|mini|Ein Beispiel für einen Barcode. Hier: 'HSHL']]
Die zentrale Aufgabe von CAM ist es, aus einem Modell oder ähnlichem (kann auch eine Skizze, ein Bild etc. sein) ein CNC-Programm zu erstellen, das eine Maschine dazu veranlasst, den geplanten Arbeitsablauf umzusetzen. Eine zentrale Rolle spielen dabei die G- und M-Befehle für die Maschine.


== Motivation ==
* Tolle Aufstellung G-Codes:
Barcodes begleiten unseren Alltag bereits seid Jahrzehnten. Sie codieren Preise im Einzelhandel, ermöglichen das Verfolgen von Briefen und Paketen oder sind als Teil der Stempelkarte Teil der Zeiterfassung in der Industrie. Doch wie werden Barcodes erzeugt und gelesen? Dieser Artikel soll einen kurzen Einblick in die Notation, die Erstellung und das letzlich das Lesen des speziellen CODE39 geben. Integration des Programms erfolgt in Matlab.
** https://www.maschinfo.de/CNC-G-Code
** https://www.machiningdoctor.com/gcodes/
** https://www.rapiddirect.com/de/blog/g-and-m-codes/


== CODE39 ==
= Motivation & Aufgabenstellung =
[[Datei:CODE39 Codierung.png|mini|CODE39 Zeichentabelle]]
Ziel des Praktikums ist in gemeinschaftlicher Arbeit eine Werkzeugmaschine zu entwicklen. Einzelne Funktionsbereiche werden von Kleingruppen bearbeitet. Das Funktionsschema ist rechts dargestellt. Wir haben uns besonders mit den Bereichen "CAM" sowie "Steuerungsprogramm" beschäftigt.
[[Datei:FunktionsschemaFräse.jpg|mini|300px|Funktionsschema]]
[[Datei:Umwandlung.jpg|mini|220px|left|Grundfunktion CAM]]
Komplexe mechanische Bauteile können heute leicht in CAD-Programmen erstellt werden. Die Hochschule Hamm-Lippstadt stellt eigens dazu die Studentenversion von SolidWorks2016 zur Verfügung. Bisher konnten genannte Bauteile nur innerhalb der CAD-Software konstruiert werden. Um die Produktion dieses Bauteils auf einer Werkzeugmaschine möglich zu machen, wird jedoch zusätzlich Maschinencode, ein sogeannter G-Code, benötigt. Ziel des Praktikums war daher, geeignete CAM-Software auszuwählen, zu beschaffen und zu testen.
Zusätzlich soll die bereits vorhandene Steuerungssoftware der im MPS-Labor vorhandenen Eigenbaufräse evaluiert und eventuelle Alternativen zur derzeitigen Software LinuxCNC aufgezeigt werden.
Siehe dazu auch die aktuelle Aufgabenliste im SVN.
<br/>
<br/>


Der CODE39 ist in der ISO/IEC 16388<ref>[http://www.iso.org/iso/catalogue_detail.htm?csnumber=43897 ISO/IEC 16388:2007 Information technology -- Automatic identification and data capture techniques -- Code 39 bar code symbology specification] ''[[Internationale Organisation für Normung|International Organization for Standardization]]''</ref> spezifiziert, grundsätzlich besteht dieser aus Strichen und Lücken, jeweils in schmal und in breit.Es handelt sich um einen diskreten Code, das heisst jeder Buchstabe beginnt und endet mit einem Strich. Zwischen jedem Buchstaben findet sich zur Abgrenzung eine schmale Lücke. Jeder erzeugte Strichcode beginnt und endet mit einem Sternchen(*). Man spricht hier von einem Start/Stopp-Zeichen.
= Vergleich CAM-Software =
 
{| class="wikitable"
In der Tabelle rechts ist der gesamte verfügbare Zeichensatz dargestellt.
! style="font-weight: bold;" | Eigenschaft
 
! style="font-weight: bold;" | VisualCam
In der Standart Variante verfügt der CODE39 über keine Prüfziffern. Im folgenden sollen die Vor-und Nachteile stichpunktartig dargestellt werden.
! style="font-weight: bold;" | HSMExpress2016
 
! style="font-weight: bold;" | HSMWorks2016
'''Vorteile:'''
! style="font-weight: bold;" | SolidCam
 
*robust
*hohe Drucktoleranzen akzeptabel
 
'''Nachteile:'''
*geringe Code Dichte
*keine Prüfsumme
 
== Projektplan ==
{| class="mw-datatable"
! style="font-weight: bold;" | Vorgang
! style="font-weight: bold;" | Abgeschlossen bis
|-
|-
| Semsterstart
| Funktionen & Dimensionsrahmen
| KW10 / 2015
| 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
| 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
| 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
| 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
|-
|-
| Themenauswahl
|  
| KW12 / 2015
| 3D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
|
| 3D Werkzeugweg Strategien (Parallel, Radial, 3D Planen, etc.)
| 3D Fräsen/ iMachining
|-
|-
| Informationen sammeln
|  
| KW13 / 2015
| 4D/5D Fräsen
|
| Multi-Achsen-Fräsen
| Multiachsenbearbeitung
|-
|-
| Erzeugen von Barcode implementieren
| Preise
| KW15 / 2015
| 1695,- /Lizenz (beinhaltet 2;2,5 und 3-Achsen-Fräsen Plugin für SolidWorks); 395,-/Jahr Softwarewartung Jahrespauschale
|-
| Kostenlos
| Funktionscheck - Erstellen
| 630,70€/Monat; 5033,70€/Jahr
| KW17 / 2015
| 5000,-/Jahr (beinhaltet2,5 Achsen Fräsen); 750,-/Jahr Softwarewartung Jahrespauschale
|-
| Lesen von Barcode implementieren
| KW16 / 2015
|-
| Funktionscheck - Lesen
| KW17 / 2015
|-
| Code Optimierung und Fehlerbehebung
| KW18 / 2015
|-
| Kommentieren und dokumentieren abschließen
| KW18 / 2015
|-
| Wiki-Artikel finalsieren
| KW20 / 2015
|-
| Abgabe
| KW25 / 2015
|}
|}


== Implementierung Barcode erstellen ==
Unter Berücksichtigung der Vor- und Nachteile der obrigen Tabelle, haben wir uns für HSMExpress2016 entschieden, weil die Software eine smarte Lösung bezüglich Budget und Anforderungen der Maschine darstellt. Aufgrund der Tatsache, dass unsere Maschine den Dimensionsrahmen von 2.5D nicht überschreitet, erfüllt die Software alle Erwartungen und lässt uns freien Spielraum. Möchte man allerdings einen 3D Fräsvorgang absolvieren, muss man auf Alternativprogramme umsteigen.
[[Datei:Barcode_erstellen.jpg|mini|Übersicht Funktionsablauf Barcode_erstellen]]
Die Funktion zum Erzeugen von Barcodes benötigt drei Eingaben. Den zu codierenden Text, sowie die Breiten der schmalen und breiten Elemente. Als Element wird z.B. ein schmaler Strich oder breite Lücke bezeichnet.


= CAM-Software "SolidWorksCAM" =
[[SolidWorksCAM| Dieser Link führt zum Artikel SolidWorksCAM. Die Arbeit und der Einstieg in die Software sollen durch den Artikel erleichtert werden.]]


Grundsätzliches Vorgehen: Zunächst wird ein leeres Bild in der benötigten Länge erzeugt. Diese Länge resultiert direkt aus den Funktionsparametern. Danach wird der Eigabetext sukzessiv eingelesen und in die CODE39 Notation überführt. Jeder CODE39 Barcode startet und ended wie oben beschrieben mit einem Sternchen. Dieses wird automatisch hinzugefügt.
= CAM-Software "HSMExpress" =
Die erstellten Codes lassen sich daher unter Zuhilfename eines Smartphones inkl. gängigen Barcode-Tool aus dem Appstore/Playstore lesen. Zum Funktionstest wurde die Software "Neoreader" erfolgreich verwendet.
=== Arbeitsablauf ===
Als CAM-Software wurde HSMExpress2016 ausgewählt. Das Programm zeichnet sich durch seine tiefe Integration in die Benutzeroberfläche von SolidWorks2016 aus. Der Arbeitsprozess ist wie folgt:
#Erstellen des 3D-Modells
#Vorgabe des Rohteils in der CAM-Software
#Setzen des Nullpunkes im Modell
#Vorgabe und parametresierung der Fertigungsschritte in der CAM-Software
#Simulation der Fertigungsschritte
#Umwandlung der Fertigungsschitte in G-Code (Postprozess)


=== Rohteil ===
Für die Produktion eines Bauteils wird immer ein Rohteil benötigt. Dieses kann in der CAM-Software hinterlegt werden. Wichtig ist hierbei die richtige Lage des Nullpunktes, welche identisch zwischen der der realen Maschine und des Modells sein muss, da es sonst zu einer Kollision kommt. Am besten setzt man in SolidWorks bei der Konstruktion ein Koodinatensystem (Befehl "Koordinatensystem") und benennt es aussagekräftig um, z. B. in "Koodinatensystem CAM". Dieses wird dann auch an der CNC-Maschine eingelernt.


=== Frässtrategien ===
Durch das das abtragende Herstellverfahren Fräsen können nun fast beliebige Geometrien aus dem Rohteil entstehen. Dazu werden verschiedene Frässtrategien verwendet, um ein Fertigteil realisieren zu können (z. B. häufig verwendet: "2D-Tasche"). Dazu wird zunächst der passende Fräser aus einer Bibleothek gewählt. Hier gilt wie beim Nullpunkt: Die Realität muss zum CAM passen. Abweichungen führen zu unerwünschten Ergebnissen und im schlimmsten Fall zu Beschädigung an Werkstück, Werkzeug und Maschine. Nach Festlegung der Fertigungschritte kann der Gesamtprozess in der Simulation evaluiert werden und über den Postprozess maschinelesbar gemacht werden.
<br/>
Wir haben dazu ein Lehrvideo erstellt. Es zeigt an einem einfachen Beispiel den kompletten Fertigungsprozess:
<br/>
'''<big>[https://youtu.be/j0SxZ2KrrYQ Lehrvideo]</big>'''


=== Besonderheiten ===
==== Restmaterialbearbeitung ====
Werden mehrere CNC-Arbeitsgänge erfolgen, so kann man z. B. einen Arbeitsgang mit einem großen Fräser erstellen, um viel Material zu zerspanen. Wenn dann ein Folgeschritt für die gleiche Kontur mit einem kleineren Fräser erfolgt, so muss in HSMExpress beim Tab "" die Option "Restmaterialbearbeitung" gewählt werden, wobei im Feld "Rest Material Tool Diameter" der Durchmesser des Fräsers im vorhergegangenen Schritt definiert wird. Dann "räumt" der kleine Fräser nur noch das übrig gebliebene Material weg und wird '''geschont'''!


=== CAD-Modelle ===


<source lang="matlab">
[[Datei:2,5 D.png|left|mini|300px|2,5D]]
function barcode_erstellen(Eingabe,schmal,breit)
%%-------------------------------------------------------------------------
%      PROGRAM:   barcode_erstellen(Eingabe,schmal,breit)
%      VERSION:    1.01
%          DATE:    2015-05-02
%  DESCRIPTION:    Program creates user defiend barcodes in CODE39
%                  notation.
%        AUTHOR:    Steffen Schulze Middendorf
%
%        INPUT:    Eingabe: Type in what you want to transform into CODE39
%                            notation. Function works exclusively with
%                            capital letters and numbers.
%                            In addition: '-';'.';' ';'$';'/';'+';'%'
%                  schmal:  Declare thickness of slender element in pixel
%                  breit:  Declare thickness of a wide element in pixel
%                            pixel
%
%                  Relation between slender and wide have to be 1:2.
%       
%        OUTPUT:    This progamm creates a new .JPG file in the program
%                  folder. Content of this image is the created barcode.
%                  Name of this file and data content of the barcode
%                  are the same. Each barcode starts and ends with a '*'
%                  automatically.
%
%      EXAMPLE:    barcode_erstellen('HSHL',50,100)
%
%    DISCLAIMER:    This program is freeware. Use at your own risk.
%                  Provided without any warranty
%--------------------------------------------------------------------------


%% Informationen einlesen und leeres Bild erstellen
[[Datei:3_D.png|mini|300px|3D]]
{| class="mw-datatable"
! style="font-weight: bold;" | 2,5D
! style="font-weight: bold;" | 3D
|-
| 3 lineare Achsen X,Y und Z
| Zustellachse (Z) ändert sich ständig
|-
| Flächen sind Parallel oder Senkrecht zur Aufstellfläche
|
|}


%Größe des Barcodes in Pixel bestimmmen aus Anzahl Zeichen + Zusatzlücken
Es ist zu beachten, dass es mit einem 2,5D Fräser auch möglich ist 3 Dimensionale Teile zu fräsen. Man muss lediglich mehr als einen Fräsvorgang absolvieren und das Werkstück zwischen den Vorgängen in die gewünschte Lage einspannen.
%+2 für START STOPP Zeichen -1 FÜR Lücke zum Schluss
Laenge=(6*schmal+3*breit)*(length(Eingabe)+2)+((length(Eingabe)+1)*schmal);


%Leeres schwarzes Bild(CODE39) in benötigter Breite und Höhe erstellen,
=== Parameter ===
%Standarthöhe ist zehnfache breite eines breiten Elements.
Wie bereits erwähnt, ist es von äußerster Wichtigkeit, dass im CAM die Realität genau abgebildet wird. Ein Beispiel:
CODE39 = zeros(10*breit,Laenge,3);
Ist der Fräserdurchmesser in CAM mit 4mm angegeben, während in der realen Maschine ein 8mm eingespannt ist, führt dies zur entsprechenden Berechnung aller Werkzeugwege eines 4mm Fräsers. Das hat zur Folge, dass in Realität alle Taschenförmigen Aussparungen 2mm größer werden als geplant. Das Werkstück ist damit wahrscheinlich nicht mehr zu gebrauchen.
Auch Abseits falscher Vorgaben, ist auf gute Parametriesierung zu achten.


%Startpunkt in x festlegen(Pixelspalte)
==== Fräser ====
Startpunkt=0;
Der Fräser hat einen enormen Einfluss auf das Fräsergebnis. Nicht nur der Durchmesser, sondern auch die Anzahl der Schneiden sowie die Schärfe haben einen großen Einfluss auf das Ergebnis. Zunächst wurde Dremel-Werkzeuge zur Zerspanung des Holzes eingesetzt. Diese führte häufig zu hoher Temperaturentwicklung, da die Späne nicht richtig abgeführt werden konnten. Folglich erkennt man die hohe Temperatur sowohl am fertigen Werkstück, anhand von schwarzen und verbrannten Bereichen, als auch an unangenehm entwickelnden Gerüchen während des Fräsvorgangs. Die zu verwendenden Fräsparameter werden zwar von der CAM-Software vorgegeben, doch hat die Fräse beispielsweise keine Drehzahlregelung, dessen Größe händisch ermittelt werden muss.


%% Startzeichen, Eingabe und Endzeichen in CODE39 notation in leeres Bild einfügen
<gallery class="center">
Datei:Fräser.jpg| Fräservergleich
Datei:CAMV1.JPG| Versuch 1
Datei:CAMV2.JPG| Versuch 2
Datei:CAMV3.JPG| Versuch 3
</gallery>


% Insgesamt besteht jeder CODE39 barcode aus 4 verschiedenen Elementen.
==== Frässtrategie ====
% Zur Erstellung jedes dieser Elemente existiert eine Erstellungsfunktion.
[[Datei:Frässtategien.jpg|mini|300px|Funktionsschema]]
% schmal_strich(Startpunkt,Bild,schmal);
Die Frässtrategie beeinflusst nicht nur das Ergebnis, sondern auch die benötigte Bearbeitungszeit. Alle auswählbaren Frässtrategien werden in CAD SolidWorks ausführlich und verständlich erklärt, sobald man mit dem Cursor über die jeweilige Namen geht. Unten ist beipsielhaft gezeigt, wie die Wahl der falschen Frässtrategien das Ergebnis negativ beeinflussen kann. Bei Auswahl von "2D-Adaptive-Clearing" wird man keine glatten Kanten erhalten. Das mehrfache Ansetzen des Fräsers wird deutlich zu erkennen sein. Die Auswahl der richtigen Strategie erfordert etwas Übung. Eine gute Erklärung zu allen verfügbaren Strategien findet sich [http://help.autodesk.com/view/INVHSM/2016/DEU/?guid=GUID-714CD045-51B9-4CB4-9EB3-0213E011B122 hier]. Achtet bei der Auswahl der Sicherheitshöhen auf intelligente Parametrisierung, damit diese auch erreicht werden können! Die Maschine verfügt derzeit über keine Endschalter in der z-Achse(Höhe), was zur Kollison mit Befestigungselementen der Spindel führen kann.
% schmal_luecke(Startpunkt,Bild,schmal);
% breit_luecke(Startpunkt,Bild,breit);
% breit_strich(Startpunkt,Bild,breit);


%Startzeichen "*" einfügen
==== Spannsituation ====
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
[[Datei:Spannsituation.jpg|left||mini|300px|Gute Aufspannung inkl. Unterlage]]
[Startpunkt,CODE39] = breit_luecke(Startpunkt,CODE39,breit);
Wichtig für einen Erfolgreichen Fräsprozess ist die richtige Aufspannung des Werkstückes. Immer auf eine Stabile und feste Einspannung des Werkstücks achten. Wenn sich das Bauteil währned der Bearbeitung verschiebt, führt dies zu unerwünschten Ergebnissen.
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
Der von uns befestigte Schraubstock ist dazu ein gutes Mittel. Größere Bauteile können dirket auf dem Maschinentisch, beispielsweise mit Schraubzwingen, befestigt werden. Gerade in der ersten Phase der Einarbeitung bietet es sich an, den Notauschalter nicht aus der Hand zu legen.
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
<br/>
[Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);
<br/>
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
<br/>
[Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);
<br/>
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
%Jedes Zeichen beginnt mit einem Strich und endet mit einer schmalen Lücke
%Schleife durchläuft jedes einzelne Teichen der Eingabe und codiert es in
%die entsprechende Strich/Lücke Kombination. Nach CODE39 Standart.


for i=1:length(Eingabe)
==== Postprozess ====
    if Eingabe(i) == '0'
Im Postprozess werden die Verfahrwege maschinenlesbar umgewandelt. Unterschiedliche Steuerungssoftware auf verschiedenen Maschinen führen jedoch dazu, dass jede Maschine ihren eigenen Postprozessor benötigt. Im Falle von HSMExpress2016 sind bereits 70 verschiedene Postprozessoren integriert. Diese können vor der Umwandlung entsprechend ausgewählt werden. Auch ein Postprozessor für das verwendete LinuxCNC ist standardmäßig vorhanden. Unsere interne Stuerungssoftware über Matlab kann den gleichen Code verarbeiten.
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
Sollte die Syntax von G-Code noch nicht bekannt sein, empfehlen wir [https://de.wikipedia.org/wiki/Computerized_Numerical_Control#DIN.2FISO-Programmierung_bzw._G-Code diese] Seite. Hier wird der Aufbau von G-Code anhand von Norm-G-Code erklärt.
        %Jede Element-Erstellfunktion bekommt den bisherigen erstellten CODE
Der integrierte Postprozessor von HSMExpress2016 nutzt nur 3 Arten von Positionsbefehlen: G01,G02 und G03. Translatorische Bewegungen und Rotationen mit und gegen den Uhrzeigersinn. Durch das nicht Verwenden von Spezialbefehlen wird der Code zwar sehr lang, kann aber leicht Verstanden werden. In den Downloads findet sich ein Übungsblatt für G-Code.
        %die jeweiligen Paramter für breit und schmal sowie den Startpunkt
        %für die Erstellung Ihres nächsen Elemements übergeben.
        %Rückgabewerte sind der neue CODE und der neue Startpunkt.
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = breit_luecke(Startpunkt,CODE39,breit);   
        [Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit); 
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);   
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal); 
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal); 
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal); 
    end


    if Eingabe(i) == '1'
==== SolidWorks CAM G-Code für LinuxCNC lesbar machen ====
        [Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit); 
Um ein mit SolidWorks modelliertes 3D Teil an der hochschuleigenen CNC-Bearbeitungsmaschine zu fräsen, muss der G-Code über den Linux Postprozessor generiert werden. Sollte dies nicht möglich sein, wird der G-Code manuell angepasst. Eine Anleitung finden Sie hier [[Datei:Gcode bearbeiten.pdf]]. Trotz erfolgreicher Tests garantiert diese Anleitung keinen Erfolg. Beobachten Sie daher den Fräsvorgang aufmerksam um bei auftretenden Problemen möglichst Schäden zu vermeiden.
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = breit_luecke(Startpunkt,CODE39,breit); 
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
        [Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);
        [Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
    end
    .......
end
</source>


Zur besseren Übersicht wurde ein Teil des Codes entfernt. Letztlich wiederholen sich die IF-Abfragen und stellen jeweils einen Buchstaben da. Die Kombination von Strichen und Lücken wird direkt in das anfangs noch leere Bild übertragen.
= Oberfläche & Bedienung von LinuxCNC =
Zu diesem Thema wurde ein separater Artikel erstellt, siehe [[Oberfläche & Bedienung von LinuxCNC]]


<source lang="matlab">
= Fräser und ihre Parameter zum Fräsen von unterschiedlichen Materialien =
%Endzeichen "*" einfügen
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = breit_luecke(Startpunkt,CODE39,breit);
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = breit_strich(Startpunkt,CODE39,breit);
[Startpunkt,CODE39] = schmal_luecke(Startpunkt,CODE39,schmal);
[Startpunkt,CODE39] = schmal_strich(Startpunkt,CODE39,schmal);


%% Dateiname zusammensetzen aus Eingabetext und Endung '.JPG' und Bild auf Festplatte schreiben


%Dateiname zusammensetzen
{| class="wikitable"
a{1} = Eingabe;
! style="font-weight: bold;" | Material
a{2} = '.JPG';
! style="font-weight: bold;" | Dicke
Dateiname = [a{1} a{2}];
! style="font-weight: bold;" | Fräser Name
%Datei auf Festplatte schreiben
! style="font-weight: bold;" | Fräser Durchmesser
imwrite(CODE39,Dateiname)
! style="font-weight: bold;" | Link
Ausgabetext=['Generation and saving of ',Dateiname,' completed succesfully.'];
! style="font-weight: bold;" | Frästiefe
disp('-----------------------------------------------------------')
! style="font-weight: bold;" | Drehzahl
disp(Ausgabetext)
! style="font-weight: bold;" | Vorschub
disp('-----------------------------------------------------------')
! style="font-weight: bold;" | Bemerkungen
end
|-
</source>
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|}
=== Probleme beim Fräsen===
{| class="wikitable"
! style="font-weight: bold;" | Problembeschreibung
! style="font-weight: bold;" | Bild vom Problem
! style="font-weight: bold;" | Ursache
! style="font-weight: bold;" | Lösung
! style="font-weight: bold;" | Bild von der Lösung


Letzlich wird ein neues Bild im Format JPEG im Funktionsordner auf die Festplatte geschrieben, der Dateiname einspricht der Eingabe beim Funktionsaufruf und enthält den erzeugten Barcode.
|-
| Überhitzung des Materials am oberen Rand der Fräskante
| [[Datei:ÜberhitzungFräse.jpeg|250px|thumb|]]
| Frässchaft dringt ins Material ein und überhitzt
| Längeren Fräser einsetzten, sodass immer noch ein Teil der Schneide rausguckt
|-
| Ausfransen der oberen Fräskante
| [[Datei:AusfransenFäskante.jpeg|250px|thumb|]]
| Eine zu langsame Vorschubgeschwindigkeit während des Fräsvorganges
| Passende Vorschubgeschwindigkeit raussuchen/berechnen und einstellen
| [[Datei:SaubereFräskante.jpeg|250px|thumb|]]
|-
|}


Exemplarisch sei der Inhalt einer der verwendeten Funktionen hier breit_strich erwähnt, der Aufbau der anderen drei Funktionen zum erstellen der einzelnen Elemente ist prinzipiell identisch:


<source lang="matlab">
Für die Fräser der Fa. GIS zeigt [http://gis-tec.com/deutsch/d_fraeser_empfehlungstabelle.htm diese Tabelle] eine sehr gute Übersicht.
function [Startpunkt,Bild] = breit_strich(Startpunkt,Bild,breit)
%Einfärben des aktiveren Bereichs ab Startpunkt bis Startpunkt plus
%Elementbreite
for k=1:breit
    Bild(:,Startpunkt+k,1)=255;
    Bild(:,Startpunkt+k,2)=255;
    Bild(:,Startpunkt+k,3)=255;
end
%Berechnung des neuen Startpunkts
Startpunkt=Startpunkt+breit;
</source>
Jede Element-Erstellfunktion bekommt den bisherigen erstellten Code die jeweiligen Paramter für breit und schmal sowie den Startpunkt für die Erstellung des nächsten Elemements übergeben. Rückgabewerte sind der aktualisierte Strichcode(inkl. der durchgefürhrten Änderungen, d.h. des hinzufügen Elements) und der neue Startpunkt für den nächsten Funktionsdurchlauf.


== Implementierung Barcode lesen ==
[https://www.cnc-wiki.de/Betrieb/Fraesparameter CNC-WIKI Fräsparameter]
[[Datei:Barcode_lesen.jpg|mini|Übersicht Funktionsablauf Barcode_lesen]]
Die Funktion zum Lesen von Barcodes benötigt eine Eingabe als Eingabe ausschließlich den Pfad zu einem Dokument im JPEG Format welches einen in CODE39 Notation erstellten Barcode enthält. In vielen Fällen kann das erstellte Programm trotz Fehlstellen oder Abweichungen den Inhalt des Barcodes auslesen. Siehe dazu auch die Beispiele im Kapitel "Beispielbilder".
Typische Fehlstellen die "restauriert" bzw. akzeptiert werden  werden können sind:
*Fingerabdrücke
*Linien die den Barcode kreuzen
*Fehlstellen an den Rändern des Barcodes
*Kleine Winkel bis max. 10° schieflage des Barcodes


Die Funktion gibt den Inhalt des Barcodes anschließend als Array zurück.
[https://www.stepcraft-systems.com/service/fraesparameter stepcraft-systems Fräsparameter]


Im folgenden soll die Funktionsweise kurz Zusammengefasst werden, Detailangaben finden sich als Kommentare im Quelltext.
[https://docs.google.com/spreadsheets/d/10y9F1nOVXd4F-jjxIbwn3xm1nA_I3wNIzyn2lyzdTVU/edit#gid=0 CNC-Fräsparameter www.bastelkellair.de]
Zunächst wird das zu analysierende Bild eingelesen und in ein Schwarz/Weiss Bild umgewandelt. Danach sorgen verschiedene Filter zunächst dazu kleine Partikel zu enfernen, danach zerstörte schwarze Striche aufzufüllen und zuletzt, Striche die nicht als Barcode angenommen werden können zu entfernen. Die Filterparamter wurden dazu an die zu erwartenden Bild(ca.2000x2000) und Codebreiten(z.b. erstellt durch Barcode_erstellen Funktion mit den Paramentern 50,100) angepasst.


<source lang="matlab">
[https://www.cenon.company/cgi-bin/ToolCalc?lng=de Fräsparameter Richtwert Rechner]
function [Inhalt] = barcode_lesen(Barcode)
%%-------------------------------------------------------------------------
%      PROGRAM:   barcode_lesen(Barcode)
%      VERSION:    1.01
%          DATE:    2015-05-02
%  DESCRIPTION:    Program reads user defiend barcodes in CODE39
%                  notation and is moderately fault tolerant.
%        AUTHOR:    Steffen Schulze Middendorf
%
%        INPUT:    Barcode: This progamm reads a '.JPG' file.
%                            Content of this image have to be a barcode
%                            in CODE39 notation.
%
%        OUTPUT:    Inhalt: Content of the barcode.
%
%      EXAMPLE:    barcode_lesen('C:\Users\HSHL.JPG')
%
%    DISCLAIMER:    This program is freeware. Use at your own risk.
%                  Provided without any warranty
%--------------------------------------------------------------------------


%% Bild einlesen und Filtern
[https://zero-divide.net/index.php?page=fswizard Fräsparameter Richtwert Rechner Handy App]
%Bild einlesen
Dateiname=Barcode;
Barcode=imread(Barcode);
%Umwandlung in Schwarz/Weiss Bild
SWBarcode=~im2bw(Barcode);
%Filter anwenden
%Elemente kleiner 100 pixel löschen
SWBarcode = bwareaopen(SWBarcode,100,8);


%Zerstörte Schwarze Striche wieder auffüllen
[https://webseite.sorotec.de/download/fraesparameter/schnittwerte.pdf sorotec Fräsparameter]
Filterparameter = strel('square',9);
SWBarcode = imclose(SWBarcode,Filterparameter);


%Faben wieder umkehren und kleine  Striche entfernen
SWBarcode=~SWBarcode;
Filterparameter = strel('square',13);
SWBarcode = imclose(SWBarcode,Filterparameter);


</source>
{| class="mw-datatable"
Im Anschluss wird der Barcode auf dem Bild gesucht. Dies geschieht durch durchlaufen des gesamten Bildes in einer FOR-Schleife und Zählen von schwarzen Pixel, sobald der Schwellert(Pixelcounter) überschritten ist, ist auch der Anfang des Barcodes gefunden. Das Ende findet sich durch inverses Durchlaufen.  
! style="font-weight: bold;" | Material
<source lang="matlab">
! style="font-weight: bold;" | Frästiefe
! style="font-weight: bold;" | Benutzter Fräser
! style="font-weight: bold;" | Links
! style="font-weight: bold;" | Ergebnis
|-
| Thermoplast
| 1,5mm
| gis-tec F126.0100
| [http://gis-tec.com/deutsch/d_fraeser_f126.htm]
| Sehr sauber, Späne werden gut nach oben herausgeführt
|-
| ..
| ..
| ..
| ..
| ..
|-
|}
*  Original Exceldatei der vorhandenen Werkzeuge im Labor [https://hshl.sciebo.de/s/J9c0S3yTpIybz7V]


%% Anfang und Ende des Barcodes finden
= Vergleich Ansteuerungssoftware =
%Größe des eingelesenen Bildes feststellen
Abmasse=size(SWBarcode);
xmass=Abmasse(2);
ymass=Abmasse(1);
%Gesuchte Maße initialisieren
yEnde=0;
xEnde=0;
yStart=0;
xStart=0;
CounterSchwarzePixel=0;
Anfanggefunden=0;
%Anfang des Barcodes finden in Y(Höhe), durch zählen der schwarzen Pixel
%von oben beginnend
for i=1:ymass
    if Anfanggefunden==1
        break       
    end
    for k=1:xmass
        if SWBarcode(i,k)== 0
            %Counter zählt schwarze Pixel um sicherzustellen das
            %nicht aufgrund eines nicht gefilterten schwarzen Pixels
            %der falsche Bereich ausgeschnitten wird
            CounterSchwarzePixel=CounterSchwarzePixel+1;
        end         
        %Wenn Pixelcounter > 500 wird die Schleife abgebrochen und
        %und der yStart Wert gesichert
        if SWBarcode(i,k)== 0 && CounterSchwarzePixel > 10000
            yStart=i;
            Anfanggefunden=1;
            break
        end         
    end
end
%Zurücksetzen der Zähler
CounterSchwarzePixel=0;
Anfanggefunden=0;
%Ende des Barcodes finden in Y(Höhe), durch zählen der schwarzen Pixel von
%unten beginnend
for i=ymass:-1:1
    if Anfanggefunden==1
        break       
    end
    for k=xmass:-1:1
        if SWBarcode(i,k)== 0
            CounterSchwarzePixel=CounterSchwarzePixel+1;
            %Counter zählt schwarze Pixel um sicherzustellen das
            %nicht aufgrund eines nicht gefilterten schwarzen Pixels
            %der falsche Bereich ausgeschnitten wird
        end
        %Wenn Pixelcounter > 500 wird die Schleife abgebrochen und
        %und der yStart Wert gesichert
        if SWBarcode(i,k)== 0 && CounterSchwarzePixel > 10000
            yEnde=i;
            Anfanggefunden=1;
            break
        end 
    end   
end
%Zurücksetzen der Zähler
%Anfang des Barcodes finden in X(Länge)
Anfanggefunden=0;
for i=1:xmass
    if Anfanggefunden==1
        break       
    end
    for k=yStart:yEnde
        if SWBarcode(k,i)== 0
            xStart=i;
            Anfanggefunden=1;
            break
        end 
    end
end
%Ende des Barcodes finden in X(Länge)
for i=1:xmass
    for k=yStart:yEnde
        if SWBarcode(k,i)== 0 && i>xEnde
            xEnde=i;
        end 
    end   
end


</source>
{| class="wikitable"
Nun wird der signifikante Bereich, der den Barcode enthalten soll ausgeschnitten. Zudem wird im unteren Teil des Funktionsabschnitts der breiteste breite Strich gesucht. Dieser Wert ist für die spätere Analyse und Tolerierung von großer Wichtigkeit.
! style="font-weight: bold;" | Eigenschaft
<source lang="matlab">
! style="font-weight: bold;" | LinuxCNC
 
! style="font-weight: bold;" | Eigene Matlab Lösung
%% Barcode ausschneiden auf Bereich mit Code-Inhalt unter Berücksichtung der analysierten Anfang-Ende Maße
! style="font-weight: bold;" | MACH3 OEM
CodeZentriert=SWBarcode(yStart:yEnde,xStart:xEnde);
! style="font-weight: bold;" | UCCNC
AbmasseZentriert = size(CodeZentriert);
! style="font-weight: bold;" | SerialComCNC
%Größe des neuen zentrierten Bildes feststellen
! style="font-weight: bold;" | USBCNC
xmassZ=AbmasseZentriert(2);
|-
ymassZ=AbmasseZentriert(1);
| Kosten
%% Breite von breiten und schmalen Elementen herausfinden
| umsonst
%Herausfinden wie breit (Pixel) ein breiter Strich ist
| umsonst
%Initialisieren der gesuchten Variablen
| 149,-€
Breit=0;
| 55,-€
MaximalBreit=0;
| umsonst
for i=1:xmassZ
| umsonst(219,-€ -> Controller Hardware)
    if CodeZentriert(round(ymassZ/2),i) == 1
|-
        %Es wird so lange addiert wie durchgängig schwarze Pixel vorhanden
| Beschreibung
        %sind.
| Vorinstalliert auf dem HSHL-PC. Ließt den zuvor generierten G-Code in CAD SolidCAM und lässt die Maschine die Verfahrwege problemlos abfahren, sobald die Referenzpunkte gesetzt worden sind.
        Breit=Breit+1;
| Bearbeitet von Gruppe "Zentraler Steuerungsalgorythmus (Matlab)"
    end   
| Mach3 ist eine leistungsstarke CNC-Steuerungssoftware. Es erzeugt Bewegungen von Standard-G-Code und hat viele Möglichkeiten. Es ist auch mit diversen MACH3 Servoantrieben kompatibel. Mach läuft unter Windows Betrieb System.Es ist keine externe Hardware erforderlich.
    if CodeZentriert(round(ymassZ/2),i) == 0
| UCCNC-Steuerungssoftware, arbeitet mit den Ethernet-Bewegungssteuerungen UC100, UC300, UC300ETH und UC400ETH.
        %Sobald ein weißer Pixel unterbricht wird anaysiert ob es sich um
| Lauffähig mit Windows XP, Vista,7 ,8, 10. Betrieb bis zu 3 Schritt/Stepper-Motoren. Verbindung vom Arduino zum PC mittels USB-Kabel (virtueller serieller Port).
        %die längste Folge von schwarzen Pixeln gehandelt hat, wenn ja
Es lassen sich beliebige G-Code Files im Text-Modus einlesen, ausführen und editieren.
        %wird die Länge in Maximalbreit gesichert.
| Siehe nächster Abschnitt: "Alternative Steuerungssoftware für Windows"
        if Breit > MaximalBreit
|}
            MaximalBreit=Breit;
        end
        Breit=0;
    end
end
%Maximale Breite wird genutzt um auch die Breite des schmalen Elements
%zu bestimmen Verhältnis 1:2 ist bekannt.
Breit=MaximalBreit;
Schmal=round(Breit/2);
%Zugeschnittenes Bild anzeigen
imshow(CodeZentriert)


</source>
Da LinuxCNC bereits vorinstalliert war und die Software uns in keiner Weise beschräkt hat, haben wir uns haupsächlich mit dieser Software beschäftigt. Interressanter als eine weitere Zukaufvariante wäre es, die Software aus der Gruppe "Zentraler Steueralgorythmus in Matlab" auf der Maschine zum laufen zu bringen.
Um nun den Code wieder entschlüsseln zu können, müssen Toleranzen für die Erkennung von Elementen festgelgt werden. Grundsätzlich bedeutet das dünne von dicken Strichen bzw. Lücken unterscheiden zu können. Grundlage ist hierzu der gefundene breiteste Strich. Von diesem lassen sich nun die Grenzen für alle anderen Elemente ableiten.
<source lang="matlab">


%% Toleranzen für Elemente festlegen
= Alternative Steuerungssoftware für Windows =
%Toleranzen festlegen oT = obere Toleranz uT = unterere Toleranz
[[Datei:Eding.jpg|mini|left|300px|Oberfläche von EdingCNC]]
%Breites Element
[[Datei:4Achse.jpg|mini|300px|Eding bzw. USBCNC bietet in einer höheren Ausbaustufe die Möglichkeit, auch die konstruierte 4. Achse anzusteuern[http://www.edingcnc.com/products.php]]]
oTBreit = round(Breit+Breit/3);
Um eine Alternative für den 2. Rechner und das Betriebssystem Windows aufzuzeigen, wurden oben Steuerungsprogramme für CNC Maschinen verglichen. Ausgewählt wurde "Eding CNC v4.01.56". Das Programm arbeitet mit einem externen Prozessor um Echtzeitproblemen unter Windows aus dem Weg zu gehen. Der einfachste externe Controller kostet 219€. Die Software lässt sich bereits ohne physikalischen Controller installieren und ausprobieren.
uTBreit = round(Breit-Breit/3);
Zunächst muss dazu in SolidWorks/HSMExpress der Postprozessor "Generic Eding CNC" ausgewählt werden. Der Code wird damit auf die neue Software angepasst. Ein Beispiel haben wir links erstellt. Im Simulationsmodus wird das Programm unter Windows 7 64Bit problemlos abgefahren. Die Bedienung gleicht der von LinuxCNC. Zunächst muss das Programm geladen werden, nach einen Druck auf den grünen Start Button beginnt die Ausführung. Vorschub usw. können während des Pragrammablaufs überschrieben werden. Eine weiterführende Aufgabe könnte sein, die vom Programm erzeugten Signale aufzunehmen und zu verarbeiten, um wieder unsere Gecko Motortreiber anschließen zu können.
%Schmales Element
Das links dargestellte Beispiel findet sich auch unten in den Downloads.
oTSchmal = round(Schmal+Schmal/3);
uTSchmal = round(Schmal-Schmal/3);


</source>
= Lessons learned und Fazit=
Letztendlich wird der verbliebene zentrierte Barcode nochmals von links nach rechts in einer FOR-Schleife durchlaufen um den Inhalt nach und nach auszulesen. Die Identifikation erfolgt anhand der oben angegeben Toleranzen und dem Farbwechsel, der den Anfang und das Ende eines neuen Elements beschreibt.  
Das Praktikum hat uns einen tiefen Einblick in den Bereich "Computer Aided Manufacturing" gebracht. Neben der Auswahl der Software und deren Bedienung, waren besonders die Testläufe intressant, da die durchgeführten Änderungen in der Realität schnell sichbar wurden.  
Die Elemente werden jeweils zu Bündeln zu je 10 Elementen zusammengefasst. Wobei:
Auch die Sicherheitstechnischen Aspekte bzgl. Kollision konnten erprobt werden. Es ist klar geworden, welche Parameter zu beachten sind, um weder Mensch noch Material zu beschädigen. Ein Vorteil, der im fertigungstechnischen Alltag hilfreich sein kann.  
*1 = schmaler Strich
Das Projekt ist sicherlich noch nicht abgeschlossen. Wir haben uns in diesem Semster auf 2,5D-Bearbeitung konzentriert. In der nächsten Ausbaustufe könnte die CAM Bearbeitung auf 3D-Flächenbearbeitung erweitert werden. Auch Könnte die jetzt neu implementiere 4-Achse mit in den CAM-Prozess mit einbezogen werden. Für den aktuellen Stand der Aufgabenliste siehe SVN.
*2 = schmale Lücke
*3 = breiter Strich
*4 = breite Lücke
Ein Array mit zehn dieser Zahlen wird dann der Funktion Entschlüsseln zur Verfügung gestellt. Diese erkennt anhand der Kombination den zugehörigen Buchstaben.  
<source lang="matlab">


%% Code nacheinander einlesen und auswerten
= Ausblick und weitere Bearbeitungsmöglichkeiten =
%Initialisieren der Variablen
1. "Formel", die die Genauigkeit beim fräsen erhöht und Fehlertoleranzen entgegenwirkt.<br/>
Breite=0;
2. Mithilfe der 4ten Achse: Fräsen von komplexen, 3-Dimensionalen Bauteilen/Figuren (PS4/Xbox Controller).<br/>
Ausgabe=[];
3. Schnelle fräsvorgänge: Kurze und einfache Fräsvorgänge mit höchster Geschwindigkeit fräsen lassen um das Maximum der Maschine zu demonstrieren.
FarbeALT=0;
Anfanggefunden=0;
%Bild "CodeZentriert" durchlaufen und nach Elementen Strich/Lücke suchen
%Anfang finden(wichtig für schräge codes)
for i=1:xmassZ
    Farbe=CodeZentriert((round(ymassZ/2)),i);
    if Anfanggefunden ~= 1 && Farbe==0
        Anfanggefunden=1;
    end
    %Solange kein Farbwechsel stattfindet, Breiten aufaddieren
    if Anfanggefunden == 1
        if Farbe==FarbeALT
          Breite=Breite+1;
        end
        %Wenn Farbwechsel stattfindet, vergleich um welches Element es
        %sich handelt unter Berücksichtung der Toleranzen
        %Schmaler Strich
        if Farbe ~= FarbeALT || i==xmassZ
            if (Breite>uTSchmal) && (Breite<oTSchmal) && (FarbeALT==1)
            %Ausgabe speichert ein Array mit den Zahlen 1,2,3,4 diese
            %stehen jeweils für ein Element
            Ausgabe=[Ausgabe 1];
            end
            %Schmaler Strich
            if (Breite>uTSchmal) && (Breite<oTSchmal) && (FarbeALT==0)
            Ausgabe=[Ausgabe 2];
            end
            %Breite Lücke
            if (Breite>uTBreit) && (Breite<oTBreit) && (FarbeALT==1)
            Ausgabe=[Ausgabe 3];
            end
            %Breiter Strich
            if (Breite>uTBreit) && (Breite<oTBreit) && (FarbeALT==0)
            Ausgabe=[Ausgabe 4];
            end
            Breite=1;
            FarbeALT=Farbe;
        end
    end 
end
k=0;
q=0;
Loesung=[];
Inhalt=[];
while numel(Ausgabe) > 0
  if numel(Ausgabe) > 10
        for k=1:10
            %Immer 10 Zahlen(1,2,3,4) ergeben einen Buchstaben, daher
            %werden jetzt immer 10 aufeinander folgenden Zahlen zu einem
            %Lösungspaket zusammengechnürt
            Loesung=[Loesung Ausgabe(k)];
        end
        for k=1:10
            %Verwertete 10 Element löschen
            Ausgabe(1)=[];
        end
        %Ausgabearray wird in den wahren Inhalt transformiert. Kombination
        %von 1,2,3,4 ergbit wieder ein Zeichen, dafür wird die Funktion
        %entschlüsseln genutzt
        [Zeichen] = entschluesseln(Loesung);
        %Zeichen wird in Inhalt(Ausgabearray) geschrieben
        Inhalt=[Inhalt Zeichen];
        %Lösungsarray wieder leer setzen
        Loesung=[];
  else
      %Wenn sich nur noch 10 Elemente im Ausgabe befindet wird noch einmal
      %der Inhalt von Ausgabe um 1(schmale Lücke) erweitert.
      Loesung=[Ausgabe 1];
      [Zeichen] = entschluesseln(Loesung);
      Inhalt=[Inhalt Zeichen];
      Ausgabe=[];
      Ausgabetext=['Reading and analysing of ',Dateiname,' completed succesfully. Content:']
      disp('-----------------------------------------------------------')
      disp(Inhalt)
      disp('-----------------------------------------------------------')
  end
end
end
</source>
Der entschlüsselte Buchstabe wird in einem letzten Schritt in das Ausgabearray "Inhalt" hinzugefügt.
Der Barcode ist nun wieder in ACII Zeichen umgewandelt und wird ausgegeben.


== Beispielbilder und Funktionsbeweis ==
= Download =
Folgende Bilder konnten unter Zuhilfename der oben gezeigten Funktion ausgelesen werden. Die hinzugefügten Abweichungen sind unter den Bildern zusammengefasst.Die Bilder weisen einen steigenden Schwierigkeitsgrad auf. Alle Barcodes haben den Inhalt "HSHL".
*[[Medium:CAMTestbauteil.zip|Testbauteil CAM & G-Code]]
<gallery class="center">
*[[Medium:Übungsaufgabe_G-Code.zip|Übungsaufgabe G-Code]]
Datei:K1600_HSHL1.JPG|(1) Bild enhält ausschließlich Barcode
*[[Medium:EdingDW.zip|Testbauteil USBCNC]]
Datei:K1600_HSHL2.JPG|(2) Barcode ist nicht mehr zentral und zusätzlich schief
Datei:K1600_HSHL3.JPG|(3) Barcode ist dezentral, schief und weißt Fehlstellen auf
Datei:K1600_HSHL4.JPG|(4) Wie 3 aber zusätzlich teilweise durchgestrichen
Datei:K1600_HSHL5.JPG|(5) Wie 4 aber zusätzlich vom Bildschirm fotografiert
Datei:K1600_HSHL6.JPG|(6) Wie 5 aber zusätzlichen Interferenzen
</gallery>


== Lessons learned und Fazit==
= Youtube Lehrvideo - How to "CAM" =
Die Aufgabe Barcodes zu generieren und zu lesen war Teil der Prüfungsleistung im Bereich Signalverarbeitung im Studiengang Business and Systems Engineering. Das Projekt hat mir die Grundlagen der Bildverabreitung in Matlab näher gebracht. Mir ist klar geworden wie mächtig die in Matlab(Image processing toolbox) integrierten Filter bei richtigem Einsatz sein können. Das eine auf die Situation zugeschnitte Parametrisierung mindestens genauso von Bedeutung ist.
*[https://youtu.be/j0SxZ2KrrYQ Lehrvideo]
Auch die Content-Erstellung im Wiki war für mich neu und ich war überrascht wie schnell man auch hier Erfolge erzielen konnte.


== Download ==
= Weblinks =
*[[Medium:2015-05-17_Barcode.zip|Barcode Programme inkl. Testbild]]


== Youtube Video ==
*[https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/CAM/ SVN-Projektordner]
 
*[http://www.hsmworks.de/ HSMWorks]
*[https://www.youtube.com/watch?v=imEk-2UWk1s&feature=youtu.be: Youtube Video]
*[https://campusapp02.hshl.de/.solidworks/ SolidWorks Download]
== Weblinks ==
*[https://de.wikipedia.org/wiki/Computerized_Numerical_Control#DIN.2FISO-Programmierung_bzw._G-Code Was ist G-Code]
*[http://barcode.tec-it.com/barcode-generator.aspx?LANG=de: Barcode Generator]
*[http://www.edingcnc.com/ USBCNC-Homepage]
*[http://de.wikipedia.org/wiki/Strichcode Strichcodes auf Wikipedia]
*[http://www.mzi-systemtechnik.de/BarcodeWozu.html: Anwendungsbeispiele]


----
----
→ zurück zum Hauptartikel: [[SigSys_SoSe2015| Signalverarbeitende Systeme SoSe2015]]
→ zurück zum Hauptartikel: [[3-D-Bearbeitungsmaschine_(Projekt_des_Schwerpunkts_GPE_im_Studiengang_MTR)| Produktionstechnik Praktikum]]
 
== Einzelnachweise ==
 
<references />

Aktuelle Version vom 23. April 2024, 16:01 Uhr

Ein Beispiel für ein über CAM gefrästes Bauteil

Einleitung

Projekt aus 3D-CNC-Bearbeitungsmaschine (Produktionstechnik Praktikum im Modul Global Production Engineering 3).

Die zentrale Aufgabe von CAM ist es, aus einem Modell oder ähnlichem (kann auch eine Skizze, ein Bild etc. sein) ein CNC-Programm zu erstellen, das eine Maschine dazu veranlasst, den geplanten Arbeitsablauf umzusetzen. Eine zentrale Rolle spielen dabei die G- und M-Befehle für die Maschine.

Motivation & Aufgabenstellung

Ziel des Praktikums ist in gemeinschaftlicher Arbeit eine Werkzeugmaschine zu entwicklen. Einzelne Funktionsbereiche werden von Kleingruppen bearbeitet. Das Funktionsschema ist rechts dargestellt. Wir haben uns besonders mit den Bereichen "CAM" sowie "Steuerungsprogramm" beschäftigt.

Funktionsschema
Grundfunktion CAM

Komplexe mechanische Bauteile können heute leicht in CAD-Programmen erstellt werden. Die Hochschule Hamm-Lippstadt stellt eigens dazu die Studentenversion von SolidWorks2016 zur Verfügung. Bisher konnten genannte Bauteile nur innerhalb der CAD-Software konstruiert werden. Um die Produktion dieses Bauteils auf einer Werkzeugmaschine möglich zu machen, wird jedoch zusätzlich Maschinencode, ein sogeannter G-Code, benötigt. Ziel des Praktikums war daher, geeignete CAM-Software auszuwählen, zu beschaffen und zu testen. Zusätzlich soll die bereits vorhandene Steuerungssoftware der im MPS-Labor vorhandenen Eigenbaufräse evaluiert und eventuelle Alternativen zur derzeitigen Software LinuxCNC aufgezeigt werden. Siehe dazu auch die aktuelle Aufgabenliste im SVN.

Vergleich CAM-Software

Eigenschaft VisualCam HSMExpress2016 HSMWorks2016 SolidCam
Funktionen & Dimensionsrahmen 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.) 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.) 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.) 2,5D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.)
3D Werkzeugweg Strategien (Bohren, Planen, Fräsen, etc.) 3D Werkzeugweg Strategien (Parallel, Radial, 3D Planen, etc.) 3D Fräsen/ iMachining
4D/5D Fräsen Multi-Achsen-Fräsen Multiachsenbearbeitung
Preise 1695,- €/Lizenz (beinhaltet 2;2,5 und 3-Achsen-Fräsen Plugin für SolidWorks); 395,-€/Jahr Softwarewartung Jahrespauschale Kostenlos 630,70€/Monat; 5033,70€/Jahr 5000,-€/Jahr (beinhaltet2,5 Achsen Fräsen); 750,-€/Jahr Softwarewartung Jahrespauschale

Unter Berücksichtigung der Vor- und Nachteile der obrigen Tabelle, haben wir uns für HSMExpress2016 entschieden, weil die Software eine smarte Lösung bezüglich Budget und Anforderungen der Maschine darstellt. Aufgrund der Tatsache, dass unsere Maschine den Dimensionsrahmen von 2.5D nicht überschreitet, erfüllt die Software alle Erwartungen und lässt uns freien Spielraum. Möchte man allerdings einen 3D Fräsvorgang absolvieren, muss man auf Alternativprogramme umsteigen.

CAM-Software "SolidWorksCAM"

Dieser Link führt zum Artikel SolidWorksCAM. Die Arbeit und der Einstieg in die Software sollen durch den Artikel erleichtert werden.

CAM-Software "HSMExpress"

Arbeitsablauf

Als CAM-Software wurde HSMExpress2016 ausgewählt. Das Programm zeichnet sich durch seine tiefe Integration in die Benutzeroberfläche von SolidWorks2016 aus. Der Arbeitsprozess ist wie folgt:

  1. Erstellen des 3D-Modells
  2. Vorgabe des Rohteils in der CAM-Software
  3. Setzen des Nullpunkes im Modell
  4. Vorgabe und parametresierung der Fertigungsschritte in der CAM-Software
  5. Simulation der Fertigungsschritte
  6. Umwandlung der Fertigungsschitte in G-Code (Postprozess)

Rohteil

Für die Produktion eines Bauteils wird immer ein Rohteil benötigt. Dieses kann in der CAM-Software hinterlegt werden. Wichtig ist hierbei die richtige Lage des Nullpunktes, welche identisch zwischen der der realen Maschine und des Modells sein muss, da es sonst zu einer Kollision kommt. Am besten setzt man in SolidWorks bei der Konstruktion ein Koodinatensystem (Befehl "Koordinatensystem") und benennt es aussagekräftig um, z. B. in "Koodinatensystem CAM". Dieses wird dann auch an der CNC-Maschine eingelernt.

Frässtrategien

Durch das das abtragende Herstellverfahren Fräsen können nun fast beliebige Geometrien aus dem Rohteil entstehen. Dazu werden verschiedene Frässtrategien verwendet, um ein Fertigteil realisieren zu können (z. B. häufig verwendet: "2D-Tasche"). Dazu wird zunächst der passende Fräser aus einer Bibleothek gewählt. Hier gilt wie beim Nullpunkt: Die Realität muss zum CAM passen. Abweichungen führen zu unerwünschten Ergebnissen und im schlimmsten Fall zu Beschädigung an Werkstück, Werkzeug und Maschine. Nach Festlegung der Fertigungschritte kann der Gesamtprozess in der Simulation evaluiert werden und über den Postprozess maschinelesbar gemacht werden.
Wir haben dazu ein Lehrvideo erstellt. Es zeigt an einem einfachen Beispiel den kompletten Fertigungsprozess:
Lehrvideo

Besonderheiten

Restmaterialbearbeitung

Werden mehrere CNC-Arbeitsgänge erfolgen, so kann man z. B. einen Arbeitsgang mit einem großen Fräser erstellen, um viel Material zu zerspanen. Wenn dann ein Folgeschritt für die gleiche Kontur mit einem kleineren Fräser erfolgt, so muss in HSMExpress beim Tab "" die Option "Restmaterialbearbeitung" gewählt werden, wobei im Feld "Rest Material Tool Diameter" der Durchmesser des Fräsers im vorhergegangenen Schritt definiert wird. Dann "räumt" der kleine Fräser nur noch das übrig gebliebene Material weg und wird geschont!

CAD-Modelle

2,5D
3D
2,5D 3D
3 lineare Achsen X,Y und Z Zustellachse (Z) ändert sich ständig
Flächen sind Parallel oder Senkrecht zur Aufstellfläche

Es ist zu beachten, dass es mit einem 2,5D Fräser auch möglich ist 3 Dimensionale Teile zu fräsen. Man muss lediglich mehr als einen Fräsvorgang absolvieren und das Werkstück zwischen den Vorgängen in die gewünschte Lage einspannen.

Parameter

Wie bereits erwähnt, ist es von äußerster Wichtigkeit, dass im CAM die Realität genau abgebildet wird. Ein Beispiel: Ist der Fräserdurchmesser in CAM mit 4mm angegeben, während in der realen Maschine ein 8mm eingespannt ist, führt dies zur entsprechenden Berechnung aller Werkzeugwege eines 4mm Fräsers. Das hat zur Folge, dass in Realität alle Taschenförmigen Aussparungen 2mm größer werden als geplant. Das Werkstück ist damit wahrscheinlich nicht mehr zu gebrauchen. Auch Abseits falscher Vorgaben, ist auf gute Parametriesierung zu achten.

Fräser

Der Fräser hat einen enormen Einfluss auf das Fräsergebnis. Nicht nur der Durchmesser, sondern auch die Anzahl der Schneiden sowie die Schärfe haben einen großen Einfluss auf das Ergebnis. Zunächst wurde Dremel-Werkzeuge zur Zerspanung des Holzes eingesetzt. Diese führte häufig zu hoher Temperaturentwicklung, da die Späne nicht richtig abgeführt werden konnten. Folglich erkennt man die hohe Temperatur sowohl am fertigen Werkstück, anhand von schwarzen und verbrannten Bereichen, als auch an unangenehm entwickelnden Gerüchen während des Fräsvorgangs. Die zu verwendenden Fräsparameter werden zwar von der CAM-Software vorgegeben, doch hat die Fräse beispielsweise keine Drehzahlregelung, dessen Größe händisch ermittelt werden muss.

Frässtrategie

Funktionsschema

Die Frässtrategie beeinflusst nicht nur das Ergebnis, sondern auch die benötigte Bearbeitungszeit. Alle auswählbaren Frässtrategien werden in CAD SolidWorks ausführlich und verständlich erklärt, sobald man mit dem Cursor über die jeweilige Namen geht. Unten ist beipsielhaft gezeigt, wie die Wahl der falschen Frässtrategien das Ergebnis negativ beeinflussen kann. Bei Auswahl von "2D-Adaptive-Clearing" wird man keine glatten Kanten erhalten. Das mehrfache Ansetzen des Fräsers wird deutlich zu erkennen sein. Die Auswahl der richtigen Strategie erfordert etwas Übung. Eine gute Erklärung zu allen verfügbaren Strategien findet sich hier. Achtet bei der Auswahl der Sicherheitshöhen auf intelligente Parametrisierung, damit diese auch erreicht werden können! Die Maschine verfügt derzeit über keine Endschalter in der z-Achse(Höhe), was zur Kollison mit Befestigungselementen der Spindel führen kann.

Spannsituation

Gute Aufspannung inkl. Unterlage

Wichtig für einen Erfolgreichen Fräsprozess ist die richtige Aufspannung des Werkstückes. Immer auf eine Stabile und feste Einspannung des Werkstücks achten. Wenn sich das Bauteil währned der Bearbeitung verschiebt, führt dies zu unerwünschten Ergebnissen. Der von uns befestigte Schraubstock ist dazu ein gutes Mittel. Größere Bauteile können dirket auf dem Maschinentisch, beispielsweise mit Schraubzwingen, befestigt werden. Gerade in der ersten Phase der Einarbeitung bietet es sich an, den Notauschalter nicht aus der Hand zu legen.



Postprozess

Im Postprozess werden die Verfahrwege maschinenlesbar umgewandelt. Unterschiedliche Steuerungssoftware auf verschiedenen Maschinen führen jedoch dazu, dass jede Maschine ihren eigenen Postprozessor benötigt. Im Falle von HSMExpress2016 sind bereits 70 verschiedene Postprozessoren integriert. Diese können vor der Umwandlung entsprechend ausgewählt werden. Auch ein Postprozessor für das verwendete LinuxCNC ist standardmäßig vorhanden. Unsere interne Stuerungssoftware über Matlab kann den gleichen Code verarbeiten. Sollte die Syntax von G-Code noch nicht bekannt sein, empfehlen wir diese Seite. Hier wird der Aufbau von G-Code anhand von Norm-G-Code erklärt. Der integrierte Postprozessor von HSMExpress2016 nutzt nur 3 Arten von Positionsbefehlen: G01,G02 und G03. Translatorische Bewegungen und Rotationen mit und gegen den Uhrzeigersinn. Durch das nicht Verwenden von Spezialbefehlen wird der Code zwar sehr lang, kann aber leicht Verstanden werden. In den Downloads findet sich ein Übungsblatt für G-Code.

SolidWorks CAM G-Code für LinuxCNC lesbar machen

Um ein mit SolidWorks modelliertes 3D Teil an der hochschuleigenen CNC-Bearbeitungsmaschine zu fräsen, muss der G-Code über den Linux Postprozessor generiert werden. Sollte dies nicht möglich sein, wird der G-Code manuell angepasst. Eine Anleitung finden Sie hier Datei:Gcode bearbeiten.pdf. Trotz erfolgreicher Tests garantiert diese Anleitung keinen Erfolg. Beobachten Sie daher den Fräsvorgang aufmerksam um bei auftretenden Problemen möglichst Schäden zu vermeiden.

Oberfläche & Bedienung von LinuxCNC

Zu diesem Thema wurde ein separater Artikel erstellt, siehe Oberfläche & Bedienung von LinuxCNC

Fräser und ihre Parameter zum Fräsen von unterschiedlichen Materialien

Material Dicke Fräser Name Fräser Durchmesser Link Frästiefe Drehzahl Vorschub Bemerkungen

Probleme beim Fräsen

Problembeschreibung Bild vom Problem Ursache Lösung Bild von der Lösung
Überhitzung des Materials am oberen Rand der Fräskante
Frässchaft dringt ins Material ein und überhitzt Längeren Fräser einsetzten, sodass immer noch ein Teil der Schneide rausguckt
Ausfransen der oberen Fräskante
Eine zu langsame Vorschubgeschwindigkeit während des Fräsvorganges Passende Vorschubgeschwindigkeit raussuchen/berechnen und einstellen


Für die Fräser der Fa. GIS zeigt diese Tabelle eine sehr gute Übersicht.

CNC-WIKI Fräsparameter

stepcraft-systems Fräsparameter

CNC-Fräsparameter www.bastelkellair.de

Fräsparameter Richtwert Rechner

Fräsparameter Richtwert Rechner Handy App

sorotec Fräsparameter


Material Frästiefe Benutzter Fräser Links Ergebnis
Thermoplast 1,5mm gis-tec F126.0100 [2] Sehr sauber, Späne werden gut nach oben herausgeführt
.. .. .. .. ..
  • Original Exceldatei der vorhandenen Werkzeuge im Labor [3]

Vergleich Ansteuerungssoftware

Eigenschaft LinuxCNC Eigene Matlab Lösung MACH3 OEM UCCNC SerialComCNC USBCNC
Kosten umsonst umsonst 149,-€ 55,-€ umsonst umsonst(219,-€ -> Controller Hardware)
Beschreibung Vorinstalliert auf dem HSHL-PC. Ließt den zuvor generierten G-Code in CAD SolidCAM und lässt die Maschine die Verfahrwege problemlos abfahren, sobald die Referenzpunkte gesetzt worden sind. Bearbeitet von Gruppe "Zentraler Steuerungsalgorythmus (Matlab)" Mach3 ist eine leistungsstarke CNC-Steuerungssoftware. Es erzeugt Bewegungen von Standard-G-Code und hat viele Möglichkeiten. Es ist auch mit diversen MACH3 Servoantrieben kompatibel. Mach läuft unter Windows Betrieb System.Es ist keine externe Hardware erforderlich. UCCNC-Steuerungssoftware, arbeitet mit den Ethernet-Bewegungssteuerungen UC100, UC300, UC300ETH und UC400ETH. Lauffähig mit Windows XP, Vista,7 ,8, 10. Betrieb bis zu 3 Schritt/Stepper-Motoren. Verbindung vom Arduino zum PC mittels USB-Kabel (virtueller serieller Port).

Es lassen sich beliebige G-Code Files im Text-Modus einlesen, ausführen und editieren.

Siehe nächster Abschnitt: "Alternative Steuerungssoftware für Windows"

Da LinuxCNC bereits vorinstalliert war und die Software uns in keiner Weise beschräkt hat, haben wir uns haupsächlich mit dieser Software beschäftigt. Interressanter als eine weitere Zukaufvariante wäre es, die Software aus der Gruppe "Zentraler Steueralgorythmus in Matlab" auf der Maschine zum laufen zu bringen.

Alternative Steuerungssoftware für Windows

Oberfläche von EdingCNC
Eding bzw. USBCNC bietet in einer höheren Ausbaustufe die Möglichkeit, auch die konstruierte 4. Achse anzusteuern[1]

Um eine Alternative für den 2. Rechner und das Betriebssystem Windows aufzuzeigen, wurden oben Steuerungsprogramme für CNC Maschinen verglichen. Ausgewählt wurde "Eding CNC v4.01.56". Das Programm arbeitet mit einem externen Prozessor um Echtzeitproblemen unter Windows aus dem Weg zu gehen. Der einfachste externe Controller kostet 219€. Die Software lässt sich bereits ohne physikalischen Controller installieren und ausprobieren. Zunächst muss dazu in SolidWorks/HSMExpress der Postprozessor "Generic Eding CNC" ausgewählt werden. Der Code wird damit auf die neue Software angepasst. Ein Beispiel haben wir links erstellt. Im Simulationsmodus wird das Programm unter Windows 7 64Bit problemlos abgefahren. Die Bedienung gleicht der von LinuxCNC. Zunächst muss das Programm geladen werden, nach einen Druck auf den grünen Start Button beginnt die Ausführung. Vorschub usw. können während des Pragrammablaufs überschrieben werden. Eine weiterführende Aufgabe könnte sein, die vom Programm erzeugten Signale aufzunehmen und zu verarbeiten, um wieder unsere Gecko Motortreiber anschließen zu können. Das links dargestellte Beispiel findet sich auch unten in den Downloads.

Lessons learned und Fazit

Das Praktikum hat uns einen tiefen Einblick in den Bereich "Computer Aided Manufacturing" gebracht. Neben der Auswahl der Software und deren Bedienung, waren besonders die Testläufe intressant, da die durchgeführten Änderungen in der Realität schnell sichbar wurden. Auch die Sicherheitstechnischen Aspekte bzgl. Kollision konnten erprobt werden. Es ist klar geworden, welche Parameter zu beachten sind, um weder Mensch noch Material zu beschädigen. Ein Vorteil, der im fertigungstechnischen Alltag hilfreich sein kann. Das Projekt ist sicherlich noch nicht abgeschlossen. Wir haben uns in diesem Semster auf 2,5D-Bearbeitung konzentriert. In der nächsten Ausbaustufe könnte die CAM Bearbeitung auf 3D-Flächenbearbeitung erweitert werden. Auch Könnte die jetzt neu implementiere 4-Achse mit in den CAM-Prozess mit einbezogen werden. Für den aktuellen Stand der Aufgabenliste siehe SVN.

Ausblick und weitere Bearbeitungsmöglichkeiten

1. "Formel", die die Genauigkeit beim fräsen erhöht und Fehlertoleranzen entgegenwirkt.
2. Mithilfe der 4ten Achse: Fräsen von komplexen, 3-Dimensionalen Bauteilen/Figuren (PS4/Xbox Controller).
3. Schnelle fräsvorgänge: Kurze und einfache Fräsvorgänge mit höchster Geschwindigkeit fräsen lassen um das Maximum der Maschine zu demonstrieren.

Download

Youtube Lehrvideo - How to "CAM"

Weblinks


→ zurück zum Hauptartikel: Produktionstechnik Praktikum