PYTHON – Volně programovatelný blok v jazyce Python

Symbol blokuPotřebná licence: REXLANG
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 PYTHON

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í ž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.

from PyRexExt import REX

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:

x = REX.u0.v

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:

REX.y0.v = 5

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:

x = REX.u0[0]

Příklad zápisu hodnoty do multidimenzionálního pole výstupu bloku:

REX.u0[1, 3] = 5

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

REX.Trace("abc")

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)

0 ....

bez omezení

1 ....

počet instrukcí za periodu, po přerušení interpreter pokračuje dál

2 ....

počet instrukcí za periodu, po přerušení interpretr začíná znovu

3 ....

počet milisekund za periodu, po přerušení interpreter pokračuje dál

4 ....

počet milisekund za periodu, po přerušení interpretr začíná znovu

p0..p15

Parametr

Any

Výstup

iE

Kód chyby

Error

i ....

kód chyby REXYGENu

iRes

Long (I32)

DONE

Příznak skončení vykonávání skriptu

Bool

y0..y15

Výstupní signál

Any

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