' Mélyfúróciklus csökkenő méretű merülésekkel
Dim depth As Double,maxpeck As Double,strtp As Double
Dim mult As Double,minpeck As Double,actdepth As Double
Dim actpeck As Double,predepth As Double,swap As Double
Dim first as Boolean
Dim theend as Boolean
Dim safedist as Double
Dim G4_time as Double


Sub main()

safedist=1   'Visszajáráskor biztonsági távolság a furat alján
G4_time=1    'Várakozási idő kiemelés és a visszajárás között

	
  first=True
  theend=False
  strtp=GetVar(2000) 'Startpont
  depth=strtp-Abs(GetVar(2001)) 'Mélység a Startponttól
  maxpeck=Abs(Param1())  'Első (legnagyobb merülés)
  minpeck=Abs(Param2())  'Legkisebb merülés
  mult=Abs(Param3()/100) 'Merülés csökkentés szorzója

  If minpeck > maxpeck Then
    swap=minpeck
    minpeck=maxpeck
    maxpeck=swap
  End If

  Code "G1 Z"&strtp 'Startpontra áll, ha nincs ott

  If (strtp-maxpeck) > depth Then 'Első fúrásmélység számítása
    actdepth=(strtp-maxpeck)
  Else
    actdepth=depth
  End If

  predepth=strtp
  actpeck=maxpeck

  While Not(theend) 'Ismétel, amíg el nem éri a megadott mélységet
    Next_depth

    Wait_
    
    If Not(first) Then
      Code "G0 Z"&(predepth+safedist) 'Visszajárás ráhagyással
      Wait_
    End If

    first=False

    Code "G1 Z"&actdepth 'Fúrás

    Wait_

    Code "G0 Z"&strtp   'Kiemelés Start pontig #2000
    Code "G4 P"&G4_time 'Várakozás
  Wend

End Sub

Sub Next_depth 'Következő merülés mélységét számolja
  
  If Not(first) Then
    actpeck=actpeck*mult

    If actpeck<minpeck Then
      actpeck=minpeck
    End If
    predepth=actdepth
    actdepth=(actdepth-actpeck)
    If actdepth<depth Then
      actdepth=depth
      theend=True  'Mélység elérve
    End If
  End If

End Sub

Sub Wait_  'Vár, amíg  a mozgások leállnak

  While (IsMoving() And Not(IsActive(1003)) And Not(IsActive(1001)))
    Sleep(50)
  Wend

End Sub


  
