LUA, LUAQUAD, LUAOCT, LUAHEXD – Volně programovatelné bloky v Lua

Symboly blokůPotřebná licence: REXLANG
Qt SVG Document Exported by REXYGEN Studio HLD RESET u0 u1 iE iRes y0 y1 LUA Qt SVG Document Exported by REXYGEN Studio HLD RESET u0 u1 u2 u3 iE iRes y0 y1 y2 y3 LUAQUAD Qt SVG Document Exported by REXYGEN Studio HLD RESET u0 u1 u2 u3 u4 u5 u6 u7 iE iRes y0 y1 y2 y3 y4 y5 y6 y7 LUAOCT Qt SVG Document Exported by REXYGEN Studio HLD RESET u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11 u12 u13 u14 u15 iE iRes y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 LUAHEXD

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.u0.type("int")  
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 x = REX.u0.v()  
 
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:

REX.y0.setV(42)  
 
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:

local x = REX.u0.arr(0, 0)  
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:

local cns = REX.Item("myproject_task.CNS:scv")  
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:

REX.Trace("abc")

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

i ....

kód chyby REXYGENu

iRes

Long (I32)

y0..y15

Výstupní signál

Any

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