Přeskočit obsah

Interpolátor

CNC modul

CNC je softwarový modul, který vykonává sekvenci pohybových (G-instrukce) a vstupně/výstupních příkazů (M-funkce) danou G-kódem. Jeho součástí je modul Interpolátor.

Interpolátor

Modul interpolátoru počítá polohy a rychlosti jednotlivých servopohonů (os) tak, aby byl výsledný pohyb všemi osami rovnoměrně prováděn. K dispozici je lineární interpolace (pohyb po přímce), kruhová interpolace (pohyb po kružnici prováděný dvěma libovolnými osami), případně šroubová interpolace (dvě osy vykonávají pohyb po kružnici, ostatní vykonávají lineární pohyb). K výpočtu tří nezávislých finálních trajektorií víceosého pohybu nabízí systém TG Motion tři nezávislé interpolátory, z nichž každý může pracovat až s deseti servopohony. Sdílená paměť TGM_Interpolator slouží jako rozhraní mezi CNC modulem a ostatními aplikacemi (PLC, Win aplikace). Většina registrů je určena jen pro čtení a zobrazuje aktuální hodnoty CNC modulu. Protože G-kód je většinou psán v jednotkách [mm], pracují i Interpolátory s jednotkami [mm]. K nastavení převodu [mm] na [inc] slouží struktura Command nebo registr Ratio (viz dále).

Blokové schéma Interpolátoru

Kompetence PLC a Windows aplikací

PLC

Nastavuje základní parametry Interpolátoru, obsluhuje M-funkce a řeší havarijní zastavení Interpolátoru. Z PLC Interpolátor spustit nelze.

Windows aplikace

Převádějí G-kód do binárního mezikódu, plní jím buffer Interpolátoru ve sdílené paměti a spouštějí i zastavují Interpolátor. Buffer Interpolátoru není z PLC ani Windows aplikací přístupný.

G-kód

G-kód je název programovacího jazyka, který řídí NC a CNC obráběcí stroje. Jedná se o kód v textovém formátu, který říká obráběcímu stroji, jakou akci má vykonat. V G-kódu mezi nejpoužívanější příkazy patří Ginstrukce a M-funkce. Jsou vždy uvozeny písmenem (G, M) a číselným parametrem, který specifikuje, co má daná instrukce vykonávat. Jednotlivé G-instrukce jsou přesně definovány, většinu M-funkcí může definovat uživatel.

Ukázka části G-kódu

G00 X60.6051 Y40.7723
G42
M51
G02 X0 Y-2.5202 I3.0336 J-1.2601
G02 X0.922 Y-1.5646 I6.0604 J2.5173
G02 X1.079 Y-1.0269 I4.2143 J3.3479
G02 X2.2624 Y-1.3678 I9.8772 J13.7817
G02 X1.9856 Y-0.8109 I6.1778 J12.2908
G02 X3.015 Y-0.7892 I8.8515 J27.6632
G02 X6.2889 Y0 I3.1444 J33.011
M50
G40
G00 X-28.9085 Y30.4365
G42
M51
G40
M2

G-instrukce

Slouží většinou k rychlému polohování, posuvnému pohybu po přímce nebo oblouku, vrtání nebo řezání. O jejich plnění se stará Interpolátor. Průběh vykonávání G-instrukcí může být přerušen plněním M-funkcí. V tom případě Interpolátor může čekat na vykonání M-funkce a pak pokračovat dále ve vykonávání G-kódu.

Tabulka G-instrukcí

Označení Popis
Základní G-instrukce
G0 Rychloposuv
G1 Lineární interpolace
G2 Kruhová interpolace CW
G3 Kruhová interpolace CCW
G4 Prodleva [sec]
G25 Volání podprogramu
G26 Volání cyklu
G27 Programový skok
G29 Návěští nebo textová poznámka
G40 Zrušení korekce
G41 Korekce vlevo od kontury
G42 Korekce vpravo od kontury
G53 Zrušení posunutí nulového bodu
G54 Posunutí nulového bodu
Rozšířené G-instrukce
G90 Absolutní programování
G91 Inkrementální (přírůstkové) programování
G92 Nastavení hodnot souřadnic

