Het "Bouwen" van Macro's voor USBCNC

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

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Het "Bouwen" van Macro's voor USBCNC

Bericht door Arie Kabaalstra »

Introductie
In het topic: Kennismaking met macro's in USBCNC schreef ik al:
eigenlijk is programmeren ( in welke taal dan ook ) niets anders dan een reeks voorwaarden en instructies en wat controles of aan die voorwaarden wordt , of is voldaan..
een poosje geleden heeft Bert Eding het bestand MACRO.CNC in het leven geroepen.
MACRO.CNC bevat standaard al een paar SUBROUTINES die in USBCNC worden gebruikt voor een aantal taken, zoals het wisselen van gereedschappen, en het oproepen van de lengte-offset, het HOMEN van de machine, en het meten van je werkstukhoogte en gereedschaplengte.

Zelf kun je daar nog van alles en nogwat aan toevoegen, Bewerkingen die je vaak uitvoert kun je als SUBROUTINE in MACRO.CNC zetten zodat je ze makkelijk op kan roepen, ook vanuit andere programma's, hiermee kun je als het ware, net als in "hogere programmeertalen" zoals C++ en Visual Basic "Object georienteerd programmeren" (wat dat inhoudt, daar kom ik later in dit topic op terug)

MACRO.CNC kun je zien als een BIBLIOTHEEK-BESTAND, een soort "Class "of "DLL" als bij C++ of Visual Basic

en ik begrijp dat dit nog enige uitleg vereist voor diegenen die nog niet veel ervaring hebben in het programmeren (in welke taal dan ook )
Waarom ik die opmerking "in welke taal dan ook" gebruik zal ik even uitleggen..
Er zijn een aantal commando's die in ELKE programmeer taal gebruikt worden, of dat nu Basic, MSX, DOS, Pascal, Epoc, Symbian of Heidenhain is.
't enige verschil is de "Syntaxis", de manier waarop het geschreven wordt (zeg maar de "Grammatica van die taal" )

deze commando's zijn de zogenaamde "Conditional statements (in het engels wordt de term Commando aangeduid als statement )
een conditional statement laat zich dus vertalen als "Voorwaardelijk commando", dat wil zeggen dat deze commando's actief zijn onder bepaalde voorwaarden, welke?.. dat bepaal je lekker zelf, en daarom zijn ze zo veelzijdig.

In USBCNC ( want daar gaat het tenslotte om) hebben we de beschikking over:
IF (ELSE)
ENDIF

WHILE
ENDWHILE


Verder kun je in USBCNC met Parameters programmeren, een parameter is eigenlijk een "geheugenplekkie" met een "Label" ze worden in USBCNC aangeduid met een # gevolgd door een nummer, het label
de Parameters die je "Vrij" kunt gebruiken zijn de labels 1 t/m4999, waarbij ik even aanteken dat 4996 t/m4999 worden gebruikt in de toolmeetmacro's die ik samen met Bert Eding geschreven heb voor de releases vanaf 3.49

#4000 tm #4999 worden tevens bij het afsluiten van USBCNC opgeslagen, en hebben de volgende keer dat je USBCNC Start nog steeds dezelfde waarde, #1 t/m #3999 worden elke keer na afsluiten gewist, en zijn dus 0 als je USBCNC opnieuw start

HIER vind je op pagina 50 een keurig overzicht van alle labels

de Labels boven 5000 kun je ook gebruiken in macro's je moet wel als je bijvoorbeeld wilt gaan rekenen met de afmetingen van het gereedschap, die waarden haal je dan "uit de tabel"

Programma's kun je ook nog indelen in SUBROUTINES
Macro's schijf je als SUBROUTINES in MACRO.CNC zodat je ze "vanuit elke hoek in USBCNC" Kunt oproepen

SUB (naam)

ENDSUB


een sub(routine) is een stukje programma dat je aan kunt roepen met GOSUB
als je met GOSUB FREZEN verwijst naar SUB FREZEN, dan gaat USBCNC vanaf die regel verder in SUB FREZEN, om bij ENDSUB terug te keren naar de regel ONDER GOSUB FREZEN, USBCNC maakt dan eigenlijk een "Zijsprongetje"

