Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Werkzeug
BildScreenshot zu Werkzeug Werkzeug-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Bahnfräsen mit Excel


Betrifft: Bahnfräsen mit Excel von: wolfi
Geschrieben am: 03.04.2018 01:55:13

Hallo Forum,
ich bin Fräser und möchte mir mit VBA eine Programmierhilfe für meine Fräsmaschine basteln mit der ich von einer bestimmten Position zu einer anderen Position fahren kann, dann in die Tiefe zustelle und wieder zurück zum Ausgangspunkt fahre, wieder zustelle und so weiter hin und her bis ein bestimmter Wert erreicht ist.

X und Y sind Koordinaten im Zweidimensionalen Raum, Z geht dann in die Tiefe.
Startpunkt X0. Y0. und Z0.
Endpunkt X0. Y100. und Z-20.

Nun soll die Tabelle folgendermassen aussehen:

X0. Y0.
Z0.
X0. Y100.
Z-1.
X0. Y0.
Z-2.
X0. Y100.
Z-3.
X0. Y0.

Und so weiter bis Z-20. erreicht wird. Das sieht ja eigentlich sehr easy aus und man kann das natürlich auch leicht alles tippen, aber wenn man im Z nur 0,1 zustellen möchte und eine sehr tiefe Bahn fräsen möchte können das schnell hunderte oder gar tausende Zeilen ergeben. Das würde ich mir gerne etwas automatisieren.

Ich habe mir schon ein Tool gebastelt, allerdings für das Helix-Fräsen, also Kreisförmig in die Tiefe gehen. Ich lege dieses Tool mal als Beispiel bei, damit die Experten hier im Forum wissen wie so etwas bei mir aussieht. Die ganzen Sachen mit "G" sind übrigens Maschinenbefehle, G2 z.B heisst Kreisbewegung im Uhrzeigersinn. Das braucht alles nicht berücksichtig werden, das kann ich mir dann schon selbst fertig basteln. Was für mich wichtig wäre ist nur die Routine das die Werte immer so wie im Beispiel wiederholt werden bis der Z- Endwert erreicht ist. Die copy Funktion am Schluss habe ich eingefügt damit ich das Ergebis direkt aus der Zwischenablage in meinen CNC-Editor einfügen kann. Nur zur Info, falls sich wer wundert für was das sein soll.

Ich hab mich auch selber schon dran versucht, ich scheitere aber daran das der Z Wert immer als einzelne Zeile zwischen den jeweiligen X und Y Werten stehen muss. also wenn mir da jemand helfen könnte wäre das Super. Vielen Dank schon mal im Voraus.

https://www.herber.de/bbs/user/120818.xls

  

Betrifft: AW: Bahnfräsen mit Excel von: Klexy
Geschrieben am: 03.04.2018 08:23:17

Hallo Wolfi,

das wäre dann der Code-Schnipsel, den du an der entsprechenden Stelle einfügen müsstest (Userform-Felder entsprechend ändern!):

X0 = CDbl(Me.TextBox1.Value)        'Startpunkt X
X1 = CDbl(Me.TextBox2.Value)        'Endpunkt X
Y0 = CDbl(Me.TextBox3.Value)        'Startpunkt y
Y1 = CDbl(Me.TextBox4.Value)        'Endpunkt Y
Z0 = CDbl(Me.TextBox5.Value)        'Startpunkt Z
Z1 = CDbl(Me.TextBox6.Value)        'Endpunkt Z
Schritt = CDbl(Me.TextBox7.Value)  'Zustellung Z je Wendel


Set Anfang = Range("A1")' hier entsprechende Anfangszelle eingeben
Tiefe = 0
    Anfang.Offset(0, 0).Value = X0
    Anfang.Offset(0, 1).Value = Y0
    Anfang.Offset(1, 0).Value = Tiefe
    Set Anfang = Anfang.Offset(2, 0)

    Do Until Tiefe <= Z1
        Anfang.Offset(0, 0).Value = X1
        Anfang.Offset(0, 1).Value = Y1
        Anfang.Offset(1, 0).Value = Tiefe + Schritt
        Tiefe = Tiefe + Schritt

        If Tiefe < Z1 Then Exit Do
        Anfang.Offset(2, 0).Value = X0
        Anfang.Offset(2, 1).Value = Y0
        Anfang.Offset(3, 0).Value = Tiefe + Schritt
        Tiefe = Tiefe + Schritt
        Set Anfang = Anfang.Offset(4, 0)
    Loop



  

