[Výše]
PYTHON – Volně programovatelný blok v jazyce Python
Symbol blokuPotřebná licence: REXLANG
Popis funkce
V některých případech se může stát, že je do řídícího algoritmu nutné implementovat funkci, kterou nelze efektivně vytvořit z dostupné množiny bloků. Pro takový účel byl vyvinut blok REXLANG, který je vhodný zejména pro aplikace se striktními požadavky na běh programu v reálném čase. V opačném případě lze jako alternativu využít blok PYTHON.
Blok PYTHON implementuje algoritmus definovaný skriptovacím jazykem Python. V porovnání s blokem REXLANG nabízí snazší vývoj algoritmu a umožňuje rozšířit škálu funkcí poskytovaných systémem REXYGEN prostřednictvím balíčků a knihoven dostupných v ekosystému jazyka Python.
Upozornění: blok PYTHON je určen pro prototypování a experimentální aplikace, proto prosím zvažte velmi pečlivě jeho použití ve vaší aplikaci. PYTHON je experimentální blok a vždy bude. Existují situace, které mohou vést k neočekávanému chování nebo dokonce zamrznutí exekutivy. Balíčky mohou být špatně napsány nebo mohou mít špatně implementovanou reinicializaci a jejich použití může vést až k pádu. Pro tento blok poskytujeme pouze velmi omezenou podporu.
Skriptovací jazyk
Skriptovacím jazykem bloku je standardní Python 3 (see [5]). Každý blok se
odkazuje na skript napsaný v *.py zdrojovém souboru. Zdrojový kód může
volitelně obsahovat funkce s danými jmény, které jsou spouštěny systémem
REXYGEN.
Funkce main() je spouštěna periodicky za běhu systému REXYGEN. Krom funkce main() jsou spouštěny funkce init() při startu řídicího algoritmu a po resetu bloku, funkce exit() při skončení řídicího algoritmu a před resetem bloku a funkce parchange() při změně hodnot parametrů bloku.
Scripty na cílovém zařízení
Standardní interpretr umožňuje načítání modulů/skriptů z různých lokací na
cílovém zařízení. Blok PYTHON se může odkazovat na jakýkoliv skript dostupný
standardnímu interpretru a navíc umožňuje načítání skriptů z adresáře
/rex/scripts/python. Uživatelské skripty mohou být nahrávány přímo do této
složky a nebo lze nastavit parametr embedded na hodnotu on. To způsobí, že referovaný
skript je vložen do exekutivy při kompilaci a je následně dočasně extrahován do
složky /rex/scripts/python/embedded při inicializaci bloku po nahrání a spuštění
exekutivy na cílovém zařízení.
API pro výměnu dat
Pro výměnu dat mezi interpretrem jazyka Python a systémem REXYGEN byl vyvinut
modul PyRexExt v podobě nativního rozšíření interpretru. Modul obsahuje objekt
REX, který obsluhuje veškeré operace výměny dat. Pro inicializaci API lze použít
následující úryvek kódu na začátku skriptu.
I/O objekty
-
REX.u0 - REX.u15
-
– objekty reprezentující vstupy bloku v prostředí jazyka Python
-
REX.p0 - REX.p15
-
– objekty reprezentující parametry bloku v prostředí jazyka Python
-
REX.y0 - REX.y15
-
– objekty reprezentující výstupy bloku v prostředí jazyka Python
Čtení a zápis hodnot
Všechny I/O objekty obsahují atribut v. Čtení atributu v provádí konverzi z
datových typů systému REXYGEN na datové typy jazyka Python. Vrácena hodnota pak
může být uložena do proměnné a použita v algoritmu bloku. Pole systému REXYGEN
jsou konvertovány na seznam hodnot v případě jednodimenzionálního pole, nebo na
seznam seznamů v případě multidimenzionálního pole.
Příklad čtení hodnoty vstupu bloku:
Zápis atributu v naopak provádí konverzi z datových typů jazyka Python na datové typy systému REXYGEN a zápis hodnoty na příslušný výstup/parametr bloku.
Příklad zápisu hodnoty na výstup bloku:
Pole
Objekty vstupů a výstupů obsahují atribut size. Tento atribut je jen pro čtení a vrací
objet typu tuple s počtem řádek a počtem sloupců.
S poli lze manipulovat prostřednictvím atributu v, ale tento přístup není příliš efektivní kvůli konverzi mezi poli a seznamy jazyk Python. Proto objekty vstupů a výstupů podporují operátor indexace [], který provádí konverzi pouze dané položky v poli.
Příklad čtení vstupu bloku pro jednodimenzionální pole:
Příklad zápisu hodnoty do multidimenzionálního pole výstupu bloku:
Externí položky
Objekt REX obsahuje metodu Item, která vrací handle na požadovanou externí položku
systému REXYGEN specifikovanou přípojným řetězcem předaným v prvním
parametru metody.
Příklad vytvoření externí položky a nastavení její hodnoty:
cns.v = "abc"
Trasování
Objekt REX obsahuje metody Trace, TraceError, TraceWarning, TraceVerbose and
TraceInfo, které mohou být použity pro zápis zpráv do logu systému REXYGEN.
Každá zpráva má k sobě připojený stacktrace.
Příklad logování zprávy:
Dodatečné vlastnosti
REX.RexDataPath – RexDataPath je konstantní řetězec obsahující cestu k datovému
adresáři systému REX na dané platformě. Tato vlastnost může být užitečné při
psaní platformově nezávislého kódu manipulujícímu se souborovým systém
pomocí absolutních cest.
Vstupy
HLD | Hold – Algoritmus bloku není spuštěn při nastavení vstupu na on. | Bool |
RESET | Náběžná hrana resetuje blok. Blok je opět inicializován, takže všechny globální proměnné jsou uvolněny a je zavolána funkce init(). | Bool |
u0..u15 | Vstupní signály, které jsou přístupné ve skriptu. | Unknown |
Výstupy
iE | Chybový kód. | Error |
|
|
|
iRes | Výstupní kód exekuce bloku. | Long (I32) |
y0..y15 | Výstupní signály, které jsou dostupné ve skriptu. | Unknown |
Parametry
srcname | Jméno zdrojového souboru program.py | String |
embedded | Vestavění skriptu on | Bool |
p0..p15 | Parametry bloku, které jsou dostupné ve skriptu. | Unknown |
Definování datových typů
Pro správnou výměnu dat mezi systémem REXYGEN a prostředím jazyka Python
musí být striktně definované datové typy vstupních signálů u0..u15, výstupních
signálů y0..y15 a parametrů p0..p15.
Z toho důvodu musí být vytvořen konfigurační soubor pro každý skript se stejným názvem a s přidanou příponou .cfg (e.g. program.py.cfg). Pokud tento soubor chybí, je vytvořen při kompilaci projektu s tím, že všechny datové vstupy jsou nastaveny na defaultní hodnotu double. Nepředpokládá se, že by tento soubor byl editován přímo. Ke konfiguraci datových typů lze použít editor REXYGEN studia specifický pro blok PYTHON. Pro vstupy výstupy a parametry jsou dostupné datové typy boolean, uint8, int16, uint16, int32, uint32, int64, float, double, string a pro vstupy a výstupy jsou navíc dostupné datové typy array, numpy a image.
Pro tyto datové typy numpy a image musí být na cílovém zařízení nainstalován balíček numpy. Pro vstupy typu numpy je předpokládáno, že vstupní signál je typu pole, které je následně překonvertováno na nativní reprezentaci objektu numpy. Pro vstupy typu image je předpokládáno, že vstupní signál je datového typu image z modulu RexVision, který je rovněž překonvertován na nativní reprezentaci typu numpy a může tedy být přímo použitý s OpenCV balíčkem jazyka Python.
Pro výstupy datového typu numpy je předpokládáno, že budou nastaveny ve skriptu pomocí objektu typu numpy, který je následně překonvertován na běžné pole. Pro výstupy datového typu image je předpokládáno, že budou nastaveny ve skriptu pomocí objektu typu numpy, který je následně překonvertován na objekt typu image definovaný modulem RexVision.
Příklad definice datových typů
Následující příklad ukazuje zkrácenou verzi souboru ve formátu JSON, který
popisuje datové typy vstupů, výstupů a parametrů bloku.
"types": {
"in": [
{
"idx": 0,
"type": "double"
},
. . .
{
"idx": 15,
"type": "double"
}
],
"param": [
{
"idx": 0,
"type": "double"
},
. . .
{
"idx": 15,
"type": "double"
}
],
"out": [
{
"idx": 0,
"type": "double"
},
. . .
{
"idx": 15,
"type": "double"
}
]
}
}
Příklad skriptu v jazyce Python
Následující příklad ukazuje jednoduchý zdrojový kód v jazyce Python, který
sčítá dva vstupní signály a dva uživatelem definované parametry.
def main():
REX.y0.v = REX.u0.v + REX.u1.v
REX.y1.v = REX.p0.v + REX.p1.v
return
Instalace - Debian
Prostředí jazyka Python by mělo být korektně nastaveno po instalaci debian
balíčku PythonBlk_T. Pro instalaci s volitelnými balíčky numpy a OpenCV je třeba
spustit následující příkazy z terminálu.
sudo apt install python3-numpy python3-opencv
Instalace - Windows
Pro instalaci správné verze prostředí Python je doporučeno stáhnout a nainstalovat
64-bitovou verzi z oficiálního repozitáře (https://www.python.org/ftp/python/3.7.3/).
Při instalaci je vhodné se ujistit, že je zvolena možnost instalace programu pip a že
cesta k binárním souborům interpretru bude přidána do systémové proměnné
PATH.
Pro instalaci volitelných balíčků numpy a OpenCV je třeba spustit následující příkazy z příkazové řádky.
pip install opencv-python
Omezení
Vzhledem k omezením zakořeněným v implementaci standardního interpretru jazyka
Python není doporučeno používat více instancí bloku PYTHON na rozdílných
úrovních exekutivy. Takové použití může vést k nepředvídatelnému chování
a nestabilitě programu RexCore.
[Na začátek] [Výše]
2020 © REX Controls s.r.o., www.rexygen.com