Makro

Dyskusje dotyczące najpopularniejszego programu sterującego maszynami CNC

Autor tematu
j22
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 4
Posty: 189
Rejestracja: 25 lip 2019, 10:30

Makro

#1

Post napisał: j22 » 17 lut 2023, 12:00

Jak zacząć przygodę z makrami?




qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#2

Post napisał: qqaz » 17 lut 2023, 22:49

tak pisać sobie a muzom to długo będzie.
Najlepiej podejść do problemu takiego który doskwiera, na konkrecie, byle na początek prostym.
A te makra gdzie będą stosowane? Mach? No bo skoro tutaj pytanie. Kolega coś już basic'kiem dotykał? Parę poleceń? Napis na ekranie? Cokolwiek?


Autor tematu
j22
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 4
Posty: 189
Rejestracja: 25 lip 2019, 10:30

Re: Makro

#3

Post napisał: j22 » 19 lut 2023, 09:25

Tak, mach , trochę C++ - ale z nauką u mnie nie ma problemu, tak na początek to chciałbym napisać makro na sondę 3D do swojego małego plotera, pewnie gdzieś są w sieci, ale chciałbym sam, swoje makro


qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#4

Post napisał: qqaz » 19 lut 2023, 10:46

j22 pisze:
19 lut 2023, 09:25
na początek to chciałbym napisać makro na sondę 3D do swojego małego plotera,
taak na poczatek...

NO I NA POCZĄTEK JUZ SCHODY
Propnuję słowniczek który ułatwi projekcję Twoich oczekiwań.

1) Masz tą sondę 3D czy dopiero myslisz o niej
3D bo wytrącona z równowagi - coś ja dotyka - zgłosi ten dotyk który przyszedł
z dowolnej strony dolnej połówki sfery czułości sondy.
Ale odpowiedzią jest tylko impuls kontaktu (zaledwie bo wiecej nie potrafi bo to impuls tylko pik, pik,...) a nie pełna informacja XYZ o wektorze siły (kierunku)
Załózmy że to jest sonda impulsowa 3D

2) to makro ma skanować coś.
Ale skanować przestrzeń, czyli 3D, sondą 3D prowadzoną przez makro zapisujace punkty kontaktu to już poważne wyzwanie
przekraczające raczej sensowność takiego makra (i możliwości pamieciowe komputera. Tylko pamieciowe bo jego szybkość obliczeniowa
wystarczy nawet taka jaką ma najgorszy badziew na pentium).

A skoro poczatek to proponuję skanowanie wysokości Z punktów na określonej płaszczyżnie XY gdzie dokładność odwzorowania
będzie nie lepsza niż średnica kulki na końcu sondy
Powiedzmy że raster siatki będzie równy dwukrotnejśrednicy kulki
Teraz TY co chcesz, jak to sobie wyobrażasz i co z tą sondą.


Autor tematu
j22
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 4
Posty: 189
Rejestracja: 25 lip 2019, 10:30

Re: Makro

#5

Post napisał: j22 » 19 lut 2023, 16:51

Tak, mam już sondę 3D i będzie słuzyć tylko i wyłącznie do badania zera detalu. też myślałem, żeby na początek zrocipomiar wysokości narzędzia, ten temat przewija się bardzo często na forum.
WIĘC ZACZYNAMY?


qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#6

Post napisał: qqaz » 19 lut 2023, 18:59

1) Sygnał z zewnątrz możesz odczytać każdym wejściem. Ale liczy się szybkość z jaką system zareaguje na zmianę stanu
tego wejscia
Zwykłe inputy działają stosunkowo wolno, czasem za wolno.
Do digitalizacji Mach ma przeznaczone specjalnie ustawione programowo wejście nazywane Probe i odpowiednio
programowo skonfigurowaną funkcję wyjściową Digit Trig
Gdzie to przypiszesz to w tabelce we/wy sobie zaptaszczysz. Przypuszczam (bo nie wem) że wtedy Mach zwraca
specjalną uwagę na ich aktualizację
Do badania służy Gkod G31 który uruchamia najazd i oczekiwanie na sygnał z pinu wejściowego
Gdy trafi to sie zatrzymuje a wartość współrzędnych zapisywana jest w rejestrach Macha - od Par 2000 do Par 2005 odpowiednio dla X,Y,,,,C.
Parametry punktu są dokładniejsze od miejsca zatrzymania bo nie wpływa na nie predkość najazdu i rampa hamowania silników.
Punkt zatrzymania jest zawsze trochę dalej niż punkt kontaktu
Wartość zapisywana jest w aktualnych współrzędnych G54,G55... tych które są ustawione.

