Het "Bouwen" van Macro's voor USBCNC
Moderator: Moderators
Re: Het "Bouwen" van Macro's voor USBCNC
Arie, het jaar is nog jong, maar ik nomineer je hierbij voor de de mooiste post op het forum van het jaar.
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Niet zo snel... 't mooie komt pas als duidelijk is dat de vraagsteller daadwerkelijk wat kan met dat hele verhaal...
Re: Het "Bouwen" van Macro's voor USBCNC
Hoi Jan,
Super duidelijke uitleg! hier kan ik wat mee!
Ik ga alles eens netjes uitsplitsen en onderbrengen in losse sub's
Ook dat trucje om de G91 te omzeilen heel erg handig, en niet meer het gevaar dat je een keer vergeet de G90 weer actief te maken!
Ik wil uiteindelijk toewerken naar iets waar ik verschillende dialogen aan kan roepen voor het frezen van relatief simpele vormen, zoals gaten sleuven of pockets zonder daar een stukje cam voor in te hoeven schakelen.
Ha en wat dat heel oud zijn betreft, tis maar hoe je het bekijkt, ben op mn 14e begonnen met basic op de ZX-spectrum en gaanderweg zelf beetje bij beetje verder geklooid
nogmaals hartelijk dank voor de duw in de goeie richting!
Nagekomen bericht :
Toch nog een dingetje wat me niet 100% duidelijk is in je voorbeeld
Hoe zorg je er dan voor dat je als uit de toolcheck blijkt dat de tool niet geschikt is je weer opnieuw terecht komt op het punt waar de dialog1 wordt gestart?
In bovenstaand geval zou een simpelweg opnieuw aanroepen van de user1 voldoende zijn lijkt mij, maar wat als er na de gosub dialog1 ook nog een gosub dialog2 zou zijn, en er in de check op de gegevens uit dialog2 een fout zou optreden, dan wil je eigenlijk niet helemaal van voren beginnen.
Groetjes Ferry.....
Super duidelijke uitleg! hier kan ik wat mee!
Ik ga alles eens netjes uitsplitsen en onderbrengen in losse sub's
Ook dat trucje om de G91 te omzeilen heel erg handig, en niet meer het gevaar dat je een keer vergeet de G90 weer actief te maken!
Ik wil uiteindelijk toewerken naar iets waar ik verschillende dialogen aan kan roepen voor het frezen van relatief simpele vormen, zoals gaten sleuven of pockets zonder daar een stukje cam voor in te hoeven schakelen.
Ha en wat dat heel oud zijn betreft, tis maar hoe je het bekijkt, ben op mn 14e begonnen met basic op de ZX-spectrum en gaanderweg zelf beetje bij beetje verder geklooid
nogmaals hartelijk dank voor de duw in de goeie richting!
Nagekomen bericht :
Toch nog een dingetje wat me niet 100% duidelijk is in je voorbeeld
Code: Selecteer alles
SUB User_1
gosub dialog1
gosub dialogcheck
gosub toolcheck
gosub Gathelix
gosub rectract
ENDSUB
In bovenstaand geval zou een simpelweg opnieuw aanroepen van de user1 voldoende zijn lijkt mij, maar wat als er na de gosub dialog1 ook nog een gosub dialog2 zou zijn, en er in de check op de gegevens uit dialog2 een fout zou optreden, dan wil je eigenlijk niet helemaal van voren beginnen.
Groetjes Ferry.....
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Ferry,
Ik denk dat we dan ongeveer van dezelfde leeftijd zijn, Ik ben ook op mijn 14de begonnen met programmeren, maar dan op een Commodore C16.
Commodore Basic V3.5 dus..
Helaas.. heeft Edsger W. Dijkstra het volgende opgemerkt over programmeurs die in Basic hebben geschreven:
Ik quote Edsger Dijkstra weer:
Ik pretendeer niet een IT-er te zijn, maar door de jaren heen, met lezen van artikelen en boeken over programmeren (ja.. ook in Basic), heb ik het nodige opgestoken.. tevens heb ik in mijn werk genoeg gelegenheid gehad om de nodige dingen "uit te vlooien" op het gebied van (met name) CNC programmeren van Parametrische programma's..
Daar moet ik wel aan toevoegen dat Visual Basic, hoewel een variant van Basic, toch heel anders in elkaar steekt dan ZX of Commodore Basic. zeker de latere VB.NET (vanaf versie 7.0) heeft weinig meer van doen.
Wat begon als wat macrootjes groeide uiteindelijk uit tot iets wat je "software" mag gaan noemen.. omdat mijn "Macro.cnc" volstaat met subroutines die ik te pas en te onpas aan kan roepen voor aller hande trucs..
Persoonlijk zeg ik "kies een paradigma wat je prettig vind, en hou je daar aan"
Door de opbouw van mijn Macro's kun je stellen dat ik object georienteerd programmeer. ik beschouw elke bewerking als een object, en ik ken de eigenschappen van dat object toe in de dialoog.
de dialoog is op zijn beurt ook weer een object, omdat ik en vanuit de Userfunctie aan kan roepen, maar ook vanuit de Macro zelf..
Dit is mogelijk doordat ik de Dialoog in een aparte Sub heb staan, zodat je de diverse dialogen ook kan overerven in andere functies/objecten.
Wat ik hiermee wil zeggen is: beschouw het schrijven van macro's als het bouwen van software.. lees je in.. gebruik dezelfde methodieken als de professionals.
het grote verschil tussen VB.NET en EdingCNC G-Code voor de macro is dat je in VB eerst eigenlijk je grafische weergave bouwt, en dan de Code erachter hangt, in EdingCNC ga je eerst je structuur bouwen, en dan eventueel je grafische user interface, in de vorm van dialogen en messages.
Daarmee zijn je dialogen in wezen objecten, omdat je de eigenschappen definieert als je ze gaat gebruiken.
Je kunt er alle kanten mee op.. in wezen heb ik met mijn macro's die dialogen geven voor het programmeren van mijn bewerkingen een "IDE" oftewel een Integrated Development environment, terwijl het wegschrijven van de parameters naar de Teach-in file werkt als een Compiler, waar de uitvoer door de Interpreter wordt uitgevoerd in de macro
Ik denk dat we dan ongeveer van dezelfde leeftijd zijn, Ik ben ook op mijn 14de begonnen met programmeren, maar dan op een Commodore C16.
Commodore Basic V3.5 dus..
Helaas.. heeft Edsger W. Dijkstra het volgende opgemerkt over programmeurs die in Basic hebben geschreven:
Laat ik het zo stellen.. ik heb niet te veel blootstelling gehad.. omdat ik op de MTS les kreeg in het programmeren in Turbo Pascal, Daarna ga je toch anders schrijven, omdat Pascal meer een procedurele taal is.. je "moet" structuur aanbrengen.. in Basic, zeker met Goto's kun je "aankloten" en krijg je het vaak wel werkend.. maar..It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
Ik quote Edsger Dijkstra weer:
Hoe "compacter" je code, hoe minder de kans op grote Bugs..Program testing can be used to show the presence of bugs, but never to show their absence!
Ik pretendeer niet een IT-er te zijn, maar door de jaren heen, met lezen van artikelen en boeken over programmeren (ja.. ook in Basic), heb ik het nodige opgestoken.. tevens heb ik in mijn werk genoeg gelegenheid gehad om de nodige dingen "uit te vlooien" op het gebied van (met name) CNC programmeren van Parametrische programma's..
Daar moet ik wel aan toevoegen dat Visual Basic, hoewel een variant van Basic, toch heel anders in elkaar steekt dan ZX of Commodore Basic. zeker de latere VB.NET (vanaf versie 7.0) heeft weinig meer van doen.
Wat begon als wat macrootjes groeide uiteindelijk uit tot iets wat je "software" mag gaan noemen.. omdat mijn "Macro.cnc" volstaat met subroutines die ik te pas en te onpas aan kan roepen voor aller hande trucs..
Persoonlijk zeg ik "kies een paradigma wat je prettig vind, en hou je daar aan"
Door de opbouw van mijn Macro's kun je stellen dat ik object georienteerd programmeer. ik beschouw elke bewerking als een object, en ik ken de eigenschappen van dat object toe in de dialoog.
de dialoog is op zijn beurt ook weer een object, omdat ik en vanuit de Userfunctie aan kan roepen, maar ook vanuit de Macro zelf..
Dit is mogelijk doordat ik de Dialoog in een aparte Sub heb staan, zodat je de diverse dialogen ook kan overerven in andere functies/objecten.
Wat ik hiermee wil zeggen is: beschouw het schrijven van macro's als het bouwen van software.. lees je in.. gebruik dezelfde methodieken als de professionals.
het grote verschil tussen VB.NET en EdingCNC G-Code voor de macro is dat je in VB eerst eigenlijk je grafische weergave bouwt, en dan de Code erachter hangt, in EdingCNC ga je eerst je structuur bouwen, en dan eventueel je grafische user interface, in de vorm van dialogen en messages.
Daarmee zijn je dialogen in wezen objecten, omdat je de eigenschappen definieert als je ze gaat gebruiken.
Je kunt er alle kanten mee op.. in wezen heb ik met mijn macro's die dialogen geven voor het programmeren van mijn bewerkingen een "IDE" oftewel een Integrated Development environment, terwijl het wegschrijven van de parameters naar de Teach-in file werkt als een Compiler, waar de uitvoer door de Interpreter wordt uitgevoerd in de macro
Re: Het "Bouwen" van Macro's voor USBCNC
Simpel gezegd wil je er voor zorgen dat je code leesbaar blijft en van boven naar beneden stroomt.Arie Kabaalstra schreef: ↑09 apr 2019 02:17 dan moet je wel heel oud zijn.. of slecht voorgelicht.. Want!..
Edsger Wiebe Dijkstra, de "vader van de moderne informatica schreef het volgende:
A case against the GOTO Statement
Ik wil niet pretenderen dat ik volledig snap waar het over gaat.. maar de basis is me duidelijk.
Zoals ik het zelf altijd uitleg: met een Gosub kom je ALTIJD terug, met een GOTO weet je nooit waar ie blijft
'k heb me vroeger ook uitgebreid bezondigd aan het gebruik van GOTO, tot ik Gosub ontdekte.. sindsdien geen GOTO meer gebruikt.
Juist dat laatste is wat je met een goto statement om zeep kunt helpen en je code zogenaamde "spaghetti" code wordt.
Je springt dan van de hak naar de tak niet alleen van boven naar beneden maar ook van beneden naar boven en dat is nou eenmaal voor een mens onleesbaar.
De enigste uitzondering die je vandaag de dag nog ziet in C code is voor error afhandeling, als je bv in een functie op heel veel plaatsen er uit wilt wordt het nog gebruikt maar eigenlijk inderdaad beetje vies en gewoon niet doen
- audiomanics
- Donateur
- Berichten: 5273
- Lid geworden op: 28 feb 2007 09:31
- Locatie: Appelscha
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Voordeel van een GoTo is dat je geen stack opbouwt.. Bij geneste gosubs kan dat wel eens tot een crash leiden..(StackOverflow). En ook is, inderdaad, een error-afhandeling met een GoTo wel makkelijk om uit een sub te springen.. Al blijft de stack dan nog wel vol staan.
Verder is een GoTo eigenlijk "not done" hoewel je in puur assembly of machinetaal (jawel, het programmeren met uitsluitend enen en nullen) toch heel vaak gewoon naar een adres springt.. Maar wie programmeert er tegenwoordig nog in assembly.. Codes die ik destijds, overdreven gedocumenteerd, geschreven had zijn nu voor mij praktisch onleesbaar geworden (die processoren zijn ook niet echt meer in gebruik, zoals de Z80 en 68030... wel razendsnelle "inlines" geschreven voor oa Turbo-Pascal))
Kees
Verder is een GoTo eigenlijk "not done" hoewel je in puur assembly of machinetaal (jawel, het programmeren met uitsluitend enen en nullen) toch heel vaak gewoon naar een adres springt.. Maar wie programmeert er tegenwoordig nog in assembly.. Codes die ik destijds, overdreven gedocumenteerd, geschreven had zijn nu voor mij praktisch onleesbaar geworden (die processoren zijn ook niet echt meer in gebruik, zoals de Z80 en 68030... wel razendsnelle "inlines" geschreven voor oa Turbo-Pascal))
Kees
<klik>... euh..test... 123.... einde test... uit.<klik>
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Ja.. daar komt het wel op neer.. ik streef er zelf naar om mijn code zo leesbaar mogelijk te houden.. in mijn macro ga ik met geneste subroutines tot een stack van 7.. da's nog niet in de buurt van de limiet, maar omdat mijn "Stack" in de code al zichtbaar is, hou ik het overzicht.. en da's wel zo lekker..Simpel gezegd wil je er voor zorgen dat je code leesbaar blijft en van boven naar beneden stroomt.
Juist dat laatste is wat je met een goto statement om zeep kunt helpen en je code zogenaamde "spaghetti" code wordt.
Je springt dan van de hak naar de tak niet alleen van boven naar beneden maar ook van beneden naar boven en dat is nou eenmaal voor een mens onleesbaar.
De enigste uitzondering die je vandaag de dag nog ziet in C code is voor error afhandeling, als je bv in een functie op heel veel plaatsen er uit wilt wordt het nog gebruikt maar eigenlijk inderdaad beetje vies en gewoon niet doen
Ik heb ooit bij een bedrijf gewerkt waar men ook wat macro's had op de Fanuc gestuurde machines, en de schrijver daarvan was daar nogal trots op.. (aap met 7 ... ), de eerste blik in één van die macro's toonde een grote hoeveelheid GOTO's.. ik dacht dat ik ter plekke misselijk werd..
de meeste programma's bestaan uit de delen die ik al eerder aanhaalde, invoer, controle, uitvoer en terugloop naar startpunt.
Door die delen in afzonderlijke subs te gooien, weet je precies wat elk deel doet, en in welke volgorde
Als je bijvoorbeeld een programma gaat maken dat een rondkamer uitfreest tot D > 2Dfrees, en je dus in meerdere gangen naar buiten gaat.. dan wordt de structuur niet wezenlijk anders
1- Gegevens "ophalen"
2- Dialoog OK/Cancel Check
3- Toolcontrole (past of niet)
4- Uitvoer
5- Terugkeer naar startpunt
Die hadden we al, voor in 1 keer helix naar beneden..
1- Gegevens "ophalen"
2- Dialoog OK/Cancel Check
3- Toolcontrole (past of niet)
4- Uitvoer
-controle : zolang radius < eindradius
-uitvoeren op huidige radius
-radius updaten
-eind controle
5- Terugkeer naar startpunt
dan komt er dus in de uitvoer niet alleen een subje dat naar beneden freest( Sub Helixfrezen), maar ook een die de radius vergroot tot de eindradius bereikt is.
Stel, je gaat met Frees 4 een gat van ø12 maken, dan begin je op, laten we zeggen met een 50% stepover, op R2 en krijg je een gat van 8, 10 en uiteindelijk 12.. zolang de radius parameter kleiner is dan Rgat-Rtool blijf je die Sub Helixfrezen aanroepen.
Dit is wel een meer gecompliceerde algoritme, want je moet na elke keer tot diepte frezen de parameters voor dat deel weer op 0 stellen.. Maar het is te doen.. als je bedenkt dat mijn rondkamercyclus uit niet 2, maar 3 lagen bestaat.. ik ga eerst in een Helix naar beneden tot de eerste snedediepte, dan ga ik tot de buitenmaat, en dat blijf ik herhalen tot ik op diepte ben..
Als je 2 dialogen nodig hebt voor een bewerking.. dan heb je 24 parameters.. als je 24 parameters moet instellen voor één bewerking.. dan heb je ergens iets niet goed gedaan..n bovenstaand geval zou een simpelweg opnieuw aanroepen van de user1 voldoende zijn lijkt mij, maar wat als er na de gosub dialog1 ook nog een gosub dialog2 zou zijn, en er in de check op de gegevens uit dialog2 een fout zou optreden, dan wil je eigenlijk niet helemaal van voren beginnen.
Als je op een professionele machine (iets met een Heidenhain sturing ofzo) een verkeerde waarde in een cyclus invult.. dan doet ie gewoon niets met die cyclus, en is het aan jou om te zien waarom niet..
Als je vantevoren de fouten wilt afvangen.. dan ben je eigenlijk al heel erg liev voor de gene die de waarden moet inkloppen..
Wat je ook kan doen.. Stel!.. we pakken dat Helix progje er even bij.. voor je de dialoog opent, zet je de diameter parameter op [2*#5009].. dan staat de minimale gatmaat al ingevuld.. moet je kleiner.. dan moet je er een ander tool inzetten.. Cancel drukken en opnieuw beginnen.. , je kunt ook middels een MSG de minimale en maximale maten opgeven. dan heb je een hulplijntje in je scherm.. :)
- hugo stoutjesdijk
- Donateur
- Berichten: 12053
- Lid geworden op: 02 mar 2011 17:04
- Locatie: elst (u)
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Ach, als je genoodzaakt bent in Basic te schrijven, en de code is lang genoeg ga je vanzelf de noodzaak van netjes werken wel inzien, en in Basic mag je gewoon gosubs gebruiken hoor.Arie Kabaalstra schreef: ↑09 apr 2019 14:33 It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
En later dank je god op je blote knietjes dat er Turbo Pascal gekomen is. Ik geloof m'n eerste versie voor $99.- een wereldschokkende lage prijs, en het was nog sneller en bedieningsvriendelijker dan de duizenden guldens kostende compilers die er tegenover stonden.
Ik denk dus dat het mij juist geholpen heeft van het inzien van de noodzaak om bepaalde zaken gewoon secuur te doen, of dat nu software is of je opzet bij 3D tekenwerk, net als de fundering van een huis. Als je begint met een slechte basis wordt je later tig-dubbel teruggepakt door je systeem.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
zoals ik al schreef.. toen ik ontdekte hoe krachtig Gosub was.. heb ik sindsdien geen Goto meer gebruikt.. helaas heb ik niet meer dan 1 jaartje les gehad met TurboPascal, en hadden we het niet voor thuis.. dat was wel jammer.. anders had ik thuis lekker verder kunnen "klooien"..
Ik zou nu graag nog eens C++ willen leren.. zodat ik op de API van EdingCNC software kan bouwen.. de DotNet API wordt niet meer ondersteund..
En juist op die DotNet API Heb ik 2 speciale GUI's gebouwd voor EdingCNC.. da's best leuk werk.. EdingCNC wordt op die manier een "Toolbox" waar je in je eigen GUI de nodige tools uit trekt voor hetgeen je wilt doen..
één van de GUI's voor een Coordinaten Ponsmachine kon je programmeren door er een tabel uit Excel in te plakken.. gewoon CtrlC/CtrlV.. of op een knop klikken.. Mijn toenmalige werkgever en mijn collega's waren daar heel enthousiast over..
In Basic ging ik ook meer en meer gestructureerd programmeren.. deels ook door de artikelen die ik toen al las over onderandere Edsger W. Dijkstra.. zulke dingen zetten je toch aan het denken..
Ik zou nu graag nog eens C++ willen leren.. zodat ik op de API van EdingCNC software kan bouwen.. de DotNet API wordt niet meer ondersteund..
En juist op die DotNet API Heb ik 2 speciale GUI's gebouwd voor EdingCNC.. da's best leuk werk.. EdingCNC wordt op die manier een "Toolbox" waar je in je eigen GUI de nodige tools uit trekt voor hetgeen je wilt doen..
één van de GUI's voor een Coordinaten Ponsmachine kon je programmeren door er een tabel uit Excel in te plakken.. gewoon CtrlC/CtrlV.. of op een knop klikken.. Mijn toenmalige werkgever en mijn collega's waren daar heel enthousiast over..
In Basic ging ik ook meer en meer gestructureerd programmeren.. deels ook door de artikelen die ik toen al las over onderandere Edsger W. Dijkstra.. zulke dingen zetten je toch aan het denken..
Re: Het "Bouwen" van Macro's voor USBCNC
Dat hoorde ik je in 2013 al zeggen
Ik zou hier es naar kijken: https://www.dipmat.univpm.it/~demeio/pu ... uage_2.pdf
Het hele boek van Kernigan en Ritchie als pdf-bestand, ik heb er indertijd fl 49,95 voor betaald.
Overigens kan je met C veel ergere dingen doen dan je in Basic kan, een leuke is gealloceerd geheugen na gebruik niet meer vrij geven, doe dat een paar keer en er is geen geheugen meer om te alloceren, ook niet voor andere programma's Ja, das een crash..en tis ook niet altijd duidelijk wat de oorzaak is.
Je kan deze ook es proberen, dan ben je dr in een enkele stap: http://www.lmpt.univ-tours.fr/~volkov/C++.pdf
Think it, draw it, make it.
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Ja.. inderdaad.. ik ben het al een tijdje van plan.. ik kom er alleen niet toe.. ik heb boeken, ik heb een IDE, maar echt een applicatie bouwen daar ben ik nog niet aan toe gekomen..
Eigenlijk zou ik wat "ondersteuning" willen hebben van iemand die me de "structuur" van C++ kan uitleggen.
De eerste stapjes zijn inmiddels wel gemaakt.. ik heb wat zitten spelen met een Arduino.. en die programmeer je in C.
Naar wat ik begrepen heb, is C++ alleen maar uitgebreider (Classes en Objecten) maar qua syntaxis hetzelfde als C
Eigenlijk zou ik wat "ondersteuning" willen hebben van iemand die me de "structuur" van C++ kan uitleggen.
De eerste stapjes zijn inmiddels wel gemaakt.. ik heb wat zitten spelen met een Arduino.. en die programmeer je in C.
Naar wat ik begrepen heb, is C++ alleen maar uitgebreider (Classes en Objecten) maar qua syntaxis hetzelfde als C
- P1-Engineering
- Donateur
- Berichten: 435
- Lid geworden op: 27 aug 2019 23:28
- Locatie: Haarlem
Re: Het "Bouwen" van Macro's voor USBCNC
Vraag met betrekking tot het aanpassen van de Sorotec macro.
Ben nu ongeveer 2 weken onderweg met Eding CNC en langzamerhand beginnen de puzzelstukjes samen te komen. ;)
Om te beginnen heb ik de Sorotec macro geïnstalleerd, ingesteld etc. Na wat zoekwerk ben ik erachter gekomen dat de Sorotec macro de tooltable niet gebruikt. Waarschijnlijk omdat het grootste deel van de klanten deze niet gebruikt.
Aangezien ik een ATC spindel heb met toolhouders zou ik hier graag wel gebruik van maken. De gehele ATC functie ga ik pas in een later stadium implementeren aangezien ik daar een compleet nieuwe controller voor wil gaan bouwen.
Nu is mijn vraag, kan ik simpelweg de Sorotec routine voor het inmeten van het gereedschap in de macro vervangen voor de originele routine van Eding?.
Heb op het moment nog te weinig kennis van de macro's om dit te kunnen bepalen. Wil mij hier wel verder in gaan verdiepen, want de mogelijkheden zijn enorm.
Ben nu ongeveer 2 weken onderweg met Eding CNC en langzamerhand beginnen de puzzelstukjes samen te komen. ;)
Om te beginnen heb ik de Sorotec macro geïnstalleerd, ingesteld etc. Na wat zoekwerk ben ik erachter gekomen dat de Sorotec macro de tooltable niet gebruikt. Waarschijnlijk omdat het grootste deel van de klanten deze niet gebruikt.
Aangezien ik een ATC spindel heb met toolhouders zou ik hier graag wel gebruik van maken. De gehele ATC functie ga ik pas in een later stadium implementeren aangezien ik daar een compleet nieuwe controller voor wil gaan bouwen.
Nu is mijn vraag, kan ik simpelweg de Sorotec routine voor het inmeten van het gereedschap in de macro vervangen voor de originele routine van Eding?.
Heb op het moment nog te weinig kennis van de macro's om dit te kunnen bepalen. Wil mij hier wel verder in gaan verdiepen, want de mogelijkheden zijn enorm.
- Arie Kabaalstra
- Donateur
- Berichten: 13527
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Het "Bouwen" van Macro's voor USBCNC
Dan zal ik die sorotec macro eens moeten zien, om daar een oordeel over te vellen.
Re: Het "Bouwen" van Macro's voor USBCNC
Code: Selecteer alles
;***************************************************************************************
;SOROTEC
;Withig 12
;77836 Rheinmünster
;Germany
;***************************************************************************************
;* MACRO CNC V2.0c Ohne Auto-WZW
;***************************************************************************************
;***************************************************************************************
;DOKU
;***************************************************************************************
;Versionshistorie
;V2.0c: Funktionen für Eding WIFI Handrad implementiert
;V2.0b: Werte der Werkzeugtabelle auf Null setzen
;V2.0a: Z-Höhenausgleich
;V2.0 : 3D Taster für X und Y Nullpunktermittlung
; Bruchkontrolle (Nicht aktiviert)
; Spindelwarmlauf
; Werkezugwechselbutton
;V1.0e : Bei Wechslertyp 0 und 1 wird jetzt vor Z-Nullpunktermittlung nicht mehr geprüft ob Werkezug vermessen
;Verwendete Variablen
; #3500 INIT
; #3501 Merker ( Wurde Werkzeug bereits Vermessen? 1=JA)
; #3502 Merker Wird nur für eine Berechnung benötigt
; #3503 Merker Ja / Nein in Dialogabfragen
; #3504 Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
; #3505 Merker ob Längenmessung von Handrad 1=Handrad
; #4500 FREI
; #4501 Aktuelle Werkzeuglänge
; #4502 Alte Werkzeuglänge
; #4503 Maximale Werkzeuglänge (WZL-Vermessung)
; #4504 Antastgeschwindigkeit zum Taster "suchen" (mm/min) (WZL-Vermessung)
; #4505 Tastgeschwindigkeit zum Messen(mm/min) (WZL-Vermessung)
; #4506 ;Sicherheitshöhe als Maschinenkoordinate (WZL-Vermessung)
; #4507 ;Positionsangabe der X Achse (WZL-Vermessung)
; #4508 ;Positionsangabe der Y Achse (WZL-Vermessung)
; #4509 Abstand Spindelnase zu Längensensor von Z0 aus (WZL-Vermessung)
; #4510 Tasterhöhe (ZNP-Vermessung)
; #4511 Freifahrhöhe (ZNP-Vermessung)
; #4512 Antastgeschwindigkeit zum Taster "suchen" (ZNP-Vermessung)
; #4513 Tastgeschwindigkeit zum Messen (ZNP-Vermessung)
; #4514 Zwischenspeicher für X Pos
; #4515 Zwischenspeicher für Y Pos
; #4516 Zwischenspeicher für Z Pos
; #4517 Merker (Es wurde kein Werkzeug ausgewählt)
; #4518 Merker (Achse zurückfahren auf Z Vermessungspunkt)
; #4519 Was tun nach Werkzeugvermessung: 0= vordefinierten Punkt anfahren 1= Werkstücknullpunkt fahren 2= Werkzeugwechselpos anfahren 3= Maschinennullpunkt anfahren 4= Stehen bleiben
; #4524 Position X nach Längenmessung
; #4525 Position Y nach Längenmessung
; #4526 Position Z nach Längenmessung
; #4520 Werkzeugwechseltyp 0= Mache garnix 1 = Nur WPos Anfahren 2= WPos anfahren + Vermessen
; #4521 (TYP 0) Werkzeugwechselpos X
; #4522 (TYP 0) Werkzeugwechselpos Y
; #4523 (TYP 0) Werkzeugwechselpos Z
; #4524 Position X nach Längenmessung
; #4525 Position Y nach Längenmessung
; #4526 Position Z nach Längenmessung
; #4527 Abstand Taster zum Spindelkopf bei Z0 G53 negativer Wert
; #4528 Erlaubte Toleranz Bruchkontrolle
; #4529 Merker ob Automatische Bruchkontrolle eingeschaltet
; #4530 Merker ob Kegelcheck eingeschaltet NICHT IN GEBRAUCH
; #4531 Kegelhöhe über Sensor NICHT IN GEBRAUCH
; #4532 Drehzahl Stufe 1 für Warmlauf Spindel
; #4533 Laufzeit Stufe 1 für Warmlauf Spindel
; #4534 Drehzahl Stufe 2 für Warmlauf Spindel
; #4535 Laufzeit Stufe 2 für Warmlauf Spindel
; #4536 Drehzahl Stufe 3 für Warmlauf Spindel
; #4537 Laufzeit Stufe 3 für Warmlauf Spindel
; #4538 Drehzahl Stufe 4 für Warmlauf Spindel
; #4539 Laufzeit Stufe 4 für Warmlauf Spindel
; #4540 bis #4549 Leer für mehr Stufen
; #4550 Nullpunktermittlung Merker Richtung
; #4551 Nullpunktermittlung Versatz X+
; #4552 Nullpunktermittlung Versatz X-
; #4553 Nullpunktermittlung Versatz Y+
; #4554 Nullpunktermittlung Versatz Y-
; #4600 Ab hier für Wechsler reserviert
; #5397 Abfrage ob sich die Maschine im Render Modus befindet [0=Nein NormalModus] [1=Ja RenderModus]
;***************************************************************************************
IF [#3500 == 0] then ; INIT
#3500 = 1
IF [#4504 == 0] THEN
#4504 =50 ;Antastgeschwindigkeit zum Taster "suchen" (mm/min)
ENDIF
IF [#4505 == 0] THEN
#4505 =10 ;Tastgeschwindigkeit zum Messen(mm/min)
ENDIF
IF [#4511 == 0] THEN
#4511 =10 ;Freifahrhöhe
ENDIF
IF [#4512 == 0] THEN
#4512 = 50 ;Antastgeschwindigkeit zum Taster "suchen"
ENDIF
IF [#4513 == 0] THEN
#4513 =20 ;Tastgeschwindigkeit zum Messen
ENDIF
ENDIF
;***************************************************************************************
;---------------------------------------------------------------------------------------
Sub user_1 ;Z-Nullpunktermittlung
;---------------------------------------------------------------------------------------
IF [[#3501 == 1] or [#4520 < 2]]then ; Wurde Werkzeug bereits Vermessen? 1=JA oder ist längensensor inaktiv geschaltet
#4518 = 0 ; Merker Achse zurückfahren auf Z Vermessungspunkt) Sicherheitshalber rücksetzen
IF [#3505 == 0] ; Merker ob Längenmessung von Handrad 1=Handrad
DlgMsg "Soll Z-Nullpunkt ermittelt werden?"
ENDIF
#3505 = 0 ; Merker ob Längenmessung von Handrad 1=Handrad
IF [[#5398 == 1] AND [#5397 == 0]] ; OK Taste gedrückt und RenderModus AUS !!
M5 ; Spindel ausschalten
msg "Taster wird angefahren"
G38.2 G91 z-50 F[#4512] ; Schnelles anfahren auf Taster bis Schaltsignaländerung
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G38.2 G91 z20 F[#4513] ; Langsam von Taster runterfahren zur exakten Z-Ermittlung
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G0 Z#5063 ; Schaltpunkt anfahren
G92 Z[#4510] ; Z-Nullpunkt übernehmen
G0 Z[#4510 + 5] ; Taster 2mm Freifahren
msg"Z-Nullpunktermittlung fertig"
ELSE
G90
errmsg "FEHLER: Sensor hat nicht geschaltet"
ENDIF
ELSE ;CANCEL
G90
DlgMsg "WARNUNG: Kein Sensor gefunden! Erneut Versuchen?"
IF [#5398 == 1] ;OK
GoSub user_1
ELSE
errmsg "Messung wurde abgebrochen!"
ENDIF
ENDIF
ENDIF
ELSE
#3505 = 0 ; Merker ob Längenmessung von Handrad 1=Handrad
DlgMsg "WARNUNG: Werkzeug wurde noch nicht vermessen!"
IF [#5398 == 1] ;OK
#4514 = #5071 ; Zwischenspeicher für X Pos
#4515 = #5072 ; Zwischenspeicher für Y Pos
#4516 = #5073 ; Zwischenspeicher für Z Pos
#4518 = 1 ; Merker setzen das zurückpositioniert wird
GoSub user_2
ENDIF
ENDIF
Endsub
;***************************************************************************************
Sub user_2 ;Werkzeuglängenmessung
;---------------------------------------------------------------------------------------
#5016 = [#5011] ; Neue Werkzeugnummer
#4527 = [#4509] ; Abstand Taster zum Spindelkopf bei Z0 (G53)(negativer Wert)
#5017 = [#4503] ; Maximale Werkzeuglänge
#5019 = [#4507] ; Werkzeuglängensensorposition X-Achse
#5020 = [#4508] ; Werkzeuglängensensorposition Y-Achse
#5021 = 0 ; Gemessene Werkzeuglänge wird hier eingetragen
msg "Werkzeug wird vermessen"
dlgmsg "Soll Werkzeug Vermessen werden?" "Werkzeuglänge ca:" 5017
IF [[#5398 == 1] AND [#5397 == 0]] ;OK Taste wurde gedrückt und RenderModus ist AUS !!
IF [[#5017] < 0] THEN ; Testen ob Werkzeuglänge negativ
DlgMsg "!!! WARNUNG: Werkzeuglänge darf nicht negativ sein !!!"
if [#5398 == 1] ;OK
GoSub user_2
ELSE
GoSub user_2
ENDIF
ENDIF
IF [[#4527 + #5017 + 10] > [#4506]] THEN ; Testen ob errechneter Wert höher wie sicherheitshöhe ist
DlgMsg "!!! WARNUNG: Werkzeug zu lang !!!"
if [#5398 == 1] ;OK
GoSub user_2
ELSE
GoSub user_2
ENDIF
ENDIF
M5
G53 G0 z[#4506] ; Sicherheitshöhe
G53 G0 x[#5019] y[#5020]
G53 G0 z[#4527 + #5017 + 10]
G53 G38.2 Z[#4527] F[#4504]
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G91 G38.2 Z20 F[#4505]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde, wird Tastpunkt in #5053 gespeichert
G00 g53 z#4506
;***********Bei Direktvermessung Tabelle auf 0 schreiben
#[5400 + #5016] = 0 ;[#5053 - #4527] ;Berechnete Werkzeuglänge in Tabelle speichern
#[5500 + #5016] = 0 ;#5018 ;Werkzeugdurchmesser in Tabelle speichern
;***********Bei Direktvermessung Tabelle auf 0 schreiben Ende
#5021 = [#5053 - #4527] ; Berechnung Werkzeuglänge = Tastpunkt - chuck height
msg "Werkzeuglänge = " #5021
IF [#3501 == 1] ; (Wurde Werkzeug bereits Vermessen? 1=JA)
#4502 = [#4501] ; Alte Werkzeuglänge speichern
#4501 = [#5021] ; Aktuelle Werkzeuglänge eintragen
#3502 = [#4501 - #4502] ; Werkzeuglängenunterschied ausrechnen
G92 Z[#5003 - #3502] ; Z-Nullpunkt ermitteln
;Werkzeuglaenge und Werkzeugdurchmesser in Tabelle speichern
;#[5400 + #5016] = [#5053 - #4527] ;Berechnete Werkzeuglänge in Tabelle speichern
;#[5500 + #5016] = #5018 ;Werkzeugdurchmesser in Tabelle speichern
;msg "Gemessene Werkzeuglaenge="#[5400 + #5016]" gespeichert in Werkzeugnr. "#5016
ELSE
#4501 = [#5021] ; Aktuelle Werkzeuglänge eintragen
ENDIF
IF [#4518 == 1] then ; Merker (Achse zurückfahren auf Z Vermessungspunkt)
G0 G53 Z#4506 ; Repositionieren
G0 G53 X#4514 Y#4515 ; Repositionieren
#4518 = 0 ; Merker (Achse zurückfahren auf Z Vermessungspunkt)
#3501 = 1 ; Merker (Wurde Werkzeug bereits Vermessen? 1=JA)
ELSE
IF [#4519 == 0] then ; Was tun nach Werkzeugvermessung 0= vordefinierten Punkt anfahren
G0 G53 Z#4506 ; Sicher Z
G0 G53 X#4524 Y#4525 ; Vordefinierten Punkt anfahren
ENDIF
IF [#4519 == 1] then ; Was tun nach Werkzeugvermessung 1= Werkstücknullpunkt fahren
G0 G53 Z#4506 ; Sicher Z
G0 X0 Y0 ; Werkstücknullpunkt anfahren
ENDIF
IF [#4519 == 2] then ; Was tun nach Werkzeugvermessung 2= Werkzeugwechselpos anfahren
G0 G53 Z#4523 ; Werkzeugwechselpunkt anfahren
G0 G53 X#4521 Y#4522; Werkzeugwechselpunkt anfahren
ENDIF
IF [#4519 == 3] then ; Was tun nach Werkzeugvermessung 3= Maschinennullpunkt anfahren
G0 G53 Z#4506 ;
G0 G53 X0 Y0 ; Maschinennullpunkt anfahren
ENDIF
IF [#4519 == 4] then ; Was tun nach Werkzeugvermessung 4= Stehen bleiben
ENDIF
Endif
#4518 = 0 ; Merker (Achse zurückfahren auf Z Vermessungspunkt)
#3501 = 1 ; Merker (Wurde Werkzeug bereits Vermessen? 1=JA)
ELSE
errmsg "FEHLER: Kein Sensor gefunden - RESET BETäTIGEN"
ENDIF
ELSE
errmsg "FEHLER: Kein Sensor gefunden - Messung abgebrochen"
ENDIF
ENDIF
Endsub
;***************************************************************************************
Sub user_3; Bruchkontrolle des Fräsers NICHT AKTIV
;---------------------------------------------------------------------------------------
#4529 = 0
IF [#4529 == 1] ; #4529 Merker ob Automatische Bruchkontrolle eingeschaltet
IF [#3501 == 1] ; Merker (Wurde Werkzeug bereits Vermessen? 1=JA)
msg "Bruchkontrolle"
M5 M9
G53 G0 z[#4506] ;Sicherheitshöhe
G53 G0 y[#5020] ; XYChange Vorsict Sonderfall
G53 G0 x[#5019] ; XYChange Vorsict Sonderfall
G53 G0 z[#4527 + #5017 + 10]
G53 G38.2 Z[#4527] F[#4504]
IF [#5067 == 1] ;Wenn Sensor gefunden wurde
G91 G38.2 Z20 F[#4505]
G90
IF [#5067 == 1] ;Wenn Sensor gefunden wurde, wird Tastpunkt in #5053 gespeichert
#4501 = [#5053 - #4527] ;Berechnung aktuelle Werkzeuglänge = Tastpunkt - chuck height
G00 G53 z#4506
IF [[[#5021 + #4528] > [#4501]] and [[#5021 - #4528] < [#4501]]]
msg "Okay"
msg " Massabweichung:" [#5021 - #4501]
ELSE
#3504 = 0 ;Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
G53 G0 Z[#4523] ; Sicherheitshöhe
G53 G0 X[#4521] ; Manuelle Werkzeugwechselpos X XYchange
G53 G0 Y[#4522] ; Manuelle Werkzeugwechselpos Y XYchange
Dlgmsg "Werkzeug Verschlissen, fortführen?" " Massabweichung:" 4501
IF [#5398 == 1] ;OK
Dlgmsg "WARNUNG: Auftrag wird fortgeführt"
ELSE
errmsg "Werkzeug Verschlissen, abbruch"
ENDIF
ENDIF
IF [#3504 == 0] ;Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
IF [#4519 == 0] then ;Was tun nach Werkzeugvermessung 0= vordefinierten Punkt anfahren
G0 G53 Z#4506 ; Sicher Z
G0 G53 X#4524 ;Vordefinierten Punkt anfahren XYchange
G0 G53 Y#4525 ;Vordefinierten Punkt anfahren XYchange
ENDIF
IF [#4519 == 1] then ;Was tun nach Werkzeugvermessung 1= Werkstücknullpunkt fahren
G0 G53 Z#4506 ;Sicher Z
G0 X0 ;Werkstücknullpunkt anfahren anfahren XYchange
G0 Y0 ;Werkstücknullpunkt anfahren anfahren XYchange
ENDIF
IF [#4519 == 2] then ;Was tun nach Werkzeugvermessung 2= Werkzeugwechselpos anfahren
G0 G53 Z#4523 ;Werkzeugwechselpunkt anfahren
G0 G53 X#4521 ;Werkzeugwechselpunkt anfahren XYchange
G0 G53 Y#4522 ;Werkzeugwechselpunkt anfahren XYchange
ENDIF
IF [#4519 == 3] then ;Was tun nach Werkzeugvermessung 3= Maschinennullpunkt anfahren
G0 G53 Z#4506 ;
G53 X0 ;Maschinennullpunkt anfahren XYchange
G53 Y0 ;Maschinennullpunkt anfahren XYchange
ENDIF
IF [#4519 == 4] then ; Was tun nach Werkzeugvermessung 4= Stehen bleiben
ENDIF
ENDIF
ELSE
#3504 = 0 ;Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
errmsg "FEHLER: Kein Sensor gefunden"
ENDIF
ELSE
#3504 = 0 ;Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
errmsg "FEHLER: Kein Sensor gefunden"
ENDIF
ENDIF
#3504 = 0 ;Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
ELSE
DlgMsg "Bruchkontrolle nicht aktiviert"
ENDIF
Endsub
;***************************************************************************************
Sub user_4
;---------------------------------------------------------------------------------------
; #4532 Drehzahl Stufe 1 für Warmlauf Spindel
; #4533 Laufzeit Stufe 1 für Warmlauf Spindel
; #4534 Drehzahl Stufe 2 für Warmlauf Spindel
; #4535 Laufzeit Stufe 2 für Warmlauf Spindel
; #4536 Drehzahl Stufe 3 für Warmlauf Spindel
; #4537 Laufzeit Stufe 3 für Warmlauf Spindel
; #4538 Drehzahl Stufe 4 für Warmlauf Spindel
; #4539 Laufzeit Stufe 4 für Warmlauf Spindel
DlgMsg "Spindelwarmlauf Starten?"
IF [#5398 == 1] ;OK
G53 G00 Z0
M03 S#4532
G04 P#4533
M03 S#4534
G04 P#4535
M03 S#4536
G04 P#4537
M03 S#4538
G04 P#4539
M05
ENDIF
Endsub
;***************************************************************************************
Sub user_5
;---------------------------------------------------------------------------------------
Dlgmsg "Welches Werkzeug soll eingewechselt werden" " Neue Werkzeugnr.:" 5011
IF [#5398 == 1] ;OK
gosub change_tool
ENDIF
Endsub
;***************************************************************************************
Sub user_6
;---------------------------------------------------------------------------------------
msg "sub user_6"
#5011 = [#5008]
Dlgmsg "!!! Werkzeugmanipulation !!!" "Alte Werkzeugnr" 5008" Neue Werkzeugnr" 5011
IF [#5011 > 16] THEN
Dlgmsg "Werkzeugnr Ungültig: Bitte Werkzeugnummer 1..16 Auswählen"
M30
ELSE
#5015 = 1; Wurde werkzeug erfolgreich gewechselt 1=Ja
IF [[#5011] > 0] THEN
m6t[#5011]
;G43
ELSE
m6t[#5011]
ENDIF
ENDIF
Endsub
;***************************************************************************************
Sub user_7
;---------------------------------------------------------------------------------------
msg "sub user_7"
DlgMsg "Keine Funktion hinterlegt"
Endsub
;***************************************************************************************
Sub user_8
;---------------------------------------------------------------------------------------
; #4550 Nullpunktermittlung Merker Richtung
; #4551 Nullpunktermittlung Versatz X+
; #4552 Nullpunktermittlung Versatz X-
; #4553 Nullpunktermittlung Versatz Y+
; #4554 Nullpunktermittlung Versatz Y-
Dlgmsg "Nullpunkt ermitteln 1 = X+ / 2 = X- / 3 = Y+ / 4 = Y-" "Richtung:" 4550
IF [#4550 == 0]
ENDIF
;---- X-Plus-----------------------------------------------------------------------------------
IF [#4550 == 1]
G91 G38.2 x20 F[#4504]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G91 G38.2 x-10 F[#4505]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G92 X#4551
G91 G00 x-1
G90
ENDIF
ELSE
DlgMsg "FEHLER: Kein Sensor gefunden - Messung abgebrochen"
ENDIF
#4550 = 0
ENDIF
;---- X-Minus-----------------------------------------------------------------------------------
IF [#4550 == 2]
G91 G38.2 x-20 F[#4504]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G91 G38.2 x10 F[#4505]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G92 X#4552
G91 G00 x1
G90
ENDIF
ELSE
DlgMsg "FEHLER: Kein Sensor gefunden - Messung abgebrochen"
ENDIF
#4550 = 0
ENDIF
;---- Y-Plus-----------------------------------------------------------------------------------
IF [#4550 == 3]
G91 G38.2 y20 F[#4504]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G91 G38.2 y-10 F[#4505]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G92 y#4553
G91 G00 y-1
G90
ENDIF
ELSE
DlgMsg "FEHLER: Kein Sensor gefunden - Messung abgebrochen"
ENDIF
#4550 = 0
ENDIF
;---- Y-Minus-----------------------------------------------------------------------------------
IF [#4550 == 4]
G91 G38.2 y-20 F[#4504]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G91 G38.2 y10 F[#4505]
G90
IF [#5067 == 1] ; Wenn Sensor gefunden wurde
G92 y#4554
G91 G00 y1
G90
ENDIF
ELSE
DlgMsg "FEHLER: Kein Sensor gefunden - Messung abgebrochen"
ENDIF
#4550 = 0
ENDIF
ENDSUB
;***************************************************************************************
Sub user_9
;---------------------------------------------------------------------------------------
msg "sub user_9"
DlgMsg "Keine Funktion hinterlegt"
Endsub
;***************************************************************************************
Sub user_10
;---------------------------------------------------------------------------------------
DlgMsg "Soll Maschinennullpunkt angefahren werden?"
if [#5398 == 1] ;OK
G53 G0 Z0
G53 X0 Y0
ENDIF
Endsub
;***************************************************************************************
Sub home_z ;Homing per axis
;---------------------------------------------------------------------------------------
msg "Referenziere Achse Z"
M80
g4p0.2
home z
Endsub
;***************************************************************************************
Sub home_x
msg "Referenziere Achse X"
M80
g4p0.2
home x
;homeTandem X
Endsub
;***************************************************************************************
Sub home_y
msg "Referenziere Achse Y"
M80
g4p0.2
home y
;homeTandem Y
Endsub
;***************************************************************************************
Sub home_a
msg "Referenziere Achse A"
M80
g4p0.2
home a
Endsub
;***************************************************************************************
Sub home_b
msg "Referenziere Achse B"
M80
g4p0.2
home b
Endsub
;***************************************************************************************
Sub home_c
msg "Referenziere Achse C"
M80
g4p0.2
home c
Endsub
;***************************************************************************************
;Home all axes
sub home_all
gosub home_z
gosub home_y
gosub home_x
gosub home_a
gosub home_b
gosub home_c
G53 G01 X0 Y0 Z0 F1000; Achse X, Y und Z auf 0 Fahren
msg"Referenzierung fertig"
;homeIsEstop on ;diese Zeile Einkommentieren wenn Refschalter = Endschalter
m30
endsub
;***************************************************************************************
Sub zero_set_rotation
;---------------------------------------------------------------------------------------
msg "Ersten Punkt antasten und mit STRG + G fortfahren"
m0
#5020 = #5071 ;x1
#5021 = #5072 ;y1
msg "Zweiten Punkt antasten und mit STRG + G fortfahren"
m0
#5022 = #5071 ;x2
#5023 = #5072 ;y2
#5024 = ATAN[#5023 - #5021]/[#5022 - #5020]
if [#5024 > 45]
#5024 = [#5024 - 90] ;Punkte in Y Achse
endif
g68 R#5024
msg "Koordinatensystem mit G68 R"#5024" gedreht"
msg " Bitte Messtaster entfernen!!! "
Endsub
;***************************************************************************************
sub change_tool
;---------------------------------------------------------------------------------------
#5015 = 0 ; Merker: Wurde werkzeug erfolgreich gewechselt 1=Ja
M5
M9
;---------------------------------------------------------------------------------------
; 0 = Wechsel ignorieren
;---------------------------------------------------------------------------------------
IF [[#4520] == 0] ; Werkzeugwechslertyp 0= Wechsel ignorieren 1 = Nur WPos Anfahren 2= WPos anfahren + Vermessen
#5015 = 1; Wurde werkzeug erfolgreich gewechselt 1=Ja
ENDIF
;---------------------------------------------------------------------------------------
; 1 = Nur WPos Anfahren
;---------------------------------------------------------------------------------------
IF [[#4520] == 1] ; Werkzeugwechslertyp 0= Mache garnix 1 = Nur WPos Anfahren 2= WPos anfahren + Vermessen
#3503 = 1 ; Werkzeugnummer bereits eingelegt 1=Ja
IF [[#5011] == [#5008]] THEN
Dlgmsg "Werkzeug bereits eingelegt. Trotzdem wechseln?"
if [#5398 == 1] ;OK
#3503 = 1
ELSE
#3503 = 0
ENDIF
ENDIF
IF [#3503 == 1] THEN
G53 G0 Z[#4523] ; Sicherheitshöhe
G53 G0 X[#4521] Y[#4522] ; Werkzeugwechselpos X Y
Dlgmsg "Bitte Werkzeug einwechseln" "Alte Werkzeugnr.:" 5008" Neue Werkzeugnr.:" 5011
if [#5398 == 1] ;OK
IF [#5011 > 99] THEN
Dlgmsg "Werkzeugnr Ungültig: Bitte Werkzeugnummer 1..99 Auswählen"
if [#5398 == 1] ;OK
gosub change_tool
ELSE
errmsg"Werkzeugwechsel abgebrochen"
ENDIF
ELSE
#5015 = 1; Wurde werkzeug erfolgreich gewechselt 1=Ja
ENDIF
ELSE
errmsg"Werkzeugwechsel abgebrochen"
ENDIF
ENDIF
ENDIF
;---------------------------------------------------------------------------------------
; 2= WPos anfahren + Vermessen
;---------------------------------------------------------------------------------------
IF [[#4520] == 2] ; Werkzeugwechslertyp 0= Mache garnix 1 = Nur WPos Anfahren 2= WPos anfahren + Vermessen
#3503 = 1 ; Werkzeugnummer bereits eingelegt 1=Ja
IF [[#5011] == [#5008]] THEN
Dlgmsg "Werkzeug bereits eingelegt. Trotzdem wechseln?"
if [#5398 == 1] ;OK
#3503 = 1
ELSE
#3503 = 0
ENDIF
ENDIF
IF [#3503 == 1] THEN
IF [[#5008] > 0]
#3504 = 1 ; Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
;GOSUB user_3 ; Bruchkontrolle aufrufen
#3504 = 0 ; Merker ob Bruchkontrolle von Automatik aufgerufen wurde 1=Automatik
ENDIF
G53 G0 Z[#4523] ; Sicherheitshöhe
G53 G0 X[#4521] Y[#4522] ; Werkzeugwechselpos X Y
Dlgmsg "Bitte Werkzeug einwechseln" "Alte Werkzeugnr.:" 5008" Neue Werkzeugnr.:" 5011
if [#5398 == 1] ;OK
IF [#5011 > 99] THEN
Dlgmsg "Werkzeugnr Ungültig: Bitte Werkzeugnummer 1..99 Auswählen"
if [#5398 == 1] ;OK
gosub change_tool
ELSE
gosub change_tool
ENDIF
ELSE
#5015 = 1; Wurde werkzeug erfolgreich gewechselt 1=Ja
gosub user_2
ENDIF
ELSE
errmsg"Werkzeugwechsel abgebrochen"
ENDIF
ENDIF
ENDIF
;---------------------------------------------------------------------------------------
IF [[#5015] == 1] THEN
msg "Werkzeugnr.: " #5008" mit Werkzeugnr.: " #5011 " gewechselt"
m6t[#5011]
#5015 = 0; Wurde werkzeug erfolgreich gewechselt 1=Ja
ENDIF
;G01
endsub
;***************************************************************************************
sub config
;---------------------------------------------------------------------------------------
GoSub wzwp
GoSub znpp
GoSub wlmp
GoSub NL3D
GoSub SPWL
endsub
;***************************************************************************************
sub WZWP
;---------------------------------------------------------------------------------------
;0= Mache garnix 1 = Nur WPos Anfahren 2= WPos anfahren + Vermessen
Dlgmsg "Bitte Werkzeugwechslertyp eingeben" "TYP" 4520
if [#5398 == 1] ;OK
IF [#4520 > 0 ] THEN
Dlgmsg "Bitte Werkzeugwechselposition eingeben" "Position X-Achse" 4521 "Position Y-Achse" 4522 "Position Z-Achse" 4523
ENDIF
ENDIF
endsub
;***************************************************************************************
sub ZNPP
;---------------------------------------------------------------------------------------
Dlgmsg "Bitte Z-Nullpunktsensordaten eingeben" "Höhe Sensor" 4510 "Anfahrvorschub:" 4512 "Tastvorschub:" 4513
endsub
;***************************************************************************************
sub WLMP
;---------------------------------------------------------------------------------------
Dlgmsg "Bitte Werkzeuglängensensordaten eingeben" "Position X-Achse" 4507 "Position Y-Achse" 4508 "Sicherheitshöhe Z" 4506 "SP. ohne Werkzeug" 4509 "Max. Werkzeuglänge" 4503 "Anfahrvorschub:" 4504 "Tastvorschub:" 4505
;Dlgmsg "Daten Bruchkontrolle" "Bruchkontrolle aktivieren?" 4529 "Verschleisstoleranz +/- in mm:" 4528
Dlgmsg "Position nach Messung anfahren" "Funktion:" 4519 "Position X-Achse" 4524 "Position Y-Achse" 4525
;#4519 Was tun nach Werkzeugvermessung:
;0= vordefinierten Punkt anfahren
;1= Werkstücknullpunkt fahren
;2= Werkzeugwechselpos anfahren
;3= Maschinennullpunkt anfahren
;4= Stehen bleiben
;#4524 Position X nach Längenmessung
;#4525 Position Y nach Längenmessung
;#4526 Position Z nach Längenmessung
endsub
;***************************************************************************************
sub NL3D
;---------------------------------------------------------------------------------------
; #4551 Nullpunktermittlung Versatz X+
; #4552 Nullpunktermittlung Versatz X-
; #4553 Nullpunktermittlung Versatz Y+
; #4554 Nullpunktermittlung Versatz Y-
Dlgmsg "Versatz 3D Taster.." "in Richtung X+" 4551 "in Richtung X-" 4552 "in Richtung Y+" 4553 "in Richtung Y-" 4554
ENDSUB
;***************************************************************************************
sub SPWL
;---------------------------------------------------------------------------------------
; #4532 Drehzahl Stufe 1 für Warmlauf Spindel
; #4533 Laufzeit Stufe 1 für Warmlauf Spindel
; #4534 Drehzahl Stufe 2 für Warmlauf Spindel
; #4535 Laufzeit Stufe 2 für Warmlauf Spindel
; #4536 Drehzahl Stufe 3 für Warmlauf Spindel
; #4537 Laufzeit Stufe 3 für Warmlauf Spindel
; #4538 Drehzahl Stufe 4 für Warmlauf Spindel
; #4539 Laufzeit Stufe 4 für Warmlauf Spindel
Dlgmsg "Spindelwarmlaufparameter" "Drehzahl Stufe 1" 4532 "Laufzeit (sek.) Stufe 1" 4533 "Drehzahl Stufe 2" 4534 "Laufzeit(sek.) Stufe 2" 4535 "Drehzahl Stufe 3" 4536 "Laufzeit (sek.) Stufe 3" 4537 "Drehzahl Stufe 4" 4538 "Laufzeit(sek.) Stufe 4" 4539
ENDSUB
;***************************************************************************************
sub zhcmgrid
;***************************************************************************************
;probe scanning routine for eneven surface milling
;scanning starts at x=0, y=0
if [#4100 == 0]
#4100 = 10 ;nx
#4101 = 5 ;ny
#4102 = 40 ;max z
#4103 = 10 ;min z
#4104 = 1.0 ;step size
#4105 = 100 ;probing feed
endif
#110 = 0 ;Actual nx
#111 = 0 ;Actual ny
#112 = 0 ;Missed measurements counter
#113 = 0 ;Number of points added
;Dialog
dlgmsg "gridMeas" "nx" 4100 "ny" 4101 "maxZ" 4102 "minZ" 4103 "gridSize" 4104 "Feed" 4105
if [#5398 == 1] ; user pressed OK
;Move to startpoint
g0 z[#4102];to upper Z
g0 x0 y0 ;to start point
;ZHCINIT gridSize nx ny
ZHCINIT [#4104] [#4100] [#4101]
#111 = 0 ;Actual ny value
while [#111 < #4101]
#110 = 0
while [#110 < #4100]
;Go up, goto xy, measure
g0 z[#4102];to upper Z
g0 x[#110 * #4104] y[#111 * #4104] ;to new scan point
g38.2 F[#4105] z[#4103];probe down until touch
;Add point to internal table if probe has touched
if [#5067 == 1]
ZHCADDPOINT
msg "nx="[#110 +1]" ny="[#111+1]" added"
#113 = [#113+1]
else
;ZHCADDPOINT
msg "nx="[#110 +1]" ny="[#111+1]" not added"
#112 = [#112+1]
endif
#110 = [#110 + 1] ;next nx
endwhile
#111 = [#111 + 1] ;next ny
endwhile
g0 z[#4102];to upper Z
;Save measured table
ZHCS zHeightCompTable.txt
msg "Done, "#113" points added, "#112" not added"
else
;user pressed cancel in dialog
msg "Operation canceled"
endif
endsub
;***************************************************************************************
; Handradfunktionen
;---------------------------------------------------------------------------------------
;***************************************************************************************
SUB xhc_probe_z ;Z-Nullpunktermittlung
;---------------------------------------------------------------------------------------
#3505 = 1 ; Merker ob Längenmessung von Handrad 1=Handrad
gosub user_1 ;Z-Nullpunktermittlung
ENDSUB
;***************************************************************************************
SUB xhc_macro_1
;---------------------------------------------------------------------------------------
msg"Keine Funktion für Macro 1 Hinterlegt"
ENDSUB
;***************************************************************************************
SUB xhc_macro_2
;---------------------------------------------------------------------------------------
gosub user_2 ;Werkzeugvermessung
ENDSUB
;***************************************************************************************
SUB xhc_macro_3
;---------------------------------------------------------------------------------------
msg"Keine Funktion für Macro 3 Hinterlegt"
ENDSUB
;***************************************************************************************
SUB xhc_macro_6
;---------------------------------------------------------------------------------------
msg"Keine Funktion für Macro 6 Hinterlegt"
ENDSUB
;***************************************************************************************
SUB xhc_macro_7
;---------------------------------------------------------------------------------------
msg"Keine Funktion für Macro 7 Hinterlegt"
ENDSUB