clear
close all
DEBUG=0;
XKoor = '00000';
YKoor = '00000';
ZKoor = '00000';
VVelo = '00000';
X=0;
Y=0;
Z=0;
F=0;
J=0;
I=0;
zeile =0;
spalte=0;
killer = 0;
s = serial('COM1','baudrate',9600);
fid = fopen('fraeserablage.txt');

% %% Darstellung
% f = figure(1);
% set(f, 'name', 'Vorschau')
% get(f);

%% Globale Variablen
global Matrix_Koordinatenspeicher

%% Auslesen, der größe des G-Codes
z=0;%Zeilendurchlauf
a = {}; % cell array;
tline = fgetl(fid);
while ischar(tline)
    z = z+1;
    a{length(a)+1} = tline;
    c = strsplit(a{1,z},' ');
    for k=1:length(c)
        Spaltenaufteilung{z,k} = c{k};
    end
    tline = fgetl(fid);
end
fclose(fid);
% fopen(s);
% pause(2);

%% Fahrfunktionen
dimensionen=size(Spaltenaufteilung);
clear i;
for i_zeile=1:dimensionen(1)
    zeile=zeile+1;
    spalte=1;
    for j_spalte=1:dimensionen(2)
        %spalte=spalte+1;
        killer =0;
        aktuell=Spaltenaufteilung{i_zeile,j_spalte};
        if isempty(aktuell)==0;
            switch(aktuell)
                case 'G00' %Eilgang, maximale Verfahrgeschwindigkeit von Punkt A nach Punkt B
                    G00(i_zeile, zeile, j_spalte, spalte, Spaltenaufteilung, killer, dimensionen, X, Y, Z)
                case 'G01' %Geradeninterpolation mit Vorschub
                    G01(i_zeile, zeile, j_spalte, spalte, Spaltenaufteilung, killer, dimensionen, X, Y, Z, F)
                case 'G02' %Kreisinterpolation im Uhrzeigersinn (rechtsdrehend)
                    G02(s, i_zeile, zeile, j_spalte, spalte, Spaltenaufteilung, killer, dimensionen, X, Y, Z, F, J, I);
                    %                 case 'G02.2'
                    %                     G=4;
                case 'G03' %Kreisinterpolation im Gegenuhrzeigersinn (linksdrehend)
                    G03(s, i_zeile, zeile, j_spalte, spalte, Spaltenaufteilung, killer, dimensionen, X, Y, Z, F, J, I);
                    %                 case 'G03.2'
                    %                     G=6;
                    %                 case 'G04' %Verweilzeit
                    %                     G=62;
                    %                 case 'G07' %Hypothetische Achseninterpolation
                    %                     G=65;
                    %                 case 'G09' %Genauhalt an Ecken
                    %                     G=67;
                    %                 case 'G10' %Dateneinstellung, Nullpunktverschiebungen, Werkzeugkorrekturen, Beispiel
                    %                     G=68;
                    %                 case 'G10.1' %PMC Dateneinstellung
                    %                     G=69;
                    %                 case 'G11' %Löschen der Dateneinstellungen G10
                    %                     G=70;
                    %                 case 'G15' %Löschanweisung der Polarkoordinaten
                    %                     G=60;
                    %                 case 'G16' %Polarkoordinatenanweisung
                    %                     G=61;
                    %                 case 'G17' %Wechsel der Bearbeitungsebene
                    %                     G=8;
                    %                 case 'G18' %Wechsel der Bearbeitungsebene
                    %                     G=9;
                    %                 case 'G19' %Wechsel der Bearbeitungsebene
                    %                     G=10;
                    %                 case 'G20' %Zolleingabe
                    %                     G=18;
                    %                 case 'G21' %Metrische Eingabe
                    %                     G=19;
                    %                 case 'G22' %Verfahrbereichskontrolle an
                    %                     G=13;
                    %                 case 'G23' %Verfahrbereichskontrolle aus
                    %                     G=14;
                    %                 case 'G27' %Kontrolle des Referenzpunktanfahrens
                    %                     G=71;
                    %                 case 'G28' %Referenzpunktanfahren mit Zwischenposition
                    %                     G=72;
                    %                 case 'G30' %Bezugspunkt 2, 3 oder 4 anfahren
                    %                     G=73;
                    %                 case 'G31' %Restweglöschen (Skip)
                    %                     G=75;
                    %                 case 'G33' %Gewindeschneiden geht nicht, da kein Drehrichtungswechsel möglich
                    %                     G=7;
                case 'G40' %Werkzeugkorrektur löschen
                    G=20;
                case 'G41' %Werkzeugkorrektur links von der Kontur
                    G=21;
                case 'G42' %Werkzeugkorrektur rechts von der Kontur
                    G=22;
                case 'G43' %Werkzeuglängenkorrektur positiv verrechnen (nur bei Rundfräsern)
                    G=23;
                case 'G44' %Werkzeuglängenkorrektur negativ verrechnen (nur bei Rundfräsern)
                    G=24;
                case 'G49' %Werkzeuglängenkorrektur löschen (nur bei Rundfräsern)
                    G=25;
                    %                 case 'G50' %Skalierung löschen
                    %                     G=40;
                    %                 case 'G50.1' %Spiegeln aus
                    %                     G=84;
                    %                 case 'G51' %Skalierung aktiv
                    %                     G=41;
                    %                 case 'G51.1' %Spiegeln ein
                    %                     G=85;
                    %                 case 'G52' %Einstellung des lokalen Koordinatensystems
                    %                     G=76;
                    %                 case 'G53' %Wahl des Maschinenkoordinatensystems
                    %                     G=77;
                    %                 case 'G54' %Wahl des 1. Werkstückkoordinatensystems
                    %                     G=46;
                    %                 case 'G55' %Wahl des 2. Werkstückkoordinatensystems
                    %                     G=47;
                    %                 case 'G56' %Wahl des 3. Werkstückkoordinatensystems
                    %                     G=48;
                    %                 case 'G57' %Wahl des 4. Werkstückkoordinatensystems
                    %                     G=49;
                    %                 case 'G58' %Wahl des 5. Werkstückkoordinatensystems
                    %                     G=50;
                    %                 case 'G59' %Wahl des 6. Werkstückkoordinatensystems
                    %                     G=51;
                    %                 case 'G60' %Schleifefahren für genaueres Positionierten
                    %                     G=78;
                case 'G61' %Genauhalt
                    G=54;
                    %                 case 'G62' %Automatische Eckenverzögerung
                    %                     G=55;
                    %                 case 'G63' %Innengewinde 100%, nicht für Gewindebohrer!
                    %                     G=56;
                    %                 case 'G64' %Ecken verschleifen
                    %                     G=57;
                    %                 case 'G65' %Unterprogrammaufruf
                    %                     G=79;
                    %                 case 'G66' % Modaler Unterprogrammaufruf Typ A
                    %                     G=42;
                    %                 case 'G66.1' % Modaler Unterprogrammaufruf Typ B
                    %                     G=42.1;
                    %                 case 'G67' % Löschen des modalen Unterprogrammaufrufs Typ A/B
                    %                     G=43;
                    %                 case 'G68' %Koordinatensystemdrehung
                    %                     G=58;
                    %                 case 'G69' %Löschen der Koordinatensystemdrehung
                    %                     G=59;
                    %                 case 'G73' %Tieflochborhzyklus
                    %                    G=26;
                    %                 case 'G74' %Gewindebohrzyklus für Linksgewinde
                    %                     G=27;
                    %                 case 'G76' %Bohrzyklus mit abheben
                    %                     G=28;
                    %                 case 'G80' %Löschen der Bohrzyklen
                    %                     G=29;
                    %                 case 'G81' %Einfacher Bohrzyklus
                    %                     G=30;
                    %                 case 'G82' %Bohrzyklus mit Verweilzeit
                    %                     G=31;
                    %                 case 'G83' %Tieflochbohrzyklus mit Entspänen
                    %                     G=32;
                    %                 case 'G84' %Gewindebohrzyklus Rechtsgewinde
                    %                     G=33;
                    %                 case 'G85' %Ausbohrzyklus
                    %                     G=34;
                    %                 case 'G86' %Bohrzyklus mit Spindelstop
                    %                     G=35;
                    %                 case 'G87' %Hinterschneidezyklus, Rückwärtssenken
                    %                     G=36;
                    %                 case 'G89' %Bohrzyklus mit Verweilzeit und Rückzug im Vorschub
                    %                     G=37;
                    %                 case 'G90' %Einstellung auf Absolutmaß
                    %                     G=11;
                    %                 case 'G91' %Einstellung auf Kettenmaß
                    %                     G=12;
                    %                 case 'G92' %Werkstückkoordinatensystemänderung, Einstellung der maximalen Spindeldrehzahl
                    %                     G=82;
                    %                 case 'G93' %Zeitabhängiger Vorschub
                    %                     G=15;
                    %                 case 'G94' %Vorschub pro Minute
                    %                     G=16;
                    %                 case 'G95' %Vorschub pro Spindelumdrehung
                    %                     G=17;
                    %                 case 'G98' %Rückkehr auf Positionierebene in Bohrzyklus
                    %                     G=38;
                    %                 case 'G99' %Rückkehr auf Referenzebene in Bohrzyklus
                    %                     G=39;
                    %                 case 'G96' %Konstante Schnittgeschwindigkeit
                    %                     G=44;
                    %                 case 'G97' %Festdrehzahl
                    %                     G=45;
                    
                    
                case 'M00'  %Unbedingter Halt
                    M=1;
                case 'M01'  %Optionaler Halt
                    M=2;
                case 'M02'  %Ende des Hauptprogramms
                    M=3;
                case 'M03'  %M03 Spindel ein rechtslaufend
                    M=4;
                case 'M04'  %Spindel ein linkslaufend
                    M=5;
                case 'M05'  %Spindel stopp nicht orientiert
                    M=6;
                case 'M06'
                    M=7;
                case 'M07'  %Kühlmittel ein
                    M=8;
                case 'M08'
                    M=9;
                case 'M09'
                    M=10;
                case 'M30'  %Ende des Hauptprogramms
                    M=11;
                case 'M97'
                    M=12;
                case 'M98'
                    M=14;
                case 'M99'
                    M=14;
                    
            end
            
            
            %             zusenden = ['x',X,'y',Y,'z',Z,'f',F,'e'];
            %             disp(zusenden);
            %             fprintf(s,zusenden);
            
            
        end
    end
end

fclose(s);