M-funkce

Pokud je součástí kódu libovolná M-funkce, její obsloužení je třeba zabezpečit v uživatelském PLC kódu. Interpolátor se M-funkcemi nezabývá, jen u některých čeká na jejich obsloužení. M-funkce mohou být až na výjimky uživatelsky definovány (viz registr M_Funkce_Parametr).

Pohybové a průběžné M-funkce

Pohybové M-funkce (Mx, kde x < 1000) – vykonávání G-kódu se zastaví, PLC obslouží M-Funkci a po jejím dokončení nastaví registr M_Func = 0. Interpolátor pak pokračuje ve vykonávání G-kódu další instrukcí. Průběžné M-funkce (Mx, kde x > 1000) – PLC spustí obsluhu M-funkce, ale Interpolátor nečeká na obsloužení M-funkce a pokračuje dál ve vykonávání G-kódu.

Tabulka podporovaných M-funkcí

Označení Popis
M0 Programový stop
M2 Ukončení G-kódu, lze předefinovat
M3 Roztáčení vřetene CW, lze předefinovat
M4 Roztáčení vřetene CCW, lze předefinovat
M5 Zastavení vřetene, lze předefinovat
M6 Výměna nástroje, lze předefinovat
M7 Zapnutí chlazení, lze předefinovat
M8 Zapnutí mazání, lze předefinovat
M9 Vypnutí chlazení i mazání, lze předefinovat
M17 Návrat z podprogramu (RETURN), lze předefinovat
M29 Výstup textového hlášení (PRINT), lze předefinovat
M30 Ukončení G-kódu, lze předefinovat
M80 Vypnutí zrcadlení
M81 Zrcadlení v ose x
M82 Zrcadlení v ose y
M83 Zrcadlení v ose z
M84 Zrcadlení v osách x a y
M85 Zrcadlení v osách x a z
M86 Zrcadlení v osách y a z
M87 Zrcadlení v osách x, y a z
M99 Definování výchozí hodnoty posuvu, lze předefinovat

Vyhlazení trajektorie

G-kód často pracuje s polynomy složenými z krátkých úseček, někdy může také docházet k okamžitým změnám rychlosti vlivem nesprávně zapsaného kódu. Všechny okamžité změny rychlosti se mohou projevit nežádoucím zrychlením v některých z os, a tím i mechanickým rázem v některých servopohonech. K vyhlazení vypočtené trajektorie slouží dva nástroje.

Spline

Spline – funkce vyhlazení

Funkci Spline je vhodné použít v případě nekorektně vytvořených G-kódů, ve kterých jednotlivé úseky na sebe plynule či spojitě nenavazují, nebo v případě G-kódů, v nichž je výsledná trajektorie vytvořena pomocí lineárních úseků s hrubým dělením. Spline je také vhodný k vyhlazení skokové změny rychlosti, která vyplývá z matematického modelu mechaniky (např. naklápěcí hlavy).

Funkce Spline se aktivuje ve všech osách současně, nelze ji aplikovat jen na některé osy. Po její aktivaci je v každé ose kontrolována změna zrychlení (jerk). V případě, že je nalezena změna vetší než povolená, proloží se daným místem spline křivka.

Upozornění

Čím je větší délka spline (velikost Spline bufferu), tím je vyhlazení lepší. Vyhlazení pomocí funkce Spline je na úkor přesnosti polohování.

Aktivace a parametrizace Spline

Funkce Spline se aktivuje a parametrizuje pomocí struktury Command daného Interpolátoru. Pro hodnotu registru Command = −2 mají Command parametry následující význam:

