Hello Guest it is March 19, 2024, 01:07:47 AM

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - TPS

441
General Mach Discussion / Re: MPG issue
« on: March 29, 2021, 01:17:22 AM »
do a simple test first.
open VB Scriperwindow

Code: [Select]
  DoOEMButton(192)
  DoOEMButton(193)
  DoOEMButton(194)


open the Manual Tab
run through code with the >|| button and check for changing the step value 

442
VB and the development of wizards / Re: macro correction help
« on: March 28, 2021, 08:52:25 AM »
that would be the same just ab shorter

Code: [Select]
Tasto = MsgBox("ZERO UTENSILE ALTO/BASSO" ,1+64, "CONFERMARE")
If Tasto <> 1 Then
    Exit Sub
End If

try to use tab's to structure your code, it easieer to read. ;)

443
Screen designer tips and tutorials / Re: Editable text for label
« on: March 27, 2021, 03:03:48 AM »
you can only do it by placing a tranparent button above the Label and run a script to read, Change (by using a Dialog) and
write back the entered text to the Label

Code: [Select]
text = GetUserLabel(25)

Begin Dialog EnterText 420,120,160,96,"Enter Text"
   OKButton 30,68,40,14
   CancelButton 90,68,40,14
   TextBox 8, 26, 146, 18, .FText
End Dialog

  Dim Dlg1 As EnterText
  Dlg1.FText = text
  Button = Dialog (Dlg1)
  If Button = 0 Then Exit Sub

SetUserLabel(25, text)
something like this, not tested, should work.

444
Mach3 and G-Rex / Re: Reviving old table that won't fire
« on: March 25, 2021, 02:25:50 AM »
yes Looks like pin1 is used.
enter a M3 in MDI line and go to diagnostic page.
Output1 led should come on.
enter M5 in MDI and output1 should go off.
by doing this you should hear relay clicking.
you can also test with multimeter the relay contact.
if this is working, i think something is wrong with the cable.
powermax Manual says pin 3 and 4 are for external start

445
Mach3 and G-Rex / Re: Reviving old table that won't fire
« on: March 24, 2021, 10:39:36 AM »
first interesting thing would be how the relay board is connected to the breakout board?
strange is that your enable1-6 Outputs are all enabled and assigned to the same pin's
than the Motor Outputs.
a screenshot of Ports&pins -> spindle Setup would also  be helpfull.


446
VB and the development of wizards / Re: macro correction help
« on: March 24, 2021, 09:11:29 AM »
next try
Code: [Select]
Global VarUnits
Global VarMaxDistance
Global VarFeedRate
Global VarStandOff
Global VarTouchPlate
Global VarSecondPlate
Global VarThirdPlate
Global VarDelayInSec
Global VarInitialFeedRate
Global VarInitialLinearMode
Global VarInitialDistMode   
Global VarInitialInhibit
Global VarInitialZScale
Global VarInitialFRO


Sub Main()
Speak ("selezionare zero     o     cambio UTENSILE") 'Avviso Vocale
Begin Dialog SelectCentering 420,120,160,96,"MACRO UTENSILE"
OKButton 30,68,40,14
CancelButton 90,68,40,14
GroupBox 30,5,100,52,"ZERO / CAMBIO UTENSILE",.GroupBox1
OptionGroup .OptionGroup1
OptionButton 46,24,80,8," ZERO UTENSILE",.OptionButton1
OptionButton 46,40,80,8," CAMBIO UTENSILE"  ,.OptionButton2
End Dialog
Dim Dlg1 As SelectCentering
Button = Dialog (Dlg1)
If Button = 0 Then Exit Sub
Selected  = Dlg1.OptionGroup1
'laser is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 0 Then
'Tool Height Setting Macro - JLH v1.1 - 4 March 2013
'Questa versione ha un approccio a 2 fasi, veloce per la velocita e lenta per la precisione.
   
Speak ("confermare ZERO UTENSILE") 'Avviso Vocal
        Sleep (1000)
        Begin Dialog ButtonSample 250,200,120,60," "
OKButton 12,20,40,14
CancelButton 68,20,40,14
End Dialog

Dim Dlg2 As ButtonSample
Button = Dialog (Dlg2)
If Button = 0 Then
MsgBox "ZERO UTENSILE CANCELLATO"
Speak (" ZERO   UTENSILE     CANCELLATO") 'Avviso Vocale
Exit Sub
End If
Message "************  INIZIO ZERO UTENSILE ************"


'----- USER VARIABLES FOR DISTANCES, FEED RATES, TOUCH PLATES, OPTIONS ---------------------------------------
If GetParam("Units") = 0 Then
'* METRIC VALUES *
VarUnits = "  MM"
VarMaxDistance = -25.4      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 127      'MM/MIN DOWN FEEDRATE
VarStandOff = 1.27      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 20.066      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.038      'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
VarThirdPlate = 0.012      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
Else
'* SAE VALUES *
VarUnits = " INCH"
VarMaxDistance = -1.0      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 5      'INCH/MIN DOWN FEEDRATE
VarStandOff = 0.05      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 0.79      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.0015   'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG 
VarThirdPlate = 0.0005      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
End If

VarRunTheChoice = 1      'RUN PLATE CHOICE DIALOG?  0=NO  1=YES

VarDelayInSec = 0      'DEFAULT SECONDS TO DELAY MOTION
VarBeepOrSpeak = 2      'COUNTDOWN AUDIO: 0=NONE 1=BEEP 2=SPEAK
VarSecOfAudio = 5      'COUNTDOWN SECOND AT WHICH AUDIO BEGINS

VarCompleteAudio = 3      'END SIGNAL: 0=NONE 1=BEEP 2=SPEAK 3=WAV_AUDIO_FILE
VarWavAudioFile = "C:\MACH3\ToolCompleteSND1.wav" 'WAV_AUDIO_FILE LOCATION

'*************************************************************************************************************
'*************************************************************************************************************

'----- GET INITIAL ENVIRONMENT SETTINGS FOR LATER REINSTATEMENT ----------------------------------------------
VarInitialLinearMode = GetOemDRO(819)        'LINEAR MODE  G00/G01
VarInitialDistMode = GetOemLED(48)           'DISTANCE MODE G90/G91   
VarInitialFeedRate = GetOemDRO(818)          'FEEDRATE
VarInitialInhibit = GetParam("ZInhibitOn")   'Z INHIBIT STATUS  OFF/ON
VarInitialZScale = GetParam("ZScale")        'Z SCALE VALUE
VarInitialFRO = GetOemDRO(821)           'FEEDRATE OVERRIDE PERCENTAGE
Message ""                      'CLEAR STATUS LINE TEXT


