Hello Guest it is March 28, 2024, 02:21:18 PM

Author Topic: Bauteil ausrichten  (Read 20982 times)

0 Members and 1 Guest are viewing this topic.

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #10 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
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Bauteil ausrichten
« Reply #11 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

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #12 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
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #13 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
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #14 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
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Bauteil ausrichten
« Reply #15 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

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #16 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. 
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Bauteil ausrichten
« Reply #17 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
Re: Bauteil ausrichten
« Reply #18 on: July 09, 2019, 11:09:18 AM »
Hallo,
gibt es für die Variante mit 4 Punkten eine Lösung (Code)?

Danke
Mach3 Version R3.043.062 mit ESS

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Bauteil ausrichten
« Reply #19 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
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.