Rem VBScript Sensor Probe XYZ - Edge Finder com furo interno Rem WWW.MACHSUPORTE.COM.BR Rem Fluxo: Rem 1 - Iniciar com a ferramenta posicionada sobre o centro do furo Rem 2 - Macro desloca para a base do probe e faz Z Rem 3 - Volta para o furo Rem 4 - Desce para leitura lateral Rem 5 - Faz centro X e Y pelo furo interno '------------------------------------------------------------ ' VARIAVEIS DE AJUSTE '------------------------------------------------------------ ZProbe = -20.00 ' Profundidade maxima de leitura do Probe Z ZFeed = 50 ' Feed-rate de leitura Z ZOffset = 1.00 ' Altura real do probe: da peça ate o topo da base ZSubida = 3.00 ' Quanto sobe depois de zerar o Z ZUp = ZOffset + ZSubida ' Offset entre o centro do furo e o ponto da base usado para medir Z ' Exemplo: ' Se, saindo do centro do furo, a ferramenta precisa andar +20 mm em X para ficar sobre a base, use XOffset_XY_Z = 20 ' Se não precisa mover em Y, deixe YOffset_XY_Z = 0 XOffset_XY_Z = 20.00 YOffset_XY_Z = 0.00 ' Altura para fazer a leitura lateral dentro do furo ' Atenção: ' Este valor é a posição Z absoluta após o zeramento. ' Se o Z zero ficou na superfície da peça, normalmente este valor precisa deixar a ferramenta dentro da altura do probe. ' Exemplo: se o probe tem 10 mm de altura e você quer ler 3 mm abaixo do topo, use 7.00 ' Se seu sistema realmente exige valor negativo, ajuste aqui. Z_leitura_negativo = ZOffset - 3.00 DiametroFuro = 10.00 ' Diâmetro aproximado do furo interno do probe FolgaScan = 5.00 ' Folga extra para garantir que o G31 encoste na parede do furo XyFeed = 50 ' Feed-rate de leitura XY Tolerancia = 0.05 ' Tolerância para detectar falha de contato ' Zerar X/Y no centro encontrado: ' 1 = zera X/Y ' 0 = apenas move para o centro, sem zerar ZerarXY = 1 ' Valor que será colocado no DRO quando a ferramenta estiver no centro do furo. ' Para zerar exatamente no centro do furo, deixe 0 e 0. ' Para usar o furo como referência de aresta/canto da peça, coloque aqui a distância real ' entre o centro do furo e o zero desejado da peça. X_DRO_CentroFuro = 0.00 Y_DRO_CentroFuro = 0.00 StopMacro = 0 '------------------------------------------------------------ ' INICIO DA MACRO '------------------------------------------------------------ If GetOemLed(825) <> 0 Then Code "(Probe ja ligado! cheque a conexao e tente novamente)" Else CurrentFeed = GetOemDRO(818) ' Salva feed atual DoSpinStop() ' Desliga spindle Code "G90" ' Garante modo absoluto Code "G4 P1.0" ' Salva posição inicial: ferramenta sobre o centro do furo XHole = GetOemDro(0) YHole = GetOemDro(1) ' Calcula posição da base para leitura do Z XPadZ = XHole + XOffset_XY_Z YPadZ = YHole + YOffset_XY_Z Code "(Movendo para area de leitura Z...)" Code "G0 X" & XPadZ & " Y" & YPadZ While IsMoving() Sleep(200) Wend ' Zera temporariamente o DRO Z antes do probe, mantendo a logica da sua macro atual DoOEMButton(1010) Sleep(200) '------------------------------------------------------------ ' LEITURA DO EIXO Z '------------------------------------------------------------ Code "G4 P1.0" Code "(Escaneando Z...)" Code "G31 Z" & ZProbe & " F" & ZFeed While IsMoving() Sleep(200) Wend ZPos = GetVar(2002) If Abs(ZPos - ZProbe) < Tolerancia Then MsgBox "**ERRO** Sonda Z nao detectou contato!" Code "G0 Z10" StopMacro = 1 End If If StopMacro = 0 Then Code "G0 Z" & ZPos While IsMoving() Sleep(200) Wend Call SetDro(2, ZOffset) Sleep(200) Code "G4 P0.5" Code "G0 Z" & ZUp While IsMoving() Sleep(200) Wend Code "(Z Zero OK)" End If '------------------------------------------------------------ ' VOLTA PARA O FURO E DESCE PARA LEITURA XY '------------------------------------------------------------ If StopMacro = 0 Then Code "(Voltando para o centro do furo...)" Code "G0 X" & XHole & " Y" & YHole While IsMoving() Sleep(200) Wend Code "(Descendo para leitura XY...)" Code "G0 Z" & Z_leitura_negativo While IsMoving() Sleep(200) Wend XCurrent = GetOemDro(0) YCurrent = GetOemDro(1) DiamScan = (DiametroFuro / 2) + FolgaScan Code "F" & XyFeed End If '------------------------------------------------------------ ' PROBE X-- '------------------------------------------------------------ If StopMacro = 0 Then XNew = XCurrent - DiamScan Code "(Escaneando X-- ...)" Code "G31 X" & XNew While IsMoving() Sleep(200) Wend XPos1 = GetVar(2000) If Abs(XPos1 - XNew) < Tolerancia Then MsgBox "**ERRO** Sonda nao detectou contato em X--!" StopMacro = 1 End If Code "G0 X" & XCurrent While IsMoving() Sleep(200) Wend End If '------------------------------------------------------------ ' PROBE X++ '------------------------------------------------------------ If StopMacro = 0 Then XNew = XCurrent + DiamScan Code "(Escaneando X++ ...)" Code "G31 X" & XNew While IsMoving() Sleep(200) Wend XPos2 = GetVar(2000) If Abs(XPos2 - XNew) < Tolerancia Then MsgBox "**ERRO** Sonda nao detectou contato em X++!" StopMacro = 1 End If End If '------------------------------------------------------------ ' CALCULA CENTRO X '------------------------------------------------------------ If StopMacro = 0 Then XCenter = (XPos1 + XPos2) / 2 Code "(Movendo para centro X...)" Code "G0 X" & XCenter While IsMoving() Sleep(200) Wend End If '------------------------------------------------------------ ' PROBE Y++ '------------------------------------------------------------ If StopMacro = 0 Then YCurrent = GetOemDro(1) YNew = YCurrent + DiamScan Code "(Escaneando Y++ ...)" Code "G31 Y" & YNew While IsMoving() Sleep(200) Wend YPos1 = GetVar(2001) If Abs(YPos1 - YNew) < Tolerancia Then MsgBox "**ERRO** Sonda nao detectou contato em Y++!" StopMacro = 1 End If Code "G0 Y" & YCurrent While IsMoving() Sleep(200) Wend End If '------------------------------------------------------------ ' PROBE Y-- '------------------------------------------------------------ If StopMacro = 0 Then YNew = YCurrent - DiamScan Code "(Escaneando Y-- ...)" Code "G31 Y" & YNew While IsMoving() Sleep(200) Wend YPos2 = GetVar(2001) If Abs(YPos2 - YNew) < Tolerancia Then MsgBox "**ERRO** Sonda nao detectou contato em Y--!" StopMacro = 1 End If End If '------------------------------------------------------------ ' CALCULA CENTRO Y '------------------------------------------------------------ If StopMacro = 0 Then YCenter = (YPos1 + YPos2) / 2 Code "(Movendo para centro Y...)" Code "G0 Y" & YCenter While IsMoving() Sleep(200) Wend End If '------------------------------------------------------------ ' ZERA X/Y OU APENAS FINALIZA NO CENTRO '------------------------------------------------------------ If StopMacro = 0 Then If ZerarXY <> 0 Then Call SetDro(0, X_DRO_CentroFuro) Sleep(200) Call SetDro(1, Y_DRO_CentroFuro) Sleep(200) Code "(XY Zero OK)" Else Code "(XY Center OK)" End If Code "G0 Z" & ZUp While IsMoving() Sleep(200) Wend Code "(XYZ Probe OK)" Else Code "(Macro interrompida por erro de leitura)" Code "G0 Z" & ZUp While IsMoving() Sleep(200) Wend End If Code "F" & CurrentFeed End If