Het "Bouwen" van Macro's voor USBCNC
Moderator: Moderators
Re: Het "Bouwen" van Macro's voor USBCNC
Arie, mijn complimenten! Ik heb zojuist USBCNC als taal in Wordpad++ geÏnstalleerd en het véél duidelijker.
Alle parameters zijn in de declaraties rood, en als ze tussen [ ] staan zijn ze bruin. Verder heb ik er nog niet veel mee gedaan, maar dat gaat veranderen dankzij jouw cursus!
KeesK
Alle parameters zijn in de declaraties rood, en als ze tussen [ ] staan zijn ze bruin. Verder heb ik er nog niet veel mee gedaan, maar dat gaat veranderen dankzij jouw cursus!
KeesK
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Graag gedaan!.. Ik vind Notepad ++ een waanzinnig goed programma met deze "Taal-plugins"
programmeren is leuk!.. dat je dat maar nooit vergeet!
programmeren is leuk!.. dat je dat maar nooit vergeet!
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Nog even een Hintje voor het maken van Macro's
als je de coordinaten voor een bewerking in je dialoog hebt ingevoerd, tel dan een millimeter of 20 bij je veilige hoogte op, en laat je machine over 3 assen naar die positie bewegen alvorens naar veilige hoogte af te dalen.
Hiermee voorkom je dat je bij het "aanlopen"van je startcoordinaat een aanvaring krijgt met je opspanmiddelen..
een ander geintje: sla de parameters #5001, #5002 en #5003 ( actuele X, Y en Z posities ) op in andere parameters, dan kun je die gebruiken om weer naar je startpositie terug te keren..
Dan loopt je machine terug naar waar je de macro gestart hebt, en blijft ie niet 1mm boven je werk staan als je klaar bent.. zo kun je de sleden ook weer bewegen zonder risico van aanvaringen met je opspanmiddelen..
Op de draaibank heb ik dit ook toegepast, zo kan ik na een bewerking meteen meten, zonder dat ik eerst de slede moet verplaatsen.. ik zorg er gewoon voor dat ik start op een positie die meten aan het werkstuk mogelijk maakt..
als je de coordinaten voor een bewerking in je dialoog hebt ingevoerd, tel dan een millimeter of 20 bij je veilige hoogte op, en laat je machine over 3 assen naar die positie bewegen alvorens naar veilige hoogte af te dalen.
Hiermee voorkom je dat je bij het "aanlopen"van je startcoordinaat een aanvaring krijgt met je opspanmiddelen..
een ander geintje: sla de parameters #5001, #5002 en #5003 ( actuele X, Y en Z posities ) op in andere parameters, dan kun je die gebruiken om weer naar je startpositie terug te keren..
Dan loopt je machine terug naar waar je de macro gestart hebt, en blijft ie niet 1mm boven je werk staan als je klaar bent.. zo kun je de sleden ook weer bewegen zonder risico van aanvaringen met je opspanmiddelen..
Op de draaibank heb ik dit ook toegepast, zo kan ik na een bewerking meteen meten, zonder dat ik eerst de slede moet verplaatsen.. ik zorg er gewoon voor dat ik start op een positie die meten aan het werkstuk mogelijk maakt..
Re: Het "Bouwen" van Macro's voor USBCNC
Ech nie !Arie Kabaalstra schreef:Graag gedaan!.. Ik vind Notepad ++ een waanzinnig goed programma met deze "Taal-plugins"
programmeren is leuk!.. dat je dat maar nooit vergeet!
Proggen is top en dan met NP++ is het simpeler en overzichtelijk.
Doe er zelf alles mee van C++, PHP, HTML, ASP, licensefiles, txt en cnc files.
Ik ga de NP++ file proberen en kijken wat eruit komt, zal ongetwijfeld ok zijn en positieve kritiek zal zeker gepost worden als ik ze vind
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Het "Bouwen" van Macro's voor USBCNC, deel 2, de valkuilen.
Goeiemiddag en welkom bij het 2de deel uit de educatieve reeks Het "Bouwen" van Macro's voor USBCNC.
de Valkuilen.. wat bedoel ik daarmee?.. welnu.. een Algoritme moet waterdicht zijn.. er moet geen speld tussen te krijgen zijn, anders ga je gekke dingen krijgen.. Voorbeeldje voor de eerste valkuil:
Erik's Macrootje voor het frezen van ronde kamertjes, Niet om Eriks programmeerwerk ondersteboven te schoffelen, integendeel zelfs, maar dit voorbeeld geeft aan hoe makkelijk het is om een "Foutje" te maken...
Wat gaat hier mis dan?.. het volgende
we vullen in de dialoog voor de diepte in: 10 mm, en voor de diepte stap 3 mm... en nu komt het.. Het While statement stelt: zolang de einddiepte Groter of gelijk is, ga je verder.. dus.. we beginnen op 3 mm diep.. geen probleem.. 10 > 3 tenslotte.. 6mm?.. Nee.. ook prima want ook 10 > 6, dus naar 9 mm diep en ook hier.. 10 > 9.. volgende laag.. 12.. hee... wat nu want 10 > 12?.. dachetnie... dus dan stopt ie keurig.. de frees gaat omhoog.. en terug naar het midden.. maar... JUIST!!!.. het kamertje is MAAR 9 mm DIEP!!..
Hoe dit nu op te lossen?.. "Iesse siempel no?..".. heel simpel..
Zolang de waarde voor de Z-Waarde nog hoger ligt dan de eindwaarde, gaat ie dieper, en voert ie de routine uit, is ie gelijk, dan gaat ie naar zijn einddiepte en voert ie de routine uit.. , wordt ie "dieper", dan springt ie uit zijn routine, en daar staat dan.. Maak de waarden gelijk, en loop de routine nog een keertje af.. zo gaat ie in het voorbeeld dus IN de While loop naar 3,6 en 9 mm diep, dan wil ie naar 12 diep, dat past niet meer in de voorwaarde voor de While, dus maakt ie de parameter voor de diepte gelijk aan de ingegeven einddiepte, en voert em dan nogmaals uit..
de bewegingen die nu nog in de While-loop staan, moet je dus WEL even in een aparte Sub gooien.. dus je krijgt dan DIT:
Ik heb de veranderde delen een stukje uit laten steken.. de "While is gestript van alle bewegingen", die zitten nu in Sub Rondje, 't enige wat we in de While nog doen is de controle van de waarden, en het aanroepen van de Sub, waarna de waarde wordt "geactualiseerd".. als de While niet meer voldoet aan zijn voorwaarde, dan stapt ie eruit, en struikelt ie welhaast over de regel dat ie de diepte gelijk moet maken met de eindwaarde, en dan Sub Rondje NOG een keertje uitvoeren..
Nog een leuke.. in het dialoogje wordt gevraagd naar de diameter van het gereedschap en die wordt opgelsagen in #53.. en dan in de Code staat:
zal ik je eens een geheimpje verklappen?.. in de Tooltabel staat toch ook de diameter van je gereedschap?.. dat wil zeggen.. als je de moeite neemt om dat in te vullen.. en dat moet je eigenlijk wel doen...
#5009 is de parameter waar de toolradius in staat van het actuele gereedschap.. dus.. overal waar #58 staat in Eriks Macrootje, kunnen we ook invullen #5009, en dan kunnen we #53 uit de dialoog halen, en gewoon vergeten.. de machine "Weet" al wat voor "Frees" ie in de kuip heeft..
de Valkuilen.. wat bedoel ik daarmee?.. welnu.. een Algoritme moet waterdicht zijn.. er moet geen speld tussen te krijgen zijn, anders ga je gekke dingen krijgen.. Voorbeeldje voor de eerste valkuil:
Code: Selecteer alles
sub cirkel
DlgMsg "Voer gegevens in bovenkant werkstuk = Z0" Xhartcirkel 50 Yhartcirkel 51 Cirkelradius 52 Freesdiameter 53 Diepte 54 Zstap 55 Feed 56
msg "Beweeg naar veilige hoogte"
G17
G61
G01 Z1
msg "Beweeg naar hart cirkel"
G01 x[#50] Y[#51] F[#56]
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
msg "Beweeg naar indaalpunt"
#58 = [#53 / 2]
#59 = [#50 + #52 - #58]
#60 = [0 - #55]
#61 = [#50 - #52 + #58]
#62 = [0 - #61]
#63 = [0 - #52 + #58]
#64 = [0 - #54]
#65 = [#52 - #58]
while [#60 >= #64]
G01 X[#59] Y[#51] F[#56]
G01 Z[#60] F20
msg "Frezen van cirkel"
G2 X[#61] Y[#51] I[#63] F[#56]
G2 X[#59] Y[#51] I[#65] F[#56]
#60 = [#60 - #55]
endwhile
G01 Z1
G01 x[#50] Y[#51] F[#56]
gosub uit
endsub
sub uit
msg "Bewerkingen klaar"
M5
M2
endsub
Wat gaat hier mis dan?.. het volgende
Code: Selecteer alles
while [#60 >= #64]
Hoe dit nu op te lossen?.. "Iesse siempel no?..".. heel simpel..
Code: Selecteer alles
while [#60 >= #64]
ROEP HIER EEN SUBROUTINE AAN
endwhile
en dan?..
#60=#64
ROEP HIER NOG EEN KEER DE SUBROUTINE AAN
de bewegingen die nu nog in de While-loop staan, moet je dus WEL even in een aparte Sub gooien.. dus je krijgt dan DIT:
Code: Selecteer alles
sub cirkel
DlgMsg "Voer gegevens in bovenkant werkstuk = Z0" Xhartcirkel 50 Yhartcirkel 51 Cirkelradius 52 Freesdiameter 53 Diepte 54 Zstap 55 Feed 56
msg "Beweeg naar veilige hoogte"
G17
G61
G01 Z1
msg "Beweeg naar hart cirkel"
G01 x[#50] Y[#51] F[#56]
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
msg "Beweeg naar indaalpunt"
#58 = [#53 / 2]
#59 = [#50 + #52 - #58]
#60 = [0 - #55]
#61 = [#50 - #52 + #58]
#62 = [0 - #61]
#63 = [0 - #52 + #58]
#64 = [0 - #54]
#65 = [#52 - #58]
while [#60 >= #64]
goSub rondje
#60 = [#60 - #55]
endwhile
#60 = #64
GOSUB rondje
G01 Z1
G01 x[#50] Y[#51] F[#56]
gosub uit
endsub
sub rondje
G01 X[#59] Y[#51] F[#56]
G01 Z[#60] F20
msg "Frezen van cirkel"
G2 X[#61] Y[#51] I[#63] F[#56]
G2 X[#59] Y[#51] I[#65] F[#56]
endSub
sub uit
msg "Bewerkingen klaar"
M5
M2
endsub
Nog een leuke.. in het dialoogje wordt gevraagd naar de diameter van het gereedschap en die wordt opgelsagen in #53.. en dan in de Code staat:
Code: Selecteer alles
#58 = [#53 / 2]
#5009 is de parameter waar de toolradius in staat van het actuele gereedschap.. dus.. overal waar #58 staat in Eriks Macrootje, kunnen we ook invullen #5009, en dan kunnen we #53 uit de dialoog halen, en gewoon vergeten.. de machine "Weet" al wat voor "Frees" ie in de kuip heeft..
Re: Het "Bouwen" van Macro's voor USBCNC
Wederom dank Arie voor alle info. Ik ga me nu ook verdiepen in de makro's. De notepad++ en language files werken prima.
Anyway, dankzij de correctie op Erik's makro heb je ons verlicht hoe het wel moet en kan.
Ik weet niet of dit de post is waarin ik dat moet melden (dit is een tutorial dus corrigeer me als dit de verkeerde plek is) maar in de Zero tool tip example makro die nu standaard ingebakken zit in USBCNC zit een 'bug'. Nou ja bug... Iets wat misschien of gecorrigeerd of in de makro zelf als tekst bijgevoegd zou mogen worden om verwarring te voorkomen voor met name beginners zoals ik.
Namelijk het regeltje: g38.2 z-100
Als leek test ik mijn code nogal eens super veilig 'hoog in de lucht' . Ik zet de kop van de freesbank hoog en nul de z-as.Dan laat ik de g-code draaien. Vervolgens laat ik de kop een flink stuk zakken. Enkele keren bij het uitvoeren van de Zero tool tip makro (f11,f1) ging de kop niet in stapjes omlaag om de toolsetter te benaderen maar omhoog. Ik snapte daar niets van totdat ik de makro bekeek.
Ik nulde namelijk voor een dry-run hoog en liet vervolgens de kop een flink stuk dalen om het nulpunt van het werkstuk met de toolsetter te calibreren. Mijn frees stond dan net boven de toolsetter en de z-as stond bijvoorbeeld op -120 zonder dat ik me daar van bewust was. Volgens dat g38.2 z-100 regeltje wilde de kop terug naar -100 en ging dus omhoog. Ik snapte daar de ballen van maar nu wel.
Kortom, ik kan dat natuurlijk heel makkelijk zelf aanpassen maar leken zoals ik snappen dat in de eerste instantie niet. Het zou opgelost kunnen worden met tekst in de makro zo van: Adjust z-100 to about 10 mm less then your z-axes software limit. Of misschien heb jij nog een briljant idee? Geen idee of de software limits automatisch uitgelezen kunnen worden uit het ini-bestand en dynamisch in de makro geplaats kunnen worden?
David
Anyway, dankzij de correctie op Erik's makro heb je ons verlicht hoe het wel moet en kan.
Ik weet niet of dit de post is waarin ik dat moet melden (dit is een tutorial dus corrigeer me als dit de verkeerde plek is) maar in de Zero tool tip example makro die nu standaard ingebakken zit in USBCNC zit een 'bug'. Nou ja bug... Iets wat misschien of gecorrigeerd of in de makro zelf als tekst bijgevoegd zou mogen worden om verwarring te voorkomen voor met name beginners zoals ik.
Namelijk het regeltje: g38.2 z-100
Als leek test ik mijn code nogal eens super veilig 'hoog in de lucht' . Ik zet de kop van de freesbank hoog en nul de z-as.Dan laat ik de g-code draaien. Vervolgens laat ik de kop een flink stuk zakken. Enkele keren bij het uitvoeren van de Zero tool tip makro (f11,f1) ging de kop niet in stapjes omlaag om de toolsetter te benaderen maar omhoog. Ik snapte daar niets van totdat ik de makro bekeek.
Ik nulde namelijk voor een dry-run hoog en liet vervolgens de kop een flink stuk dalen om het nulpunt van het werkstuk met de toolsetter te calibreren. Mijn frees stond dan net boven de toolsetter en de z-as stond bijvoorbeeld op -120 zonder dat ik me daar van bewust was. Volgens dat g38.2 z-100 regeltje wilde de kop terug naar -100 en ging dus omhoog. Ik snapte daar de ballen van maar nu wel.
Kortom, ik kan dat natuurlijk heel makkelijk zelf aanpassen maar leken zoals ik snappen dat in de eerste instantie niet. Het zou opgelost kunnen worden met tekst in de makro zo van: Adjust z-100 to about 10 mm less then your z-axes software limit. Of misschien heb jij nog een briljant idee? Geen idee of de software limits automatisch uitgelezen kunnen worden uit het ini-bestand en dynamisch in de makro geplaats kunnen worden?
David
Laatst gewijzigd door didado op 01 nov 2010 19:02, 1 keer totaal gewijzigd.
Re: Het "Bouwen" van Macro's voor USBCNC
Je heb je best gedaan,we kunnen hier nog een hoop leren.
Arian
Arian
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
@ Didado,
wat de toolsetter macro betreft.. even loeren waar wat misgaat.. Ja..
't is heel eenvoudig op te lossen.. en ik zal dit ook even doorgooien naar Bert..
eigenlijk... moet Bert Billekoek!.. er zit namelijk een foutje in.. maar ook dat is inmiddels opgelost.. komtiedan he?..
Vervang de bestaande SUB voor de bovenstaande..
wat er misging is, zoals je ook terecht opmerkte, de Z-as wil gaan proben naar -100, maar als je op -120 staat, dan gaat ie vrolijk omhoog!.. Juist..
dus.. wat ik heb gedaan is het volgende.. de 100 mm probe-move is nu met G91 geprogrammeerd.. dus INCREMENTEEL.. hij gaat ongeacht zijn positie 100 mm naar BENEDEN.. altijd goed..
de hoogte van je touch-sensor moet je nog wel in de Macro opgeven, Bert werkt met een messing blokje, ik werk met een taster, maar na het tasten gaat ie nu niet meer naar Z14, maar incrementeel 2 mm omhoog..
da's de meest elegante oplossing.. meer moet dat niet zijn tenslotte..
Ik heb Bert inmiddels ingelicht over dit foutje..
als't goed is werkt het nu naar behoren..laat het maar even weten.. als het niet werkt, dan wil ik het ook horen natuurlijk..
Ik ben door schade en schande wijs geworden in de wereld van programmeren.. door mijn schande hier toe te geven, kan ik mogelijk anderen voor schade behoeden.. :)Anyway, dankzij de correctie op Erik's makro heb je ons verlicht hoe het wel moet en kan.
wat de toolsetter macro betreft.. even loeren waar wat misgaat.. Ja..
't is heel eenvoudig op te lossen.. en ik zal dit ook even doorgooien naar Bert..
eigenlijk... moet Bert Billekoek!.. er zit namelijk een foutje in.. maar ook dat is inmiddels opgelost.. komtiedan he?..
Code: Selecteer alles
Sub user_1
msg "user_1, Zero Z (G92) using toolsetter"
(Start probe move, slow)
f30
g38.2 G91 z-100
(Move back to touch point)
g0 G90 z#5063
(Set position, the measuring device is 12mm in height, adapt for your measuring device)
G92 z12
(move 2 mm above measuring device)
g0g91 z2
G90
m30
Endsub
wat er misging is, zoals je ook terecht opmerkte, de Z-as wil gaan proben naar -100, maar als je op -120 staat, dan gaat ie vrolijk omhoog!.. Juist..
dus.. wat ik heb gedaan is het volgende.. de 100 mm probe-move is nu met G91 geprogrammeerd.. dus INCREMENTEEL.. hij gaat ongeacht zijn positie 100 mm naar BENEDEN.. altijd goed..
de hoogte van je touch-sensor moet je nog wel in de Macro opgeven, Bert werkt met een messing blokje, ik werk met een taster, maar na het tasten gaat ie nu niet meer naar Z14, maar incrementeel 2 mm omhoog..
da's de meest elegante oplossing.. meer moet dat niet zijn tenslotte..
Ik heb Bert inmiddels ingelicht over dit foutje..
als't goed is werkt het nu naar behoren..laat het maar even weten.. als het niet werkt, dan wil ik het ook horen natuurlijk..
Re: Het "Bouwen" van Macro's voor USBCNC
Dank Arie! Ik had de post ook al doorgeseind aan Bert. Ik ga de makro vervangen. Dit is nou wat ik bedoelde met de community in die andere post.
David
David
Re: Het "Bouwen" van Macro's voor USBCNC
In de cirkel makro zit volgens mij nog een foutje. Bij het invoeren van jaofnee oftewel 0 of 1 gaat de makro gewoon frezen maakt niet uit wat je intikt. Al tik ik 5 in dan gaat hij die cirkel frezen
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
David
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
David
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
da's op zich geen fout, als het maar GEEN 0 is wat je ingeeft.. bij O gaat ie terug naar de dialoog
't is alleen een beetje "lui" geprogrammeerd..
beter zou dan zijn:
Hier staat dus: ALS #57 Groter of Kleiner is dan 1, Ga terug naar de Dialoog
't Resultaat is bijna hetzelfde maar WEL helemaal trouw aan het Algoritme.. je hebt hier een beslissing die niet meer gebaseerd is op gelijk (Equal) aan, maar op niet gelijk aan.. (Not Equal)
't begrijpen van het grote verschil tussen een vergelijking en een ongelijkheid is van wezenlijk belang in een gedegen algoritme.. in zekere zin gedraagt een ongelijkheid gebaseerd op Not Equal (<>) zich als een "While" terwijl ie geprogrammeer is als een "IF".. hoe dat precies zit?.. daar kom ik nog op terug...
't is alleen een beetje "lui" geprogrammeerd..
beter zou dan zijn:
Code: Selecteer alles
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57<>1]
gosub cirkel
endif
't Resultaat is bijna hetzelfde maar WEL helemaal trouw aan het Algoritme.. je hebt hier een beslissing die niet meer gebaseerd is op gelijk (Equal) aan, maar op niet gelijk aan.. (Not Equal)
't begrijpen van het grote verschil tussen een vergelijking en een ongelijkheid is van wezenlijk belang in een gedegen algoritme.. in zekere zin gedraagt een ongelijkheid gebaseerd op Not Equal (<>) zich als een "While" terwijl ie geprogrammeer is als een "IF".. hoe dat precies zit?.. daar kom ik nog op terug...
Re: Het "Bouwen" van Macro's voor USBCNC
Nog een vraagje. Er staat Toets 0 of 1 en vervolgens Jaofnee. Moet het dan niet Neeofja zijn? Klinkt misschien stom maar zoals het er nu staat is O=ja en 1=nee in mijn ogen. Of zie ik dat verkeerd?
David
David
Re: Het "Bouwen" van Macro's voor USBCNC
Dat is hetzelfde als in het geval van een computerstoring de computer aan en uit zetten......
- Arie Kabaalstra
- Donateur
- Berichten: 13518
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
da's nou net het lastige van een GOEDE macro.. Erik heeft deze geschreven als een "voorbeeldje", dus nog niet alles zal perfect zijn..
die "contole" of de locatie wel goed is.. dan zou je in het dialoogje ook kunnen zetten
DlgMsg "Coordinaten o.k.? Toets 0 of 1" "Ja (1) of nee(0)" 57
da's een stuk netter..
die "contole" of de locatie wel goed is.. dan zou je in het dialoogje ook kunnen zetten
DlgMsg "Coordinaten o.k.? Toets 0 of 1" "Ja (1) of nee(0)" 57
da's een stuk netter..