www.gravos.cz GVE54 - Instrukční soubor 22.12.2007 ************************* OSAZENI: procesor ATmega128-16PI krystal 15,6672 MHz (115200*8*17) PROGRAM: Ip54v3 z 21.12.2007 SÉRIE: sériový přenos 8 bitů, 1 stop bit, bez parity přenosová rychlost BaudRate a Adresa jednotky jsou volitelné jumpery Popis jumperů je přímo vyleptán na desce. Stav jumperu je vyhodnocen jen jednou po zapnutí napájení. Jednotka má konektor RS232C Main (na panelu Vstup) a konektor RS232C Ext (na panelu Výstup). PC GVE54 Main Kabel: 2-----<<----------3 3--------->>------2 5-------- -------5 GND 1-4-6 4 +5V/max.200mA (pro případné optočleny) 7-8 KOMUNIKACE:je ciste simplexni, t.j.: nadrizeny pocitac posle povel, a ceka na odpoved. Az mu dorazi odpoved, tak si ji analyzuje, a posle dalsi, atd... Nelze posilat prikazy bez cekani na odpoved. Karta odpovi vzdy co nejdive, s vyjimkou prikazu Halt, kdy odpovi az po zabrzdeni. RESET: jednotka je po připojení napájení nebo po příkazu J =JUMP na reset cca po 2s ve stavu: ST0..ST6 = 00 - veškerá přerušení neaktivní MD - motory v Power Dn stavu - poloviční proud MF - zvoleny 1/16 kroky A20 - zrychlení 20000 kr/s2 V1000 - max.rychlost 1000 kr/s $512 - short vektory jsou menší než 512 kroků B50000 - bez omezení rychlosti mezi cont.vektory N - čítač polohy vynulován O0,FF - výstupy vypnuté =============================================================================== PŘÍKAZY: ! Adresa Příkaz [parametry] Enter mezi jednotlivými parametry je čárka Lx,y,z - LINE vektor (přímka) x = počet pulsů v ose X v rozsahu -65535 az 65535 y = počet pulsů v ose Y v rozsahu -65535 az 65535 z = počet pulsů v ose Z v rozsahu -65535 az 65535 např.: !0L1000,1000,20 Zvláštní možnost se nabízí při použití vektoru L0,0,0 , který program považuje za normální vektor, i když nemá žádný pohybový efekt. Tento vektor je výhodné zařadit na konec fronty vektorů, kde může indikovat konec zpracování předchozí fronty. Dokud není přijat, karta hlasí chybu 1, a tudíž fronta před ním není hotová. Jakmile ho karta přijme, ohlásí 0 (OK), a tudíž je fronta před tímto vektorem hotová. Při tomto způsobu je neustále k dispozici bit INTA. Cx,y,z - CONT.LINE pokračující vektor (přímka) x = počet pulsů v ose X v rozsahu -65535 az 65535 y = počet pulsů v ose Y v rozsahu -65535 az 65535 z = počet pulsů v ose Z v rozsahu -65535 az 65535 např.: !0C1000,1000,20 Určit jestli je vektor pokračující je výpočetně dost složité, a tudíž časově náročné, a proto to musí určit nadřízený počítač. U pokračujícího vektoru se nesmí příliš změnit úhel, jinak by nebylo fyzikálně možné vektor správně interpretovat. Jednotka má buffer na 96 CONT. vektorů. ( 1 je vykonáván, a další mohou být ve frontě ) Frontou pokračujících vektorů lze velmi zrychlit práci, protože jednotlivé vektory nemusí neustále zrychlovat z nulové rychlosti a nasledně opět do nulové rychlosti zpomalovat. Také se tím omezí vibrace stroje, a následně se zlepší kvalita obráběného povrchu. Pomoci CONT.vektorů se řeší také dlouhé vektory, které jsou delší než maximální povolená délka vektoru Vektory (L i C) se zadávají v relativních souřadnicích od posledního bodu. (Absolutní souřadnice by představovaly příliš dlouhé řetězce znaků, a proto by klesala skutečná rychlost přenosu informací po seriové lince) Tn - TIME prodleva mezi nenavazujícími vektory v milisekundách n= 1 az 24 milisekund doporučená hodnota je podle hmotnosti stroje asi 5 az 20 ms Mezi CONT.vektory tato prodleva není. např.: !0T5 - prodleva 5ms Příkaz je modální, platí až do zadání jiné hodnoty. Vn - VELOCITY rychlost následujících vektorů n = 40 az 50000 pulsů/s např.: !0V10000 - rychlost 10000 pulsů/s Příkaz je modální, platí až do zadání jiné hodnoty. Bn - BRAKE rychlost, na kterou má vektor dobrzit, pokud za ním ve frontě je další Cont.vektor. Pokud za ním není další tak stejně dobrzdí do nuly. n = 40 az 50000 pulsů/s To má význam hlavně u navazujících vektorů, kdy je nutné před zatáčkou přibrzdit, ale ne úplně. Příkaz je modální, platí až do zadání jiné hodnoty. $n - SHORT je hraniční hodnota pro rozlišení krátkého a dlouhého vektoru. Chovají se trochu odlišně. n = 1..65535 Dlouhý vektor se snaží dostat pomocí zrychlení A až k maximální rychlosti V. Krátký vektor se snaží dostat pomocí zrychlení A jen k brzdé rychlosti B na svém konci. Tímto se stává fronta krátkých vektorů plynulejší, a průjezd libovolnou spojitou křivkou, která je rozumně rozsekána na úsečky je plynulý také. An - AKCELERATION zrychlení a zpomalení následujících vektorů n= tisíců pulsů/s2 např.: !0A50 - akcelerace 50000 pulsů/s2 Příkaz je modální, platí až do zadání jiné hodnoty. K - KEEP {obdoba PUSH} Zachytí z operační paměti stav fronty vektorů po přerušení a ST4,ST5 a ST6 a uloží. Potom smaže ST4=00,ST5=00 a ST6=00 a vymaže frontu vektorů v operační paměti, takže je možno opět zadávat vektory. KEEP lze použít bez odpovídajícího RESTORE jen jednou, jinak se předchozí uložení ztratí. (Zásobník má 1 úroveň). Nelze pouzit za chodu. R - RESTORE {obdoba POP} inverzní rutina ke KEEP Obnoví do operační paměti stav fronty tak jak byla uložena a ST4,ST5,ST6. Nelze pouzit za chodu. Tato dvojice inverzních rutin umožňuje transparenci vektorů po přerušení. Např.: Obsluha zastaví obrabění tlačítkem STOP nebo příkazem HALT apod. Potom je obrábění zastaveno, ale v jednotce je ještě zbytek vektorů ve frontě. Tento zbytek lze dodělat příkazem GO, nebo smazat příkazem DELETE, ale někdy je potřeba zvednout nástroj a nezničit zbytek fronty. Potom je potřeba zachytit stav paměti, vymazat ji, udělat zadané vektory (např.vzhůru a zpět dolů), a potom obnovit paměť a pokračovat v obrábění. např.: !H zastaví vektor !P zjistí souřadnice zastavení (kde to jsme?) SR4 zjištění stavu systému přerušení (a proc se to stalo?) SR5 zjištění stavu systému přerušení SR6 zjištění stavu systému !SW0,1A nová maska přerušení !SW1,3F nová maska přerušení !K zachytí stav operační paměti !L0,0,-1000 zvedne nástroj (pro jeho výměnu) ....tady se ceka na reakci uzivatele.... ....a kdyz se rozhodne pokracovat treba zmenenou rychlosti.... !L0,0,1000 spustí nástroj !R obnoví operační paměť !V500 nastaví novou rychlost budoucích vektorů !XA nastaví tuto rychlost i pro zbytek vektorů ve frontě !SW0,A2 normální maska přerušení !SW1,78 normální maska přerušení !G pokračování už jinou rychlostí H - HALT zastavení zpracovávaného vektoru, pokud nějaký běží Nastaví bit INTA=1. Bit RUN signalizuje, zda byl příkaz HALT použit za chodu (1), nebo ne (0). Odpoví až po zastavení. To muze trvat i dost dlouho - nezatracovat zatim komunikaci. Příkazem HALT se zaroven nastaví bit INTRCOM pro účel identifikace přerušení. D - DELETE smaže veškeré vektory ve frontě Hodí se pro smazání zbytku fronty po přerušení. Smaže všechny příznaky přerušení (ST4=00(hex), ST5=00(hex), ST6=00(hex)) Čítač pozice neovlivní. Nelze použít za chodu. XA - EXCHANGE změní rychlosti a zrychlení u všech vektorů ve frontě na posledni zadanou rychlost V. XU - EXCHANGE UP změní rychlosti a zrychlení u všech vektorů ve frontě. Hodí se pro změnu parametrů za chodu. Rychlost se zvetší o 1/16 (6,25%) současného stavu XD - EXCHANGE DN změní rychlosti a zrychlení u všech vektorů ve frontě. Hodí se pro změnu parametrů za chodu. Rychlost se zmenší o 1/16 (6,25%) současného stavu G - GO nastartuje dokončení zastaveného vektoru a zbytku fronty jen pokud INTA=1, jinak bez efektu. Smaže bit INTA=0,INTRCOM=0,ST4=00,ST5=00. P - POSITION dotaz na polohu X,Y Odpovedí je okamžitá absolutní poloha x,y , takže během chodu nějakého vektoru se neustále mění. Po zastavení je hodnota stabilní. Vrací polohu vždy v 1/16 krocích bez ohledu na to, do jakého režimu jsou nastaveny motory. Hodi se pro kresleni okamzite pozice nastroje v rovine XY. PF - POSITION dotaz na polohu X,Y,Z Odpovedí je okamžitá absolutní poloha x,y,z , takže během chodu nějakého vektoru se neustále mění. Po zastavení je hodnota stabilní. Vrací polohu vždy v 1/16 krocích bez ohledu na to, do jakého režimu jsou nastaveny motory. N - NULL Vynuluje všechny 3 osy čítače pozice nelze použít za chodu vektoru (pri RUN=1) ERn - READ přecte byte z EEPROM na adrese n a pošle jej po sériové lince n = 00..FF(hex) EWn,x - WRITE zapíše byte x EEPROM na adresu n n = 00..FF(hex) x = 00..FF(hex) Mm - MOTOR MODE m = U - proud motorů normální pro pohyby m = D - proud motorů poloviční pro úsporu odpadního tepla m = 2 - půlkrokový režim P=8 m = 4 - 1/4 krokový režim P=4 m = 8 - 1/8 krokový režim P=2 m = F - 1/16 krokový režim P=1 Nelze použít za chodu. Přejít na jemnější dělení kroku je bez omezení, ale přechod na hrubší dělení je vhodné provést jen tehdy, pokud je poloha dělitelná beze zbytku hodnotou P, jinak je možné dostat motor(y) do stavu, že se "vyhýbají" svým přirozeným pólům, a tím ztrácí sílu. Příkaz je modální, platí až do zadání jiné hodnoty. Jsou 2 zakladni moznosti jak pouzivat mikrokroky: 1) Prikazem MF zvolit 1/16 a uz s nimi nehybat, pak se zadane kroky shoduji s citacem polohy. Je to jednodussi, ale na prejezdech stroje muze chybet rychlost. 2) mod motoru menit dynamicky pri zastaveni: Pri pomalejsim pohybu pouzit jemnejsi kroky, a pri rychlejsim hrubsi kroky. Motory se pak vyuziji skutecne na doraz. Toto je vyuzivano programem Remote. Nesmi pak programatora zaskocit toto: M4 - voli cvrtkroky L100,100,100 PF - odpoved 0,400,400,400 - ono to totiz je 400 1/16, coz je 100 1/4 Pro zacatecnika se to doporucit neda, snadno se v tom zamota. Navic po neplanovanem zastaveni je treba zaokrouhlit pomoci stavajicich mikrokroku na nejblizsi vyssi nove zvoleny mikrokrok. napr: jede v 1/16 zastavi na PF = 0,1001,500,399 (1/16) chceme na 1/4, takze L-1,0,1 (porad v 1/16) kontrola PF = 0,1000,500,400 je delitelne 4mi=ok (1/4 : 1/16) M4 - volba noveho kroku motoru Lx,y,z - a jedeme rychleji..... O0,n -OUTPUT zapíše byte x v hexadecimálním tvaru na výstupní port 0 význam mají jen 2 bity, jsou aktivní v log.0: 0 = vřeteno CAN9 I/O -pin 9 (negovaný pin 8) 2 = chlazení CAN9 I/O -pin 7 (negovaný pin 6) bit 0 = pin C1 (v kontrolerech Gravos vretene) bit 1 = pin C2 (v kontrolerech Gravos laseru) bit 2 = pin C3 (v kontrolerech Gravos chlazeni) bit 3 = pin C4 (v kontrolerech Gravos ofuk) bit 4 = pin C5 (v kontrolerech Gravos povoleni otevreni krytu) bit 5 = pin C6 bit 6 = pin C7 bit 7 = pin C8 vystupy jsou aktivni v log.0, po zapnuti jsou neaktivni log.1 I0 - INPUT prečte vstupní port 0 odpovedí je stav portu v hexadecimálním tvaru bit 0 = pin A1 bit 1 = pin A2 bit 2 = pin A3 bit 3 = pin A4 bit 4 = pin A5 bit 5 = pin A6 bit 6 = pin A7 bit 7 = pin A8 pozn: tento port neni v kontrolerech Gravos vyuzivan, byva pripojen k vystupnimu portu 0, pro jeho zpetnou kontrolu. I1 - INPUT prečte vstupní port 1 odpovedí je stav portu v hexadecimálním tvaru bit 0 = pin A10 Intr0 (v kontrolerech Gravos RefX) bit 1 = pin A11 Intr1 (v kontrolerech Gravos RefY) bit 2 = pin A12 Intr2 (v kontrolerech Gravos RefZ) bit 3 = pin A13 Intr3 (v kontrolerech Gravos tlacitko Start) bit 4 = pin A14 Intr4 (v kontrolerech Gravos EndZ) bit 5 = pin A15 Intr5 (v kontrolerech Gravos EndY) bit 6 = pin A16 Intr6 (v kontrolerech Gravos EndX) bit 7 = pin A17 Intr7 (v kontrolerech Gravos tlacitko Stop) I2 - INPUT prečte vstupní port 2 odpovedí je stav portu v hexadecimálním tvaru bit 0 = pin A19 Intr8 (v kontrolerech Gravos test klice serizovace) bit 1 = pin A20 Intr9 (v kontrolerech Gravos test krytu) bit 2 = pin A21 Intr10 bit 3 = pin A22 Intr11 bit 4 = pin A23 Intr12 bit 5 = pin A24 Intr13 bit 6 = pin A25 Intr14 (v kontrolerech Gravos tlačítko sensoru) bit 7 = pin A26 Intr15 (v kontrolerech Gravos hříbek sensoru) Intry nedelaji nic jineho, nez ze pri sve aktivaci prinuti interpolator zabrzdit (po rampe). Je zde popsano jak vyuziva Intry system Gravos, to by vsak nemelo byt omezujici, lze je pouzit libovolne jinak. Toto info je jen pro pripadnou snahu o kompatibilitu. SRn - STATUS READ přečte status n = 0..5 odpovedí je hodnota zadaného status slova SWn,x - STATUS WRITE zapíše do statusu n = 0..5, byte x (v hex.tvaru) Status slova: ST0 = povolení uživatel.přerušení INTR0-7 ( 0 = zakázáno ) ST1 = povolení uživatel.přerušení INTR8-15 ( 1 = povoleno ) ST2 = polarita uživatel.přerušení INTR0-7 ( 0 = aktivní v log.0 ) ST3 = polarita uživatel.přerušení INTR8-15 ( 1 = aktivní v log.1 ) ST4 = příčina přerušení INTR0-7 ( 0 = přerušení nebylo ) ST5 = příčina přerušení INTR8-15 ( 1 = přerušení bylo ) Jednotlivá přerušení korespondují se vstupy. Pomocí přečtení vstupů lze přečíst okamžitý stav. Každé aktivované přerušení zastaví pohyb, a nastaví bit INTA, aby o tom řídící SW věděl. Libovolný Intr není nutné použít, (lze zamaskovat) a je ho možno použít jako obecný vstupní bit. SR6 - STATUS READ precte ST6 význam jednotlivých bitů: (ostatní jsou nepoužité) STOP = 0 žádost o zastavení FREE = 1 příznak volného str.času INTCOM = 4 nastavuje se po přerušení HALTem RUN = 6 je zpracováván vektor INTA = 7 akceptováno zastavení pro uživatele mají význam především bity RUN a INTA INTA=0 RUN=0 ;nic neni spusteno, klidovy stav INTA=0 RUN=1 ;provozni stav, jsou zpracovavany vektory INTA=1 RUN=0 ;bylo preruseno, pri brzdeni vektory dobehly INTA=1 RUN=1 ;bylo preruseno, zbytek vekoru je ve fronte SW6 - STATUS WRITE zapíše do ST6, byte x (v hex.tvaru) raději nepoužívat, lépe použít instrukce G,D,H apod... F - FLAG to samé jako SR6, ale je doplněn stav fronty vektorů - bit 5 log.1 = fronta je plná - nelze přijmout vektor log.0 = do fronty se další vektor vejde @ - INDEX pošle index posledního příkazu. Všechny příkazy jsou indexovány modulo 256. V případě nejistoty zda příkaz do Interpolátoru dorazil, je možné vyžádat tento index a porovnat s vlastním indexováním v programu, a tak zjistit, zda ho interpolátor přijal nebo ne. Většina příkazů se dá zopakovat (A,V,PF atd..), ale zadávání polohy ne, to se musí v případě chyby přenosu exaktně dohledat, jinak by se jelo jinam. > - REPEAT - zopakuje poslední přijatý příkaz a odpověď na něj toto se hodí, pokud dojde k chybě přenosu, a nadřízenému počítači přijde místo odpovědi nějaký nesmysl. J - JUMP na RESET zresetuje včetně vynulování čítače polohy ? - VERSION dotaz na verzi programu Q - QUESTION dotaz na ID procesoru, vrací řetězec 8 čísel jejich význam: ddmmrrpp dd = den pálení procesoru mm = měsíc pálení procesoru rr = rok pálení procesoru pp = kolikátý procesor toho dne např.: 25020304 znamená 25.2.2003 čtvrtý kus toho dne toto číslo je jedinečné - neexistují 2 procesory se stejným číslem =============================================================================== ODPOVĚDI: 1 hexadecimální znak 0..F [další vyžadované parametry] Enter(0Dh) mezi jednotlivými parametry je čárka Odpoveď je odeslána ihned po zadání příkazu. Jedině pro příkaz HALT je odpoveď odeslána až po vykonání instrukce. INTA, 3 bitový kód chyby bit 3, 2 .. 0 kód chyby: 0 = OK (žádná chyba) 1 = fronta je plná, nelze zařadit další vektor je nutné počkat, zopakovat 2 = příkaz nepřišel celý včas, přetržení komunikace (zafunguje WATCH DOG) 3 = neznamý příkaz 4 = chyba syntaxe 5 = parametr mimo meze 6 = pro Go, není co spustit 7 = za chodu vektoru nelze Např.: Příkaz Odpověď Pozn. !0L1000,0,0 0 OK !1PF 0,-1000,2000,50 OK !0C100,20,0 1 vektor nebyl přijat (je nutné ho opakovat) !0V1000 8 OK, ale je přerušeno (INTA=1) !0SW8,F1 5 parametr mimo meze !1SR2 0,2B OK