Chcesz mierzyć koniec narzędzia? Wywołaj zarezerwowane G5xx które ustawiłeś sobie dla pomiaru, gdzie wszystko masz zapisane
a offset długości freza po wyliczeniu wpiszesz bezpośrednio do tabelki narzędziowej.
I masz dla wszystkich G5xx wymiar narzędzia zaktualizowany- tabelka jest współna

Natomiast czym innym jest ustawienie nowego poziomu obróbki po wymianie narzędzia. Tu trzeba wyliczyć z danych:
-jaka jest wysokość czujnika względem zera programu
-jaka jest wartość Z podczas odczytu
Różnica daje poprawkę o ile trzeba przesunąć poziom.
I masz nowe Z=0 dla nowej długości freza.
Pisałeś o C++ to teraz napisz algorytm tych pomiarów. Nawet tak słowami, biorę, dodaję, coś robię albo mnemonikami, w sumie prosta sprawa.

ściągnij program Mach3Screen.exe którym możesz edytować plik ekranu i podglądać treść przycisków - wiesz co
przycisk robi to i zorientujesz się co zawiera polecenie przycisku
W katalogu Macha jest plik ENABLE.HLP - masz podpowiedzi o składni poleceń i przyłady
Masz Macha na kompie? W menu 5,5 lub 5,6 polecenie VB e3ditor lub edit button script podnosi okienko edycyjne w którym wpisany tekst jest możliwy do natychmiastowego sprawdzenia czy działa lub co nie działa bo składnia czy coś.
Tylko żebyś wiedział co wpisujesz bo gdy działa to zadziała i można przydzwonić. Lepiej ćwiczyć nie na maszynie a na biurku z gołym kompem bez maszyny. Też działa.
( Edit button podświetla tylko te przyciski które mają zaznaczoną aktywność w polu edycyjnym - do wykonania.
Jeżeli jest opcja zadziałania predefiniowanego to dostep do przycisku jest tylko prze edytor ekranu).
W sieci jest gdzieś Mach3 V3.x Programmer Reference Draft v0.11a.pdf zobacz polecenia w makrach dla Macha - składnia i przykłady
Podobnie Mach3 G-Code Manual.pdf
CDN


qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#7

Post napisał: qqaz » 19 lut 2023, 23:46

Jednym z wazniejszych poleceń w VB Macha są:
get-cośtam czyli pobierz wartość z parametru, pola numerycznego(DRO), stan leda itd
set-coś tam czyli wpisz wartość lub ustaw odpowiednio cechy obiektu
code"GXX X,Y,,,,,,C" czyli polecenie takie jakie jest realizowane przez MDI ekranu lub w treaści Gkodu załadowanego do wykonania

Specyfika Macha zawiera predefiniowane elementy mające narzuconą numerację. Dotyczy to głównie
DRO - lista numerków przyporządkowujaca dane pole określonej funkcji
LED -lista znaczeniowa co który led określa
BUTTON - lista nr poleceń wykonanych po naciśnieciu przycisku z przyporządkowanym numerem

Chcąc coś zrobić makrem wywołujesz działanie poleceniem np
SetOemDRO(32,20) - właśnie wpisałeś wartość długości dla aktualnego narzędzia ale
SetOemDRO(42,20) - niby też offset długości - odszukaj na liście
Zobacz jakie są zmiany.
a=GetOemDRO(32) - pod a masz zwrócona wartość długości
podnieś z menu na górze "edit button script" czyli w makro będzie DoMenu(5,6) i w okienko wpisz:
a=getoemdro(42)
message"a="&a 'to sie wyświetli w linii komunikatów na ekranie
poćwicz zmieniając nr DRO i wpisywaną wartość o którą się następnie zapytasz

Zielona strzałka na górze okienka uruchomi treść wpisu a po zapisaniu bedzie już to robił jakoprzycisk po naciśnieciu
jeżeli czytasz lub nadpisujesz elementy predefiniowane to stosujesz zapis
setOemDRO(nr,wartość)
getOemDRO(nr)
jeżeli to samo ale na swoich elemntach które wstawiłeś na ekran to wtedy
setUsrDRO(nr,wartość)
getUserDRO(nr)
podobnie z ledami get/set Oem/User LED(nr)(nr,stan) - czytasz/ustawiasz.

Buttony mozna tylko wywołać tak jakby były naciskane
DoButton( 24 ) czyli nacisnąłeś przycisk do referencji osi X - jedzie i szuka krańcówki.
Ale button może zawierać listę poleceń, wręcz cały program do wykonania

