Hallo Volker,
hier ist der Code den ich benutze, lässt sich aber nicht 1 zu 1 umsetzen, da ich die eigentlichen
Antastfunktionen (X/Y) wieder in externen Funktionen gekapselt habe, aber die Berechnung geht
daraus hervor. Ich benutze alledings 4 Punkte (2 an der X-Kante und 2 an der Y-Kante).
'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
wenn Du hier im Forum oder bei Google nach Touch Probe oder Edge Finder script suchst findest Du
etliche Beispiele.
Gruß Tom