Hauptseite
Maschinen
Programmierung
Spur 5
Nurflügel
Multihulls
Wasserrakete
Fotografieren
Astronomie
Download
Links
Impressum
Datenschutz
Software

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

    M6Start.m1s
    tool = GetSelectedTool()
    SetCurrentTool( tool )

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:

    T0101
    M6

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:

    G43 H01
    T01
    M6

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)