MAKRO M6

Dyskusje dotyczące najpopularniejszego programu sterującego maszynami CNC

Autor tematu
fizyk19
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 18
Rejestracja: 22 maja 2008, 09:05
Lokalizacja: polska

MAKRO M6

#1

Post napisał: fizyk19 » 13 sty 2013, 14:01

WITAM

Kilka lat temu uruchomiłem tokarkę cnc na MACH3 i napisałem
makro M6 do obrotu dwóch imaków ;


Sub Main()

NewTool = GetSelectedTool()
OldTool = GetCurrentTool()
If (NewTool > 4) Then
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
SystemWaitFor (Input1)
Exit Sub
End If
If (OldTool=0) Then
Code "m30"
End If
If (NewTool=0) Then
Code "m30"
End If

If (NewTool = 1) Then
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
ActivateSignal(Output1)
SystemWaitFor (Input2)
Code "g4 p1"
While IsMoving
SystemWaitFor (Input2)
Wend
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
Exit Sub
End If

If (NewTool = 2) Then
deActivateSignal(Output1)
deActivateSignal(Output3)
deActivateSignal(Output4)
ActivateSignal(Output2)
SystemWaitFor (Input2)
Code "g4 p1"
While IsMoving
SystemWaitFor (Input2)
Wend
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
Exit Sub
End If

If (NewTool = 3) Then
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output4)
ActivateSignal(Output3)
SystemWaitFor (Input2)
Code "g4 p1"
While IsMoving
SystemWaitFor (Input2)
Wend
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
Exit Sub
End If

If (NewTool = 4) Then
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
ActivateSignal(Output4)
SystemWaitFor (Input2)
Code "g4 p1"
While IsMoving
SystemWaitFor (Input2)
Wend
deActivateSignal(Output1)
deActivateSignal(Output2)
deActivateSignal(Output3)
deActivateSignal(Output4)
Exit Sub
End If

End Sub
Main

( jest to stara wersje do obsługi jednego imaka wersja z drugim
imakiem ma osiem sygnałów wyjścia )
Makro działa ale ma swoje słabe punkty jednym z nich jest to że w przypadku
złego zaklemowania makro cały czas czeka na sygnał zwrotny po krótkiej chwili
wybija bezpiecznik silnikowy , drugim mankamentem jest to że gdy w czasie
trwania makra naciskam start makro nie czeka na sygnał zwrotny a program kontynuowany jest dalej.
Chciałbym żeby sygnał wyjęcia był aktywny do momentu otrzymania sygnału
wejścia ( zwrotnego ) ale nie dłużej niż czas jaki sam ustalę , jak również
interesuje mnie wy eliminowanie drugiego problemu jakim jest brak
oczekiwania na sygnał wejścia w przypadku naciskania startu.

BARDZO PROSZĘ O POMOC I POZDRAWIAM.



Tagi:


margor
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 327
Rejestracja: 24 lut 2005, 09:20
Lokalizacja: Warszawa

#2

Post napisał: margor » 13 sty 2013, 15:39

Witam, widzę że kolega dalej męczy swoją machinę :)
Niestety także spotkałem sie z tym problemem. Co prawda istnieje komenda "wait for signal xxx" gdzie xxx jest konkretnym wejściem, ale nie działa. Tak jakby system jej nie widział. Jest to bardzo niebezpieczne. Zdarza się ,że PC nie uruchamia makra M6 ( tak jak by go nie było w G- kodzie), tylko leci dalej z programem. Po kilku niedoszłych i jednej poważnej kraksie, wyczarowałem oto taki sposób. Po komendzie m6 txxx następna jest m1 - czyli stop programu. Aby "popchnąć" dalej program, to sterownik PLC obsługujący głowicę narzędziową wysyła sygnał start do PC (dopiero po zakończonej wymianie narzędzia). Jeśli więc zdarzy się, że pecet "zapomni" wysłać do PLC aby wymienił narzędzie, to nie ma odpowiedzi zwrotnej (sygnału start).
A na koniec, pochwalę się nową głowicą narzędziową w swoim sprzęcie. Teraz jest sześć narzędzi i ... jest wielka kicha. Niestety nie ma rzeczy idealnych, długie narzędzia przeszkadzają. Więc teraz są dwa imaki, stary siedzi z tyłu suportu. O! Reszta też przeszła lifting, nowe osłony, serwonapędy delty, dotykowy ekran itp.

Pozdrawiam Marek.
Załączniki
Fotka108.jpg
Fotka108.jpg (125.07 KiB) Przejrzano 2004 razy
Fotka109.jpg
Fotka109.jpg (96.61 KiB) Przejrzano 1993 razy
Fotka117.jpg
Fotka117.jpg (88.89 KiB) Przejrzano 2000 razy