Command_Parametr[0] – určuje počet bodů, kterými se prokládá spline. Potažmo se tak určuje velikost Spline bufferu. Rozsah nastavení parametru je 50–500 bodů/kroků. Při Cycle_Time = 500 μs je krok výpočtu 100 μs, při Cycle_Time = 250 μs je krok výpočtu 50 μs. Vypnutí funkce Spline je možné nastavením délky spline na nulu (Command_Parametr[0] = 0).

Command_Parametr[1] – určuje mez vyhodnocení změny zrychlení (jerk), tedy od jakého zrychlení se funkce Spline aktivuje. Udává se v jednotkách [mm/s³]. Vhodná hodnota nastavení je 1 000 000 mm/s³.

Po nastavení obou parametrů je třeba nastavit registr Command na hodnotu −2. Po provedení příkazu TG Motion tento registr vynuluje.

Zpoždění pohybu

Pohyb po průchodu funkcí Spline je oproti polohování vypočteného interpolátorem zpožděn o délku Spline bufferu. Všechny osy polohují neustále synchronně, protože velikost bufferů je pro všechny osy stejná. I M-funkce jsou volány synchronně s výsledným pohybem, protože je pro ně použit buffer stejné velikosti.

Příklad nastavení Spline

Příklad zapnutí funkce Spline s délkou spline 20 ms (při Cycle_Time = 500 μs). Nejdříve je třeba nastavit hodnoty Command_Parametrů a jako poslední hodnotu registru Command = −2.

Interpolator.Command_Parametr[0] = 200;
Interpolator.Command_Parametr[1] = 1000000;
Interpolator.Command = -2;

IIR Filtr

IIR Filtr – funkce vyhlazení

K vyhlazení výsledné rychlosti pohybu a odstranění nežádoucích rychlých změn lze použít IIR Filtr (Infinite Impulse Response). Jedná se o matematický model lineárního filtru typu dolní propust (Low-pass) se strmostí 12 dB na oktávu (2-Pole) počítaný podle vztahu:

\[ H(s) = \frac{q}{s^2 + p \cdot s + q} \]

s možností nastavení tří parametrů:

  • p, q – parametry nastavující průběh filtru (viz tabulku)
  • f (cutoff) – čas, za který se filtrovaná trajektorie vrátí k původní vypočtené trajektorii

Hodnoty parametrů pro některé typy filtrů

p q typ filtru popis
√2 2 Butterworth před f dochází ke zdvihu, malé zpoždění
3 3 Bessel mírný zdvih, hladký průběh, větší zpoždění
2 1 critically damped hladký pozvolný průběh bez zdvihu, největší zpoždění

Grafické znázornění průběhu některých typů filtrů

Aktivace a parametrizace IIR Filtru

Hodnoty parametrů IIR Filtru lze nastavit pomocí struktury Command. Pro hodnotu registru Command = −1 mají Command parametry následující význam:

  • Command_Parametr[0] – nastavuje parametr p filtru.
  • Command_Parametr[1] – nastavuje parametr q filtru.
  • Command_Parametr[2] – určuje f – čas návratu k původní trajektorii.

Upozornění

Hodnoty parametrů jsou typu Integer, skutečné fyzické hodnoty parametru se dosáhne dělením hodnoty parametru číslem \(1 \cdot 10^6\) (Command_Parametr[1] = 1000000, parametr filtru = 1,0).

  • Command_Parametr[3] – nastavuje bitovou masku aktivity filtrů pro jednotlivé osy. Používá se pouze prvních 10 bitů pro 10 os, ostatní bity jsou ignorovány (viz registry).

Zpoždění pohybu

IIR Filtry vypočítaný pohyb zpožďují. Zpoždění je závislé na vstupních datech, dynamicky se mění a jeho velikost nelze předem určit. M-funkce jsou z běžícího G-kódu signalizovány při „stojícím“ Interpolátoru, fyzický pohyb servopohonů ale nemusí být ještě ukončen.

Upozornění

Při použití IIR Filtru bude servopohon „plavat“ za Interpolátorem a je vždy třeba počkat, až je fyzický pohyb všech servopohonů skutečně dokončen.

