Spolszczyłem opis zmiennych by było łatwiej to czytać.
HiddenScript.m1s
Kod: Zaznacz cały
Dim ZOFFSET, ZTOP, ZBOTTOM, ZGODOWN, ZABS, ZUPFINE, Z_SAFE
Dim ToolLen
Dim Tool
Dim SENS_Z, SENS_X, SENS_Y, Z_LIFT, Z_PARK, MAX_DTRAVEL
Dim SPD_FAST, SPD_FINE
' -----------------------------------------------------
' Configuration parameters
' -----------------------------------------------------
SENS_Z = 213.54 ' Pozycja czujnika wzgledem stolu
Z_SAFE = -50 ' odleglosc bezp. na ktora moze narzedzie zjechac z predkoscia G0
SENS_X = 0 ' Pozycja czujnika zmiany narzedzia w osi X
SENS_Y = 2020 ' Pozycja czujnika zmiany narzedzia w osi Y
MAX_DTRAVEL = 220 ' Maksymalna odleglosc na jaka moze zjechac os przy pomiarze
SPD_FAST = 1000 ' predkosc pierwszego pomiaru
SPD_FINE = 100 ' predkosc drugiego/dokladnego pomiaru
Z_LIFT = 3 ' odleglosc na jaka podniesie sie os z po pierwszym pomiarze, a przed drugim
Z_PARK = 0 ' odjazd na wspolrzedna absolutna po dokonanym pomiarze
' -----------------------------------------------------
Message( "Dokonuję pomiaru długości narzędzia..." )
If GetOEMLed(807) Then
Message( "TC ERROR: X Axis not referenced!" )
End
End If
If GetOEMLed(808) Then
Message( "TC ERROR: Y Axis not referenced!" )
End
End If
If GetOEMLed(809) Then
Message( "TC ERROR: Z Axis not referenced!" )
End
End If
If GetOEMLed(825) Then
Message( "TC ERROR: Czujnik pomiaru cały czas załączony! pomiar przerwany." )
End
End If
If GetOEMLed(11) Then
Message( "TC ERROR: Do pomiaru narzędzia wyłącz wrzeciono!" )
End
End If
Tool = GetDRO(24) ' Get current tool index
' narzedzie 0 nie podlega pomiarowi
If(Tool = 0) Then
Message( "TC INFO: Narzędzie nr:0 nie podlega pomiarom długości" )
End
End If
WaitForMove
Code("G43T0")
Code("G43H0") ' turn off tool lenght compensation
WaitForMove
' Move to PARK
Code("G0G53 Z" & Z_PARK)
WaitForMove
' Move to XY position of tool correction sensor
Code("G0G53 X" & SENS_X & " Y" & SENS_Y)
' Code("G0G53 X" & SENS_X)
WaitForMove
' Get actual Z offset
ZOFFSET = GetOEMDRO(49)
' Rapid go down to safe distance above sensor
Code("G0G53 Z" & Z_SAFE)
WaitForMove
' Probe
ZTOP = GetDRO(2) ' actual Z position
ZGODOWN = ZTOP - MAX_DTRAVEL ' max down travel
Code("G31 Z" & ZGODOWN & "f" & SPD_FAST)
WaitForMove
ZUPFINE = GetOEMDRO(85) + Z_LIFT
Code("G1G53 Z" & ZUPFINE & "f" & SPD_FAST) ' go up Z_LIFT
WaitForMove
' fine probe
Code("G31 Z" & ZGODOWN & "f" & SPD_FINE)
WaitForMove
ZBOTTOM = GetVar(2002) 'get probe activation point / pod ta zmienna pobierz moment zadzialania czujnika
' Lift Z to abs park position
Sleep(50)
Code("G0G53 Z" & Z_PARK)
WaitForMove
ZABS = ZBOTTOM + ZOFFSET
ToolLen = (SENS_Z - ZABS)
WaitForMove
SetOEMDRO(42, ToolLen)
Code("G43T" & Tool) ' G43 to sync value in system
Code("G43H" & Tool) ' G43 to sync value in system
WaitForMove
Message ("Z Value : " & ToolLen)
' -----------------------------------------------------------------------------
Sub WaitForMove ()
While IsMoving()
Sleep(15)
Wend
End Sub
Wymianę narzędzia w mojej maszynie wyobrażam sobie w następujący sposób.
Przed rozpoczęciem pracy:
1) Bazowanie maszyny
2) Wywołanie powyższego makra pomiaru (VB Script przycisku) narzędzia dla T1
3) Wywołanie powyższego makra pomiaru (VB Script przycisku) narzędzia dla T2
...
4) i tak do 6 narzędzi których będę używał, czyli od razu offsetuje sobie narzędzia przed obróbką. Zaznaczam, że mam narzędzia w oprawkach iso więc, ponumerowane leżą sobie na półce, a ich wymiar może tylko się zmienić w momencie gdy któreś będę musiał po złamaniu zmienić.
[PROBLEM 1]
Samo makro działa poprawnie, tyle że offsety długości mam z innym znakiem (zamiast - mam w plusie). Można to gdzieś szybko zmienić? Bo chrzani mi to cały magazyn...
Dla przykładu T1 po pomiarze zwraca koordynatę 336.1519
T2 po pomiarze zwraca koordynatę 431,1181
Narzędzie T1 jest o 94mm dłuższe od T2.
Teraz jak jadę na zero materiału narzędziem T2 i ustawiam Z=0. To po przejściu w Machu na narzędzie T1 mam w odległość w Z równą +94mm. A powinno być -94...
[PROBLEM 2]
Oddzielnym problemem jest procedura zmiany po komendzie np. T2 M6 .
Edytowałem M6Start.m1s
Kod: Zaznacz cały
Dim Z_SAFE_ABS
Z_SAFE_ABS = 0 ' Safe Z position
tool = GetSelectedTool()
SetCurrentTool( tool )
Code ("G0G53 Z" & Z_SAFE_ABS)
While IsMoving()
Wend
Message( "Wymien narzedzie i wcisnij START!" )
End
Teraz potrzebuję Waszej pomocy by w M6End.m1s wpisać jej tak pracujący kod:
wyjątek 1) jeśli narzędzie jest w magazynie i jest zmierzone to kompensuj je w stosunku do tego co pracowało przed wywołaniem M6
wyjątek 2) jeśli narzędzie nie jest zmierzone w magazynie to jedź na pozycję pomiaru narzędzia i wykonaj makro HiddenScript.m1s
- zjazd na pozycję pracy powiedzmy 10mm nad materiał
- załączenie wrzeciona i dalsza praca
###
Na początku kombinowałem z wrzuceniem do M6End.m1s całego makra z HiddenScript.m1s, ale zaczął mi się Mach wysypywać. Dodatkowo nie ma to za bardzo sensu, by przy każdej zmianie narzędzia jeździła mi na pomiar, stąd potrzeba podwójnego rozwiązania...
Za wszelkie podpowiedzi będę wdzięczny