'----- CHECK DIGITIZE STATE; 0=CLEAR 1=ACTIVE ----------------------------------------------------------------
If GetOemLED (825) <> 0 Then
RET = MachMsg("Digitize Status Not Clear. Check Probe/Connections And Try Again!","*** ERROR! ***",0)
End      'END SCRIPT
End If


'----- CHECK IF USER WANTS TO RUN PLATE CHOICE DIALOG --------------------------------------------------------
If VarRunTheChoice = 1 Then RunTheThing 'RUN SUBROUTINE 


'----- ACTIVATE TIME DELAY IF USED ---------------------------------------------------------------------------
If VarDelayInSec <> 0 Then
Do Until VarDelayInSec = 0      'LOOP UNTIL SECONDS = ZERO
Message VarDelayInSec         'DISPLAY SECONDS VALUE IN STATUS LINE
If VarDelayInSec < VarSecOfAudio + 1 Then
Select Case VarBeepOrSpeak   
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak(VarDelayInSec)   
End Select
End If   
Sleep 1000      'PAUSE 1 SEC.
VarDelayInSec = VarDelayInSec - 1   'REDUCE SECONDS BY 1 AFTER EACH LOOP
Loop
End If

'----- PREPARE FOR MOVE ----- MOVE PROBE DOWN TOWARD CONTACT -------------------------------------------------
SetParam("ZInhibitOn",0)   'TURN Z INHIBIT OFF
SetParam("ZScale",1.0)      'SET Z SCALE TO 1.0
DoOemButton(1014)      'CANCEL FEED OVERRIDE
SetOemDRO(802,0)        'ZERO Z AXIS DRO
Sleep 200         'DELAY TO ALLOW DRO TO CHANGE
Message "Auto Tool Zero Running..."
Code "G90 G31 Z" &VarMaxDistance &"F" &VarFeedRate   'MOVE DOWN @ FEEDRATE
While IsMoving()      'WAIT UNTIL MOVE IS COMPLETE BEFORE PROCEEDING
Wend


'----- GET Z CONTACT POSITION AND TEST FOR MAX TRAVEL ------ MOVE TO STANDOFF ------ UPDATE Z AXIS DRO -------
If GetVar(2002) <= VarMaxDistance + .001 Then   
RET = MachMsg("Maximum Travel Reached. Reposition Z Axis Closer To Touch Plate And Try Again!","*** OOPS! ***",0)
Message ""
RETURNSTATE    'CALL REINSTATE SUBROUTINE
End      'END SCRIPT
Else
Beep
Code "G90 G0 Z" &GetVar(2002)   'MOVE TO CONTACT POINT DUE TO OVERRUN
While IsMoving()
Wend
SetOemDRO(802,0)      'ZERO Z AXIS DRO
Sleep 200
Code "G90 G0 Z" &VarStandOff   'MOVE TO STANDOFF DISTANCE
While IsMoving ()
Wend
SetOemDRO(802, VarStandOff + VarTouchPlate)     'SET Z DRO (STANDOFF + PLATE THICKNESS)
Sleep 200
Select Case VarCompleteAudio
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak("Tool Zero Complete.")
Case 3 'OPTION WAV_AUDIO_FILE
PlayWave(VarWavAudioFile)
End Select
Message "Auto Tool Zero Complete! ***Remove Touch Plate***"
End If
RETURNSTATE     'CALL REINSTATE SUBROUTINE

End If

'web is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 1 Then
       Rem CAMBIO UTENSILE AUTOMATICO
Speak ("confermare cambio utensile automatico") 'Avviso Vocale
Sleep (1000) ' pausa di 1 secondi
Dim Dlg3 As ButtonSample
Button = Dialog (Dlg3)
If Button = 0 Then
MsgBox "CAMBIO UTENSILE AUTOMATICO  CANCELLATO"
Speak (" CAMBIO UTENSILE   AUTOMATICO      CANCELLATO") 'Avviso Vocale
Exit Sub
End If
If Not GetLed (7) Then         ' è referenziato X
vxled = 1
End If
   
If Not GetLed (8) Then         ' è referenziato Y
vyled = 1
End If
If Not GetLed (9) Then         ' è referenziato Z
vzled = 1
End If
Tled = vxled + vyled + vzled
If Tled = 3 Then         ' se non sono referenziati X, Y e Z esco
' parametri lavorazione
ToolPathOnOff = 132         ' mi carico la definizione del tasto tool path
xzero = GetDRO (30)         ' memorizzo la posizione iniziale ASSOLUTA di cambio utensile
yzero = GetDRO (31)
zzero = GetDRO (32)
xpos = GetDRO (0)         ' memorizzo la posizione iniziale RELATIVA di cambio utensile
ypos = GetDRO (1)
zpos = GetDRO (2)
fpos = GetDRO (18)         ' memorizzo il feedrate iniziale
' variabili del programma
fmax = 500            ' imposto il feedrate massimo
fmin = 50            ' imposto il feedrate per la palpata
zavv = -40            ' distanza rapida di avvicinamento al palpatore
zmin = -150            ' profondità oltre il palpatore
xcut = 0            ' posizione X per cambio utensile
ycut = 0            ' posizione Y per cambio utensile
xtool = GetUserDRO (1200)      ' posizione X del palpatore (Settings -> Tool Change Location)
ytool = GetUserDRO (1201)      ' posizione Y del palpatore
ztool = GetUserDRO (1202)      ' posizione Z del palpatore
' inizio programma
Call DoOEMButton (ToolPathOnOff)   ' disabilito il tool path
code "G0 F" & fmax         ' porto il feedrate al valore massimo
Code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento (fino a zavv)
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
   
zuno = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zsu = zuno + 2
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend
If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zdue = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zorig = (zuno + (zdue)) / 2
code "G0 F" & fmax         ' riporto il feedrate al massimo
code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
code "G1 G53 X" & xcut & "Y" & ycut   ' vado in una posizione comoda per il cambio utensile
While IsMoving()
Wend
Speak ("ora si puo' cambiare la punta") 'Avviso Vocale
MsgBox ("ORA SI PUO' SOSTITUIRE LA PUNTA")

Speak ("attenzione      e' stata sostituita la punta") 'Avviso Vocale
Response = MsgBox ("E' STATA SOSTITUITA LA PUNTA?", 4 , "ATTENZIONE")
If (Response = 6) Then
i = 99
Else
Speak ("ATTENZIONE , LA PUNTA NON E' STATA SOSTITUITA, RIPRENDO IL LAVORO CON LA PUNTA INIZIALE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA RIPRENDO IL LAVORO CON LA PUNTA INIZIALE")
End If

If i <> 99 Then               ' non faccio nulla
code "G1 G53 X" & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G1 X" & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "G1 G53 Z" & zzero         ' riporto Z al valore zero pezzo
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
Speak ("ATTENZIONE , CAMBIO UTENSILE NON EFFETTUATO , SI PUO' RIPRENDERE LA LAVORAZIONE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA")
'DoSpinCW()            ' riaccendo il motore M3 e riprendo il lavoro da dove l'avevo lasciato
Else