Nastavení parametrů IIR Filtrů je společné pro všechny osy Interpolátoru. Filtr je možné aktivovat nezávisle pro jednotlivé osy podle bitové masky registru Command_Parametr[3]. Je tedy třeba počítat s tím, že výsledný pohyb os po aplikaci filtru nemusí být vzájemně synchronní tak, jak byl původně vypočten.

Struktura Command

Registry Command_Parametr

V kapitole je popsán význam registrů Command_Parametr[ ] pro vybrané hodnoty registru Command.

Nastavení převodového poměru mm na inc – Command = 1024

V G-kódu se většinou implicitně pracuje s jednotkou [mm], proto Interpolátor pracuje také v jednotkách [mm]. Protože servopohony pracují s inkrementy [inc], je třeba podle počtu inc/otáčku servopohonu (Servo[x].Resolution) stanovit převodový poměr inc/mm. Ten se nastavuje pomocí struktury Command příslušného Interpolátoru. Převodovým poměrem se pak násobí vypočítaná poloha v dané ose a takto přepočtená se pak posílá do servopohonu.

Command_Parametr popis
0 určuje číslo osy, u níž se poměr nastavuje [0–9]
1 čitatel převodového poměru [inc]
2 jmenovatel převodového poměru [mm]

Nastavení aktuální polohy – Command = 2048 a Command = 2049

Pomocí Command = 2048 a Command = 2049 se nastavuje aktuální poloha interpolátoru. Po provedení příkazu 2048 systém hlásí polohu na trajektorii, v druhém případě polohu mimo trajektorii. Pro obě varianty nabývají všechny Command_Parametr[0-9] stejného významu.

Command_Parametr popis
0 aktuální poloha v ose 0 [inc]
... ...
9 aktuální poloha v ose 9 [inc]

Nastavení parametrů IIR Filtru – Command = −1

Command_Parametr popis
0 parametr p filtru – nastavení průběhu filtru (v kombinaci s parametrem q)
1 parametr q filtru – nastavení průběhu filtru (v kombinaci s parametrem p)
2 parametr f filtru – čas, za který se filtrovaná trajektorie vrátí k původní trajektorii
3 bitová maska aktivity IIR Filtrů pro jednotlivé osy Interpolátoru. Příklad: xxxx xx00 0000 0101 – aktivní je pouze IIR Filtr pro osu 0 a osu 2

Nastavení parametrů Spline – Command = −2

Command_Parametr popis
0 určuje počet bodů, kterými se spline prokládá; rozsah nastavení je 50–500 bodů
1 horní mez vyhodnocení změny zrychlení [mm/s³]

Struktura LookAheadBuffer

Popis struktury

Struktura LookAheadBuffer je tabulka důležitých parametrů osmi úseků – položek G-kódu jdoucích po sobě. První položkou tabulky je vždy právě prováděný úsek, dalšími položkami je sedm bezprostředně následujících úseků.

LookAheadBuffer funguje jako posuvný buffer. Po provedení aktuálního úseku se data tabulky posunou, první je opět vykonávaný úsek a na poslední místo se vloží 8. následující úsek od aktuálně vykonávaného. Strukturu LookAheadBuffer naplňuje Interpolátor. Z hlediska PLC jsou její registry pouze ke čtení.

Úsek G-kódu

Úsekem se rozumí jedna položka G-kódu, a to buď G-instrukce (G0–G3) nebo pohybová M-funkce, která má význam z hlediska pohybu (M3–M999).

Použití struktury

