Mám po obědě chvíli času tak zkusím sepsat další postup, pak se k tomu třeba chvíli nedostanu.
V mezičase snad vyřešíš ten problém s orientací a měníčem.
V dalším kroku je potřeba si dát dohromady požadavky co budeš od výměny nástrojů chtít.
Jestli budeš mít pouze X nástroju v changeru a víc ne, nebo budeš chtít používat i další někde s police.
Třeba RaS (snad neprozradím žadný tajemství) to má udělaný tak, že v karuselu má 24 zakladních nastrojů, ale automatická výměna je udělaná tak, že když zadá nastroj na výměnu větší než 24, tak to ten starej odloží a novej si to vezme "z ruky". Idelaní pro nastroje který se třeba rozměrově nevejdou do kolotoče.
dál jestli budeš chtít pro snažší výměnu nastrojů požadovat ruční otáčení karuselu na čudlíky. Ale to je maličkost.
Jestli budeš vypínat mašinu s nástrojem ve vřeteni, tak je potřeba ošetřit to, aby linuxcnc věděl po spuštění číslo nástroje a samozřejmě aby před vypnutím si ho někam poznamenal.
Tohle ještě není vyřešeno automaticky a musí se o to uživatel postarat sám. existuje několik způsobů které pozdeji popíšu.
Další požadavek je modul, který bude otáčet karuselem a případně s ním hejbat při výměně samotné . Když sem tohle řešil před rokem a půl, tak ještě neexistoval modul CARUSEL a bylo potřeba si to celé napsat. dneska už je to implementováno a ušetří to hromadu času.
modul carusel sice neumí hejbat se zásobníkem "z a do zaběru" ani ovládat zamykaní a odmykání vřetena, ale to uděláme jinak.
Jestli sem to dobře pochopil, tak máš vytažený drát pro indikaci zásobník v poloze pro výměnu. Předpokládám, že je to jeden drát pro všechny pozice a je potřeba podle pulzu počítat pozici. K němu by byl dobrej ještě jeden index signál, podle kterého by karusel poznal po zapnutí kde se nachazi a mohl se zreferovat. Bez něj se myslím neobejdeš.
Carusel pak funguje tak že při prvním požadavku na výměnu otáčí zásobníkem tak dlouho, než narazí na index a pak ví, že je v pozici 0, tu si uloží a dál už pracuje normálně tak, že počítá pulzy z čidla při otáčení.
Ted se vrátím k tomu, jak uložit číslo nástroje a pak jak ho načíst po startu.
1. varianta je ta, že v parametru #5400 je uložená hodnota nastroje ve vřeteni. Jenže parametr 5400 se neukladá do var souboru při ukončení programu. Takže je potřeba v g-codu po výměně uložit tuto hodnotu do proměnné, která se ukládá. napriklad do #4999.
něco jako
O<change> sub
M6
#4999 = #5400
O<change> endsub
m2
a do souboru xxxx.var v adresari s aktualni konfiguraci dopsat na nový řádek číslo 4999 třeba na začátek. tím zajistíš že se tato proměná uloží při ukončení programu.
druhá část problému je jak tuto hodnotu po startu načíst.
idelaně tak aby to linuxcnc udělal sám.
tady jsou taky dvě (a více) metody.
změnu nástroje ve vřeteni bez samotné výměny řeší přikaz M61 Qx kde x je číslo nástroje
v ini souboru je definován řádek
[RS274NGC]
SUBROUTINE_PATH = nc_subroutines:nc_files
RS274NGC_STARTUP_CODE = g88.1 G17 G21 G54 G64 P0.001 G90 G94 G97 M5 M9
který říká co má udělat program po startu. například g21 přepne do metrické soustavy, G54 zvolí základní souřadný systém atd. ale to není potřeba vysvětlovat
odsud se dá zavolat příkaz který to nastaví,ale bohužel neumí volat M-kody, ale pouze G-cody.
Proto je zapotřebí ještě malá obezlička v tom, že zavolaš dodefinovaný g-příkaz třeba g88.1 který není obsazený systémem a je definován v podadresari uvedeném v SUBROUTINE_PATH napríklad nc_files.
v souboru g881.ngc pak bude něco takového
o<g881> sub
m61 q#4999
o<g881> endsub [1]
m2
druhý případ jak načíst hodnotu může být třeba takový........
v ini souboru si definujes mdi prikazy
[HALUI]
MDI_COMMAND = M61 Q#4999
tím vznikne pin halui.mdi-command-00 který když aktivuješ provede se příslušný příkaz.
Ted už jenom stačí zajistit aby se příkaz spustíl v pravou chvíli.
nejde použít třeba signál halui.machine-is-on neb mdi příkazy nelze spustit před zhoumováním mašiny, takže je potřeba nalinkovat mdi na signál říkající, že poslední osa je zreferovaná na home signal.
net tool-in-spindle halui.mdi-command-00 joint.0.homed
Použití metody s var souborem,je sice jednoduché,ale má jednu nevýhodu. proměnné se do var ukládají jen jednou a to při ukončení linuxcnc. v případě že ti spadne elektrika, nebo linuxcnc (to se moc nestává) tak budeš mít ve var hodnotu z minuleho ukončení a mohlo by dojít k nepříjemné situaci, kdyby se mašina snažila odložit nastroj do pozice kde se už nachází nejaký jiný.
Tady nastupuje druhá metoda ukládání čísla nastroje. Sice složitější, ale bezpečněší.
Existuje modul paramsaver
http://wiki.linuxcnc.org/cgi-bin/wiki.p ... eter_Saver" onclick="window.open(this.href);return false;
který se zkompiluje jako userspace a který umí ukladat libovolné množstí pinu typu bit, float a s32 a následně je kdykoliv přečíst.
Pak už jen stačí stejně jako ve variantě 1 po výměně nástroje tuto hodnotu uložit a nečekat na konec programu a samozřejmě jí taky po startu přečíst a nastavit do systému.
tady by soubor g881.ngc vypadal nasledovně
o<g881> sub
m61 q#<_hal[paramhelper.outvalue]>g43
(debug, nastaveno cislo nastroje ze souboru #<_hal[paramhelper.outvalue]>)
o<g881> endsub [1]
m2
a uloženi asi takhle nějak
m6
M68 E #<_ini[pins]writetool> Q#<_selected_pocket> ; cislo nastroje zapis do souboru
M64 P #<_ini[pins]write> ; zapsat do souboru
G4 P1.2 ;pockej chvili
M65 P #<_ini[pins]write> ; schozeni signalu pro zapis
kde #<_ini[pins]write> a #<_ini[pins]writetool jsou definovány pro přehlednost v ini souboru .
[PINS]
# priznak pro ulozeni cisla nastroje
WRITE = 3 # motion.digital-out-03
# cislo nastroje ve vreteni
WRITETOOL = 3 # motion.analog-out-03
k tomu samozřejme nalinkovane signaly z paramsaver v halu pro zapis, cteni a patřičnou hodnotu cisla nastroje
net writetrigger motion.digital-out-xx paramhelper.writetrigger #priznak pro ulozeni cisla nastroje
....
....
no a na závěr už jen stačí vyřešit jak ovládat o číst zamykaní nastroje ofuk, vysunutí ramene a podobný blbosti.
to bych udělal přímo v přemapovaném gcodu pro M6 pomocí M62-M66.
Sakra nejak sem se rozepsal.
kdyby si chtěl nejaký priklady cely konfigurace tak tu něco mám. snad se uživatelé s kterýmá jsem na tom pracoval nebudou zlobit.
M