code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zuno = GetVar (2002)         ' memorizzo il valore di Z della nuova punta
zsu = zuno +4
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend

If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della nuova punta
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zdue = GetVar (2002)         ' memorizzo il valore di Z della nuova punta

znew = (zuno + (zdue)) / 2
   
code "G0 F" & fmax      ' riporto il feedrate al massimo

code "G1 G53 Z0"      ' ritorno Z ZERO macchina
While IsMoving()
Wend

code "G0 G53 X " & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G0 X " & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
zdif = zorig - (znew)         ' controllo se l'utensile è più corto o piu lungo
code "G1 G53 Z" & zzero-(zdif)      ' riporto Z al valore zero pezzo con la differenza utensile
While IsMoving()
Wend
Call SetDro (2,0)         ' porto contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza (inizio programma)
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
   
Speak ("CAMBIO UTENSILE EFFETTUATO ,   SI PUO' RIPRENDERE LA LAVORAZIONE ,      RIMUOVERE PIASTRA") 'Avviso Vocale
   
MsgBox ("RIMUOVERE PIASTRA E PREMERE IL TASTO LAVORAZIONE")
Message "************ CAMBIO UTENSILE EFFETTUATO ************"
End If

Else
speak ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina" )
MsgBox ("PER CAMBIARE LA PUNTA BISOGNAVA REFERENZIARE LA MACCHINA")
End If
Call DoOEMButton (ToolPathOnOff)   ' abilito il tool path

End If
End Sub

'******************************************* SUBROUTINES BELOW ***********************************************



'----- SUBROUTINE TO RETURN INITIAL SETTINGS -----------------------------------------------------------------
Sub RETURNSTATE
 'REINSTATE INITIAL FEEDRATE
 Code "F" &VarInitialFeedRate
 
 'REINSTATE DISTANCE MODE  0=G91  -1=G90
 If VarInitialDistMode = 0 Then Code "G91" Else Code "G90"

 'REINSTATE LINEAR MODE  0=G00  1=G01
 If VarInitialLinearMode = 0 Then Code "G00" Else Code "G01"

 'REINSTATE Z INHIBIT STATUS 0=OFF 1=ON
 If VarInitialInhibit = 1 Then SetParam("ZInhibitOn",1)
 
 'SET Z SCALE TO INITIAL VALUE
 If VarInitialZScale <> 1.0 Then SetParam("ZScale",VarInitialZScale)

 'SET FEEDRATE OVERRIDE TO INITIAL VALUE
 If VarInitialFRO <> 100 Then SetOemDRO(821,VarInitialFRO)
End Sub


'----- DIALOG SUBROUTINE FOR TOUCH PLATE CHOICE AND TIME DELAY -----------------------------------------------
Sub RunTheThing     
Dim PlateList$ (2)   'DECLARE 3 ITEM ARRAY FOR PLATE SIZE LIST
If GetParam("Units") = 0 Then
'MM FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"00.000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"00.000")   'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"00.000")     'FILL ARRAY 3
Else
'INCH FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"0.0000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"0.0000")     'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"0.0000")     'FILL ARRAY 3
End If

Dim UnitList$ (0)   'DECLARE 1 ITEM ARRAY FOR UNIT LISTBOX
UnitList (0) = VarUnits     'FILL ARRAY 1

'SETUP DIALOG CONTROLS   
Begin Dialog PlateChoice 110,68,"Touch Plate"
ListBox 15,20,35,30, PlateList$(),.Lstbox2
ListBox 64,20,25,10, UnitList$(),.Listbox1
GroupBox 8,8,95,45,"Choose Plate Thickness",.GroupBox1
OKButton 57,34,37,12
Text 13,55,100,15, "Delay"
TextBox 37,55,30,10, .SecText
        Text 70,55,30,15, "Seconds"         
End Dialog

Dim Dlg1 As PlateChoice
Dlg1.SecText = VarDelayInSec   'FILL SECONDS TEXTBOX WITH DEFAULT VALUE

Button = Dialog (Dlg1)   'SHOW DIALOG AND WAIT FOR BUTTON REPLY

If Button = 0 Then   'IF CLOSE BUTTON
Message "Auto Tool Zero CANCELED"
End      'END SCRIPT
End If   

'CHECK THAT SECONDS WAS ENTERED NUMERIC
If IsNumeric(Dlg1.SecText) = True Then
        VarDelayInSec = Int(Dlg1.SecText)
Else
RET = MachMsg("*****  SECONDS MUST BE ENTERED IN NUMERIC FORMAT! *****", _
"  Substance Abuse Is Not Recommended  ",0)
RunTheThing   'RESTART SUB
End If
 
'SET PLATE VARIABLE BASED ON PLATE CHOICE
PlateNum = Dlg1.Lstbox2
Select Case PlateNum
      Case 0 'PRIMARY PLATE
        'WILL USE PRIMARY/DEFAULT THICKNESS
      Case 1 'SECONDARY PLATE
         VarTouchPlate = VarSecondPlate
      Case 2 'TERTIARY PLATE
        VarTouchPlate = VarThirdPlate
End Select
End Sub

447
VB and the development of wizards / Re: macro correction help
« on: March 24, 2021, 08:24:53 AM »
No characters found in reading real value , Block = F
means that a g-code command is excecuted where a F but no value is used.

only way to find is using the VB Scripter window and >||

it is running through here.

448
VB and the development of wizards / Re: macro correction help
« on: March 24, 2021, 07:18:48 AM »
delay fixed, but think it will not help.
can you post c:\mach3\lasterror.txt?
Code: [Select]
Global VarUnits
Global VarMaxDistance
Global VarFeedRate
Global VarStandOff
Global VarTouchPlate
Global VarSecondPlate
Global VarThirdPlate
Global VarDelayInSec

Sub Main()
Speak ("selezionare zero     o     cambio UTENSILE") 'Avviso Vocale
Begin Dialog SelectCentering 420,120,160,96,"MACRO UTENSILE"
OKButton 30,68,40,14
CancelButton 90,68,40,14
GroupBox 30,5,100,52,"ZERO / CAMBIO UTENSILE",.GroupBox1
OptionGroup .OptionGroup1
OptionButton 46,24,80,8," ZERO UTENSILE",.OptionButton1
OptionButton 46,40,80,8," CAMBIO UTENSILE"  ,.OptionButton2
End Dialog
Dim Dlg1 As SelectCentering
Button = Dialog (Dlg1)
If Button = 0 Then Exit Sub
Selected  = Dlg1.OptionGroup1
'laser is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 0 Then
'Tool Height Setting Macro - JLH v1.1 - 4 March 2013
'Questa versione ha un approccio a 2 fasi, veloce per la velocita e lenta per la precisione.
   