Struktura LookAheadBuffer slouží k přizpůsobení technologií podle instrukcí a funkcí následujících úseků, případně podle jejich hodnot. Protože z PLC nelze Interpolátor spustit ani zastavit (kromě havarijního stop), je třeba během obsluhy existujících M-funkcí obhospodařit vše potřebné. To musí zabezpečit tvůrce PLC kódu. PLC může během M-funkce například změnit úhel obráběcí hlavy v rohu čtverce podle tangenty následující funkce; může pomocí registru Rel_Speed zpomalit pohyb, pokud ví, že bude následovat velká změna tangenty. Při pohybu po kružnici je k dispozici neustále aktuální tangenta, která se dá použít pro natáčení hlavy. Při krátkých úsečkách lze také postupným natáčením hlavy vyhladit lomenou úsečku. K vykonání všech těchto úkonů je nutné vědět, co bude následovat za právě vykonávaným úsekem. K tomu lze právě využít struktury LookAheadBuffer.

Upozornění

Někdy se pro Movement_Type = 2 může v registru Movement_Code objevit záporné číslo M-funkce. Jedná se o vnitřní funkci TG Motion, s níž není třeba nijak pracovat.

Jednotlivé registry struktury LookAheadBuffer jsou popsány v kapitole Apendix.

Apendix

Přehled a popis registrů struktury Interpolátor

název přístup offset popis
Number R 0 číslo interpolátoru, může nabývat hodnot 0, 1, 2
Number_Axes RW 4 počet os, se kterými interpolátor pracuje; povolené rozmezí je 1–10
Buffer_Size R 8 maximální počet úseků G-kódu, povolené hodnoty jsou 1000–100000
Command RW 12 příkaz:
4 = havarijní stop na trajektorii
5 = havarijní stop (po stopu hlásí mimo trajektorii) 8 = normální stop na trajektorii
9 = normální stop (mimo trajektorii)
1024 = nastavení převodních poměrů (mm na inc) – viz kap. Command 2048 = nastavení aktuální polohy (na trajektorii) – viz kap. Command 2049 = nastavení aktuální polohy (mimo trajektorii) – viz kap. Command
−1 = nastavení parametrů IIR Filtru – viz kap. Command
−2 = nastavení parametrů Spline – viz kap. Command
Command_Parametr [0-11]
(12 registrů)
RW 16 12 parametrů typu integer, jejichž význam a hodnoty závisejí na typu funkce Command
Command_Status R 64 aktuální stav prováděného příkazu:
0 = předchozí příkaz byl úspěšně vykonán a lze aktivovat další příkaz 1 = aktuální příkaz se provádí
−1 = během vykonávání příkazu došlo k chybě
Status R 68 aktuální stav interpolátoru:
1 = probíhá pohyb po trajektorii 3 = stop na konci trajektorie
4 = v bufferu je nejméně jeden úsek trajektorie, lze volat start 6 = zastavování po havarijní rampě
7 = interpolátor se zastavil po havarijním stopu
8 = interpolátor byl zastaven během plnění bufferu
Act_Part R 72 číslo aktuálně prováděného úseku
Address_External_Position RW 76 offset adresy TGM_Data, kde je uložena poloha externího snímače; hodnota je typu integer
M_Func RW 80 hodnota M-funkce; pro M < 1000 Interpolátor zastaví a čeká na vynulování této hodnoty; pak pokračuje dalším úsekem; pro M > 1000 se pokračuje ve vykonávání G-kódu
Act_G_Func R 84 hodnota právě prováděné G-instrukce
Act_M_Func R 88 hodnota právě prováděné M-funkce
Last_Cont_M_Func R 92 uložená hodnota poslední průběžné M-funkce (M > 1000)
Run_Flag R 96 - spodních 16 bitů ukazuje stav aktuálního úseku:
0 = STOP (interpolátor je neaktivní)
1 = RUN (vykonává se pohybová G-instrukce) 2 = WAIT_WINDOW (pro otáčkové obrábění) 3 = WAIT_PULSE (pro otáčkové obrábění)
4 = WAIT_MFUNC (začalo provádění M-funkce)
5 = WAIT_MFUNC_WAIT_FOR_END (čekání na ukončení M-funkce)
- horních 16 bitů pak stav rychlostního průběhu:
1 = žádný pohyb 2 = zrychlování
3 = dosažena požadovaná rychlost pohybu 4 = zpomalování
5 = další rychlostní úsek
6 = zpomalování na posledním úseku 7 = zpomalování po havarijní rampě
pozn.: od verze TGM420
Tool_Number R 100 číslo aktuálního nástroje (vrtání, fréza, …)
pozn.: od verze TGM420
Orig_Position (10 registrů) R 376 vypočítané souřadnice všech os [mm]
Position (10 registrů) R 456 souřadnice upravené funkcí Spline nebo IIR Filtrem [mm]
PositionInc (10 registrů) R 536 souřadnice Position vynásobené převodním poměrem Ratio [inc]
Backlash (10 registrů) R 616 aktuální hodnota vůle pro jednotlivé osy [inc]
Offset (10 registrů) RW 696 hodnoty offsetu se připočítávají k poloze PositionInc, tyto hodnoty nastavuje uživatel [inc]
Speed (10 registrů) R 776 aktuální rychlost jednotlivých os po Spline a IIR [mm/s]
Ratio (10 registrů) RW 856 převodní poměr (násobitel) jednotek G-kódu (obvykle mm) na inkrementy (polohy servopohonů)
M_Funkce_Parametr
(32 registrů)
R 936 parametry M funkce z G-kódu, celkem 26 hodnot podle písmen v abecedě; některá písmena nelze použít, protože jsou vyhrazena systémem
rezervované parametry (indexy jsou počítány od 0): G = index 6
M = index 12 N = index 13
P = index 15
Rel_Speed RW 1192 relativní rychlost interpolovaného pohybu, koeficient v rozmezí 0,01–2 (1–200 %)
Set_Speed R 1200 požadovaná rychlost z G-kódu (daná F-instrukcí G-kódu nebo tabulkou rychlostí) [mm/min]
Act_Speed R 1208 aktuální rychlost [mm/min]
Move_Distance R 1216 aktuální celková ujetá vzdálenost [mm]
LookAheadBuffer R 2048 tabulka informací o úsecích, které budou následovat; celkem 8 položek struktury popsané
v následující tabulce; první položka popisuje právě prováděný úsek; velikost každé položky je 1792 bytů
pozn.: od verze TGM420