[ Dodano: 2014-05-04, 18:17 ]
Może ktoś sprawdzić czy dobrym torem idę?
M6Start.m1s
Kod: Zaznacz cały
Dim Z_SAFE_ABS VARZ_C VARZ_N ZOFFSET ZTOP Z_KOMPENSUJ ZNEW
Sub Main()
Z_SAFE_ABS = 0 'pozycja safe Z
OldTool = GetCurrentTool()
tool = GetSelectedTool()
VARZ_C= GetOemDRO(42) 'pobierz wartosc offsetu aktualnego narzedzia
If GetSelectedTool <1 Then 'Jesli narzedzie mniejsze od 1
MsgBox("Narzedzie 0 nie podlega pomiarowi") 'wyswietl informacje
End 'koniec macro
End If
If GetselectedTool = GetCurrentTool Then 'jesli narzedzie wybrane jest takie same jak aktualne
End 'koniec macro
End If
SetCurrentTool( tool ) 'ustawienie nowego narzedzia jako aktualnego
Code ("G0G53 Z" & Z_SAFE_ABS)
While IsMoving() 'czekaj az os Z pojedzie na safe z
Wend
VARZ_N= GetOemDRO(42) 'pobierz wartosc offsetu nowego narzedzia
If VARZ_N >0 Then 'jesli narzędzie posiada offset to znaczy ze bylo wczesniej zmierzone
WaitForMove
Code("G43T0")
Code("G43H0") 'wylacz kompensacje dlugosci narzedzia
WaitForMove
ZTOP = GetDRO(2) 'pobierz aktualna wartosc pozycji osi Z
Z_KOMPENSUJ = (VARZ_C - VARZ_N) 'kompensuj nowe wzgledem starego
ZNEW = ZTOP + Z_KOMPENSUJ
SetDRO(2, ZNEW) 'zmien wartosc pozycji osi Z zgodnie z komepensacja
Code("G43T" & Tool) ' wlacz kompensacje
Code("G43H" & Tool)
WaitForMove
Message( "Wymien narzedzie i wcisnij START" )
End
End If
Message( "Zamontuj nowe narzedzie i przygotuj sie na pomiar narzedzia! - wcisnij START" )
TUTAJ JAKOŚ POTRZEBUJĘ WYWOŁAĆ MAKRO ZMIANY NARZĘDZIA KTÓRE PODAŁEM WYŻEJ
End
End Sub