LUA, LUAQUAD, LUAOCT, LUAHEXD – Volně programovatelné bloky v Lua
Symboly blokůPotřebná licence: REXLANG
Popis funkce
Standardní funkční bloky systému REXYGEN pokrývají většinu typických potřeb v
aplikacích řízení. Existují však situace, kdy je nutné (nebo vhodnější)
implementovat uživatelsky definovanou funkci. Blok REXLANG pokrývá
tento případ pro aplikace, kde je požadováno striktně real-time chování. Ve zbylých
případech lze použít blok LUA.
Blok LUA implementuje uživatelsky definovaný algoritmus napsaný ve skriptovacím jazyce Lua a ve srovnání s blokem REXLANG nabízí lepší uživatelskou zkušenost ve fázi vývoje algoritmu a umožňuje rozšíření funkční sady systému REXYGEN prostřednictvím různých knihoven třetích stran dostupných v prostředí Lua.
K dispozici jsou celkem čtyři varianty bloku LUA s různými počty vstupů a výstupů. Vstupy a výstupy bloku jsou indexovány od 0 do 15. Vstupy a výstupy bloku mohou být libovolného datového typu, který je podporován systémem REXYGEN.
Skriptovací jazyk
Skriptovací jazyk je standardní Lua v5.4 (viz [15]). Každý blok odkazuje na skript
uložený ve zdrojovém souboru *.lua nebo obsahuje skript přímo v parametru bloku.
Skript může volitelně obsahovat funkce s vyhrazenými názvy, které jsou poté
spouštěny systémem REXYGEN.
Funkce main() je spouštěna během běhu pravidelně. Kromě funkce main() je funkce init() spouštěna jednou při inicializaci a po resetu bloku. Funkce exit() je spouštěna jednou, když je řídicí algoritmus zastaven nebo před resetem bloku. Funkce parchange() je spouštěna při změně parametrů bloku v systému REXYGEN.
Dále je během kompilace konfigurace systému REXYGEN spuštěna funkce compile(). Tato funkce může být použita pro modifikaci tabulky REX.ctx, která je poté po kompilaci serializována a uložena v konfiguraci a později deserializována během inicializace bloku na cílovém zařízení. Tímto způsobem může skript vytvořit sdílený kontext mezi kompilačním prostředím a cílovým zařízením. Jelikož je skript do jisté míry spouštěn jak na hostitelském zařízení, tak na cílovém zařízení, jsou skriptu k dispozici položky REX.host a REX.target, které umožňují rozlišit mezi těmito dvěma prostředími.
Skripty na cílovém zařízení
Lua interpreter může načíst skript ze specifikovaného souboru nebo přímo z
řetězce. Pokud je parametr embedded nastaven na on, skript odkazovaný blokem v
parametru src je zabudován do konfigurace systému REXYGEN během kompilačního
procesu a bude načten během inicializace bloku, jakmile je konfigurace stažena a
spuštěna na cílovém zařízení. V opačném případě je skript načten ze
souboru na cílovém zařízení, který je opět specifikován parametrem
src.
API pro výměnu dat
Pro účely výměny dat mezi interpretem Lua a systémem REXYGEN byl vyvinut objekt
REX, který obsahuje API pro výměnu dat a je vkládán do každé instance interpreta
bloku LUA.
I/O objekty
Rozsah vstupních a výstupních objektů závisí na použitém bloku.
Nejkompaktnější blok LUA obsahuje 2 vstupy a 2 výstupy, LUAQUAD 4 vstupy a 4
výstupy, LUAOCT 8 vstupů a 8 výstupů a největší blok LUAHEXD 16 vstupů a 16
výstupů.
-
REX.u0 - REX.u15
-
– objekty reprezentující vstupy bloku v prostředí Lua
-
REX.p0 - REX.p15
-
– objekty reprezentující parametry bloku v prostředí Lua
-
REX.y0 - REX.y15
-
– objekty reprezentující výstupy bloku v prostředí Lua
Přístup k hodnotám
I/O objekty musí mít specifikován svůj datový typ během kompilace konfigurace
systému REXYGEN. Výchozí datový typ je double, ale lze jej změnit pomocí funkce
type().
Příklad nastavení datového typu I/O bloku:
REX.y0.type("string")
Všechny I/O objekty obsahují funkci v(), která provádí konverzi z datových typů systému REXYGEN do datových typů jazyka Lua. Hodnota pak může být uložena do proměnných a použita v algoritmu bloku.
Příklad čtení hodnoty vstupu bloku:
local myU0 = REX.u(0)
local x = myU0.v()
Nastavení hodnoty REXYGEN ze skriptu Lua lze provést funkcí setV(), která provádí konverzi z datových typů Lua do datových typů REXYGEN a exportuje hodnotu do odpovídajícího výstupu/parametru bloku.
Příklad zápisu hodnoty na výstup bloku:
local myY0 = REX.y(0)
myY0.setV(42)
Pole
Poli lze manipulovat prostřednictvím funkce v(), ale přímé konverze mezi poli
systému REXYGEN a tabulkami prostředí jazyka Lua nejsou paměťově efektivní.
Kromě toho vstupní objekty podporují přímý přístup k hodnotám pole
systému REXYGEN připojeného ke vstupu bloku pomocí funkcí arr() a
setArr().
Příklad čtení a zápisu hodnoty vstupu bloku pro matici:
REX.u0.setArr(0, 0, 42)
Externí položky
Objekt REX obsahuje funkci Item(), která vrací odkaz na externí položku
systému REXYGEN na základě řetězce připojení specifikovaného v parametru
funkce.
Příklad vytvoření odkazu na externí položku a nastavení její hodnoty:
cns.setV("abc")
Trasování
Objekt REX obsahuje funkce Trace, TraceError, TraceWarning, TraceVerbose a TraceInfo,
které lze použít pro zápis zpráv do systémového logu REXYGEN.
Příklad zápisu zprávy:
Další funkce
REX.RexDataPath() – RexDataPath() je funkce, která vrací cestu ke složce s daty
systému REXYGEN na dané platformě. To může být užitečné pro psaní
platformově nezávislého kódu, který vyžaduje přístup k souborovému systému
pomocí absolutních cest.
Tento blok nepropaguje kvalitu signálu. Více informací je uvedeno v sekci 1.4.
Vstup
HLD | Pozastavení | Bool |
RESET | Reset bloku | Bool |
u0..u15 | Vstupní signál | Any |
Parametr
src | Jméno souboru se skriptem nebo samotný skript program.lua | String |
embedded | Uložení skriptu do programu exekutivy on | Bool |
limit | Omezení vykonávání Lua interpretru na periodu 0 | Long (I32) |
p0..p15 | Parametr | Any |
Výstup
iE | Kód chyby | Error |
|
|
|
iRes |
| Long (I32) |
y0..y15 | Výstupní signál | Any |
[Na začátek] [Výše] [Další]
2024 © REX Controls s.r.o., www.rexygen.com