Machsupport Forum

Mach Discussion => Non English Forums => German => Topic started by: ocram12 on December 27, 2017, 12:33:56 PM

Title: Bauteil ausrichten
Post by: ocram12 on December 27, 2017, 12:33:56 PM
Hallo Zusammen,

ich habe mir eine Käsefräse gebaut. Diese läuft auch (für meine Zwecke) recht ordentlich. Bis jetzt habe ich immer nur Teile aus Holz gefräst. Also z.B. 4mm Sperholz für Weihnachten.
Nun möchte ich mich aber an Alu heran wagen. Das geht mit ein paar Probestücken auch gut.
Meine Fage:
Wie richte ich das Werkstück richtig aus. Der Alu Klotz hat die genauen Abmaße. Ich könnte den Rohling nun exakt ausrichten. Das dauert aber sehr lange und ist ziemlich Zeitaufwendig. Auf Youtu.. habe ich gesehen, das Estlcam auch mit "verschobenen  Achsen" um kann.
Das würde das Ausrichten sehr vereinfachen.
Ist das mit meiner Mach3 Version auch möglich? Ich möchte mir nicht noch ein Programm kaufen müssen.

Danke für eure Antworten.
Gruß
Ocram12
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 02:57:53 AM
Servus ocram12,

das ist mit Mach3 auch möglich.
G68/G69 ist hier die gewünschte Funktion.

Zuerst mal mußt Du Dir aber einen Kantentaster bauen/kaufen,
und in Betrieb nehmen.

Dazu gibt es hier hier im Forum einige Info's.

Der Rest ist dann "nur" noch ein kleines macro, das 2 Punkte misst,
und dann den Winkel ausrechnet.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 04:08:37 AM
Moin Tom.
Das hört sich ja nicht so schlimm an.
Das wird dann wohl das nächste Projekt.
Vielen Dank für den Stups in die richtige Richtung.
Gruß Marco
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 12:57:48 PM
Hallo Tom,
ich bin schon etwas weiter gekommen.
Jetzt kann ich automatisch die Z,X und Y Achse vermessen, also den Nullpunkt finden. (Aber immer noch ohne Winkelversatz des Rohlings)
Mit dem Befelh G68 wird ja der winkel übergeben. Um diesen zu bekommen kann ich zwei Punkte z.b. auf der X -Achse bestimmen. Über diese Punkte kann ich über die Formel "arcTan (m) = Winkel" den Winkel berechnen.
Gibt es für die Winkelfunktionen einen Befehl? Ich habe da nichts gefunden. Währe nett, wenn Du mir da noch mal ein bisschen helfen könntest.

Gruß
Marco
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:10:03 PM
Servus Marco,

ok, jetzt geht es Richtung VB Scripting.
Wie weit hast Du Dich damit schon beschäftigt?

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 01:23:28 PM
Also VB noch wirklich nicht viel.
Auf der Arbeit ist C und C++ angesagt. (Aber ich bin HW Entwickler somit reichen meine Programmierkenntisse nur für die Inbetriebnahme meiner Platinen.)
Gruß
Marco
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:32:25 PM
OK,

VB ist C++nur viel einfacher (zumindest manchmal).

So um jetzt weiterzukommen brauche ich ein paar Info's

Du hast geschrieben, das Du die X,Y,Z Achse schon automatisch vermessen kannst.

Wie machst Du das genau ?

Für G68 (oder genau gesagt, das was Du damit machen willst) brauchen wir ja nicht nur den
Winkel, sondern auch die linke unter Ecke (X0,Y0), um die wir dann das Werkstück drehen.

Ich stelle mir jetzt Deine Anforderung ungefähr so vor:

1. Werkstück auflegen
2. Werkstück vermessen, vollautomatisch auf Knopfdruck, hier wird X0 Y0 und der Winkel bestimmt
3. Fräsen

mal ganz grob heruntergebrochen.

Gruß Tom
  
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 01:41:55 PM
Also...
Genauso habe ich mir das vorgestellt.
Zur Zeit läuft es bei mir so ab:

- ich bestimme zuerst die Z-Achse. (Für mein Problem ja nicht relevant.)
- dann fahre ich ein Stück in X Richtung, senke 10mm und fahre dann langsam ans Werkstück. Wenn Berührung erkannt, wird x wieder 5mm zurück gefahren
- Dann 20mm in Y Richtung und 10mm in X Richtung. Dann wieder langsam in Y Richtung bis Berührung erkannt.
Natürlich mit Abzug des Radiusses des Fräsers.

Das Script um einen weiteren Punkt zu erweiter ist kein Problem. Somit bekomme ich die Steigung m heraus.
Ich habe auch schon nachgelesen. Es scheint ja eine arcTAN Funktion zu geben. Atn(x). Kann ich die benutzten? Wenn ja, ist das Problem glaube ich gelößt. Zumindest im Theoretischen :-)
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 01:45:30 PM
Ich glaube ich verstehe jetzt, wo der Knackpunkt liegt. Der Nullpunkt liegt ja bei einem verschobenen Prüfling nicht da, wo ich ihn erwarten würde. Da muss ich noch mal drüber nachdenken.

Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:49:26 PM
sicher gibt es ein ATN(x) Funktion

siehe Attachments.

zur Sicherheit hab ich mal VBScript Comandos auch mit drangehängt.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:51:24 PM

[/quote]
Ich glaube ich verstehe jetzt, wo der Knackpunkt liegt. Der Nullpunkt liegt ja bei einem verschobenen Prüfling nicht da, wo ich ihn erwarten würde. Da muss ich noch mal drüber nachdenken.



das meinte ich, warum der Winkel alleine nicht reicht.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 29, 2017, 01:53:29 PM
Danke. Ich werde jetzt erst Mal selber versuchen weiter zu kommen. Wenn ich noch  Probleme bekomme, würde ich noch Mal melden.
Schon Mal danke im voraus.
Gruß Marco
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:54:18 PM
ich denke mal, man braucht mindesten 3 Punkte (Geometrie ist nicht meins),
einen an der Y Richtung, zwei in X Richtung,
um X0,Y0 auch zu bestimmen.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: TPS on December 29, 2017, 01:57:32 PM
wäre schön, wenn Du die Lösung hast, diese hier zu posten.
Dann könnte ich das bei meiner Fräse auch implementieren.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: TPS on December 30, 2017, 03:05:05 AM
Servus Marco,

diesen Code:

Code: [Select]

Angle = GetOemDro(118)

pi=4*Atn(1)

CurrentToolDiameter = GetOemDRO(43)
X = GetUserDro (1053)
Y = GetUserDro (1054)
Z = GetUserDro (1055)

