'elle commence par mesurée l'outils  maître, puis vous pouvez définir maximum 8 d’outils si vous le souhaitez ou annuler à la fin.
    ' elle effectue 2 palpage pour chaque longueur d' outils pour auguementer la precision
          
           Sub Main()    
                                '**************** PREPARATION ************************
                     ' variable n°3 difference longueur outils maitre moins outils secondaire
           Code "M9"                       ' STOP L ARROSAGE
           DoSpinStop()                    ' STOP LA SPINDLE  
           Sleep(10)                     ' donne le temps de charge à fond
           MaxToolNum =  8       'Maximum d outils  pour le rack
           ToolDown   = -200     'Z bas position pour prendre ou relacher les outils dans le rack
           ToolUp     = -50      'Z haut de secu pour les deplacement au dessus table et rack
           Yprepa     =  1000    'Y position pour la descente du porte outils  permettant encliquement dans les rainures des berceaux 
           Ypos       =  1176.33 'Y position à fond de berceau  pour prendre ou relacher l outils
           XpalF      =  141.1   'X position palpeur fixe en X
           YpalF      =  1165.8  'Y  position palpeur fixe en Y
           NewTool = Tnum               ' le numero du nouvel outils = le n° d outils  dans la table d 'outils
           OldTool = GetOEMDRO (824)   'enregistre le numero d 'outils dans la broche  
           Tnum= 1  
           tool = GetSelectedTool()
           NewTool = tool 
          
          ActivateSignal(OUTPUT5)           'remonte les  balais anti-projection en  haut
           
         MsgBox(" *** la broche doit etre VIDE  Pas d'outils ***")
         MachMsg ("Prêt à exécuter le réglage de L'OUTILS MAITRE N°1 BROCHE VIDE SANS OUTILS < tool information =0> ET  Ok", "OUTILS MAITRE", 1)
         If Ret= 2 Or  OldTool<>0  Then  End    'si Ret=2 ou si Tool differend de zero alors fin du programme                                
           
            '************************************* REM VA CHERCHER L OUTILS N°1 MAITRE ************************
          NewTool = 1                      
          Code "G0G53 Z" & ToolUp                  'Z haut de secu pour les deplacement au dessus table et rack
 
       Call MovePos(NewTool)                ' appel MovePos(NewTool)coordonnées Machine des outils
          While IsMoving()
          Wend
          Code "G0G53 Z" & ToolUp                  'Z haut de secu pour les deplacement au dessus table et rack
          Code "G0G53 Y" & Ypos                    'Y position à fond de berceau  pour prendre ou relacher l outils
          ActivateSignal(OUTPUT6)                'active la sortie 5 ( machoires) pour relacher l'outils
          Sleep(4)                              '**tempo 10 s    secondes pour relacher  l'outils + jet d air chasse copeaux       
          Code "G53 Z" & ToolDown                'Z bas position pour prendre ou relacher les outils dans le rack
          Code "G4 P2.75"                        ' temporisation 2.75 seconde
          While IsMoving()                       ' tant que ça bouge
          Wend
          DeactivateSignal(Output6)               'desactive la sortie 5 de la carte en plus ou en moins selon la config des pins
          Code "G4 P1.50"                        'temporisation 2secondes attente fermeture des machoires sortie 5
          While IsMoving()                       'tant que ça bouge
          Wend
          Code "G53 Y" & Yprepa                  'Y position pour la descente du porte outils  permettant encliquement dans les rainures des berceaux 
          Code "G4 P1.75"                        '** temporisation 1.75 seconde
          Code "G0G53 Z" & ToolUp                  'Z haut de secu pour les deplacement au dessus table et rack
          Code "G0G53 X"&XpalF &"Y"&YpalF        'va audessus du palpeur fixe
          While IsMoving()                       ' tant que ça bouge
          Wend
          SetOEMDRO (824, NewTool)
          Sleep(1)   
                         
          '***************************************** Rem MESURE DE L OUTILS N°1 MAITRE ************************
        
       Code "G31 Z-150    f 350."           ' descente sur le palpeur jusqu'a -150 avance f=350
       While IsMoving ( )                   'tant que ça bouge
       Sleep(3)                            ' temporisation 10s
       Wend
       PRP= GetOEMDRO(802)+10 
       Code "G0 Z" & PRP                    ' remonte de10mm au dessus de la sonde
       Code "G31 Z-150. f 150."             ' descente sur le palpeur jusqu'a -150 avance f=150
       While IsMoving ( )                   'tant que ça bouge
       Sleep(3)                            ' temporisation 10s
       Wend
         SetDRO(2,0.00)                   'Code "G92 Z0.00"***passe z à o.oo en sans mouvement  en relatif origine des mesures de longueur        
        Tlo = GetDro(2)                     '  valeur de z   Tlo = GetDro(2)                                           '        
       SetToolParam(Tnum,2,Tlo)             ' ecrit la longueur z de l outils n°1 dans la table d outils
       Sleep(4)                             'tempo 3 s pour ecriture                                     
       Code "G00 G53 Z" & ToolUp             ' va a grande vitesse en Z secu coordonnées Machine 
       Code"f500"
          
                        N1: '************************ ROUTINE   nom de la routine N1    *********************************************
                                   '************* PREPARATION N1 **********
              OldTool = GetOEMDRO(824)         
              NewTool=   NewTool +1 
              Tnum = NewTool 
  
    Ret = MachMsg ("Etes-vous prêt pour le réglage de l’outil suivant?", "OUTILS SECONDAIRES",1)
    
    If Ret=2 Or NewTool>8 Then End                 ' si Ret=2 reponse NON=2 alors fin du programme ou outils superieur à 8 alors fin
   
   Call MovePos(OldTool)              '**** appel MovePos(OldTool) coordonnées Machine des outils
        While IsMoving()              ' tant que ça bouge
        Wend                          'fin du mouvement
        Code "G0G53 Y" & Yprepa         'Yprepa  position pour la descente du porte outils  permettant encliquement dans les rainures des berceaux
        Code "G53 Z" & ToolDown       'va à Z position pour  relacher les outils dans le rack
        Code "G53 Y"& Ypos            'va à Y position à fond de berceau  pour prendre ou relacher l outils
        Sleep(1)                      ' temporisation 1. seconde
        While IsMoving()
        Wend       
        ActivateSignal(OUTPUT6)        'active la sortie 6 machoires OUVERTES pour relacher l'outils
        Code "G4 P2.75"                ' temporisation sans mouvement 2.75 secondes pour relacher  l'outils + jet d air chasse copeaux               
        Code "G0G53 Z" & ToolUp          ' monte   en Z secu coordonnées Machine 
     Call MovePos(NewTool)             '****appel MovePos(NewTool)coordonnées Machine des outils
          While IsMoving()
          Wend
          Code "G0G53 Z" & ToolUp                  'Z haut de secu pour les deplacement au dessus table et rack
          Code "G0G53 Y" & Ypos                    'Y position à fond de berceau  pour prendre ou relacher l outils
          Code "G53 Z" & ToolDown                'Z bas position pour prendre ou relacher les outils dans le rack
          Code "G4 P2.75"                        ' temporisation 2.75 seconde
          While IsMoving()                       ' tant que ça bouge
          Wend
         DeactivateSignal(Output6)               'desactive la sortie 5 MACHOIRES FERMEES
          Code "G4 P 0.70"                        'temporisation 2secondes attente fermeture des machoires sortie 6
          While IsMoving()                       'tant que ça bouge
          Wend
          Code "G53 Y" & Yprepa                  'Y position pour la descente du porte outils  permettant encliquement dans les rainures des berceaux 
          Code "G0G53 Z" & ToolUp                  'Z haut de secu pour les deplacement au dessus table et rack
          Code "G0G53 X"&XpalF &"Y"&YpalF        'va audessus du palpeur fixe
          While IsMoving()                       ' tant que ça bouge
          Wend
         SetOEMDRO (824, NewTool)                 'ecrit le numero du nouvel  outils dans tool information dro
         Sleep(1)   
       
                   '********************REM MESURE DES OUTILS SECONDAIRES  double palpage = prescision ****************************
     Code "G31 Z-130 f350."         ' descente sur le palpeur jusqu'a -150 avance f=350
     While IsMoving()               'alors que ça bouge
     Sleep(4)                      'tempo 10 s
     Wend
     PRP= GetOEMDRO(802)+10         'PRP=  Z +10mm
     Code "G0 Z" & PRP              'remonte de 10mm
     Code "G31 Z-130 f150."         'va palper jusqu'a Z-150mm vitesse 150mm/M
     While IsMoving()               'alors que ça bouge
     Sleep(4)                       ' tempo 10s
     Wend
      Tlo =GetDro(2)                'Tlo=GetDro(2) lit la valeur de z au contact sur la sonde  
       SetToolParam(Tnum,2,Tlo)       ' ecrit la diference de longueur de l'outils N°"" par rapport à la longueur de l outils maitre 
    While Ismoving()                'alors que ça bouge
    Sleep(5)                       'tempo 10 s
    Wend
    Code"f1000"                       ' on regle l avance icipour les deplacements qui n ont pas de G0
         GoTo N1                     ' retourne au debut de la routine  N1
    
      End Sub
       Sub MovePos(ByVal ToolNumber As Integer)
       Select Case ToolNumber
                                           ' COORDONNEES  X ,Y ET Yprepa DES OUTILS SELON LEUR Numero°
       Case Is = 1               ' VALEUR X ET Y de l outils N°1 sur le rack
         Xpos = 430.17
         Yprepa = 1000          ' EN COORDONNEES MACHINE
         YPos = 1176.33            
       Case Is = 2            
         Xpos = 543.01
          Yprepa =1000            
         YPos = 1176.33
       Case Is = 3
         Xpos = 655.68
         Yprepa = 1000   
         YPos = 1176.33   
       Case Is = 4
         Xpos = 771.82
         Yprepa = 1000   
         YPos =1176.33    
       Case Is = 5
         Xpos = 885.60
         Yprepa = 1000   
         YPos = 1176.33   
       Case Is = 6
         Xpos = 998.28
         Yprepa = 1000   
         YPos = 1176.33   
       Case Is = 7
         Xpos = 1115.72
         Yprepa = 1000
         YPos = 1176.33   
       Case Is = 8
         Xpos = 1227.27
         Yprepa = 1000   
         YPos  =1176.33
         End Select
         
        Code "G53 Y" & Yprepa  ' position des Y prepa pour les retour d outils au rack 
        Code "G53 X" & XPos    'position des Xpos pour les retour d outils au rack
        While IsMoving()
        Wend                                        
                                   
        End Sub
        
        Main