RM_AxisSpline –  Interpolace požadované polohy (rychlosti, zrychlení)

Symbol blokuPotřebná licence: MOTION CONTROL
PIC

Popis funkce

Tento blok slouží k připojení virtuální osy (reprezentované blokem RM_Axis) k motoru respektive jeho řídícím obvodům a vytvoření fyzické osy. To zahrnuje několik do značné míry nezávislých funkcí, které realizuje tento blok.

Základní funkce je připojit požadované a aktuální signály o poloze, rychlosti, zrychlení a momentu. To pokrývají vstupy ActualPosition, ActualVelocity, ActualTorque a výstupy Position, Velocity, Acceleration, Torque.

Měnič motoru obvykle pracuje s jinými jednotkami (často přímo tiky na snímači polohy) než potřebujeme v ose. Dále polohu ještě ovlivňuje převodový poměr na převodovce. Blok RM_AxisSpline provádí transformaci jednotek podle parametrů DriveUnits a AxisUnits (zadává se sobě odpovídající délka v jednotkách měniče a v jednotkách osy v bloku RM_Axis). Předpokládá se, že rychlost na vstupu i výstupu bloku RM_AxisSpline je drive units/s a zrychlení driveunits/s/s; moment se netransformuje.

Řídící obvody motoru obvykle pracují s celočíselnými typy (respektive v celočíselných typech předávají hodnoty nadřízenému systému). Problém vzniká u polohy, kde při dlouhotrvajícím pohybu jedním směrem může dojít k přetečení celočíselného typu a hodnota se změní z maximálního použitelného čísla na minimální nebo naopak. Blok RM_AxisSpline s tímto umí pracovat a správně naváže polohu. Podmínkou správné funkce je, že v parametru DriveBits je nastaven správný počet bitů (včetně příznaku, jestli je číslo se znaménkem nebo bez) a také tuto vlastnost musí podporovat měnič (řídící obvody motoru).

Měniče mají různé stavy a režimy činnosti a definované sekvence, jak se mezi těmito stavy přechází. Nejčastěji je to podle standardu CiA402. Blok RM_AxisSpline tento standard podporuje a to prostřednictvím vstupu StatusWord, výstupu ControlWord a parametrů DriveMode, DriveTimeout (vstup a výstup se připojuje na stejnojmenné signály v měniči, další je zřejmé z popisu parametrů).

Mnoho bloků pro řízení pohybu obsahuje výpočetně náročný algoritmus. To vede na relativně velké vzorkovací periody (typicky mezi 10 a 200 ms). Naproti tomu regulátor motoru vyžaduje vzorkovací periodu malou (typicky do 1ms), aby nedocházelo k trhavému pohybu. Tyto protichůdné požadavky řeší blok RM_AxisSpline, který může běžet v jiné úloze (s kratší periodou vzorkování) než blok RM_Axis a provádí interpolaci hodnot, tak aby výsledná křivka byla spojitá a pokud možno hladká.

Je mnoho možností, jak dopočítat polohu (a rychlost, zrychlení, moment) v časech mezi hodnotami z pomalejší úlohy. Protože každá možnost má určité výhody a nevýhody, může si uživatel z několika vybrat pomocí parametru InterpolationMode. Nejjednodušší je lineární interpolace polohy. To však způsobuje skoky v rychlosti. Alternativně lze rychlost také interpolovat lineárně, ale pak zase rychlost neodpovídá derivaci/diferenci polohy. Z tohoto pohledu lepší je interpolace polynomem vyššího řádu (v parametru lze vybrat 3. nebo 5.), což ovšem vede na velké zrychlení, pokud vstupní trajektorie neodpovídá polynomu (nastává při přechodu z konstantního zrychlení na konstantní rychlost uprostřed mezi body vzorkování i při jednoduchých pohybech). Další možnost je aproximace Bspline funkcí (opět lze vybrat 3. nebo 5. řád). To odstraňuje nevýhody předchozích metod, ale vyžaduje více vzorků a tak zavádí větší dopravní zpoždění. Někdy také může vadit, že je to aproximační metoda a neprojíždí zadané body přesně (v režimu konstantní rychlosti je ale aproximace přesná). Ve všech případech je moment interpolován lineárně a nezávisle na ostatních veličinách.

Poznámka 1: Protože doba vykonávání bloků pro řízení pohybu značně kolísá, dostává interpolátor nové hodnoty neekvidistantně, přičemž výstup interpolátoru musí být souvislý. Proto se načte několik (závisí na metodě) hodnot dopředu a používají se hodnoty z vhodného intervalu. Právě používaný interval indikuje blok na výstupu State pomocí hodnot interval1, interval2, interval3. Důležité je pravidlo, že stavy odpovídající kladným číslům jsou normální činnost a stavy odpovídající záporným číslům představují chybu.

Poznámka 2: Protože činnost interpolátoru z principu vyžaduje použití v jiné (rychlejší) úloze než je RM_Axis, musí mít blok správně vyřešeno předávání reference mezi úlohami a referenci je možné bez obav předávat pomocí bloků Inport a Outport.

Vstup

uAxis

Odkaz na osu (přípustné je jen spojení RM_Axis.axisRefuAxis nebo yAxisuAxis)

Reference

ActualPosition

Skutečná poloha osy [drive unit]

Double (F64)

ActualVelocity

Skutečná rychlost osy [drive unit/s]

Double (F64)

ActualTorque

Skutečný moment/síla osy

Double (F64)

LIMN

Koncový spínač v záporném směru

Bool

LIMZ

Koncový spínač pro nulovou polohu

Bool

LIMP