Speak ("confermare ZERO UTENSILE") 'Avviso Vocal
        Sleep (1000)
        Begin Dialog ButtonSample 250,200,120,60," "
OKButton 12,20,40,14
CancelButton 68,20,40,14
End Dialog

Dim Dlg2 As ButtonSample
Button = Dialog (Dlg2)
If Button = 0 Then
MsgBox "ZERO UTENSILE CANCELLATO"
Speak (" ZERO   UTENSILE     CANCELLATO") 'Avviso Vocale
Exit Sub
End If
Message "************  INIZIO ZERO UTENSILE ************"


'----- USER VARIABLES FOR DISTANCES, FEED RATES, TOUCH PLATES, OPTIONS ---------------------------------------
If GetParam("Units") = 0 Then
'* METRIC VALUES *
VarUnits = "  MM"
VarMaxDistance = -25.4      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 127      'MM/MIN DOWN FEEDRATE
VarStandOff = 1.27      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 20.066      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.038      'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
VarThirdPlate = 0.012      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
Else
'* SAE VALUES *
VarUnits = " INCH"
VarMaxDistance = -1.0      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 5      'INCH/MIN DOWN FEEDRATE
VarStandOff = 0.05      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 0.79      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.0015   'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG 
VarThirdPlate = 0.0005      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
End If

VarRunTheChoice = 1      'RUN PLATE CHOICE DIALOG?  0=NO  1=YES

VarDelayInSec = 0      'DEFAULT SECONDS TO DELAY MOTION
VarBeepOrSpeak = 2      'COUNTDOWN AUDIO: 0=NONE 1=BEEP 2=SPEAK
VarSecOfAudio = 5      'COUNTDOWN SECOND AT WHICH AUDIO BEGINS

VarCompleteAudio = 3      'END SIGNAL: 0=NONE 1=BEEP 2=SPEAK 3=WAV_AUDIO_FILE
VarWavAudioFile = "C:\MACH3\ToolCompleteSND1.wav" 'WAV_AUDIO_FILE LOCATION

'*************************************************************************************************************
'*************************************************************************************************************

'----- GET INITIAL ENVIRONMENT SETTINGS FOR LATER REINSTATEMENT ----------------------------------------------
VarInitialLinearMode = GetOemDRO(819)        'LINEAR MODE  G00/G01
VarInitialDistMode = GetOemLED(48)           'DISTANCE MODE G90/G91   
VarInitialFeedRate = GetOemDRO(818)          'FEEDRATE
VarInitialInhibit = GetParam("ZInhibitOn")   'Z INHIBIT STATUS  OFF/ON
VarInitialZScale = GetParam("ZScale")        'Z SCALE VALUE
VarInitialFRO = GetOemDRO(821)           'FEEDRATE OVERRIDE PERCENTAGE
Message ""                      'CLEAR STATUS LINE TEXT


'----- CHECK DIGITIZE STATE; 0=CLEAR 1=ACTIVE ----------------------------------------------------------------
If GetOemLED (825) <> 0 Then
RET = MachMsg("Digitize Status Not Clear. Check Probe/Connections And Try Again!","*** ERROR! ***",0)
End      'END SCRIPT
End If


'----- CHECK IF USER WANTS TO RUN PLATE CHOICE DIALOG --------------------------------------------------------
If VarRunTheChoice = 1 Then RunTheThing 'RUN SUBROUTINE 


'----- ACTIVATE TIME DELAY IF USED ---------------------------------------------------------------------------
If VarDelayInSec <> 0 Then
Do Until VarDelayInSec = 0      'LOOP UNTIL SECONDS = ZERO
Message VarDelayInSec         'DISPLAY SECONDS VALUE IN STATUS LINE
If VarDelayInSec < VarSecOfAudio + 1 Then
Select Case VarBeepOrSpeak   
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak(VarDelayInSec)   
End Select
End If   
Sleep 1000      'PAUSE 1 SEC.
VarDelayInSec = VarDelayInSec - 1   'REDUCE SECONDS BY 1 AFTER EACH LOOP
Loop
End If

'----- PREPARE FOR MOVE ----- MOVE PROBE DOWN TOWARD CONTACT -------------------------------------------------
SetParam("ZInhibitOn",0)   'TURN Z INHIBIT OFF
SetParam("ZScale",1.0)      'SET Z SCALE TO 1.0
DoOemButton(1014)      'CANCEL FEED OVERRIDE
SetOemDRO(802,0)        'ZERO Z AXIS DRO
Sleep 200         'DELAY TO ALLOW DRO TO CHANGE
Message "Auto Tool Zero Running..."
Code "G90 G31 Z" &VarMaxDistance &"F" &VarFeedRate   'MOVE DOWN @ FEEDRATE
While IsMoving()      'WAIT UNTIL MOVE IS COMPLETE BEFORE PROCEEDING
Wend


'----- GET Z CONTACT POSITION AND TEST FOR MAX TRAVEL ------ MOVE TO STANDOFF ------ UPDATE Z AXIS DRO -------
If GetVar(2002) <= VarMaxDistance + .001 Then   
RET = MachMsg("Maximum Travel Reached. Reposition Z Axis Closer To Touch Plate And Try Again!","*** OOPS! ***",0)
Message ""
RETURNSTATE    'CALL REINSTATE SUBROUTINE
End      'END SCRIPT
Else
Beep
Code "G90 G0 Z" &GetVar(2002)   'MOVE TO CONTACT POINT DUE TO OVERRUN
While IsMoving()
Wend
SetOemDRO(802,0)      'ZERO Z AXIS DRO
Sleep 200
Code "G90 G0 Z" &VarStandOff   'MOVE TO STANDOFF DISTANCE
While IsMoving ()
Wend
SetOemDRO(802, VarStandOff + VarTouchPlate)     'SET Z DRO (STANDOFF + PLATE THICKNESS)
Sleep 200
Select Case VarCompleteAudio
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak("Tool Zero Complete.")
Case 3 'OPTION WAV_AUDIO_FILE
PlayWave(VarWavAudioFile)
End Select
Message "Auto Tool Zero Complete! ***Remove Touch Plate***"
End If
RETURNSTATE     'CALL REINSTATE SUBROUTINE

End If

'web is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 1 Then
       Rem CAMBIO UTENSILE AUTOMATICO
Speak ("confermare cambio utensile automatico") 'Avviso Vocale
Sleep (1000) ' pausa di 1 secondi
Dim Dlg3 As ButtonSample
Button = Dialog (Dlg3)
If Button = 0 Then
MsgBox "CAMBIO UTENSILE AUTOMATICO  CANCELLATO"
Speak (" CAMBIO UTENSILE   AUTOMATICO      CANCELLATO") 'Avviso Vocale
Exit Sub
End If
If Not GetLed (7) Then         ' è referenziato X
vxled = 1
End If
   