de voorwaardelijke commando's, Parameters en SUB's zijn de "Bouwstenen" waar je een Macro mee bouwt.
Laatst gewijzigd door Arie Kabaalstra op 30 apr 2010 00:11, 5 keer totaal gewijzigd.
Gebruikersavatar
Mcgyver
Berichten: 4048
Lid geworden op: 08 jun 2007 17:45
Locatie: Ridderkerk

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

Bericht door Mcgyver »

Alvast een sticky van gemaakt... dit word waardevolle informatie :mrgreen:
Zoals het freesje thuis freest, freest het nergens...
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Dialogen:
Wat hebben we aan een programma met parameters, als die parameters (nog) geen waarde hebben?, NIETS.. en daarom zijn er een aantal manieren om ze een waarde te geven:

ten eerste:
aan het begin van het programma de parameters een waarde geven:

Code: Selecteer alles

#1=100 ; voeding horizontaal
#2=30 ; voeding verticaal
Maar da's een beetje een "Starre methode", mooier is het om met DLGMSG te werken.
DLGMSG staat voor Dialog Message, een dialoog in je macro, die je vraagt om bepaalde waarden in te voeren die dan aan parameters worden toegekend
DLGMSG werkt als volgt":
DLGMSG "koptekst" "tekst voor uitleg invoer" label "tekst voor uitleg invoer" label.
Voorbeeld:

Code: Selecteer alles

DLGMSG "invoeren waarden" "waarde 1" 1 "waarde 2" 2 
hier worden de ingevulde waarden toegekend aan #1 en #2
of het moet weet ik niet, maar ik zet altijd overal een spatie tussen, dat houdt je code een beetje leesbaar.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Voorwaarden: IF (ELSE)

het if-then commando is als het ware opvoeden.. we hebben het als Kind al zo vaak van onze ouders gehoord:
"als je je kamer opruimt (IF) krijg je wat lekkers, en anders zwaait er wat(ELSE)

diegenen die kinderen hebben, zullen met dit commando weinig moeite hebben.. :lol:

de Syntaxis:

