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 [16]). 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.
Skripty 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 REXYGEN 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 REXYGEN 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.
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
srcname | Jméno souboru se skriptem program.py | String |
embedded | Uložení skriptu do programu exekutivy on | Bool |
limit | Omezení vykonávání Python interpretru na periodu 1 10000 | Long (I32) |
limitMode | Režim omezení vykonávání Python interpretru | Long (I32) |
|
|
|
p0..p15 | Parametr | Any |
Výstup
iE | Kód chyby | Error |
|
|
|
iRes |
| Long (I32) |
DONE | Příznak skončení vykonávání skriptu | Bool |
y0..y15 | Výstupní signál | Any |
[Předchozí] [Na začátek] [Výše]
2024 © REX Controls s.r.o., www.rexygen.com