Het "Bouwen" van Macro's voor USBCNC
Moderator: Moderators
-
- Berichten: 600
- Lid geworden op: 08 jan 2009 08:53
- Locatie: België
Re: Het "Bouwen" van Macro's voor USBCNC
Bedankt. Als de kinderen zometeen slapen eens wat code kloppen
- Arie Kabaalstra
- Donateur
- Berichten: 13496
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
ik heb hier een Macrootje voor het instellen van gereedschappen voor draaibanken:
De Bijbehorende Afbeelding
en de Macro(s)
Allereerst de Macro voor het ingeven van de Tool Data:
X-Offset : Afstand van de beitelpunt tot aan de Centerlijn van de "boringbar" gaten in een Toolturret, ik stel de bank altijd zo af/in dat als de gaten voor Boringbars op de centerlijn liggen, dat dat Machine Coordinaat X 0 is
Z-Offset : Afstand vanaf de Beitelpunt tot de voorkant van de Turretplaat.
X-Delta : Correctiewaarde X
Z_Delta : Correctiewaarde Z (deze worden gebruikt om de machine "bij te stellen" ter compensatie van beitelslijtage bijvoorbeeld
Radius : de "neusradius" van de beitel, van belang als je met Radiuscompensatie gaat draaien
Orientation : de "stand van de beitel"
In de Macro die ik nu aan het schrijven ben, ga ik ook controleren of de gekozen beitelgeometrie ook past bij de bewerking die je geprogrammeerd hebt.
Dus als je een buitendraaicyclus programmeert met een beitel met orientatie 3 (op een machine met de beitels voor de Centerlijn, zoals de meeste "gewone draaibanken, waaronder ook de EMCO Compact 5 CNC ) dan geeft de machine een Error
de Oplettende kijker heeft al wel gezien dat de beitel op het plaatje getekend is als een beitel ACHTER de centerlijn.. klopt.. Ik ben in eerste instantie bezig met de afbeeldingen voor de EMCOTurn 120.
Dan hoort er nog een snippertje Code bij:
niet heel spannend.. als het goed is, heeft iedereen die macro's schrijft met Dialogen deze al in de Code staan, of een vergelijkbare Subroutine, in de M204 Subroutine wordt ie 2 keer aangeroepen, omdat er 2 dialogen in zitten.. ALTIJD checken of je Dialoog met Ok of Cancel is afgesloten!
Er komen nog 2 velden bij.. voor kalibratie van het gereedschap, de dialoog zal dan de actuele X en Z coordinaten tonen, stel je hebt net een stukje gedraaid, en de beitel een stukje naar achter bewogen, dan meet je je werk op, en voert die maat in bij X Calibration, de Macro zal dan de nieuwe Offset berekenen, en die eveneens in de Tooltabel wegschrijven (indien het gekozen gereedschap ook het geplaatste gereedschap is), anders komen deze velden NIET tevoorschijn (dan gebruik ik gewoon een andere dialoog)
Maar dat komt later.
In elk geval heb je hiermee een Dialoog waarmee je makkelijker je gereedschapsdata aan kan passen..
De Bijbehorende Afbeelding
en de Macro(s)
Code: Selecteer alles
SUB M204
#4908=[#5008] (STORE TOOLNUMBER)
DLGMSG "SELECT TOOL" "SELECT TOOL NUMBER" 5008
GOSUB DLGCHECK
#4400=[5400+#5008] (ARRAY FOR Z-OFFSET)
#4900=[5900+#5008] (ARRAY FOR Z-DELTA)
#4600=[5600+#5008] (ARRAY FOR X-OFFSET)
#4800=[5800+#5008] (ARRAY FOR X-DELTA)
#4500=[5500+#5008] (ARRAY FOR TOOL-DIAMETER)
#4700=[5700+#5008] (ARRAY FOR TOOL-ORIENTATION)
#4401=##4400 (ARRAY LOADING Z-OFFSET)
#4901=##4900 (ARRAY LOADING Z-DELTA)
#4601=##4600 (ARRAY LOADING X-OFFSET)
#4801=##4800 (ARRAY LOADING X-DELTA)
#4501=##4500 (ARRAY LOADING TOOL-DIAMETER)
#4701=##4700 (ARRAY LOADING TOOL-ORIENTATION)
#4501=[#4501/2] (DIAMETER TO RADIUS)
DLGMSG "TOOL DATA" "X-OFFSET" 4601 "Z-OFFSET" 4401 "X-DELTA" 4801 "Z-DELTA" 4901 "RADIUS" 4501 "ORIENTATION" 4701
GOSUB DLGCHECK
##4400=#4401 (ARRAY WRITE TO TOOL TABLE Z-OFFSET)
##4900=#4901 (ARRAY WRITE TO TOOL TABLE Z-DELTA)
##4600=#4601 (ARRAY WRITE TO TOOL TABLE X-OFFSET)
##4800=#4801 (ARRAY WRITE TO TOOL TABLE X-DELTA)
##4500=[#4501*2] (ARRAY WRITE TO TOOL TABLE TOOL-DIAMETER)
##4700=#4701 (ARRAY WRITE TO TOOL TABLE TOOL-ORIENTATION)
IF [#4908==#5008]
M6 T#5008
ENDIF
ENDSUB
X-Offset : Afstand van de beitelpunt tot aan de Centerlijn van de "boringbar" gaten in een Toolturret, ik stel de bank altijd zo af/in dat als de gaten voor Boringbars op de centerlijn liggen, dat dat Machine Coordinaat X 0 is
Z-Offset : Afstand vanaf de Beitelpunt tot de voorkant van de Turretplaat.
X-Delta : Correctiewaarde X
Z_Delta : Correctiewaarde Z (deze worden gebruikt om de machine "bij te stellen" ter compensatie van beitelslijtage bijvoorbeeld
Radius : de "neusradius" van de beitel, van belang als je met Radiuscompensatie gaat draaien
Orientation : de "stand van de beitel"
In de Macro die ik nu aan het schrijven ben, ga ik ook controleren of de gekozen beitelgeometrie ook past bij de bewerking die je geprogrammeerd hebt.
Dus als je een buitendraaicyclus programmeert met een beitel met orientatie 3 (op een machine met de beitels voor de Centerlijn, zoals de meeste "gewone draaibanken, waaronder ook de EMCO Compact 5 CNC ) dan geeft de machine een Error
de Oplettende kijker heeft al wel gezien dat de beitel op het plaatje getekend is als een beitel ACHTER de centerlijn.. klopt.. Ik ben in eerste instantie bezig met de afbeeldingen voor de EMCOTurn 120.
Dan hoort er nog een snippertje Code bij:
Code: Selecteer alles
SUB DLGCHECK
IF [#5398 <1]
MSG "USER CANCELLED OPERATION"
M2
ENDIF
Er komen nog 2 velden bij.. voor kalibratie van het gereedschap, de dialoog zal dan de actuele X en Z coordinaten tonen, stel je hebt net een stukje gedraaid, en de beitel een stukje naar achter bewogen, dan meet je je werk op, en voert die maat in bij X Calibration, de Macro zal dan de nieuwe Offset berekenen, en die eveneens in de Tooltabel wegschrijven (indien het gekozen gereedschap ook het geplaatste gereedschap is), anders komen deze velden NIET tevoorschijn (dan gebruik ik gewoon een andere dialoog)
Maar dat komt later.
In elk geval heb je hiermee een Dialoog waarmee je makkelijker je gereedschapsdata aan kan passen..
Re: Het "Bouwen" van Macro's voor USBCNC
Hopenlijk kan iemand mij helpen met onderstaande. Ik ben geen programmeur maar kan me aardig redden mbt het schrijven van macro's alleen loop ik met het gebruik van de tangens functie steeds tegen een error.
Wanneer ik de regel schrijf zoals ik in dit topic heb gelezen:
Dan krijg ik de error "No identifier found".
Wanneer ik hem schrijf zoals hieronder (ook een manier die ik hier ergens op het forum ben tegen gekomen)
Dan krijg ik de error "Left bracket misscing after unary operation name".
Iemand een idee wat ik hier fout doe? Voor de duidelijkheid #70 moet dus de uitkomst krijgen van Tangens#57.
Wanneer ik de regel schrijf zoals ik in dit topic heb gelezen:
Code: Selecteer alles
[#70=tan#57]
Wanneer ik hem schrijf zoals hieronder (ook een manier die ik hier ergens op het forum ben tegen gekomen)
Code: Selecteer alles
#70 = [tan#57]
Iemand een idee wat ik hier fout doe? Voor de duidelijkheid #70 moet dus de uitkomst krijgen van Tangens#57.
Re: Het "Bouwen" van Macro's voor USBCNC
Misschien [#70=tan(#57)] ?
Re: Het "Bouwen" van Macro's voor USBCNC
Hallo allemaal!
Is al weer even geleden dat ik nog op dit forum ben geweest.
Alvast merci Arie voor het goede werk rond macro's.
Zelf heb ik al wat kleine dingen gedaan en aanpassingen gemaakt aan bestaande om het nodige te bereiken.
Nu ben ik echter op zoek naar een manier om serienummers te graveren in een onderdeel. Hiervoor dacht ik dat macro's wel nodig zouden zijn. Ik ben al zo ver gekomen als het ophalen en wegschrijven van het serienummer:
Dit is natuurlijk het gemakkelijke gedeelte. Nu moet dit getalletje gegraveerd worden in mijn onderdeel. Ik ben al eens door dit topic gegaan, maar kan niet zo direct iets vinden hiervoor. Kunnen we hiervoor misschien de program->engrave functie voor aanroepen?
Of ga ik het verder moeten zoeken en een script in Python ofzo schrijven waar ik naar svg/dxf of zelfs NC(lijkt mij het meest logisch) schrijf en dit dan laden in de edingcnc software? En is dit dan laden in een subroutine die wordt uitgevoerd? Blijf ik dan in mijn origineel programma (misschien achteraan bijplakken)?
Als iemand wat pointers heeft, zeker welkom. Ik ben niet vies van programmeren, maar het uitzoekwerk kan soms veel tijd in beslag nemen.
Is al weer even geleden dat ik nog op dit forum ben geweest.
Alvast merci Arie voor het goede werk rond macro's.
Zelf heb ik al wat kleine dingen gedaan en aanpassingen gemaakt aan bestaande om het nodige te bereiken.
Nu ben ik echter op zoek naar een manier om serienummers te graveren in een onderdeel. Hiervoor dacht ik dat macro's wel nodig zouden zijn. Ik ben al zo ver gekomen als het ophalen en wegschrijven van het serienummer:
Code: Selecteer alles
sub SerialNumber
msg "Get serial number in #4200"
msg "Current serial number = " #4200
#4200 = [#4200 + 1]
endsub
Of ga ik het verder moeten zoeken en een script in Python ofzo schrijven waar ik naar svg/dxf of zelfs NC(lijkt mij het meest logisch) schrijf en dit dan laden in de edingcnc software? En is dit dan laden in een subroutine die wordt uitgevoerd? Blijf ik dan in mijn origineel programma (misschien achteraan bijplakken)?
Als iemand wat pointers heeft, zeker welkom. Ik ben niet vies van programmeren, maar het uitzoekwerk kan soms veel tijd in beslag nemen.
Re: Het "Bouwen" van Macro's voor USBCNC
Als je nu eens 10 subroutines maakt die ieder een getal maken.
Die kun je gewoon in je cad programma maken en copieren.
Het aanroepen van een subroutine graveert dan 1 cijfer. Met G10 en G51 kun je de postie en schaalfactor bepalen.
Je moet alleen nog het getal wat je hebt in losse digits splitsen.
Dat zou zoiets kunnen zijn:
Die kun je gewoon in je cad programma maken en copieren.
Het aanroepen van een subroutine graveert dan 1 cijfer. Met G10 en G51 kun je de postie en schaalfactor bepalen.
Je moet alleen nog het getal wat je hebt in losse digits splitsen.
Dat zou zoiets kunnen zijn:
Code: Selecteer alles
msg "Get serial number in #4200"
#4200=1234
msg "Current serial number = " #4200
#4201=#4200
#4202=fix[#4201/1000]
msg "highest digit is= " #4202
#4201=[#4201-[#4202*1000]]
#4203=fix[#4201/100]
msg "next digit is= " #4203
#4201=[#4201-[#4203*100]]
#4204=fix[#4201/10]
msg "next digit is= " #4204
#4201=[#4201-[#4204*10]]
#4205=#4201
msg "next digit is= " #4205
- Arie Kabaalstra
- Donateur
- Berichten: 13496
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Hmmm.. da's een leuke...
Ik heb in het verleden een besturing geschreven voor een graveermachine, in VB.Net, en daarmee was het vrij eenvoudig om teksten te graveren.
Hoe werkte dat?.. eigenlijk vrij simpel.. dat wil zeggen in VB.Net is het vrij simpel, je haalt karakter voor karakter uit de ingevoerde string, grabbelt daar de Ascii code van op, en gebruikt die om te verwijzen naar de juiste subroutine,
't genereren van een programma voor 1 karakter.. da's echt nog het makkelijke deel.. "here's what i did"
Met een CAM programma genereer je de NC programma's voor elk karakter wat je nodig hebt.
als de hoogte van de gravure, en daarmee de lettergrootte vaststaat.. dan is dat zo 'piept.. als je moet kunnen verschalen.. dan maak je NC programma's van de karakters met een hoogte van 1 mm.
je wilt alleen getallen.. dat scheelt.. er zijn er maar 10.. (heb je er ook aan gedacht om je serienummer binair weer te geven?.. dan kan het met 1 getallen, of zelfs met 1.. als je de 0 weglaat.. dan krijg je gewoon een streepjescode.. en een rechte lijn is makkelijk te verschalen.
Ooit gezien bij "How it's Made.. Tractorfabrikant John Deere snijdt het chassisnummer uit met een Laser, als streepjescode.. die kan op de productielijn met scanners gelezen worden. bij VW gebruiken ze RFID Tags, John Deere doet het dus veel simpeler.. ik hou daar wel van..
Goed.. terug naar jouw geval, je hebt binnen de kortste keren 10 programmaatjes van 1 tm 10
Dit is een voorbeeldje van het getal 2 in Courier Cad Font, verschaalbaar.. Start EdingCNC maar eens, Sla bovenstaande code op als 2.nc, maak #4001 (de schaalfactor) 1.. laad het programma.. verander #4001 in .. laten we zeggen 50.. en Redraw het programma... look what happens!
Dan zit je met de Spatiëring.. nou.. als we gewoon monospaced werken.. dan voegen we aan elke X +#4001 toe.eh.. even wachten.. daar kunnen we beter een andere parameter voor pakken (#4002 ofzo) die we na het eerste getalletje pas gelijk maken aan #4001, ander begin je 50 mm verderop als je je getallen 50 mm hoog wilt hebben.. Da's geen RocketScience..
Dan krijgen we dat dus.. Dat knoop je in een Subroutine.., je maakt dus programma's 0.nc tm 9.nc
Hoe breken we dan het getal op in losse nummers?.. Simpel.. Ik neem aan/ ga er vanuit dat je zelf wel een idee hebt van hoe groot het maximale serienummer zal zijn.
Voorbeeld: Max 10000 dan delen we #4200 door 1000 (stel.. #4200 =6543) gedeeld door 1000 is dat 6.543, daar nemen we't Integer van.. is 6.. da's je eerste getal.. dat trek je ervanaf.. dan vermenigvuldig je het *10.. en krijg je 5.43.. Integer nemen.. =5.. 5 eraf halen.. x 10.. integer.. =4... enzovoorts..
Je had het over Pointers.. da's een goeie.. je kunt de afzonderlijke getallen gewoon in een Array gooien.. als de Pointer 1 is.. heb je het eerste getal.. je gaat em frezen, verhoogt de pointer met 1, verandert #4002 van 0 naar #4001) , freest het tweede getalletje.. enzovoorts..
'k ben nog even aan het spitten.. kom er later even op terug om de getallen in een array te mikken...
Ik heb in het verleden een besturing geschreven voor een graveermachine, in VB.Net, en daarmee was het vrij eenvoudig om teksten te graveren.
Hoe werkte dat?.. eigenlijk vrij simpel.. dat wil zeggen in VB.Net is het vrij simpel, je haalt karakter voor karakter uit de ingevoerde string, grabbelt daar de Ascii code van op, en gebruikt die om te verwijzen naar de juiste subroutine,
't genereren van een programma voor 1 karakter.. da's echt nog het makkelijke deel.. "here's what i did"
Met een CAM programma genereer je de NC programma's voor elk karakter wat je nodig hebt.
als de hoogte van de gravure, en daarmee de lettergrootte vaststaat.. dan is dat zo 'piept.. als je moet kunnen verschalen.. dan maak je NC programma's van de karakters met een hoogte van 1 mm.
je wilt alleen getallen.. dat scheelt.. er zijn er maar 10.. (heb je er ook aan gedacht om je serienummer binair weer te geven?.. dan kan het met 1 getallen, of zelfs met 1.. als je de 0 weglaat.. dan krijg je gewoon een streepjescode.. en een rechte lijn is makkelijk te verschalen.
Ooit gezien bij "How it's Made.. Tractorfabrikant John Deere snijdt het chassisnummer uit met een Laser, als streepjescode.. die kan op de productielijn met scanners gelezen worden. bij VW gebruiken ze RFID Tags, John Deere doet het dus veel simpeler.. ik hou daar wel van..
Goed.. terug naar jouw geval, je hebt binnen de kortste keren 10 programmaatjes van 1 tm 10
Code: Selecteer alles
G0 Z2.0
T1 M6
G0 X[#4001*0.6667] Y[#4001*0.2222]
G1 Z0 F30
G1 F30.0 Z[#4001*-0.2]
G1 F500.0 Y[#4001*0.0]
G1 X[#4001*0.0]
G1 X[#4001*0.5744] Y[#4001*0.5155]
G3 X[#4001*0.2222] Y[#4001*0.9444] I[#4001*-0.1855] J[#4001*0.2067]
G1 X[#4001*0.0758] Y[#4001*0.8347]
G0 Z2.0
Dan zit je met de Spatiëring.. nou.. als we gewoon monospaced werken.. dan voegen we aan elke X +#4001 toe.eh.. even wachten.. daar kunnen we beter een andere parameter voor pakken (#4002 ofzo) die we na het eerste getalletje pas gelijk maken aan #4001, ander begin je 50 mm verderop als je je getallen 50 mm hoog wilt hebben.. Da's geen RocketScience..
Code: Selecteer alles
G0 Z2.0
T1 M6
G0 X[[#4001*0.6667]+#4002] Y[#4001*0.2222]
G1 Z0 F30
G1 F30.0 Z[#4001*-0.2]
G1 F500.0 Y[#4001*0.0]
G1 X[[#4001*0.0]+#4002]
G1 X[[#4001*0.5744]+#4002] Y[#4001*0.5155]
G3 X[[#4001*0.2222]+#4002] Y[#4001*0.9444] I[#4001*-0.1855] J[#4001*0.2067]
G1 X[[#4001*0.0758]+#4002] Y[#4001*0.8347]
G0 Z2.0
Hoe breken we dan het getal op in losse nummers?.. Simpel.. Ik neem aan/ ga er vanuit dat je zelf wel een idee hebt van hoe groot het maximale serienummer zal zijn.
Voorbeeld: Max 10000 dan delen we #4200 door 1000 (stel.. #4200 =6543) gedeeld door 1000 is dat 6.543, daar nemen we't Integer van.. is 6.. da's je eerste getal.. dat trek je ervanaf.. dan vermenigvuldig je het *10.. en krijg je 5.43.. Integer nemen.. =5.. 5 eraf halen.. x 10.. integer.. =4... enzovoorts..
Je had het over Pointers.. da's een goeie.. je kunt de afzonderlijke getallen gewoon in een Array gooien.. als de Pointer 1 is.. heb je het eerste getal.. je gaat em frezen, verhoogt de pointer met 1, verandert #4002 van 0 naar #4001) , freest het tweede getalletje.. enzovoorts..
'k ben nog even aan het spitten.. kom er later even op terug om de getallen in een array te mikken...
- hugo stoutjesdijk
- Donateur
- Berichten: 12045
- Lid geworden op: 02 mar 2011 17:04
- Locatie: elst (u)
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
typisch gevalletje van G91 toepassen lijkt me
Dan hoef je alleen de makro's nog maar op de juiste manier aan te roepen.
Je zet de frees op de startpositie, het makro eindigt altijd op de startpositie van de volgende letter.
Dan hoef je alleen de makro's nog maar op de juiste manier aan te roepen.
Je zet de frees op de startpositie, het makro eindigt altijd op de startpositie van de volgende letter.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
- Arie Kabaalstra
- Donateur
- Berichten: 13496
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
G91 is niet nodig, je spatiëring kun je uit de Array halen.. da's niet zo spannend.. moeilijker dan dat moet je het niet maken..
't uitpeuteren van de afzonderlijke "digits" is nog even een puzzeltje.. maar daar kom ik wel uit..
't uitpeuteren van de afzonderlijke "digits" is nog even een puzzeltje.. maar daar kom ik wel uit..
Re: Het "Bouwen" van Macro's voor USBCNC
Een paar posts hiervoor staat dat al uitgewerkt.Arie Kabaalstra schreef: ↑16 feb 2021 14:10 't uitpeuteren van de afzonderlijke "digits" is nog even een puzzeltje.. maar daar kom ik wel uit..
Re: Het "Bouwen" van Macro's voor USBCNC
Merci voor de snelle reactie. Ik ben er ondertussen al vollebak ingevlogen.
Op dit moment ben ik ook eerder aan het nijgen richting G91. Mijn getalletjes zijn allemaal gemaakt met het nulpunt links-onder van het getal.
Als je bedoeld van de posities uit een array te halen, kan ik dat dan zien als werken met meerder coördinaatsystemen? Ik denk niet dat dat zomaar gaat om deze on the fly aan te passen tijdens het programma? Of mis ik het stukje waarbij je gemakkelijk een offset kunt meegeven aan een subroutine waar je bij ieder X en Y waarde een specifiek getal kunt optellen?
Ik hou jullie zeker op de hoogte!
Op dit moment ben ik ook eerder aan het nijgen richting G91. Mijn getalletjes zijn allemaal gemaakt met het nulpunt links-onder van het getal.
Als je bedoeld van de posities uit een array te halen, kan ik dat dan zien als werken met meerder coördinaatsystemen? Ik denk niet dat dat zomaar gaat om deze on the fly aan te passen tijdens het programma? Of mis ik het stukje waarbij je gemakkelijk een offset kunt meegeven aan een subroutine waar je bij ieder X en Y waarde een specifiek getal kunt optellen?
Ik hou jullie zeker op de hoogte!
- Arie Kabaalstra
- Donateur
- Berichten: 13496
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
'k ben al met een vergelijkbaar stukje bezig.. alleen gebruik ik geen FIX maar INT, want dan "flikker je alles achter de komma overboord" en da's in mijn ogen de beste optie.
'K heb er een Array van gemaakt, 1 based.. dus #4201 tm #4204 voor een serienummer van maximaal 9999
Wil je grotere nummers.. dan moet je gewoon de array uitbreiden vanaf #4204, en het is in de code wel duidelijk hoe je dan verder werkt..
Omdat je met een Array werkt, kun je met 1 If-Then routine uit de voeten, elke keer dat je de pointer verhoogt met 1, gaat de If then kijken naar de waarde van een andere parameter..
Dit moet het wel doen.. Ik heb alleen de "geCNCde 2" in SUB ENGRAVE_2 ingevoegd, maar daarmee is wel duidelijk hoe je een cijfer van 1 mm hoog verschaalt en transleert (#4001 is de schaalfactor, en #4002 is de translatie /Spatiëring), die wordt na de eerste aanroep in
Vermeerderd met de schaalfactor, bovenin het programma wordt ie standaard op 0 gezet..
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..
Bij Lettergrootte 1 gaat ie dus 0.2 diep, bij Lettergroote 5 is dat 1 mm.. Dat kun je aanpassen naar eigen smaak.. je kunt 't ook gewoon aan een Parameter toewijzen, en die eveneens bovenaan neerzetten..
Code: Selecteer alles
DLGMSG "SERIAL NUMBER" "ENTER SERIAL NUMBER" 4200
IF [#4200>=10000]
MSG "SERIAL NUMBER TOO BIG"
M2
ENDIF
MSG "SERIAL NUMBER = " #4200
#4201= [INT[#4200/1000]]
MSG "FIRST DIGIT = "#4201
#4202=[#4200-[#4201*1000]]
#4202=[INT[#4202/100]]
MSG "SECOND DIGIT = "#4202
#4203=[#4200-[#4201*1000]-[#4202*100]]
#4203=[INT[#4203/10]]
MSG "THIRD DIGIT = "#4203
#4204=[#4200-[#4201*1000]-[#4202*100]-[#4203*10]]
MSG "FOURTH DIGIT = "#4204
#1000=4201 (ARRAY POINTER)
WHILE [#1000<4205]
GOSUB ENGRAVE
#1000=[#1000+1]
ENDWHILE
M2
SUB ENGRAVE
MSG "CURRENT DIGIT: "##1000
MSG "ENGRAVING"
ENDSUB
Wil je grotere nummers.. dan moet je gewoon de array uitbreiden vanaf #4204, en het is in de code wel duidelijk hoe je dan verder werkt..
Omdat je met een Array werkt, kun je met 1 If-Then routine uit de voeten, elke keer dat je de pointer verhoogt met 1, gaat de If then kijken naar de waarde van een andere parameter..
Code: Selecteer alles
#4001=3 (FONTSIZE)
#4002=0 (SPACING 0 FOR FIRST DIGIT)
DLGMSG "SERIAL NUMBER" "ENTER SERIAL NUMBER" 4200
IF [#4200>=10000]
MSG "SERIAL NUMBER TOO BIG"
M2
ENDIF
MSG "SERIAL NUMBER = " #4200
#4201= [INT[#4200/1000]]
MSG "FIRST DIGIT = "#4201
#4202=[#4200-[#4201*1000]]
#4202=[INT[#4202/100]]
MSG "SECOND DIGIT = "#4202
#4203=[#4200-[#4201*1000]-[#4202*100]]
#4203=[INT[#4203/10]]
MSG "THIRD DIGIT = "#4203
#4204=[#4200-[#4201*1000]-[#4202*100]-[#4203*10]]
MSG "FOURTH DIGIT = "#4204
#1000=4201 (ARRAY POINTER)
WHILE [#1000<4205]
GOSUB ENGRAVE
#1000=[#1000+1]
#4002=[#4002+#4001]
ENDWHILE
M2
SUB ENGRAVE
IF [1000>1]
ENDIF
MSG "CURRENT DIGIT: "##1000
IF [##1000==0]
GOSUB ENGRAVE_0
ENDIF
IF [##1000==1]
GOSUB ENGRAVE_1
ENDIF
IF [##1000==2]
GOSUB ENGRAVE_2
ENDIF
IF [##1000==3]
GOSUB ENGRAVE_3
ENDIF
IF [##1000==4]
GOSUB ENGRAVE_4
ENDIF
IF [##1000==5]
GOSUB ENGRAVE_5
ENDIF
IF [##1000==6]
GOSUB ENGRAVE_6
ENDIF
IF [##1000==7]
GOSUB ENGRAVE_7
ENDIF
IF [##1000==8]
GOSUB ENGRAVE_8
ENDIF
IF [##1000==9]
GOSUB ENGRAVE_9
ENDIF
ENDSUB
SUB ENGRAVE_0
MSG "ENGRAVING 0"
ENDSUB
SUB ENGRAVE_1
MSG "ENGRAVING 1"
ENDSUB
SUB ENGRAVE_2
MSG "ENGRAVING 2"
G0 Z2.0
T1 M6
G0 X[[#4001*0.6667]+#4002] Y[#4001*0.2222]
G1 Z0 F300
G1 F300.0 Z[#4001*-0.2]
G1 F3000.0 Y[#4001*0.0]
G1 X[[#4001*0.0]+#4002]
G1 X[[#4001*0.5744]+#4002] Y[#4001*0.5155]
G3 X[[#4001*0.2222]+#4002] Y[#4001*0.9444] I[#4001*-0.1855] J[#4001*0.2067]
G1 X[[#4001*0.0758]+#4002] Y[#4001*0.8347]
G0 Z2.0
ENDSUB
SUB ENGRAVE_3
MSG "ENGRAVING 3"
ENDSUB
SUB ENGRAVE_4
MSG "ENGRAVING 4"
ENDSUB
SUB ENGRAVE_5
MSG "ENGRAVING 5"
ENDSUB
SUB ENGRAVE_6
MSG "ENGRAVING 6"
ENDSUB
SUB ENGRAVE_7
MSG "ENGRAVING 7"
ENDSUB
SUB ENGRAVE_8
MSG "ENGRAVING 8"
ENDSUB
SUB ENGRAVE_9
MSG "ENGRAVING 9"
ENDSUB
Code: Selecteer alles
WHILE [#1000<4205]
GOSUB ENGRAVE
#1000=[#1000+1]
#4002=[#4002+#4001]
ENDWHILE
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..
Code: Selecteer alles
G1 F300.0 Z[#4001*-0.2]
- hugo stoutjesdijk
- Donateur
- Berichten: 12045
- Lid geworden op: 02 mar 2011 17:04
- Locatie: elst (u)
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Nodig niet, maar het scheelt heeeeel veel rotzooi die je niet nodig hebt. Maar als je aan parameters verslaafd bent, schrijf je het toch gewoon uit.
Code: Selecteer alles
SUB ENGRAVE_2
MSG "ENGRAVING 2"
(uitvoeren in G91)
G0 Z2.0
G0 X0.6667 Y0.2222
G1 Z0 F300
G1 F300.0 Z-0.2
G1 F3000.0 Y0.0
G1 X0.0
G1 X0.5744 Y0.5155
G3 X0.2222 Y0.9444 I-0.1855 J0.2067
G1 X0.0758 Y0.8347
G0 Z2.0
G0 X1 Y0
ENDSUB
Ik zou dan wel nog even de Feed voor XY en Z in een parametertje stoppen, hoef je al die subjes niet door te lopen als het een keer sneller of langzamer moet.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.