IF[voorwaarde]
actie
(ELSE)
( actie )
ENDIF (hiermee geven we 't einde van dit commando aan)

Code: Selecteer alles

IF [#1==100]
G0 x#1
ENDIF
Bovenstaand voorbeeld kijkt of #1 de waarde 100 heeft (in dit geval moet er == staan, dat is geen typefout, maar de syntaxis van USBCNC )
Alleen dan gaat de machine naar X100 ( de waarde van #1 ), als je een andere waarde ingeeft doet USBCNC hier in dit stukje Code niets mee, USBCNC kijkt of aan de voorwaarde wordt voldaan, zoja, voert ie de regels uit onder het IF Commando tot ie ENDIF tegenkomt, daar is het Commando mee afgesloten,als #1 niet gelijk is aan 100, dan slaat USBCNC het stuk tussen IF en ENDIF over.

Code: Selecteer alles

IF [#1==100]
G0 X#1
ELSE
G0 Y#1
ENDIF
In dit voorbeeld gaat de machine naar X#1 als #1 gelijk is aan 100, in elk ander geval gaat ie naar Y#1
Hier hebben we dus al iets meer mogelijkheden..

als je een hele reeks mogelijkheden wilt "Toetsen" kun je het volgende trucje toepassen:

Code: Selecteer alles

IF [#1==100]
G0 X#1
ENDIF
IF [#1==110]
G0 X#1
ENDIF
IF [#1==120]
G0 X#1
ELSE
G0 Y#1
ENDIF
hier gaat USBCNC naar X100, X110 of X120 als #1 100,110 of 120 is, anders gaat ie naar Y#1
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

SUBROUTINES: GOSUB

Vaak is het handig in een Macro om een bepaald stukje "apart" af te lopen, dit is dan een "onderliggend stukje programma", een SUBROUTINE, alsof je in een bak onderdelen graait naar bepaalde onderdelen, en daar iedere keer dezelfde handeling mee uitvoert.

de macro's die we schrijven en opslaan in MACRO.CNC zijn allemaal SUBROUTINES, we kunnen ze op elk gewenst moment aanroepen en uitvoeren, vanuit MDI, met het intikken van GOSUB FREZEN, roepen we de SUB FREZEN op, en als je die start voert USBCNC uit wat er in die SUB staat, en keert dan terug naar zijn "uitgangspositie"

Vanuit een PROGRAMMA, in mijn MACRO.CNC staat bijvoorbeeld een SUB TOOL, die een gereedschapslengte meting uitvoert.

als ik een programma maak met meerdere gereedschappen, is het wel handig als de machine em even inmeet voor me.. dus na elke M6 T.. staat bij mij in de Code GOSUB TOOL, na elke wisseling gaat ie dus even meten hoelang mijn tool is, zodat ik mijn Z-hoogte niet aan hoef te passen.. ( moet je ook eigenlijk niet doen.. je werkstuk wordt niet hoger als je frees korter is )

Sinds USBCNC 3.49 is er een "User-Menu", met 11 F-toetsen die verwijzen naar SUB USER_1 tot en met SUB USER_11

Aan de eerste 2 zijn al Gereedschapmeet macrootjes gekoppeld. de resterende 9 kun je naar eigen goeddunken en hartelust vullen met je eigen macro's die je veel gebruikt en snel wilt kunnen vinden..

vanuit een SUBROUTINE kun je ook andere SUBROUTINES aanroepen, dit kun je doen na een IF commando: als aan een bepaalde voorwaarde wordt voldaan ga je naar een bepaalde SUB.

we zien dit ook mooi terug in Erik's voorbeeld:

Code: Selecteer alles

sub cirkel
DlgMsg "Voer ...
...
DlgMsg "Coordinaten o.k.? Toets 0 of 1" Jaofnee 57
If [#57 == 0]
gosub cirkel
endif
als je 0 invult bij de tweede DLGMSG, waar gevraagd wordt of de positie juist is, dan springt USBCNC terug naar het begin van SUB CIRKEL, en vraag je nogmaals om de Coordinaten juist in te vullen

en..

Code: Selecteer alles

sub cirkel
DlgMsg "Voer ...
...
gosub uit
endsub

sub uit
msg "Bewerkingen klaar"
M5
M2
endsub
als de SUB CIRKEL klaar is met zijn bewerkingen, dan stapt ie naar SUB UIT waar USBCNC een MSG ( Message ) geeft dat de bewerking klaar is.

MSG overigens, is't kleine broertje van DLGMSG, MSG toont geen Dialoog, maar geeft alleen een tekst weer in het Message venster in USBCNC
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Voorwaarden: WHILE- ENDWHILE

Het While Commando is het tweede voorwaardelijke commando, waar IF kijkt of iets aan de voorwaarde voldoet, is een WHILE actief ZOLANG er aan de voorwaarde wordt voldaan.

dit is erg handig als je bijvoorbeeld een macrootje wilt maken om iets in meerdere sneden uit te frezen. (er zit er ook één in Erik's voorbeeldje:

Code: Selecteer alles

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
hier staat in normaal nederlands: "Zolang #60 Groter of gelijk is aan #64 ( je z-hoogte ) ga je het stukje tot ENDWHILE uitvoeren..
Vlak voor de Endwhile zien we dat er iets gebeurd met #60, daar wordt #55 van afgetrokken ( de dieptestap ), deze "lus" blijft actief tot niet meer aan de voorwaarde wordt voldaan, dus als #60 kleiner is dan #64

Het moge duidelijk zijn dat WHILE 't grote broertje is van IF, 't grote verschil is dat IF "Expliciet" controleert op een voorwaarde, en dat die voorwaarde de enige vereiste is voor het uitvoeren van de code tussen IF en ENDIF.

WHILE daarentegen is veel minder Star, je stelt een Grens aan, en zolang er niet voldaan is aan die grensvoorwaarde wordt de lus uitgevoerd tussen WHILE en ENDWHILE, daardoor is WHILE veelzijdiger, de voorwaarde beslaat een "bereik", en zolang de parameters binnen dit bereik vallen, wordt de functie uitgevoerd.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

VOORWAARDEN: DEFINITIE

in de IF en WHILE-"lussen" moeten we een voorwaarde definiëren, dat doen we met dingen die we in de Wiskundeles op school al geleerd hebben, met FUNCTIES.

een Functie kan een vergelijking zijn of een ongelijkheid, bijvoorbeeld:
vergelijkingen:

#1=100
#2=#1x2

Ongelijkheden
#1<100
#2>= #1+4

dit zijn nog de eenvoudigere vormen, je kunt het zo gek maken als je wilt, maar dit zijn de basisvormen.

in een IF-lus kun je dus als voorwaarden stellen:

Code: Selecteer alles

IF[#1=100]
GOSUB ZOOI
ENDIF
OF

Code: Selecteer alles

IF[#1>=#2+3]
GOSUB ZOOI
ENDIF
En in een WHILE-lus geldt hetzelfde: dus

Code: Selecteer alles

WHILE[#1=100]
GOSUB ZOOI
ENDWHILE
OF

Code: Selecteer alles

WHILE[#1>=#2+3]
GOSUB ZOOI
ENDWHILE
Waarbij valt aan te tekenen dat een WHILE vaak met een ongelijkheid als voorwaarde wordt gebruikt, hiermee wordt echter niet gezegd dat een IF dan vaker met een Vergelijking wordt gebruikt.

bij het gebruik van WHILE wordt vaak naar een bepaalde situatie toegewerkt ( het in stapjes naar een eindpositie toewerken ), zoals in Eriks voorbeeld macro.

een IF met een Ongelijkheid als voorwaarde gebruik ik zelf bijvoorbeeld bij "FOUTCONTROLE" , stel je hebt een macro voor het frezen van een rond kamertje, maar je wilt vantevoren wel even "Controleren" of de frees die in de machine staat wel in't gaatje past.
#1 is de parameter voor de radius van het te frezen gat
#5009 is de actuele gereedschapsradius.

Code: Selecteer alles

IF [#1<#5009] 
ERRMSG"FREES IS TE GROOT VOOR HET GAT"
ENDIF
#5009 is een "Systeem parameter" bij een toolchange wordt deze waarde uit de tabel gelezen, je moet er dus wel voor zorgen dat je tabel klopt..

OPERATIONS:

Operations zijn de bouwstenen van onze vergelijkingen en ongelijkheden, ik heb tot nu toe eigenlijk alleen + en < > = gebruikt in mijn voorbeelden, maar er zijn er nog een paar..

[#1=#2+3] telt 3 op bij de waarde van #2, en wijst deze toe aan #1
[#1=#2-3] trekt 3af van de waarde van #2, en wijst deze toe aan #1
[#1=#2x3]vermenigvuldigt de waarde van #2 met 3, en wijst deze toe aan #1
[#1=#2/3] deelt de waarde van #2 door 3, en wijst deze toe aan #1

dit zijn de meest eenvoudige

[#1=[sqrt[#2]] geeft de vierkantswortel van #2, en wijst deze toe aan #1
[#1=[#2**3] verheft de waarde van #2 tot de derde macht, en wijst deze toe aan #1

en dan hebben we nog een handjevol Goniometrische trucs:

[#1=sin#2], geeft de sinus van #2 en wijst deze toe aan #1
[#1=cos#2], geeft de cosinus van #2 en wijst deze toe aan #1
[#1=tan#2], geeft de tangens van #2 en wijst deze toe aan #1

in de Manual van USBCNC staan nog meer voorbeelden.


NESTEN

je kunt SUBROUTINES ook "NESTEN", in elkaar verweven, als je een macro schrijft waar de machine in meerdere stappen moet werken, dan kun je de SUBROUTINES in "lagen" indelen.

Bijvoorbeeld: als je een macro maakt dat in laagjes een ronde kamer freest, en op elke laag wil je vanuit het midden in steeds grotere cirkels naar buiten frezen, dan kun je dat in meerdere SUBROUTINES indelen.

één subroutine die een WHILE bevat die controleert of de frees al op einddiepte is, en één die controleert of de frees al op zijn eindradius is.

ALGORITMEN

ZO!.. Gooit die Kabaalstra er even een Moeilijk woord door.. Algoritme..klinkt erg geleerd.. maar't stelt niet zo heel veel voor.. een algoritme is niet meer dan een reeks voorwaarden die bepalen hoe je macrootje zich dient te gedragen..

Gooi ik er meteen even een andere kreet door: PSEUDO CODE, pseudo code is niets anders dan programma code in "leesbare taal": je kunt in plaats van de parameters de betekenis van die parameters opschrijven, bijvoorbeeld:

Code: Selecteer alles

WHILE [#1>=#2]
GOSUB FREZEN
ENDWHILE

Code: Selecteer alles

WHILE [FREESDIEPTE GROTER OF GELIJK EINDDIEPTE]
GOSUB FREZEN
ENDWHILE
Zo kun je makkelijker een algoritme opstellen, het is makkelijker een algoritme vantevoren op papier uit te schrijven, dan botweg op je toetsenklavier te gaan zitten hameren.

voor bijvoorbeeld het Algoritme van een rondkamer zoals hierboven al beschreven kun je iets schrijven als:

Code: Selecteer alles

WHILE[FREESDIEPTE GROTER OF GELIJK AAN EINDDIEPTE]
GOSUB LAAGJES UITFREZEN
ENDWHILE

SUB LAAGJES FREZEN
WHILE [WERKRADIUS KLEINER OF GELIJK AAN EINDRADIUS]
FREES RONDJE
VERGROOT WERKRADIUS
ENDWHILE
VERKLEIN FREESDIEPTE ( WE GAAN TENSLOTTE STEEDS LAGER)
ENDSUB
Dit is een basis algoritme, je kunt de boel verder verfijnen met foutcontroles, je kunt de diepte verrekenen om elke stap even groot te maken, er zijn plenty mogelijkheden.. de enige limiet is je eigen kunde en fantasie

Succes!
Gebruikersavatar
scyllatech
Berichten: 310
Lid geworden op: 29 sep 2007 16:51
Locatie: Haringhuizen
Contacteer:

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

Bericht door scyllatech »

Hoi Arie,

Petje af voor de moeite die je neemt en de heldere uitleg. Dit is niet iedereen gegeven. Iets weten is nog iets heel anders dan het door kunnen geven. Maar beide beheers je.
Hier zullen veel hobbyisten wat aan hebben. Als de eerste stappen met programmeren gezet zijn, is de verslaving vrijwel atijd ook een feit. Programmeren is een goedkoop, maar zeer effectief gereedschap. De mogelijkheden vrijwel onbeperkt.

2948
Techniek is de dienstmaagd van de creativiteit.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

waren die 300 Gulden voor die Commodore C16 in i986 toch nog ergens goed voor :)-- 'k schreef toen ook al mijn eigen spelletjes..

Programmeren, en dan met name het programmeren met de mogelijkheden die een goede programmeertaal biedt, is gewoon een mooi deel van de Hobby..

Mijn Macro.cnc is straks zo rond de 30Kb, als ik mijn subs er bij inplak, de basis macro.cnc is al zo'n 15 Kb tegenwoordig...

op deze manier, met de F-toetsen in het User menu, maak je met een stevig robbertje programmeren van je machine ineens een Teach-in machine..
Zitz
Berichten: 200
Lid geworden op: 20 jul 2008 14:26
Locatie: Vaals
Contacteer:

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

Bericht door Zitz »

Arie, knap werk! Alleen 1 kleine opmerking. Meschien even bij het while stukje gaan waarschuwen voor "Endless Loops". Ik weet niet in hoevere dit fout gaat bij usbcnc, maar als je het met een uC of C++/C# enz doet dan blijft alles vasthangen.

Bijv: (laatste regel voor endwhile een typ/denk-fout, een + ipv een -, dan gaat het niet lekker lopen)

Code: Selecteer alles

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
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Ik moet ook eigenlijk nog wat aandacht besteden aan 't opvangen van fouten,
een "infinite loop" is een van de grootste valkuilen in 't programmeren, Race conditions zijn ook een wezenlijk gevaar als je met een IO-Kaart gaat werken.

Dead-Code is niet zo gevaarlijk, alleen maar een geheugenvreter.

verder zijn er nog een aantal Haken en ogen.. als je in't macro-voorbeeld van Erik bijvoorbeeld een diepte ingeeft die geen natuurlijk veelvoud is van de stapgrootte, stopt ie te vroeg.

als de totale diepte geen natuurlijk veelvoud is van de stapgrootte, dan zullen ze nooit gelijk aan elkaar worden, zolang ie kleiner is, dan gaat ie verder, dan wordt ie groter, en stapt ie uit zijn loop, maar, de conditie "Gelijk aan" komt nooit voor in dit geval.. daar is wel een oplossing voor, maar daar kom ik nog een keer op terug..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

HINTS!

Nee, niet dat TV-spelletje... maar wat handige tips om het programmeren van Macro's wat overzichtelijker te maken..
ten eerste:
COMMENTS, gebruik ze, nu weet je het nog.. als je over een paar maanden nog wat aan je code wilt veranderen, dan zit je... "ehh.. wat deed die ene parameter nu ook al weer?"

dus:

Code: Selecteer alles

#2=[#1/2] ;bereken radius
#3=[#2-#5009] (bereken radius - gereedschapsradius)
; en () kun je gebruiken voor Comments in je code, je kunt hier alles inzetten wat je wilt, USBCNC doet er verder niets mee, 't is alleen een geheugensteuntje voor jezelf

INDENTATION indentation (indentatie) is het inspringen van je Code, dit gebruik je om makkelijk te zien waar je afgebakende delen in je Code hebt.
"Professionele programmeertalen als bijvoorbeeld Visual Basic doet het automatisch, in USBCNC moet je't even zelf doen, maar je code wordt er veel overzichtelijker van.
dus:
NIET ZO:

Code: Selecteer alles

SUB FINISH
G00X0Y0Z2
#6 = [#1+#2]
WHILE [#23>[#4-#15]]
#10 = [#6 * cos[#23]]
#11 = [#7 + [#6 * sin[#23]]]
GOSUB LEVEL2
#23=[#23-#15]
ENDWHILE
#23=[#4]
GOSUB LEVEL2
ENDSUB
MAAR ZO:

Code: Selecteer alles

SUB FINISH
	G00X0Y0Z2
	#6 = [#1+#2]
		WHILE [#23>[#4-#15]]
		#10 = [#6 * cos[#23]]
		#11 = [#7 + [#6 * sin[#23]]]
		GOSUB LEVEL2
		#23=[#23-#15]
		ENDWHILE
	#23=[#4]
	GOSUB LEVEL2
ENDSUB
in het onderste voorbeeld zie je dat alles binnen de SUB één TAB naar Rechts is verschoven, en alles wat met de WHILE te maken heeft is nog eens een TAB verder naar Rechts verschoven.
zou je in die WHILE-Lus nog een IF hebben, dan schuif je ook die nog eens een TAB naar Rechts

CODE SCHRIJVEN

Ik adviseer om NOTEPAD++ te gebruiken voor het schrijven van je Code, Notepad ++ is een Editor zoals Notepad, maar dan met Tabbladen.

het invoegen van TABS voor je INDENTATION gaat in NOTEPAD++ heel eenvoudig, selecteer in de kantlijn de regels die je op wilt schuiven, en druk op TAB, al de geselecteerde regels schuiven keurig een stukkie op.. , nog een inspringing maken?.. gewoon weer selecteren en op TAB heien.. dan schuift 't geselecteerde stuk nog een TAB op

verder kun je "Tag-Coloring" gebruiken, hiermee worden bepaalde "woorden" en getallen of Parameters in een andere kleur weergegeven zodat het lezen van de Code makkelijker is.
het programma heeft "kleurenschema's voor allerlei programmeertalen, maar je kunt zelf ook een "Taal" definiëren.

in het menu VIEW klik je op USER DEFINE DIALOGUE, waarna je een venster te zien krijgt waarin je instellingen kunt maken voor USBCNC.
Morgen ga ik hier wat dingetjes neerzetten om je USBCNC Taal aan te maken..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Bij deze: een ZIPJE met 2 XML Files

Het installeren van deze bestanden:

start Notepad++
druk op F5 (of klik op "RUN" in de bovenste menubalk)
Type in:

Code: Selecteer alles

%APPDATA%\Notepad++
en druk op Run

er wordt nu een mapje geopend met de Application Data van Notepad++

Pak het Zip bestand uit en plaats de 2 files naar deze map.
vervang eventueel de bestanden Stylers.XML en UserDefineLang.XM
als ze er al staan.
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13373
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Ik heb even een Vraagje ..

zouden degenen die de XML's voor Notepad++ hebben gedownload hun bevindingen ook kenbaar willen maken?.. als er nog op-en aanmerkingen zijn, dan hoor ik dat graag..
Plaats reactie