EPC – Blok pro spouštění externích programů

Symbol blokuPotřebná licence: ADVANCED
PIC

Popis funkce
Tento blok v okamžiku náběžné hrany (off on) na vstupu EXEC spustí externí program, jehož název a parametry jsou uvedeny v parametru cmd. Zápis příkazu je naprosto shodný, jako by se psal na příkazovou řádku operačního systému.

Externímu programu lze předat hodnoty ze systému REXYGEN pomocí souborů. Formát těchto souborů určuje parametr format. V současnosti podporované formáty jsou všechny textové a velice jednoduché, takže je možné je snadno načíst do téměř libovolného programu. Například do MATLABu se soubor načte příkazem
hodnoty=load(’-ASCII’, ’epc_uVec1’);
do SCILABu příkazem
hodnoty=read(’/tmp/epc_uVec1’,-1,32);
Název souboru, počet sloupců, jméno matice atd. je samozřejmě potřeba zvolit podle konkrétní aplikace. Hodnoty z externího programu zpět do systému REXYGEN se předávají analogickým způsobem (tj. opět pomocí souborů ve stejném formátu).

Blok rozlišuje dva režimy. V základním režimu je v okamžiku náběžné hrany na vstupu EXEC nejprve načtena aktuální hodnota na vstupech, uložena do souboru (vždy hodnoty z i-tého vstupního vektoru uVec<i> do i-tého souboru v parametru ifns). Ve vzorkovacím režimu jsou data ze vstupních vektorů ukládána do souborů v každé periodě algoritmu. V obou případech platí, že hodnoty vstupů z jednoho časového okamžiku jsou v jedné řádce souboru.

Analogicky jsou kopírována data z výstupních souborů na výstupy bloku (vždy jedna řádka z i-tého souboru v parametru ofns do i-tého výstupního vektoru yVec<i>).

Čísla vstupů, které pracují ve vzorkovacím režimu jsou uvedena v parametru sl (jednotlivá čísla se oddělují čárkou). Výstupy jsou vždy ve vzorkovacím režimu, přičemž pokud v souboru nejsou další data (řádky), je ponechána předchozí hodnota. Kopírování vstupů do souboru je možné zablokovat (pozastavit) vstupem DSI; kopírování dat ze souborů na výstupy bloku je možné zablokovat (pozastavit) vstupem DSO.

Vektorové vstupy a výstupy bloku umožňují jednoduše uložit do jednoho souboru více hodnot (v každém kroku). Pro převod více jednoduchých signálů na vektor slouží blok RTOV. Tyto bloky lze řetězit, takže je možné vytvořit vektor téměř libovolné velikosti. Obdobně pro převod vektoru na jednoduché signály slouží blok VTOR, přičemž jeho vícenásobným použitím je možné získat hodnoty z libovolně velkého vektoru.

Vstupy

uVec1..uVec8

Vstupní vektorové signály

Reference

EXEC

Náběžná hrana spouští externí program

Bool

RESET

Reset bloku (smaže vstupní i výstupní soubory a zastaví externí program)

Bool

DSI

Pozastavení vzorkování na vstupech

Bool

DSO

Pozastavení vzorkování na výstupech

Bool

Výstupy

yVec1..yVec8

Výstupní vektorové signály

Reference

DONE

Příznak skončení externího programu

Bool

BUSY

Příznak běhu externího programu

Bool

ERR

Příznak chyby

Bool

errID

Kód chyby

Error

i ....

obecná chyba systému REXYGEN

res

Návratový kód externího programu

Long (I32)

icnt

Aktuální číslo vzorku na vstupech

Long (I32)

ocnt

Aktuální číslo vzorku na výstupech

Long (I32)

Parametry

cmd

Externí program

String

ifns

Vstupní soubory (oddělené středníkem)  epc_uVec1;epc_uVec2

String

ofns

Výstupní soubory (oddělené středníkem)  epc_yVec1;epc_yVec2

String

sl

Seznam čísel vzorkovacích vstupů. Zadává se ve tvaru např. 1,3..5,8. Programy třetích stran (Simulink, OPC klienti atd.) pracují s celým číslem, které je bitovou maskou – pro uvedený příklad tedy 157, binárně 10011101.   0  255 85

Long (I32)

ifm

Maximální počet vzorků ve vstupním souboru  10000

Long (I32)

format

Formát vstupních a výstupních souborů  1

Long (I32)

1 ....

textový (pouze hodnoty oddělené mezerou)

2 ....

CSV (desetinná tečka a čárky)

3 ....

CSV (desetinná čárka a středníky)

nmax

Maximální délka výstupních vektorů   2  1000000 100

Long (I32)

Poznámky

  • Spuštěný skript má stejnou prioritu, jako task, který ji spustil. Ta je (implicitně) hodně velká (v některých případech dokonce vyšší, než tasky zpracovávající interrupty v kernelu operačního systému). Pokud je toto nežádoucí (tj. zejména pokud externí skript trvá dlouho), je potřeba prioritu externího programu snížit. V Linuxu se to provede tak, že příkaz napíšeme ve tvaru chrt -o 0 extprg.sh, kde extprg.sh je skript/program, který chceme spustit.
  • Z implementačních důvodů je počet výstupních signálů omezen a je určen parametrem nmax. Parametr umožňuje zadat i hodně velká čísla, ale pro některé platformy nemusí být k dispozici dostatek paměti. Volte proto vždy co nejmenší číslo, které (s malou rezervou) dostačuje aplikaci.
  • Jména souborů je potřeba psát tak, jak to vyžaduje použitý operační systém na cílové platformě. Nicméně pro vyhnutí se nečekaným potížím je doporučeno používat v názvu souboru jen písmena anglické abecedy, číslice a podtržítko. Také pozor na velikost písmen (Linux ji rozlišuje). Dále je potřeba zvážit, zda zadávat soubory s absolutní cestou nebo relativně k aktuálnímu adresáři. Zejména při vývoji aplikace se může aktuální adresář různě měnit a externí aplikace soubory nenajde.
  • Z implementačních důvodů blok vytváří ještě kopie souborů uvedených v parametrech ifns a ofns. Tyto kopie mají v názvu navíc znak podtržítko.
  • Parametry ifns a ofns určují umístění souborů. Cesta je relativní a je vztažena k adresáři s datovými soubory runtime jádra systému REXYGEN na cílovém zařízení. Z důvodu výkonnosti je vhodné v tomto adresáři vytvořit symbolický link na souborový systém v RAM paměti. Na druhou stranu, pro dlouhé řady je výhodné mít soubor na disku, protože blok v případě výpadku řídicího systému po jeho opětovném spuštění naváže na předchozí data.
  • Pro volání některých funkcí operačního systému lze použít i blok OSCALL.

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