Betrifft: AW: Bahnfräsen mit Excel von: wolfi
Geschrieben am: 03.04.2018 23:26:23

Hallo Klexy, vielen Dank. Du hast mir schon gut weitergeholfen.
Ich habe die angepasste Datei mal hochgeladen.
Ein kleines Problem mit der Nuttiefe Z gibt es noch, damit kann ich aber leben. Das kann man dann abschliessend im CNC-Editor leicht anpassen.
Mach mal spasshalber in der Userform Startpunkt X 0, Startpunkt Y 0 , Endpunkt X 10 Endpunkt Y End 10, Z Start 0, Nuttiefe 10 und Zustellung je Gang 1.
Dann passt alles. Mache mal Zustellung je Gang 0,5 dann passt es auch noch. Wenn die Zustellung je Gang aber kleiner wird, zb. 0,4 0,3 0,2 oder 0,1 oder noch kleiner fügt die Routine zum Schluss noch einige Zeilen hinzu obwohl eigentlich bei Z-10. Schluss sein sollte. Mir ist nicht ganz klar warum die Routine diese Zeilen noch hinzufügt. Ich werd jetzt aber auch selber noch etwas feilen.
https://www.herber.de/bbs/user/120841.xls


  

Betrifft: AW: Bahnfräsen mit Excel von: Klexy
Geschrieben am: 04.04.2018 00:29:28

Schau ich mir morgen an. Bei meinen Tests hat alles geklappt.


  

Betrifft: AW: Bahnfräsen mit Excel von: Klexy
Geschrieben am: 04.04.2018 06:53:31

Schau ich mir morgen an. Bei meinen Tests hat alles geklappt.


  

Betrifft: AW: Bahnfräsen mit Excel von: Klexy
Geschrieben am: 04.04.2018 18:49:20

Das mit den negativen Schritten, die aber im Formular positiv eingegeben werden und eine negative Tiefe erreichen sollen, die positiv eingegeben wird, ist da im Zusammenhang mit größer gleich oder kleiner gleich schon etwas unübersichtlich.

So sollte es in jedem Fall funktionieren. Am Schluss wird ggf. noch ein kleinerer Schritt gemacht, um nur bis zur geplanten Tiefe zu gehen und nicht weiter.

    Range("A1").Value = "G0"
    Range("B1").Value = "X"
    Range("C1").Value = X0
    Range("D1").Value = "Y"
    Range("E1").Value = Y0
  
    Set Anfang = Range("A2") ' hier entsprechende Anfangszelle eingeben
    Tiefe = 0
    Tiefe = Tiefe - Schritt
  
    Anfang.Offset(0, 0).Value = "G1"
    Anfang.Offset(0, 1).Value = "Z"
    Anfang.Offset(0, 2).Value = Tiefe
    Anfang.Offset(0, 2).Font.Bold = True
    Anfang.Offset(1, 0).Value = "X"
    Anfang.Offset(1, 1).Value = X1
    Anfang.Offset(1, 2).Value = "Y"
    Anfang.Offset(1, 3).Value = Y1
    
    Set Anfang = Anfang.Offset(2, 0)
    Tiefe = Tiefe - Schritt
    
    Do While Tiefe >= Z1 * -1
            Anfang.Offset(0, 0).Value = "Z"
            Anfang.Offset(0, 1).Value = Tiefe
            Anfang.Offset(0, 1).Font.Bold = True
            Anfang.Offset(1, 0).Value = "X"
            Anfang.Offset(1, 1).Value = X0
            Anfang.Offset(1, 2).Value = "Y"
            Anfang.Offset(1, 3).Value = Y0
            Tiefe = Tiefe - Schritt
       
            If Tiefe + Schritt = Z1 * -1 Then
                'letzter Schritt hat schon die Nuttiefe erreicht
            ElseIf Tiefe > Z1 * -1 Then
                'nächster Schritt erreicht die Nuttiefe noch nicht
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                If Tiefe - Schritt < Z1 * -1 Then
                    Tiefe = Z1 * -1
                Else
                    Tiefe = Tiefe - Schritt
                End If
            ElseIf Tiefe < Z1 * -1 Then
                'Restschritt bis Nuttiefe wenn Schritt kein Teiler der Nuttiefe ist
                Tiefe = Z1 * -1
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                Tiefe = Tiefe - Schritt
            Else
                'nächster Schritt erreicht genau die Nuttiefe
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                Tiefe = Tiefe - Schritt
            End If
        Set Anfang = Anfang.Offset(4, 0)
        Anfang.Select
    Loop



  