Są jeszcze etykietki - Label umieszczanne na ekranie podczas edycji pliku.
To co wpiszesz w pole tekstowe będzie stało jako napis
Ale Mach ma kilka myków - jeżeli w polu tekstowym wpiszesz:
"TICKERnr" to będzie tekst przewijany po poleceniu SetTicker(nr,"iojweofih9ouh9uihoijhoiqwrg wlkorg")
"UserLabelnr" wyświetli ststycznie tekst poleceniem SetUserLabel(nr,"a qq? Czy to TY?")
Można też odczytać z etykiety co wpisane Get......Label(nr)
Jest jeszcze kilka kodowych wpisów formatujacych zachowanie się etykiety. Czytaj.

Dodane 1 godzina 36 minuty 41 sekundy:
Program działania
To właściwie tylko Gkod czyli plik tekstowy gdzie linijka po linijce realizowane jest działanie wg zapisu poleceń
typu Gxx lub Mxxx
Wykonywany jest po kolei jak ma napisane, żadnych warunków logicznych ( oprócz kilku typu warunkowy M1, skokowo po 1 linii itp)
jedynym ułatwieniem są zmienne które obsługiwane na poziomie Gkodu pozwalają na skrócenie zapisu działania programu.
Zamiast 10x wpisywać linię ruchu
G1x1
G1x2
.
.
.
G1x10
można zastąpić zapis wywołaniem 10x podprogramu ze zmianą typu
.
O1
G1x#1
#1=[#1+1]
M99

Zmienne przydatne w programie i w treści makra mają dostepną wartość tylko w obrębie wywołanego makra.
Wywołanie drugi raz uruchomi makro z od nowa nadpisanymi poczatkowymi lub pustymi wartościami zmiennych.
Jezeli trzeba zapamietać stan lub wartość to trzeba korzystać z ekranu czyli edytować go wstawiajac kilka podręcznych DRO i LED o znanych numerach
Wtedy makro które wykonuje działanie i powinno zostawić wartość dla nastepnego makra bedzie zawierać
setUserDRO(nr,wartość)
lub stan wskaźnika
setuserLed(nr,stan)
Kolejne makro może wtedy przechwycić pozostawioną wartość
a=getUserDRO(nr)
Dodatkowo Mach po wyłaczeniu moze pamiętać wartości w DRO na ekranie i ta bedzie wtedy ponownie dostepna przy kolejnym załaczeniu.
np druga zmiana wie ile było czegoś na zmianie pierwszej
Poleceniem sekwencyjnego nadpisywania setUserDRO(nr) mozna realizować ilość petli wykonanych makrem lub głównym programem warunkować działanie zależnie od npDRO i inne co tylko do głowy przyjdzie.
Makro ma mozliwość prowadzenia logiki z wszelkimi warunkami,skokami, prowadzenia obliczeń wstepnych oraz bieżacych.
Mach jest tylko realizatorem poleceń wprost wysłanych do wykonania.
To jest główna zaleta tego programu że ma banalnie proste środowisko programistyczne a jednocześnie jest łatwo dostepne w trakcie realizacji.
Przy pewnej wprawie pisania makra ciężar realizacji ruchu spoczywa na zapisach makra a Gkod to tylko lista wywołań kolejnych Mxx korzystających z depozytów w programie/ekranie głównym.

Makrem obsłuzysz też pliki na dysku, tworzenie, porządkowanie, formatowanie, no wszystko co jest dostepne narzędziami VB.
Tu warto wspomniec o procedurze zaszytej w Machu:
Gdy program zacząć M40 to uruchomi się otwarcie pliku skanowania do którego automatycznie zapisywane będą współrzędne punktu
kontaktu sondy podczas najazdu G31