CurrentFeed = GetOemDRO(818) 'Get the current feedrate to return to later
CurrentAbsInc = GetOemLED(48) 'Get the current G90/G91 state
CurrentGmode = GetOemDRO(819) 'Get the current G0/G1 state
CurrentToolDiameter = GetOemDRO(43) 'gets the current tool diameter
PlateThickness = GetUserDRO(1051)
ToolLength = GetOemDRO(42)

MoveXDistance = ((X * 1.1) + CurrentToolDiameter)
MoveYDistance = ((Y * 1.1) + CurrentToolDiameter)
MoveDistance = .5 + CurrentToolDiameter
MoveZDistance = .5

If GetOemLed (825) <> 0 Then 'Check to see if the probe is already grounded or faulty
    Call ProbeGrounded()
    Exit Sub
Else

'Get top of part

'DoOEMButton (1010) 'zero the Z axis so the probe move will start from here
Code "G4 P4" ' this delay gives me time to get from computer to hold probe in place
Code "G91 G31Z-2.0 F4" 'probing move, can set the feed rate here as well as how far to move
While IsMoving() 'wait while it happens
Wend
'Call SetDro (2, PlateThickness)

ZProbePos = GetVar(2002) 'get the axact point the probe was hit
'Code "G0 Z" &PlateThickness
'While IsMoving ()
'Wend
Code "G1 G91 F40 Z" &MoveZDistance 'put the Z retract height you want here
While IsMoving ()
Wend

'Code "(Z axis is now zeroed)" 'puts this message in the status bar
Code "F" &CurrentFeed 'Returns to prior feed rate


'Call SetDro (2,GetDro(2)-Z)

'Probe The X sides

    XCurrent = GetDro(0)
    YCurrent = GetDro(1)

    Code "G4 P1" 'Pause 1 second to give time to position probe plate
    While IsMoving ()
    Wend
    Call SetDro (0,0.000)
    While IsMoving ()
    Wend
    Call SetDro (1,0.000)
    Code "F4" 'slow feed rate to 4 ipm


Rem Probe Y Face Side

    Code "G90 G0 X" &-MoveDistance
    Code "G4 P0.25"
    Code "G91 G0 Z" &-MoveZDistance-.2
    Code "G4 P0.25"
    XNew = Xcurrent + 3
    Code "G31 X" &XNew 'Probe X1,Y1 (P1) location
    While IsMoving() 'wait for the move to finish
    Wend
    X1 = GetVar(2000) 'get the probe touch location
    Y1=0 ' Should always be zero
    Y2 = Y-0.5 '1/2 inch back from end of block

    Code "G91 G0 X-.25"
    Code "G4 P0.25"
    Code "G91 G0 Y" &Y2
    Code "G4 P0.25"
    Code "G31 X" &XNew 'Probe X2,Y2 (P2) location
    While IsMoving() 'wait for the move to finish
    Wend
    X2 = GetVar(2000) 'get the probe touch location
    'Y2= Block length - 1/2 inch

    Code "G91 G0 Z" &MoveZDistance+.2
    Code "G4 P0.25"
    Code "G91 G0 Y" &-Y2 'Go back to the first spot
    Code "G4 P0.25"
    Code "G91 G0 X" &CurrentToolDiameter+.1 'rapid move back to start point
    Code "G4 P0.25"

Rem Probe X Face Side

    Code "G90 G0 Y" &-MoveDistance
    Code "G4 P0.25"
    Code "G91 G0 Z" &-MoveZDistance-.2
    Code "G4 P0.25"
    YNew = YCurrent + 3
    Code "G31 Y" &YNew 'Probe X3,Y3 (P3) location
    While IsMoving()
    Wend
    Y3 = GetVar(2001)   'get the probe location
    'X3=0
    X4 = X-0.5 '1/2 inch back from end of block

    Code "G91 G0 Y-.25"
    Code "G4 P0.25"
    Code "G91 G0 X" &X4
    Code "G4 P0.25"
    Code "G31 Y" &YNew 'Probe X4,Y4 (P4) location
    While IsMoving() 'wait for the move to finish
    Wend
    Y4 = GetVar(2001) 'get the probe touch location
    'X4= Block Width - 1/2 inch

    Code "G90 G0 Z" &MoveZDistance+1    'Back up and clear
    Code "G4 P0.25"