Autor tematu
fizyk19
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 18
Rejestracja: 22 maja 2008, 09:05
Lokalizacja: polska

#3

Post napisał: fizyk19 » 13 sty 2013, 20:34

Tutaj muszę dodac małe sprostowanie , od czasu kiedy makro zostało napisane
zresztą przy bardzo dużej pomocy kolegi "margor" nic więcej nie kombinowałem
przez ten czas pomimo niedoskonałosci samego makra maszyna produkowała
bez większych zastrzeżeń z mojej strony problemy z wymianą narzędzi zdarzały
się bardzo bardzo rzadko.
Niestety w obecnym czasie maszyna zmienia właściciela i nie chce
aby przyszły właściciel miał jakikolwiek zastrzeżenia .
Ja kupiłem inną tokarkę z bardzo podobnym rozwiązaniem imaka (imak tarczowy )jak kol "margor"
z tą różnicą że u mnie są oprawy VDI50.
A tu jeszcze załączam aktualne makro na dwa imaki;

Sub Main()

NewTool = GetSelectedTool()
OldTool = GetCurrentTool()
If (NewTool >8) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
SystemWaitFor (Input3)
While IsMoving
Wend
Exit Sub
End If
If (NewTool=0) Then
Code "m30"
End If

If (NewTool = 1) Then
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output7)
ActivateSignal(Output11)
SystemWaitFor (Input2)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool = 2) Then
deActivateSignal(Output7)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output8)
ActivateSignal(Output11)
SystemWaitFor (Input2)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool = 3) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output10)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output9)
ActivateSignal(Output11)
SystemWaitFor (Input2)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool = 4) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output10)
ActivateSignal(Output11)
SystemWaitFor (Input2)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If


If (NewTool = 5) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output12)
ActivateSignal(Output11)
SystemWaitFor (Input4)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool = 6) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output12)
deActivateSignal(Output14)
deActivateSignal(Output15)
ActivateSignal(Output13)
ActivateSignal(Output11)
SystemWaitFor (Input4)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool = 7) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output13)
deActivateSignal(Output12)
deActivateSignal(Output15)
ActivateSignal(Output14)
ActivateSignal(Output11)
SystemWaitFor (Input4)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

If (NewTool =8) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output12)
ActivateSignal(Output15)
ActivateSignal(Output11)
SystemWaitFor (Input4)
Code "g4 p0.5"
While IsMoving
Wend
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
Exit Sub
End If

End Sub
Main


dziabi3
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 874
Rejestracja: 13 sie 2009, 16:15
Lokalizacja: xxx

#4

Post napisał: dziabi3 » 13 sty 2013, 21:25

ło matko niema żadnych zabezpieczeń ale to żadnych

podaj zasady działania magazynu sterownika plc , po prostu opisz jak to działa

niema mowy że mach olej m6 ,

pomogę w miarę czasu wolnego ale obsługa dla 2 magazynów to będzie troszkę myślenia by nie zrobić kuku fięc na szybkie rozwiązanie się nie nastawiaj , napisz czy używasz opcji front i rear

napisz z skąd jesteś
Mach3 + CSMIO = :-) :-) :-)


Autor tematu
fizyk19
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 18
Rejestracja: 22 maja 2008, 09:05
Lokalizacja: polska

#5

Post napisał: fizyk19 » 14 sty 2013, 09:54

Pokrótce opiszę jak działa sam imak , napędzany jest silnikiem elektrycznym ,
załączenie prawych obrotów powoduje jego rozklemowanie a następnie obrót
do momentu najechania do wyłącznika drogowego który jest nieco za pozycją
docelową iw tym czasie następuje zmiana obrotów co powoduje zmianę
kierunku obracania się imaka który dokręca się do pozycji i tam zostaje
zablokowany mechanizmem zapadkowym po czym obracający się nadal
silnik zaklemowuje imak , od strony mechanicznej to tyle.
Nie posiadam sterownika PLC zrobiłem to na elektronice własnego pomysłu
i zestawu przekaźników .
Sam MACH ma za zadanie wystawić odpowiedni sygnał wyjęcia dla
każdego gniazda:
gniazdo nr 1 wyjście 7
nr 2 wyjście 8
nr 3 wyjście 9
nr 4 wyjście 10
nr 5 wyjście12
nr 6 wyjście13
nr 7 wyjście14
nr 8 wyjście15
wyjście nr 11 to dodatkowe zabezpieczenie przed przypadkowym
załączeniem czyli musi być stan wysoki na jednym z pinów
przy porządkowanych do gniazda i na pinie 11 i tylko wtedy następuje
obrót imaka .
Wejście nr4 to sygnał zwrotny który jest podany po zaklemowaniu
imaka.
Ja mam nadzieje że do istniejącego makro da się dodać komendę
która ograniczy max czas jego trwania po czym zatrzyma cykl wyświetlając
komunikat , dodatkowo mozna by było zastąpić polecenie
SystemWaitFor (Inputxxx) czymś innym tak aby w przypadku naciskania
start cykl w czasie trwania m6 mach nie ignorował oczekiwania
na sygnał zwrotny.


