Mach3 i półautomatyczna zmiana narzędzia.

Dyskusje dotyczące najpopularniejszego programu sterującego maszynami CNC
Awatar użytkownika

Autor tematu
gaspar
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1714
Rejestracja: 13 sty 2006, 16:41
Lokalizacja: Stargard
Kontakt:

Mach3 i półautomatyczna zmiana narzędzia.

#1

Post napisał: gaspar » 03 maja 2014, 21:22

Mam dwa problemy z makrem, które jest u nas na forum dostępne (cs-labu).
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
Maszyna staje, wyłącza wrzeciono i podnosi się na SAFE_Z i czeka na start.

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


https://www.instagram.com/cncworkshop.pl/
Obróbka CNC - frezowanie & toczenie

Tagi:


hecza
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 403
Rejestracja: 06 mar 2012, 13:25
Lokalizacja: Częstochowa

#2

Post napisał: hecza » 04 maja 2014, 19:05

Niewiele pomogę, bo używam linuxcnc, ale ciekawi mnie twój 1 PROBLEM.
Niby tabelę narzędzi można edytować i wpisywać co się podoba, ale chyba nie o to chodzi &#8211; powinno wszystko działać z automatu.
W osi Z masz normalnie ? - (+) w górę, a (-) w dół , bo nijak tego nie mogę zrozumieć.
U mnie pomiar działa bez problemu.
Jak znajdziesz przyczynę, to się przyznaj. :smile:

Pozdrawiam


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 1
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

#3

Post napisał: tomcat65 » 04 maja 2014, 20:00

gaspar pisze: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...
W pierwszym makro zamień:
ToolLen = (SENS_Z - ZABS) na:
ToolLen = (ZABS - SENS_Z)
Zobacz, czy zadziała.

Resztę poanalizuję, ale pewnie ktoś mądrzejszy szybciej napisze :twisted:

Awatar użytkownika

Autor tematu
gaspar
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1714
Rejestracja: 13 sty 2006, 16:41
Lokalizacja: Stargard
Kontakt:

#4

Post napisał: gaspar » 04 maja 2014, 20:08

tomcat65 pisze: W pierwszym makro zamień:
ToolLen = (SENS_Z - ZABS) na:
ToolLen = (ZABS - SENS_Z)
Zobacz, czy zadziała.
Do tego już też doszedłem pisząc swoją część makra, ale dzięki :)
Jutro sprawdzę na maszynie
hecza pisze:W osi Z masz normalnie ? - (+) w górę, a (-) w dół , bo nijak tego nie mogę zrozumieć.
Tak w górę bije na + a w dól na -. Pewnie powód jak wyżej, oby :D
https://www.instagram.com/cncworkshop.pl/
Obróbka CNC - frezowanie & toczenie

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Mach 2 / 3 / 4 (ArtSoft software)”