RM_AxisSpline – Interpolace požadované polohy (rychlosti, zrychlení)
Symbol blokuPotřebná licence: MOTION CONTROL
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. Podporované metody jsou:
- linear: Poloha interpolována lineárně, rychlost jako derivace polohy, zrychlení 0 (tj. rychlost je po částech konstantní funkce se skoky).
- 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.
- 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.
- cubic aproximation (B-spline): 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.
- quintic aproximation (B-spline): 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.
- 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.
- all cubic: Poloha i rychlost jsou interpolovány polynomem 3. řádu navzájem nezávisle, tj. rychlost neodpovídá přesně derivaci polohy.
- rezervováno pro pozdější použití.
- rezervováno pro pozdější použití.
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.axisRef–uAxis nebo yAxis–uAxis) | 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.axisRef–uAxis nebo yAxis–uAxis) | 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) |
|
|
|
ControlWord | Řídící slovo servoměniče dle CiA402 standardu | Long (I32) |
Parametry
InterpolationMode | Algoritmus pro interpolaci 9 | Long (I32) |
|
|
|
ReverseLimit | Negace významu vstupů LIMN, LIMZ a LIMP | Bool |
InterpolationMode | Režim řízení servoměniče 9 | Long (I32) |
|
|
|
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 |
[Předchozí] [Na začátek] [Výše] [Další]
2024 © REX Controls s.r.o., www.rexygen.com