If Not GetLed (8) Then         ' è referenziato Y
vyled = 1
End If
If Not GetLed (9) Then         ' è referenziato Z
vzled = 1
End If
Tled = vxled + vyled + vzled
If Tled = 3 Then         ' se non sono referenziati X, Y e Z esco
' parametri lavorazione
ToolPathOnOff = 132         ' mi carico la definizione del tasto tool path
xzero = GetDRO (30)         ' memorizzo la posizione iniziale ASSOLUTA di cambio utensile
yzero = GetDRO (31)
zzero = GetDRO (32)
xpos = GetDRO (0)         ' memorizzo la posizione iniziale RELATIVA di cambio utensile
ypos = GetDRO (1)
zpos = GetDRO (2)
fpos = GetDRO (18)         ' memorizzo il feedrate iniziale
' variabili del programma
fmax = 500            ' imposto il feedrate massimo
fmin = 50            ' imposto il feedrate per la palpata
zavv = -40            ' distanza rapida di avvicinamento al palpatore
zmin = -150            ' profondità oltre il palpatore
xcut = 0            ' posizione X per cambio utensile
ycut = 0            ' posizione Y per cambio utensile
xtool = GetUserDRO (1200)      ' posizione X del palpatore (Settings -> Tool Change Location)
ytool = GetUserDRO (1201)      ' posizione Y del palpatore
ztool = GetUserDRO (1202)      ' posizione Z del palpatore
' inizio programma
Call DoOEMButton (ToolPathOnOff)   ' disabilito il tool path
code "G0 F" & fmax         ' porto il feedrate al valore massimo
Code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento (fino a zavv)
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
   
zuno = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zsu = zuno + 2
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend
If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zdue = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zorig = (zuno + (zdue)) / 2
code "G0 F" & fmax         ' riporto il feedrate al massimo
code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
code "G1 G53 X" & xcut & "Y" & ycut   ' vado in una posizione comoda per il cambio utensile
While IsMoving()
Wend
Speak ("ora si puo' cambiare la punta") 'Avviso Vocale
MsgBox ("ORA SI PUO' SOSTITUIRE LA PUNTA")

Speak ("attenzione      e' stata sostituita la punta") 'Avviso Vocale
Response = MsgBox ("E' STATA SOSTITUITA LA PUNTA?", 4 , "ATTENZIONE")
If (Response = 6) Then
i = 99
Else
Speak ("ATTENZIONE , LA PUNTA NON E' STATA SOSTITUITA, RIPRENDO IL LAVORO CON LA PUNTA INIZIALE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA RIPRENDO IL LAVORO CON LA PUNTA INIZIALE")
End If

If i <> 99 Then               ' non faccio nulla
code "G1 G53 X" & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G1 X" & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "G1 G53 Z" & zzero         ' riporto Z al valore zero pezzo
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
Speak ("ATTENZIONE , CAMBIO UTENSILE NON EFFETTUATO , SI PUO' RIPRENDERE LA LAVORAZIONE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA")
'DoSpinCW()            ' riaccendo il motore M3 e riprendo il lavoro da dove l'avevo lasciato
Else

code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zuno = GetVar (2002)         ' memorizzo il valore di Z della nuova punta
zsu = zuno +4
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend

If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della nuova punta
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zdue = GetVar (2002)         ' memorizzo il valore di Z della nuova punta

znew = (zuno + (zdue)) / 2
   
code "G0 F" & fmax      ' riporto il feedrate al massimo

code "G1 G53 Z0"      ' ritorno Z ZERO macchina
While IsMoving()
Wend

code "G0 G53 X " & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G0 X " & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
zdif = zorig - (znew)         ' controllo se l'utensile è più corto o piu lungo
code "G1 G53 Z" & zzero-(zdif)      ' riporto Z al valore zero pezzo con la differenza utensile
While IsMoving()
Wend
Call SetDro (2,0)         ' porto contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza (inizio programma)
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
   
Speak ("CAMBIO UTENSILE EFFETTUATO ,   SI PUO' RIPRENDERE LA LAVORAZIONE ,      RIMUOVERE PIASTRA") 'Avviso Vocale
   
MsgBox ("RIMUOVERE PIASTRA E PREMERE IL TASTO LAVORAZIONE")
Message "************ CAMBIO UTENSILE EFFETTUATO ************"
End If

Else
speak ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina" )
MsgBox ("PER CAMBIARE LA PUNTA BISOGNAVA REFERENZIARE LA MACCHINA")
End If
Call DoOEMButton (ToolPathOnOff)   ' abilito il tool path

End If
End Sub

'******************************************* SUBROUTINES BELOW ***********************************************



'----- SUBROUTINE TO RETURN INITIAL SETTINGS -----------------------------------------------------------------
Sub RETURNSTATE
 'REINSTATE INITIAL FEEDRATE
 Code "F" &VarInitialFeedRate
 
 'REINSTATE DISTANCE MODE  0=G91  -1=G90
 If VarInitialDistMode = 0 Then Code "G91" Else Code "G90"

 'REINSTATE LINEAR MODE  0=G00  1=G01
 If VarInitialLinearMode = 0 Then Code "G00" Else Code "G01"

 'REINSTATE Z INHIBIT STATUS 0=OFF 1=ON
 If VarInitialInhibit = 1 Then SetParam("ZInhibitOn",1)
 
 'SET Z SCALE TO INITIAL VALUE
 If VarInitialZScale <> 1.0 Then SetParam("ZScale",VarInitialZScale)

 'SET FEEDRATE OVERRIDE TO INITIAL VALUE
 If VarInitialFRO <> 100 Then SetOemDRO(821,VarInitialFRO)
End Sub


'----- DIALOG SUBROUTINE FOR TOUCH PLATE CHOICE AND TIME DELAY -----------------------------------------------
Sub RunTheThing     
Dim PlateList$ (2)   'DECLARE 3 ITEM ARRAY FOR PLATE SIZE LIST
If GetParam("Units") = 0 Then
'MM FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"00.000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"00.000")   'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"00.000")     'FILL ARRAY 3
Else
'INCH FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"0.0000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"0.0000")     'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"0.0000")     'FILL ARRAY 3
End If

Dim UnitList$ (0)   'DECLARE 1 ITEM ARRAY FOR UNIT LISTBOX
UnitList (0) = VarUnits     'FILL ARRAY 1