dziabi3
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 874
Rejestracja: 13 sie 2009, 16:15
Lokalizacja: xxx

#6

Post napisał: dziabi3 » 15 sty 2013, 21:14

[ Dodano: 2013-01-15, 23:04 ]
Dlaczego to masz tak rozwiązane i dlaczego sygnał sprawdzający jest input 2 potem 3 a potem 4

NewTool = GetSelectedTool()
OldTool = GetCurrentTool()
If (NewTool >8) Then
deActivateSignal(Output7)
deActivateSignal(Output8)
deActivateSignal(Output9)
deActivateSignal(Output10)
deActivateSignal(Output11)
deActivateSignal(Output12)
deActivateSignal(Output13)
deActivateSignal(Output14)
deActivateSignal(Output15)
SystemWaitFor (Input3)


to jest rozbite na 2 imaki ????? to dlaczego sa 3 sygnały wejsciowe?


w dodatku widzę ze to makro nie wybiera ci narzędzia w sensie że nie zmienia jego numeru , pracujesz wo gule na osobnych offsetach narzędzia????

odpowiedz bo prawie kończę pisać!!!!
Mach3 + CSMIO = :-) :-) :-)


Autor tematu
fizyk19
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 18
Rejestracja: 22 maja 2008, 09:05
Lokalizacja: polska

#7

Post napisał: fizyk19 » 16 sty 2013, 15:25

Sygnał input 2 to pierwszy imak input 4 to drugi imak a input 3 to sygnał
od start cykl o ile dobrze pamiętam zrobiłem to tak żeby
w przypadku wybrania nowego offsetu ( numer narzędzia większy od 8 )
nie obracało imakiem np T1004 czyli dziesiąte narzędzie i czwarty offset.


dziabi3
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 874
Rejestracja: 13 sie 2009, 16:15
Lokalizacja: xxx

#8

Post napisał: dziabi3 » 16 sty 2013, 17:06

to zabezpieczenie przed wybraniem nie własciwego numeru narzędzia czaje

ale po co ten start cykl na 3 impucie on tam jest zbędny w takiej sytuacji

maszyna ma się zatrzymać i koniec , poprawiasz numerek narzędzia i startujesz od wymiany narzędzia

napisz mi jeszcze czy imak 1 ma narzędzia 1,2,3,4 a imak 2 ma narzedzia 5,6,7,8 ?????

skrypt taki porządny mam już ukończony tylko muszę usiąść w sobotę i niedziele i poszukać dziur tzn nie zabezpieczonych miejsc
Mach3 + CSMIO = :-) :-) :-)


Autor tematu
fizyk19
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 18
Rejestracja: 22 maja 2008, 09:05
Lokalizacja: polska

#9

Post napisał: fizyk19 » 17 sty 2013, 16:53

To nie jest zabezpieczenie przed wyborem niewłaściwego narzędzia
lecz możliwość wybrania nowego offsetu bez obrotu imaka ,
bo w moim makro wywołując aktualne narzędzie imak i tak się obraca.
Z input 3 wprowadziłem cię w błąd nie jest to start cykl jest to wejście
które ma ustawiony stan niski czyli sygnał jest przez cały czas
wiem że jest to bezsensowne i sprawdzanie tego sygnału można skasować
Jeżeli chodzi o nr narzędzi w imaku 1 i 2 to są one takie jak napisałeś.


dziabi3
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 5
Posty: 874
Rejestracja: 13 sie 2009, 16:15
Lokalizacja: xxx

#10

Post napisał: dziabi3 » 18 sty 2013, 01:22

coś kolega przekombinował

makro m6 ma gdzieś ofset

robisz tak że zakładasz pułapkę na wybranie narzędzia które już jest i w efekcie makro konczy swoje działanie prawie na początku makra a ofset swoją drogą jest wybierany

makro m6 patrzy tylko na T01 reszta ma w du....więc jak napiszesz tak

t0505
a za chwile w g kodzie
t0506

to dostaniesz odpowiedz narzędzie jest już w uchwycie a w rzeczywistosci bedziesz miał już ofset 06


i dlatego nie trzeba tu za wielkiej filozofii a magazyn się nie obraca nie potrzebnie

jak masz skype to zagadamy w sobotę wieczorem

makro już mam zrobione ładne tylko muszę cię troszkę przeszkolić z konfiguracji go
Mach3 + CSMIO = :-) :-) :-)

ODPOWIEDZ Poprzedni tematNastępny temat

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