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
Berichten: 10523
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 kunt daar ook, en dat raad ik wel aan, de Feedrates voor het graveren in zetten.. in het voorbeeld staat de Feedrate op 3000 en de Plunge op 300.
Verder heb ik de Diepte ook als functie van de Lettergrootte in het progje gezet..
"that's what she said"
cnzim
Berichten: 24
Lid geworden op: 26 aug 2016 13:45
Contacteer:

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

Bericht door cnzim »

Haha, ik had het ongeveer al helemaal zelf uitgevogeld. Ik krijg het ondertussen gegraveerd. Maar jou code is net iets compacter en eleganter. Ik heb de while als volgt gedaan:

Code: Selecteer alles

While [#3999 <= 4] 			; 5 digits to write
	#4211 = #[4202 + #3999] 
	msg "digit " #3999 " = " #4211
	#4210 = [#4212 * #3999]		;Offset for digits
	msg "Spacing = " #4210 " mm"
	gosub write_digit
	#3999 = [#3999 + 1]
endwhile
Op dit moment is het nog een fixed lettertype en grootte. Misschien is het inderdaad beter om dit aanpasbaar te maken. Als ik nu een kleine wijziging wil doen ben ik ongeveer 10 minuten bezig met alles in mijn macro's aan te passen. Maar lukt wel.
Ik ga in ieder geval de fix naar int aanpassen. Geeft iets meer foolproof code.
Gebruikersavatar
Arie Kabaalstra
Berichten: 10523
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 ben in 1985 begonnen met programmeren.. allereerst op een Commodore C64 op school, later ook thuis op een Commodore C16, Op school in TurboPascal (waar Later C/ C++/ C# uit ontstaan is) en nog weer later op een Heidenhain 410

'k wil niet pretenderen een volwaardig programmeur te zijn, maar ik las in de jaren van de Commodores in het blad "Kijk" een artikel over software, en de fouten die erin konden sluipen, in dat artikel ook een aantal uitspraken van Edsger Wiebe Dijkstra, de "vader van de moderne Informatica"
een aantal van zijn aanbevelingen heb ik mezelf als uitgangspunten opgelegd.

Zoals ik het zelf altijd zeg, beschouw je code als een Tempel Gods.. hou het rein en heilig, en doe verdikke het licht uit als je weggaat :lol:
Sinds ik met .NET talen aan het programmeren ben.. heb ik mezelf ook aan de gewoonte geconformeerd om Indentatie te gebruiken, daarnaast, zoals eerder in dit topic gemeld, gebruik ik Notepad ++, en heb ik daarin een Syntaxis markering gemaakt voor G-Code. (vandaar dat ik voor Comments altijd haakjes gebruik) want dan heb je een "Sluitteken" voor een Comment, dus kan ie een andere kleur krijgen..
Ik merk wel.. nu ik een paar dagen C# "under my belt" heb.. dat ik steevast de mist in ga bij variabeledeclaraties , in plaats van [ en ] komt er nog wel eens { en } uit mijn klavier rollen..

Op zich.. als je zoals ik al eerder zei. je NC Code voor elk cijfertje 1 mm groot maakt.. dan kun je em zo verschalen.. je zet [#4001 * voor je coordinaat en een ] erachter.. en voor de spatiëring +#4002]daar weer achter, dan schaalt je spatiëring automagisch mee, en voor de freesdiepte kun je het zelfde grappie uithalen.. 'k ben nog al een voorstander van het parametriseren van parameters met p.. ok.. het punt is Duidelijk.

in While loops doe je zo min mogelijk, een Subroutine aanroepen, en de voorwaarde parameter actualiseren, en in dit geval ook de Spatiëringsparameter.. maar dat kwam mooi uit zo.. 't is maar zelden dat ik meer dan 2 opdrachten in een While heb staan.
'k zie dat jij ook Array's gebruikt. Daar zijn ze voor tenslotte.
Maar jou code is net iets compacter en eleganter.
'k ben nog een beginner in VB.Net en een Noob in c#, maar ik denk dat ik G-code (zullen we het G# noemen? 😂) wel aardig beheers inmiddels.. heb het wel meegemaakt dat ik wat geschreven had, er een filmpje van naar Bert Eding mailde, en em binnen een kwartier aan de telefoon had.. "Hoe flik je dát nou weer???"

Als je dan de mogelijkheden van een programmeertaal goed kent, dan wordt je code vanzelf compact en elegant.. je trekt alles eruit wat erin zit.. en.. als ik er even voor ga zitten.. dan kan het NOG compacter.. maar daardoor wordt het minder leesbaar..

Code: Selecteer alles

#4202=[#4200-[#4201*1000]]
	#4202=[INT[#4202/100]]
dat kan ook in één regel denk ik.. maar of het dan nog leesbaar is?

Code: Selecteer alles

MSG "SERIAL NUMBER = " #4200
	#4201= [INT[#4200/1000]]
MSG "FIRST DIGIT = "#4201
	#4202=[INT[[#4200-[#4201*1000]]/100]]
MSG "SECOND DIGIT = "#4202
	#4203=[INT[[#4200-[#4201*1000]-[#4202*100]]/10]]
MSG "THIRD DIGIT = "#4203
	#4204=[#4200-[#4201*1000]-[#4202*100]-[#4203*10]]
MSG "FOURTH DIGIT = "#4204

ja.. dat werkt ook.. 'k had oorspronkelijk een aparte "intermediate" berekening erboven staan.. maar het is niet meer te lezen.. (dit zou ik wel doen als het code is die ik zou verspreiden.. zo laat iemand die die code krijgt het wel uit zijn hoofd om daar aan te gaan zitten klooien..)
Gebruikersavatar
hilberth
Berichten: 278
Lid geworden op: 08 sep 2010 09:40
Locatie: Omgeving Amsterdam
Contacteer:

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

Bericht door hilberth »

Arie Kabaalstra schreef: 16 feb 2021 19:20 Ik ben in 1985 begonnen met programmeren.. allereerst op een Commodore C64 op school, later ook thuis op een Commodore C16, Op school in TurboPascal (waar Later C/ C++/ C# uit ontstaan is) en nog weer later op een Heidenhain 410
Hoewel het om details gaat, de historie is toch ietsje anders.
Uit https://nl.wikipedia.org/wiki/C_(programmeertaal)
"De programmeertaal C is een imperatieve programmeertaal, gebaseerd op de programmeertaal B, die zelf weer op BCPL was gebaseerd. Het is een zeer praktische programmeertaal die meer op Algol lijkt dan op andere voorlopers, zoals - in historische volgorde - Fortran, Lisp, COBOL en BASIC.

Ook Pascal is een versimpeling van Algol, maar dan in een andere richting. Terwijl Pascal meer afstand neemt van de machine waar het op moet werken, ligt C juist dicht tegen de machine aan; het is betrekkelijk 'low-level'.

De invloed van C is zo groot dat sindsdien de meeste nieuwe talen zoals C++, Objective-C, Java, JavaScript, C# en PHP grotendeels de syntaxis van C gebruiken."
Ondanks dat ik zelf ook in Pascal geprogammeerd heb vind ik de stelling "Pascal is voor quiche eters" van toepassing. Overigens is er niets mis met Pascal, mits op de juiste wijze toegepast.
De stelling met de meeste waarheid omtrent programmeertalen: "A real programmer can program any language in Fortran", een kreet die later door Microsoft adepten gejat en verminkt is.
Think it, draw it, make it.
Gebruikersavatar
Arie Kabaalstra
Berichten: 10523
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 had ergens begrepen dat C ontwikkeld was uit Pascal, vandaar..

hoe dan ook.. de opmerkingen van Edsger Wiebe Dijkstra heb ik ter harte genomen, Ik probeer mijn code zo overzichtelijk mogelijk te maken, en met Notepad++ kun je middels templates van eigen talen je code nog overzichtelijker maken..

Wat ik vooral erg fijn vind is dat je Folder keywords kan gebruiken, waarmee je stukken code waar je op dat moment niet aan werkt in kan klappen
Ik heb daarvoor "Region" uit VB.NET "gejat"..
Met de Keywords ;REGION en ;/REGION kan ik hele lappen code "verbergen"

Code: Selecteer alles

;REGION USER SUBROUTINES

;REGION DIALOGS

;REGION PREPARATION

;REGION M-CODES

;REGION EXECUTE
Da's alles wat je ziet als je de Regions dichtklapt, Daarin staan alle SUBS die je op hun beurt ook weer in kan klappen.
Verder gebruik ik Tag-Coloring voor aparte kleuren voor bepaalde keywords Variabelen worden bij mij altijd Groen weergegeven.. Comments () zijn "fuchsia?", SUB en ENDSUB hebben ook hun eigen kleurtje..

Of Pascal primair voor Quiche-eters bedoeld is, weet ik niet.. Ik lust alles :lol: alleen van Fortran heb ik geen kaas gegeten..
ik probeer met de manier waarop ik programmeer in "G#" zoveel mogelijk mee te pakken van de concepten van andere talen, je zou kunnen zeggen dat door de manier waarop ik mijn NC programma's door EdingCNC's Macro laat schrijven dat mijn Macro feitelijk functioneert als een Compiler, en.. een IDE waarin ik middels het invullen van dialogen de parameters als eigenschappen van objecten invoer, elke "standaard bewerking" beschouw ik als een object, het resultaat van de aanroep van die functie hangt af van de eigenschappen (parameters) die ik ze toegekend heb, en daarmee is het min of meer objectgeoriënteerd G-Code schrijven, al staan er bar weinig G-Code regels in mijn programma's.. in mijn Draaiprogramma's zelfs geen een doorgaans.. of ik moet handmatig wat toegevoegd hebben.. de G-codes staan in de Macro (die in Runtime als Interpreter fungeert), en zijn allen parametrisch

Code: Selecteer alles

;file created at: 20210216-235432
m100
;cycle chamfer
	#1001=36			(x1)
	#1003=0			(z1)
	#1011=40			(x2)
	#1013=-2			(z2)
	#1023=0			(initial z2)
	#4001=60			(r-feed)
	#4002=0.2			(r-doc)
	#4060=2			(r-tool)
	#4011=30			(f-feed)
	#4012=0.05			(f-doc)
	#4061=4			(f-tool)
	#4050=0.1			(f-stock)
	#4000=0.25			(safety distance)
	#1100=4			(cycle index)
;/cycle
m99
m2
een programmaatje om een schuin kantje aan een draaiwerkstukje te maken ziet er bij mij zo uit.. M100 legt de "start/wisselpositie" vast, je dient het programma te starten met de slede op een positie waar ie zonder problemen kan wisselen., Ook hier heb ik overigens weer Keywords toegepast om de code op te vouwen.. ;Cycle en ;/Cycle.
M99 is de cyclus oproep (gejat van Heidenhain), na het aflopen van de Cyclus gaat de slede middels M101 (staat in de code van de Cyclus) terug naar de wisselpositie..
Als het programma meerdere bewerkingen bevat, dan staan die gewoon onder elkaar, met een M99 na elke cyclusdefinitie.
in Freesprogramma;s komen wel (mondjesmaat) G-Codes voor.. voornamelijk G00's om het gereedschap voor te positioneren boven het werk op het startpunt van de Cyclus.
(ik kreeg overigens een keer de opmerking te horen van een Heidenhain vertegenwoordiger dat mijn Code wel heel sterk op Heidenhain Klartekst lijkt.. hij kon het zo lezen.. Ja.. nogal wiedes.. ik weet wel wat ik kopiëer.. 🤣🤣
en ook hier gebruik ik Indentatie om mijn code leesbaar te houden, alleen die Tab's.. in elk geval is er altijd wat ruimte tussen de parameters en de omschrijving.

'k heb dan wel de API, maar ik ben daarmee helaas niet in staat om verdere aanpassingen aan de Taal (dus de G-Code interpreter van EdingCNC ) te doen.. misschien momenteel maar goed ook, omdat ik nog niet voldoende thuis ben in C.. Ik veronderstel dat de interpreter in C geschreven is.

Programmeren is in elk geval een vak apart.. en ondanks dat G-Code een beperkte taal is.. heeft het toch heel veel mogelijkheden..
chimaerion
Berichten: 241
Lid geworden op: 28 nov 2017 19:50
Locatie: Oost-vlaanderen

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

Bericht door chimaerion »

Is er een mogelijkheid om timers of een tijdfunctie te gebruiken?

Ik wil bijvoorbeeld een actie doen en dan 1 min wachten en dan weer een actie.

Als de cyclustijd van de controller (cnc760) bekend is en constant is kan het wel met een while loop.
Gebruikersavatar
Arie Kabaalstra
Berichten: 10523
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

chimaerion schreef: 21 mar 2021 18:51 Is er een mogelijkheid om timers of een tijdfunctie te gebruiken?

Ik wil bijvoorbeeld een actie doen en dan 1 min wachten en dan weer een actie.

Als de cyclustijd van de controller (cnc760) bekend is en constant is kan het wel met een while loop.
G04 is een "Wachtfunctie".. ik gebruik die onderandere met de Vacuumplaat.. dat de machine na het starten eerst de vacuumplaat aanzet, en dan 3 seconden wacht.

Je kunt het ook via een aparte applicatie laten lopen met de C# Api, maar dan moet je eerst de Applicatie wakker maken..(je kunt dat doen door de interne timer van je applicatie naar de waarde van een bepaalde parameter te laten kijken.. ik noem maar wat.. #300..
dan zet je in je programma code :

Code: Selecteer alles

#300=1
M0
in je applicatie kun je dan laten kijken of #300<0 is.. zo ja.. dan laat je de applicatie de timing doen, alvorens ie verder gaat.. (je kunt het nog leuker maken door de waarde van #300 in te geven in het aantal seconden.. dan kun je de pauze tijd ook nog programmeren..
Omslagtig.. maar het kan, met G04 is het makkelijker.. hoef je er ook geen aparte applicatie voor te bouwen..Ik heb eigenlijk nog nooit getest of.. Momentje....

Ja!..

Code: Selecteer alles

#300 = 6 
G04 P#300
Geeft een pauze van 6 seconden..

In mijn draaimacro's zit ook wel een G04.. bij de "aanslag"macro.. daar laat ik een "pen" die ik in de Toolchanger heb zitten naar een bepaalde plek lopen, dan schuif ik mijn materiaal tegen de pen aan draai de klauwplaat dicht, en druk weer op start.. dan heb ik 2 seconden om de spindel aan te zetten, alvorens de rest van het programma wordt uitgevoerd.. (ik moet de spindel nog met de hand aanzetten vandaar)
chimaerion
Berichten: 241
Lid geworden op: 28 nov 2017 19:50
Locatie: Oost-vlaanderen

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

Bericht door chimaerion »

Ok thanks, de G04 had ik totaal over het hoofd gezien.
Daarmee lukt het inderdaad prima.
Gebruikersavatar
Arie Kabaalstra
Berichten: 10523
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

'k roep het vaak genoeg... RTFM.. en dat bleek ook hier weer te kloppen..🤣

Ik moet er maar eens vaker een kist bier op zetten..
chimaerion
Berichten: 241
Lid geworden op: 28 nov 2017 19:50
Locatie: Oost-vlaanderen

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

Bericht door chimaerion »

Het gaat hier niet over het lezen van de manual, ik heb hem meermaals gelezen, maar bij sommige zaken sta je gewoon niet bij stil en je kan onmogelijk bij alles stilstaan.

Dat is met een boek ook juist hetzelfde als je hem de tweede keer of derde keer leest ervaar je het totaal anders en sta je bij andere dingen stil.

Maar desalniettemin hartelijk bedankt voor de snelle respons. Als ik op de support van Eding moest wachten duurt dat heel wat langer.
Gebruikersavatar
Arie Kabaalstra
Berichten: 10523
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

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

Bericht door Arie Kabaalstra »

Gewoon een kwestie van selectief lezen.. Ga de hele lijst met G en M codes eens door.. dan zie je wat een besturing allemaal kan.. kijk ook eens naar hoe bepaalde dingen geprogrammeerd worden..

Ik zie vaak dat mensen die moeite niet eens nemen, en da's jammer.. zelf dingen uitvlooien geeft zoveel meer voldoening..
H.C
Berichten: 22
Lid geworden op: 08 feb 2021 15:14

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

Bericht door H.C »

Bad number format

Krijg deze melding op zowat elke regel waar ABS in staat.

#712 = ABS[#704 - #703]

cnc760/cnc v4.04.08
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 9334
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

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

Bericht door hugo stoutjesdijk »

H.C schreef: 08 apr 2021 15:25 Bad number format

Krijg deze melding op zowat elke regel waar ABS in staat.

#712 = ABS[#704 - #703]

cnc760/cnc v4.04.08
heb je dit al geprobeert?

Code: Selecteer alles

#712 =[ ABS[#704 - #703]]
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Als je G21 G40 G49 G80 G90 in je startupfile zet wordt die eerste regel in je programma een stuk duidelijker.
H.C
Berichten: 22
Lid geworden op: 08 feb 2021 15:14

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

Bericht door H.C »

thx Hugo,

Na update naar 4.04.09 nog steeds hetzelfde.

Maar ABS omgezet naar abs en.....aaaah het werkt O_o

Iets voor de volgende update.

Grts,
Plaats reactie