t1= (x4-x3)*(y1-y3)-(y4-y3)*(x1-x3)
b1= (y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
ua=t1/b1

t2= (x2-x1)*(y1-y3)-(y2-y1)*(x1-x3)
b2= (y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
ub=t2/b2

XH=x1+ua*(x2-x1) ' X Home  distance away
YH=y1+ua*(y2-y1) ' Y Home  distance away


If X>Y Then
   'LongestSide=X
   a=(Y4-Y3)
   b=(X4-X3)
   v=a/b
   NewAngle=Atn(v)*(180/pi)
Else
   'LongestSide=Y
   a=(X2-X1)
   b=(Y2-Y1)
   v=b/a
   NewAngle=Atn(v)*(180/pi)
   If NewAngle > 0 Then
     NewAngle=NewAngle-90
   Else
     NewAngle=NewAngle+90
   End If
End If

Rem move To the Block Lower Corner

    Code "G90 G0 Y" &YH + CurrentToolDiameter/2
    Code "G90 G0 X" &XH + CurrentToolDiameter/2
    While IsMoving ()
    Wend
    Call SetDro (1,0.000)
    While IsMoving ()
    Wend
    Code "G4 P0.25"
    Call SetDro (0,0.000)
    Call SetDro (1,0.000)

    Call SetOemDro (118,NewAngle) ' now you can rotate the block


'Call SetDro (2,Z + PlateThickness)

    Code "G4 P0.25"

    Code "F" &CurrentFeed 'restore starting feed rate
Call ReturnG90G91State()
Exit Sub
End If
 
Sub ProbeGrounded()
Code "(Probe plate is grounded, check connection and try again)"
Call ReturnG90G91State()
End Sub

Sub ReturnG90G91State()
If CurrentAbsInc = 0 Then 'if G91 was in effect before then return to it
Code "G91"
Else
Code "G90"
End If
If CurrentGMode = 0 Then 'if G0 was in effect before then return to it
Code "G0"
Else
Code "G1"
End If
End Sub                 


habe ich hier im Forum gefunden, vielleicht hilft er ja ein bisschen.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 30, 2017, 04:25:02 AM
Moin Tom,

danke für das Beispiel.

Ich hatte mich gestern noch mal hin gesetzt und die Mathematik dahinter durchdacht. Ist alles garnicht so schwer, wie es aussieht.
Man(n) muss halt nur mal mit jemanden darüber reden.
Ich habe dir die Berechnung mal aufgeschrieben und ein Beispiel dazu gepackt. Der Rest sollte nur noch Programmieren sein.
Ich weiß nicht, wann ich da weiter machen kann. Ab Montag bin von der Arbeit aus in Brasilien tätig. Da weiß ich immer nicht, wann ich nach hause kommen.
Wenn ich es am laufen habe, versuche ich mich zu melden.

Gurß
Marco
Title: Re: Bauteil ausrichten
Post by: TPS on December 30, 2017, 04:38:27 AM
Hallo Marko,

bei der Berechnung bin ich bei Dir.

Wo ich jetzt noch drüber nachgedacht habe habe, ist das Antasten der 3 Punkte.
Wenn die Koordinaten der 3 Punkte genau bestimmt sind, ist die Rechnung IMHO richtig.

Da aber beim Antasten einer "verdrehten" Geraden der Tastkopf, welchen ja einen gewissen Durchmesser hat,
das Bauteil nicht am Quadranten trifft, sondern tangential leicht daneben, kann man den Radius des Tastkopfes
nicht einfach zur entsprechender (X/Y) Achse Sub- oder Addieren.

Bei der Bestimmung des Winkels der Y-Geraden dürfte das egal sein, da ja 2x mit dem gleichen Fehler gearbeitet wird.
Aber beim berechnen des Schnittpunktes der X und Y Geraden ist das glaube ich nicht egal.

Werde die Aufgabe mal meinem Sohn stellen, dem sein Abi ist erst 4 Jahre her, nicht 40 wie meine mittlere Reife.
Gruß Tom

Wir können uns ja hier weiter Austauschen bis zur Realisierung. 
Title: Re: Bauteil ausrichten
Post by: ocram12 on December 30, 2017, 07:22:29 AM
Da hast du recht. Das ist mir nicht aufgefallen. Währe wohl erst beim Testen heraus gekommen. Soviel zur Theorie und der Praxis.
Das Problem könnte man aber umgehen, indem man auch für die Y Achse 2 Punke sich holt.
Macht die Sache ein bisschen komplizierter, aber sollte gehen.

Gruß
Marco
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 09, 2019, 11:09:18 AM
Hallo,
gibt es für die Variante mit 4 Punkten eine Lösung (Code)?

Danke
Title: Re: Bauteil ausrichten
Post by: TPS on July 09, 2019, 02:39:00 PM
das ist meine Lösung für 4 Punkte, aber sehr spezifisch, dennoch sollte das Grundprinzip klar werden.

Code: [Select]
'Antasten Werkstück (gedreht)
Public Function TouchG()
Message "Antasten schraeges Bauteil"

'Parameter holen
X = GetUserDro (1055) 'delta der X-Punkte
Y = GetUserDro (1056) 'delta der Y-Punkte
CurrentToolDiameter = GetUserDro (1027)

'Parameter prüfen
If X = 0 Then
MSGBox "Delta X zu klein!",vbOK + vbCritical ,"Fehler !"
Exit function
End If
If Y = 0 Then
MSGBox "Delta Y zu klein!",vbOK + vbCritical ,"Fehler !"
Exit function
End If

'PI vorbesetzen -----------------------------------------------
pi=4*Atn(1)

'Koordinatendrehung ausschalten
Code "G69"
Sleep(200)

'X / Y auf null setzen
    Call SetDro (0,0)
    Call SetDro (1,0)
Sleep(200)

'die Y Seite vermessen

'P1 antasten
Probe 100,0,0
'Koordinaten P2
    X1 = GetVar(2000)
    Y1=0

'Vorposition P2 anfahren
Message("Vorposition P2 anfahren")
    Y2 = Y
    Code "G91 G1 X-" &X & "F1800"
WaitForMove(True)
    Code "G91 G1 Y" &Y2
WaitForMove(True)

'P2 antasten
Probe 100,0,0
'Koordinaten P2
    X2 = GetVar(2000)

    'die X Seite vermessen -----------------------------------------------

'Vorposition P3 anfahren
Message("Vorposition P3 anfahren")
X3 = X1 + (CurrentToolDiameter/2) + 10
    Code "G91 G1 X-" &X & "F1800"
WaitForMove(True)
    Code "G90 G1 Y-30"
WaitForMove(True)
    Code "G90 G1 X" &X3
WaitForMove(True)

'P3 antasten
Probe 0,100,0
'Koordinaten P3
    Y3 = GetVar(2001) 

'Vorposition P4 anfahren
Message("Vorposition P4 anfahren")
    X4 = X3 + X
    Code "G91 G1 Y-20 F1800"
WaitForMove(True)
    Code "G90 G1 X" &X4
WaitForMove(True)

'P4 antasten
Probe 0,100,0
'Koordinaten P4
    Y4 = GetVar(2001) 'get the probe touch location

'Z auffahren
Code "G91 G01 Y-0.2 F1800"
WaitForMove(True)
    Code "G91 G1 Z20"
WaitForMove(True)

'Brechnung
t1= (X4-X3)*(Y1-Y3)-(Y4-Y3)*(X1-X3)
b1= (Y4-Y3)*(X2-X1)-(X4-X3)*(Y2-Y1)
ua=t1/b1

'Nullpunkt berechnen
XH=X1+ua*(X2-X1) ' X Home  distance away
YH=Y1+ua*(Y2-Y1) ' Y Home  distance away

' Message("Koordinaten Nullpunkt : X " &XH &" Y " &YH)
' Sleep(200)


'Winkel aus der längeren Seite berechnen
If X>Y Then
'längere Seite=X
a=(Y4-Y3)
b=(X4-X3)
v=a/b
NewAngle=Atn(v)*(180/pi)
Else
'längere Seite=Y
a=(X2-X1)
b=(Y2-Y1)
v=b/a
NewAngle=Atn(v)*(180/pi)

If NewAngle > 0 Then
NewAngle=NewAngle-90
Else
NewAngle=NewAngle+90
End If
End If
' Message("Neuer Winkel : " &NewAngle )
' Sleep(200)

'zum neuen Nullpunkt fahren
'Winkel = errechneter Winkel + 45°
siWi = 2*Pi/360*(NewAngle+45)
hyWi = SQR((CurrentToolDiameter/2)*(CurrentToolDiameter/2)*2)

Dx = hyWi * Cos(siWi)
Dy = hyWi * Sin(siWi)
' Message("Koordinaten Berechnung : X " &Dx &" Y " &Dy)
' Sleep(200)

'Zu neuen Nullpunkt fahren
    Code "G90 G1 X" &XH+Dx & " Y" &YH+Dy
WaitForMove(True)

'neuen Nullpunkt setzen
    Call SetDro (0,0)
    Call SetDro (1,0)

'Koordinatendrehung setzen
    Call SetOemDro (118,NewAngle)

'Koordinaten ausgeben
' Message "X1 " &X1 &" Y1 " &Y1 & "   X2 " &X2 &" Y2 " &Y2 & "   X3 " &X3 &" Y3 " &Y3 & "   X4 " &X4 &" Y4 " &Y4

'wieder auf absolut stellen
Code "G90"
Message ""

End Function
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 09, 2019, 02:55:02 PM
Danke,
da ich von der Programmierung keine Ahnung habe wird es wohl schwierig sein den Code zu verstehen.
Ist der Code so lauffähig, wenn ich ihn in Mach3 z.b zum Testen auf einen vorh. Button lege und aufrufe oder muss noch zusätzlich etwas installiert werden.
Es kommt öfters bei mir vor, dass ich ein vorhandenes Brett auflege von dem ich nicht weiß ob es rechtwinklig ist.
Funktioniert der Code auch wenn das Werkstück nicht rechtwinklig ist?
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 09, 2019, 03:22:06 PM
Hallo,
wo bekomme ich die UserDRO her, z.B.:
1051, 1053 - 1055
bzw. was verbirgt sich dahinter?
Title: Re: Bauteil ausrichten
Post by: TPS on July 10, 2019, 02:24:42 AM
Hallo,
auf die Schnelle habe ich jetzt folgende OEMDRO'S gesehen:
(1055) 'delta der X-Punkte
(1056) 'delta der Y-Punkte
(1027) 'Durchmesser des Messtasters

Bedeutung siehe angehängtes Bild. Diese können natürlich auch durch feste Werte ersetzt werden.

Der Code ist so sicher nicht 1 zu 1 lauffähig, da ich einen CSMIO Controller habe, welche eine spezielle Routine für
da antasten benutzt.

Im Prinzip müssten folgende Funktionsaufrufe ersetzt bzw spezifisch für deine Hardware ersetzt werden:

Im Code wird mehrfach die Funktion Probe aufgerufen, ein Aufruf

Probe 100,0,0

macht ein Antasten in X für 100mm in positiver Richtung.

Probe 0,100,0 dann für Y

hinter dieser Funktion verbirgt sich vereinfacht gesagt ein G31 X100 F200, aber die Funktion mach auch
gleichzeitig ein zweifaches Antasten mit unterschiedlichen Geschwindigkeiten, um die Genauigkeit zu erhöhen.

Es ist natürlich immer die Frage, was, und vor allem wie genau (0.1 , 0.01 , 0.001) will ich antasten.
Ich taste mit einem Messtaster an, da ich mit meiner Maschine (Tongil TNV40 3,5t schwer) nicht mal eben
mit einem Fräser gegen das Werkstück fahren kann und will.

Die zweite Funktion welche im Code verwendet wird ist WaitForMove.

hier die Funktion:
Code: [Select]
'Bewegung abwarten
Sub WaitForMove (Check as Boolean)
While IsMoving()
'prüfen ob wir gegen das Bauteil fahren
If ((GetOEMLed(825) = True) and (Check = True)) Then
MSGBox "Probe während Positionierfahrt aktiv",vbOK + vbCritical ,"Fehler !"
DoButton(21)
End
End If
Sleep(5)
Wend
End Sub

die wartet im Prinzip nur bis die ausgelöste Bewegung beendet ist.
Man kann mit Übergabe True/False noch bestimmen, ob während der Bewegung der Probe Eingang geprüft wird,
um auf eine Kollision zu reagieren.

Der Code wird für eine nicht rechtwinkliges Teil nicht funktionieren.






Title: Re: Bauteil ausrichten
Post by: LazyBee on July 10, 2019, 02:47:30 AM
O.K., danke für die ausführliche Antwort.
Ich verwende den ESS mit Mach3.
Jetzt versuche ich mich mal in den Code reinzulesen. Ob es klappt weiß ich noch nicht.
Gruß
Title: Re: Bauteil ausrichten
Post by: TPS on July 10, 2019, 02:41:21 PM
ok ich habe die Funktion Probe mal allgemeingültig umgeschrieben:

Code: [Select]
'Antastfunktion
Public Function Probe(X as Double, Y as Double , Z as Double)
Dim axisreverse,axisprobe,probedist

'prüfen ob Probe bereits aktiv
If GetOEMLed(825) Then
MSGBox "Probe aktiv",vbOK + vbCritical ,"Fehler !"
DoButton(21)
End
End If
'Antasten immer mit Konturdrehung 0 Grad
Code "G69"


'Softwarelimits ggf. ausschalten
Dim SoftLimitswhereon As Boolean
If GetOEMLed(23) Then
DoOEMButton(119)
SoftLimitswhereon = True
Sleep(250)
End If


'Meldungen ausgeben
IF X > 0 Then
Message("Probe X+")
axisprobe = "X+"
axisreverse = "X-"
probedist = X
End if
IF X < 0 Then
Message("Probe X-")
axisprobe = "X-"
axisreverse = "X+"
probedist = X
End if
IF Y > 0 Then
Message("Probe Y+")
axisprobe = "Y+"
axisreverse = "Y-"
probedist = Y
End if
IF Y < 0 Then
Message("Probe Y-")
axisprobe = "Y-"
axisreverse = "Y+"
probedist = Y
End if
IF Z > 0 Then
Message("Probe Z+")
axisprobe = "Z+"
axisreverse = "Z-"
probedist = Z
End if
IF Z < 0 Then
Message("Probe Z-")
axisprobe = "Z-"
axisreverse = "Z+"
probedist = Z
End if
Sleep(200)


'1.Versuch
Message "1. Antastung"
Code "G31 " & axisprobe  & probedist & " F200"

While IsMoving()'warten bis Probe fertig
Sleep(20)
Wend

Message "Probe 1.Kontakt bei: " &GetVar(2000) &"," &GetVar(2001) &"," &GetVar(2002) &"," &GetOemDro(83) &"," &GetOemDro(84) &"," &GetOemDro(85)
Sleep(200)

'Probe freifahren
Message "Probe freifahren"
While GetOEMLed(825)
Code "G91 G01 " &axisreverse &"0.1 F600"
While IsMoving()'warten bis Probe fertig
Sleep(20)
Wend
Wend
Code "G90"

'2.Versuch
Message "2. Antastung"
Code "G31 " & axisprobe  & probedist & " F2"

While IsMoving()'warten bis Probe fertig
Sleep(20)
Wend

Message "Probe 2.Kontakt bei: " &GetVar(2000) &"," &GetVar(2001) &"," &GetVar(2002) &"," &GetOemDro(83) &"," &GetOemDro(84) &"," &GetOemDro(85)
Sleep(200)

'Softlimits ggf. wieder einschalten
If ((Not GetOEMLed(23)) And (SoftLimitswhereon = True)) Then
Sleep(500)
DoOEMButton(119)
End If

Message "Probe " &Left(axisprobe,1) &" erfolgreich."

End Function


aber bitte vorsichtig testen, da ich das nur runtergeschrieben habe, ohne (mangels Möglichkeit) es zu testen.
Title: Re: Bauteil ausrichten
Post by: TPS on July 10, 2019, 02:49:42 PM
Du kannst Dir alle diese Funktionen einfach in ein file in c:\mach3\macros\dein profilname kopieren.

sagen wir mal das file heisst: ProbeFunktionen.M1S

dann machst Du einen Button mit VB Script.

hier wäre der Code für ein einfaches Antasten X+ 100mm

Code: [Select]
Sub Main()

Probe 100,0,0
end sub

#Expand <\..\..\macros\Dein Profilname\ProbeFunktionen>

der Vorteil der #Expand Anweisung liegt darin, das Du deine Funktionen "bündeln" kannst, um diese immer
wieder aus unterschiedlichen Situationen heraus aufrufen kannst, und, wenn Du einen Fehler behebst, ist dieser
für alle Aufrufe behoben.

OK momentan ist das alles vielleicht ein bisschen viel, aber im Laufe der Zeit wird es immer einfacher, und der
Vorteil der Bündelung von Funktionen wird deutlich klarer.

Gruß Tom


Title: Re: Bauteil ausrichten
Post by: LazyBee on July 11, 2019, 10:14:03 AM
Hallo Tom,
danke für die Arbeit, die du dir damit machst.
Ich habe mir alles runtergeladen und versuche da mal durchzusteigen.
ich habe noch ein Problem mit dem Screenset. Ich verwende den von Immo Winckler und der ist nicht editierbar.
Ich muss erst einen anderen suchen und laden.
Title: Re: Bauteil ausrichten
Post by: TPS on July 11, 2019, 10:28:48 AM
schau mal hier:

https://einfach-cnc.de/mach3-fraesen-beschreibung/

ist in etwa das gleiche.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 11, 2019, 10:33:21 AM
Danke, den hatte ich mir gerade installiert.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 11, 2019, 12:27:30 PM
So, den Button habe ich eingerichtet und die beiden Makros reinkopiert.
Mit der Maschine ergibt sich folgendes:
Nach Betätigung des Buttons verfährt die X-Achse bis zum DRO 100 mm und bleibt stehen.
Wenn ich den TouchProbe betätige bleibt die Maschine stehen und fährt dann langsamer weiter. Betätige ich den TouchProbe nochmals dann bleibt die Maschine stehen. Wenn ich den TouchProbe nicht ein 2. Mal betätige, dann fährt die Maschine bis DRO 100 mm und bleibt dann stehen.
Title: Re: Bauteil ausrichten
Post by: TPS on July 11, 2019, 01:57:34 PM
eigentlich müsstest Du drei Funktionen reinkopiert haben

TouchG()
Probe()
WaitforMove()

Habe mir gerade die modifizierte Funktion Probe() noch mal angesehen, die hat ein "Loch", wenn der Probe Eingang
nicht innerhalb von 100mm (maximale Probe Distanz) kommt. Hier muss ich mir noch was überlegen. Wie gesagt
bei der CSMIO ist das alles ein bisschen anders, in der Originalversion (CSMIO) wird das berücksichtigt und ggf. eine
Fehlermeldung ausgegeben.

Der generelle Ablauf zum Antasten eines Punktes sollte so ablaufen:
-Achse fährt mit F200 bis der Probeeingang betätigt wird
-Achse fährt so lange in die entgegengesetzte Richtung (F600) bis der Probe Eingang wieder frei wird
-Achse fährt mit F2 bis der Probeeingang betätigt wird
-dieser zweite genauere Wert wird dann für die Berechnung genommen

wie geschrieben kann ich das momentan hier leider nicht testen.

Gruß Tom



Title: Re: Bauteil ausrichten
Post by: LazyBee on July 11, 2019, 02:22:03 PM
Sorry, ist mein Fehler. Ich habe nur „Probe“ auf den Button gelegt und „ProbeFunktionen“ abgelegt. Für „TouchG“ und „WaitforMove“ eine m1s anlegen?
Title: Re: Bauteil ausrichten
Post by: TPS on July 11, 2019, 02:38:22 PM
schau dir reply#26 noch mal an, da habe ich das schon beschrieben.

die Code für den button würde dann lauten

Code: [Select]
Sub Main()

TouchG
end sub

#Expand <\..\..\macros\Dein Profilname\ProbeFunktionen>

Achtung die Expand Anweisung muss auf deine Profilnamen angepasst werden

alle drei Funktionen in eine Datei (ProbeFunktionen.M1S)
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 12, 2019, 05:25:43 AM
So, ich habe nun die Codes in die Datei eingepflegt.
Zum Test:
Button drücken --> Statusmeldung: "1. Anstastung" - X wird zügig angefahren --> danach sehr langsames Freifahren. Jetzt  kommt die Fehlermeldung "Probe während Positionierfahrt aktiv"

Kann es ein, dass da eine Überwachungszeit für das Freifahren aktiv ist und das Freifahren zu langsam ist?
Title: Re: Bauteil ausrichten
Post by: TPS on July 12, 2019, 05:38:08 AM
schaue Dir bitte mal die Datei C:\Mach3\lasterrors.txt an.
ich vermute, das Du nicht alle Statusmeldungen siehst, da die zu schnell hintereinander kommen.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 12, 2019, 08:05:59 AM
Hier mal ein Ausschnitt aus der "Lasterrors".
Ich kann hier keinen Fehler erkennen. Was ja wohl auch richtig sein kann, da das Makro ja ordnungsgemäß abbricht.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 12, 2019, 10:53:47 AM
Ich habe jetzt mal den Code von Hand durchgesteppt. Soweit ich das überblicken kann läuft er von Hand.
Was nicht paßt, ist das der 2. Meßpunkt nur ca. 1 - 2 mm neben dem ersten Meßpunkt liegt.
Mir ist immer noch nicht klar woher einige der Variablen kommen:
- 2000
- 2001

und deren Bedeutung im Code, hier z.B:
Quote
'Softlimits ggf. wieder einschalten
   If ((Not GetOEMLed(23)) And (SoftLimitswhereon = True)) Then      'lt. Handbuch ist OEMLED (23) = SpindleSpeed true Acc. ???????
      Sleep(500)
      DoOEMButton(119)                                          ' SoftLimits Off/On toggle
   End If
und hier:

Quote
   'Bewegung abwarten
   Sub WaitForMove (Check as Boolean)
      While IsMoving()
      'prüfen ob wir gegen das Bauteil fahren
      If ((GetOEMLed(825) = True) and (Check = True)) Then      '825 = Digitize Input
         MSGBox "Probe während Positionierfahrt aktiv",vbOK + vbCritical ,"Fehler !"
         DoButton(21)
         End
      End If   
      Sleep(5)
      Wend
   End Sub

Gruß
Title: Re: Bauteil ausrichten
Post by: TPS on July 12, 2019, 01:49:12 PM
die Variablen 2000,2001,2002 kommen aus der G31 Funktion,
hier werden die exakten Koordinaten X/Y/Z eingtragen, wenn der Probe Eingang kommt,
macht das System selbständig.

Du müsstest mal folgende Zeilen ändern, da Du ja keine EIngabefelder für DeltaX und DeltaY hast:

   'Parameter holen
   X = 50 'GetUserDro (1055) 'delta der X-Punkte
   Y = 50 'GetUserDro (1056) 'delta der Y-Punkte
   CurrentToolDiameter = 8 'GetUserDro (1027) 'hier wird der Durchmesser des Messtasters vorbesetzt

bloß das wir das grundsätzlich ans Laufen bekommen.

hier mal ein Auszug aus Lasterrors:

Sat - 13:07:54 ---Probe X+
Sat - 13:07:54 ---1. Antastung
Sat - 13:07:58 ---Probe 1.Kontakt bei: 8.79,0,-68.9725,382.1625,195.8975,-85.74
Sat - 13:07:58 ---Probe freifahren
Sat - 13:07:58 ---2. Antastung
Sat - 13:08:02 ---Probe 2.Kontakt bei: 8.8,0,-68.9725,382.1625,195.8975,-85.74
Sat - 13:08:02 ---Vorposition P2 anfahren
Sat - 13:08:07 ---EStop Button Pressed.
Sat - 13:08:07 ---External EStop Requested.

grundsätzlich schaut das mal gut aus, der erste Punkt wird angetastet, und beim Verfahren zu zweiten Punkt
(es war ja kein DeltaX/DeltaY vorhanden) seinen wir gegen das Bauteil zu fahren.

Gruß Tom

PS: in irgend einem Post habe ich ein Bild angehängt, in dem man die Antastreihenfolge sehen kann.




Title: Re: Bauteil ausrichten
Post by: LazyBee on July 12, 2019, 03:07:22 PM
Hallo,
ich habe jetzt nochmals mit den Delta-Werten getestet. In meinem Fall 15 mm und ToolDiameter 3 mm.
Wenn ich mit Hand durchsteppe geht das prinzipiell. Beim Automatikbetrieb steigt das Programm mit der bereits genannten Fehlermeldung immer noch aus.
Title: Re: Bauteil ausrichten
Post by: TPS on July 12, 2019, 03:17:53 PM
hier noch mal ein Version der Funktion TouchG()

ACHTUNG Deltas und Durchmesser wieder entsprechend anpassen

Code: [Select]
'Antasten Werkstück (gedreht)
Public Function TouchG()
Message "Antasten schraeges Bauteil"

'Parameter holen
X = GetUserDro (1055) 'delta der X-Punkte
Y = GetUserDro (1056) 'delta der Y-Punkte
CurrentToolDiameter = GetUserDro (1027)

'Parameter prüfen
If X = 0 Then
MSGBox "Delta X zu klein!",vbOK + vbCritical ,"Fehler !"
Exit function
End If
If Y = 0 Then
MSGBox "Delta Y zu klein!",vbOK + vbCritical ,"Fehler !"
Exit function
End If

'PI vorbesetzen -----------------------------------------------
pi=4*Atn(1)

'Koordinatendrehung ausschalten
Code "G69"
Sleep(200)

'X / Y auf null setzen
    Call SetDro (0,0)
    Call SetDro (1,0)
Sleep(200)

'die Y Seite vermessen

'P1 antasten
Probe 100,0,0
'Koordinaten P2
    X1 = GetVar(2000)
    Y1=0

'Vorposition P2 anfahren
Message("Vorposition P2 anfahren")
    Y2 = Y
    Code "G91 G1 X-" &X & "F1800"
WaitForMove(False)
    Code "G91 G1 Y" &Y2
WaitForMove(True)

'P2 antasten
Probe 100,0,0
'Koordinaten P2
    X2 = GetVar(2000)

    'die X Seite vermessen -----------------------------------------------

'Vorposition P3 anfahren
Message("Vorposition P3 anfahren")
X3 = X1 + (CurrentToolDiameter/2) + 10
    Code "G91 G1 X-" &X & "F1800"
WaitForMove(False)
    Code "G90 G1 Y-30"
WaitForMove(True)
    Code "G90 G1 X" &X3
WaitForMove(True)

'P3 antasten
Probe 0,100,0
'Koordinaten P3
    Y3 = GetVar(2001) 

'Vorposition P4 anfahren
Message("Vorposition P4 anfahren")
    X4 = X3 + X
    Code "G91 G1 Y-20 F1800"
WaitForMove(False)
    Code "G90 G1 X" &X4
WaitForMove(True)

'P4 antasten
Probe 0,100,0
'Koordinaten P4
    Y4 = GetVar(2001) 'get the probe touch location

'Z auffahren
Code "G91 G01 Y-0.2 F1800"
WaitForMove(False)
    Code "G91 G1 Z20"
WaitForMove(True)

'Brechnung
t1= (X4-X3)*(Y1-Y3)-(Y4-Y3)*(X1-X3)
b1= (Y4-Y3)*(X2-X1)-(X4-X3)*(Y2-Y1)
ua=t1/b1

'Nullpunkt berechnen
XH=X1+ua*(X2-X1) ' X Home  distance away
YH=Y1+ua*(Y2-Y1) ' Y Home  distance away

' Message("Koordinaten Nullpunkt : X " &XH &" Y " &YH)
' Sleep(200)


'Winkel aus der längeren Seite berechnen
If X>Y Then
'längere Seite=X
a=(Y4-Y3)
b=(X4-X3)
v=a/b
NewAngle=Atn(v)*(180/pi)
Else
'längere Seite=Y
a=(X2-X1)
b=(Y2-Y1)
v=b/a
NewAngle=Atn(v)*(180/pi)

If NewAngle > 0 Then
NewAngle=NewAngle-90
Else
NewAngle=NewAngle+90
End If
End If
' Message("Neuer Winkel : " &NewAngle )
' Sleep(200)

'zum neuen Nullpunkt fahren
'Winkel = errechneter Winkel + 45°
siWi = 2*Pi/360*(NewAngle+45)
hyWi = SQR((CurrentToolDiameter/2)*(CurrentToolDiameter/2)*2)

Dx = hyWi * Cos(siWi)
Dy = hyWi * Sin(siWi)
' Message("Koordinaten Berechnung : X " &Dx &" Y " &Dy)
' Sleep(200)

'Zu neuen Nullpunkt fahren
    Code "G90 G1 X" &XH+Dx & " Y" &YH+Dy
WaitForMove(True)

'neuen Nullpunkt setzen
    Call SetDro (0,0)
    Call SetDro (1,0)

'Koordinatendrehung setzen
    Call SetOemDro (118,NewAngle)

'Koordinaten ausgeben
' Message "X1 " &X1 &" Y1 " &Y1 & "   X2 " &X2 &" Y2 " &Y2 & "   X3 " &X3 &" Y3 " &Y3 & "   X4 " &X4 &" Y4 " &Y4

'wieder auf absolut stellen
Code "G90"
Message ""

End Function
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 13, 2019, 04:00:43 AM
Hallo,
ich habe die neue Datei getestet. Es gibt folgende Fehlermeldung aus:
Siehe Bild.

Die Eingaben für DeltaX, DeltaY und den Durchmesser habe ich in das Screenset eingearbeitet. Das funktioniert soweit.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 13, 2019, 04:32:54 AM
Eine Ergänzung noch zum obigen post.
Das Programm stoppt immer noch mit der gleichen Fehlermeldung wie Anfangs geschrieben nach Durchlaufen des ersten Punktes.
Title: Re: Bauteil ausrichten
Post by: TPS on July 13, 2019, 06:36:01 AM
Hast Du die Funktion WaitforMove() versehentlich gelöscht?
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 13, 2019, 06:52:29 AM
Ich habe eine neue "TouchG" mit dem neuen Code erstellt. "WaitforMove" ist ja in der "ProbeFunktionen", die ja nun nicht mehr aufgerufen wird, da in "TouchG" nicht mehr vorhanden.
Meine "TouchG" im Anhang.
Title: Re: Bauteil ausrichten
Post by: TPS on July 13, 2019, 06:54:33 AM
nein, nach wie vor alle drei Funktionen

TouchG()
WaitforMove()
Probe()

in einer Datei (Probefunktionen), nur eben die alte TouchG() durch die neue ersetzen.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 13, 2019, 10:40:35 AM
So, der Code läuft nun durch.
Mit der F8-Taste mache ich normalerweise eine Referenzfahrt über alle Achsen. Das funktioniert jetzt nicht mehr. Kann das an den Macros liegen?
Ich bekomme die Fehlermeldung: "Nothing to Feedhold"
Title: Re: Bauteil ausrichten
Post by: TPS on July 13, 2019, 11:39:39 AM
Nein das liegt nicht an den Macros, das liegt an dem Screenset.

Ich haben mal ein Liste angefügt, welche Schnellzugriffstasten bei Deinem Screenset was machen.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 14, 2019, 03:15:02 AM
Danke für den Hinweis. Ich hätte mich totgesucht.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 21, 2019, 12:00:04 PM
Was bedeuten denn Vorsilben "si" bei siwi und "hy" bei hywi?
Title: Re: Bauteil ausrichten
Post by: TPS on July 27, 2019, 10:24:10 AM
Hallo,
irgendwie habe ich den Post verpasst:

siwi ist der Winkel im Bogenmaß, da die Sin/Cos Funktionen einen Winkel im Bogenmaß erwarten
hywi ist der Versatz, der sich aus dem aktuellen Durchmessers des Werkzeugs ergibt, da der neue Nullpunkt ja im Zentrum der Spindel sein soll.
Title: Re: Bauteil ausrichten
Post by: LazyBee on July 31, 2019, 06:28:19 AM
Danke für die Info.
Ich habe jetzt alles am Laufen. Ich habe nun doch in die Winckler-Version reingebaut bekommen.

Gruß
Title: Re: Bauteil ausrichten
Post by: WF on August 28, 2019, 06:37:11 AM
Hallo,
ich habe eine Frage zum Thema.
Ich möchte eine Tastplatte verwenden, die über einen Rand (Abstand bis zum Messobjekt) verfügt. Ähnlich hier: https://www.youtube.com/watch?v=bhZdbgM6S70.
Nun muss noch die Breite zw. Außenkante und Innenkante der Tastplatte als Abstand berücksichtigt werden.
Reicht es aus, wenn ich einfach die Breite des Randes zum Durchmesser/2 addiere? Erschwerend kommt dann noch hinzu das die Abstände in AX und AY, bedingt durch die Fertigung, nicht genau gleich sein könnten.
(http://)
Danke
Title: Re: Bauteil ausrichten
Post by: TPS on August 29, 2019, 03:21:38 AM
DeltaX und DeltaY sind eh Parameter, und können somit beliebig, auch unterschiedlich sein.

Wenn der Tastrand auf beiden Seiten gleich ist kannst Du den einfach dazuzählen.
Title: Re: Bauteil ausrichten
Post by: WF on August 29, 2019, 03:35:09 AM
Hallo,
waren deltaX und DeltaY nicht die Abstände der Messpunkte zueinander?
Ich meinte AX und AY auf meiner Skizze.
Title: Re: Bauteil ausrichten
Post by: TPS on August 29, 2019, 03:48:17 AM
Sorry habe mich verlesen, wir reden von Ax und Ay.

hyWi = SQR(((CurrentToolDiameter/2)+Ax)*((CurrentToolDiameter/2)+Ay)*2)

sollte passen.

Einfach mal mit extremen Ax zu Ay Unterschieden testen, wenn es nicht passt, muß ich mit nochmal komplett reindenken,
ist zu lange her.
Title: Re: Bauteil ausrichten
Post by: WF on August 29, 2019, 03:54:35 AM
Hallo,
danke.
So in etwa hatte ich es mir auch gedacht. Ich war mir bloß nicht sicher.
Ich probier das mal aus.

Title: Re: Bauteil ausrichten
Post by: LazyBee on October 10, 2023, 11:41:27 AM
Hallo,
ich muss das Thema noch mal aufleben lassen.
Ich habe ein Problem bei der Ausführungen von Assistenten entdeckt.
Wenn ich z.B. den Assistenten "Surface" aufrufe und den "Post G Code"-Button drücke, dann ruft Mach3 anscheinend zuerst das Makro zum Starten des "Bauteil Ausrichten" auf. Bei mir heißt das "M1030.m1s mit folgenden Inhalt:
Code: [Select]
Sub Main()

TouchG
'Probe 100,0,0
end sub

#Expand <\..\..\macros\01_ESS-DualPort\ProbeFunktionen>

Das heißt, es beginnt die Maschine den ersten Punkt zu suchen, findet diesen natürlich nicht, da kein Taster angeschlossen ist.

Ausgelöst wird die Geschichte durch den letzten Befehl (Call LoadTeachFile) im Assistenz-Makro (Surface). Ich finde keine Möglichkeit den Start des "Bauteil ausrichten" zu verhindern.:

Code: [Select]
Sub Main()
DoOEMButton (169)
FeedRough = Abs(GetOEMDRO(1070))
FeedFinish = Abs(GetOEMDRO(1083))
ToolDia = Abs(GetOEMDRO(1071))
ToolRad = ToolDia / 2
StepOverPercent = Abs(GetOEMDRO(1096))
 
XPOS = GetOEMDRO(1072)
YPOS = GetOEMDRO(1073)
ZStart = GetOEMDRO(1084)

Tool_Offset_X = Abs(GetOEMDRO(1078))
Tool_Offset_Y = Abs(GetOEMDRO(1082))
SafeZ = Abs(GetOEMDRO(1079))

Length = Abs(GetOEMDRO(1080))
Width = Abs(GetOEMDRO(1081))
Depth = Abs(GetOEMDRO(1075))

StepDepth = Abs(GetOEMDRO(1076))
Clearance = StepDepth * 1.5
FinalCutDepth = Abs(GetOEMDRO(1095))
 ' test inputs

If FinalCutDepth = 0 Then
    Code "(MSG,Final Cut Depth can't be zero)"
End If

If StepOverPercent = 0 Then
    Code "(MSG,Tool Step Over Percentage can't be zero)"
End If

If StepOverPercent > 100 Then
    Code "(MSG,Tool Step Over Percentage can't be > 100%)"
End If

If FinalCutDepth = StepDepth Then
    Code "(MSG,Final Cut Depth can't be equal to Step Depth)"
End If

If FeedRough = 0 Then
    Code "(MSG,Feed Rate can't be zero)"
End If

If StepDepth > Depth Then
    StepDepth = Abs(Depth)
End If

If StepDepth = 0 Then
    Code "(MSG,Step down can't be zero)"
End If

If Length = 0 Then
    Code "(MSG,Length can't be zero)"
End If

If Depth = 0 Then
    Code "(MSG,Depth can't be zero)"
End If

If Width = 0 Then
    Code "(MSG,Width can't be zero)"
End If

If SafeZ <= ZStart Then
    Code "(MSG,********  SafeZ <= ZStart  *******)"
End If

If ToolDia = 0 Then
    Code "(MSG,Tool Diameter can't be zero)"
End If
 
OpenTeachFile "FaceStockX.tap"

XStart = XPOS - Tool_Offset_X + ToolRad
YStart = YPOS - Tool_Offset_Y + ToolRad
XFinal = XPOS + Length + Tool_Offset_X - ToolRad
YFinal = YPOS + Width + Tool_Offset_Y - ToolRad

If Width < ToolDia Then
    YStart = YPOS + ToolRad
    YFinal = YStart
End If

XToolDown = XStart - Tool_Offset_X - ToolDia
YToolDown = YStart

Depth = Depth
StepDepth = StepDepth
StepOverPercent = StepOverPercent / 100

PassNumber = 1
Code "F" & FeedRough

DepthofPass = ZStart - PassNumber * StepDepth
If DepthofPass > ZStart - Depth + FinalCutDepth Then
    Do
        DepthofPass = ZStart - PassNumber * StepDepth
        If DepthofPass <= (ZStart - Depth + FinalCutDepth) Or PassNumber > 2000 Then
            Exit Do
        End If
       
        Code "G00 Z" & SafeZ
        Code "G00 X" & XToolDown & " Y" & YToolDown
        Code "G00 Z" & DepthofPass
       
        PassType = 1
        YpassNo = 0
        Do
            YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
            If (YofPass >= YFinal) Then
                Exit Do
            End If
            'Code "F" & FeedRough
            Code "G01 Y" & YofPass
            Code "G01 X" & XFinal
           
            PassType = PassType * -1
            YpassNo = YpassNo + 1
           
            YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
            If (YofPass >= YFinal) Then
                Exit Do
            End If
            Code "G01 Y" & YofPass
            Code "G01 X" & XStart
           
            PassType = PassType * -1
            YpassNo = YpassNo + 1
        Loop
        YofPass = YFinal
        Code "G01 Y" & YofPass
        If (PassType = 1) Then
            Code "G01 X" & XFinal
        Else
            Code "G01 X" & XStart
        End If
        PassNumber = PassNumber + 1
    Loop
End If

If FinalCutDepth <> 0 Then
    PassType = 1
    DepthofPass = ZStart - Depth + FinalCutDepth
   
    Code "G00 Z" & SafeZ
    Code "G00 X" & XToolDown & " Y" & YToolDown
    Code "G00 Z" & DepthofPass
   
   
    YpassNo = 0
    Do
        YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
        If (YofPass >= YFinal) Then
            Exit Do
        End If
        Code "G01 Y" & YofPass
        Code "G01 X" & XFinal
       
        PassType = PassType * -1
        YpassNo = YpassNo + 1
       
        YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
        If (YofPass >= YFinal) Then
            Exit Do
        End If
        Code "G01 Y" & YofPass
        Code "G01 X" & XStart
       
        PassType = PassType * -1
        YpassNo = YpassNo + 1
    Loop
    YofPass = YFinal
    Code "G01 Y" & YofPass
    If (PassType = 1) Then
        Code "G01 X" & XFinal
    Else
        Code "G01 X" & XStart
    End If
End If

PassType = 1
DepthofPass = ZStart - Depth

Code "G00 Z" & SafeZ
Code "G00 X" & XToolDown & " Y" & YToolDown
Code "G00 Z" & DepthofPass
 Code "F" & FeedFinish

YpassNo = 0
Do
    YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
    If (YofPass >= YFinal) Then
        Exit Do
    End If
   
    Code "G01 Y" & YofPass
    Code "G01 X" & XFinal
   
    PassType = PassType * -1
    YpassNo = YpassNo + 1
   
    YofPass = YStart + (ToolDia * StepOverPercent * YpassNo)
    If (YofPass >= YFinal) Then
        Exit Do
    End If
    Code "G01 Y" & YofPass
    Code "G01 X" & XStart
   
    PassType = PassType * -1
    YpassNo = YpassNo + 1
Loop
YofPass = YFinal
Code "G01 Y" & YofPass
If (PassType = 1) Then
    Code "G01 X" & XFinal
Else
    Code "G01 X" & XStart
End If

Code "G00 Z" & SafeZ
Code "G00 X" & XToolDown & " Y" & YToolDown

Code "M30"
CloseTeachFile

Call LoadTeachFile
End Sub

Main

Bei "Call LoadTeachFile" wird aus der "Surface"-Oberfläche in das Hauptfenster von Mach3 umgeschaltet.

Weiß jemand, was man da machen kann?

Gruß



Title: Re: Bauteil ausrichten
Post by: TPS on October 10, 2023, 12:01:48 PM
Servus,

auf die Schnelle habe ich das hier:

https://www.machsupport.com/forum/index.php/topic,30803.msg215687.html#msg215687

Reply #6 !!

gefunden. Das Macro m1030.m1s schein eine Sonderrolle zu spielen !?
Davon musste ich bis jetzt auch nichts.

Gruß Tom
Title: Re: Bauteil ausrichten
Post by: LazyBee on October 11, 2023, 03:24:30 AM
Danke, dann muss ich wohl alles umbenennen.
Google hatte ich auch vor meiner Anfrage bemüht, allerdings nichts gefunden.

Danke nochmals, Du bist mein Held!