Betrifft: AW: Bahnfräsen mit Excel von: wolfi
Geschrieben am: 04.04.2018 21:24:52

Ja, das mit den negativen Werten hätte ich besser erklären sollen. Man fräst quasi im dreidimensionalen Raum. Mit X fährt der Maschinentisch links rechts, Y ist vorne hinten und mit Z fährt die Werkzeugspindel hoch und runter. Z0. ist oben auf dem Werkstück und man fräst dann halt ins Minus. Wenn die Taschentiefe bzw. Nuttiefe z.B. 15mm ist heisst das in Wirklichkeit -15mm. Das gibt aber niemand so an. Deshalb vielleicht etwas verwirrend. Macht aber nichts, mit Deiner Hilfe komm ich da durch :-)
Funktioniert jetzt wunderbar so. Vielen Dank


  

Betrifft: AW: Bahnfräsen mit Excel von: wolfi
Geschrieben am: 04.04.2018 22:31:51

ich hab den Code bei der Tiefe noch ganz leicht verändert. So kann ich auch von positiven Z Werten bis 0 fräsen. Gebe ich als Z Start, zb. 5 ein und Nuttiefe -0,1 mit Zustellung 0,3mm zeilt es mir runter bis auf ein Zehntel mm als Schlichtzugabe. Perfekt!!!! Hab alle Möglichkeiten ausprobiert und es funktioniert ohne Fehler. Nochmals tausend Dank!!!!!!!!!!!!!!!

Range("A1").Value = "G0"
    Range("B1").Value = "X"
    Range("C1").Value = X0
    Range("D1").Value = "Y"
    Range("E1").Value = Y0
    Range("A2").Value = "Z"
    Range("B2").Value = Z0
  
    Set Anfang = Range("A3") ' hier entsprechende Anfangszelle eingeben
   ' Tiefe = 0
    Tiefe = Z0 - Schritt 
  
    Anfang.Offset(0, 0).Value = "G1"
    Anfang.Offset(0, 1).Value = "Z"
    Anfang.Offset(0, 2).Value = Tiefe
    Anfang.Offset(0, 2).Font.Bold = True
    Anfang.Offset(1, 0).Value = "X"
    Anfang.Offset(1, 1).Value = X1
    Anfang.Offset(1, 2).Value = "Y"
    Anfang.Offset(1, 3).Value = Y1
    
    Set Anfang = Anfang.Offset(2, 0)
    Tiefe = Tiefe - Schritt
    
    Do While Tiefe >= Z1 * -1
            Anfang.Offset(0, 0).Value = "Z"
            Anfang.Offset(0, 1).Value = Tiefe
            Anfang.Offset(0, 1).Font.Bold = True
            Anfang.Offset(1, 0).Value = "X"
            Anfang.Offset(1, 1).Value = X0
            Anfang.Offset(1, 2).Value = "Y"
            Anfang.Offset(1, 3).Value = Y0
            Tiefe = Tiefe - Schritt
       
            If Tiefe + Schritt = Z1 * -1 Then
                'letzter Schritt hat schon die Nuttiefe erreicht
            ElseIf Tiefe > Z1 * -1 Then
                'nächster Schritt erreicht die Nuttiefe noch nicht
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                If Tiefe - Schritt < Z1 * -1 Then
                    Tiefe = Z1 * -1
                Else
                    Tiefe = Tiefe - Schritt
                End If
            ElseIf Tiefe < Z1 * -1 Then
                'Restschritt bis Nuttiefe wenn Schritt kein Teiler der Nuttiefe ist
                Tiefe = Z1 * -1
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                Tiefe = Tiefe - Schritt
            Else
                'nächster Schritt erreicht genau die Nuttiefe
                Anfang.Offset(2, 0).Value = "Z"
                Anfang.Offset(2, 1).Value = Tiefe
                Anfang.Offset(2, 1).Font.Bold = True
                Anfang.Offset(3, 0).Value = "X"
                Anfang.Offset(3, 1).Value = X1
                Anfang.Offset(3, 2).Value = "Y"
                Anfang.Offset(3, 3).Value = Y1
                Tiefe = Tiefe - Schritt
            End If
        Set Anfang = Anfang.Offset(4, 0)
        Anfang.Select
    Loop
    
    LR = Cells(Rows.Count, 1).End(xlUp).Row 

    Range("A" & LR + 1).Value = "G0"
    Range("B" & LR + 1).Value = "Z"
    Range("C" & LR + 1).Value = Z0
    Range("D" & LR + 1).Value = "M9"