Het "Bouwen" van Macro's voor USBCNC
Moderator: Moderators
Re: Het "Bouwen" van Macro's voor USBCNC
Dank Arie, ik verwacht ook niet dat het allemaal perfect is maar omdat ik aan de hand van de cirkel makro aan het leren ben hoe je een makro schrijft neem ik, zonder kennis, alles nog al letterlijk. En als dat dan niet rijmt met mijn bevindingen dan verwart het me omdat ik niet weet of het wel of niet klopt of dat het aan mij ligt. Vandaar alle vragen.
David
David
Re: Het "Bouwen" van Macro's voor USBCNC
Nog een vraagje. Moet je bij iedere wijziging van de makro iedere keer USBCNC sluiten en opnieuw starten of is er een manier om de makro te herladen zonder USBCNC te sluiten.
David
David
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
programmaatje laden.. al is het maar een leeg bestandje..
dus gewoon een bestandje aanmaken met de naam reset.nc ofzo.. en daar zet je G00G91X0 in ofzo..
dus gewoon een bestandje aanmaken met de naam reset.nc ofzo.. en daar zet je G00G91X0 in ofzo..
Re: Het "Bouwen" van Macro's voor USBCNC
Didado's reacties zijn naar deel 2 opgesplitst.
Laten we hier verder praten over programmeertechnische kwesties en in het andere onderwerp over de macro's in algemenere zin.
Laten we hier verder praten over programmeertechnische kwesties en in het andere onderwerp over de macro's in algemenere zin.
Gr.
Erik
Erik
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
even een "geintje"uit Visual Basic gejat en geimplementeerd in Notepad++..
in Visual Basic kan je met #Region /#end Region een stuk in je Code aangeven, met meerdere Subs.
net als met de Subs in Notepad++ kun je in VB zo'n Region inklappen.. door op het - tekentje te klikken..
welnu... als je in je User define dialoog in Notepad++ kijkt.. dan staat er voor USBCNC bij Folder Open Keyword settings nu SUB en en bij Folder Close Keyword settings ENDSUB.
als je daar ;REGION bij Folder Open en ;ENDREGION bij Folder Close achter zet ( met een spatie ertussen) dan kun je boven een groep subs ( bijvoorbeeld je Sub User-1 t/m 11 ) ;REGION zetten, en ;ENDREGION eronder.. dan kunje met 1 druk op de knop dat hele stuk in één keer opvouwen.. scheelt weer met het overzicht in je Macro.cnc.. die van mij is inmiddels 25 Kb.. dus dat zijn heel wat regeltjes code..
zo ziet het er dus uit als het ingeklapt is..
en als ik op het +tekentje klik voor de regel dan klapt ie alles uit.. en kun je de subs afzonderlijk ook nog in-en uit klappen...
zo ziet mijn hele macro eruit als alles ingeklapt is..
de keywords ;REGION en ; ENDREGION zijn voor USBCNC alleen maar "Comments" omdat er een ; voorstaat, en USBCNC doet er dus niets mee.. Notepad++ dus wel.. en da's handig..
in Visual Basic kan je met #Region /#end Region een stuk in je Code aangeven, met meerdere Subs.
net als met de Subs in Notepad++ kun je in VB zo'n Region inklappen.. door op het - tekentje te klikken..
welnu... als je in je User define dialoog in Notepad++ kijkt.. dan staat er voor USBCNC bij Folder Open Keyword settings nu SUB en en bij Folder Close Keyword settings ENDSUB.
als je daar ;REGION bij Folder Open en ;ENDREGION bij Folder Close achter zet ( met een spatie ertussen) dan kun je boven een groep subs ( bijvoorbeeld je Sub User-1 t/m 11 ) ;REGION zetten, en ;ENDREGION eronder.. dan kunje met 1 druk op de knop dat hele stuk in één keer opvouwen.. scheelt weer met het overzicht in je Macro.cnc.. die van mij is inmiddels 25 Kb.. dus dat zijn heel wat regeltjes code..
Code: Selecteer alles
;REGION USER FUNCTIONS, F1..F11 IN USER MENU
en als ik op het +tekentje klik voor de regel dan klapt ie alles uit.. en kun je de subs afzonderlijk ook nog in-en uit klappen...
Code: Selecteer alles
SUB CALIBRATE_TOOL_SETTER
;REGION USER FUNCTIONS, F1..F11 IN USER MENU
;REGION HOMING
;REGION tool
SUB MTOOL
SUB CTOOL
;REGION CYCLES
de keywords ;REGION en ; ENDREGION zijn voor USBCNC alleen maar "Comments" omdat er een ; voorstaat, en USBCNC doet er dus niets mee.. Notepad++ dus wel.. en da's handig..
Re: Het "Bouwen" van Macro's voor USBCNC
Dank Arie, dat maakt het zo veel overzichterlijker.
David
David
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
*zucht* , waarom moet IK dat toch iedere keer verzinnen..
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Nieuw:
in de meest recente versie USBCNC is er een Parameter bijgekomen voor de DLGMSG:
#5398, als DLGMSG OK geklikt wordt, is de waarde 1, als Cancel geklikt wordt is ie -1, bij het opstarten van USBCNC is de waarde 0
hierdoor kun je een DLGMSG ook gebruiken als "DOORGAAN?" vraag.. klik je OK, dan is #5398=1
dan kun je de beslissing dus afvangen met :
in de meest recente versie USBCNC is er een Parameter bijgekomen voor de DLGMSG:
#5398, als DLGMSG OK geklikt wordt, is de waarde 1, als Cancel geklikt wordt is ie -1, bij het opstarten van USBCNC is de waarde 0
hierdoor kun je een DLGMSG ook gebruiken als "DOORGAAN?" vraag.. klik je OK, dan is #5398=1
dan kun je de beslissing dus afvangen met :
Code: Selecteer alles
IF [#5398=1]
gosub verdergaan
ENDIF
Re: Het "Bouwen" van Macro's voor USBCNC
Arie,
wat kan je nog meer met die parameter,kan je hem almaar gebruiken ,als If.
Arian
wat kan je nog meer met die parameter,kan je hem almaar gebruiken ,als If.
Arian
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
die parameter kun je gebruiken om te controleren of er OK of Cancel geklikt is.. dus als je een macrootje hebt om bijvoorbeeld een kamertje te frezen op een bepaalde plaats, dan laat je de machine naar die coordinaten lopen, en dan kun je met
vragen of de plaats goed is.. klik je op Cancel, dan krijgt #5398 de waarde -1, klik je op OK, dan krijgt #5398 de waarde 1
dus kun je in de Code zetten:
je hoeft dus niet meer een waarde in te geven om "goed te keuren". OK klikken of Cancel klikken geeft #5398 een waarde, dus kun je een DLGMSG maken die geen invulvakjes heeft..
zo dus.. wel zo leuk toch?..
Ohja.. je kunt em ook gebruiken voor een soort "teach-in".. je jogt naar een bepaalt punt.. drukt start, en dan kun je door OK te klikken de coordinaten opslaan met LOGMSG ( bijvoorbeeld boor een meetmachine )
Code: Selecteer alles
DLGMSG "coordinaten OK?"
dus kun je in de Code zetten:
Code: Selecteer alles
IF [#5398 ==1]
gosub kamerfrezen
ENDIF
zo dus.. wel zo leuk toch?..
Ohja.. je kunt em ook gebruiken voor een soort "teach-in".. je jogt naar een bepaalt punt.. drukt start, en dan kun je door OK te klikken de coordinaten opslaan met LOGMSG ( bijvoorbeeld boor een meetmachine )
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Onlangs een klusje voor een klant gedaan.. en da's een macro geworden van maarliefst 250 Blokken geworden, met 2 DLGMSG's..
Nou vind ik persoonlijk het "uitlezen" van een DLGMSG regel niet echt lekker.. dus.. heb ik voor mezelf vastgelegd in mijn eigen "macro-handboek":
Zet voor je DLGMSG de PARAMETERS in COMMENTS:
dus niet zo:
Maar zo:
Dat leest gewoon een stuk makkelijker
verder heb ik ook nog wat uitgevlooid..
't "foefje" van Erik, de recursieve algoritme
Onder een Dialoog ( waarbij ik de Dialogen in "eigen subs" heb staan gebruik ik een "IF-LOOP" om de parameters te controleren als foutdetectie:
Vanuit de dialoog, corrigeer ik een waarde indien dat nodig is,
daaronder check ik of alle waarden kloppend zijn, zoniet, spring ik terug naar de dialoog
Met een Recursief algoritme, waarin je dus vanuit een Sub terugspringt naar diezelfde sub als aan een bepaalde voorwaarde niet wordt voldaan, loop je echter wel 1 groot risico..
Stack Overflow
Hierbij ga je door het "lussen in een Sub" de boel opstapelen in de hierarchie van het programma.. en die stapel mag niet hoger zijn dan als ik het goed heb 25 laagjes.. als je dus meer dan die 25 keer terugspringt naar het begin van je Sub, vanuit die sub, dan heb je dus een stack overflow error aan je pantalon..
Een Stack-overflow is dus eigenlijk een "beveiliging" voor "infinite Loops"
een infinit Loop is een situatie waar het programma in een bepaalde lus blijft hangen.. als je bijvoorbeeld een typefoutje maakt in je controle, waardoor ie iedere keer terug zou springen naar het begin, maar ook bij een programma waar je steeds dieper zou moeten, maar vergeten bent om je diepte waarde aan te passen in je algoritme.. dan blijft ie maar gaan.. en komt nooit aan de eindwaarde..
Bovenstaand stukje code is dus een infinite loop.. zolang ik de waarde van #1 niet verander, in de goede richtin, dan zal de eindconditie niet bereikt worden.. en dus loopt het programma eindeloos door..
je mag het testen.. maar.. doe het op je PC, niet op je machine.. USBCNC wordt er retetraag van.. en de enige manier om 't te onderbreken is een ander programma laden..
Nou vind ik persoonlijk het "uitlezen" van een DLGMSG regel niet echt lekker.. dus.. heb ik voor mezelf vastgelegd in mijn eigen "macro-handboek":
Zet voor je DLGMSG de PARAMETERS in COMMENTS:
dus niet zo:
Code: Selecteer alles
DLGMSG "VOER AFMETINGEN IN" "VEILIGHEIDSAFSTAND" 1000 "DIEPTE" 1001 "DIEPTESTAP" 1002 " lENGTE" 1003 "BREEDTE" 1004 "VOEDING" 1005
Code: Selecteer alles
;DIALOOG1
;PARAMETERS
;1000 VEILIGHEIDSAFSTAND
;1001 DIEPTE
;1002 DIEPTESTAP
;1003 LENGTE
;1004 BREEDTE
;1005 VOEDING
DLGMSG "VOER AFMETINGEN IN" "VEILIGHEIDSAFSTAND" 1000 "DIEPTE" 1001 "DIEPTESTAP" 1002 " lENGTE" 1003 "BREEDTE" 1004 "VOEDING" 1005
verder heb ik ook nog wat uitgevlooid..
't "foefje" van Erik, de recursieve algoritme
Code: Selecteer alles
sub cirkel
DlgMsg "Voer ...
...
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
endsub
Code: Selecteer alles
SUB DIALOG1
;DIALOG1
;AANTAL SPAKEN #2000
;BUITENRADIUS #2001
;BINNENRADIUS #2002
;SPAAKBREEDTE #2003
;HOEKRADIUS #2004
DLGMSG "TANDRAD UITSPAKEN" "AANTAL SPAKEN" 2000 "BUITENRADIUS" 2001 "BINNENRADIUS" 2002 "SPAAKBREEDTE" 2003 "HOEKRADIUS" 2004
IF [#2004<[#5009+0.01]]
#2004=[#5009+0.01]
ENDIF
;FOUTCONTROLE
IF [#2000<2]
MSG "MINIMAAL 2 SPAKEN"
GOSUB DIALOG1
ENDIF
IF [#2001<=#2002]
MSG "BUITENDIAMETER < BINNENDIAMETER"
GOSUB DIALOG1
ENDIF
IF [[#2001-#2002]<=[#5009*2]]
MSG "GEREEDSCHAPSDIAMETER TE GROOT"
GOSUB DIALOG1
ENDIF
IF [#2003<=0]
MSG"SPAAKBREEDTE TE KLEIN"
GOSUB DIALOG1
ENDIF
IF [[2*#2004]>[#2001-#2002]]
MSG"HOEKRADIUS TE GROOT"
GOSUB DIALOG1
ENDIF
ENDSUB
daaronder check ik of alle waarden kloppend zijn, zoniet, spring ik terug naar de dialoog
Met een Recursief algoritme, waarin je dus vanuit een Sub terugspringt naar diezelfde sub als aan een bepaalde voorwaarde niet wordt voldaan, loop je echter wel 1 groot risico..
Stack Overflow
Hierbij ga je door het "lussen in een Sub" de boel opstapelen in de hierarchie van het programma.. en die stapel mag niet hoger zijn dan als ik het goed heb 25 laagjes.. als je dus meer dan die 25 keer terugspringt naar het begin van je Sub, vanuit die sub, dan heb je dus een stack overflow error aan je pantalon..
Een Stack-overflow is dus eigenlijk een "beveiliging" voor "infinite Loops"
een infinit Loop is een situatie waar het programma in een bepaalde lus blijft hangen.. als je bijvoorbeeld een typefoutje maakt in je controle, waardoor ie iedere keer terug zou springen naar het begin, maar ook bij een programma waar je steeds dieper zou moeten, maar vergeten bent om je diepte waarde aan te passen in je algoritme.. dan blijft ie maar gaan.. en komt nooit aan de eindwaarde..
Code: Selecteer alles
#1=0
g0x10y0z0
while [#1 <1]
gosub circle
endwhile
sub circle
g02 x-10 y0 r10
g02 x10 y0 r10
endsub
je mag het testen.. maar.. doe het op je PC, niet op je machine.. USBCNC wordt er retetraag van.. en de enige manier om 't te onderbreken is een ander programma laden..
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Boeren, burgers en buitenlui..
Ik heb hieronder even een "kaal Algoritme" geplaatst voor het frezen van bijvoorbeeld een contourtje (rondkamertje, vierkantje, rechthoekje ) met stapjes naar een bepaalde diepte toe..
de dialoog is nog verder uit te breiden met allerlei extra's zoals X, Y en Z coordinaten,
Ga je met Z- Coordinaten werken, dan moet je nog wel even de Z-hoogtes in het programma aanpassen.. de veiligheidsafstand moet je dan optellen bij de Z-coordinaat om op de goede hoogte te starten, en voor de einddiepte moet je die ook verrekenen met de z-coordinaat.
Ik heb't bewust even simpel gehouden.. alle in te vullen waarden moeten positief zijn.. uitgaande van het principe dat je altijd naar beneden freest..
Ga je echter op basis van dit algoritme een programma schrijven om met een kotterbeitel "tegen te kameren" dan moet je dat natuurlijk even aanpassen..
Als je op elke diepte een kamer helemaal leeg wilt frezen, dan moet je de "offset" van de contour verrekenen met stapjes tot je aan de eindmaat zit. dit kun je doen met een zelfde soort algoritme, in een sub die je weer aanroept vanuit wat nu "SUB CONTOUR" is..
Voor ronde kamers bijvoorbeeld.. verhoog je de radius gewoon in stapjes op dezelfde manier als hier de diepte wordt vergroot tot ie op zijn eindwaarde is.. op diezelfde manier heb ik mijn hele macro.cnc volgestampt met Code.. allemaal gebaseerd op bovenstaand Algoritme..
Ik zou zeggen: Veel plezier ermee!
Ik heb hieronder even een "kaal Algoritme" geplaatst voor het frezen van bijvoorbeeld een contourtje (rondkamertje, vierkantje, rechthoekje ) met stapjes naar een bepaalde diepte toe..
de dialoog is nog verder uit te breiden met allerlei extra's zoals X, Y en Z coordinaten,
Ga je met Z- Coordinaten werken, dan moet je nog wel even de Z-hoogtes in het programma aanpassen.. de veiligheidsafstand moet je dan optellen bij de Z-coordinaat om op de goede hoogte te starten, en voor de einddiepte moet je die ook verrekenen met de z-coordinaat.
Ik heb't bewust even simpel gehouden.. alle in te vullen waarden moeten positief zijn.. uitgaande van het principe dat je altijd naar beneden freest..
Ga je echter op basis van dit algoritme een programma schrijven om met een kotterbeitel "tegen te kameren" dan moet je dat natuurlijk even aanpassen..
Code: Selecteer alles
zie latere post.. hier zat een foutje in..
Voor ronde kamers bijvoorbeeld.. verhoog je de radius gewoon in stapjes op dezelfde manier als hier de diepte wordt vergroot tot ie op zijn eindwaarde is.. op diezelfde manier heb ik mijn hele macro.cnc volgestampt met Code.. allemaal gebaseerd op bovenstaand Algoritme..
Ik zou zeggen: Veel plezier ermee!
Laatst gewijzigd door Arie Kabaalstra op 28 jun 2011 01:12, 1 keer totaal gewijzigd.
Re: Het "Bouwen" van Macro's voor USBCNC
Het probleem dat ik zo zie is dat je in het geval van een fout een tweede keer met DIALOG start en dus ook 2 keer naar UITVOER toe gaat. Eigenlijk zou je de check in een while loop moeten plaatsen.
Bijvoorbeeld zoiets:
Bijvoorbeeld zoiets:
Code: Selecteer alles
SUB DIALOG
; PARAMETERS
; #1000 = DIEPTE
; #1001 = DIEPTESTAP
; #1002 = VEILIGHEIDSAFSTAND
DLGMSG"VOER WAARDEN IN" "DIEPTE" 1000 "DIEPTESTAP" 1001 "VEILIGHEIDSAFSTAND" 1002
;FOUTCONTROLE
WHILE [#1000<#1001]
DLGMSG"DIEPTE >= DIEPTESTAP" "DIEPTE" 1000 "DIEPTESTAP" 1001 "VEILIGHEIDSAFSTAND" 1002
ENDWHILE
GOSUB UITVOER
ENDSUB
- Arie Kabaalstra
- Donateur
- Berichten: 13530
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
je hebt gelijk.. er zit een "glitch" in de code.. maar de oplossing die jij voorstelt is eigenlijk net zo fout omdat je met dubbele code zit..
onderstaande code is de juiste..
wat is er veranderd?.. simpel.. de Sub Contour wordt NA de Sub Dialog aangeroepen.. zolang de foutdetectie nog fouten registreert (en zolang er nog geen sprake is van Stack-overflow) blijft ie in Sub Dialog hangen.. als ie daar eenmaal uit is.. roept ie Sub Contour één keer aan. en niet meer dan 1 keer..
onderstaande code is de juiste..
Code: Selecteer alles
zie latere post..ook hier zat een foutje in..
Laatst gewijzigd door Arie Kabaalstra op 28 jun 2011 14:55, 1 keer totaal gewijzigd.