Makro przydatne jest gdy dochodzi do takich zadań jak skanowanie i formatowanie chmury punktów do postaci czytelnej dla odbiorcy.
Np (z własnego podwórka)
skan wysokościowy powierzchni przenoszony do Acad'a aby w nim uzyskać polipowierzchnie powinien zawierać punkty w kolejności takiej jak
tworzona jest pojedyncza powierzchnia podczas edycji w Acad:
czyli P1(x,y,z),P2(x,y,z),P3(x,y,z),P4(x,y,z)enter ( jedna karetka bo to powoduje wstawienie w Acad takiej powierzchni.
I kolejne grupy punktów co łłącznie utworzy obraz skanowanej powierzchni jako suma elemntarnych fragmentów polipowierzchni gotowej do frezowania.
Warto to zrobić odpowiednio formatujacym skanowanie makrem w Machu zamiast formatować chmurę w pliku gotowego skanu.


Program/działanie uruchomisz ładując plik Gkodu, albo naciskając przycisk na ekranie w którym wpisałeś polecenia
albo wywołujac makro poleceniem Mxxx które w swojej treści zawiera to samo co przycisk.
Różnica jest taka że przycisk naciska operator a działanie pod makrem możesz wywołać zapisem w Gkodzie
Operator też może to samo wpisując w linię MDI:
"Mxx"
co spowoduje uruchomienie tego co zawiera plik Mxx.

To teraz można już spróbować coś napisać, jakieś makro, np jaki długi jest ten frez


qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#8

Post napisał: qqaz » 21 lut 2023, 21:10

skoro sobie a muzom pora skończyć tą inwokację
Jeszcze dla uzupełnienia o tych operacjach na plikach.
Mozna na nich wszystko to co dos lub winda zrobić.
Tylko że ci co wióry robią nie grzebią w systemach (oprócz takiego jednego)
Ale korzystają z Wizards gdzie kreowanie Gkodu w tych pomocnikach jest wręcz szczątkowe- trzeba tam powstawiać nagłówki,
linie z funkcjami przygotowawczymi, wywołania narzędzi, obrotów ... itd, itd.
Sama ściezka to trochę mało jako pomoc w pisaniu Gkodu
Nawet klawisz "wyślij" albo "post G Code"który pisze treść Gkodu też jakoć kulawo działa.
Trzeba sobie poprawić.
Otwieramy plik ekranu kreatora i klikamy button "wyślij" a zawartość pola do wykonania kopiujemy do swojego pliku tekstowego

Sub Main()DoOEMButton (169).... itd
z kwadracikami ( pomiedzy poleceniami - u mnie się tak robi, inna trzczionka czy coś)
ale gdy w wmiejscu tych kwadracików wstawić enter to się robi widoczne jak trzeba

Sub Main()
DoOEMButton (169)
psuw = Abs(GetOEMDRO(1070))
posuwfinisch = Abs(GetOEMDRO(1083))
toolfi = Abs(GetOEMDRO(1071)).
.
.
W pewnym momencie jest linia
.
OpenTeachFile "będę toczył.tap"
Code "G18 G40 G49 G90 G94 G80"
Code "M3"
Code "G0 X" & (XStart - odskok) * fi-dia & " Z" & ZStart + odskok
Code "F" & posuw

dalej mogą być też obliczenia lub warunki

if a>0 then
a=a+20
end if

code"G00 x"&a

i tak dalej co oznacza że
openfile zakłada na dysku w domyślnym katalogo plik o nazwie "będę toczył.tap"
a następnie wszystko co rozpoczyna się linią
code "...................
będzie wpisane do tego pilku
treść wpisu zawiera się pomiędzy cudzysłowami i ewentalnym uzupełnieniem wartością lub argumentem za znakiem &

Na końcu wypada zamknąć otwarty plik poleceniem

Code "M5"
Code "M30"
CloseTeachFile

i na dysku jest Gkod pod nazwą będę toczył.tap który mozna uruchomić.

To oferuje standardowy prymityw ofewrowany w Wizards Macha. Mało.

Jezeli jednak trzeba coś więcej to można to samo co jest tylko w nastepnym kroku mieć

AppendTeachFile "będę toczył.tap"

który nie założy od nowa pliku zamazując jego treść tylko zacznie dopisywać do istniejącego
Oczywiście wtedy ten uzupełniany nie powinien kończyć się
Code "M5"
Code "M30"
czy innymi końcowymi liniami poprawnego Gkodu bo wyjdzie głupi kod ale taki był napisany.

I czy plik był utworzony czy otworzony to powinien być zamkniety

CloseTeachFile

Po co to?
Bo Mach3Screen.exe otwierasz plik wizarda
na ekranie operacji dodajesz klawisz np "dodaj do pliku"
treść istniejącego klawisza "post G Code" kopiujesz na razie do notatnika
z treści wyrzucasz wszystkie jinie przygotowawcze i końcoew zostawiając tylko suchę polecenia obróbcze
co zostało wklejasz do utworzonego klawisza
i tak na każdym ekranie obróbki.
No io trzeba zapisać te poprawki aby Mach przeczytał nową treść w wywoływanym Wizardzie

Teraz wywołujesz pod Machem Wizarda, klikasz rodzaj obróbki klikasz dodaj do pliku
nastepny, inny rodzaj obróbki i ponownie klawisz dodaj do pliku
itd
w efekcie na dysku jest plik obróbczy z treścią wszystkich dodawanych zabiegów czyli rdzeń z ruchami Gkodu

Warto jeszcze jakoś rozpocząć ten plik, nagłówek, funkcje przygotowawczed i to co tam trzeba

W pliku Wizarda na głównej stronie mozna dołożyć klawisz "nowy plik" którym rozpocząć można wpis tego cvo zawsze jest na początku
Treść tego klawisza może być taka:

OpenTeachFile "qq tokarka.tap" [0]
code "(***qq Początek***)"
code "(" & Date() & " " & Time() & ")"
Open "TurnAddons\qqpliki\startnagłówek.tap" As #2 [1]
Do While Not EOF(2)
Line Input #2, filedat
code filedat
Loop [2]
CloseTeachFile

i dalej kontynuować dopisywanie tego co trzeba z używanych ekranów operacji

Taki nagłówek jest wygodny bo wszelkie zmiany w trześci początkowej mogą być robione dla wszystkich tworzonych plików
przez zmianę zawartości pliku

startnagłówek.tap

Reść jest z nie go linia po lini kopiowana 1:1 do pliku obróbki poleceniem od [1] do [2] (tylko w treści klawisza nie ma tych [1] [2])

I dlatego wcześniej podnosiłem zasadność poznania Mach3Screen.exe i poleceń na plikach dostepnych i stosowanych w VB i makrach sterujących tym głupkiem Machem.
Bo ten zrobi co się mu tam wpisze.

Tu na forum wcześniej inni użytkownicy znajacy dużo lepiej VB też udostępniali funkcjonalności. Warto poszukać np wybór z checklisty dla stałych programów

Dodane 2 minuty 46 sekundy:
oczywiście te linijki z kodem to tak aby tylko zaznaczyć że coś takiego się pokazuje. Tylko ten fragment z otwarciem i kopiowaniem startnagłówka .tap jest poprawny

Dodane 1 minuta 44 sekundy:
a i oczywiście nazwy plików powinny być spójne jak otwieramy czy zakładamy plik A to dopisujemy też do pliku A


Autor tematu
j22
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 4
Posty: 189
Rejestracja: 25 lip 2019, 10:30

Re: Makro

#9

Post napisał: j22 » 21 lut 2023, 21:36

u...dożo tych materiałów, dużo wiedzy, trzeba będzie to przestudiować, dzieki na pewno się przyda


qqaz
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 10
Posty: 2123
Rejestracja: 28 sty 2007, 16:12
Lokalizacja: Łódź

Re: Makro

#10

Post napisał: qqaz » 02 mar 2023, 12:45

nic sie nie dzieje to takie ptaszki na tym debilnym machu

otworzyć Ports&Pins zakladka input signals
zaptaszczyć na aktywne wejścia:
input 1 i symulację Hotkey =76
input 2 i symulację Hotkey = 80
nie potrzeba przypisywać pinów i portu

makro M201.m1s zapisać do katalogu makra używanego profilu
wczytać program qq lewo prawo.txt
uruchomić
Gdy zacznie się krótko ruszać nacisnąć klawisz L i po chwili puścić
poczekać aż znowu się ruszać będzie na krótko i wcisnąć P
Można? Głupim Machem dla debili?


M201.m1s
if IsActive(input1) then
setvar(0001,-20)
a=0
end if
if Isactive(input2) then
setvar(0001,20)
b=0
end if
if a+b>0 then
setvar(0002,3000)
else
setvar(0002,200)
end if


qq lewo/prawo.txt
g90
#1=1
#2=1
M201
f#2
m3
G0x0y0
G01x#1
M47
m30

Dodane 3 minuty 33 sekundy:
bo ktoś kiedyś się pytał czy Gkod w Machu może być wykonywany warunkowo
No to tu takie "rozgałezienie "zależnie od klawiszy.

Dodane 8 minuty 52 sekundy:
to że się rusza krótko albo długo w wybraną stronę to tylko aby pokazać.
Gdyby była potrzeba to całą sekwencji można uruchomić gdzie określona trajektoria i Gkod na niej będzie wybierany na bieżąco np
klawisz 1 i jedzie w lewo robić kółka
klawisz 2 jedzie na półkę złapać kubek
klawisz 3 oddaje kubek debilowi
brak klawisza to wióry wymiata.
Co tyko do łba debilowi przyjdzie.

ODPOWIEDZ Poprzedni tematNastępny temat

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