EPC – Blok pro spouštění externích programů
Symbol blokuPotřebná licence: ADVANCED
Popis funkce
Tento blok v okamžiku náběžné hrany
(offon) 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 |
|
|
|
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) |
|
|
|
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.
[Na začátek] [Výše] [Další]
2020 © REX Controls s.r.o., www.rexygen.com