[…] END_SECTION [<[parametr]> <[parametr]> …] READ … NEXT [ …]
§ název – označení sekce (musí být jedinečné). Speciální označení je „INIT“ – sekce tohoto jména se provede jako první a „FAILED“ – sekce tohoto jména se provede při havárii měření a měla by obsahovat především příkazy pro vypnutí zdrojů napětí a proudu. § příkaz – jednotlivý příkaz (viz 3. Abecední seznam příkazů)
2. 4 VARIABLES Část sloužící k definování proměnných, které nemají přímou souvislost s jednotlivými přístroji případně měřenými a vypočítávanými veličinami, ale jsou potřebné pro běh skriptu úlohy. Syntaxe: VARIABLES <jméno proměnné> […] END_VARIABLES
§ jméno proměnné - označení proměnné, pod kterým bude dostupná její hodnota
3. Abecední seznam příkazů 3. 1 ASLEEP_SET Příkaz definující začátek měření asynchronní časové prodlevy. Provedením tohoto příkazu se započne měřit časový interval aniž by bylo pozastaveno provádění skriptu. Skript je pozastaven do doby vypršení definovaného časového intervalu příkazem ASLEEP_WAIT. Syntaxe: ASLEEP_SET [
(zjednodušený zápis)
§ výraz – velikost časového intervalu v milisekundách
3. 2 ASLEEP_WAIT Příkaz pozastavující běh skriptu do doby vypršení časového intervalu definovaného příkazem ASLEEP_SET. Syntaxe: ASLEEP_WAIT
-3-
3. 3 BREAK Příkaz pro ukončení cyklu. Jeho provedení způsobí předčasné ukončení cyklu FOR nebo WHILE. Skript bude pokračovat dalším příkazem následujícím za příkazem NEXT právě prováděného cyklu. Syntaxe: BREAK
3. 4 BREAKPOINT Příkaz sloužicí k ladění skriptu úlohy. Na tomto příkazu se provádění úlohy zastaví a interpret čeká na povolení pokračování od uživatele. Název breakpointu se zapíše do log souboru – tím lze poznat, v jaké části skriptu se vykonávání přerušilo. Syntaxe: BREAKPOINT [
§ název – označení breakpointu
3. 5 COMPLETE Příkaz pro synchronizaci běhu úlohy. Na tomto příkazu se vykonávání skriptu zastaví do doby, než jsou dokončeny všechny rozpracované příkazy vykonávané jednotlivými měřícími přístroji. Doporučuje se tento příkaz provést na konci skriptu jako poslední příkaz. Syntaxe: COMPLETE
3. 6 CONTINUE Příkaz pro předčasné ukončení iterace cyklu FOR nebo WHILE. Po provedení příkazu CONTINUE bude skript pokračovat další iterací cyklu (včetně přiřazení nové hodnoty do proměnné cyklu podle výrazu „iterace“ u cyklů typu FOR). Syntaxe: CONTINUE
3. 7 DDO Příkaz pro vykonání příkazu měřícího přístroje. Označenému přístroji je předán zadaný text, jako příkaz. Do příkazu lze vkládat hodnoty výrazů jako parametry. Každý výraz, který má být vyhodnocen je v hranatých závorkách a bezprostředně mu předchází znak „$“. Pokud znaku „$“ předchází znak „\“, pak je speciální význam znaku „$“ ignorován. Rovněž lze do textu příkazu zapisovat libovolné znaky pomocí jejich hexadecimálních hodnot zapsaných jako dva znaky za znak „\“. Např. „\0D“. (blíže viz A. Vzorové skripty) Syntaxe: DDO
[$<[výraz]>] >
§ přístroj – označení přístroje, který má daný příkaz vykonat § příkaz – text, který je zapsán na přístoj jako příkaz
-4-
§ výraz – znakem „$“ předcházený výraz, jehož číselný výsledek bude vložen do textu příkazu jako parametr
3. 8 DO Příkaz pro vykonání příkazu měřícího přístroje. Označenému přístroji je předán příkaz, jehož jméno je uvedeno jako příkaz. Tento příkaz musí být definován v souboru předdefinovaných příkazů pro daný přístroj. Parametry jsou výrazy, které jsou v uvedeném pořadí doplněny do textu příkazu na označená místa. Počet těchto parametrů se musí shodovat s počtem uvedených výrazů. Syntaxe: DO
§ přístroj – označení přístroje, který má daný příkaz vykonat § příkaz – označení příkazu, pod kterým je definován text příkazu v souboru definovaných příkazů pro daný přístroj § parametr – výraz, který bude doplněn na označené místo v textu příkazu
3. 9 DQUERY Obdoba příkazu DDO, bez automatického vyhodnocení čekání na odpověď přístroje. Zadaný příkaz se předpokládá takový, že bude vrácena odpověď přístroje. Označenému přístroji je předán zadaný text, jako příkaz. Do příkazu lze vkládat hodnoty výrazů jako parametry. Každý výraz, který má být vyhodnocen je v hranatých závorkách a bezprostředně mu předchází znak „$“. Pokud znaku „$“ předchází znak „\“, pak je speciální význam znaku „$“ ignorován. Rovněž lze do textu příkazu zapisovat libovolné znaky pomocí jejich hexadecimálních hodnot zapsaných jako dva znaky za znak „\“. Např. „\0D“. (blíže viz A. Vzorové skripty) Syntaxe: DQUERY
[$<[výraz]>] > [$<[výraz]>] >
(zjednodušený zápis)
§ přístroj – označení přístroje, který má daný příkaz vykonat § příkaz – text, který je zapsán na přístoj jako příkaz § výraz – znakem „$“ předcházený výraz, jehož číselný výsledek bude vložen do textu příkazu jako parametr
3. 10 DREAD Doplňkový příkaz příkazů DSEND a DQUERY. Příkaz neposílá přístroji žádný text, pouze čeká na odpověď přístroje, která je reakcí na jinou událost (jiný příkaz). Syntaxe: DREAD
(zjednodušený zápis)
§ přístroj – označení přístroje, který má daný příkaz vykonat
3. 11 DSEND Obdoba příkazu DDO, bez automatického vyhodnocení čekání na odpověď přístroje. Zadaný příkaz se předpokládá takový, že nebude vrácena odpověď přístroje. Označenému přístroji je předán zadaný text, jako příkaz. Do příkazu lze vkládat hodnoty výrazů jako parametry. Každý výraz, který má být vyhodnocen je v hranatých závorkách a
-5-
bezprostředně mu předchází znak „$“. Pokud znaku „$“ předchází znak „\“, pak je speciální význam znaku „$“ ignorován. Rovněž lze do textu příkazu zapisovat libovolné znaky pomocí jejich hexadecimálních hodnot zapsaných jako dva znaky za znak „\“. Např. „\0D“. (blíže viz A. Vzorové skripty) Syntaxe: DSEND
[$<[výraz]>] > [$<[výraz]>] >
(zjednodušený zápis)
§ přístroj – označení přístroje, který má daný příkaz vykonat § příkaz – text, který je zapsán na přístoj jako příkaz § výraz – znakem „$“ předcházený výraz, jehož číselný výsledek bude vložen do textu příkazu jako parametr
3. 12 FAILON Příkaz definující důvod předčasného ukončení běhu skriptu při výskytu chyby. Je možné určit ukončení skriptu pokud dojde k chybě během komunikace s přístroji nebo je některý příkaz přístrojem odmítnut. Je možné definovat ukončení při výskytu obou událostí nebo předčasné ukončení skriptu zakázat. Syntaxe: FAILON [NEVER | CMDERR | IOERR | ALLERR]
§ Pokud není uvedena žádná z těchto hodnot, je nastavena úroveň NEVER.
3. 13 FOR Příkaz vykonávající cyklus typu FOR nebo WHILE (podle způsobu zápisu). Slouží k definování cyklů. Pokud je definován pouze výraz podmíky, jedná se o cyklus typu WHILE. Pokud je definována proměnná cyklu, musí být definována její inicializační hodnota. Výraz přiřazovaný do proměnné při každé iteraci je nepovinný, u cyklu typu WHILE nesmí být použit. Modifikátor „NOWAIT“ způsobí, že příkaz nebude čekat na dokončení příkazů na všech přístrojích, takže hodnoty proměnných při vyhodnocování výrazů nemusí odpovídat výsledkům posledního příkazu přístroje. Syntaxe: FOR [NOWAIT] [<jméno prom.>
§ jméno prom. – jméno proměnné cyklu. Pokud je uvedeno, bude se jednat o cyklus FOR § inicializace – výraz, na jehož hodnotu je nastavena proměnná cyklu při prvním průchodu. Inicializace je povinná u cyklu typu FOR, nesmí být uvedena u cyklu typu WHILE. § podmínka – výraz, který definuje, zda má cyklus pokračovat. Pokud je výraz pravdivý (má nenulovou hodnotu), bude cylus pokračovat další iterací. § iterace – výraz, jehož hodnota je přiřazena do proměnné cyklu při každém dalším průchodu cyklem. Nesmí být uveden u cyklu typu WHILE, u cyklu typu FOR je nepovinný.
3. 14 GOTO Příkaz skoku na jiný příkaz. -6-
Provede předání řízení skriptu na jiný příkaz v uvedené sekci. Pokud není uvedeno žádné návěští, je příslušná sekce prováděna od začátku. Syntaxe: GOTO <jméno sekce>[.<jméno návěští>]
§ jméno sekce – označení sekce, do které se má předat řízení § jméno návěští – označení místa v sekci, odkud se má v provádění skriptu pokračovat
3. 15 GOSUB Příkaz skoku na podprogram. Provede předání řízení skriptu na jiný příkaz v uvedené sekci. Pokud není uvedeno žádné návěští, je příslušná sekce prováděna od začátku. Po provedení příkazu RETURN nebo skončení sekce, provede skok zpět na místo volání. Syntaxe: GOSUB <jméno sekce>[.<jméno návěští>]
§ jméno sekce – označení sekce, do které se má předat řízení § jméno návěští – označení místa v sekci, odkud se má v provádění skriptu pokračovat
3. 16 GPIB_GET Příkaz pro provedení GroupExecutionTriggeru. Lze použít pouze na přístroje připojené k jedné sběrnici (interfaceu) typu GPIB. Příkaz provede naadresování uvedených přístrojů a vykonání příkazu GET. Konfigurování přístrojů a čtení výsledků musí skript obsloužit jinými příkazy (DO nebo DDO). Syntaxe: GPIB_GET
§ interface – označení interfaceu sběrnice, ke kterému jsou připojeny přístroje, na něž má být poslán příkaz GET. Interface musí být typu GPIB. § přístroj – označení přístroje, na který má poslán příkaz GET. Přístroje musí být připojeny k interfaceu interface.
3. 17 IF Příkaz větvení programu. Pokud je podmínka splněna, jsou provedeny příkazy pseudo-sekce následující bezprostředně za IF příkazem. Pokud není, jsou provedeny příkazy pseudo-sekce uvedené za označením ELSE (pokud je tato část uvedena). Modifikátor „NOWAIT“ způsobí, že příkaz nebude čekat na dokončení příkazů na všech přístrojích, takže hodnoty proměnných nemusí odpovídat výsledkům posledního příkazu přístroje. Syntaxe: IF [NOWAIT] <[výraz]> … [ELSE] […] ENDIF
§ výraz - výraz, definující podmínku. Podmínka je vyhodnocena jako pravdivá, pokud má výraz nenulovou hodnotu.
-7-
3. 18 LET Příkaz přiřazení. Příkaz přiřadí do uvedené proměnné výsledek uvedeného výrazu. Modifikátor „NOWAIT“ způsobí, že příkaz nebude čekat na dokončení příkazů na všech přístrojích, takže hodnoty proměnných nemusí odpovídat výsledkům posledního příkazu přístroje. Syntaxe: LET [NOWAIT] <jméno proměnné> <[výraz]>
§ jméno proměnné - označení proměnné, do které se má uložit výsledek výrazu § výraz - výraz, definující výpočet
3. 19 LOG Příkaz zápisu výsledků. Příkaz provede zápis výsledků do souboru výsledků úlohy. Jsou zaznamenány hodnoty všech proměnných (definovaných ve všech sekcích: VARIABLES, INSTRUMENTS, CALCULATORS). Nejsou však zaznamenány hodnoty těch proměnných, před jejichž názvem byl při definici napsán znak „_“. Dále je zaznamenán čas provedení tohoto příkazu. Modifikátor „NOWAIT“ způsobí, že příkaz nebude čekat na dokončení příkazů na všech přístrojích, takže hodnoty proměnných nemusí odpovídat výsledkům posledního příkazu přístroje. Syntaxe: LOG [NOWAIT]
3. 20 LOGLEVEL Příkaz definující úroveň závažnosti ladících hlášení, která budou zapisována do log souboru úlohy. Tuto úroveň lze v průběhu běhu skriptu libovolně měnit. Syntaxe: LOGLEVEL [
§ výraz - výraz, definující úroveň hlášení. Pokud výraz není uveden, je nastavena základní úroveň 5. Význam jednotlivých úrovní je: § 0 = fatální chyby § 1 = chyby (a vše předchozí) § 2 = varování (a vše předchozí) § 3 = komunikace (a vše předchozí) § 4 = ladící hlášení (a vše předchozí) § 5 = podrobnější ladící hlášení (úroveň 1) (a vše předchozí) § 6 = podrobnější ladící hlášení (úroveň 2) (a vše předchozí) § 7 = podrobnější ladící hlášení (úroveň 3) (a vše předchozí) § 8 = informační hlášení (a vše předchozí)
3. 21 PRECISION Příkaz pro určení počtu desetinných míst, na která se mají zaznamenávat změřené hodnoty do souboru výsledků úlohy. Tuto přesnost lze v průběhu skriptu libovolně měnit. Syntaxe: PRECISION [
-8-
§ výraz - výraz, definující počet desetinných míst. Pokud není uveden je nastavena základní hodnota 7 desetinných míst (tj. 8 platných číslic – standardní formát „float“).
3. 22 RETURN Příkaz návratu z podprogramu. Příkaz provede skok na místo ve skriptu, odkud byl vyvolán podprogram pomocí příkazu GOSUB. Pokud je proveden na nejvyšší úrovni, je měření ukončeno. Příkaz RETURN je automaticky proveden, pokud běh skriptu dospěje na konec některé sekce. Syntaxe: RETURN
3. 23 SLEEP Příkaz čekání. Příkaz provede pozastavení provádění skriptu úlohy na uvedenou dobu v milisekundách. Syntaxe: SLEEP <[výraz]>
§ výraz – výraz výpočtu, jehož výsledek je doba čekání v milisekundách
3. 24 : LABEL Označení návěští. Pseudo-příkaz pro označení návěští, které může být uvedeno za tečkou u příkazů GOTO a GOSUB. Syntaxe: : <jméno návěští>
§ jméno návěští – označení návěští, musí být jediněčné v rámci dané sekce
-9-
4. Programovací techniky Základní pravidla pro psaní skriptu jsou následující: § Každý příkaz je psán na samostatný řádek. § Počet mezer (tabulátorů a podobných znaků) před a za příkazem není rozhodující. § Řádky začínající znakem „#“ jsou komentáře a jsou ignorovány. § Skript může obahovat libovolné množství prázdných řádků. § Matematické výrazy (a podmínky) se zapisují do hranatých závorek, vyjma definice výrazů v části CALCULATORS. § Příkazy nemohou stát ve skriptu samostatně mimo definované sekce. (Takové příkazy jsou ignorovány.)
4. 1 Vyhodnocování výrazů Výrazy mohou obsahovat operátory: unární +, +, -, *, /, % <, <=, >, >=, !=, <>, == &&, || ()
součet, rozdíl, součin, podíl, zbytek po dělení relační operátory logické AND a OR závorky k určení priority operací
Definované matematické funkce: § SQRT(x) – druhá odmocnina čísla x § POW(x,n) – n-tá mocnina čísla x (lze použít též pro výpočet n-té odmocniny pokud n=1/m, kde m je požadovaná odmocnina) § ABS(x) – absolutní hodnota čísla x § SIGN(x) – znaménko čísla x (=1 pokud x>0, =-1 pokud x<0, =0 pokud x=0) § CEIL(x) – zaokrouhlení čísla x vždy směrem dolů (lze použít k „normálnímu“ zaokrouhení, pokud provedeme CEIL(x+0.5) ) § SIN(x), COS(x), TAN(x), ASIN(x), ACOS(x), ATAN(x) – goniometrické funkce a funkce inverzní § ATAN2(y,x) – arctang (y/x), přičemž výsledek je upraven podle kvadrantu, kde se výsledný úhel nachází. § SINH(x), COSH(x), TANH(x), ASINH(x), ACOSH(x), ATANH(x) – hyperbolické funkce a funkce inverzní. § TODEG(x), TORAD(x) – převod čísla x z radiánů na stupně a ze stupňů na radiány. § EXP(x) – exponenciální funkce, e umocněno na x § LG(x) – dekadický logaritmus čísla x § LN(x) – přirozený logaritmus čísla x § LOG(x,a) – logaritmus čísla x o základu a § FACT(x) – faktoriál čísla x
-10-
Předdefinované konstanty: Značka Jméno Hodnota PI 3.141592654 π e e 2.718281828 µ0 MI0 12.566370614e-7 EPS0 8.854187817e-12 ε0 g ag 9.80665 mp mp 9.1093826e-31 me me 1.67262171e-27 mn mn 1.67492728e-27 Qe Qe 1.60217653e-19 NA NA 6.0221415e+23 F F 96485.3383 R R 8.314472 vc vc 299792458 k k 1.3806505e-23 h h 6.6260693e-34 SIGMA 5.670400e-8 σ KJ KJ 483597.879e+9 FI0 2.06783372e-15 ϕ0
Jednotka NA-2 Fm-1 ms-2 kg kg kg C mol-1 C mol-1 J mol-1 K-1 m s-1 J K-1 Js W m-2 K-4 Hz V-1 Wb
Popis Ludolfovo číslo Eulerovo číslo Permeabilita vakua Permitivita vakua Gravitační zrychlení klidová hmotnost elektronu klidová hmotnost protonu klidová hmotnost neuronu Náboj elektronu Avogadrova konstanta Faradayova konstanta Molární plynová konstanta rychlost světla ve vakuu Boltzmanova konstanta Planckova konstanta Stefan-Boltzmanova konst. Josephsonova k. magnetic flux kvantum
Příklad přiřazení do proměnné: LET a [(krok+1)*2/ln(sqrt(2))]
-11-
A. Vzorové skripty Kurzívou psaný text v pravém sloupci je vysvětlující komentář ke kódu skriptu.
A. 1 Jednoduchý ohmmetr AUTHOR=administrator DESCRIPTION=jednoduchy ohmmetr INSTRUMENTS o=Ohm=odpor_dekady==GPIB0::22::INSTR END_INSTRUMENTS
Nepovinná hlavička (bude zapsána do souboru logu úlohy).
Pro přístroj není definován předdefinovaných příkazů.
soubor
VARIABLES krok END_VARIABLES SECTION INIT FOR krok [0] [krok<10] [krok+1]
QUERY o MEAS:RES? LOG NEXT END_SECTION SECTION FAILED COMPLETE END_SECTION
Provede 10 odměrů, po každém odměru bude zvýšena hodnota proměnné „krok“ o jedničku. Pošle příkaz přístroji „o“ a čeká na odpověď (tj. výsledek měření).
V případě havárie dokončí příkaz prováděný přístrojem (přístroji) a skončí.
A. 2 Ověřování zdroje Předpokládejme zadání: Ověřte dvěma voltmetry výstupní napětí zdroje v rozsahu 0V až 6V s krokem po 0,05V v obou směrech (pro zvyšující se napětí a pro snižující se). Odměr napětí proveďte oběma voltmetry současně s využitím funkce GET sběrnice GPIB. #definice pouzitych pristroju instruments _KARTA====GPIB0::INTFC z=x=zdroj==GPIB0::2::INSTR v1=V=voltmetr==GPIB0::22::INSTR v2=V=voltmetr==GPIB0::23::INSTR end_instruments
Pro použití příkazu GET sběrnice gpib je nutné definovat gpib interface
#preddefinovane vypocty calculators odchylka1=V=chyba napeti zdroje=v1-z odchylka2=V=chyba napeti zdroje=v2-z end_calculators
-12-
#pouzite promenne variables krok _pocatek _konec end_variables
Proměnné „počátek“ a „konec“ nebudou logovány
section INIT loglevel [2] failon NEVER let krok [0.05] let pocatek [0.0] let konec [6.0]
Inicializace proměnných podle požadavků zadání.
#zapnuti zdroje send z sour:curr 0.01 send z sour:volt 0.0 send z outp:state on #konfigurace voltmeru send v1 conf:volt:dc send v2 conf:volt:dc send v1 trig:sour bus send v2 trig:sour bus gosub mereni_nahoru gosub mereni_dolu
Provedení měření.
podprogramů
pro
vlastní
#vypnuti rucniho trigrovani send v1 trig:sour imm send v2 trig:sour imm #vypnuti zdroje send z sour:volt 0.0 send z outp:state off complete end_section section FAILED #vypnuti zdroje send z outp:state off send v1 trig:sour imm send v2 trig:sour imm complete end_section section mereni_nahoru for z [pocatek] [z<=konec] [z+krok] send z sour:volt $[z] sleep [1000] ddo v1 init ddo v2 init gpib_get KARTA v1 v2
V případě havárie vypneme zdroj a ruční trigrování přístrojů
Inicializujeme přístroje (do režimu čekání na trigger) Proveme příkaz GET pro intrface „KARTA“ (viz definice přístrojů) na
-13-
ddo v1 FETCH? ddo v2 FETCH? sleep [200] log
„KARTA“ (viz definice přístrojů) na přístrojích „v1“ a „v2“. Z přístrojů přečteme změřené výsledky.
next end_section section mereni_dolu for z [konec] [z>=pocatek] [z-krok] send z sour:volt $[z] sleep [1000] ddo v1 init ddo v2 init gpib_get KARTA v1 v2 ddo v1 FETCH? ddo v2 FETCH? sleep [200] log next end_section
Obdoba měření se zvyšujícím se napětím.
-14-