'SETUP DIALOG CONTROLS   
Begin Dialog PlateChoice 110,68,"Touch Plate"
ListBox 15,20,35,30, PlateList$(),.Lstbox2
ListBox 64,20,25,10, UnitList$(),.Listbox1
GroupBox 8,8,95,45,"Choose Plate Thickness",.GroupBox1
OKButton 57,34,37,12
Text 13,55,100,15, "Delay"
TextBox 37,55,30,10, .SecText
        Text 70,55,30,15, "Seconds"         
End Dialog

Dim Dlg1 As PlateChoice
Dlg1.SecText = VarDelayInSec   'FILL SECONDS TEXTBOX WITH DEFAULT VALUE

Button = Dialog (Dlg1)   'SHOW DIALOG AND WAIT FOR BUTTON REPLY

If Button = 0 Then   'IF CLOSE BUTTON
Message "Auto Tool Zero CANCELED"
End      'END SCRIPT
End If   

'CHECK THAT SECONDS WAS ENTERED NUMERIC
If IsNumeric(Dlg1.SecText) = True Then
        VarDelayInSec = Int(Dlg1.SecText)
Else
RET = MachMsg("*****  SECONDS MUST BE ENTERED IN NUMERIC FORMAT! *****", _
"  Substance Abuse Is Not Recommended  ",0)
RunTheThing   'RESTART SUB
End If
 
'SET PLATE VARIABLE BASED ON PLATE CHOICE
PlateNum = Dlg1.Lstbox2
Select Case PlateNum
      Case 0 'PRIMARY PLATE
        'WILL USE PRIMARY/DEFAULT THICKNESS
      Case 1 'SECONDARY PLATE
         VarTouchPlate = VarSecondPlate
      Case 2 'TERTIARY PLATE
        VarTouchPlate = VarThirdPlate
End Select
End Sub

 





449
VB and the development of wizards / Re: macro correction help
« on: March 24, 2021, 06:09:53 AM »
you have to run the macro in vb scripter window by using the >|| button (single step) to see where the error occurs.
without having your Hardware here it is hard to test the macro for functionality.

450
VB and the development of wizards / Re: macro correction help
« on: March 24, 2021, 05:33:31 AM »
maybe

Code: [Select]
Global VarUnits
Global VarMaxDistance
Global VarFeedRate
Global VarStandOff
Global VarTouchPlate
Global VarSecondPlate
Global VarThirdPlate

Sub Main()
Speak ("selezionare zero     o     cambio UTENSILE") 'Avviso Vocale
Begin Dialog SelectCentering 420,120,160,96,"MACRO UTENSILE"
OKButton 30,68,40,14
CancelButton 90,68,40,14
GroupBox 30,5,100,52,"ZERO / CAMBIO UTENSILE",.GroupBox1
OptionGroup .OptionGroup1
OptionButton 46,24,80,8," ZERO UTENSILE",.OptionButton1
OptionButton 46,40,80,8," CAMBIO UTENSILE"  ,.OptionButton2
End Dialog
Dim Dlg1 As SelectCentering
Button = Dialog (Dlg1)
If Button = 0 Then Exit Sub
Selected  = Dlg1.OptionGroup1
'laser is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 0 Then
'Tool Height Setting Macro - JLH v1.1 - 4 March 2013
'Questa versione ha un approccio a 2 fasi, veloce per la velocita e lenta per la precisione.
   
Speak ("confermare ZERO UTENSILE") 'Avviso Vocal
        Sleep (1000)
        Begin Dialog ButtonSample 250,200,120,60," "
OKButton 12,20,40,14
CancelButton 68,20,40,14
End Dialog

Dim Dlg2 As ButtonSample
Button = Dialog (Dlg2)
If Button = 0 Then
MsgBox "ZERO UTENSILE CANCELLATO"
Speak (" ZERO   UTENSILE     CANCELLATO") 'Avviso Vocale
Exit Sub
End If
Message "************  INIZIO ZERO UTENSILE ************"


'----- USER VARIABLES FOR DISTANCES, FEED RATES, TOUCH PLATES, OPTIONS ---------------------------------------
If GetParam("Units") = 0 Then
'* METRIC VALUES *
VarUnits = "  MM"
VarMaxDistance = -25.4      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 127      'MM/MIN DOWN FEEDRATE
VarStandOff = 1.27      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 20.066      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.038      'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
VarThirdPlate = 0.012      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
Else
'* SAE VALUES *
VarUnits = " INCH"
VarMaxDistance = -1.0      'MAX Z TRAVEL * ALWAYS MAKE NEGATIVE
VarFeedRate = 5      'INCH/MIN DOWN FEEDRATE
VarStandOff = 0.05      'STANDOFF DISTANCE ABOVE PROBE CONTACT
VarTouchPlate = 0.79      'PRIMARY/DEFAULT TOUCH PLATE THICKNESS
VarSecondPlate = 0.0015   'SECONDARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG 
VarThirdPlate = 0.0005      'TERTIARY TOUCH PLATE THICKNESS * OPTION FOR CHOICE DIALOG
End If

VarRunTheChoice = 1      'RUN PLATE CHOICE DIALOG?  0=NO  1=YES

VarDelayInSec = 0      'DEFAULT SECONDS TO DELAY MOTION
VarBeepOrSpeak = 2      'COUNTDOWN AUDIO: 0=NONE 1=BEEP 2=SPEAK
VarSecOfAudio = 5      'COUNTDOWN SECOND AT WHICH AUDIO BEGINS

VarCompleteAudio = 3      'END SIGNAL: 0=NONE 1=BEEP 2=SPEAK 3=WAV_AUDIO_FILE
VarWavAudioFile = "C:\MACH3\ToolCompleteSND1.wav" 'WAV_AUDIO_FILE LOCATION

'*************************************************************************************************************
'*************************************************************************************************************

'----- GET INITIAL ENVIRONMENT SETTINGS FOR LATER REINSTATEMENT ----------------------------------------------
VarInitialLinearMode = GetOemDRO(819)        'LINEAR MODE  G00/G01
VarInitialDistMode = GetOemLED(48)           'DISTANCE MODE G90/G91   
VarInitialFeedRate = GetOemDRO(818)          'FEEDRATE
VarInitialInhibit = GetParam("ZInhibitOn")   'Z INHIBIT STATUS  OFF/ON
VarInitialZScale = GetParam("ZScale")        'Z SCALE VALUE
VarInitialFRO = GetOemDRO(821)           'FEEDRATE OVERRIDE PERCENTAGE
Message ""                      'CLEAR STATUS LINE TEXT


'----- CHECK DIGITIZE STATE; 0=CLEAR 1=ACTIVE ----------------------------------------------------------------
If GetOemLED (825) <> 0 Then
RET = MachMsg("Digitize Status Not Clear. Check Probe/Connections And Try Again!","*** ERROR! ***",0)
End      'END SCRIPT
End If