Přehled a popis registrů struktury LookAheadBuffer

název přístup offset popis
AllParams
(26 registrů)
R 0 všechny zadané adresy M-funkcí z konkrétního G-kódu pro daný úsek (26 písmen anglické
abecedy)
Tangens R 208 aktuální tečna pohybu v rovině XY; pokud je právě prováděný úsek oblouk (G2 nebo G3),
tečna se mění průběžně; pro budoucí úseky určuje počáteční tečnu pohybu
MovementType R 216 typ záznamu:
0 = neplatný záznam (počet zbývajících úseků k provedení je menší než aktuální index tabulky LookAheadBuffer), do konce provedení pohybu zbývá méně než 8 úseků
1 = pohybová funkce (G0, G1, G2, G3) 2 = M funkce
MovementCode R 220 číslo G-instrukce nebo pohybové M-funkce (číslo průběžné M-funkce se v tomto registru neobjeví, ale objeví se v AllParams v písmenu M)
Plane R 224 - rovina kruhové interpolace: 17 = XY
18 = XZ
19 = YZ
- ostatní roviny nejsou definovány
Tool R 228 číslo nástroje
EndPos (10 registrů) R 232 koncová poloha úseku jednotlivých os [mm] (absolutní souřadnice)
StartAngle R 312 počáteční úhel oblouku [°] – úhel spojnice středu oblouku s počátečním bodem; hodnota
registru je cyklická (0–360); pro lineární pohyb či M-funkce je hodnota registru větší než 1038
EndAngle R 320 koncový úhel oblouku [°] – úhel spojnice středu oblouku s koncovým bodem; hodnota registru je cyklická (0–360); pro lineární pohyb či M-funkce je větší než 1038
Radius R 328 - poloměr oblouku [mm]
- pro lineární pohyb či M-funkce je registr nulový