Koncový spínač v kladném směru

Bool

StatusWord

Stavové slovo servoměniče dle CiA402 standardu

Long (I32)

FAULT

Vynucení vypnutí osy (obvykle chyba měniče nebo komunikace s měničem)

Bool

Výstupy

yAxis

Odkaz na osu (přípustné je jen spojení RM_Axis.axisRefuAxis nebo yAxisuAxis)

Reference

Position

Požadovaná (interpolovaná) poloha [drive unit]

Double (F64)

Velocity

Požadovaná (interpolovaná) rychlost [drive unit/s]

Double (F64)

Acceleration

Požadované (interpolované) zrychlení [drive unit/s/s]

Double (F64)

Torque

Požadovaný (interpolovaný) moment/síla

Double (F64)

State

Stav interpolátoru (záporné hodnoty znamenají chybu a pokud to není nesprávnou periodou, je potřeba zkontrolovat časování obou úloh)

Long (I32)

0 ....

Neaktivní (interpolátor jen přeposílá vstupní data na výstup; nastává při ose ve stavu vypnuto nebo pokud bloky RM_Axis RM_AxisSpline mají stejnou periodu spouštění)

1 ....

Čekání (čekání, až bude dostatek dat v bufferu)

2 ....

Interval1 (probíhá interpolace, data z prvního intervalu)

3 ....

Interval2 (probíhá interpolace, data z prvního intervalu)

x ....

Intervalx (další kladná čísla znamenají další interpolační intervaly; závisí na metodě, ale měla by se střídat jen 2 výjimečně 3 sousední čísla )

-1 ...

Přetečení (přetečení vyrovnávacího bufferu, tj. jsou odebírána pomaleji, než odpovídá nastavené periodě; algoritmus se restartuje automaticky, ale může dojít ke skoku polohy i rychlosti)

-2 ...

Podtečení (podtečení vyrovnávacího bufferu, tj. data přichází pomaleji, než odpovídá nastavené periodě; algoritmus se restartuje automaticky, ale může dojít ke skoku polohy i rychlosti)

-3 ...

Přetížení (data z bloku RM_Axis se nepodařilo přečíst; pravděpodobně je přetížena úloha s blokem RM_Axis)

-4 ...

Špatná perioda (úloha s blokem RM_AxisSpline má delší periodu než úloha s blokem RM_Axis)

ControlWord

Řídící slovo servoměniče dle CiA402 standardu

Long (I32)

Parametry

InterpolationMode

Algoritmus pro interpolaci  2

Long (I32)

1 ....

linear (poloha interpolována lineárně, rychlost jako derivace polohy, zrychlení 0, tj. rychlost je po částech konstantní funkce se skoky)

2 ....

cubic spline (poloha je polynom 3. řádu vypočtený na základě polohy a rychlosti na začátku a konci intervalu, rychlost je derivace polohy, zrychlení derivace rychlosti)

3 ....

quintic spline (poloha je polynom 5. řádu vypočtený na základě polohy, rychlosti a zrychlení na začátku a konci intervalu, rychlost je derivace polohy, zrychlení derivace rychlosti)

4 ....

cubic Bspline aproximation (poloha je polynom 3. řádu vypočtený na základě dvou poloh před a dvou poloh za aktuálním intervalem, proložená funkce nemusí přesně procházet zadanými body, rychlost je derivace polohy, zrychlení derivace rychlosti)

5 ....

quintic Bspline aproximation (poloha je polynom 5. řádu vypočtený na základě tří poloh před a tří poloh za aktuálním intervalem, proložená funkce nemusí přesně procházet zadanými body, rychlost je derivace polohy, zrychlení derivace rychlosti)

6 ....

all linear (poloha, rychlost i zrychlení jsou interpolovány lineárně navzájem nezávisle, tj. rychlost neodpovídá přesně derivaci polohy a zrychlení neodpovídá přesně derivaci rychlosti)

7 ....

all cubic (poloha i rychlost jsou interpolovány polynomem 3. řádu navzájem nezávisle, tj. rychlost neodpovídá přesně derivaci polohy)

8 ....

rezervováno pro pozdější použití

9 ....

rezervováno pro pozdější použití

ReverseLimit

Negace významu vstupů LIMN, LIMZ a LIMP

Bool

InterpolationMode

Režim řízení servoměniče  2

Long (I32)

1 ....

Zjednodušený CiA402 (ze statuswordu je kontrolován jen bit značící chybu, control word se nastavuje okamžitě bez postupné zapínací sekvence)

2 ....

Úplný CiA402 (úplná kontrola StatusWord v každém stavu, do ControlWord se posílá požadovaná sekvence a kontroluje se, jestli měnič na každý krok reaguje, pokud nereaguje do času daného parametrem DriveTimeout nastává chyba)

DriveTimeout

Čas pro odpověď servoměniče [s] (for Strict CiA402 mode only)

Double (F64)

DriveBits

Počet platných bitů (záporné číslo znamená číslo se znaménkem) v polohovém vstupu ActualPosition a výstupu Position   -64  63 -32

Long (I32)

DriveUnits

Vzdálenost v jednotkách měniče (pro transformaci polohy, vzdálenost odpovídající AxisUnits)

Double (F64)

AxisUnits

Vzdálenost v jednotkách osy (pro transformaci polohy, vzdálenost odpovídající DriveUnits)

Double (F64)

VelocityCalculate

když je zaškrtnuto, vstup ActualVelocity se neuplatňuje a rychlost je dopočítávána z rozdílu polohy (v aktuálním a předchozím kroku)

Bool

2023 © REX Controls s.r.o., www.rexygen.com