'----- CHECK IF USER WANTS TO RUN PLATE CHOICE DIALOG --------------------------------------------------------
If VarRunTheChoice = 1 Then RunTheThing 'RUN SUBROUTINE 


'----- ACTIVATE TIME DELAY IF USED ---------------------------------------------------------------------------
If VarDelayInSec <> 0 Then
Do Until VarDelayInSec = 0      'LOOP UNTIL SECONDS = ZERO
Message VarDelayInSec         'DISPLAY SECONDS VALUE IN STATUS LINE
If VarDelayInSec < VarSecOfAudio + 1 Then
Select Case VarBeepOrSpeak   
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak(VarDelayInSec)   
End Select
End If   
Sleep 1000      'PAUSE 1 SEC.
VarDelayInSec = VarDelayInSec - 1   'REDUCE SECONDS BY 1 AFTER EACH LOOP
Loop
End If

'----- PREPARE FOR MOVE ----- MOVE PROBE DOWN TOWARD CONTACT -------------------------------------------------
SetParam("ZInhibitOn",0)   'TURN Z INHIBIT OFF
SetParam("ZScale",1.0)      'SET Z SCALE TO 1.0
DoOemButton(1014)      'CANCEL FEED OVERRIDE
SetOemDRO(802,0)        'ZERO Z AXIS DRO
Sleep 200         'DELAY TO ALLOW DRO TO CHANGE
Message "Auto Tool Zero Running..."
Code "G90 G31 Z" &VarMaxDistance &"F" &VarFeedRate   'MOVE DOWN @ FEEDRATE
While IsMoving()      'WAIT UNTIL MOVE IS COMPLETE BEFORE PROCEEDING
Wend


'----- GET Z CONTACT POSITION AND TEST FOR MAX TRAVEL ------ MOVE TO STANDOFF ------ UPDATE Z AXIS DRO -------
If GetVar(2002) <= VarMaxDistance + .001 Then   
RET = MachMsg("Maximum Travel Reached. Reposition Z Axis Closer To Touch Plate And Try Again!","*** OOPS! ***",0)
Message ""
RETURNSTATE    'CALL REINSTATE SUBROUTINE
End      'END SCRIPT
Else
Beep
Code "G90 G0 Z" &GetVar(2002)   'MOVE TO CONTACT POINT DUE TO OVERRUN
While IsMoving()
Wend
SetOemDRO(802,0)      'ZERO Z AXIS DRO
Sleep 200
Code "G90 G0 Z" &VarStandOff   'MOVE TO STANDOFF DISTANCE
While IsMoving ()
Wend
SetOemDRO(802, VarStandOff + VarTouchPlate)     'SET Z DRO (STANDOFF + PLATE THICKNESS)
Sleep 200
Select Case VarCompleteAudio
Case 1 'OPTION BEEP
Beep
Case 2 'OPTION SPEAK
Speak("Tool Zero Complete.")
Case 3 'OPTION WAV_AUDIO_FILE
PlayWave(VarWavAudioFile)
End Select
Message "Auto Tool Zero Complete! ***Remove Touch Plate***"
End If
RETURNSTATE     'CALL REINSTATE SUBROUTINE

End If

'web is selected@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Selected = 1 Then
       Rem CAMBIO UTENSILE AUTOMATICO
Speak ("confermare cambio utensile automatico") 'Avviso Vocale
Sleep (1000) ' pausa di 1 secondi
Dim Dlg3 As ButtonSample
Button = Dialog (Dlg3)
If Button = 0 Then
MsgBox "CAMBIO UTENSILE AUTOMATICO  CANCELLATO"
Speak (" CAMBIO UTENSILE   AUTOMATICO      CANCELLATO") 'Avviso Vocale
Exit Sub
End If
If Not GetLed (7) Then         ' è referenziato X
vxled = 1
End If
   
If Not GetLed (8) Then         ' è referenziato Y
vyled = 1
End If
If Not GetLed (9) Then         ' è referenziato Z
vzled = 1
End If
Tled = vxled + vyled + vzled
If Tled = 3 Then         ' se non sono referenziati X, Y e Z esco
' parametri lavorazione
ToolPathOnOff = 132         ' mi carico la definizione del tasto tool path
xzero = GetDRO (30)         ' memorizzo la posizione iniziale ASSOLUTA di cambio utensile
yzero = GetDRO (31)
zzero = GetDRO (32)
xpos = GetDRO (0)         ' memorizzo la posizione iniziale RELATIVA di cambio utensile
ypos = GetDRO (1)
zpos = GetDRO (2)
fpos = GetDRO (18)         ' memorizzo il feedrate iniziale
' variabili del programma
fmax = 500            ' imposto il feedrate massimo
fmin = 50            ' imposto il feedrate per la palpata
zavv = -40            ' distanza rapida di avvicinamento al palpatore
zmin = -150            ' profondità oltre il palpatore
xcut = 0            ' posizione X per cambio utensile
ycut = 0            ' posizione Y per cambio utensile
xtool = GetUserDRO (1200)      ' posizione X del palpatore (Settings -> Tool Change Location)
ytool = GetUserDRO (1201)      ' posizione Y del palpatore
ztool = GetUserDRO (1202)      ' posizione Z del palpatore
' inizio programma
Call DoOEMButton (ToolPathOnOff)   ' disabilito il tool path
code "G0 F" & fmax         ' porto il feedrate al valore massimo
Code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento (fino a zavv)
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
   
zuno = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zsu = zuno + 2
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend
If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della punta attuale
code "G31 Z" & zmin
While IsMoving()
Wend
End If
zdue = GetVar (2002)         ' memorizzo il valore di Z della punta attuale
zorig = (zuno + (zdue)) / 2
code "G0 F" & fmax         ' riporto il feedrate al massimo
code "G1 G53 Z0"         ' porto Z a ZERO macchina
While IsMoving()
Wend
code "G1 G53 X" & xcut & "Y" & ycut   ' vado in una posizione comoda per il cambio utensile
While IsMoving()
Wend
Speak ("ora si puo' cambiare la punta") 'Avviso Vocale
MsgBox ("ORA SI PUO' SOSTITUIRE LA PUNTA")

Speak ("attenzione      e' stata sostituita la punta") 'Avviso Vocale
Response = MsgBox ("E' STATA SOSTITUITA LA PUNTA?", 4 , "ATTENZIONE")
If (Response = 6) Then
i = 99
Else
Speak ("ATTENZIONE , LA PUNTA NON E' STATA SOSTITUITA, RIPRENDO IL LAVORO CON LA PUNTA INIZIALE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA RIPRENDO IL LAVORO CON LA PUNTA INIZIALE")
End If

