|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Als Software verwende ich Mach3, diese CNC-Steuerung hat sich mittlerweile einen guten Namen für die Steuerung über einen PC gemacht und ist außerdem noch recht erschwinglich. Da die Schritte
vom Smoothstepper erzeugt werden, ist die CPU-Belastung auf dem Rechner nicht sehr groß, so dass mein kleines Netbook mit 1GHz Dual-Core dafür ausreicht. Ich fange nämlich nicht an, mir auch noch einen großen
Desktop-PC in die Werkstatt zu stellen.
|
|
|
|
|
|
|
|
Mit einer CAM-Lösung fange ich für meinen Bedarf nicht viel an. Meine Pläne zeichne ich mit MEDUSA4 Personal, das
es für den Privatgebrauch kostenlos gibt. Der Nachteil ist zwar der, das man daraus nichts exportieren kann, aber wenn ich mir überlege, wie ich ein Bauteil am Besten herstelle, dann muss ich sowieso meinen Grips
anstrengen und dann kann ich den G-Code auch gleich selbst schreiben, die Werkzeugpositionen messe ich mir dann aus der Zeichnung einfach heraus.
|
|
|
|
|
|
|
|
Zur Kontrolle des geschriebenen Codes ist ein NC-Debugger ganz praktisch, im Moment benutze ich den NC-Corrector v4.0 , der ist ebenfalls frei erhältlich.
|
|
|
|
|
|
|
|
Um mir aus Schnittgeschwindigkeit, Vorschub pro Zahn und dem Werkstückdurchmesser den Vorschub und die Drehzahl zu berechnen, habe ich mir kurzerhand selbst
ein kleines Windows-Programm geschrieben: Vorschubrechner
|
|
|
|
|
|
|
|
Tipps und Tricks zu Mach3 Mach3 ist zwar weit verbreitet und es gibt auch ein gutes offizielles Forum, aber teilweise hat das Programm dann doch einen etwas ungehobelten Charakter,
speziell in der Turn-Version zum Drehen. Da gibt es Funktionen, die schon lange wohl niemand benutzt hat, weil sie nämlich nicht funktionieren. Die Handbücher sind zwar gut, aber leider auch nicht vollständig. Das
Problem ist aber an einer solchen Software, dass ein überraschendes Verhalten sehr schnell sehr häßlich werden kann. Deshalb hier ein kurzer Überblick über die von mir gefundenden Bugs und deren Lösung:
Werkzeugwechselmakros: Die M6Start.m1s - M6End.m1s Makros funktionieren so nicht wirklich und sie sind für Turn und Mill gleich, was so auch
keinen Sinn macht. Die Maschine soll damit auf die Position zurückfahren, die vor dem Werkzeugwechsel war, aber sie macht alles andere. Lösung: M6End Makro leeren und
Werkzeugtabelle (Turn): Das Setup der Tooltable ist nicht ganz so wie in der Anleitung beschrieben. Man benötigt auch kein Nullwerkzeug, bei mir ist
der Nullpunkt in Z-Richtung der auf 0° gestellte Werkzeughalter. Von dort aus werden die Z-Differenzen bestimmt. In X-Richtung enthält die Tabelle, wenn man nach Anleitung arbeitet, die Abstände von Maschinennull
zur Z-Achse, wenn man die X-Achse referenziert hat (bei mir ist das vorne, X+ als Nullpunkt)- statt den Abstand zum Nullwerkzeug wie im Manual beschrieben. Diese Änderung hat den großen Vorteil, dass man die X-Achse
auf die Home-Position fährt, die Achse Nullt und dann, wenn man ein Werkzeug vorgibt, direkt den richtigen Radius in der X-Achse hat. In Verbindung mit einem Schnellwechselhalter verringert das die
Einrichtungszeiten drastisch.
G77 & G78 (Turn): Die vorprogrammierten Funktionen zum Längs- und Plandrehen sind an und für sich recht praktisch, aber schon lange verwaist.
Das T-Argument für den Winkel kann man gar nicht benutzen, da es
nämlich inzwischen für den Werkzeugwechsel zuständig ist - und den können wir da gar nicht brauchen. Der Vorteil ist, dass diese Makros in einem Basic-Dialekt geschrieben sind und so konnte ich das umschreiben und
dabei gleich noch ein paar Bugs entfernen. Die Syntax ist jetzt:
(r: Start-Ø ) (x: Fertig-Ø ) (k: ZStart ) (z: ZEnde )
(#101: Winkel ) (f: optional Feed) (h: optional Schnittiefe) (Längsdrehen) #101 = 0 g77 r9.5 x10.1 k0 z-3 (Plandrehen) g78 r50 x0 k-0.5 z-2.2
Das Programm dreht sowohl innen als auch außen, abhängig von den Parametern. Der letzte Span wird mit einer Schlichtzustellung = 0,4 x Schruppzustellung
gedreht. Die Makros finden sich hier: M1077.m1s und M1078.m1s . Viele Drehaufgaben lassen sich durch eine einfache Kombination dieser Befehle ausführen.
T0101 / G43 / G49 in Turn / Mill: Das ist kein Bug, sondern steht so im Handbuch. Wenn man aber Turn und Mill durcheinander verwendet, sorgt es
schnell für Konfusion und hat mir einen 0,5 - Millimeter - vor Schluss - Beinahecrash beschert. Also: Die Werkzeuglängenkorrektur aktiviert man in Turn (bei der Drehbank) mit einem Txxyy - Befehl, wobei yy für den angewendeten Eintrag aus der Tooltable steht. Für einen Werkzeugwechsel muss man also nur programmieren:
Zumindest das G49-Kommando (Längenkorrektur aus) wird bei Turn einfach ignoriert. Bei Mill, also bei der Fräse sieht das anders aus, da setzt G49 die Längenkorrektur auf 0. Ich
hatte in meinem Header G49 stehen und bei der Drehbank konnte man mit einer einmal eingerichteten Maschine auch einfach so losfahren, das vorherige Tool wurde weiter verwendet. Bei der Fräse hat es dann aber das
Werkzeug herausgeschmissen und die Z-Achse war auf einmal ganz wo anders. Der Werkzeugwechsel dort geht nämlich so:
In dieser Reihenfolge wird zuerst die Länge für das neue Werkzeug gesetzt, und dann auf den Wechsel gewartet. Das hat den Vorteil, dass man, bevor man den
Werkzeugwechsel mit “Cycle Start” bestätigt, die Position einfach durch nachmessen kontrollieren kann.
“Run from here” (Turn) Mit dieser Funktion kann man mitten in einem Programm starten. Dazu wird ermittelt, an welcher Position das Werkzeug sein
müsste und ein “Preparation Move” - wird gestartet. Das Fenster dazu sieht aber unterschiedlich aus, je nachdem man seine Achsen referenziert hat oder nicht. Mit einer unreferenzierten Z-Achse ist da ein Eintrag
“Rapid Height”. Es weiß wohl niemand, wozu dieser gut ist, denn an diese Position fährt die Maschine zuerst einmal hin, bevor sie den angegebenen Punkt ansteuert, Eilgang oder nicht. Man muss dort deshalb die Z
Position eintragen, an die man will, sonst gehts zuerst auf 0 - (und das kann schlecht sein)
Handrad - Makro von einfach-cnc Das in der Beschreibung vom Handrad vorgesehene Makro kann man getrost vergessen. Stattdessen kann man die zwei
untersten Knöpfe des Handrads direkt belegen, und zwar entweder mit den OEM-Button-Codes 303 und 306, dann macht das Handrad, was auf den Buttons steht, nämlich entweder den Step- oder Velocity-Modus für das
Handrad. Ich habe mir das aber noch geändert, und zwar auf die Codes 302 und 327. Der erste aktiviert das Handrad, der zweite schaltet die Modi für das Handrad um.
Jogbox Die
Jogbox hat die Pins für die Taster, die die Achsen steuern direkt zugeordnet. Damit bleiben noch vier OEMTrigger, die mit 1000 (Cycle Start), 1003 (Stop), 276 und
301belegt sind: Der erste aktiviert die Jogbox, der zweite aktiviert das OEMTriggerMacro, das beim Start gesetzt wird, bei General Config steht also neben G80 auch M1001, das sieht so aus und schaltet
zwischen zwei Geschwindigkeiten bei der Positionierung um::
M1001.m1s SetTriggerMacro(1002)
code "F100" code "M1111" code "S750"
M1002.m1s dim slowoem as integer
dim slowvar as integer slowvar = GetVar(111) if slowvar < 1 or slowvar > 100 then slowvar = 25 SetVar(111,25) end if slowoem = GetOemDRO (3) If slowoem = 100 Then
SetOemDRO(3,slowvar) Else SetOemDRO(3,100) SetVar(111,slowoem) End If
Kantentaster Den Bau eines Kantentasters beschreibe ich auf einer anderen Seite, aber die Makros dafür gehören hier hin. Um den Taster zu benutzen,
gibt es einmal das Add-On ProbeIt! , aber das jedesmal aufzurufen wird auf die Dauer auch lästig. Um in einem Programm mit dem Taster eine Kante zu finden, wählt man diesen als Werkzeug (klar) und fährt grob vor die Kante, ich habe 10 mm als Schwellenwert genommen. Die Makros
fahren in der beschriebenen Richtung an die Kante und setzen die gefundene Kante auf den Wert, der mit den Parameter P vorgegeben ist, zum Beispiel 0. Die
Makros verwenden die Benutzerdefinierte, gespeicherte Variable #501 für den Tastkopfdurchmesser, die natürlich einmal gesetzt werden muss.
|
|
|
|
|
|
|
|
CODE SECTION
M1077.m1s
'G77 '(Xx.xxxx XDia NEEDED) '(Zx.xxxx End Z NEEDED)
'(Fx.xxxx Feedrate) '(can be Set In the settings page:) '(Hx.xxxx Depth of cut) '(Cx.xxxx Clearance In the X) '(Qx.xxxx Clearance In the Z) '(Kx.xxxx ZStartpoint) '(Rx.xxxx XStartpoint)
'(Tx.xxxx Taper In Deg) Sub Main() test = false 'true will activate testing mode ZClearance = Abs(tZClear()) 'This one it not available XClearance = Abs(tClearX()) StartX = tXStart()
StartZ = tZStart() EndX = tEndX() EndZ = tEndZ() Taper = GetVar(101) SetVar(101,0) If Taper > 90 or Taper < 0 Then message "Error, Taper out of Bounds"
code "M30" Exit Sub End If FirstPassDepth = tFirstPass() RoughAmount = abs(tCutDepth()) Feed = Feedrate() SizingAmount = RoughAmount * 0.4
SizeFeed = Feed * 0.4 PI = 3.1415926
If IsDiameter() Then TanT = 2 * Tan((Taper * PI)/180) Else TanT = Tan((Taper * PI)/180) End If
'There're different ways to anchor the taper 'Mode 0 anchors the Taper End at EndZ and StartX ' and will turn parallel, then tapered and correcting EndX if neccessary
'Mode 1 anchors the Taper at EndZ and EndX ' and reduces the dia first, then turns the taper, corrects EndZ if neccessary TaperMode = 1
If test = true Then
OpenTeachFile( "G77Test.tap") Code "(G77 Test Code Dump)" End If
If StartZ > EndZ Then RightLeft = 1 Else
RightLeft = -1 ZClearance = ZClearance * -1 End If
If StartX < EndX Then 'Inside Turning IDOD = -1 XClearance = XClearance * -1
Else IDOD = 1 'Outside End If
'Calc the distance Z needed to make the taper angle If Taper <> 0 Then
TaperZ = Abs(StartX - EndX) / TanT If TaperMode = 0 Then If TaperZ > Abs(StartZ - EndZ) Then 'taper is longer than Z distance
EndX = StartX - Abs(StartZ - EndZ) * TanT * IDOD TaperZ = Abs(StartZ - EndZ) End If
PosZ = EndZ + SizingAmount * RightLeft / TanT Else If TaperZ <= Abs(StartZ - EndZ) Then 'taper is shorter than Z distance
EndZ = StartZ - TaperZ * RightLeft PosZ = EndZ + RightLeft * SizingAmount / TanT Else
PosZ = EndZ + SizingAmount * RightLeft End If TaperX = Abs(StartZ - EndZ) * TanT
TaperZ = Abs(StartZ - EndZ) End If Else PosZ = EndZ + SizingAmount * RightLeft End If
code "G0 X" & StartX + XClearance & " Z" & StartZ + ZClearance code "F" & Feed LastPassDia = StartX
'optimize roughing value
Passes = (Abs(StartX - EndX) - SizingAmount) / RoughAmount If Fix(Passes) <> Passes Then passes = Fix(Passes) + 1 RoughAmount = (Abs(StartX - EndX) - SizingAmount) / Passes
End If
If Abs(StartX - EndX) > SizingAmount Then 'Skip Roughing if there's nothing to do
For i=1 to Passes 'Roughing Loop
PassDia = StartX - (RoughAmount * IDOD * i) code "G0 Z" & StartZ + ZClearance
code "G0 X" & nFmt(PassDia ,4)
If Taper <> 0 Then 'Taper turn section
If TaperMode = 0 Then ZCalc = EndZ + (Abs(StartX - PassDia) + SizingAmount) * RightLeft / TanT
'straight to ZCalc code "G1 Z" & nFmt(ZCalc ,4)
'taper to ZEnd
code "G1 X" & nFmt(LastPassDia ,4) & " Z" & nFmt(PosZ ,4) 'clearing
code "G0 X" & nFmt(LastPassDia + XClearance ,4) & " Z" & nFmt(PosZ + ZClearance ,4)
PosZ = ZCalc Else
If Abs(PassDia - EndX) > TaperX - SizingAmount * TanT Then 'straight thinning
code "(straight)" PosZ = EndZ + SizingAmount * RightLeft
code "G1 Z" & nFmt(PosZ ,4)
code "G1 X" & nFmt(LastPassDia ,4)
code "G0 X" & nFmt(PassDia + XClearance ,4) & " Z" & nFmt(PosZ + ZClearance ,4) Else
code "(tapered)"
ZCalc = StartZ - RightLeft * ((Abs(PassDia - EndX) - SizingAmount) / TanT)
code "G1 Z" & nFmt(ZCalc ,4) If First = 0 Then
code "G1 X" & nFmt(PassDia + IDOD * Abs(PosZ - ZCalc) * TanT ,4) & " Z" & nFmt(PosZ ,4)
End If First=1
code "G1 X" & nFmt(LastPassDia ,4) & " Z" & nFmt(PosZ ,4)
code "G0 X" & nFmt(LastPassDia + XClearance ,4) & " Z" & nFmt(PosZ + ZClearance ,4)
PosZ = ZCalc End If End If
Else 'Straight turn section code "G1 Z" & nFmt(PosZ ,4)
code "G1 X" & nFmt(LastPassDia ,4) If Abs(LastPassDia - PassDia) < Abs(XClearance) Then
code "G0 X" & nFmt(PassDia + XClearance ,4) & " Z" & nFmt(PosZ + ZClearance ,4)
Else code "G0 Z" & nFmt(PosZ + ZClearance ,4) End If
End If
LastPassDia = PassDia
Next i
'sizing code "F" & SizeFeed
'sizing in X direction If Taper = 0 then code "G0 X" & StartX + XClearance code "G0 Z" & EndZ
code "G1 X" & nFmt(PassDia ,4) code "G0 X" & nFmt(PassDia + XClearance ,4) & " Z" & EndZ + ZClearance
Elseif Taper <> 0 And TaperMode = 1 Then code "G0 X" & StartX + XClearance
code "G0 Z" & nFmt(EndZ ,4) code "G1 X" & nFmt(PassDia + TaperX * IDOD ,4)
code "G0 X" & nFmt(PassDia + TaperX * IDOD + XClearance ,4) & " Z" & nFmt(EndZ + ZClearance ,4) End If
'sizing in Z direction
code "G0 X" & PassDia + XClearance & " Z" & StartZ + ZClearance
End If code "F" & SizeFeed
code "G0 X" & EndX
If Taper <> 0 Then If TaperMode = 0 Then code "G1 Z" & nFmt(EndZ + TaperZ * RightLeft ,4)
code "G1 X" & StartX & " Z" & nFmt(EndZ ,4) Else code "G1 Z" & StartZ
code "G1 X" & nFmt(EndX + TaperX * IDOD ,4) & " Z" & nFmt(EndZ ,4)
code "G1 X" & nFmt(EndX + (TaperX + SizingAmount) * IDOD ,4)
code "G0 X" & nFmt(EndX + (TaperX + SizingAmount) * IDOD + XClearance ,4) & " Z" & nFmt(EndZ + ZClearance ,4) End If
code "G0 X" & StartX + XClearance Else code "G1 Z" & EndZ code "G1 X" & EndX + SizingAmount * IDOD
code "G0 X" & EndX + SizingAmount * IDOD + XClearance & " Z" & EndZ + ZClearance code "G0 X" & StartX + XClearance End If
code "G0 Z" & StartZ + ZClearance code "F" & Feed
If test = true Then CloseTeachFile()
End Sub Main
M1078.m1s
'G78 '(Xx.xxxx XDia NEEDED) '(Zx.xxxx End Z NEEDED)
'(Fx.xxxx Feedrate) '(can be Set In the settings page: 'Hx.xxxx Depth of cut) '(Cx.xxxx Clearance In the X) '(Qx.xxxx Clearance In the Z) '(Kx.xxxx ZStartpoint) '(Rx.xxxx XStartpoint)
'(Tx.xxxx Taper In Deg)
Sub Main() test = false 'true will activate testing mode ZClearance = Abs(tZClear()) 'This one it not available XClearance = Abs(tClearX()) StartX = tXStart()
StartZ = tZStart() EndX = tEndX() EndZ = tEndZ() Taper = GetVar(101) SetVar(101,0) If Taper > 90 or Taper < 0 Then message "Error, Taper out of Bounds"
code "M30" Exit Sub End If FirstPassDepth = tFirstPass() RoughAmount = tCutDepth() Feed = FeedRate()
SizingAmount = RoughAmount * 0.4
SizeFeed = Feed * 0.4 PI = 3.1415926
If IsDiameter() Then TanT = 2 * Tan((Taper * PI)/180) Else TanT = Tan((Taper * PI)/180) End If
'TaperMode: The Taper is anchored at EndX and StartZ 'Other anchor points don't seem to have much sense?
If test = true Then OpenTeachFile( "G78Test.tap")
Code "(G78 Test Code Dump)" End If
If StartX < EndX Then IDOD = -1 XClearance = XClearance * -1 Else IDOD = 1 End If
If StartZ > EndZ Then RightLeft = 1 Else RightLeft = -1 ZClearance = ZClearance * -1 End If
If Taper <> 0 Then
TaperZ = nFmt(Abs(StartX - EndX) / TanT ,4) If TaperZ < Abs(StartZ - EndZ) Then TaperX = Abs(StartX - EndX)
EndZ = StartZ - TaperZ * RightLeft Else TaperX = Abs(StartZ - EndZ) * TanT End If Else
PosX = EndX + SizingAmount * IDOD End If
code "G0 X" & StartX + XClearance & " Z" & StartZ + ZClearance code "F" & Feed
LastPassDepth = StartZ
'optimize roughing value Passes = (Abs(StartZ - EndZ) - SizingAmount) / RoughAmount If Fix(Passes) <> Passes Then Passes = Fix(Passes) + 1
RoughAmount = (Abs(StartZ - EndZ) - SizingAmount) / Passes End If
If Abs(StartZ - EndZ) > SizingAmount Then 'Skip Roughing if there's nothing to do For i=1 to Passes
PassDepth = StartZ - (RoughAmount * i * RightLeft) code "G0 X" & StartX + XClearance
code "G0 Z" & nFmt(PassDepth ,4)
If taper <> 0 Then
XCalc = EndX + IDOD * TanT * (Abs(StartZ - PassDepth) + SizingAmount) 'straight to XCalc
code "G01 X" & nFmt(XCalc ,4) 'taper to XEnd
PosX = EndX + IDOD * TanT * (Abs(StartZ - LastPassDepth) + SizingAmount)
code "X" & nFmt(PosX ,4) & " Z" & nFmt(LastPassDepth ,4) 'clearing
code "G0 X" & nFmt(PosX + XClearance ,4) & " Z" & nFmt(LastPassDepth + ZClearance ,4) Else
If EndX = 0 Then code "G1 X" & EndX
Code "G0 Z" & nFmt(PassDepth + ZClearance ,4) Else
code "G1 X" & nFmt(PosX ,4)
code "G1 Z" & nFmt(LastPassDepth ,4)
If Abs(LastPassDepth - PassDepth) < Abs(ZClearance) Then
code "G0 X" & nFmt(PosX + XClearance ,4) & " Z" & nFmt(PassDepth + ZClearance ,4)
Else code "G0 X" & nFmt(PosX + XClearance ,4)
End If End If
End If
LastPassDepth = PassDepth Next i
'sizing in Z code "F" & SizeFeed
If Taper = 0 And EndX <> 0 Then code "G0 Z" & StartZ + ZClearance code "G0 X" & EndX
code "G1 Z" & EndZ + SizingAmount * RightLeft
code "G0 X" & EndX + XClearance & " Z" & EndZ + SizingAmount * RightLeft + ZClearance End If
End If
'sizing in X
code "F" & SizeFeed code "G0 X" & StartX + XClearance code "G0 Z" & EndZ code "G1 X" & StartX
If taper = 0 Then
code "G1 X" & EndX code "G1 Z" & EndZ + SizingAmount * RightLeft
code "G0 X" & EndX + XClearance & " Z" & EndZ + ZClearance Else If Abs(StartX - EndX) > TaperX Then
code "G1 X" & nFmt(EndX + IDOD * TaperX ,4) End If code "G1 X" & EndX & " Z" & StartZ
code "G0 X" & EndX + XClearance & " Z" & StartZ + ZClearance End If
code "G0 X" & StartX + XClearance & " Z" & StartZ + ZClearance code "F" & Feed
If test = true Then CloseTeachFile()
End Sub Main
M1120.m1s
'X + Probe macro 'p Parameter is x start value
'probes 10 mm in x+ direction dim xsoll as double dim newx as double dim relmod as integer dim prevx as double dim feedold as double dim probedist as double dim probekorr as double relmod = 0
xsoll = param1() prevx = getoemdro(800) feedold = feedrate() probekorr = GetVar(501)
if getoemled(49) then relmod = 1 else
code "G91" 'relative Mode end if
if getparam(units) = 0 then 'units: mm code "F100" probedist = 10 else
'units: inch code "F4" probedist = 0.5 end if
code "G31 X" & probedist
while ismoving()'wait for probe command to finish
sleep(100) wend
if getoemdro(800) - prevx > probedist * 0.998 then message "Probe did not hit, aborting" code "M30" else
newx = xsoll - probekorr 'sollwert - korr probe dia setoemdro(800, newx) code "g0 x-" & probedist * 0.2 end if
if relmod = 0 then code "G90" 'return to absolute mode code "F" & nfmt(feedold,4)
M1121.m1s
'Y + Probe macro 'p Parameter is y start value
'probes 10 mm in y+ direction dim ysoll as double dim newy as double dim relmod as integer dim prevy as double dim feedold as double dim probedist as double dim probekorr as double relmod = 0
ysoll = param1() prevy = getoemdro(801) feedold = feedrate() probekorr = GetVar(501)
if getoemled(49) then relmod = 1 else
code "G91" 'relative Mode end if
if getparam(units) = 0 then 'units: mm code "F100" probedist = 10 else
'units: inch code "F4" probedist = 0.5 end if
code "G31 Y" & probedist
while ismoving()'wait for probe command to finish
sleep(100) wend
if getoemdro(801) - prevy > probedist * 0.998 then message "Probe did not hit, aborting" code "M30" else
newy = ysoll - probekorr'sollwert - korr probe dia setoemdro(801, newy) code "g0 y-" & probedist * 0.2 end if
if relmod = 0 then code "G90" 'return to absolute mode code "F" & nfmt(feedold,4)
M1122.m1s
'Z + Probe macro for Tool#98 'p Parameter is z start value
'probes 10 mm in z- direction dim zsoll as double dim relmod as integer dim prevz as double dim feedold as double dim probedist as double relmod = 0 zsoll = param1() prevz = getoemdro(802)
feedold = feedrate()
if getoemled(49) then relmod = 1 else code "G91" 'relative Mode end if
if getparam(units) = 0 then
'units: mm code "F100" probedist = 10 else 'units: inch code "F4" probedist = 0.5 end if
code "G31 Z-" & probedist
while ismoving() 'wait for probe command to finish sleep(100) wend
if prevz - getoemdro(802) > (probedist * 0.998 ) then
message "Probe did not hit, aborting" code "M30" else setoemdro(802, zsoll) code "g0 z" & (probedist * 0.2)
end if
if relmod = 0 then code "G90" 'return to absolute mode code "F" & nfmt(feedold,4)
M1123.m1s
'X - Probe macro 'p Parameter is x start value
'probes 10 mm in x- direction dim xsoll as double dim newx as double dim relmod as integer dim prevx as double dim feedold as double dim probedist as double dim probekorr as double relmod = 0
xsoll = param1() prevx = getoemdro(800) feedold = feedrate() probekorr = GetVar(501)
if getoemled(49) then relmod = 1 else
code "G91" 'relative Mode end if
if getparam(units) = 0 then 'units: mm code "F100" probedist = 10 else
'units: inch code "F4" probedist = 0.5 end if
code "G31 X-" & probedist
while ismoving()'wait for probe command to finish
sleep(100) wend
if prevx - getoemdro(800) > probedist * 0.998 then message "Probe did not hit, aborting" code "M30" else
newx = xsoll + probekorr 'sollwert - korr probe dia setoemdro(800, newx) code "g0 x" & probedist * 0.2 end if
if relmod = 0 then code "G90" 'return to absolute mode code "F" & nfmt(feedold,4)
M1124.m1s
'Y - Probe macro 'p Parameter is y start value
'probes 10 mm in y- direction dim ysoll as double dim newy as double dim relmod as integer dim prevy as double dim feedold as double dim probedist as double dim probekorr as double relmod = 0
ysoll = param1() prevy = getoemdro(801) feedold = feedrate() probekorr = GetVar(501)
if getoemled(49) then relmod = 1 else
code "G91" 'relative Mode end if
if getparam(units) = 0 then 'units: mm code "F100" probedist = 10 else
'units: inch code "F4" probedist = 0.5 end if
code "G31 Y-" & probedist
while ismoving() 'wait for probe command to finish sleep(100) wend
if prevy - getoemdro(801) > probedist * 0.998 then
message "Probe did not hit, aborting" code "M30" else newy = ysoll + probekorr'sollwert - korr probe dia setoemdro(801, newy)
code "g0 y" & probedist * 0.2 end if
if relmod = 0 then code "G90" 'return to absolute mode code "F" & nfmt(feedold,4)
|
|