21 lutego 2022 Instructions

W systemie MyPlasm CNC funkcje detekcji materiału są zaimplementowane i gotowe do użycia co przedstawiono na poniższym filmie :

Dla systemu MACH 3 poztaram sie opisać poniżej :

Głowica pływająca ( w przygotowaniu ) 

Do wykrycia materiału bardzo często jest wykorzystywana głowica pływająca, warto ją jednak stosować zawsze, nawet jeśli wykrycie materiału jest realizowane w inny sposób. Dzięki temu program otrzyma informację o napotkaniu na przeszkodę (materiał) podczas opuszczania osi Z. Głowicę pływającą można zrealizować na dwa sposoby, w każdym przypadku palnik musi być luźno zawieszony na osi aby mógł się cofnąć gdy napotka na materiał

Jednym sposobem jest zamontowanie palnika do osi Z na dodatkowej prowadnicy, która unosząc się uruchamia przełącznik przekazujący informację do systemu sterowania

 

  lub 

Drugim sposobem jest zawieszenie całej osi w ten sposób, aby po napotkaniu na materiał możliwe było cofnięcie się nakrętki napędowej, wykrycie tego faktu można zrealizować poprzez montaż przełącznika podobnie jak w poprzednim przykładzie.

W każdym przypadku należy poinformować program sterujący (np. MACH3) o uniesieniu palnika plazmowego. Styki przełącznika podłączamy i konfigurujemy wg dokumentacji istniejącego systemu CNC tak samo jak przełączniki home, limit, e-stop etc..

Jeśli chcemy aby wykorzystać to do wykrywania materiału – konfigurujemy przełącznik jako wejściowy sygnał PROBE w programie MACH3.

Jeśli sygnał probe jest poprawnie skonfigurowany, w zakładce “Diagnostic Screen” powinna zaświecać się kontrolka DIGITIZE gdy palnik napotka na materiał.

 

 

Program wykrywający materiał i ustalający wstępną odległość palnika od materiału z wykorzystaniem sygnału głowicy pływającej. Poniżej przedstawiam przykładowy prosty g-kod który ustali wstępną pozycję palnika od materiału

G31 Z-10 F300 (szukanie materiału z prędkością 300 do pozycji Z=-10)
G92 Z-3 (Zerowanie osi Z + przykładowa korekcja przełącznika)
G00 Z1 (podniesienie palnika 1mm nad materiał)
M3 (Załączenie plazmy)

Najłatwiejszy sposób zautomatyzowania to zmodyfikowanie makra M3 ( znajduje się w katalogu C:/Mach3/Macros/Plasma/M3.m1s ).

 

  • code “G31 Z-10 F300”
  • While IsMoving()
  • Wend
  • code “G00 Z-3”
  • code “G00 Z1”
  • While IsMoving()
  • Wend
  • DoSpinCW()

 

Bardziej zaawansowanym sposobem jest użycie bardziej złożonego makra.

Przykładowe makro dla MACH3 przedstawiam poniżej:

  • Pobierz makro m300.m1s
  • HeightOfDetect = 20
  • SpeedOfDetect = 300
  • Offset = 5
  • HeightOfTransfer = 2
  • HeightOfPierce = 5
  • HeightOfCut = 1
  • Delay = Param1()
  • Dim MaterialPos As Double
  • If GetOEMDro(186)>HeightOfDetect Or GetOEMDro(186) Then code “G00 Z” & HeightOfDetect
  • While IsMoving()
  • Wend
  • message(“Detecting of material pos.”)
  • code “G31 Z-10 F” & SpeedOfDetect
  • While IsMoving()
  • Wend
  • If GetOEMDro(186)=-10 Then
  • message(“No material detected”)
  • code “G00 Z” & HeightOfDetect
  • While IsMoving()
  • Wend
  • 1: GoTo 1
  • Else
  • MaterialPos = GetOEMDro(186) + offset
  • message(“Material detected pos = ” & MaterialPos)
  • code “G00 Z” & MaterialPos + HeightOfTransfer
  • While IsMoving()
  • Wend
  • DoSpinCW()
  • If Delay>200 Then
  • code “G00 Z” & MaterialPos + HeightOfPierce
  • While IsMoving()
  • Wend
  • End If
  • Sleep(Delay+1)
  • code “G00 Z” & MaterialPos + HeightOfCut
  • While IsMoving()
  • Wend
  • End If

 

