Het "Bouwen" van Macro's voor USBCNC

Nederlandse CNC controller op basis van de usb poort of Ethernet.

Moderator: Moderators

Plaats reactie
didado
Berichten: 304
Lid geworden op: 03 apr 2008 08:25
Contacteer:

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door didado »

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
didado
Berichten: 304
Lid geworden op: 03 apr 2008 08:25
Contacteer:

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door didado »

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
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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.. :mrgreen:
Gebruikersavatar
Erik
Berichten: 1403
Lid geworden op: 21 jan 2007 21:04
Locatie: Den Haag
Contacteer:

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door Erik »

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.
Gr.

Erik
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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..

Code: Selecteer alles

;REGION USER FUNCTIONS, F1..F11 IN USER MENU
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...

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
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..
didado
Berichten: 304
Lid geworden op: 03 apr 2008 08:25
Contacteer:

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door didado »

Dank Arie, dat maakt het zo veel overzichterlijker.

David
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

*zucht* , waarom moet IK dat toch iedere keer verzinnen.. Afbeelding
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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 :

Code: Selecteer alles

IF [#5398=1]
gosub verdergaan
ENDIF
Arian
Berichten: 622
Lid geworden op: 18 nov 2007 17:48
Locatie: Hilversum
Contacteer:

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door Arian »

Arie,

wat kan je nog meer met die parameter,kan je hem almaar gebruiken ,als If.

Arian
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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

Code: Selecteer alles

DLGMSG "coordinaten OK?"
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:

Code: Selecteer alles

IF [#5398 ==1]
gosub kamerfrezen
ENDIF
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..

Afbeelding

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 )
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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:

Code: Selecteer alles

DLGMSG "VOER AFMETINGEN IN" "VEILIGHEIDSAFSTAND" 1000 "DIEPTE" 1001 "DIEPTESTAP" 1002 " lENGTE" 1003 "BREEDTE" 1004 "VOEDING" 1005
Maar zo:

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
Dat leest gewoon een stuk makkelijker

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
Onder een Dialoog ( waarbij ik de Dialogen in "eigen subs" heb staan gebruik ik een "IF-LOOP" om de parameters te controleren als foutdetectie:

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
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..

Code: Selecteer alles

#1=0
g0x10y0z0
     while [#1 <1]
          gosub circle
     endwhile

sub circle
g02 x-10 y0 r10
g02 x10 y0 r10
endsub
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..
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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..

Code: Selecteer alles

zie latere post.. hier zat een foutje in.. 
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!
Laatst gewijzigd door Arie Kabaalstra op 28 jun 2011 01:12, 1 keer totaal gewijzigd.
Gebruikersavatar
B.Reitsma
Berichten: 87
Lid geworden op: 28 mar 2011 07:41

Re: Het "Bouwen" van Macro's voor USBCNC

Bericht door B.Reitsma »

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:

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
Gebruikersavatar
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

Bericht door Arie Kabaalstra »

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..

Code: Selecteer alles

zie latere post..ook  hier zat een foutje in.. 
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..
Laatst gewijzigd door Arie Kabaalstra op 28 jun 2011 14:55, 1 keer totaal gewijzigd.
Plaats reactie