If i <> 99 Then               ' non faccio nulla
code "G1 G53 X" & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G1 X" & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
code "G1 G53 Z" & zzero         ' riporto Z al valore zero pezzo
While IsMoving()
Wend
Call SetDro (2,0)         ' porto il contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
Speak ("ATTENZIONE , CAMBIO UTENSILE NON EFFETTUATO , SI PUO' RIPRENDERE LA LAVORAZIONE") 'Avviso Vocale
MsgBox ("LA PUNTA NON E' STATA SOSTITUITA")
'DoSpinCW()            ' riaccendo il motore M3 e riprendo il lavoro da dove l'avevo lasciato
Else

code "G1 G53 X" & xtool & "Y" & ytool    ' mi allineo sul palpatore
While IsMoving()
Wend
code "G1 Z" & zavv         ' scendo in avvicinamento
While IsMoving()
Wend
code "G0 F" & fmin         ' porto il feedrate al minimo
If IsSuchSignal (22) Then      ' scendo sul palpatore
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zuno = GetVar (2002)         ' memorizzo il valore di Z della nuova punta
zsu = zuno +4
code "G0 Z" & zsu         ' salgo per la seconda misura
While IsMoving()
Wend

If IsSuchSignal (22) Then      ' scendo per la seconda volta per vedere la misura della nuova punta
code "G31 Z" & zmin
While IsMoving()
Wend
End If

zdue = GetVar (2002)         ' memorizzo il valore di Z della nuova punta

znew = (zuno + (zdue)) / 2
   
code "G0 F" & fmax      ' riporto il feedrate al massimo

code "G1 G53 Z0"      ' ritorno Z ZERO macchina
While IsMoving()
Wend

code "G0 G53 X " & xzero & "Y" & yzero   ' torno alla posizione X Y zero pezzo
While IsMoving()
Wend
code "G0 X " & xpos & "Y" & ypos      ' torno alla posizione X Y da dove ero partito
While IsMoving()
Wend
zdif = zorig - (znew)         ' controllo se l'utensile è più corto o piu lungo
code "G1 G53 Z" & zzero-(zdif)      ' riporto Z al valore zero pezzo con la differenza utensile
While IsMoving()
Wend
Call SetDro (2,0)         ' porto contatore Z a zero
code "G1 Z" & zpos         ' riporto Z al valore di partenza (inizio programma)
While IsMoving()
Wend
code "G0 F" & fpos         ' riporto il feedrate al valore di partenza
   
Speak ("CAMBIO UTENSILE EFFETTUATO ,   SI PUO' RIPRENDERE LA LAVORAZIONE ,      RIMUOVERE PIASTRA") 'Avviso Vocale
   
MsgBox ("RIMUOVERE PIASTRA E PREMERE IL TASTO LAVORAZIONE")
Message "************ CAMBIO UTENSILE EFFETTUATO ************"
End If

Else
speak ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina" )
MsgBox ("PER CAMBIARE LA PUNTA BISOGNAVA REFERENZIARE LA MACCHINA")
End If
Call DoOEMButton (ToolPathOnOff)   ' abilito il tool path

End If
End Sub

'******************************************* SUBROUTINES BELOW ***********************************************



'----- SUBROUTINE TO RETURN INITIAL SETTINGS -----------------------------------------------------------------
Sub RETURNSTATE
 'REINSTATE INITIAL FEEDRATE
 Code "F" &VarInitialFeedRate
 
 'REINSTATE DISTANCE MODE  0=G91  -1=G90
 If VarInitialDistMode = 0 Then Code "G91" Else Code "G90"

 'REINSTATE LINEAR MODE  0=G00  1=G01
 If VarInitialLinearMode = 0 Then Code "G00" Else Code "G01"

 'REINSTATE Z INHIBIT STATUS 0=OFF 1=ON
 If VarInitialInhibit = 1 Then SetParam("ZInhibitOn",1)
 
 'SET Z SCALE TO INITIAL VALUE
 If VarInitialZScale <> 1.0 Then SetParam("ZScale",VarInitialZScale)

 'SET FEEDRATE OVERRIDE TO INITIAL VALUE
 If VarInitialFRO <> 100 Then SetOemDRO(821,VarInitialFRO)
End Sub


'----- DIALOG SUBROUTINE FOR TOUCH PLATE CHOICE AND TIME DELAY -----------------------------------------------
Sub RunTheThing     
Dim PlateList$ (2)   'DECLARE 3 ITEM ARRAY FOR PLATE SIZE LIST
If GetParam("Units") = 0 Then
'MM FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"00.000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"00.000")   'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"00.000")     'FILL ARRAY 3
Else
'INCH FORMATTING FOR LISTBOX
PlateList (0) = Format(VarTouchPlate,"0.0000")     'FILL ARRAY 1
PlateList (1) = Format(VarSecondPlate,"0.0000")     'FILL ARRAY 2
PlateList (2) = Format(VarThirdPlate,"0.0000")     'FILL ARRAY 3
End If

Dim UnitList$ (0)   'DECLARE 1 ITEM ARRAY FOR UNIT LISTBOX
UnitList (0) = VarUnits     'FILL ARRAY 1

'SETUP DIALOG CONTROLS   
Begin Dialog PlateChoice 110,68,"Touch Plate"
ListBox 15,20,35,30, PlateList$(),.Lstbox2
ListBox 64,20,25,10, UnitList$(),.Listbox1
GroupBox 8,8,95,45,"Choose Plate Thickness",.GroupBox1
OKButton 57,34,37,12
Text 13,55,100,15, "Delay"
TextBox 37,55,30,10, .SecText
        Text 70,55,30,15, "Seconds"         
End Dialog

Dim Dlg1 As PlateChoice
Dlg1.SecText = VarDelayInSec   'FILL SECONDS TEXTBOX WITH DEFAULT VALUE

Button = Dialog (Dlg1)   'SHOW DIALOG AND WAIT FOR BUTTON REPLY

If Button = 0 Then   'IF CLOSE BUTTON
Message "Auto Tool Zero CANCELED"
End      'END SCRIPT
End If   

'CHECK THAT SECONDS WAS ENTERED NUMERIC
If IsNumeric(Dlg1.SecText) = True Then
        VarDelayInSec = Int(Dlg1.SecText)
Else
RET = MachMsg("*****  SECONDS MUST BE ENTERED IN NUMERIC FORMAT! *****", _
"  Substance Abuse Is Not Recommended  ",0)
RunTheThing   'RESTART SUB
End If
 
'SET PLATE VARIABLE BASED ON PLATE CHOICE
PlateNum = Dlg1.Lstbox2
Select Case PlateNum
      Case 0 'PRIMARY PLATE
        'WILL USE PRIMARY/DEFAULT THICKNESS
      Case 1 'SECONDARY PLATE
         VarTouchPlate = VarSecondPlate
      Case 2 'TERTIARY PLATE
        VarTouchPlate = VarThirdPlate
End Select
End Sub