Po skopiowaniu makra do katalogu “Mój Komputer / dysk C / Mach 3 / macros” pisanie programów staje się banalnie proste, poniżej kompletny przykład z wykorzystaniem powyższego makra

 

  • G00 Z40 (podniesienie palnika)
  • G00 X100 Y100 (przejazd do pozycji wpalenia)
  • M300 P1000 (Uruchomienie makra, czas przebicia 1000ms)
  • G01 X10 Y10 (cięcie)
  • M5 (wyłączenie palnika)
  • G00 Z40 (podniesienie palnika)


Innym sposobem (najszybszym) jest wykorzystanie funkcji układu THC wykrywającej główny łuk plazmowy (tnący). Podczas opuszczania palnika na materiał jest załączone źródło plazmy – ponad materiałem palnik nie ma kontaktu z materiałem więc nie ma łuku tnącego jeśli zbliży się na określoną odległość następuje zainicjowane łuku tnącego – wykrycie tego faktu jest przez program wykorzystane przez program do dokładnego określenia położenia materiału. Przez to, że palnik jest uruchamiany w dużej odległości od materiału, generuje o wiele większe zakłócenia, które mogą negatywnie wpłynąć na poprawną pracę elektroniki.

W tym przypadku sygnałowi PROBE należy przypisać pin podłączony do wyjścia ARC OK układu THC – kontrolka DIGITIZE powinna zaświecać się w momencie wykrycia łuku głównego przez układ THC (można zasymulować taki stan na potrzeby testu).

Poniżej przedstawiam przykładowy prosty g-kod który ustali wstępną pozycję palnika od materiału z użyciem sygnału ARC OK (skonfigurowany jako PROBE w programie MACH3)

  • G00 Z20 (ustawienie palnika ok 20mm nad materiał)
  • M3 (Załączenie plazmy)
  • G31 Z-10 F300 (szukanie materiału z prędkością 300 do pozycji Z=-10)
  • G92 Z3 (Zerowanie osi Z + przykładowa korekcja)
  • G00 Z6 (podniesienie palnika 6mm nad materiał)
  • G04 P1000 (czas przebijania materiału 1000ms/1s)
  • G00 Z1 (obniżenie palnika 1mm nad materiał)

 

Alternatywne makro dla MACH3

Pobierz makro m301.m1s

  • HeightOfDetect = 10
  • SpeedOfDetect = 300
  • Offset = 5
  • HeightOfPierce = 5
  • HeightOfCut = 1
  • Delay = Param1()
  • Dim MaterialPos As Double
  • If GetOEMDro(186)>HeightOfDetect Or GetOEMDro(186) Then code “G00 Z” & HeightOfDetect
  • While IsMoving()
  • Wend
  • DoSpinCW()
  • sleep(200) message(“Detecting of material pos.”)
  • code “G31 Z-10 F” & SpeedOfDetect
  • While IsMoving()
  • Wend
  • If GetOEMDro(186)=-10 Then
  • DoSpinStop() message(“No material detected”)
  • code “G00 Z” & HeightOfDetect
  • While IsMoving()
  • Wend
  • 1: GoTo 1
  • Else
  • MaterialPos = GetOEMDro(186) – offset
  • message(“Material detected pos = ” & MaterialPos)
  • If Delay>200 Then
  • code “G00 Z” & MaterialPos + HeightOfPierce
  • While IsMoving()
  • Wend
  • End If
  • Sleep(Delay+1)
  • code “G00 Z” & MaterialPos + HeightOfCut
  • While IsMoving()
  • Wend
  • End If